aboutsummaryrefslogtreecommitdiff
path: root/src/armnn/test/QuantizerTest.cpp
diff options
context:
space:
mode:
authorDerek Lamberti <derek.lamberti@arm.com>2019-02-06 16:20:46 +0000
committerMatteo Martincigh <matteo.martincigh@arm.com>2019-02-06 17:07:51 +0000
commit7205fed8ae4d6f85b350f3612cc43ee7e25176a7 (patch)
treee22e3af9d33dea7fbc9765ce7fb2b347ea356dcf /src/armnn/test/QuantizerTest.cpp
parent949f1255a247f3a1a7eabe8c8f96087d02da1d5a (diff)
downloadarmnn-7205fed8ae4d6f85b350f3612cc43ee7e25176a7.tar.gz
IVGCVSW-2654 Test quantization of addition, input and output
Change-Id: I6c61df213278e6ba65807932548bb2eaa159deba Signed-off-by: Derek Lamberti <derek.lamberti@arm.com>
Diffstat (limited to 'src/armnn/test/QuantizerTest.cpp')
-rw-r--r--src/armnn/test/QuantizerTest.cpp96
1 files changed, 96 insertions, 0 deletions
diff --git a/src/armnn/test/QuantizerTest.cpp b/src/armnn/test/QuantizerTest.cpp
new file mode 100644
index 0000000000..56b1497967
--- /dev/null
+++ b/src/armnn/test/QuantizerTest.cpp
@@ -0,0 +1,96 @@
+//
+// Copyright © 2017 Arm Ltd. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+
+#include <armnn/INetwork.hpp>
+#include <armnn/Tensor.hpp>
+#include <armnn/INetworkQuantizer.hpp>
+#include <armnn/Types.hpp>
+
+#include "../LayerVisitorBase.hpp"
+#include "../Network.hpp"
+#include "../Graph.hpp"
+
+#include <boost/test/unit_test.hpp>
+
+namespace armnn
+{
+BOOST_AUTO_TEST_SUITE(Quantizer)
+
+void VisitLayersTopologically(const INetwork* inputNetwork, ILayerVisitor& visitor)
+{
+ auto network = boost::polymorphic_downcast<const Network*>(inputNetwork);
+
+ auto graph = network->GetGraph().TopologicalSort();
+ for (auto layer : graph)
+ {
+ layer->Accept(visitor);
+ }
+}
+
+BOOST_AUTO_TEST_CASE(QuantizeAddition)
+{
+ class TestQuantization : public LayerVisitorBase<VisitorThrowingPolicy>
+ {
+ public:
+ virtual void VisitAdditionLayer(const IConnectableLayer* layer,
+ const char* name = nullptr)
+ {
+ TensorInfo info = layer->GetOutputSlot(0).GetTensorInfo();
+
+ BOOST_TEST((info.GetDataType() == DataType::QuantisedAsymm8));
+
+ BOOST_TEST((info.GetQuantizationOffset() == 128));
+
+ // Based off current static value [-20.0f, 20.0f]
+ BOOST_CHECK_CLOSE(info.GetQuantizationScale(), 40.0f/255.0f, 0.000001f );
+ }
+
+ virtual void VisitInputLayer(const IConnectableLayer* layer,
+ LayerBindingId id,
+ const char* name = nullptr)
+ {
+ TensorInfo info = layer->GetOutputSlot(0).GetTensorInfo();
+
+ BOOST_TEST((info.GetDataType() == DataType::QuantisedAsymm8));
+
+ BOOST_TEST((info.GetQuantizationOffset() == 128));
+
+ // Based off current default [-15.0f, 15.0f]
+ BOOST_CHECK_CLOSE(info.GetQuantizationScale(), 30.0f/255.0f, 0.000001f );
+ }
+
+ virtual void VisitOutputLayer(const IConnectableLayer* layer,
+ LayerBindingId id,
+ const char* name = nullptr)
+ {}
+ };
+
+ auto network = INetwork::Create();
+
+ // Add the layers
+ IConnectableLayer* input0 = network->AddInputLayer(0);
+ IConnectableLayer* input1 = network->AddInputLayer(1);
+ IConnectableLayer* addition = network->AddAdditionLayer();
+ IConnectableLayer* output = network->AddOutputLayer(2);
+
+ // Establish connections
+ input0->GetOutputSlot(0).Connect(addition->GetInputSlot(0));
+ input1->GetOutputSlot(0).Connect(addition->GetInputSlot(1));
+ addition->GetOutputSlot(0).Connect(output->GetInputSlot(0));
+
+ //Set TensorInfo
+ TensorShape shape{1U};
+ TensorInfo info(shape, DataType::Float32);
+ input0->GetOutputSlot(0).SetTensorInfo(info);
+ input1->GetOutputSlot(0).SetTensorInfo(info);
+ addition->GetOutputSlot(0).SetTensorInfo(info);
+
+ auto quantizedNetwork = INetworkQuantizer::Create(network.get())->ExportNetwork();
+ TestQuantization validator;
+ VisitLayersTopologically(quantizedNetwork.get(), validator);
+}
+
+BOOST_AUTO_TEST_SUITE_END()
+} //namespace armnn