aboutsummaryrefslogtreecommitdiff
path: root/src/backends
diff options
context:
space:
mode:
authorAron Virginas-Tar <Aron.Virginas-Tar@arm.com>2019-07-01 16:12:58 +0100
committerÁron Virginás-Tar <aron.virginas-tar@arm.com>2019-07-01 18:03:49 +0000
commitfe15eff9ed2007cd10800ec356ce2e8ea4b5f9d0 (patch)
treed1d9c3c74da03bdfda17e61b6545234d904c1c50 /src/backends
parentb17406df856d3557e6ddf7f55505359aecc061d5 (diff)
downloadarmnn-fe15eff9ed2007cd10800ec356ce2e8ea4b5f9d0.tar.gz
IVGCVSW-3361 Add end-to-end tests for Resize on CpuRef
Signed-off-by: Aron Virginas-Tar <Aron.Virginas-Tar@arm.com> Change-Id: Ie89dc91a2fc0281d58c6f1ccef65ed1228d33ccb
Diffstat (limited to 'src/backends')
-rw-r--r--src/backends/backendsCommon/test/CMakeLists.txt1
-rw-r--r--src/backends/backendsCommon/test/ResizeEndToEndTestImpl.hpp147
-rw-r--r--src/backends/reference/test/RefEndToEndTests.cpp69
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