IVGCVSW-6929 Support for models with implicit expanded
dimensions
* Added allow-expanded-dims to TFLite parser and ArmNN delegate
* If true ArmNN will disregard dimensions with a size of 1 when
validating tensor shapes. Tensor sizes must still match.
* This allows us to support models where tensors have expanded
dimensions (i.e. extra dimensions with a size of 1).
* Fixed bug in Network where it assumed that only the first option
could be ShapeInferenceMethod.
* Fixed bug where m_ShapeInferenceMethod was lost when copying or
moving Graphs.
* Changed Delegate to pass "infer-output-shape", "allow-expanded-dims"
and other BackendOptions through to the Network during construction.
Signed-off-by: Mike Kelly <mike.kelly@arm.com>
Change-Id: Ibe7c5ae6597796fc9164cb07bd372bd7f8f8cacf
diff --git a/src/armnn/Network.cpp b/src/armnn/Network.cpp
index 77ad5c4..6a646d3 100644
--- a/src/armnn/Network.cpp
+++ b/src/armnn/Network.cpp
@@ -1854,16 +1854,35 @@
bool NetworkImpl::GetShapeInferenceMethod()
{
- if (m_NetworkOptions.size() > 0 && m_NetworkOptions[0].GetBackendId().Get() == "ShapeInferenceMethod")
- {
- return m_NetworkOptions[0].GetOption(0).GetValue().AsBool();
- }
+ bool shapeInferenceMethod = false;
- return false;
+ ParseOptions(m_NetworkOptions, "ShapeInferenceMethod", [&](std::string name, const BackendOptions::Var& value)
+ {
+ if (name == "InferAndValidate")
+ {
+ shapeInferenceMethod |= value.AsBool();
+ }
+ });
+ return shapeInferenceMethod;
}
+
+bool NetworkImpl::GetAllowExpandedDims()
+{
+ bool allowExpandedDims = false;
+
+ ParseOptions(m_NetworkOptions, "AllowExpandedDims", [&](std::string name, const BackendOptions::Var& value)
+ {
+ if (name == "AllowExpandedDims")
+ {
+ allowExpandedDims |= value.AsBool();
+ }
+ });
+ return allowExpandedDims;
+}
+
NetworkImpl::NetworkImpl(NetworkOptions networkOptions)
: m_NetworkOptions(networkOptions),
- m_Graph(std::make_unique<Graph>(GetShapeInferenceMethod()))
+ m_Graph(std::make_unique<Graph>(GetShapeInferenceMethod(), GetAllowExpandedDims()))
{}
NetworkImpl::~NetworkImpl()