aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthew Jackson <matthew.jackson@arm.com>2019-08-02 14:53:10 +0100
committerMatteo Martincigh <matteo.martincigh@arm.com>2019-08-07 10:10:36 +0000
commit5488cfaaa1a411cb5a18c81a98b90c6e3011abdc (patch)
tree0443b5faafbdce68583cc7141c377b377ec0a47b
parent3c4eb3520ad5da2720dfdd8f4b7a5333f8b9da80 (diff)
downloadarmnn-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
-rw-r--r--src/backends/neon/workloads/NeonDepthwiseConvolutionWorkload.cpp22
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*>(