From 28dcab6c176a3938519809aa9da7321e4ede7623 Mon Sep 17 00:00:00 2001 From: Matteo Martincigh Date: Fri, 19 Oct 2018 16:40:03 +0100 Subject: IVGCVSW-2049 + IVGCVSW-2051 Create the CL Mean Float workload and add the unit tests * Created the ClFloatWorkload class * Added ClMeanValidate validation function * Added helper function to convert the reduction axes from the ArmNN format to ACL's * Added workload tests * Added some unit tests * These changes need the CL pin to be pointing at least to revision 88d871028eeae57f9e4536d0329110eccb5e2890 (COMPMID-1574 Implement ReduceMean in OpenCL) !android-nn-driver:155033 Change-Id: I694fd36be0458c90e158172afde045fcc88c32ae --- src/backends/test/LayerTests.cpp | 96 ++++++++++++++++++++++------------------ src/backends/test/LayerTests.hpp | 2 + 2 files changed, 56 insertions(+), 42 deletions(-) (limited to 'src/backends/test') diff --git a/src/backends/test/LayerTests.cpp b/src/backends/test/LayerTests.cpp index 5c7a887552..e5a4258043 100755 --- a/src/backends/test/LayerTests.cpp +++ b/src/backends/test/LayerTests.cpp @@ -5807,20 +5807,19 @@ LayerTestResult PermuteFloat32ValueSet3Test(armnn::IWorkloadFactory& w namespace { + template LayerTestResult MeanTestHelper(armnn::IWorkloadFactory& workloadFactory, - const unsigned int* inputShape, - const std::vector& inputData, - const std::vector& axis, - bool keepDims, - const unsigned int* outputShape, - const std::vector& outputData, - float scale = 1.0f, - int32_t offset = 0) + const unsigned int* inputShape, + const std::vector& inputData, + const std::vector& axis, + bool keepDims, + const unsigned int* outputShape, + const std::vector& outputData, + float scale = 1.0f, + int32_t offset = 0) { - auto dataType = (std::is_same::value ? - armnn::DataType::QuantisedAsymm8 : - armnn::DataType::Float32); + auto dataType = (std::is_same::value ? armnn::DataType::QuantisedAsymm8 : armnn::DataType::Float32); armnn::TensorInfo inputTensorInfo(InputDim, inputShape, dataType); armnn::TensorInfo outputTensorInfo(OutputDim, outputShape, dataType); @@ -5860,6 +5859,7 @@ LayerTestResult MeanTestHelper(armnn::IWorkloadFactory& workloadFa return result; } + } // anonymous namespace LayerTestResult MeanUint8SimpleTest(armnn::IWorkloadFactory& workloadFactory) @@ -5881,7 +5881,7 @@ LayerTestResult MeanUint8SimpleAxisTest(armnn::IWorkloadFactory& wor std::vector input({ 1, 1, 2, 2, 3, 3 }); std::vector output({ 2, 2 }); - return MeanTestHelper(workloadFactory, inputShape, input, {2}, false, outputShape, output); + return MeanTestHelper(workloadFactory, inputShape, input, { 2 }, false, outputShape, output); } LayerTestResult MeanUint8KeepDimsTest(armnn::IWorkloadFactory& workloadFactory) @@ -5892,7 +5892,7 @@ LayerTestResult MeanUint8KeepDimsTest(armnn::IWorkloadFactory& workl std::vector input({ 1, 1, 2, 2, 3, 3 }); std::vector output({ 2, 2 }); - return MeanTestHelper(workloadFactory, inputShape, input, {2}, true, outputShape, output); + return MeanTestHelper(workloadFactory, inputShape, input, { 2 }, true, outputShape, output); } LayerTestResult MeanUint8MultipleDimsTest(armnn::IWorkloadFactory& workloadFactory) @@ -5900,22 +5900,23 @@ LayerTestResult MeanUint8MultipleDimsTest(armnn::IWorkloadFactory& w const unsigned int inputShape[] = { 2, 3, 1, 2 }; const unsigned int outputShape[] = { 1, 3, 1, 1 }; - std::vector input({ 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6}); + std::vector input({ 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6 }); std::vector output({ 1, 3, 5 }); - return MeanTestHelper(workloadFactory, inputShape, input, {0, 3}, true, outputShape, output); + return MeanTestHelper(workloadFactory, inputShape, input, { 0, 3 }, true, outputShape, output); } LayerTestResult MeanVtsUint8Test(armnn::IWorkloadFactory& workloadFactory) { - const unsigned int inputShape[] = {4, 3, 2}; + const unsigned int inputShape[] = { 4, 3, 2 }; const unsigned int outputShape[] = { 2 }; - std::vector input({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 output({12, 13}); + std::vector input({ 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 output({ 12, 13 }); - return MeanTestHelper(workloadFactory, inputShape, input, {0, 1}, false, outputShape, - output, 0.8f, 5); + return MeanTestHelper(workloadFactory, inputShape, input, { 0, 1 }, false, outputShape, + output, 0.8f, 5); } LayerTestResult MeanFloatSimpleTest(armnn::IWorkloadFactory& workloadFactory) @@ -5923,8 +5924,8 @@ LayerTestResult MeanFloatSimpleTest(armnn::IWorkloadFactory& workloadF const unsigned int inputShape[] = { 3, 2 }; const unsigned int outputShape[] = { 1 }; - std::vector input({ 1., 1., 2., 2., 3., 3. }); - std::vector output({ 2. }); + std::vector input({ 1.0f, 1.0f, 2.0f, 2.0f, 3.0f, 3.0f }); + std::vector output({ 2.0f }); return MeanTestHelper(workloadFactory, inputShape, input, {}, false, outputShape, output); } @@ -5934,10 +5935,10 @@ LayerTestResult MeanFloatSimpleAxisTest(armnn::IWorkloadFactory& workl const unsigned int inputShape[] = { 2, 3, 1, 2 }; const unsigned int outputShape[] = { 3, 1, 2 }; - std::vector input({ 1., 2., 3., 4., 5., 6., 1., 2., 3., 4., 5., 6.}); - std::vector output({ 1., 2., 3., 4., 5., 6. }); + std::vector input({ 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f }); + std::vector output({ 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f }); - return MeanTestHelper(workloadFactory, inputShape, input, {0}, false, outputShape, output); + return MeanTestHelper(workloadFactory, inputShape, input, { 0 }, false, outputShape, output); } LayerTestResult MeanFloatKeepDimsTest(armnn::IWorkloadFactory& workloadFactory) @@ -5945,10 +5946,10 @@ LayerTestResult MeanFloatKeepDimsTest(armnn::IWorkloadFactory& workloa const unsigned int inputShape[] = { 1, 1, 3, 2 }; const unsigned int outputShape[] = { 1, 1, 1, 2 }; - std::vector input({ 1., 1., 2., 2., 3., 3. }); - std::vector output({ 2., 2. }); + std::vector input({ 1.0f, 1.0f, 2.0f, 2.0f, 3.0f, 3.0f }); + std::vector output({ 2.0f, 2.0f }); - return MeanTestHelper(workloadFactory, inputShape, input, {2}, true, outputShape, output); + return MeanTestHelper(workloadFactory, inputShape, input, { 2 }, true, outputShape, output); } LayerTestResult MeanFloatMultipleDimsTest(armnn::IWorkloadFactory& workloadFactory) @@ -5956,34 +5957,45 @@ LayerTestResult MeanFloatMultipleDimsTest(armnn::IWorkloadFactory& wor const unsigned int inputShape[] = { 2, 3, 1, 2 }; const unsigned int outputShape[] = { 1, 3, 1, 1 }; - std::vector input({ 1., 2., 3., 4., 5., 6., 1., 2., 3., 4., 5., 6.}); - std::vector output({ 1.5, 3.5, 5.5 }); + std::vector input({ 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f }); + std::vector output({ 1.5f, 3.5f, 5.5f }); - return MeanTestHelper(workloadFactory, inputShape, input, {0, 3}, true, outputShape, output); + return MeanTestHelper(workloadFactory, inputShape, input, { 0, 3 }, true, outputShape, output); } LayerTestResult MeanVtsFloat1Test(armnn::IWorkloadFactory& workloadFactory) { - const unsigned int inputShape[] = {4, 3, 2}; + const unsigned int inputShape[] = { 4, 3, 2 }; const unsigned int outputShape[] = { 2 }; - std::vector input({1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, - 15.0f, 16.0f, 17.0f, 18.0f, 19.0f, 20.0f, 21.0f, 22.0f, 23.0f, 24.0f}); - std::vector output({12.0f, 13.0f}); + std::vector input({ 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, + 15.0f, 16.0f, 17.0f, 18.0f, 19.0f, 20.0f, 21.0f, 22.0f, 23.0f, 24.0f }); + std::vector output({ 12.0f, 13.0f }); - return MeanTestHelper(workloadFactory, inputShape, input, {0, 1}, false, outputShape, output); + return MeanTestHelper(workloadFactory, inputShape, input, { 0, 1 }, false, outputShape, output); } LayerTestResult MeanVtsFloat2Test(armnn::IWorkloadFactory& workloadFactory) { - const unsigned int inputShape[] = {4, 3, 2}; - const unsigned int outputShape[] = {1, 3, 1 }; + const unsigned int inputShape[] = { 4, 3, 2 }; + const unsigned int outputShape[] = { 1, 3, 1 }; + + std::vector input({ 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, + 15.0f, 16.0f, 17.0f, 18.0f, 19.0f, 20.0f, 21.0f, 22.0f, 23.0f, 24.0f }); + std::vector output({ 10.5f, 12.5f, 14.5f }); + + return MeanTestHelper(workloadFactory, inputShape, input, { 0, 2 }, true, outputShape, output); +} + +LayerTestResult MeanVtsFloat3Test(armnn::IWorkloadFactory& workloadFactory) +{ + const unsigned int inputShape[] = { 1, 2, 2, 1 }; + const unsigned int outputShape[] = { 1, 2, 1 }; - std::vector input({1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, - 15.0f, 16.0f, 17.0f, 18.0f, 19.0f, 20.0f, 21.0f, 22.0f, 23.0f, 24.0f}); - std::vector output({10.5f, 12.5f, 14.5f}); + std::vector input({ 1.0f, 2.0f, 3.0f, 4.0f }); + std::vector output({ 1.5f, 3.5f }); - return MeanTestHelper(workloadFactory, inputShape, input, {0, 2}, true, outputShape, output); + return MeanTestHelper(workloadFactory, inputShape, input, { 2 }, false, outputShape, output); } LayerTestResult AdditionAfterMaxPoolTest(armnn::IWorkloadFactory& workloadFactory) diff --git a/src/backends/test/LayerTests.hpp b/src/backends/test/LayerTests.hpp index 9aae5da6e0..ebd38419c4 100644 --- a/src/backends/test/LayerTests.hpp +++ b/src/backends/test/LayerTests.hpp @@ -388,4 +388,6 @@ LayerTestResult MeanFloatKeepDimsTest(armnn::IWorkloadFactory& workloa LayerTestResult MeanFloatMultipleDimsTest(armnn::IWorkloadFactory& workloadFactory); LayerTestResult MeanVtsFloat1Test(armnn::IWorkloadFactory& workloadFactory); LayerTestResult MeanVtsFloat2Test(armnn::IWorkloadFactory& workloadFactory); +LayerTestResult MeanVtsFloat3Test(armnn::IWorkloadFactory& workloadFactory); + LayerTestResult AdditionAfterMaxPoolTest(armnn::IWorkloadFactory& workloadFactory); -- cgit v1.2.1