diff options
author | Narumol Prangnawarat <narumol.prangnawarat@arm.com> | 2019-05-29 14:12:46 +0100 |
---|---|---|
committer | Matteo Martincigh <matteo.martincigh@arm.com> | 2019-05-30 08:02:19 +0000 |
commit | 0f072ab1bf503d17b874db89a9f45f123f7c2fcc (patch) | |
tree | a1147df9c85a0ba36cb109276c2cf8533876d1e4 /src/backends/backendsCommon/test | |
parent | e0200da9300ab0586d1d0b8c855ae1679f2084ab (diff) | |
download | armnn-0f072ab1bf503d17b874db89a9f45f123f7c2fcc.tar.gz |
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 <narumol.prangnawarat@arm.com>
Change-Id: Ia9a111c8dcfc08d04b54aa770d1ae5312c6b1c93
Diffstat (limited to 'src/backends/backendsCommon/test')
-rw-r--r-- | src/backends/backendsCommon/test/SplitterEndToEndTestImpl.hpp | 247 |
1 files changed, 242 insertions, 5 deletions
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<armnn::DataType ArmnnType> -void SplitterDim0EndToEnd(const std::vector<BackendId>& backends) +void Splitter1dEndToEnd(const std::vector<BackendId>& backends) +{ + using namespace armnn; + using T = ResolveType<ArmnnType>; + + unsigned int splitAxis = 0; + unsigned int numSplit = 2; + const TensorShape& inputShape = { 4 }; + const std::vector<TensorShape> outputShapes{{ 2 }, { 2 }}; + + // Builds up the structure of the network + INetworkPtr net = CreateSplitterNetwork<ArmnnType>(inputShape, outputShapes, splitAxis, numSplit); + + BOOST_TEST_CHECKPOINT("create a network"); + + // Creates structures for input & output. + std::vector<T> inputData{ 1, 2, 3, 4 }; + + std::vector<T> expectedOutput0{ 1, 2 }; + std::vector<T> expectedOutput1{ 3, 4 }; + + std::map<int, std::vector<T>> inputTensorData = { { 0, inputData } }; + std::map<int, std::vector<T>> expectedOutputData = { { 0, expectedOutput0 }, {1, expectedOutput1} }; + + EndToEndLayerTestImpl<ArmnnType, ArmnnType>(move(net), inputTensorData, expectedOutputData, backends); +} + +template<armnn::DataType ArmnnType> +void Splitter2dDim0EndToEnd(const std::vector<BackendId>& backends) +{ + using namespace armnn; + using T = ResolveType<ArmnnType>; + + unsigned int splitAxis = 0; + unsigned int numSplit = 2; + const TensorShape& inputShape = { 4, 3 }; + const std::vector<TensorShape> outputShapes{{ 2, 3 }, { 2, 3 }}; + + // Builds up the structure of the network + INetworkPtr net = CreateSplitterNetwork<ArmnnType>(inputShape, outputShapes, splitAxis, numSplit); + + BOOST_TEST_CHECKPOINT("create a network"); + + // Creates structures for input & output. + std::vector<T> inputData{ + 1, 2, + 3, 4, + 5, 6, + 7, 8, + 9, 10, + 11, 12 + }; + + std::vector<T> expectedOutput0{ 1, 2, 3, 4, 5, 6 }; + std::vector<T> expectedOutput1{ 7, 8, 9, 10, 11, 12 }; + + std::map<int, std::vector<T>> inputTensorData = { { 0, inputData } }; + std::map<int, std::vector<T>> expectedOutputData = { { 0, expectedOutput0 }, {1, expectedOutput1} }; + + EndToEndLayerTestImpl<ArmnnType, ArmnnType>(move(net), inputTensorData, expectedOutputData, backends); +} + +template<armnn::DataType ArmnnType> +void Splitter2dDim1EndToEnd(const std::vector<BackendId>& backends) +{ + using namespace armnn; + using T = ResolveType<ArmnnType>; + + unsigned int splitAxis = 1; + unsigned int numSplit = 3; + const TensorShape& inputShape = { 4, 3 }; + const std::vector<TensorShape> outputShapes{{ 4, 1 }, { 4, 1 }, { 4, 1 }}; + + // Builds up the structure of the network + INetworkPtr net = CreateSplitterNetwork<ArmnnType>(inputShape, outputShapes, splitAxis, numSplit); + + BOOST_TEST_CHECKPOINT("create a network"); + + // Creates structures for input & output. + std::vector<T> inputData{ + 1, 2, + 3, 4, + 5, 6, + 7, 8, + 9, 10, + 11, 12 + }; + + std::vector<T> expectedOutput0{ 1, 4, 7, 10 }; + std::vector<T> expectedOutput1{ 2, 5, 8, 11 }; + std::vector<T> expectedOutput2{ 3, 6, 9, 12 }; + + std::map<int, std::vector<T>> inputTensorData = { { 0, inputData } }; + std::map<int, std::vector<T>> expectedOutputData = { { 0, expectedOutput0 }, + { 1, expectedOutput1 }, + { 2, expectedOutput2 } }; + + EndToEndLayerTestImpl<ArmnnType, ArmnnType>(move(net), inputTensorData, expectedOutputData, backends); +} + +template<armnn::DataType ArmnnType> +void Splitter3dDim0EndToEnd(const std::vector<BackendId>& backends) +{ + using namespace armnn; + using T = ResolveType<ArmnnType>; + + unsigned int splitAxis = 0; + unsigned int numSplit = 2; + const TensorShape& inputShape = { 2, 4, 3 }; + const std::vector<TensorShape> outputShapes{{ 1, 4, 3 }, { 1, 4, 3 }}; + + // Builds up the structure of the network + INetworkPtr net = CreateSplitterNetwork<ArmnnType>(inputShape, outputShapes, splitAxis, numSplit); + + BOOST_TEST_CHECKPOINT("create a network"); + + // Creates structures for input & output. + std::vector<T> 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<T> expectedOutput0{ + 1, 2, 3, + 4, 5, 6, + 7, 8, 9, + 10, 11, 12 + }; + std::vector<T> expectedOutput1{ + 13, 14, 15, + 16, 17, 18, + 19, 20, 21, + 22, 23, 24 + }; + + std::map<int, std::vector<T>> inputTensorData = { { 0, inputData } }; + std::map<int, std::vector<T>> expectedOutputData = { { 0, expectedOutput0 }, + { 1, expectedOutput1 } }; + + EndToEndLayerTestImpl<ArmnnType, ArmnnType>(move(net), inputTensorData, expectedOutputData, backends); +} + +template<armnn::DataType ArmnnType> +void Splitter3dDim1EndToEnd(const std::vector<BackendId>& backends) +{ + using namespace armnn; + using T = ResolveType<ArmnnType>; + + unsigned int splitAxis = 1; + unsigned int numSplit = 2; + const TensorShape& inputShape = { 2, 4, 3 }; + const std::vector<TensorShape> outputShapes{{ 2, 2, 3 }, { 2, 2, 3 }}; + + // Builds up the structure of the network + INetworkPtr net = CreateSplitterNetwork<ArmnnType>(inputShape, outputShapes, splitAxis, numSplit); + + BOOST_TEST_CHECKPOINT("create a network"); + + // Creates structures for input & output. + std::vector<T> 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<T> expectedOutput0{ + 1, 2, 3, + 4, 5, 6, + 13, 14, 15, + 16, 17, 18 + }; + std::vector<T> expectedOutput1{ + 7, 8, 9, + 10, 11, 12, + 19, 20, 21, + 22, 23, 24 + }; + + std::map<int, std::vector<T>> inputTensorData = { { 0, inputData } }; + std::map<int, std::vector<T>> expectedOutputData = { { 0, expectedOutput0 }, + { 1, expectedOutput1 } }; + + EndToEndLayerTestImpl<ArmnnType, ArmnnType>(move(net), inputTensorData, expectedOutputData, backends); +} + +template<armnn::DataType ArmnnType> +void Splitter3dDim2EndToEnd(const std::vector<BackendId>& backends) +{ + using namespace armnn; + using T = ResolveType<ArmnnType>; + + unsigned int splitAxis = 2; + unsigned int numSplit = 3; + const TensorShape& inputShape = { 2, 4, 3 }; + const std::vector<TensorShape> outputShapes{{ 2, 4, 1 }, { 2, 4, 1 }, { 2, 4, 1 }}; + + // Builds up the structure of the network + INetworkPtr net = CreateSplitterNetwork<ArmnnType>(inputShape, outputShapes, splitAxis, numSplit); + + BOOST_TEST_CHECKPOINT("create a network"); + + // Creates structures for input & output. + std::vector<T> 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<T> expectedOutput0{ 1, 4, 7, 10, 13, 16, 19, 22 }; + std::vector<T> expectedOutput1{ 2, 5, 8, 11, 14, 17, 20, 23 }; + std::vector<T> expectedOutput2{ 3, 6, 9, 12, 15, 18, 21, 24 }; + + std::map<int, std::vector<T>> inputTensorData = { { 0, inputData } }; + std::map<int, std::vector<T>> expectedOutputData = { { 0, expectedOutput0 }, + { 1, expectedOutput1 }, + { 2, expectedOutput2 } }; + + EndToEndLayerTestImpl<ArmnnType, ArmnnType>(move(net), inputTensorData, expectedOutputData, backends); +} + +template<armnn::DataType ArmnnType> +void Splitter4dDim0EndToEnd(const std::vector<BackendId>& backends) { using namespace armnn; using T = ResolveType<ArmnnType>; @@ -151,7 +388,7 @@ void SplitterDim0EndToEnd(const std::vector<BackendId>& backends) } template<armnn::DataType ArmnnType> -void SplitterDim1EndToEnd(const std::vector<BackendId>& backends) +void Splitter4dDim1EndToEnd(const std::vector<BackendId>& backends) { using namespace armnn; using T = ResolveType<ArmnnType>; @@ -231,7 +468,7 @@ void SplitterDim1EndToEnd(const std::vector<BackendId>& backends) } template<armnn::DataType ArmnnType> -void SplitterDim2EndToEnd(const std::vector<BackendId>& backends) +void Splitter4dDim2EndToEnd(const std::vector<BackendId>& backends) { using namespace armnn; using T = ResolveType<ArmnnType>; @@ -311,7 +548,7 @@ void SplitterDim2EndToEnd(const std::vector<BackendId>& backends) } template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>> -void SplitterDim3EndToEnd(const std::vector<BackendId>& backends) +void Splitter4dDim3EndToEnd(const std::vector<BackendId>& backends) { using namespace armnn; |