aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFinn Williams <Finn.Williams@arm.com>2020-10-09 15:52:57 +0100
committerFinn Williams <Finn.Williams@arm.com>2020-10-09 15:52:57 +0100
commit8fe50c6653e30ce3b2de7278b63610429b30dabe (patch)
tree3e425eb22d2deb7580ad47cef444dff4ed7fc802
parentb0331179a3779a967d5081dffdc2046f14f194d1 (diff)
downloadandroid-nn-driver-8fe50c6653e30ce3b2de7278b63610429b30dabe.tar.gz
IVGCVSW-5359 Fix Transpose Conv2d Dynamic tests
Signed-off-by: Finn Williams <Finn.Williams@arm.com> Change-Id: I377af50c1ae17aef9b730d1c8ef6a2b54d9d4c5c
-rw-r--r--ConversionUtils_1_2.hpp41
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);