aboutsummaryrefslogtreecommitdiff
path: root/src/armnn/Network.cpp
diff options
context:
space:
mode:
authorMike Kelly <mike.kelly@arm.com>2022-05-16 23:10:42 +0100
committerRyan OShea <ryan.oshea3@arm.com>2022-05-19 11:06:34 +0100
commit21fe06fad6760a0d453f2de9c8dd790983ae940c (patch)
treebad2f314defadd4b340343d99b6e157b46622039 /src/armnn/Network.cpp
parentb5e03cc39cdabc49bf117c119073f60e9d36a474 (diff)
downloadarmnn-21fe06fad6760a0d453f2de9c8dd790983ae940c.tar.gz
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
Diffstat (limited to 'src/armnn/Network.cpp')
-rw-r--r--src/armnn/Network.cpp29
1 files changed, 24 insertions, 5 deletions
diff --git a/src/armnn/Network.cpp b/src/armnn/Network.cpp
index 77ad5c4dc2..6a646d3cc8 100644
--- a/src/armnn/Network.cpp
+++ b/src/armnn/Network.cpp
@@ -1854,16 +1854,35 @@ IOptimizedNetworkPtr Optimize(const INetwork& inNetwork,
bool NetworkImpl::GetShapeInferenceMethod()
{
- if (m_NetworkOptions.size() > 0 && m_NetworkOptions[0].GetBackendId().Get() == "ShapeInferenceMethod")
+ bool shapeInferenceMethod = false;
+
+ ParseOptions(m_NetworkOptions, "ShapeInferenceMethod", [&](std::string name, const BackendOptions::Var& value)
{
- return m_NetworkOptions[0].GetOption(0).GetValue().AsBool();
- }
+ if (name == "InferAndValidate")
+ {
+ shapeInferenceMethod |= value.AsBool();
+ }
+ });
+ return shapeInferenceMethod;
+}
- return false;
+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()