From 8fe50c6653e30ce3b2de7278b63610429b30dabe Mon Sep 17 00:00:00 2001 From: Finn Williams Date: Fri, 9 Oct 2020 15:52:57 +0100 Subject: IVGCVSW-5359 Fix Transpose Conv2d Dynamic tests Signed-off-by: Finn Williams Change-Id: I377af50c1ae17aef9b730d1c8ef6a2b54d9d4c5c --- ConversionUtils_1_2.hpp | 41 +++++++++++++++++++++++++++++------------ 1 file changed, 29 insertions(+), 12 deletions(-) diff --git a/ConversionUtils_1_2.hpp b/ConversionUtils_1_2.hpp index 256be4a5..779d88f4 100644 --- a/ConversionUtils_1_2.hpp +++ b/ConversionUtils_1_2.hpp @@ -2767,18 +2767,6 @@ bool ConvertTransposeConv2d(const HalOperation& operation, const HalModel& model const uint32_t kernelX = weights.GetShape()[widthIndex]; const uint32_t kernelY = weights.GetShape()[heightIndex]; - const uint32_t outputX = outputInfo.GetShape()[widthIndex]; - const uint32_t outputY = outputInfo.GetShape()[heightIndex]; - - CalcPaddingTransposeConv(outputX, kernelX, strideX, padLeft, padRight, paddingScheme); - CalcPaddingTransposeConv(outputY, kernelY, strideY, padTop, padBottom, paddingScheme); - - // NOTE: The Android NN API allows for negative padding values in TransposeConv2d, - // but Arm NN only supports values >= 0 - if (padLeft < 0 || padRight < 0 || padTop < 0 || padBottom < 0) - { - return Fail("%s: Negative padding values are not supported", __func__); - } // If output shape has been specified as a parameter then extract it and make it available. const HalOperand* outputShapeOperand = GetInputOperand(operation, 3, model, false); @@ -2793,6 +2781,35 @@ bool ConvertTransposeConv2d(const HalOperation& operation, const HalModel& model desc.m_OutputShapeEnabled = true; } + uint32_t outputX; + uint32_t outputY; + + if (IsDynamicTensor(outputInfo)) + { + if (outputShape.size() == 0) + { + return Fail("%s: Padding sizes cannot be inferred", __func__); + } + + outputX = outputShape[widthIndex]; + outputY = outputShape[heightIndex]; + } + else + { + outputX = outputInfo.GetShape()[widthIndex]; + outputY = outputInfo.GetShape()[heightIndex]; + } + + CalcPaddingTransposeConv(outputX, kernelX, strideX, padLeft, padRight, paddingScheme); + CalcPaddingTransposeConv(outputY, kernelY, strideY, padTop, padBottom, paddingScheme); + + // NOTE: The Android NN API allows for negative padding values in TransposeConv2d, + // but Arm NN only supports values >= 0 + if (padLeft < 0 || padRight < 0 || padTop < 0 || padBottom < 0) + { + return Fail("%s: Negative padding values are not supported", __func__); + } + desc.m_StrideX = armnn::numeric_cast(strideX); desc.m_StrideY = armnn::numeric_cast(strideY); desc.m_PadLeft = armnn::numeric_cast(padLeft); -- cgit v1.2.1