diff options
author | Mike Kelly <mike.kelly@arm.com> | 2020-11-17 11:41:38 +0000 |
---|---|---|
committer | TeresaARM <teresa.charlinreyes@arm.com> | 2020-11-17 12:57:52 +0000 |
commit | 1ac690a12d4952acb8c06b41f0492ed47524b1f1 (patch) | |
tree | 2a9e5c8c6e68215e4a579b9e47aac132439a5e8e /src/backends/neon | |
parent | 91c4171421633b3ff9764bd586f43137aef0ff1a (diff) | |
download | armnn-1ac690a12d4952acb8c06b41f0492ed47524b1f1.tar.gz |
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 <mike.kelly@arm.com>
Change-Id: Ie97935cc2af67bd9aeebc94b63dafa458bd1aa8c
Diffstat (limited to 'src/backends/neon')
-rw-r--r-- | src/backends/neon/NeonBackend.cpp | 37 |
1 files changed, 31 insertions, 6 deletions
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,11 +136,20 @@ OptimizationViews NeonBackend::OptimizeSubgraphView(const SubgraphView& subgraph OptimizationViews optimizationViews; auto it = subgraph.end(); + std::map<LayerGuid, Layer*> untouched; while (it != subgraph.begin()) { --it; Layer& base = **it; + untouched.insert({base.GetGuid(), &base}); + } + + it = subgraph.end(); + while (it != subgraph.begin()) + { + --it; + Layer& base = **it; if ((base.GetType() == LayerType::DepthwiseConvolution2d || base.GetType() == LayerType::Convolution2d || base.GetType() == LayerType::BatchNormalization || base.GetType() == LayerType::FullyConnected @@ -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; } |