diff options
author | Colm Donelan <Colm.Donelan@arm.com> | 2020-07-03 15:54:28 +0100 |
---|---|---|
committer | Colm Donelan <colm.donelan@arm.com> | 2020-07-06 06:45:07 +0000 |
commit | 0ad3ef15b7b731e9b722123f8763b2f1e3783cb8 (patch) | |
tree | 189c1bc5a42ee9fcb2b79fc67bdeac89adb01364 /src/armnn/layers | |
parent | 11f6ace7cd8bf8dd2cf40bdab57a66bfb0f25f0e (diff) | |
download | armnn-0ad3ef15b7b731e9b722123f8763b2f1e3783cb8.tar.gz |
IVGCVSW-4988 Add handling output shape parameter to TransposeConvolution2d
* Add m_OutputShape and m_OutputShapeEnabled to
TransposeConvolution2dDescriptor.
* Update TfLite parser to populate m_OutputShape if found in the model.
Handle both Signed32 from tflite files and QAsymmU8 from test fixtures.
* Update TransposeConvolution2dLayer to use m_OutputShape instead of
InferOutputShapes if specified.
Signed-off-by: Colm Donelan <Colm.Donelan@arm.com>
Change-Id: Ia6933065375eb8006c916f1ca67c38dc50bc205c
Diffstat (limited to 'src/armnn/layers')
-rw-r--r-- | src/armnn/layers/TransposeConvolution2dLayer.cpp | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/src/armnn/layers/TransposeConvolution2dLayer.cpp b/src/armnn/layers/TransposeConvolution2dLayer.cpp index ffe92bbbd2..8a264253e0 100644 --- a/src/armnn/layers/TransposeConvolution2dLayer.cpp +++ b/src/armnn/layers/TransposeConvolution2dLayer.cpp @@ -111,16 +111,26 @@ void TransposeConvolution2dLayer::ValidateTensorShapesFromInputs(ShapeInferenceM ARMNN_ASSERT_MSG(m_Weight != nullptr, "TransposeConvolution2dLayer: Weight data cannot be null."); - auto inferredShapes = InferOutputShapes({ - GetInputSlot(0).GetConnection()->GetTensorInfo().GetShape(), - m_Weight->GetTensorInfo().GetShape() }); + std::vector<TensorShape> expectedOutputShape; + // If output_shape was specified then use it rather than calculate an inferred output shape. + if (m_Param.m_OutputShapeEnabled) + { + TensorShape shapeAsTensorShape(static_cast<unsigned int>(m_Param.m_OutputShape.size()), + m_Param.m_OutputShape.data()); + expectedOutputShape.push_back(shapeAsTensorShape); + } + else + { + expectedOutputShape = InferOutputShapes({GetInputSlot(0).GetConnection()->GetTensorInfo().GetShape(), + m_Weight->GetTensorInfo().GetShape() }); + } - ARMNN_ASSERT(inferredShapes.size() == 1); + ARMNN_ASSERT(expectedOutputShape.size() == 1); ConditionalThrowIfNotEqual<LayerValidationException>( "TransposeConvolution2dLayer: TensorShape set on OutputSlot[0] does not match the inferred shape.", GetOutputSlot(0).GetTensorInfo().GetShape(), - inferredShapes[0]); + expectedOutputShape[0]); } Layer::ConstantTensors TransposeConvolution2dLayer::GetConstantTensorsByRef() |