diff options
author | Matthew Jackson <matthew.jackson@arm.com> | 2019-08-02 14:53:10 +0100 |
---|---|---|
committer | Matteo Martincigh <matteo.martincigh@arm.com> | 2019-08-07 10:10:36 +0000 |
commit | 5488cfaaa1a411cb5a18c81a98b90c6e3011abdc (patch) | |
tree | 0443b5faafbdce68583cc7141c377b377ec0a47b /src/backends | |
parent | 3c4eb3520ad5da2720dfdd8f4b7a5333f8b9da80 (diff) | |
download | armnn-5488cfaaa1a411cb5a18c81a98b90c6e3011abdc.tar.gz |
IVGCVSW-3608 Fix Neon depthwise convolution 5x5 failure
* Fix issued caused by layers with 5x5 filters and depth multipliers > 1
Signed-off-by: Matthew Jackson <matthew.jackson@arm.com>
Signed-off-by: Aron Virginas-Tar <Aron.Virginas-Tar@arm.com>
Change-Id: I58435a1f0e3c7e69861dc130fad525a01e2a849d
Diffstat (limited to 'src/backends')
-rw-r--r-- | src/backends/neon/workloads/NeonDepthwiseConvolutionWorkload.cpp | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/src/backends/neon/workloads/NeonDepthwiseConvolutionWorkload.cpp b/src/backends/neon/workloads/NeonDepthwiseConvolutionWorkload.cpp index 400ae18807..18085edab5 100644 --- a/src/backends/neon/workloads/NeonDepthwiseConvolutionWorkload.cpp +++ b/src/backends/neon/workloads/NeonDepthwiseConvolutionWorkload.cpp @@ -113,11 +113,23 @@ NeonDepthwiseConvolutionWorkload::NeonDepthwiseConvolutionWorkload( arm_compute::PadStrideInfo padStrideInfo = BuildArmComputePadStrideInfo(m_Data.m_Parameters); - // Check for optimisation opportunities. - const bool use3x3Optimisation = (weightInfo.GetShape()[2] == 3) && (weightInfo.GetShape()[3] == 3); - const bool use5x5Optimisation = (weightInfo.GetShape()[2] == 5) && (weightInfo.GetShape()[3] == 5); - - if (use3x3Optimisation||use5x5Optimisation) + const arm_compute::ITensorInfo* inputInfo = input.info(); + const arm_compute::ITensorInfo* kernelInfo = m_KernelTensor->info(); + const arm_compute::ITensorInfo* biasInfo = m_BiasTensor ? m_BiasTensor->info() : nullptr; + const arm_compute::ITensorInfo* outputInfo = output.info(); + + // Check for optimisation opportunities + arm_compute::Status optimizationStatus = + arm_compute::NEDepthwiseConvolutionLayerOptimized::validate(inputInfo, + kernelInfo, + biasInfo, + outputInfo, + padStrideInfo, + depthMultiplier, + arm_compute::ActivationLayerInfo(), + aclDilationInfo); + + if (optimizationStatus.error_code() == arm_compute::ErrorCode::OK) { m_pDepthwiseConvolutionLayer = std::make_unique<arm_compute::NEDepthwiseConvolutionLayerOptimized>(); static_cast<arm_compute::NEDepthwiseConvolutionLayerOptimized*>( |