From 0f072ab1bf503d17b874db89a9f45f123f7c2fcc Mon Sep 17 00:00:00 2001 From: Narumol Prangnawarat Date: Wed, 29 May 2019 14:12:46 +0100 Subject: IVGCVSW-2771 Add more end to end tests for splitter on Cl, Neon, Ref to cover different number of dimensions and split axis Signed-off-by: Narumol Prangnawarat Change-Id: Ia9a111c8dcfc08d04b54aa770d1ae5312c6b1c93 --- .../test/SplitterEndToEndTestImpl.hpp | 247 ++++++++++++++++++++- 1 file changed, 242 insertions(+), 5 deletions(-) (limited to 'src/backends/backendsCommon/test/SplitterEndToEndTestImpl.hpp') diff --git a/src/backends/backendsCommon/test/SplitterEndToEndTestImpl.hpp b/src/backends/backendsCommon/test/SplitterEndToEndTestImpl.hpp index f9fbcf55cb..6c4c1772b6 100644 --- a/src/backends/backendsCommon/test/SplitterEndToEndTestImpl.hpp +++ b/src/backends/backendsCommon/test/SplitterEndToEndTestImpl.hpp @@ -45,7 +45,7 @@ INetworkPtr CreateSplitterNetwork(const TensorShape& inputShape, } splitterDimSizes[splitAxis] /= numSplit; - SplitterDescriptor splitDesc(numSplit); + SplitterDescriptor splitDesc(numSplit, inputShape.GetNumDimensions()); for (unsigned int g = 0; g < numSplit; ++g) { // Set the size of the views. @@ -71,7 +71,244 @@ INetworkPtr CreateSplitterNetwork(const TensorShape& inputShape, } template -void SplitterDim0EndToEnd(const std::vector& backends) +void Splitter1dEndToEnd(const std::vector& backends) +{ + using namespace armnn; + using T = ResolveType; + + unsigned int splitAxis = 0; + unsigned int numSplit = 2; + const TensorShape& inputShape = { 4 }; + const std::vector outputShapes{{ 2 }, { 2 }}; + + // Builds up the structure of the network + INetworkPtr net = CreateSplitterNetwork(inputShape, outputShapes, splitAxis, numSplit); + + BOOST_TEST_CHECKPOINT("create a network"); + + // Creates structures for input & output. + std::vector inputData{ 1, 2, 3, 4 }; + + std::vector expectedOutput0{ 1, 2 }; + std::vector expectedOutput1{ 3, 4 }; + + std::map> inputTensorData = { { 0, inputData } }; + std::map> expectedOutputData = { { 0, expectedOutput0 }, {1, expectedOutput1} }; + + EndToEndLayerTestImpl(move(net), inputTensorData, expectedOutputData, backends); +} + +template +void Splitter2dDim0EndToEnd(const std::vector& backends) +{ + using namespace armnn; + using T = ResolveType; + + unsigned int splitAxis = 0; + unsigned int numSplit = 2; + const TensorShape& inputShape = { 4, 3 }; + const std::vector outputShapes{{ 2, 3 }, { 2, 3 }}; + + // Builds up the structure of the network + INetworkPtr net = CreateSplitterNetwork(inputShape, outputShapes, splitAxis, numSplit); + + BOOST_TEST_CHECKPOINT("create a network"); + + // Creates structures for input & output. + std::vector inputData{ + 1, 2, + 3, 4, + 5, 6, + 7, 8, + 9, 10, + 11, 12 + }; + + std::vector expectedOutput0{ 1, 2, 3, 4, 5, 6 }; + std::vector expectedOutput1{ 7, 8, 9, 10, 11, 12 }; + + std::map> inputTensorData = { { 0, inputData } }; + std::map> expectedOutputData = { { 0, expectedOutput0 }, {1, expectedOutput1} }; + + EndToEndLayerTestImpl(move(net), inputTensorData, expectedOutputData, backends); +} + +template +void Splitter2dDim1EndToEnd(const std::vector& backends) +{ + using namespace armnn; + using T = ResolveType; + + unsigned int splitAxis = 1; + unsigned int numSplit = 3; + const TensorShape& inputShape = { 4, 3 }; + const std::vector outputShapes{{ 4, 1 }, { 4, 1 }, { 4, 1 }}; + + // Builds up the structure of the network + INetworkPtr net = CreateSplitterNetwork(inputShape, outputShapes, splitAxis, numSplit); + + BOOST_TEST_CHECKPOINT("create a network"); + + // Creates structures for input & output. + std::vector inputData{ + 1, 2, + 3, 4, + 5, 6, + 7, 8, + 9, 10, + 11, 12 + }; + + std::vector expectedOutput0{ 1, 4, 7, 10 }; + std::vector expectedOutput1{ 2, 5, 8, 11 }; + std::vector expectedOutput2{ 3, 6, 9, 12 }; + + std::map> inputTensorData = { { 0, inputData } }; + std::map> expectedOutputData = { { 0, expectedOutput0 }, + { 1, expectedOutput1 }, + { 2, expectedOutput2 } }; + + EndToEndLayerTestImpl(move(net), inputTensorData, expectedOutputData, backends); +} + +template +void Splitter3dDim0EndToEnd(const std::vector& backends) +{ + using namespace armnn; + using T = ResolveType; + + unsigned int splitAxis = 0; + unsigned int numSplit = 2; + const TensorShape& inputShape = { 2, 4, 3 }; + const std::vector outputShapes{{ 1, 4, 3 }, { 1, 4, 3 }}; + + // Builds up the structure of the network + INetworkPtr net = CreateSplitterNetwork(inputShape, outputShapes, splitAxis, numSplit); + + BOOST_TEST_CHECKPOINT("create a network"); + + // Creates structures for input & output. + std::vector inputData{ + 1, 2, 3, + 4, 5, 6, + 7, 8, 9, + 10, 11, 12, + 13, 14, 15, + 16, 17, 18, + 19, 20, 21, + 22, 23, 24 + }; + + std::vector expectedOutput0{ + 1, 2, 3, + 4, 5, 6, + 7, 8, 9, + 10, 11, 12 + }; + std::vector expectedOutput1{ + 13, 14, 15, + 16, 17, 18, + 19, 20, 21, + 22, 23, 24 + }; + + std::map> inputTensorData = { { 0, inputData } }; + std::map> expectedOutputData = { { 0, expectedOutput0 }, + { 1, expectedOutput1 } }; + + EndToEndLayerTestImpl(move(net), inputTensorData, expectedOutputData, backends); +} + +template +void Splitter3dDim1EndToEnd(const std::vector& backends) +{ + using namespace armnn; + using T = ResolveType; + + unsigned int splitAxis = 1; + unsigned int numSplit = 2; + const TensorShape& inputShape = { 2, 4, 3 }; + const std::vector outputShapes{{ 2, 2, 3 }, { 2, 2, 3 }}; + + // Builds up the structure of the network + INetworkPtr net = CreateSplitterNetwork(inputShape, outputShapes, splitAxis, numSplit); + + BOOST_TEST_CHECKPOINT("create a network"); + + // Creates structures for input & output. + std::vector inputData{ + 1, 2, 3, + 4, 5, 6, + 7, 8, 9, + 10, 11, 12, + 13, 14, 15, + 16, 17, 18, + 19, 20, 21, + 22, 23, 24 + }; + + std::vector expectedOutput0{ + 1, 2, 3, + 4, 5, 6, + 13, 14, 15, + 16, 17, 18 + }; + std::vector expectedOutput1{ + 7, 8, 9, + 10, 11, 12, + 19, 20, 21, + 22, 23, 24 + }; + + std::map> inputTensorData = { { 0, inputData } }; + std::map> expectedOutputData = { { 0, expectedOutput0 }, + { 1, expectedOutput1 } }; + + EndToEndLayerTestImpl(move(net), inputTensorData, expectedOutputData, backends); +} + +template +void Splitter3dDim2EndToEnd(const std::vector& backends) +{ + using namespace armnn; + using T = ResolveType; + + unsigned int splitAxis = 2; + unsigned int numSplit = 3; + const TensorShape& inputShape = { 2, 4, 3 }; + const std::vector outputShapes{{ 2, 4, 1 }, { 2, 4, 1 }, { 2, 4, 1 }}; + + // Builds up the structure of the network + INetworkPtr net = CreateSplitterNetwork(inputShape, outputShapes, splitAxis, numSplit); + + BOOST_TEST_CHECKPOINT("create a network"); + + // Creates structures for input & output. + std::vector inputData{ + 1, 2, 3, + 4, 5, 6, + 7, 8, 9, + 10, 11, 12, + 13, 14, 15, + 16, 17, 18, + 19, 20, 21, + 22, 23, 24 + }; + + std::vector expectedOutput0{ 1, 4, 7, 10, 13, 16, 19, 22 }; + std::vector expectedOutput1{ 2, 5, 8, 11, 14, 17, 20, 23 }; + std::vector expectedOutput2{ 3, 6, 9, 12, 15, 18, 21, 24 }; + + std::map> inputTensorData = { { 0, inputData } }; + std::map> expectedOutputData = { { 0, expectedOutput0 }, + { 1, expectedOutput1 }, + { 2, expectedOutput2 } }; + + EndToEndLayerTestImpl(move(net), inputTensorData, expectedOutputData, backends); +} + +template +void Splitter4dDim0EndToEnd(const std::vector& backends) { using namespace armnn; using T = ResolveType; @@ -151,7 +388,7 @@ void SplitterDim0EndToEnd(const std::vector& backends) } template -void SplitterDim1EndToEnd(const std::vector& backends) +void Splitter4dDim1EndToEnd(const std::vector& backends) { using namespace armnn; using T = ResolveType; @@ -231,7 +468,7 @@ void SplitterDim1EndToEnd(const std::vector& backends) } template -void SplitterDim2EndToEnd(const std::vector& backends) +void Splitter4dDim2EndToEnd(const std::vector& backends) { using namespace armnn; using T = ResolveType; @@ -311,7 +548,7 @@ void SplitterDim2EndToEnd(const std::vector& backends) } template> -void SplitterDim3EndToEnd(const std::vector& backends) +void Splitter4dDim3EndToEnd(const std::vector& backends) { using namespace armnn; -- cgit v1.2.1