diff options
author | Jan Eilers <jan.eilers@arm.com> | 2019-07-11 10:22:36 +0100 |
---|---|---|
committer | Jan Eilers <jan.eilers@arm.com> | 2019-07-12 10:22:41 +0100 |
commit | 59c6670cac0aac1fedf426fb19ccd578da6f9f55 (patch) | |
tree | 733d85d3812d022940c60a12de9a6e76a28bcab7 /src | |
parent | 974e5b60a4d6e3147ce7869940d1e291bf9af95a (diff) | |
download | armnn-59c6670cac0aac1fedf426fb19ccd578da6f9f55.tar.gz |
IVGCVSW-3300 Add Neon backend support for dilated Convolution2d
* Update NeonConvolution2dWorkload
* Enable unit tests
Signed-off-by: Jan Eilers <jan.eilers@arm.com>
Change-Id: I1709e71e4944c5cbdcc99a003479c1fce45a612a
Diffstat (limited to 'src')
-rw-r--r-- | src/backends/neon/test/NeonLayerTests.cpp | 53 | ||||
-rw-r--r-- | src/backends/neon/workloads/NeonConvolution2dWorkload.cpp | 15 |
2 files changed, 66 insertions, 2 deletions
diff --git a/src/backends/neon/test/NeonLayerTests.cpp b/src/backends/neon/test/NeonLayerTests.cpp index 049680aafe..586e994db5 100644 --- a/src/backends/neon/test/NeonLayerTests.cpp +++ b/src/backends/neon/test/NeonLayerTests.cpp @@ -48,6 +48,59 @@ ARMNN_AUTO_TEST_CASE(SimpleConvolution2dAsymmetricPaddingNhwc, ARMNN_AUTO_TEST_CASE(SimpleConvolution2dSquareNhwc, SimpleConvolution2d3x3NhwcTest, false) +ARMNN_AUTO_TEST_CASE(Convolution2d3x3Dilation3x3, + Convolution2d3x3Dilation3x3Test<armnn::DataType::Float32, armnn::DataType::Float32>, + false, + armnn::DataLayout::NCHW) +ARMNN_AUTO_TEST_CASE(Convolution2d3x3Dilation3x3Nhwc, + Convolution2d3x3Dilation3x3Test<armnn::DataType::Float32, armnn::DataType::Float32>, + false, + armnn::DataLayout::NHWC) +ARMNN_AUTO_TEST_CASE(Convolution2d3x3Dilation3x3Uint8, + Convolution2d3x3Dilation3x3Test<armnn::DataType::QuantisedAsymm8, armnn::DataType::Signed32>, + false, + armnn::DataLayout::NCHW) +ARMNN_AUTO_TEST_CASE(Convolution2d3x3Dilation3x3NhwcUint8, + Convolution2d3x3Dilation3x3Test<armnn::DataType::QuantisedAsymm8, armnn::DataType::Signed32>, + false, + armnn::DataLayout::NHWC) +ARMNN_AUTO_TEST_CASE(Convolution2d2x3x3Dilation3x3, + Convolution2d2x3x3Dilation3x3Test<armnn::DataType::Float32, armnn::DataType::Float32>, + false, + armnn::DataLayout::NCHW) +ARMNN_AUTO_TEST_CASE(Convolution2d2x3x3Dilation3x3Nhwc, + Convolution2d2x3x3Dilation3x3Test<armnn::DataType::Float32, armnn::DataType::Float32>, + false, + armnn::DataLayout::NHWC) +ARMNN_AUTO_TEST_CASE(Convolution2d2x3x3Dilation3x3Uint8, + Convolution2d2x3x3Dilation3x3Test<armnn::DataType::QuantisedAsymm8, armnn::DataType::Signed32>, + false, + armnn::DataLayout::NCHW) +ARMNN_AUTO_TEST_CASE(Convolution2d2x3x3Dilation3x3NhwcUint8, + Convolution2d2x3x3Dilation3x3Test<armnn::DataType::QuantisedAsymm8, armnn::DataType::Signed32>, + false, + armnn::DataLayout::NHWC) +ARMNN_AUTO_TEST_CASE(Convolution2d2x2Dilation2x2Padding2x2Stride3x3, + Convolution2d2x2Dilation2x2Padding2x2Stride3x3Test + <armnn::DataType::Float32, armnn::DataType::Float32>, + false, + armnn::DataLayout::NCHW) +ARMNN_AUTO_TEST_CASE(Convolution2d2x2Dilation2x2Padding2x2Stride3x3Nhwc, + Convolution2d2x2Dilation2x2Padding2x2Stride3x3Test + <armnn::DataType::Float32, armnn::DataType::Float32>, + false, + armnn::DataLayout::NHWC) +ARMNN_AUTO_TEST_CASE(Convolution2d2x2Dilation2x2Padding2x2Stride3x3Uint8, + Convolution2d2x2Dilation2x2Padding2x2Stride3x3Test + <armnn::DataType::QuantisedAsymm8, armnn::DataType::Signed32>, + false, + armnn::DataLayout::NCHW) +ARMNN_AUTO_TEST_CASE(Convolution2d2x2Dilation2x2Padding2x2Stride3x3NhwcUint8, + Convolution2d2x2Dilation2x2Padding2x2Stride3x3Test + <armnn::DataType::QuantisedAsymm8, armnn::DataType::Signed32>, + false, + armnn::DataLayout::NHWC) + // Depthwise Convolution ARMNN_AUTO_TEST_CASE(DepthwiseConvolution2dDepthMul1, DepthwiseConvolution2dDepthMul1Test, true, armnn::DataLayout::NCHW) diff --git a/src/backends/neon/workloads/NeonConvolution2dWorkload.cpp b/src/backends/neon/workloads/NeonConvolution2dWorkload.cpp index a8137a27ad..564ba0310f 100644 --- a/src/backends/neon/workloads/NeonConvolution2dWorkload.cpp +++ b/src/backends/neon/workloads/NeonConvolution2dWorkload.cpp @@ -29,6 +29,9 @@ arm_compute::Status NeonConvolution2dWorkloadValidate(const TensorInfo& input, const arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output, descriptor.m_DataLayout); const arm_compute::TensorInfo aclWeightsInfo = BuildArmComputeTensorInfo(weights, descriptor.m_DataLayout); + const arm_compute::Size2D aclDilationInfo = BuildArmComputeSize2D(descriptor.m_DilationX, + descriptor.m_DilationY); + arm_compute::TensorInfo aclBiasesInfo; arm_compute::TensorInfo *optionalAclBiasesInfo = nullptr; @@ -46,7 +49,9 @@ arm_compute::Status NeonConvolution2dWorkloadValidate(const TensorInfo& input, &aclWeightsInfo, optionalAclBiasesInfo, &aclOutputInfo, - layerInfo); + layerInfo, + arm_compute::WeightsInfo(), + aclDilationInfo); } NeonConvolution2dWorkload::NeonConvolution2dWorkload( @@ -84,12 +89,18 @@ NeonConvolution2dWorkload::NeonConvolution2dWorkload( m_Data.m_Parameters.m_PadBottom, arm_compute::DimensionRoundingType::FLOOR); + const arm_compute::Size2D aclDilationInfo = BuildArmComputeSize2D(m_Data.m_Parameters.m_DilationX, + m_Data.m_Parameters.m_DilationY); + auto convolutionLayer = std::make_unique<arm_compute::NEConvolutionLayer>(memoryManager); convolutionLayer->configure(&input, m_KernelTensor.get(), m_BiasTensor.get(), &output, - padStrideInfo); + padStrideInfo, + arm_compute::WeightsInfo(), + aclDilationInfo); + m_ConvolutionLayer.reset(convolutionLayer.release()); BOOST_ASSERT(m_ConvolutionLayer); |