From 1ac690a12d4952acb8c06b41f0492ed47524b1f1 Mon Sep 17 00:00:00 2001 From: Mike Kelly Date: Tue, 17 Nov 2020 11:41:38 +0000 Subject: MLCE-278-IVGCVSW-5530 FusedActivation issues * GetOverriddenDataType was returning incorrect quantization data * Optimized CpuAcc and GpuAcc SubGraphs fail validation on debug versions of ArmNN Signed-off-by: Mike Kelly Change-Id: Ie97935cc2af67bd9aeebc94b63dafa458bd1aa8c --- src/backends/neon/NeonBackend.cpp | 37 +++++++++++++++++++++++++++++++------ 1 file changed, 31 insertions(+), 6 deletions(-) (limited to 'src/backends/neon') diff --git a/src/backends/neon/NeonBackend.cpp b/src/backends/neon/NeonBackend.cpp index 150bc345db..240456f44b 100644 --- a/src/backends/neon/NeonBackend.cpp +++ b/src/backends/neon/NeonBackend.cpp @@ -136,7 +136,16 @@ OptimizationViews NeonBackend::OptimizeSubgraphView(const SubgraphView& subgraph OptimizationViews optimizationViews; auto it = subgraph.end(); + std::map untouched; + while (it != subgraph.begin()) + { + --it; + Layer& base = **it; + untouched.insert({base.GetGuid(), &base}); + } + + it = subgraph.end(); while (it != subgraph.begin()) { --it; @@ -174,9 +183,7 @@ OptimizationViews NeonBackend::OptimizeSubgraphView(const SubgraphView& subgraph if (baseLayer->GetParameters().m_BiasEnabled) { - biases = GetOverriddenDataType(baseLayer->m_Bias->GetTensorInfo(), - GetOptionalBiasTypeFromWeightsType( - baseLayer->m_Weight->GetTensorInfo().GetDataType())); + biases = baseLayer->m_Bias->GetTensorInfo(); } arm_compute::Status status = NeonConvolution2dWorkloadValidate( @@ -195,6 +202,8 @@ OptimizationViews NeonBackend::OptimizeSubgraphView(const SubgraphView& subgraph activationLayer, activationDesc, name); + untouched.erase(baseLayer->GetGuid()); + untouched.erase(activationLayer->GetGuid()); } } else if (base.GetType() == LayerType::DepthwiseConvolution2d) @@ -206,9 +215,7 @@ OptimizationViews NeonBackend::OptimizeSubgraphView(const SubgraphView& subgraph if (baseLayer->GetParameters().m_BiasEnabled) { - biases = GetOverriddenDataType(baseLayer->m_Bias->GetTensorInfo(), - GetOptionalBiasTypeFromWeightsType( - baseLayer->m_Weight->GetTensorInfo().GetDataType())); + biases = baseLayer->m_Bias->GetTensorInfo(); } arm_compute::Status status = NeonDepthwiseConvolutionWorkloadValidate( @@ -226,6 +233,8 @@ OptimizationViews NeonBackend::OptimizeSubgraphView(const SubgraphView& subgraph activationLayer, activationDesc, name); + untouched.erase(baseLayer->GetGuid()); + untouched.erase(activationLayer->GetGuid()); } } else if (base.GetType() == LayerType::FullyConnected) @@ -247,6 +256,8 @@ OptimizationViews NeonBackend::OptimizeSubgraphView(const SubgraphView& subgraph activationLayer, activationDesc, name); + untouched.erase(baseLayer->GetGuid()); + untouched.erase(activationLayer->GetGuid()); } } else if (base.GetType() == LayerType::BatchNormalization) @@ -278,6 +289,8 @@ OptimizationViews NeonBackend::OptimizeSubgraphView(const SubgraphView& subgraph replacementLayer->m_Gamma = std::move(baseLayer->m_Gamma); replacementLayer->m_Mean = std::move(baseLayer->m_Mean); replacementLayer->m_Variance = std::move(baseLayer->m_Variance); + untouched.erase(baseLayer->GetGuid()); + untouched.erase(activationLayer->GetGuid()); } } else if (base.GetType() == LayerType::Addition) @@ -297,6 +310,8 @@ OptimizationViews NeonBackend::OptimizeSubgraphView(const SubgraphView& subgraph activationLayer, activationDesc, name); + untouched.erase(baseLayer->GetGuid()); + untouched.erase(activationLayer->GetGuid()); } } else if (base.GetType() == LayerType::Division) @@ -316,6 +331,8 @@ OptimizationViews NeonBackend::OptimizeSubgraphView(const SubgraphView& subgraph activationLayer, activationDesc, name); + untouched.erase(baseLayer->GetGuid()); + untouched.erase(activationLayer->GetGuid()); } } else if (base.GetType() == LayerType::Multiplication) @@ -335,6 +352,8 @@ OptimizationViews NeonBackend::OptimizeSubgraphView(const SubgraphView& subgraph activationLayer, activationDesc, name); + untouched.erase(baseLayer->GetGuid()); + untouched.erase(activationLayer->GetGuid()); } } else if (base.GetType() == LayerType::Subtraction) @@ -354,6 +373,8 @@ OptimizationViews NeonBackend::OptimizeSubgraphView(const SubgraphView& subgraph activationLayer, activationDesc, name); + untouched.erase(baseLayer->GetGuid()); + untouched.erase(activationLayer->GetGuid()); } } } @@ -367,6 +388,10 @@ OptimizationViews NeonBackend::OptimizeSubgraphView(const SubgraphView& subgraph { optimizationViews.AddUntouchedSubgraph(SubgraphView(subgraph)); } + else + { + ReportUntouchedLayers(optimizationViews, untouched); + } return optimizationViews; } -- cgit v1.2.1