From 6059784511ce472c9df2289582ad13a0e2aa160e Mon Sep 17 00:00:00 2001 From: James Conroy Date: Tue, 2 Jul 2019 10:57:56 +0100 Subject: IVGCVSW-3391 Add SpaceToDepth CreateWorkload and EndToEnd tests * Refactored existing EndToEnd tests, moved tests in reference to backendsCommon. * Enabled EndToEnd tests for CL. * Added new Ref/CL CreateWorkload tests. Signed-off-by: James Conroy Change-Id: I0a5e52961a8aca540d43241a3805d19c9c6ff56c --- .../test/SpaceToDepthEndToEndTestImpl.hpp | 138 +++++++++++++++++++-- src/backends/cl/test/ClCreateWorkloadTests.cpp | 37 ++++++ src/backends/cl/test/ClEndToEndTests.cpp | 21 ++++ .../reference/test/RefCreateWorkloadTests.cpp | 28 +++++ src/backends/reference/test/RefEndToEndTests.cpp | 104 +--------------- 5 files changed, 219 insertions(+), 109 deletions(-) (limited to 'src/backends') diff --git a/src/backends/backendsCommon/test/SpaceToDepthEndToEndTestImpl.hpp b/src/backends/backendsCommon/test/SpaceToDepthEndToEndTestImpl.hpp index 456af4cbbb..fd442a88e8 100644 --- a/src/backends/backendsCommon/test/SpaceToDepthEndToEndTestImpl.hpp +++ b/src/backends/backendsCommon/test/SpaceToDepthEndToEndTestImpl.hpp @@ -81,26 +81,146 @@ void SpaceToDepthEndToEnd(const std::vector& backends, { using namespace armnn; - if (dataLayout == armnn::DataLayout::NCHW){ + if (dataLayout == armnn::DataLayout::NCHW) + { PermuteDataToNCHW(backends, dataLayout, inputTensorInfo, inputData); PermuteDataToNCHW(backends, dataLayout, outputTensorInfo, expectedOutputData); } // Builds up the structure of the network - INetworkPtr net = CreateSpaceToDepthNetwork(inputTensorInfo.GetShape(), - outputTensorInfo.GetShape(), - dataLayout, - blockSize); + INetworkPtr net = CreateSpaceToDepthNetwork( + inputTensorInfo.GetShape(), + outputTensorInfo.GetShape(), + dataLayout, + blockSize); BOOST_TEST_CHECKPOINT("Create a network"); std::map> inputTensorData = { { 0, inputData } }; std::map> expectedOutputTensorData = { { 0, expectedOutputData } }; - EndToEndLayerTestImpl(move(net), - inputTensorData, - expectedOutputTensorData, - backends); + EndToEndLayerTestImpl( + move(net), + inputTensorData, + expectedOutputTensorData, + backends); +} + +void SpaceToDepthNHWCEndToEndTest1(const std::vector& defaultBackends) +{ + const unsigned int blockSize = 2; + + armnn::TensorShape inputShape{1, 2, 2, 1}; + armnn::TensorInfo inputTensorInfo(inputShape, armnn::DataType::Float32); + + armnn::TensorShape outputShape{1, 1, 1, 4}; + armnn::TensorInfo outputTensorInfo(outputShape, armnn::DataType::Float32); + + std::vector inputData = std::vector( + { + 1.0f, 2.0f, 3.0f, 4.0f + }); + + std::vector expectedOutputData = std::vector( + { + 1.0f, 2.0f, 3.0f, 4.0f + }); + + SpaceToDepthEndToEnd(defaultBackends, + armnn::DataLayout::NHWC, + inputTensorInfo, + outputTensorInfo, + inputData, + expectedOutputData, + blockSize); +} + +void SpaceToDepthNCHWEndToEndTest1(const std::vector& defaultBackends) +{ + const unsigned int blockSize = 2; + + armnn::TensorShape inputShape{1, 2, 2, 1}; + armnn::TensorInfo inputTensorInfo(inputShape, armnn::DataType::Float32); + + armnn::TensorShape outputShape{1, 1, 1, 4}; + armnn::TensorInfo outputTensorInfo(outputShape, armnn::DataType::Float32); + + std::vector inputData = std::vector( + { + 1.0f, 2.0f, 3.0f, 4.0f + }); + + std::vector expectedOutputData = std::vector( + { + 1.0f, 2.0f, 3.0f, 4.0f + }); + + SpaceToDepthEndToEnd(defaultBackends, + armnn::DataLayout::NCHW, + inputTensorInfo, + outputTensorInfo, + inputData, + expectedOutputData, + blockSize); +} + +void SpaceToDepthNHWCEndToEndTest2(const std::vector& defaultBackends) +{ + const unsigned int blockSize = 2; + + armnn::TensorShape inputShape{1, 2, 2, 2}; + armnn::TensorShape outputShape{1, 1, 1, 8}; + + armnn::TensorInfo outputTensorInfo(outputShape, armnn::DataType::Float32); + armnn::TensorInfo inputTensorInfo(inputShape, armnn::DataType::Float32); + + std::vector inputData = std::vector( + { + 1.4f, 2.3f, 3.2f, 4.1f, 5.4f, 6.3f, 7.2f, 8.1f + }); + + std::vector expectedOutputData = std::vector( + { + 1.4f, 2.3f, 3.2f, 4.1f, 5.4f, 6.3f, 7.2f, 8.1f + }); + + SpaceToDepthEndToEnd(defaultBackends, + armnn::DataLayout::NHWC, + inputTensorInfo, + outputTensorInfo, + inputData, + expectedOutputData, + blockSize); +} + +void SpaceToDepthNCHWEndToEndTest2(const std::vector& defaultBackends) +{ + const unsigned int blockSize = 2; + + armnn::TensorShape inputShape{1, 2, 2, 2}; + armnn::TensorShape outputShape{1, 1, 1, 8}; + + armnn::TensorInfo inputTensorInfo(inputShape, armnn::DataType::Float32); + armnn::TensorInfo outputTensorInfo(outputShape, armnn::DataType::Float32); + + + std::vector inputData = std::vector( + { + 1.4f, 2.3f, 3.2f, 4.1f, 5.4f, 6.3f, 7.2f, 8.1f + }); + + std::vector expectedOutputData = std::vector( + { + 1.4f, 2.3f, 3.2f, 4.1f, 5.4f, 6.3f, 7.2f, 8.1f + }); + + SpaceToDepthEndToEnd(defaultBackends, + armnn::DataLayout::NCHW, + inputTensorInfo, + outputTensorInfo, + inputData, + expectedOutputData, + blockSize); } } // anonymous namespace diff --git a/src/backends/cl/test/ClCreateWorkloadTests.cpp b/src/backends/cl/test/ClCreateWorkloadTests.cpp index 9e4f85b46c..b89abdb473 100644 --- a/src/backends/cl/test/ClCreateWorkloadTests.cpp +++ b/src/backends/cl/test/ClCreateWorkloadTests.cpp @@ -890,4 +890,41 @@ BOOST_AUTO_TEST_CASE(CreateConcatDim3Uint8Workload) ClCreateConcatWorkloadTest({ 2, 3, 2, 10 }, 3); } +template +static void ClSpaceToDepthWorkloadTest() +{ + Graph graph; + ClWorkloadFactory factory = + ClWorkloadFactoryHelper::GetFactory(ClWorkloadFactoryHelper::GetMemoryManager()); + + auto workload = CreateSpaceToDepthWorkloadTest(factory, graph); + + SpaceToDepthQueueDescriptor queueDescriptor = workload->GetData(); + auto inputHandle = boost::polymorphic_downcast(queueDescriptor.m_Inputs[0]); + auto outputHandle = boost::polymorphic_downcast(queueDescriptor.m_Outputs[0]); + + BOOST_TEST(CompareIClTensorHandleShape(inputHandle, { 1, 2, 2, 1 })); + BOOST_TEST(CompareIClTensorHandleShape(outputHandle, { 1, 1, 1, 4 })); +} + +BOOST_AUTO_TEST_CASE(CreateSpaceToDepthFloat32Workload) +{ + ClSpaceToDepthWorkloadTest(); +} + +BOOST_AUTO_TEST_CASE(CreateSpaceToDepthFloat16Workload) +{ + ClSpaceToDepthWorkloadTest(); +} + +BOOST_AUTO_TEST_CASE(CreateSpaceToDepthQAsymm8Workload) +{ + ClSpaceToDepthWorkloadTest(); +} + +BOOST_AUTO_TEST_CASE(CreateSpaceToDepthQSymm16Workload) +{ + ClSpaceToDepthWorkloadTest(); +} + BOOST_AUTO_TEST_SUITE_END() diff --git a/src/backends/cl/test/ClEndToEndTests.cpp b/src/backends/cl/test/ClEndToEndTests.cpp index ba01c5a980..7cb7c5c646 100644 --- a/src/backends/cl/test/ClEndToEndTests.cpp +++ b/src/backends/cl/test/ClEndToEndTests.cpp @@ -8,6 +8,7 @@ #include #include #include +#include #include #include @@ -102,6 +103,26 @@ BOOST_AUTO_TEST_CASE(ClGreaterBroadcastEndToEndUint8Test) expectedOutput); } +BOOST_AUTO_TEST_CASE(ClSpaceToDepthNHWCEndToEndTest1) +{ + SpaceToDepthNHWCEndToEndTest1(defaultBackends); +} + +BOOST_AUTO_TEST_CASE(ClSpaceToDepthNCHWEndToEndTest1) +{ + SpaceToDepthNCHWEndToEndTest1(defaultBackends); +} + +BOOST_AUTO_TEST_CASE(ClSpaceToDepthNHWCEndToEndTest2) +{ + SpaceToDepthNHWCEndToEndTest2(defaultBackends); +} + +BOOST_AUTO_TEST_CASE(ClSpaceToDepthNCHWEndToEndTest2) +{ + SpaceToDepthNCHWEndToEndTest2(defaultBackends); +} + BOOST_AUTO_TEST_CASE(ClSplitter1dEndToEndTest) { Splitter1dEndToEnd(defaultBackends); diff --git a/src/backends/reference/test/RefCreateWorkloadTests.cpp b/src/backends/reference/test/RefCreateWorkloadTests.cpp index 8fe18f5d78..2fa6cbfd5d 100644 --- a/src/backends/reference/test/RefCreateWorkloadTests.cpp +++ b/src/backends/reference/test/RefCreateWorkloadTests.cpp @@ -962,4 +962,32 @@ BOOST_AUTO_TEST_CASE(CreatePreluInt16NoBroadcastWorkload) armnn::InvalidArgumentException); } +template +static void RefCreateSpaceToDepthWorkloadTest() +{ + Graph graph; + RefWorkloadFactory factory; + + auto workload = CreateSpaceToDepthWorkloadTest(factory, graph); + + CheckInputOutput(std::move(workload), + TensorInfo({ 1, 2, 2, 1 }, DataType), + TensorInfo({ 1, 1, 1, 4 }, DataType)); +} + +BOOST_AUTO_TEST_CASE(CreateSpaceToDepthWorkloadFloat32) +{ + RefCreateSpaceToDepthWorkloadTest(); +} + +BOOST_AUTO_TEST_CASE(CreateSpaceToDepthWorkloadQASymm8) +{ + RefCreateSpaceToDepthWorkloadTest(); +} + +BOOST_AUTO_TEST_CASE(CreateSpaceToDepthWorkloadQSymm16) +{ + RefCreateSpaceToDepthWorkloadTest(); +} + BOOST_AUTO_TEST_SUITE_END() diff --git a/src/backends/reference/test/RefEndToEndTests.cpp b/src/backends/reference/test/RefEndToEndTests.cpp index 58f1284ebd..3e8a4690dc 100644 --- a/src/backends/reference/test/RefEndToEndTests.cpp +++ b/src/backends/reference/test/RefEndToEndTests.cpp @@ -717,119 +717,23 @@ BOOST_AUTO_TEST_CASE(RefDetectionPostProcessFastNmsUint8Test) BOOST_AUTO_TEST_CASE(RefSpaceToDepthNHWCEndToEndTest1) { - const unsigned int blockSize = 2; - - armnn::TensorShape inputShape{1, 2, 2, 1}; - armnn::TensorInfo inputTensorInfo(inputShape, armnn::DataType::Float32); - - armnn::TensorShape outputShape{1, 1, 1, 4}; - armnn::TensorInfo outputTensorInfo(outputShape, armnn::DataType::Float32); - - std::vector inputData = std::vector( - { - 1.0f, 2.0f, 3.0f, 4.0f - }); - - std::vector expectedOutputData = std::vector( - { - 1.0f, 2.0f, 3.0f, 4.0f - }); - - SpaceToDepthEndToEnd(defaultBackends, - armnn::DataLayout::NHWC, - inputTensorInfo, - outputTensorInfo, - inputData, - expectedOutputData, - blockSize); + SpaceToDepthNHWCEndToEndTest1(defaultBackends); } BOOST_AUTO_TEST_CASE(RefSpaceToDepthNCHWEndToEndTest1) { - const unsigned int blockSize = 2; + SpaceToDepthNCHWEndToEndTest1(defaultBackends); - armnn::TensorShape inputShape{1, 2, 2, 1}; - armnn::TensorInfo inputTensorInfo(inputShape, armnn::DataType::Float32); - - armnn::TensorShape outputShape{1, 1, 1, 4}; - armnn::TensorInfo outputTensorInfo(outputShape, armnn::DataType::Float32); - - std::vector inputData = std::vector( - { - 1.0f, 2.0f, 3.0f, 4.0f - }); - - std::vector expectedOutputData = std::vector( - { - 1.0f, 2.0f, 3.0f, 4.0f - }); - - SpaceToDepthEndToEnd(defaultBackends, - armnn::DataLayout::NCHW, - inputTensorInfo, - outputTensorInfo, - inputData, - expectedOutputData, - blockSize); } BOOST_AUTO_TEST_CASE(RefSpaceToDepthNHWCEndToEndTest2) { - const unsigned int blockSize = 2; - - armnn::TensorShape inputShape{1, 2, 2, 2}; - armnn::TensorShape outputShape{1, 1, 1, 8}; - - armnn::TensorInfo outputTensorInfo(outputShape, armnn::DataType::Float32); - armnn::TensorInfo inputTensorInfo(inputShape, armnn::DataType::Float32); - - std::vector inputData = std::vector( - { - 1.4f, 2.3f, 3.2f, 4.1f, 5.4f, 6.3f, 7.2f, 8.1f - }); - - std::vector expectedOutputData = std::vector( - { - 1.4f, 2.3f, 3.2f, 4.1f, 5.4f, 6.3f, 7.2f, 8.1f - }); - - SpaceToDepthEndToEnd(defaultBackends, - armnn::DataLayout::NHWC, - inputTensorInfo, - outputTensorInfo, - inputData, - expectedOutputData, - blockSize); + SpaceToDepthNHWCEndToEndTest2(defaultBackends); } BOOST_AUTO_TEST_CASE(RefSpaceToDepthNCHWEndToEndTest2) { - const unsigned int blockSize = 2; - - armnn::TensorShape inputShape{1, 2, 2, 2}; - armnn::TensorShape outputShape{1, 1, 1, 8}; - - armnn::TensorInfo inputTensorInfo(inputShape, armnn::DataType::Float32); - armnn::TensorInfo outputTensorInfo(outputShape, armnn::DataType::Float32); - - - std::vector inputData = std::vector( - { - 1.4f, 2.3f, 3.2f, 4.1f, 5.4f, 6.3f, 7.2f, 8.1f - }); - - std::vector expectedOutputData = std::vector( - { - 1.4f, 2.3f, 3.2f, 4.1f, 5.4f, 6.3f, 7.2f, 8.1f - }); - - SpaceToDepthEndToEnd(defaultBackends, - armnn::DataLayout::NCHW, - inputTensorInfo, - outputTensorInfo, - inputData, - expectedOutputData, - blockSize); + SpaceToDepthNCHWEndToEndTest2(defaultBackends); } BOOST_AUTO_TEST_CASE(RefSplitter1dEndToEndTest) -- cgit v1.2.1