From e24e3cd94d0f5d6d8dbd5fec3e2d1e9385c6ff81 Mon Sep 17 00:00:00 2001 From: Francis Murtagh Date: Tue, 25 Jun 2019 14:41:55 +0100 Subject: IVGCVSW-3347 Add EndToEnd test for BatchToSpaceNd * Add Simple and complex end to end tests based on tensorflow.org examples Change-Id: Ifa758a48cf5ea09f9be7945859cd37377dbb9465 Signed-off-by: Francis Murtagh --- .../test/BatchToSpaceNdEndToEndTestImpl.hpp | 119 +++++++++++++++++++++ src/backends/reference/test/RefEndToEndTests.cpp | 61 +++++++++++ 2 files changed, 180 insertions(+) create mode 100644 src/backends/backendsCommon/test/BatchToSpaceNdEndToEndTestImpl.hpp (limited to 'src/backends') diff --git a/src/backends/backendsCommon/test/BatchToSpaceNdEndToEndTestImpl.hpp b/src/backends/backendsCommon/test/BatchToSpaceNdEndToEndTestImpl.hpp new file mode 100644 index 0000000000..d1be409480 --- /dev/null +++ b/src/backends/backendsCommon/test/BatchToSpaceNdEndToEndTestImpl.hpp @@ -0,0 +1,119 @@ +// +// Copyright © 2017 Arm Ltd. All rights reserved. +// SPDX-License-Identifier: MIT +// +#pragma once + +#include + +#include + +#include + +#include + +#include + +namespace +{ + +template +INetworkPtr CreateBatchToSpaceNdNetwork(const armnn::TensorShape& inputShape, + const armnn::TensorShape& outputShape, + std::vector& blockShape, + std::vector>& crops, + armnn::DataLayout dataLayout, + const float qScale = 1.0f, + const int32_t qOffset = 0) +{ + using namespace armnn; + // Builds up the structure of the network. + INetworkPtr net(INetwork::Create()); + + TensorInfo inputTensorInfo(inputShape, DataType, qScale, qOffset); + TensorInfo outputTensorInfo(outputShape, DataType, qScale, qOffset); + + BatchToSpaceNdDescriptor batchToSpaceNdDesc(blockShape, crops); + batchToSpaceNdDesc.m_DataLayout = dataLayout; + + IConnectableLayer* batchToSpaceNd = net->AddBatchToSpaceNdLayer(batchToSpaceNdDesc, "batchToSpaceNd"); + IConnectableLayer* input = net->AddInputLayer(0, "input"); + IConnectableLayer* output = net->AddOutputLayer(0, "output"); + + Connect(batchToSpaceNd, output, outputTensorInfo, 0, 0); + Connect(input, batchToSpaceNd, inputTensorInfo, 0, 0); + + return net; +} + +template +void BatchToSpaceNdEndToEnd(const std::vector& backends, armnn::DataLayout dataLayout) +{ + using namespace armnn; + using T = ResolveType; + + std::vector blockShape {2, 2}; + std::vector> crops = {{0, 0}, {0, 0}}; + const TensorShape& inputShape = { 4, 1, 1, 1 }; + const TensorShape& outputShape = (dataLayout == DataLayout::NCHW) + ? std::initializer_list({ 1, 1, 2, 2 }) + : std::initializer_list({ 1, 2, 2, 1 }); + + // Builds up the structure of the network + INetworkPtr net = CreateBatchToSpaceNdNetwork(inputShape, outputShape, blockShape, crops, dataLayout); + + BOOST_TEST_CHECKPOINT("create a network"); + + // Creates structures for input & output. + std::vector inputData{ 1, 2, 3, 4 }; + + std::vector expectedOutput{ 1, 2, 3, 4 }; + + std::map> inputTensorData = { { 0, inputData } }; + std::map> expectedOutputData = { { 0, expectedOutput } }; + + EndToEndLayerTestImpl(move(net), inputTensorData, expectedOutputData, backends); +} + +template +void BatchToSpaceNdComplexEndToEnd(const std::vector& backends, armnn::DataLayout dataLayout) +{ + using namespace armnn; + using T = ResolveType; + + std::vector blockShape {2, 2}; + std::vector> crops = {{0, 0}, {2, 0}}; + const TensorShape& inputShape = (dataLayout == DataLayout::NCHW) + ? std::initializer_list({ 8, 1, 1, 3 }) + : std::initializer_list({ 8, 1, 3, 1 }); + const TensorShape& outputShape = (dataLayout == DataLayout::NCHW) + ? std::initializer_list({ 2, 1, 2, 4 }) + : std::initializer_list({ 2, 2, 4, 1 }); + + // Builds up the structure of the network + INetworkPtr net = CreateBatchToSpaceNdNetwork(inputShape, outputShape, blockShape, crops, dataLayout); + + BOOST_TEST_CHECKPOINT("create a network"); + + // Creates structures for input & output. + std::vector inputData{ + 0, 1, 3, 0, 9, 11, + 0, 2, 4, 0, 10, 12, + 0, 5, 7, 0, 13, 15, + 0, 6, 8, 0, 14, 16 + }; + + std::vector expectedOutput{ + 1, 2, 3, 4, + 5, 6, 7, 8, + 9, 10, 11, 12, + 13, 14, 15, 16 + }; + + std::map> inputTensorData = { { 0, inputData } }; + std::map> expectedOutputData = { { 0, expectedOutput } }; + + EndToEndLayerTestImpl(move(net), inputTensorData, expectedOutputData, backends); +} + +} // anonymous namespace diff --git a/src/backends/reference/test/RefEndToEndTests.cpp b/src/backends/reference/test/RefEndToEndTests.cpp index c186c03984..4d56952e27 100644 --- a/src/backends/reference/test/RefEndToEndTests.cpp +++ b/src/backends/reference/test/RefEndToEndTests.cpp @@ -5,6 +5,7 @@ #include +#include #include #include #include @@ -398,6 +399,66 @@ BOOST_AUTO_TEST_CASE(RefGreaterBroadcastEndToEndUint8Test) expectedOutput); } +BOOST_AUTO_TEST_CASE(RefBatchToSpaceNdEndToEndFloat32NHWCTest) +{ + BatchToSpaceNdEndToEnd(defaultBackends, armnn::DataLayout::NHWC); +} + +BOOST_AUTO_TEST_CASE(RefBatchToSpaceNdEndToEndUint8NHWCTest) +{ + BatchToSpaceNdEndToEnd(defaultBackends, armnn::DataLayout::NHWC); +} + +BOOST_AUTO_TEST_CASE(RefBatchToSpaceNdEndToEndQSymm16NHWCTest) +{ + BatchToSpaceNdEndToEnd(defaultBackends, armnn::DataLayout::NHWC); +} + +BOOST_AUTO_TEST_CASE(RefBatchToSpaceNdEndToEndFloat32NCHWTest) +{ + BatchToSpaceNdEndToEnd(defaultBackends, armnn::DataLayout::NCHW); +} + +BOOST_AUTO_TEST_CASE(RefBatchToSpaceNdEndToEndUint8NCHWTest) +{ + BatchToSpaceNdEndToEnd(defaultBackends, armnn::DataLayout::NCHW); +} + +BOOST_AUTO_TEST_CASE(RefBatchToSpaceNdEndToEndQSymm16NCHWTest) +{ + BatchToSpaceNdEndToEnd(defaultBackends, armnn::DataLayout::NCHW); +} + +BOOST_AUTO_TEST_CASE(RefBatchToSpaceNdEndToEndComplexFloat32NHWCTest) +{ + BatchToSpaceNdComplexEndToEnd(defaultBackends, armnn::DataLayout::NHWC); +} + +BOOST_AUTO_TEST_CASE(RefBatchToSpaceNdEndToEndComplexUint8NHWCTest) +{ + BatchToSpaceNdComplexEndToEnd(defaultBackends, armnn::DataLayout::NHWC); +} + +BOOST_AUTO_TEST_CASE(RefBatchToSpaceNdEndToEndComplexQSymm16NHWCTest) +{ + BatchToSpaceNdComplexEndToEnd(defaultBackends, armnn::DataLayout::NHWC); +} + +BOOST_AUTO_TEST_CASE(RefBatchToSpaceNdEndToEndComplexFloat32NCHWTest) +{ + BatchToSpaceNdComplexEndToEnd(defaultBackends, armnn::DataLayout::NCHW); +} + +BOOST_AUTO_TEST_CASE(RefBatchToSpaceNdEndToEndComplexUint8NCHWTest) +{ + BatchToSpaceNdComplexEndToEnd(defaultBackends, armnn::DataLayout::NCHW); +} + +BOOST_AUTO_TEST_CASE(RefBatchToSpaceNdEndToEndComplexQSymm16NCHWTest) +{ + BatchToSpaceNdComplexEndToEnd(defaultBackends, armnn::DataLayout::NCHW); +} + BOOST_AUTO_TEST_CASE(RefConcatEndToEndDim0Test) { ConcatDim0EndToEnd(defaultBackends); -- cgit v1.2.1