aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrancis Murtagh <francis.murtagh@arm.com>2019-02-18 17:14:10 +0000
committerFrancis Murtagh <francis.murtagh@arm.com>2019-02-18 17:14:10 +0000
commita6b504a8925174739f5a064cf77d1563cca38708 (patch)
tree518cb4dadd9ad9c6b8b351d961865a89daa8d127
parentfc413c0c977e6c9680a2aa6546e977be0a2efdb9 (diff)
downloadarmnn-a6b504a8925174739f5a064cf77d1563cca38708.tar.gz
IVGCVSW-2619 Support static quantization of StridedSlice
Change-Id: Iff0902ea2751b079563ce82fbbec6db5157c3392 Signed-off-by: Francis Murtagh <francis.murtagh@arm.com>
-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.cpp30
5 files changed, 56 insertions, 0 deletions
diff --git a/src/armnn/QuantizerVisitor.cpp b/src/armnn/QuantizerVisitor.cpp
index 8b009c679f..c0cf0dfc5b 100644
--- a/src/armnn/QuantizerVisitor.cpp
+++ b/src/armnn/QuantizerVisitor.cpp
@@ -289,4 +289,13 @@ void QuantizerVisitor::VisitResizeBilinearLayer(const IConnectableLayer* layer,
SetQuantizedInputConnections(layer, newLayer);
}
+void QuantizerVisitor::VisitStridedSliceLayer(const IConnectableLayer* layer,
+ const StridedSliceDescriptor& stridedSliceDescriptor,
+ const char* name)
+{
+ IConnectableLayer* newLayer = m_QuantizedNetwork->AddStridedSliceLayer(stridedSliceDescriptor, name);
+ RecordLayer(layer, newLayer);
+ SetQuantizedInputConnections(layer, newLayer);
+}
+
} //namespace armnn
diff --git a/src/armnn/QuantizerVisitor.hpp b/src/armnn/QuantizerVisitor.hpp
index 2ccbac2ffc..6954ede8c7 100644
--- a/src/armnn/QuantizerVisitor.hpp
+++ b/src/armnn/QuantizerVisitor.hpp
@@ -100,6 +100,10 @@ public:
const ResizeBilinearDescriptor& resizeDesc,
const char* name = nullptr) override;
+ void VisitStridedSliceLayer(const IConnectableLayer* layer,
+ const StridedSliceDescriptor& stridedSliceDescriptor,
+ const char* name = nullptr) override;
+
/// Extract the quantized network
INetworkPtr RetrieveFinalNetwork() { return std::move(m_QuantizedNetwork); }
diff --git a/src/armnn/StaticRangeVisitor.cpp b/src/armnn/StaticRangeVisitor.cpp
index 15f4616988..766b4ad3db 100644
--- a/src/armnn/StaticRangeVisitor.cpp
+++ b/src/armnn/StaticRangeVisitor.cpp
@@ -225,4 +225,13 @@ void StaticRangeVisitor::VisitResizeBilinearLayer(const IConnectableLayer* layer
ForwardParentParameters(layer);
}
+void StaticRangeVisitor::VisitStridedSliceLayer(const IConnectableLayer* layer,
+ const StridedSliceDescriptor& stridedSliceDescriptor,
+ const char* name)
+{
+ boost::ignore_unused(stridedSliceDescriptor);
+ boost::ignore_unused(name);
+ ForwardParentParameters(layer);
+}
+
} //namespace armnn
diff --git a/src/armnn/StaticRangeVisitor.hpp b/src/armnn/StaticRangeVisitor.hpp
index 6984346a7f..1002c860a5 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 VisitStridedSliceLayer(const IConnectableLayer* layer,
+ const StridedSliceDescriptor& stridedSliceDescriptor,
+ const char* name = nullptr) override;
+
private:
/// Set the range for an output slot on a layer
void SetRange(const IConnectableLayer* layer, unsigned int outputIdx, float min, float max);
diff --git a/src/armnn/test/QuantizerTest.cpp b/src/armnn/test/QuantizerTest.cpp
index 21ac3e66ec..3edea9cc6e 100644
--- a/src/armnn/test/QuantizerTest.cpp
+++ b/src/armnn/test/QuantizerTest.cpp
@@ -1153,5 +1153,35 @@ BOOST_AUTO_TEST_CASE(QuantizeResizeBilinear)
VisitLayersTopologically(quantizedNetwork.get(), validator);
}
+class TestStridedSliceQuantization : public TestLeakyReLuActivationQuantization
+{
+public:
+ virtual void VisitStridedSliceLayer(const IConnectableLayer* layer,
+ const StridedSliceDescriptor& desc,
+ const char* name = nullptr)
+ {
+ CheckForwardedQuantizationSettings(layer);
+ }
+};
+
+BOOST_AUTO_TEST_CASE(QuantizeStridedSlice)
+{
+ auto network = INetwork::Create();
+
+ TensorShape shape{3U};
+ TensorInfo info(shape, DataType::Float32);
+
+ IConnectableLayer* activation = CreateStartOfLeakyReluNetwork(network.get(), info);
+
+ // Add the layer under test
+ StridedSliceDescriptor stridedSliceDesc;
+ IConnectableLayer* stridedSlice = network->AddStridedSliceLayer(stridedSliceDesc);
+ CompleteLeakyReluNetwork(network.get(), activation, stridedSlice, info);
+
+ auto quantizedNetwork = INetworkQuantizer::Create(network.get())->ExportNetwork();
+ TestStridedSliceQuantization validator;
+ VisitLayersTopologically(quantizedNetwork.get(), validator);
+}
+
BOOST_AUTO_TEST_SUITE_END()
} // namespace armnn