From b17406df856d3557e6ddf7f55505359aecc061d5 Mon Sep 17 00:00:00 2001 From: Teresa Charlin Date: Mon, 1 Jul 2019 16:22:56 +0100 Subject: IVGCVSW-3366 Add Quantizer support for ResizeLayer Signed-off-by: Teresa Charlin Change-Id: Ibfd4725bb04a5859488e968513cf11ac450fd277 --- src/armnn/InternalTypes.cpp | 1 + src/armnn/QuantizerVisitor.cpp | 9 ++++++++ src/armnn/QuantizerVisitor.hpp | 4 ++++ src/armnn/StaticRangeVisitor.cpp | 9 ++++++++ src/armnn/StaticRangeVisitor.hpp | 4 ++++ src/armnn/test/QuantizerTest.cpp | 48 ++++++++++++++++++++++++++++++++++++++++ 6 files changed, 75 insertions(+) (limited to 'src/armnn') diff --git a/src/armnn/InternalTypes.cpp b/src/armnn/InternalTypes.cpp index f62ce92921..393e744f84 100644 --- a/src/armnn/InternalTypes.cpp +++ b/src/armnn/InternalTypes.cpp @@ -51,6 +51,7 @@ char const* GetLayerTypeAsCString(LayerType type) case LayerType::PreCompiled: return "PreCompiled"; case LayerType::Reshape: return "Reshape"; case LayerType::Rsqrt: return "Rsqrt"; + case LayerType::Resize: return "Resize"; case LayerType::ResizeBilinear: return "ResizeBilinear"; case LayerType::Softmax: return "Softmax"; case LayerType::SpaceToBatchNd: return "SpaceToBatchNd"; diff --git a/src/armnn/QuantizerVisitor.cpp b/src/armnn/QuantizerVisitor.cpp index 292924c8e4..f2e0506fd6 100644 --- a/src/armnn/QuantizerVisitor.cpp +++ b/src/armnn/QuantizerVisitor.cpp @@ -385,6 +385,15 @@ void QuantizerVisitor::VisitResizeBilinearLayer(const IConnectableLayer* layer, SetQuantizedInputConnections(layer, newLayer); } +void QuantizerVisitor::VisitResizeLayer(const IConnectableLayer* layer, + const ResizeDescriptor& resizeDescriptor, + const char* name) +{ + IConnectableLayer* newLayer = m_QuantizedNetwork->AddResizeLayer(resizeDescriptor, name); + RecordLayer(layer, newLayer); + SetQuantizedInputConnections(layer, newLayer); +} + void QuantizerVisitor::VisitRsqrtLayer(const IConnectableLayer* layer, const char* name) { diff --git a/src/armnn/QuantizerVisitor.hpp b/src/armnn/QuantizerVisitor.hpp index c3a2eaffcb..26158c3fbd 100644 --- a/src/armnn/QuantizerVisitor.hpp +++ b/src/armnn/QuantizerVisitor.hpp @@ -114,6 +114,10 @@ public: const ResizeBilinearDescriptor& resizeDesc, const char* name = nullptr) override; + void VisitResizeLayer(const IConnectableLayer* layer, + const ResizeDescriptor& resizeDescriptor, + const char* name = nullptr) override; + void VisitRsqrtLayer(const IConnectableLayer*, const char* name = nullptr) override; diff --git a/src/armnn/StaticRangeVisitor.cpp b/src/armnn/StaticRangeVisitor.cpp index d437a99931..94f0a01997 100644 --- a/src/armnn/StaticRangeVisitor.cpp +++ b/src/armnn/StaticRangeVisitor.cpp @@ -225,6 +225,15 @@ void StaticRangeVisitor::VisitResizeBilinearLayer(const IConnectableLayer* layer ForwardParentParameters(layer); } +void StaticRangeVisitor::VisitResizeLayer(const IConnectableLayer* layer, + const ResizeDescriptor& resizeDescriptor, + const char* name) +{ + boost::ignore_unused(resizeDescriptor); + boost::ignore_unused(name); + ForwardParentParameters(layer); +} + void StaticRangeVisitor::VisitStridedSliceLayer(const IConnectableLayer* layer, const StridedSliceDescriptor& stridedSliceDescriptor, const char* name) diff --git a/src/armnn/StaticRangeVisitor.hpp b/src/armnn/StaticRangeVisitor.hpp index a393a8e18f..37ebec8bfe 100644 --- a/src/armnn/StaticRangeVisitor.hpp +++ b/src/armnn/StaticRangeVisitor.hpp @@ -91,6 +91,10 @@ public: const ResizeBilinearDescriptor& resizeDesc, const char* name = nullptr) override; + void VisitResizeLayer(const IConnectableLayer* layer, + const ResizeDescriptor& resizeDescriptor, + const char* name = nullptr) override; + void VisitStridedSliceLayer(const IConnectableLayer* layer, const StridedSliceDescriptor& stridedSliceDescriptor, const char* name = nullptr) override; diff --git a/src/armnn/test/QuantizerTest.cpp b/src/armnn/test/QuantizerTest.cpp index 4732da393f..57f602dbba 100644 --- a/src/armnn/test/QuantizerTest.cpp +++ b/src/armnn/test/QuantizerTest.cpp @@ -1523,6 +1523,54 @@ BOOST_AUTO_TEST_CASE(QuantizeResizeBilinear) VisitLayersTopologically(quantizedNetworkQSymm16.get(), validatorQSymm16); } +BOOST_AUTO_TEST_CASE(QuantizeResize) +{ + class TestResizeQuantization : public TestLeakyReLuActivationQuantization + { + public: + TestResizeQuantization(const TensorShape& inputShape, const TensorShape& outputShape) + : TestLeakyReLuActivationQuantization(inputShape, outputShape) + {} + + TestResizeQuantization(const QuantizerOptions& options, + const TensorShape& inputShape, + const TensorShape& outputShape) + : TestLeakyReLuActivationQuantization(options, inputShape, outputShape) + {} + + void VisitResizeLayer(const IConnectableLayer* layer, + const ResizeDescriptor& resizeDescriptor, + const char* name = nullptr) override + { + CheckForwardedQuantizationSettings(layer); + } + }; + + INetworkPtr network = INetwork::Create(); + + const TensorShape shape{1U}; + TensorInfo info(shape, DataType::Float32); + + IConnectableLayer* activation = CreateStartOfLeakyReluNetwork(network.get(), info); + + // Add the layer under test + ResizeDescriptor descriptor; + descriptor.m_TargetHeight = 3; + descriptor.m_TargetWidth = 3; + IConnectableLayer* resizeLayer = network->AddResizeLayer(descriptor); + + CompleteLeakyReluNetwork(network.get(), activation, resizeLayer, info); + + INetworkPtr quantizedNetworkQAsymm8 = INetworkQuantizer::Create(network.get())->ExportNetwork(); + TestResizeQuantization validatorQAsymm8(shape, shape); + VisitLayersTopologically(quantizedNetworkQAsymm8.get(), validatorQAsymm8); + + const QuantizerOptions options(DataType::QuantisedSymm16); + INetworkPtr quantizedNetworkQSymm16 = INetworkQuantizer::Create(network.get(), options)->ExportNetwork(); + TestResizeQuantization validatorQSymm16(options, shape, shape); + VisitLayersTopologically(quantizedNetworkQSymm16.get(), validatorQSymm16); +} + BOOST_AUTO_TEST_CASE(QuantizeStridedSlice) { class TestStridedSliceQuantization : public TestLeakyReLuActivationQuantization -- cgit v1.2.1