diff options
Diffstat (limited to 'src')
-rwxr-xr-x | src/backends/backendsCommon/test/Conv2dTestImpl.hpp | 10 | ||||
-rwxr-xr-x | src/backends/backendsCommon/test/LayerTests.cpp | 79 | ||||
-rw-r--r-- | src/backends/backendsCommon/test/LayerTests.hpp | 6 | ||||
-rwxr-xr-x | src/backends/cl/test/ClLayerTests.cpp | 2 | ||||
-rw-r--r-- | src/backends/neon/test/NeonLayerTests.cpp | 2 | ||||
-rw-r--r-- | src/backends/reference/test/RefLayerTests.cpp | 5 |
6 files changed, 98 insertions, 6 deletions
diff --git a/src/backends/backendsCommon/test/Conv2dTestImpl.hpp b/src/backends/backendsCommon/test/Conv2dTestImpl.hpp index 0ba8d7552c..37fa0f63d6 100755 --- a/src/backends/backendsCommon/test/Conv2dTestImpl.hpp +++ b/src/backends/backendsCommon/test/Conv2dTestImpl.hpp @@ -84,7 +84,9 @@ LayerTestResult<T, 4> SimpleConvolution2dTestImpl( uint32_t padLeft = 0, uint32_t padTop = 0, uint32_t padRight = 0, - uint32_t padBottom = 0) + uint32_t padBottom = 0, + uint32_t strideX = 1, + uint32_t strideY = 1) { unsigned int inputHeight = boost::numeric_cast<unsigned int>(originalInput.shape()[2]); unsigned int inputWidth = boost::numeric_cast<unsigned int>(originalInput.shape()[3]); @@ -181,10 +183,6 @@ LayerTestResult<T, 4> SimpleConvolution2dTestImpl( } ret.outputExpected = MakeTensor<T, 4>(outputTensorInfo, outputData); - // Todo: nontrivial padding and strides. - uint32_t strideX = 1; - uint32_t strideY = 1; - std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo); std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo); @@ -240,7 +238,7 @@ LayerTestResult<T, 4> SimpleConvolution2dNhwcTestImpl( const boost::multi_array<T, 4>& kernel, const boost::multi_array<B, 1>& bias, const boost::multi_array<T, 4>& outputExpected, - armnn::DataLayout dataLayout, + const armnn::DataLayout dataLayout, float qScale, int32_t qOffset, uint32_t padLeft = 1, diff --git a/src/backends/backendsCommon/test/LayerTests.cpp b/src/backends/backendsCommon/test/LayerTests.cpp index 43b0d33bdd..ddf0d0b587 100755 --- a/src/backends/backendsCommon/test/LayerTests.cpp +++ b/src/backends/backendsCommon/test/LayerTests.cpp @@ -298,6 +298,71 @@ LayerTestResult<T, 4> SimpleConvolution2d3x3NhwcTestCommon( qOffset); } +template<typename T> +LayerTestResult<T, 4> SimpleConvolution2d3x3Stride2x2TestCommon( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + float qScale, + int32_t qOffset, + bool biasEnabled, + const armnn::DataLayout& dataLayout) +{ + // Input is a single-batch, 1 channel, 5x5 image. + armnn::TensorInfo inputDesc({1, 5, 5, 1}, armnn::GetDataType<T>()); + boost::multi_array<T, 4> input = MakeTensor<T, 4>(inputDesc, + { + 1, 5, 2, 3, 5, + 8, 7, 3, 6, 3, + 3, 3, 9, 1, 9, + 4, 1, 8, 1, 3, + 6, 8, 1, 9, 2 + }); + + // Use a 3x3 kernel. + armnn::TensorInfo kernelDesc({1, 3, 3, 1}, armnn::GetDataType<T>()); + boost::multi_array<T, 4> kernel = MakeTensor<T, 4>(kernelDesc, + { + 4, 5, 6, + 0, 0, 0, + 3, 2, 1 + }); + + // Expected output is a single-batch, 1 channel, 3x3 image. + armnn::TensorInfo outputDesc({1, 3, 3, 1}, armnn::GetDataType<T>()); + + const std::vector<T> outputData = + { + 23, 33, 24, + 91, 99, 48, + 26, 50, 19 + }; + + boost::multi_array<T, 4> expectedOutput = MakeTensor<T, 4>(outputDesc, outputData); + + uint32_t padLeft = 1; + uint32_t padTop = 1; + uint32_t padRight = 1; + uint32_t padBottom = 1; + uint32_t strideX = 2; + uint32_t strideY = 2; + + return SimpleConvolution2dNhwcTestImpl<T>(workloadFactory, + memoryManager, + input, + kernel, + boost::multi_array<T, 1>(), + expectedOutput, + dataLayout, + qScale, + qOffset, + padLeft, + padTop, + padRight, + padBottom, + strideX, + strideY); +} + LayerTestResult<float, 4> SimpleConvolution2d3x5Test( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, @@ -338,6 +403,20 @@ LayerTestResult<float, 4> SimpleConvolution2d3x3NhwcTest( armnn::DataLayout::NHWC); } +LayerTestResult<float, 4> SimpleConvolution2d3x3Stride2x2Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + bool biasEnabled, + const armnn::DataLayout layout) +{ + return SimpleConvolution2d3x3Stride2x2TestCommon<float>(workloadFactory, + memoryManager, + 0.f, + 0, + biasEnabled, + layout); +} + LayerTestResult<uint8_t, 4> SimpleConvolution2d3x3Uint8Test( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, diff --git a/src/backends/backendsCommon/test/LayerTests.hpp b/src/backends/backendsCommon/test/LayerTests.hpp index 146f8c4cfe..a871594900 100644 --- a/src/backends/backendsCommon/test/LayerTests.hpp +++ b/src/backends/backendsCommon/test/LayerTests.hpp @@ -66,6 +66,12 @@ LayerTestResult<float, 4> SimpleConvolution2d3x3Test( bool biasEnabled, const armnn::DataLayout layout); +LayerTestResult<float, 4> SimpleConvolution2d3x3Stride2x2Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + bool biasEnabled, + const armnn::DataLayout layout); + LayerTestResult<float, 4> SimpleConvolution2d3x3NhwcTest( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, diff --git a/src/backends/cl/test/ClLayerTests.cpp b/src/backends/cl/test/ClLayerTests.cpp index 92ac5268f8..9b1fac72c5 100755 --- a/src/backends/cl/test/ClLayerTests.cpp +++ b/src/backends/cl/test/ClLayerTests.cpp @@ -78,6 +78,8 @@ ARMNN_AUTO_TEST_CASE(SimpleConvolution2d3x3Uint8, SimpleConvolution2d3x3Uint8Tes ARMNN_AUTO_TEST_CASE(SimpleConvolution2d3x3Uint8Nhwc, SimpleConvolution2d3x3Uint8Test, true, armnn::DataLayout::NHWC) ARMNN_AUTO_TEST_CASE(UnbiasedConvolution2d, SimpleConvolution2d3x5Test, false, armnn::DataLayout::NCHW) ARMNN_AUTO_TEST_CASE(UnbiasedConvolution2dNhwc, SimpleConvolution2d3x5Test, false, armnn::DataLayout::NHWC) +ARMNN_AUTO_TEST_CASE(UnbiasedConvolution2dStride2x2Nhwc, + SimpleConvolution2d3x3Stride2x2Test, false, armnn::DataLayout::NHWC) ARMNN_AUTO_TEST_CASE(UnbiasedConvolution2dSquare, SimpleConvolution2d3x3Test, false, armnn::DataLayout::NCHW) ARMNN_AUTO_TEST_CASE(SimpleConvolution2dAsymmetricPadding, Convolution2dAsymmetricPaddingTest, armnn::DataLayout::NCHW) diff --git a/src/backends/neon/test/NeonLayerTests.cpp b/src/backends/neon/test/NeonLayerTests.cpp index 5b83b2bfa8..999009bc6d 100644 --- a/src/backends/neon/test/NeonLayerTests.cpp +++ b/src/backends/neon/test/NeonLayerTests.cpp @@ -34,6 +34,8 @@ ARMNN_AUTO_TEST_CASE(SimpleConvolution2d3x3Uint8, SimpleConvolution2d3x3Uint8Tes ARMNN_AUTO_TEST_CASE(SimpleConvolution2d3x3Uint8Nhwc, SimpleConvolution2d3x3Uint8Test, true, armnn::DataLayout::NHWC) ARMNN_AUTO_TEST_CASE(UnbiasedConvolution2d, SimpleConvolution2d3x5Test, false, armnn::DataLayout::NCHW) ARMNN_AUTO_TEST_CASE(UnbiasedConvolution2dNhwc, SimpleConvolution2d3x5Test, false, armnn::DataLayout::NHWC) +ARMNN_AUTO_TEST_CASE(UnbiasedConvolution2dStride2x2Nhwc, + SimpleConvolution2d3x3Stride2x2Test, false, armnn::DataLayout::NHWC) ARMNN_AUTO_TEST_CASE(UnbiasedConvolution2dSquare, SimpleConvolution2d3x3Test, false, armnn::DataLayout::NCHW) ARMNN_AUTO_TEST_CASE(SimpleConvolution2dAsymmetricPadding, Convolution2dAsymmetricPaddingTest, armnn::DataLayout::NCHW) diff --git a/src/backends/reference/test/RefLayerTests.cpp b/src/backends/reference/test/RefLayerTests.cpp index 6e7da13831..7223f04ea9 100644 --- a/src/backends/reference/test/RefLayerTests.cpp +++ b/src/backends/reference/test/RefLayerTests.cpp @@ -42,6 +42,11 @@ ARMNN_AUTO_TEST_CASE(SimpleConvolution2d3x3Uint8Nhwc, SimpleConvolution2d3x3Uint ARMNN_AUTO_TEST_CASE(UnbiasedConvolution2dSquare, SimpleConvolution2d3x3Test, false, armnn::DataLayout::NCHW) ARMNN_AUTO_TEST_CASE(UnbiasedConvolution2dSquareNhwc, SimpleConvolution2d3x3Test, false, armnn::DataLayout::NHWC) +ARMNN_AUTO_TEST_CASE(UnbiasedConvolution2dSquareStride2x2Nhwc, + SimpleConvolution2d3x3Stride2x2Test, + false, + armnn::DataLayout::NHWC) + ARMNN_AUTO_TEST_CASE(SimpleConvolution2dAsymmetricPaddingLargerThanHalfKernelSize, Convolution2dAsymmetricPaddingLargerThanHalfKernelSizeTest, armnn::DataLayout::NCHW) |