diff options
author | Finn Williams <Finn.Williams@arm.com> | 2020-10-09 15:52:57 +0100 |
---|---|---|
committer | Finn Williams <Finn.Williams@arm.com> | 2020-10-09 15:52:57 +0100 |
commit | 8fe50c6653e30ce3b2de7278b63610429b30dabe (patch) | |
tree | 3e425eb22d2deb7580ad47cef444dff4ed7fc802 /ConversionUtils_1_2.hpp | |
parent | b0331179a3779a967d5081dffdc2046f14f194d1 (diff) | |
download | android-nn-driver-8fe50c6653e30ce3b2de7278b63610429b30dabe.tar.gz |
IVGCVSW-5359 Fix Transpose Conv2d Dynamic tests
Signed-off-by: Finn Williams <Finn.Williams@arm.com>
Change-Id: I377af50c1ae17aef9b730d1c8ef6a2b54d9d4c5c
Diffstat (limited to 'ConversionUtils_1_2.hpp')
-rw-r--r-- | ConversionUtils_1_2.hpp | 41 |
1 files 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<HalPolicy>(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<uint32_t>(strideX); desc.m_StrideY = armnn::numeric_cast<uint32_t>(strideY); desc.m_PadLeft = armnn::numeric_cast<uint32_t>(padLeft); |