From f0bd68386cc8598f702b1df2d1ba60094e6a9d97 Mon Sep 17 00:00:00 2001 From: Pablo Tello Date: Fri, 26 Apr 2019 17:58:13 +0100 Subject: MLCE-101: Adding dilation support in conv and dconv Added support for dilation in DepthwiseConvolution2d in the Neon and CL backends. Change-Id: Ie1522b498c07f80d6efcf9dc79e926c8cfa06ca5 Signed-off-by: Pablo Tello --- .../workloads/ClDepthwiseConvolutionWorkload.cpp | 25 ++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) (limited to 'src/backends/cl/workloads') diff --git a/src/backends/cl/workloads/ClDepthwiseConvolutionWorkload.cpp b/src/backends/cl/workloads/ClDepthwiseConvolutionWorkload.cpp index 1ff0978a40..e681e95d90 100644 --- a/src/backends/cl/workloads/ClDepthwiseConvolutionWorkload.cpp +++ b/src/backends/cl/workloads/ClDepthwiseConvolutionWorkload.cpp @@ -52,13 +52,19 @@ arm_compute::Status ClDepthwiseConvolutionWorkloadValidate(const TensorInfo& inp } const arm_compute::PadStrideInfo aclPadStrideInfo = BuildArmComputePadStrideInfo(descriptor); + const arm_compute::Size2D aclDilationInfo = BuildArmComputeSize2D( + descriptor.m_DilationX, + descriptor.m_DilationY); return arm_compute::CLDepthwiseConvolutionLayer::validate(&aclInputInfo, &aclWeightsInfo, optionalAclBiasesInfo, &aclOutputInfo, aclPadStrideInfo, - aclDepthMultiplier); + aclDepthMultiplier, + arm_compute::ActivationLayerInfo(), + aclDilationInfo); + } ClDepthwiseConvolutionWorkload::ClDepthwiseConvolutionWorkload( @@ -85,7 +91,7 @@ ClDepthwiseConvolutionWorkload::ClDepthwiseConvolutionWorkload( BuildArmComputeTensor(*m_BiasTensor, m_Data.m_Bias->GetTensorInfo(), m_Data.m_Parameters.m_DataLayout); } - arm_compute::PadStrideInfo padStrideInfo(m_Data.m_Parameters.m_StrideX, + const arm_compute::PadStrideInfo padStrideInfo(m_Data.m_Parameters.m_StrideX, m_Data.m_Parameters.m_StrideY, m_Data.m_Parameters.m_PadLeft, m_Data.m_Parameters.m_PadRight, @@ -93,6 +99,11 @@ ClDepthwiseConvolutionWorkload::ClDepthwiseConvolutionWorkload( 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); + + std::string name = std::string("ClDepthwiseConvolutionWorkload"); m_Data.ValidateInputsOutputs(name, 1, 1); @@ -109,6 +120,7 @@ ClDepthwiseConvolutionWorkload::ClDepthwiseConvolutionWorkload( // Get the depth multiplier const unsigned int depthMultiplier = weightInfo.GetShape()[0]; + // Check for optimisation opportunities. bool use3x3Optimisation = (weightInfo.GetShape()[2] == 3) && (weightInfo.GetShape()[3] == 3); if (use3x3Optimisation) @@ -120,7 +132,9 @@ ClDepthwiseConvolutionWorkload::ClDepthwiseConvolutionWorkload( m_BiasTensor.get(), &output, padStrideInfo, - depthMultiplier); + depthMultiplier, + arm_compute::ActivationLayerInfo(), + aclDilationInfo); } else { @@ -131,7 +145,10 @@ ClDepthwiseConvolutionWorkload::ClDepthwiseConvolutionWorkload( m_BiasTensor.get(), &output, padStrideInfo, - depthMultiplier); + depthMultiplier, + arm_compute::ActivationLayerInfo(), + aclDilationInfo); + } BOOST_ASSERT(m_DepthwiseConvolutionLayer); -- cgit v1.2.1