aboutsummaryrefslogtreecommitdiff
path: root/src/armnn/Graph.hpp
diff options
context:
space:
mode:
authorMike Kelly <mike.kelly@arm.com>2022-05-16 23:10:42 +0100
committerTeresaARM <teresa.charlinreyes@arm.com>2022-05-18 14:19:19 +0000
commit80512b0e1e98cb6782f5526fc8308ae6a571cd59 (patch)
treebad2f314defadd4b340343d99b6e157b46622039 /src/armnn/Graph.hpp
parentd0420cb62b71f9c015d2b0e889011899051e56c0 (diff)
downloadarmnn-80512b0e1e98cb6782f5526fc8308ae6a571cd59.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/Graph.hpp')
-rw-r--r--src/armnn/Graph.hpp10
1 files changed, 8 insertions, 2 deletions
diff --git a/src/armnn/Graph.hpp b/src/armnn/Graph.hpp
index 0c34d35685..5edf34c179 100644
--- a/src/armnn/Graph.hpp
+++ b/src/armnn/Graph.hpp
@@ -95,8 +95,9 @@ public:
const Graph& m_Graph;
};
- Graph(bool shapeInferenceMethod = false)
+ Graph(bool shapeInferenceMethod = false, bool allowExpandedDims = false)
: m_LayersInOrder(true)
+ , m_AllowExpandedDims(allowExpandedDims)
, m_ShapeInferenceMethod(shapeInferenceMethod ? ShapeInferenceMethod::InferAndValidate :
ShapeInferenceMethod::ValidateOnly)
, m_Profiler(std::make_shared<IProfiler>())
@@ -118,11 +119,12 @@ public:
m_LayersInOrder = std::move(other.m_LayersInOrder);
m_Views = std::move(other.m_Views);
m_Profiler = std::move(other.m_Profiler);
-
other.ForEachLayer([this](Layer* otherLayer)
{
otherLayer->Reparent(*this, m_Layers.end());
});
+ m_AllowExpandedDims = other.m_AllowExpandedDims;
+ m_ShapeInferenceMethod = other.m_ShapeInferenceMethod;
ARMNN_ASSERT(other.m_PosInGraphMap.empty());
ARMNN_ASSERT(other.m_Layers.empty());
@@ -272,8 +274,11 @@ private:
mutable LayerList m_Layers;
mutable bool m_LayersInOrder;
+ bool m_AllowExpandedDims;
+
std::map<const GraphEvent, std::list<IGraphObservable*>> m_Views;
ShapeInferenceMethod m_ShapeInferenceMethod;
+
std::shared_ptr<IProfiler> m_Profiler;
// Throws exception due to a layer input not being connected to an output slot.
@@ -424,6 +429,7 @@ inline LayerT* Graph::AddLayer(Args&&... args)
LayerT* const layer = new LayerInGraph<LayerT>(*this, std::forward<Args>(args)...);
layer->SetShapeInferenceMethod(m_ShapeInferenceMethod);
+ layer->SetAllowExpandedDims(m_AllowExpandedDims);
NotifyObservables(GraphEvent::LayerAdded, layer);