From 9fd373954d64fbae72d1726bbdfc57a18a3a2f6d Mon Sep 17 00:00:00 2001 From: Aron Virginas-Tar Date: Mon, 15 Jul 2019 18:04:32 +0100 Subject: IVGCVSW-3455 Support dynamic output shape in hal_1_2::HalPolicy::ConvertDepthwiseConv2d Signed-off-by: Aron Virginas-Tar Change-Id: Iba64a674d772a76ca071553cb423ed870fae9bfd --- 1.2/HalPolicy.cpp | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) (limited to '1.2') diff --git a/1.2/HalPolicy.cpp b/1.2/HalPolicy.cpp index 69cc4713..0c57636c 100644 --- a/1.2/HalPolicy.cpp +++ b/1.2/HalPolicy.cpp @@ -340,7 +340,6 @@ bool HalPolicy::ConvertDepthwiseConv2d(const Operation& operation, const Model& } const armnn::TensorInfo& inputInfo = input.GetTensorInfo(); - const armnn::TensorInfo& outputInfo = GetTensorInfoForOperand(*output); // ArmNN does not currently support non-fixed weights or bias // Find the shape of the weights tensor. In AndroidNN this will be [ 1, H, W, I * M ] @@ -447,6 +446,22 @@ bool HalPolicy::ConvertDepthwiseConv2d(const Operation& operation, const Model& desc.m_BiasEnabled = true; armnn::Optional biases(bias.GetInfo()); + armnn::TensorInfo outputInfo = GetTensorInfoForOperand(*output); + if (IsDynamicOutput(outputInfo)) + { + try + { + ALOGD("Output shape not set, will infer from inputs"); + outputInfo.SetShape(InferDepthwiseConvolution2dOutputShape(inputInfo.GetShape(), + weights.GetInfo().GetShape(), + desc)); + } + catch (armnn::Exception& e) + { + return Fail("%s: Could not infer dynamic output shape: %s", __func__, e.what()); + } + } + bool isSupported = false; FORWARD_LAYER_SUPPORT_FUNC(__func__, IsDepthwiseConvolutionSupported, @@ -457,6 +472,7 @@ bool HalPolicy::ConvertDepthwiseConv2d(const Operation& operation, const Model& desc, weights.GetInfo(), biases); + if (!isSupported) { return false; @@ -464,6 +480,7 @@ bool HalPolicy::ConvertDepthwiseConv2d(const Operation& operation, const Model& armnn::IConnectableLayer* startLayer = data.m_Network->AddDepthwiseConvolution2dLayer(desc, weights, armnn::Optional(bias)); + if (!startLayer) { return Fail("%s: AddDepthwiseConvolution2dLayer failed", __func__); @@ -477,7 +494,12 @@ bool HalPolicy::ConvertDepthwiseConv2d(const Operation& operation, const Model& input.Connect(startLayer->GetInputSlot(0)); - return SetupAndTrackLayerOutputSlot(operation, 0, *endLayer, model, data); + return SetupAndTrackLayerOutputSlot(operation, + 0, + *endLayer, + model, + data, + armnn::Optional(outputInfo)); } bool HalPolicy::ConvertMaximum(const Operation& operation, const Model& model, ConversionData& data) -- cgit v1.2.1