diff options
author | Colm Donelan <Colm.Donelan@arm.com> | 2021-02-12 12:43:35 +0000 |
---|---|---|
committer | Colm Donelan <colm.donelan@arm.com> | 2021-02-15 10:24:30 +0000 |
commit | 800b281e506e921006c23cd4309781b6508c0fcb (patch) | |
tree | 06c6eb1a252fa6d90460c1e821542bc1a86b067f /src/armnnDeserializer | |
parent | 0a7dc6bba5d0810fe2ed6f84b0376a8b0674c0b3 (diff) | |
download | armnn-800b281e506e921006c23cd4309781b6508c0fcb.tar.gz |
IVGCVSW-5648 Adding serializer support for m_DimensionsSpecificity
The field m_DimensionsSpecificity in TensorShape was not being serialized
and deserialized following implementation of type 1 dynamic tensors.
* Update schema.
* Add to Serializer and Deserializer.
Signed-off-by: Colm Donelan <Colm.Donelan@arm.com>
Change-Id: I7ddbdaf54c8f4b988c6cb300f90ba848a94bdad0
Diffstat (limited to 'src/armnnDeserializer')
-rw-r--r-- | src/armnnDeserializer/Deserializer.cpp | 42 |
1 files changed, 30 insertions, 12 deletions
diff --git a/src/armnnDeserializer/Deserializer.cpp b/src/armnnDeserializer/Deserializer.cpp index cbc4758e0e..9b4cbe9439 100644 --- a/src/armnnDeserializer/Deserializer.cpp +++ b/src/armnnDeserializer/Deserializer.cpp @@ -608,45 +608,63 @@ armnn::TensorInfo ToTensorInfo(TensorRawPtr tensorPtr) } } + float quantizationScale = tensorPtr->quantizationScale(); + int32_t quantizationOffset = tensorPtr->quantizationOffset(); + if (tensorPtr->dimensionality() == static_cast<unsigned int>(Dimensionality::Scalar)) { - float quantizationScale = tensorPtr->quantizationScale(); - int32_t quantizationOffset = tensorPtr->quantizationOffset(); - - return armnn::TensorInfo(armnn::TensorShape{armnn::Dimensionality::Scalar}, + return armnn::TensorInfo(TensorShape{armnn::Dimensionality::Scalar}, type, quantizationScale, quantizationOffset); } + else if (tensorPtr->dimensionality() == static_cast<unsigned int>(Dimensionality::NotSpecified)) + { + armnn::TensorInfo result(TensorShape{Dimensionality::NotSpecified}, + type, + quantizationScale, + quantizationOffset); + return result; + } auto dimensions = tensorPtr->dimensions(); unsigned int size = dimensions->size(); std::vector<unsigned int> outputDims(dimensions->begin(), dimensions->begin() + size); + bool dimensionsSpecificity[armnn::MaxNumOfTensorDimensions]; + std::fill_n(dimensionsSpecificity, armnn::MaxNumOfTensorDimensions, true); + // For backwards compatibility check if the dimensionSpecificity vector is present first. + // The default is to have dimensionSpecificity set to all true's anyway. + if (tensorPtr->dimensionSpecificity() != nullptr) + { + auto dimensionSpecificity = tensorPtr->dimensionSpecificity(); + size = dimensionSpecificity->size(); + for (unsigned int i = 0; i < size; ++i) + { + dimensionsSpecificity[i] = dimensionSpecificity->Get(i); + } + } + // Construct a TensorShape + TensorShape shape(size, outputDims.data(), dimensionsSpecificity); auto quantizationScales = tensorPtr->quantizationScales(); - if (quantizationScales) { unsigned int quantizationScalesSize = quantizationScales->size(); std::vector<float> scales(quantizationScales->begin(), quantizationScales->begin() + quantizationScalesSize); unsigned int quantizationDim = tensorPtr->quantizationDim(); - armnn::TensorInfo result(size, - outputDims.data(), + armnn::TensorInfo result(shape, type, scales, quantizationDim); return result; } - float quantizationScale = tensorPtr->quantizationScale(); - int32_t quantizationOffset = tensorPtr->quantizationOffset(); - // two statements (on purpose) for easier debugging: - armnn::TensorInfo result(size, - outputDims.data(), + armnn::TensorInfo result(shape, type, quantizationScale, quantizationOffset); + return result; } |