IVGCVSW-3578 Do not attempt to infer dynamic output shapes
* Report dynamic output tensors as unsupported for all operations,
regardless of HAL level
Signed-off-by: Aron Virginas-Tar <[email protected]>
Change-Id: I2341dc96be965886666b75515e9a226d813a1591
diff --git a/1.0/HalPolicy.cpp b/1.0/HalPolicy.cpp
index 8dd603a..db0e2a2 100644
--- a/1.0/HalPolicy.cpp
+++ b/1.0/HalPolicy.cpp
@@ -8,7 +8,6 @@
#include <armnn/Optional.hpp>
#include "FullyConnected.hpp"
-#include "OutputShapeUtils.hpp"
#include "Utils.hpp"
namespace armnn_driver
@@ -122,7 +121,7 @@
const armnn::TensorInfo& outputInfo = GetTensorInfoForOperand(*outputOperand);
if (IsDynamicTensor(outputInfo))
{
- return Fail("%s: Dynamic output shapes are not supported in this HAL version", __func__);
+ return Fail("%s: Dynamic output tensors are not supported", __func__);
}
bool isSupported = false;
@@ -418,11 +417,10 @@
return Fail("%s: Operation has invalid outputs", __func__);
}
- armnn::TensorInfo outputInfo = GetTensorInfoForOperand(*outputOperand);
+ const armnn::TensorInfo& outputInfo = GetTensorInfoForOperand(*outputOperand);
if (IsDynamicTensor(outputInfo))
{
- ALOGD("Output shape not set, will infer from input");
- outputInfo.SetShape(input.GetTensorInfo().GetShape());
+ return Fail("%s: Dynamic output tensors are not supported", __func__);
}
bool isSupported = false;
@@ -441,12 +439,7 @@
assert(layer != nullptr);
input.Connect(layer->GetInputSlot(0));
- return SetupAndTrackLayerOutputSlot<hal_1_0::HalPolicy>(operation,
- 0,
- *layer,
- model,
- data,
- armnn::Optional<armnn::TensorInfo>(outputInfo));
+ return SetupAndTrackLayerOutputSlot<hal_1_0::HalPolicy>(operation, 0, *layer, model, data);
}
bool HalPolicy::ConvertFloor(const Operation& operation, const Model& model, ConversionData& data)
@@ -465,13 +458,19 @@
return Fail("%s: Operation has invalid outputs", __func__);
}
+ const armnn::TensorInfo& outputInfo = GetTensorInfoForOperand(*outputOperand);
+ if (IsDynamicTensor(outputInfo))
+ {
+ return Fail("%s: Dynamic output tensors are not supported", __func__);
+ }
+
bool isSupported = false;
FORWARD_LAYER_SUPPORT_FUNC(__func__,
IsFloorSupported,
data.m_Backends,
isSupported,
input.GetTensorInfo(),
- GetTensorInfoForOperand(*outputOperand));
+ outputInfo);
if (!isSupported)
{
return false;
@@ -500,13 +499,12 @@
return Fail("%s: Could not read output 0", __func__);
}
- const armnn::TensorInfo& inputInfo = input.GetTensorInfo();
- armnn::TensorInfo outputInfo = GetTensorInfoForOperand(*output);
+ const armnn::TensorInfo& inputInfo = input.GetTensorInfo();
+ const armnn::TensorInfo& outputInfo = GetTensorInfoForOperand(*output);
if (IsDynamicTensor(outputInfo))
{
- ALOGD("Output shape not set, will infer from inputs");
- outputInfo.SetShape(inputInfo.GetShape());
+ return Fail("%s: Dynamic output tensors are not supported", __func__);
}
// ArmNN does not currently support non-fixed weights or bias
@@ -581,12 +579,7 @@
input.Connect(startLayer->GetInputSlot(0));
}
- return SetupAndTrackLayerOutputSlot<hal_1_0::HalPolicy>(operation,
- 0,
- *endLayer,
- model,
- data,
- armnn::Optional<armnn::TensorInfo>(outputInfo));
+ return SetupAndTrackLayerOutputSlot<hal_1_0::HalPolicy>(operation, 0, *endLayer, model, data);
}
else
{
@@ -1036,12 +1029,11 @@
}
const armnn::TensorInfo& inputInfo = input.GetTensorInfo();
- armnn::TensorInfo outputInfo = GetTensorInfoForOperand(*output);
+ const armnn::TensorInfo& outputInfo = GetTensorInfoForOperand(*output);
if (IsDynamicTensor(outputInfo))
{
- ALOGD("Output shape not set, will infer from inputs");
- outputInfo.SetShape(inputInfo.GetShape());
+ return Fail("%s: Dynamic output tensors are not supported", __func__);
}
armnn::L2NormalizationDescriptor desc;
@@ -1064,12 +1056,7 @@
assert(layer != nullptr);
input.Connect(layer->GetInputSlot(0));
- return SetupAndTrackLayerOutputSlot<hal_1_0::HalPolicy>(operation,
- 0,
- *layer,
- model,
- data,
- armnn::Optional<armnn::TensorInfo>(outputInfo));
+ return SetupAndTrackLayerOutputSlot<hal_1_0::HalPolicy>(operation, 0, *layer, model, data);
}
bool HalPolicy::ConvertL2Pool2d(const Operation& operation, const Model& model, ConversionData& data)
@@ -1177,11 +1164,10 @@
return Fail("%s: Operation has no outputs", __func__);
}
- armnn::TensorInfo outputInfo = GetTensorInfoForOperand(*outputOperand);
+ const armnn::TensorInfo& outputInfo = GetTensorInfoForOperand(*outputOperand);
if (IsDynamicTensor(outputInfo))
{
- ALOGD("Output shape not set, will infer from input");
- outputInfo.SetShape(input.GetTensorInfo().GetShape());
+ return Fail("%s: Dynamic output tensors are not supported", __func__);
}
armnn::SoftmaxDescriptor desc;
@@ -1207,12 +1193,7 @@
assert(layer != nullptr);
input.Connect(layer->GetInputSlot(0));
- return SetupAndTrackLayerOutputSlot<hal_1_0::HalPolicy>(operation,
- 0,
- *layer,
- model,
- data,
- armnn::Optional<armnn::TensorInfo>(outputInfo));
+ return SetupAndTrackLayerOutputSlot<hal_1_0::HalPolicy>(operation, 0, *layer, model, data);
}
bool HalPolicy::ConvertSpaceToDepth(const Operation& operation, const Model& model, ConversionData& data)