diff options
Diffstat (limited to 'src/backends')
-rw-r--r-- | src/backends/backendsCommon/test/CMakeLists.txt | 1 | ||||
-rw-r--r-- | src/backends/backendsCommon/test/PreluEndToEndTestImpl.hpp | 94 | ||||
-rw-r--r-- | src/backends/reference/test/RefEndToEndTests.cpp | 16 |
3 files changed, 111 insertions, 0 deletions
diff --git a/src/backends/backendsCommon/test/CMakeLists.txt b/src/backends/backendsCommon/test/CMakeLists.txt index bc91bee58e..7c2d0ebfa8 100644 --- a/src/backends/backendsCommon/test/CMakeLists.txt +++ b/src/backends/backendsCommon/test/CMakeLists.txt @@ -40,6 +40,7 @@ list(APPEND armnnBackendsCommonUnitTests_sources OptimizationViewsTests.cpp PermuteTestImpl.hpp Pooling2dTestImpl.hpp + PreluEndToEndTestImpl.hpp QuantizeHelper.hpp QuantizeTestImpl.hpp ResizeEndToEndTestImpl.hpp diff --git a/src/backends/backendsCommon/test/PreluEndToEndTestImpl.hpp b/src/backends/backendsCommon/test/PreluEndToEndTestImpl.hpp new file mode 100644 index 0000000000..0dc1e78ced --- /dev/null +++ b/src/backends/backendsCommon/test/PreluEndToEndTestImpl.hpp @@ -0,0 +1,94 @@ +// +// Copyright © 2017 Arm Ltd. All rights reserved. +// SPDX-License-Identifier: MIT +// +#pragma once + +#include <ResolveType.hpp> + +#include <armnn/INetwork.hpp> + +#include <backendsCommon/test/CommonTestUtils.hpp> + +namespace +{ +template<typename armnn::DataType DataType> +INetworkPtr CreatePreluNetwork(const armnn::TensorInfo& inputInfo, + const armnn::TensorInfo& alphaInfo, + const armnn::TensorInfo& outputInfo) +{ + using namespace armnn; + + INetworkPtr net(INetwork::Create()); + + IConnectableLayer* input = net->AddInputLayer(0, "input"); + IConnectableLayer* alpha = net->AddInputLayer(1, "alpha"); + IConnectableLayer* prelu = net->AddPreluLayer("Prelu"); + IConnectableLayer* output = net->AddOutputLayer(0, "output"); + + Connect(input, prelu, inputInfo, 0, 0); + Connect(alpha, prelu, alphaInfo, 0, 1); + Connect(prelu, output, outputInfo, 0, 0); + + return net; +} + +template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>> +void PreluEndToEnd(const std::vector<BackendId>& backends, + const std::vector<T>& inputData, + const std::vector<T>& alphaData, + const std::vector<T>& expectedOutputData, + const float qScale , + const int32_t qOffset) +{ + using namespace armnn; + + armnn::TensorInfo inputInfo({ 2, 2, 2, 1 }, ArmnnType); + armnn::TensorInfo alphaInfo({ 1, 2, 2, 1 }, ArmnnType); + armnn::TensorInfo outputInfo({ 2, 2, 2, 1 }, ArmnnType); + + inputInfo.SetQuantizationOffset(qOffset); + inputInfo.SetQuantizationScale(qScale); + alphaInfo.SetQuantizationOffset(qOffset); + alphaInfo.SetQuantizationScale(qScale); + outputInfo.SetQuantizationOffset(qOffset); + outputInfo.SetQuantizationScale(qScale); + + INetworkPtr net = CreatePreluNetwork<ArmnnType>(inputInfo, alphaInfo, outputInfo); + + BOOST_TEST_CHECKPOINT("Create a network"); + + std::map<int, std::vector<T>> inputTensorData = { { 0, inputData }, { 1, alphaData} }; + std::map<int, std::vector<T>> expectedOutputTensorData = { { 0, expectedOutputData } }; + + EndToEndLayerTestImpl<ArmnnType, ArmnnType>(move(net), + inputTensorData, + expectedOutputTensorData, + backends); +} + +template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>> +void PreluEndToEndPositiveTest(const std::vector<BackendId>& backends, const float qScale = 1.0f, + const int32_t qOffset = 2) +{ + std::vector<T> inputData{ 1, 2, 3, 4, 5, 6, 7, 8 }; + std::vector<T> alphaData{ 2, 1, 1, 1 }; + + std::vector<T> expectedOutputData{ 2, 2, 3, 4, 5, 6, 7, 8 }; + + PreluEndToEnd<ArmnnType>(backends, inputData, alphaData, expectedOutputData, qScale, qOffset); +} + +template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>> +void PreluEndToEndNegativeTest(const std::vector<BackendId>& backends, const float qScale = 1.0f, + const int32_t qOffset = 0) +{ + std::vector<T> inputData{ 1, -2, 3, 4, 5, 6, 7, 8 }; + std::vector<T> alphaData{ 1, 2, 1, 1 }; + + std::vector<T> expectedOutputData{ 1, -4, 3, 4, 5, 6, 7, 8 }; + + PreluEndToEnd<ArmnnType>(backends, inputData, alphaData, expectedOutputData, qScale, qOffset); +} + +} // anonymous namespace
\ No newline at end of file diff --git a/src/backends/reference/test/RefEndToEndTests.cpp b/src/backends/reference/test/RefEndToEndTests.cpp index 3e8a4690dc..f81f1a708f 100644 --- a/src/backends/reference/test/RefEndToEndTests.cpp +++ b/src/backends/reference/test/RefEndToEndTests.cpp @@ -11,6 +11,7 @@ #include <backendsCommon/test/DequantizeEndToEndTestImpl.hpp> #include <backendsCommon/test/DetectionPostProcessTestImpl.hpp> #include <backendsCommon/test/GatherEndToEndTestImpl.hpp> +#include <backendsCommon/test/PreluEndToEndTestImpl.hpp> #include <backendsCommon/test/ResizeEndToEndTestImpl.hpp> #include <backendsCommon/test/SpaceToDepthEndToEndTestImpl.hpp> #include <backendsCommon/test/SplitterEndToEndTestImpl.hpp> @@ -715,6 +716,21 @@ BOOST_AUTO_TEST_CASE(RefDetectionPostProcessFastNmsUint8Test) 1.0f, 1, 0.01f, 0, 0.5f, 0); } +BOOST_AUTO_TEST_CASE(RefPreluEndToEndTestFloat32) +{ + PreluEndToEndNegativeTest<armnn::DataType::Float32>(defaultBackends); +} + +BOOST_AUTO_TEST_CASE(RefPreluEndToEndTestUint8) +{ + PreluEndToEndPositiveTest<armnn::DataType::QuantisedAsymm8>(defaultBackends); +} + +BOOST_AUTO_TEST_CASE(RefPreluEndToEndTestQSymm16) +{ + PreluEndToEndPositiveTest<armnn::DataType::QuantisedSymm16>(defaultBackends); +} + BOOST_AUTO_TEST_CASE(RefSpaceToDepthNHWCEndToEndTest1) { SpaceToDepthNHWCEndToEndTest1(defaultBackends); |