diff options
author | Teresa Charlin <teresa.charlinreyes@arm.com> | 2021-01-18 18:07:57 +0000 |
---|---|---|
committer | TeresaARM <teresa.charlinreyes@arm.com> | 2021-01-21 17:36:32 +0000 |
commit | d672f5d4386dc0545d2e484ce85b76d53edb6bc9 (patch) | |
tree | 3c836d43cd8396aeb6d8ffee7dfe4ad4b21ed4fb /src | |
parent | 19a1c0347709506c5ad5c1b7f647a5af4a30fba0 (diff) | |
download | armnn-d672f5d4386dc0545d2e484ce85b76d53edb6bc9.tar.gz |
IVGCVSW-5616 Don't fuse activation if quantization parameters are different
Signed-off-by: Teresa Charlin <teresa.charlinreyes@arm.com>
Change-Id: I6504e922113aa9e397f53e570ebcf47e1f133945
Diffstat (limited to 'src')
-rw-r--r-- | src/backends/aclCommon/ArmComputeSubgraphUtils.hpp | 27 | ||||
-rw-r--r-- | src/backends/cl/ClBackend.cpp | 3 | ||||
-rw-r--r-- | src/backends/neon/NeonBackend.cpp | 3 |
3 files changed, 31 insertions, 2 deletions
diff --git a/src/backends/aclCommon/ArmComputeSubgraphUtils.hpp b/src/backends/aclCommon/ArmComputeSubgraphUtils.hpp index 860d88df80..a0fca46330 100644 --- a/src/backends/aclCommon/ArmComputeSubgraphUtils.hpp +++ b/src/backends/aclCommon/ArmComputeSubgraphUtils.hpp @@ -45,6 +45,33 @@ SubgraphView::OutputSlots CreateOutputsFrom(const std::vector<Layer*>& layers) return result; } +bool checkDataTypeInputandOutput(const Layer& layer) +{ + auto inputInfo = layer.GetInputSlot(0).GetConnection()->GetTensorInfo(); + auto outputInfo = layer.GetOutputSlot(0).GetTensorInfo(); + bool sameDataType = (inputInfo.GetDataType() == outputInfo.GetDataType()); + + // Check is same quantization info (same scale and offset) + if (sameDataType) + { + if (IsQuantizedType(inputInfo.GetDataType())) + { + bool sameScale = (inputInfo.GetQuantizationScale() == outputInfo.GetQuantizationScale()); + bool sameOffset = (inputInfo.GetQuantizationOffset() == outputInfo.GetQuantizationOffset()); + + return (sameScale && sameOffset); + } + else + { + return true; + } + } + else + { + return false; + } +} + } // namespace inline void ReportUntouchedLayers(OptimizationViews& optimizationViews, std::map<LayerGuid, Layer*> untouched) diff --git a/src/backends/cl/ClBackend.cpp b/src/backends/cl/ClBackend.cpp index 80c7969e91..928760ef5f 100644 --- a/src/backends/cl/ClBackend.cpp +++ b/src/backends/cl/ClBackend.cpp @@ -187,7 +187,8 @@ OptimizationViews ClBackend::OptimizeSubgraphView(const SubgraphView& subgraph, { for (auto&& childInput : output->GetConnections()) { - if (childInput->GetOwningLayer().GetType() == LayerType::Activation) + if ((childInput->GetOwningLayer().GetType() == LayerType::Activation) && + (checkDataTypeInputandOutput(childInput->GetOwningLayer()))) { Layer& child = childInput->GetOwningLayer(); diff --git a/src/backends/neon/NeonBackend.cpp b/src/backends/neon/NeonBackend.cpp index 240456f44b..d48b32bb45 100644 --- a/src/backends/neon/NeonBackend.cpp +++ b/src/backends/neon/NeonBackend.cpp @@ -163,7 +163,8 @@ OptimizationViews NeonBackend::OptimizeSubgraphView(const SubgraphView& subgraph { for (auto&& childInput : output->GetConnections()) { - if (childInput->GetOwningLayer().GetType() == LayerType::Activation) + if ((childInput->GetOwningLayer().GetType() == LayerType::Activation) && + (checkDataTypeInputandOutput(childInput->GetOwningLayer()))) { Layer& child = childInput->GetOwningLayer(); |