aboutsummaryrefslogtreecommitdiff
path: root/ConversionUtils_1_3.hpp
diff options
context:
space:
mode:
authorSadik Armagan <sadik.armagan@arm.com>2020-09-03 15:22:29 +0100
committerSadik Armagan <sadik.armagan@arm.com>2020-09-03 15:22:29 +0100
commit34db1872566a1737fd94305d0b3f3e7741d99b60 (patch)
tree2897c7efa59061c43d6c3a92328d5dd817adf97f /ConversionUtils_1_3.hpp
parentbaa1f9f24eb8e5d5bc2011e2eee6278140846a9a (diff)
downloadandroid-nn-driver-34db1872566a1737fd94305d0b3f3e7741d99b60.tar.gz
IVGCVSW-5274 'Update ConvertQuantizedLstm function to use ShapeInferenceMethod'
* Enabled Dynamic Tensors in QUANTIZED_LSTM operator. !android-nn-driver:3897 Signed-off-by: Sadik Armagan <sadik.armagan@arm.com> Change-Id: I415014d19729aac255479099e372e5ff1a6dd3e2
Diffstat (limited to 'ConversionUtils_1_3.hpp')
-rw-r--r--ConversionUtils_1_3.hpp66
1 files changed, 42 insertions, 24 deletions
diff --git a/ConversionUtils_1_3.hpp b/ConversionUtils_1_3.hpp
index e6961253..445b9ea7 100644
--- a/ConversionUtils_1_3.hpp
+++ b/ConversionUtils_1_3.hpp
@@ -600,29 +600,36 @@ bool ConvertQuantizedLstm(const HalOperation& operation, const HalModel& model,
}
// Check if the layer is supported
-
- if (IsDynamicTensor(constOutputStateOutInfo) ||
- IsDynamicTensor(cellStateOutInfo) ||
- IsDynamicTensor(constOutputInfo))
+ bool isSupported = false;
+ auto validateFunc = [&](const armnn::TensorInfo& cellStateOutInfo, bool& isSupported)
+ {
+ FORWARD_LAYER_SUPPORT_FUNC(__func__,
+ IsQLstmSupported,
+ data.m_Backends,
+ isSupported,
+ inputInfo,
+ outputStatePrevTimeStepInfo,
+ cellStatePrevTimeStepInfo,
+ constOutputStateOutInfo,
+ cellStateOutInfo,
+ constOutputInfo,
+ desc,
+ paramsInfo);
+ };
+
+ bool isDynamic = false;
+ if (!IsDynamicTensor(constOutputStateOutInfo) &&
+ !IsDynamicTensor(cellStateOutInfo) &&
+ !IsDynamicTensor(constOutputInfo))
+ {
+ validateFunc(outputInfo, isSupported);
+ }
+ else
{
- return Fail("%s: Dynamic output tensors are not supported %d %d %d %d", __func__,
- IsDynamicTensor(constOutputStateOutInfo), IsDynamicTensor(cellStateOutInfo),
- IsDynamicTensor(constOutputInfo));
+ isDynamic = true;
+ isSupported = AreDynamicTensorsSupported();
}
- bool isSupported = false;
- FORWARD_LAYER_SUPPORT_FUNC(__func__,
- IsQLstmSupported,
- data.m_Backends,
- isSupported,
- inputInfo,
- outputStatePrevTimeStepInfo,
- cellStatePrevTimeStepInfo,
- constOutputStateOutInfo,
- cellStateOutInfo,
- constOutputInfo,
- desc,
- paramsInfo);
if (!isSupported)
{
return false;
@@ -635,10 +642,21 @@ bool ConvertQuantizedLstm(const HalOperation& operation, const HalModel& model,
outputStatePrevTimeStep.Connect(layer->GetInputSlot(1));
cellStatePrevTimeStep.Connect(layer->GetInputSlot(2));
- return ( SetupAndTrackLayerOutputSlot<HalPolicy>(operation, 0, *layer, 0, model, data,
- &constOutputStateOutInfo) &&
- SetupAndTrackLayerOutputSlot<HalPolicy>(operation, 1, *layer, 1, model, data) &&
- SetupAndTrackLayerOutputSlot<HalPolicy>(operation, 2, *layer, 2, model, data, &constOutputInfo));
+ if (!isDynamic)
+ {
+ return ( SetupAndTrackLayerOutputSlot<HalPolicy>(
+ operation, 0, *layer, 0, model, data, &constOutputStateOutInfo) &&
+ SetupAndTrackLayerOutputSlot<HalPolicy>(operation, 1, *layer, 1, model, data) &&
+ SetupAndTrackLayerOutputSlot<HalPolicy>(operation, 2, *layer, 2, model, data, &constOutputInfo));
+ }
+ else
+ {
+ return ( SetupAndTrackLayerOutputSlot<HalPolicy>(
+ operation, 0, *layer, 0, model, data, &constOutputStateOutInfo) &&
+ SetupAndTrackLayerOutputSlot<HalPolicy>(
+ operation, 1, *layer, 1, model, data, nullptr, validateFunc, true) &&
+ SetupAndTrackLayerOutputSlot<HalPolicy>(operation, 2, *layer, 2, model, data, &constOutputInfo));
+ }
}
template<typename HalPolicy,