aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Kelly <mike.kelly@arm.com>2023-08-01 11:31:55 +0100
committerJim Flynn <jim.flynn@arm.com>2023-08-01 21:00:44 +0000
commit460a179b53d5543d98d3e72c60458d4b0e3225a4 (patch)
tree98a2294193485e8d4455255c5825ebb324ffbb72
parent980446b2beefa0002814028980d83a48621685d3 (diff)
downloadarmnn-460a179b53d5543d98d3e72c60458d4b0e3225a4.tar.gz
IVGCVSW-7899 Cannot handle tensors with more than 5 dimensions
* Fixed issue where then dimensions specificity didn't match the number of dimensions. Signed-off-by: Mike Kelly <mike.kelly@arm.com> Change-Id: Ic4da6f23c1e8ca38f321aa88c69ef57558a8f393
-rw-r--r--delegate/classic/src/ClassicDelegateUtils.hpp16
-rw-r--r--delegate/opaque/src/OpaqueDelegateUtils.hpp14
-rw-r--r--shim/sl/canonical/CanonicalUtils.cpp8
3 files changed, 20 insertions, 18 deletions
diff --git a/delegate/classic/src/ClassicDelegateUtils.hpp b/delegate/classic/src/ClassicDelegateUtils.hpp
index 52e9f5cf63..2806716334 100644
--- a/delegate/classic/src/ClassicDelegateUtils.hpp
+++ b/delegate/classic/src/ClassicDelegateUtils.hpp
@@ -371,7 +371,7 @@ armnn::TensorInfo GetTensorInfoForTfLiteTensor(const TfLiteTensor& tfLiteTensor,
{
std::vector<unsigned int> safeShape = { 1 };
bool dimensionsSpecificity[1] = { true };
- armnn::TensorShape tensorShape(armnn::numeric_cast<unsigned int>(safeShape.size()),
+ armnn::TensorShape tensorShape(safeShape.size(),
safeShape.data(),
dimensionsSpecificity);
ret = armnn::TensorInfo(tensorShape, type);
@@ -388,21 +388,21 @@ armnn::TensorInfo GetTensorInfoForTfLiteTensor(const TfLiteTensor& tfLiteTensor,
}
else
{
- std::vector<unsigned int> tensorDims(static_cast<unsigned int>(tensorDimensionSize));
- bool dimensionsSpecificity[5] = { true, true, true, true, true };
- for (unsigned int i = 0; i < static_cast<unsigned int>(tensorDimensionSize); ++i) {
+ std::vector<unsigned int> tensorDims(tensorDimensionSize);
+ std::vector<unsigned char> dimensionsSpecificity(tensorDimensionSize, true);
+ for (int i = 0; i < tensorDimensionSize; ++i) {
auto dim = tfLiteTensor.dims->data[i];
- if (dim == 0)
+ if (dim <= 0)
{
dimensionsSpecificity[i] = false;
}
tensorDims[i] = static_cast<unsigned int>(dim);
}
- armnn::TensorShape tensorShape(static_cast<unsigned int>(tensorDimensionSize),
+ armnn::TensorShape tensorShape(tensorDimensionSize,
tensorDims.data(),
- dimensionsSpecificity);
+ reinterpret_cast<const bool *>(dimensionsSpecificity.data()));
- if(tflite::IsConstantTensor(&tfLiteTensor))
+ if (tflite::IsConstantTensor(&tfLiteTensor))
{
ret = armnn::TensorInfo(tensorShape, type);
ret.SetConstant(true);
diff --git a/delegate/opaque/src/OpaqueDelegateUtils.hpp b/delegate/opaque/src/OpaqueDelegateUtils.hpp
index fd943c8ec9..1c90ee0722 100644
--- a/delegate/opaque/src/OpaqueDelegateUtils.hpp
+++ b/delegate/opaque/src/OpaqueDelegateUtils.hpp
@@ -443,7 +443,7 @@ armnn::TensorInfo GetTensorInfoForTfLiteOpaqueTensor(const TfLiteOpaqueTensor* t
std::vector<unsigned int> safeShape = { 1 };
bool dimensionsSpecificity[1] = { true };
- armnn::TensorShape tensorShape(armnn::numeric_cast<unsigned int>(safeShape.size()),
+ armnn::TensorShape tensorShape(safeShape.size(),
safeShape.data(),
dimensionsSpecificity);
ret = armnn::TensorInfo(tensorShape, type);
@@ -461,25 +461,25 @@ armnn::TensorInfo GetTensorInfoForTfLiteOpaqueTensor(const TfLiteOpaqueTensor* t
}
else
{
- std::vector<unsigned int> tensorDims(static_cast<unsigned int>(tensorDimensionSize));
- bool dimensionsSpecificity[5] = { true, true, true, true, true };
+ std::vector<unsigned int> tensorDims(tensorDimensionSize);
+ std::vector<unsigned char> dimensionsSpecificity(tensorDimensionSize, true);
for (int32_t i = 0; i < tensorDimensionSize; ++i)
{
int32_t dim = TfLiteOpaqueTensorDim(tfLiteTensor, i);
- if (dim == 0)
+ if (dim <= 0)
{
dimensionsSpecificity[i] = false;
}
tensorDims[i] = static_cast<unsigned int>(dim);
}
- armnn::TensorShape tensorShape(static_cast<unsigned int>(tensorDimensionSize),
+ armnn::TensorShape tensorShape(tensorDimensionSize,
tensorDims.data(),
- dimensionsSpecificity);
+ reinterpret_cast<const bool *>(dimensionsSpecificity.data()));
- if(IsConstantTensor(tfLiteTensor))
+ if (IsConstantTensor(tfLiteTensor))
{
ret = armnn::TensorInfo(tensorShape, type);
ret.SetConstant(true);
diff --git a/shim/sl/canonical/CanonicalUtils.cpp b/shim/sl/canonical/CanonicalUtils.cpp
index 622d4b111d..08a728c293 100644
--- a/shim/sl/canonical/CanonicalUtils.cpp
+++ b/shim/sl/canonical/CanonicalUtils.cpp
@@ -1,5 +1,5 @@
//
-// Copyright © 2022 Arm Ltd and Contributors. All rights reserved.
+// Copyright © 2022-2023 Arm Ltd and Contributors. All rights reserved.
// SPDX-License-Identifier: MIT
//
@@ -152,7 +152,7 @@ armnn::TensorInfo GetTensorInfoForOperand(const Operand& operand)
}
else
{
- bool dimensionsSpecificity[5] = { true, true, true, true, true };
+ std::vector<unsigned char> dimensionsSpecificity(operand.dimensions.size(), true);
int count = 0;
std::for_each(operand.dimensions.data(),
operand.dimensions.data() + operand.dimensions.size(),
@@ -165,7 +165,9 @@ armnn::TensorInfo GetTensorInfoForOperand(const Operand& operand)
count++;
});
- TensorShape tensorShape(operand.dimensions.size(), operand.dimensions.data(), dimensionsSpecificity);
+ TensorShape tensorShape(operand.dimensions.size(),
+ operand.dimensions.data(),
+ reinterpret_cast<const bool *>(dimensionsSpecificity.data()));
ret = TensorInfo(tensorShape, type);
}
}