aboutsummaryrefslogtreecommitdiff
path: root/include
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 /include
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 'include')
-rw-r--r--include/armnn/backends/OptimizationViews.hpp2
-rw-r--r--include/armnn/backends/WorkloadData.hpp12
-rw-r--r--include/armnnTfLiteParser/ITfLiteParser.hpp4
-rw-r--r--include/armnnUtils/TensorUtils.hpp2
4 files changed, 18 insertions, 2 deletions
diff --git a/include/armnn/backends/OptimizationViews.hpp b/include/armnn/backends/OptimizationViews.hpp
index f7346de7ab..29ee68c67e 100644
--- a/include/armnn/backends/OptimizationViews.hpp
+++ b/include/armnn/backends/OptimizationViews.hpp
@@ -13,7 +13,7 @@ namespace armnn
class OptimizationViews
{
public:
- OptimizationViews() = default;
+ OptimizationViews(NetworkOptions networkOptions = {}) : m_INetwork(INetwork::Create(networkOptions)) {}
OptimizationViews(const OptimizationViews&) = delete;
OptimizationViews& operator=(const OptimizationViews&) = delete;
OptimizationViews(OptimizationViews&&) = default;
diff --git a/include/armnn/backends/WorkloadData.hpp b/include/armnn/backends/WorkloadData.hpp
index ed89f9638c..1a2f34e21f 100644
--- a/include/armnn/backends/WorkloadData.hpp
+++ b/include/armnn/backends/WorkloadData.hpp
@@ -29,6 +29,16 @@ struct QueueDescriptor
virtual ~QueueDescriptor() = default;
+ void ValidateTensorNumDimensions(const TensorInfo& tensor,
+ std::string const& descName,
+ unsigned int numDimensions,
+ std::string const& tensorName) const;
+
+ void ValidateTensorNumDimNumElem(const TensorInfo& tensorInfo,
+ unsigned int numDimension,
+ unsigned int numElements,
+ std::string const& tensorName) const;
+
void ValidateInputsOutputs(const std::string& descName,
unsigned int numExpectedIn,
unsigned int numExpectedOut) const;
@@ -39,6 +49,8 @@ struct QueueDescriptor
return static_cast<T*>(m_AdditionalInfoObject);
}
+ bool m_AllowExpandedDims = false;
+
protected:
QueueDescriptor()
: m_AdditionalInfoObject(nullptr)
diff --git a/include/armnnTfLiteParser/ITfLiteParser.hpp b/include/armnnTfLiteParser/ITfLiteParser.hpp
index b286c1ee4c..ea6e87a0a7 100644
--- a/include/armnnTfLiteParser/ITfLiteParser.hpp
+++ b/include/armnnTfLiteParser/ITfLiteParser.hpp
@@ -29,9 +29,11 @@ public:
struct TfLiteParserOptions
{
TfLiteParserOptions()
- : m_StandInLayerForUnsupported(false),
+ : m_AllowExpandedDims(false),
+ m_StandInLayerForUnsupported(false),
m_InferAndValidate(false) {}
+ bool m_AllowExpandedDims;
bool m_StandInLayerForUnsupported;
bool m_InferAndValidate;
};
diff --git a/include/armnnUtils/TensorUtils.hpp b/include/armnnUtils/TensorUtils.hpp
index 6a975255c6..fc2f51061c 100644
--- a/include/armnnUtils/TensorUtils.hpp
+++ b/include/armnnUtils/TensorUtils.hpp
@@ -34,6 +34,8 @@ std::pair<float, float> FindMinMax(armnn::ITensorHandle* tensorHandle);
armnn::TensorShape ExpandDims(const armnn::TensorShape& tensorShape, int axis);
+std::vector<unsigned int> SqueezeDims(const armnn::TensorShape& tensorShape);
+
unsigned int GetNumElementsBetween(const armnn::TensorShape& shape,
unsigned int firstAxisInclusive,
unsigned int lastAxisExclusive);