diff options
Diffstat (limited to 'src/backends')
-rw-r--r-- | src/backends/backendsCommon/test/CMakeLists.txt | 1 | ||||
-rw-r--r-- | src/backends/backendsCommon/test/ResizeEndToEndTestImpl.hpp | 147 | ||||
-rw-r--r-- | src/backends/reference/test/RefEndToEndTests.cpp | 69 |
3 files changed, 214 insertions, 3 deletions
diff --git a/src/backends/backendsCommon/test/CMakeLists.txt b/src/backends/backendsCommon/test/CMakeLists.txt index caf2dd34b0..bc91bee58e 100644 --- a/src/backends/backendsCommon/test/CMakeLists.txt +++ b/src/backends/backendsCommon/test/CMakeLists.txt @@ -42,6 +42,7 @@ list(APPEND armnnBackendsCommonUnitTests_sources Pooling2dTestImpl.hpp QuantizeHelper.hpp QuantizeTestImpl.hpp + ResizeEndToEndTestImpl.hpp RuntimeTestImpl.hpp SoftmaxTestImpl.hpp SpaceToDepthTestImpl.hpp diff --git a/src/backends/backendsCommon/test/ResizeEndToEndTestImpl.hpp b/src/backends/backendsCommon/test/ResizeEndToEndTestImpl.hpp new file mode 100644 index 0000000000..4bf9d510a6 --- /dev/null +++ b/src/backends/backendsCommon/test/ResizeEndToEndTestImpl.hpp @@ -0,0 +1,147 @@ +// +// Copyright © 2017 Arm Ltd. All rights reserved. +// SPDX-License-Identifier: MIT +// +#pragma once + +#include "QuantizeHelper.hpp" + +#include <armnn/ArmNN.hpp> + +#include <Permute.hpp> +#include <ResolveType.hpp> + +#include <backendsCommon/test/CommonTestUtils.hpp> + +#include <boost/test/unit_test.hpp> + +#include <map> +#include <vector> + +namespace +{ + +armnn::INetworkPtr CreateResizeNetwork(const armnn::ResizeDescriptor& descriptor, + const armnn::TensorInfo& inputInfo, + const armnn::TensorInfo& outputInfo) +{ + using namespace armnn; + + INetworkPtr network(INetwork::Create()); + IConnectableLayer* input = network->AddInputLayer(0, "input"); + IConnectableLayer* resize = network->AddResizeLayer(descriptor, "resize"); + IConnectableLayer* output = network->AddOutputLayer(0, "output"); + + Connect(input, resize, inputInfo, 0, 0); + Connect(resize, output, outputInfo, 0, 0); + + return network; +} + +template<armnn::DataType ArmnnType> +void ResizeEndToEnd(const std::vector<armnn::BackendId>& backends, + armnn::DataLayout dataLayout, + armnn::ResizeMethod resizeMethod) +{ + using namespace armnn; + using T = ResolveType<ArmnnType>; + + constexpr unsigned int inputWidth = 3u; + constexpr unsigned int inputHeight = inputWidth; + + constexpr unsigned int outputWidth = 5u; + constexpr unsigned int outputHeight = outputWidth; + + TensorShape inputShape = MakeTensorShape(1, 1, inputHeight, inputWidth, dataLayout); + TensorShape outputShape = MakeTensorShape(1, 1, outputHeight, outputWidth, dataLayout); + + const float qScale = IsQuantizedType<T>() ? 0.25f : 1.0f; + const int32_t qOffset = IsQuantizedType<T>() ? 50 : 0; + + TensorInfo inputInfo(inputShape, ArmnnType, qScale, qOffset); + TensorInfo outputInfo(outputShape, ArmnnType, qScale, qOffset); + + std::vector<float> inputData = + { + 1.f, 2.f, 3.f, + 4.f, 5.f, 6.f, + 7.f, 8.f, 9.f + }; + + std::vector<float> expectedOutputData; + switch(resizeMethod) + { + case ResizeMethod::Bilinear: + { + expectedOutputData = + { + 1.0f, 1.6f, 2.2f, 2.8f, 3.0f, + 2.8f, 3.4f, 4.0f, 4.6f, 4.8f, + 4.6f, 5.2f, 5.8f, 6.4f, 6.6f, + 6.4f, 7.0f, 7.6f, 8.2f, 8.4f, + 7.0f, 7.6f, 8.2f, 8.8f, 9.0f + }; + break; + } + case ResizeMethod::NearestNeighbor: + { + expectedOutputData = + { + 1.f, 1.f, 2.f, 2.f, 3.f, + 1.f, 1.f, 2.f, 2.f, 3.f, + 4.f, 4.f, 5.f, 5.f, 6.f, + 4.f, 4.f, 5.f, 5.f, 6.f, + 7.f, 7.f, 8.f, 8.f, 9.f + }; + break; + } + default: + { + throw InvalidArgumentException("Unrecognized resize method"); + } + } + + ResizeDescriptor descriptor; + descriptor.m_TargetWidth = outputWidth; + descriptor.m_TargetHeight = outputHeight; + descriptor.m_Method = resizeMethod; + descriptor.m_DataLayout = dataLayout; + + // swizzle data if needed + if (dataLayout == armnn::DataLayout::NHWC) + { + constexpr size_t dataTypeSize = sizeof(float); + const armnn::PermutationVector nchwToNhwc = { 0, 3, 1, 2 }; + + std::vector<float> tmp(inputData.size()); + armnnUtils::Permute(inputInfo.GetShape(), nchwToNhwc, inputData.data(), tmp.data(), dataTypeSize); + inputData = tmp; + } + + // quantize data + std::vector<T> qInputData = QuantizedVector<T>(qScale, qOffset, inputData); + std::vector<T> qExpectedOutputData = QuantizedVector<T>(qScale, qOffset, expectedOutputData); + + INetworkPtr network = CreateResizeNetwork(descriptor, inputInfo, outputInfo); + + EndToEndLayerTestImpl<ArmnnType, ArmnnType>(std::move(network), + { { 0, qInputData } }, + { { 0, qExpectedOutputData } }, + backends); +} + +} // anonymous namespace + +template<armnn::DataType ArmnnType> +void ResizeBilinearEndToEnd(const std::vector<armnn::BackendId>& backends, + armnn::DataLayout dataLayout) +{ + ResizeEndToEnd<ArmnnType>(backends, dataLayout, armnn::ResizeMethod::Bilinear); +} + +template<armnn::DataType ArmnnType> +void ResizeNearestNeighborEndToEnd(const std::vector<armnn::BackendId>& backends, + armnn::DataLayout dataLayout) +{ + ResizeEndToEnd<ArmnnType>(backends, dataLayout, armnn::ResizeMethod::NearestNeighbor); +}
\ No newline at end of file diff --git a/src/backends/reference/test/RefEndToEndTests.cpp b/src/backends/reference/test/RefEndToEndTests.cpp index a528a54cd2..58f1284ebd 100644 --- a/src/backends/reference/test/RefEndToEndTests.cpp +++ b/src/backends/reference/test/RefEndToEndTests.cpp @@ -5,12 +5,13 @@ #include <backendsCommon/test/EndToEndTestImpl.hpp> +#include <backendsCommon/test/ArithmeticTestImpl.hpp> #include <backendsCommon/test/BatchToSpaceNdEndToEndTestImpl.hpp> +#include <backendsCommon/test/ConcatTestImpl.hpp> #include <backendsCommon/test/DequantizeEndToEndTestImpl.hpp> #include <backendsCommon/test/DetectionPostProcessTestImpl.hpp> #include <backendsCommon/test/GatherEndToEndTestImpl.hpp> -#include <backendsCommon/test/ConcatTestImpl.hpp> -#include <backendsCommon/test/ArithmeticTestImpl.hpp> +#include <backendsCommon/test/ResizeEndToEndTestImpl.hpp> #include <backendsCommon/test/SpaceToDepthEndToEndTestImpl.hpp> #include <backendsCommon/test/SplitterEndToEndTestImpl.hpp> #include <backendsCommon/test/TransposeConvolution2dEndToEndTestImpl.hpp> @@ -968,4 +969,66 @@ BOOST_AUTO_TEST_CASE(RefTransposeConvolution2dEndToEndInt16NhwcTest) defaultBackends, armnn::DataLayout::NHWC); } -BOOST_AUTO_TEST_SUITE_END() +// Resize Bilinear +BOOST_AUTO_TEST_CASE(RefResizeBilinearEndToEndFloatNchwTest) +{ + ResizeBilinearEndToEnd<armnn::DataType::Float32>(defaultBackends, armnn::DataLayout::NCHW); +} + +BOOST_AUTO_TEST_CASE(RefResizeBilinearEndToEndUint8NchwTest) +{ + ResizeBilinearEndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends, armnn::DataLayout::NCHW); +} + +BOOST_AUTO_TEST_CASE(RefResizeBilinearEndToEndInt16NchwTest) +{ + ResizeBilinearEndToEnd<armnn::DataType::QuantisedSymm16>(defaultBackends, armnn::DataLayout::NCHW); +} + +BOOST_AUTO_TEST_CASE(RefResizeBilinearEndToEndFloatNhwcTest) +{ + ResizeBilinearEndToEnd<armnn::DataType::Float32>(defaultBackends, armnn::DataLayout::NHWC); +} + +BOOST_AUTO_TEST_CASE(RefResizeBilinearEndToEndUint8NhwcTest) +{ + ResizeBilinearEndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends, armnn::DataLayout::NHWC); +} + +BOOST_AUTO_TEST_CASE(RefResizeBilinearEndToEndInt16NhwcTest) +{ + ResizeBilinearEndToEnd<armnn::DataType::QuantisedSymm16>(defaultBackends, armnn::DataLayout::NHWC); +} + +// Resize NearestNeighbor +BOOST_AUTO_TEST_CASE(RefResizeNearestNeighborEndToEndFloatNchwTest) +{ + ResizeNearestNeighborEndToEnd<armnn::DataType::Float32>(defaultBackends, armnn::DataLayout::NCHW); +} + +BOOST_AUTO_TEST_CASE(RefResizeNearestNeighborEndToEndUint8NchwTest) +{ + ResizeNearestNeighborEndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends, armnn::DataLayout::NCHW); +} + +BOOST_AUTO_TEST_CASE(RefResizeNearestNeighborEndToEndInt16NchwTest) +{ + ResizeNearestNeighborEndToEnd<armnn::DataType::QuantisedSymm16>(defaultBackends, armnn::DataLayout::NCHW); +} + +BOOST_AUTO_TEST_CASE(RefResizeNearestNeighborEndToEndFloatNhwcTest) +{ + ResizeNearestNeighborEndToEnd<armnn::DataType::Float32>(defaultBackends, armnn::DataLayout::NHWC); +} + +BOOST_AUTO_TEST_CASE(RefResizeNearestNeighborEndToEndUint8NhwcTest) +{ + ResizeNearestNeighborEndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends, armnn::DataLayout::NHWC); +} + +BOOST_AUTO_TEST_CASE(RefResizeNearestNeighborEndToEndInt16NhwcTest) +{ + ResizeNearestNeighborEndToEnd<armnn::DataType::QuantisedSymm16>(defaultBackends, armnn::DataLayout::NHWC); +} + +BOOST_AUTO_TEST_SUITE_END()
\ No newline at end of file |