From 8c7324dd7b8751f31f39ba55aaae5c3b48882f3c Mon Sep 17 00:00:00 2001 From: Narumol Prangnawarat Date: Fri, 31 May 2019 16:42:11 +0100 Subject: IVGCVSW-3148 Add end to end test for Dequantize layer to Ref, Cl, Neon Signed-off-by: Narumol Prangnawarat Change-Id: Iaf9c290c093b7d84949993439568e55433938b4e --- src/backends/backendsCommon/test/CMakeLists.txt | 1 + .../test/DequantizeEndToEndTestImpl.hpp | 101 +++++++++++++++++++++ src/backends/cl/test/ClEndToEndTests.cpp | 14 ++- src/backends/neon/test/NeonEndToEndTests.cpp | 14 ++- src/backends/reference/test/RefEndToEndTests.cpp | 11 +++ 5 files changed, 139 insertions(+), 2 deletions(-) create mode 100644 src/backends/backendsCommon/test/DequantizeEndToEndTestImpl.hpp diff --git a/src/backends/backendsCommon/test/CMakeLists.txt b/src/backends/backendsCommon/test/CMakeLists.txt index 8fbd74d67a..7512c89e9c 100644 --- a/src/backends/backendsCommon/test/CMakeLists.txt +++ b/src/backends/backendsCommon/test/CMakeLists.txt @@ -16,6 +16,7 @@ list(APPEND armnnBackendsCommonUnitTests_sources ConvertFp32ToFp16TestImpl.hpp DebugTestImpl.hpp DequantizeTestImpl.hpp + DequantizeEndToEndTestImpl.hpp DetectionPostProcessLayerTestImpl.hpp DetectionPostProcessTestImpl.hpp EndToEndTestImpl.hpp diff --git a/src/backends/backendsCommon/test/DequantizeEndToEndTestImpl.hpp b/src/backends/backendsCommon/test/DequantizeEndToEndTestImpl.hpp new file mode 100644 index 0000000000..e62415904c --- /dev/null +++ b/src/backends/backendsCommon/test/DequantizeEndToEndTestImpl.hpp @@ -0,0 +1,101 @@ +// +// Copyright © 2017 Arm Ltd. All rights reserved. +// SPDX-License-Identifier: MIT +// + +#pragma once + +#include "CommonTestUtils.hpp" + +#include +#include + +namespace +{ + +template +armnn::INetworkPtr CreateDequantizeNetwork(const armnn::TensorInfo& inputInfo, + const armnn::TensorInfo& outputInfo) +{ + armnn::INetworkPtr net(armnn::INetwork::Create()); + + armnn::IConnectableLayer* inputLayer = net->AddInputLayer(0); + armnn::IConnectableLayer* dequantizeLayer = net->AddDequantizeLayer("Dequantize"); + armnn::IConnectableLayer* outputLayer = net->AddOutputLayer(0, "output"); + Connect(inputLayer, dequantizeLayer, inputInfo, 0, 0); + Connect(dequantizeLayer, outputLayer, outputInfo, 0, 0); + + return net; +} + +template> +void DequantizeEndToEndLayerTestImpl(const std::vector& backends, + const armnn::TensorShape& tensorShape, + const std::vector& input, + const std::vector& expectedOutput, + float scale, + int32_t offset) +{ + armnn::TensorInfo inputInfo(tensorShape, ArmnnType); + armnn::TensorInfo outputInfo(tensorShape, armnn::DataType::Float32); + + inputInfo.SetQuantizationScale(scale); + inputInfo.SetQuantizationOffset(offset); + + // Builds up the structure of the network + armnn::INetworkPtr net = CreateDequantizeNetwork(inputInfo, outputInfo); + + BOOST_TEST_CHECKPOINT("create a network"); + + std::map> inputTensorData = { { 0, input } }; + std::map> expectedOutputData = { { 0, expectedOutput } }; + + EndToEndLayerTestImpl( + move(net), inputTensorData, expectedOutputData, backends); +} + +template> +void DequantizeEndToEndSimple(const std::vector& backends) +{ + const armnn::TensorShape tensorShape({ 1, 2, 2, 4 }); + std::vector inputData = std::vector( + { + 2, 4, 6, 8, + 10, 12, 14, 16, + 18, 20, 22, 24, + 26, 28, 30, 32 + }); + + std::vector expectedOutputData = std::vector( + { + 1.0f, 2.0f, 3.0f, 4.0f, + 5.0f, 6.0f, 7.0f, 8.0f, + 9.0f, 10.0f, 11.0f, 12.0f, + 13.0f, 14.0f, 15.0f, 16.0f + }); + DequantizeEndToEndLayerTestImpl(backends, tensorShape, inputData, expectedOutputData, 0.5f, 0); +}; + +template> +void DequantizeEndToEndOffset(const std::vector& backends) +{ + const armnn::TensorShape tensorShape({ 1, 2, 2, 4 }); + std::vector inputData = std::vector( + { + 3, 5, 7, 9, + 11, 13, 15, 17, + 19, 21, 23, 25, + 27, 29, 31, 33 + }); + + std::vector expectedOutputData = std::vector( + { + 1.0f, 2.0f, 3.0f, 4.0f, + 5.0f, 6.0f, 7.0f, 8.0f, + 9.0f, 10.0f, 11.0f, 12.0f, + 13.0f, 14.0f, 15.0f, 16.0f + }); + DequantizeEndToEndLayerTestImpl(backends, tensorShape, inputData, expectedOutputData, 0.5f, 1); +}; + +} // anonymous namespace diff --git a/src/backends/cl/test/ClEndToEndTests.cpp b/src/backends/cl/test/ClEndToEndTests.cpp index 990a156acf..174f392eea 100644 --- a/src/backends/cl/test/ClEndToEndTests.cpp +++ b/src/backends/cl/test/ClEndToEndTests.cpp @@ -4,8 +4,10 @@ // #include -#include + #include +#include +#include #include #include @@ -49,6 +51,16 @@ BOOST_AUTO_TEST_CASE(ClConcatEndToEndDim3Uint8Test) ConcatDim3EndToEnd(defaultBackends); } +BOOST_AUTO_TEST_CASE(DequantizeEndToEndSimpleTest) +{ + DequantizeEndToEndSimple(defaultBackends); +} + +BOOST_AUTO_TEST_CASE(DequantizeEndToEndOffsetTest) +{ + DequantizeEndToEndOffset(defaultBackends); +} + BOOST_AUTO_TEST_CASE(ClGreaterSimpleEndToEndTest) { const std::vector expectedOutput({ 0, 0, 0, 0, 1, 1, 1, 1, diff --git a/src/backends/neon/test/NeonEndToEndTests.cpp b/src/backends/neon/test/NeonEndToEndTests.cpp index d0aa2339b3..7a22b458c9 100644 --- a/src/backends/neon/test/NeonEndToEndTests.cpp +++ b/src/backends/neon/test/NeonEndToEndTests.cpp @@ -4,8 +4,10 @@ // #include -#include + #include +#include +#include #include #include @@ -123,6 +125,16 @@ BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim3Uint8Test) ConcatDim3EndToEnd(defaultBackends); } +BOOST_AUTO_TEST_CASE(DequantizeEndToEndSimpleTest) +{ + DequantizeEndToEndSimple(defaultBackends); +} + +BOOST_AUTO_TEST_CASE(DequantizeEndToEndOffsetTest) +{ + DequantizeEndToEndOffset(defaultBackends); +} + BOOST_AUTO_TEST_CASE(NeonSplitter1dEndToEndTest) { Splitter1dEndToEnd(defaultBackends); diff --git a/src/backends/reference/test/RefEndToEndTests.cpp b/src/backends/reference/test/RefEndToEndTests.cpp index a0f10286d5..8e75eba021 100644 --- a/src/backends/reference/test/RefEndToEndTests.cpp +++ b/src/backends/reference/test/RefEndToEndTests.cpp @@ -5,6 +5,7 @@ #include +#include #include #include #include @@ -456,6 +457,16 @@ BOOST_AUTO_TEST_CASE(RefGatherMultiDimUint8Test) GatherMultiDimEndToEnd(defaultBackends); } +BOOST_AUTO_TEST_CASE(DequantizeEndToEndSimpleTest) +{ + DequantizeEndToEndSimple(defaultBackends); +} + +BOOST_AUTO_TEST_CASE(DequantizeEndToEndOffsetTest) +{ + DequantizeEndToEndOffset(defaultBackends); +} + BOOST_AUTO_TEST_CASE(RefDetectionPostProcessRegularNmsTest) { std::vector boxEncodings({ -- cgit v1.2.1