aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTeresa Charlin <teresa.charlinreyes@arm.com>2019-07-01 16:22:56 +0100
committerTeresa Charlin <teresa.charlinreyes@arm.com>2019-07-01 16:22:56 +0100
commitb17406df856d3557e6ddf7f55505359aecc061d5 (patch)
tree653e4dc7146cb115e8e92e129dfe55b7c462fe44
parent970f43b078eba91c66fb64eadbc9803661ffcda8 (diff)
downloadarmnn-b17406df856d3557e6ddf7f55505359aecc061d5.tar.gz
IVGCVSW-3366 Add Quantizer support for ResizeLayer
Signed-off-by: Teresa Charlin <teresa.charlinreyes@arm.com> Change-Id: Ibfd4725bb04a5859488e968513cf11ac450fd277
-rw-r--r--src/armnn/InternalTypes.cpp1
-rw-r--r--src/armnn/QuantizerVisitor.cpp9
-rw-r--r--src/armnn/QuantizerVisitor.hpp4
-rw-r--r--src/armnn/StaticRangeVisitor.cpp9
-rw-r--r--src/armnn/StaticRangeVisitor.hpp4
-rw-r--r--src/armnn/test/QuantizerTest.cpp48
6 files changed, 75 insertions, 0 deletions
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