ArmNN
 22.05
armnnDeserializer Namespace Reference

Classes

struct  BindingPointInfo
 
class  IDeserializer
 

Typedefs

using IDeserializerPtr = std::unique_ptr< IDeserializer, void(*)(IDeserializer *parser)>
 
using ConstTensorRawPtr = const armnnSerializer::ConstTensor *
 
using GraphPtr = const armnnSerializer::SerializedGraph *
 
using TensorRawPtr = const armnnSerializer::TensorInfo *
 
using Pooling2dDescriptor = const armnnSerializer::Pooling2dDescriptor *
 
using Pooling3dDescriptor = const armnnSerializer::Pooling3dDescriptor *
 
using NormalizationDescriptorPtr = const armnnSerializer::NormalizationDescriptor *
 
using LstmDescriptorPtr = const armnnSerializer::LstmDescriptor *
 
using LstmInputParamsPtr = const armnnSerializer::LstmInputParams *
 
using QLstmDescriptorPtr = const armnnSerializer::QLstmDescriptor *
 
using QunatizedLstmInputParamsPtr = const armnnSerializer::QuantizedLstmInputParams *
 
using TensorRawPtrVector = std::vector< TensorRawPtr >
 
using LayerRawPtr = const armnnSerializer::LayerBase *
 
using LayerBaseRawPtr = const armnnSerializer::LayerBase *
 
using LayerBaseRawPtrVector = std::vector< LayerBaseRawPtr >
 
using UnidirectionalSequenceLstmDescriptorPtr = const armnnSerializer::UnidirectionalSequenceLstmDescriptor *
 

Functions

bool CheckShape (const armnn::TensorShape &actual, const std::vector< uint32_t > &expected)
 
armnn::DataLayout ToDataLayout (armnnSerializer::DataLayout dataLayout)
 
armnn::ActivationFunction ToActivationFunction (armnnSerializer::ActivationFunction function)
 
armnn::ArgMinMaxFunction ToArgMinMaxFunction (armnnSerializer::ArgMinMaxFunction function)
 
armnn::ComparisonOperation ToComparisonOperation (armnnSerializer::ComparisonOperation operation)
 
armnn::ReduceOperation ToReduceOperation (armnnSerializer::ReduceOperation operation)
 
armnn::LogicalBinaryOperation ToLogicalBinaryOperation (armnnSerializer::LogicalBinaryOperation operation)
 
armnn::UnaryOperation ToUnaryOperation (armnnSerializer::UnaryOperation operation)
 
armnn::PaddingMode ToPaddingMode (armnnSerializer::PaddingMode paddingMode)
 
armnn::ResizeMethod ToResizeMethod (armnnSerializer::ResizeMethod method)
 
armnn::TensorInfo ToTensorInfo (TensorRawPtr tensorPtr)
 
armnn::ConstTensor ToConstTensor (ConstTensorRawPtr constTensorPtr)
 
const armnnSerializer::OriginsDescriptor * GetOriginsDescriptor (const armnnSerializer::SerializedGraph *graph, unsigned int layerIndex)
 

Typedef Documentation

◆ ConstTensorRawPtr

using ConstTensorRawPtr = const armnnSerializer::ConstTensor *

Definition at line 18 of file Deserializer.hpp.

◆ GraphPtr

using GraphPtr = const armnnSerializer::SerializedGraph *

Definition at line 19 of file Deserializer.hpp.

◆ IDeserializerPtr

using IDeserializerPtr = std::unique_ptr<IDeserializer, void(*)(IDeserializer* parser)>

Definition at line 25 of file IDeserializer.hpp.

◆ LayerBaseRawPtr

using LayerBaseRawPtr = const armnnSerializer::LayerBase *

Definition at line 30 of file Deserializer.hpp.

◆ LayerBaseRawPtrVector

using LayerBaseRawPtrVector = std::vector<LayerBaseRawPtr>

Definition at line 31 of file Deserializer.hpp.

◆ LayerRawPtr

using LayerRawPtr = const armnnSerializer::LayerBase *

Definition at line 29 of file Deserializer.hpp.

◆ LstmDescriptorPtr

using LstmDescriptorPtr = const armnnSerializer::LstmDescriptor *

Definition at line 24 of file Deserializer.hpp.

◆ LstmInputParamsPtr

using LstmInputParamsPtr = const armnnSerializer::LstmInputParams *

Definition at line 25 of file Deserializer.hpp.

◆ NormalizationDescriptorPtr

using NormalizationDescriptorPtr = const armnnSerializer::NormalizationDescriptor *

Definition at line 23 of file Deserializer.hpp.

◆ Pooling2dDescriptor

using Pooling2dDescriptor = const armnnSerializer::Pooling2dDescriptor *

Definition at line 21 of file Deserializer.hpp.

◆ Pooling3dDescriptor

using Pooling3dDescriptor = const armnnSerializer::Pooling3dDescriptor *

Definition at line 22 of file Deserializer.hpp.

◆ QLstmDescriptorPtr

using QLstmDescriptorPtr = const armnnSerializer::QLstmDescriptor *

Definition at line 26 of file Deserializer.hpp.

◆ QunatizedLstmInputParamsPtr

using QunatizedLstmInputParamsPtr = const armnnSerializer::QuantizedLstmInputParams *

Definition at line 27 of file Deserializer.hpp.

◆ TensorRawPtr

using TensorRawPtr = const armnnSerializer::TensorInfo *

Definition at line 20 of file Deserializer.hpp.

◆ TensorRawPtrVector

using TensorRawPtrVector = std::vector<TensorRawPtr>

Definition at line 28 of file Deserializer.hpp.

◆ UnidirectionalSequenceLstmDescriptorPtr

using UnidirectionalSequenceLstmDescriptorPtr = const armnnSerializer::UnidirectionalSequenceLstmDescriptor *

Definition at line 32 of file Deserializer.hpp.

Function Documentation

◆ CheckShape()

bool armnnDeserializer::CheckShape ( const armnn::TensorShape actual,
const std::vector< uint32_t > &  expected 
)

Definition at line 188 of file Deserializer.cpp.

References TensorShape::GetNumDimensions().

Referenced by IDeserializer::DeserializerImpl::OutputShapeOfReshape(), and TfLiteParserImpl::OutputShapeOfReshape().

189 {
190  const unsigned int actualSize = actual.GetNumDimensions();
191  if (actualSize != expected.size())
192  {
193  return false;
194  }
195 
196  for (unsigned int i = 0u; i < actualSize; i++)
197  {
198  if (actual[i] != static_cast<unsigned int>(expected[i]))
199  {
200  return false;
201  }
202  }
203 
204  return true;
205 }
unsigned int GetNumDimensions() const
Function that returns the tensor rank.
Definition: Tensor.cpp:174

◆ GetOriginsDescriptor()

const armnnSerializer::OriginsDescriptor* armnnDeserializer::GetOriginsDescriptor ( const armnnSerializer::SerializedGraph *  graph,
unsigned int  layerIndex 
)

Definition at line 1931 of file Deserializer.cpp.

References CHECK_LAYERS, CHECK_LOCATION, CHECK_VALID_SIZE, BaseTensor< MemoryType >::GetInfo(), IDeserializer::DeserializerImpl::GetInputs(), IDeserializer::DeserializerImpl::GetLayerName(), FullyConnectedDescriptor::GetNumInputs(), IDeserializer::DeserializerImpl::GetOutputs(), IConnectableLayer::GetOutputSlot(), armnnSerializer::Layer_ConcatLayer, armnnSerializer::Layer_MergerLayer, ChannelShuffleDescriptor::m_Axis, FullyConnectedDescriptor::m_BiasEnabled, FullyConnectedDescriptor::m_ConstantWeights, ComparisonDescriptor::m_Operation, ElementwiseUnaryDescriptor::m_Operation, FullyConnectedDescriptor::m_TransposeWeightMatrix, IOutputSlot::SetTensorInfo(), ToComparisonOperation(), ToConstTensor(), ToPaddingMode(), ToTensorInfo(), and ToUnaryOperation().

1933 {
1934  auto layerType = graph->layers()->Get(layerIndex)->layer_type();
1935 
1936  switch (layerType)
1937  {
1939  return graph->layers()->Get(layerIndex)->layer_as_ConcatLayer()->descriptor();
1941  return graph->layers()->Get(layerIndex)->layer_as_MergerLayer()->descriptor();
1942  default:
1943  throw armnn::Exception("unknown layer type, should be concat or merger");
1944  }
1945 }
Base class for all ArmNN exceptions so that users can filter to just those.
Definition: Exceptions.hpp:46

◆ ToActivationFunction()

armnn::ActivationFunction armnnDeserializer::ToActivationFunction ( armnnSerializer::ActivationFunction  function)

Definition at line 467 of file Deserializer.cpp.

References armnn::Abs, armnnSerializer::ActivationFunction_Abs, armnnSerializer::ActivationFunction_BoundedReLu, armnnSerializer::ActivationFunction_Elu, armnnSerializer::ActivationFunction_HardSwish, armnnSerializer::ActivationFunction_LeakyReLu, armnnSerializer::ActivationFunction_Linear, armnnSerializer::ActivationFunction_ReLu, armnnSerializer::ActivationFunction_Sigmoid, armnnSerializer::ActivationFunction_Sqrt, armnnSerializer::ActivationFunction_Square, armnnSerializer::ActivationFunction_TanH, armnn::BoundedReLu, armnn::Elu, armnn::HardSwish, armnn::LeakyReLu, armnn::Linear, armnn::ReLu, armnn::Sigmoid, armnn::Sqrt, armnn::Square, and armnn::TanH.

Referenced by IDeserializer::DeserializerImpl::GetNetworkOutputBindingInfo().

468 {
469  switch (function)
470  {
493  default:
495  }
496 }
min(a, max(b, input)) ReLu1 & ReLu6.

◆ ToArgMinMaxFunction()

◆ ToComparisonOperation()

armnn::ComparisonOperation armnnDeserializer::ToComparisonOperation ( armnnSerializer::ComparisonOperation  operation)

Definition at line 510 of file Deserializer.cpp.

References armnnSerializer::ComparisonOperation_Equal, armnnSerializer::ComparisonOperation_Greater, armnnSerializer::ComparisonOperation_GreaterOrEqual, armnnSerializer::ComparisonOperation_Less, armnnSerializer::ComparisonOperation_LessOrEqual, armnnSerializer::ComparisonOperation_NotEqual, armnn::Equal, armnn::Greater, armnn::GreaterOrEqual, armnn::Less, armnn::LessOrEqual, and armnn::NotEqual.

Referenced by GetOriginsDescriptor().

511 {
512  switch (operation)
513  {
525  default:
527  }
528 }

◆ ToConstTensor()

armnn::ConstTensor armnnDeserializer::ToConstTensor ( ConstTensorRawPtr  constTensorPtr)

Definition at line 719 of file Deserializer.cpp.

References CheckLocation::AsString(), CHECK_CONST_TENSOR_PTR, CHECK_CONST_TENSOR_SIZE, CHECK_LOCATION, armnnSerializer::ConstTensorData_ByteData, armnnSerializer::ConstTensorData_IntData, armnnSerializer::ConstTensorData_LongData, armnnSerializer::ConstTensorData_ShortData, armnnSerializer::EnumNameConstTensorData(), TensorInfo::GetNumElements(), TensorInfo::SetConstant(), and ToTensorInfo().

Referenced by IDeserializer::DeserializerImpl::GetLstmDescriptor(), IDeserializer::DeserializerImpl::GetNetworkOutputBindingInfo(), GetOriginsDescriptor(), IDeserializer::DeserializerImpl::GetQLstmDescriptor(), and IDeserializer::DeserializerImpl::GetUnidirectionalSequenceLstmDescriptor().

720 {
721  CHECK_CONST_TENSOR_PTR(constTensorPtr);
722  armnn::TensorInfo tensorInfo = ToTensorInfo(constTensorPtr->info());
723  tensorInfo.SetConstant();
724 
725  switch (constTensorPtr->data_type())
726  {
728  {
729  auto byteData = constTensorPtr->data_as_ByteData()->data();
730  CHECK_CONST_TENSOR_SIZE(byteData->size(), tensorInfo.GetNumElements());
731  return armnn::ConstTensor(tensorInfo, byteData->data());
732  }
734  {
735  auto shortData = constTensorPtr->data_as_ShortData()->data();
736  CHECK_CONST_TENSOR_SIZE(shortData->size(), tensorInfo.GetNumElements());
737  return armnn::ConstTensor(tensorInfo, shortData->data());
738  }
740  {
741  auto intData = constTensorPtr->data_as_IntData()->data();
742  CHECK_CONST_TENSOR_SIZE(intData->size(), tensorInfo.GetNumElements());
743  return armnn::ConstTensor(tensorInfo, intData->data());
744  }
746  {
747  auto longData = constTensorPtr->data_as_LongData()->data();
748  CHECK_CONST_TENSOR_SIZE(longData->size(), tensorInfo.GetNumElements());
749  return armnn::ConstTensor(tensorInfo, longData->data());
750  }
751  default:
752  {
753  CheckLocation location = CHECK_LOCATION();
754  throw ParseException(fmt::format("Unsupported data type {0} = {1}. {2}",
755  constTensorPtr->data_type(),
756  EnumNameConstTensorData(constTensorPtr->data_type()),
757  location.AsString()));
758  }
759  }
760 }
std::string AsString() const
Definition: Exceptions.hpp:29
const char * EnumNameConstTensorData(ConstTensorData e)
#define CHECK_CONST_TENSOR_SIZE(CONST_TENSOR_SIZE, TENSOR_SIZE)
A tensor defined by a TensorInfo (shape and data type) and an immutable backing store.
Definition: Tensor.hpp:327
#define CHECK_CONST_TENSOR_PTR(TENSOR_PTR)
#define CHECK_LOCATION()
Definition: Exceptions.hpp:203
void SetConstant(const bool IsConstant=true)
Marks the data corresponding to this tensor info as constant.
Definition: Tensor.cpp:514
armnn::TensorInfo ToTensorInfo(TensorRawPtr tensorPtr)
unsigned int GetNumElements() const
Definition: Tensor.hpp:196

◆ ToDataLayout()

◆ ToLogicalBinaryOperation()

◆ ToPaddingMode()

◆ ToReduceOperation()

armnn::ReduceOperation armnnDeserializer::ToReduceOperation ( armnnSerializer::ReduceOperation  operation)

Definition at line 530 of file Deserializer.cpp.

References armnn::Max, armnn::Mean, armnn::Min, armnn::Prod, armnnSerializer::ReduceOperation_Max, armnnSerializer::ReduceOperation_Mean, armnnSerializer::ReduceOperation_Min, armnnSerializer::ReduceOperation_Prod, armnnSerializer::ReduceOperation_Sum, and armnn::Sum.

Referenced by IDeserializer::DeserializerImpl::OutputShapeOfReshape().

◆ ToResizeMethod()

◆ ToTensorInfo()

armnn::TensorInfo armnnDeserializer::ToTensorInfo ( TensorRawPtr  tensorPtr)

Definition at line 613 of file Deserializer.cpp.

References CheckLocation::AsString(), armnn::Boolean, CHECK_LOCATION, CHECK_TENSOR_PTR, armnnSerializer::DataType_Boolean, armnnSerializer::DataType_Float16, armnnSerializer::DataType_Float32, armnnSerializer::DataType_QAsymmS8, armnnSerializer::DataType_QAsymmU8, armnnSerializer::DataType_QSymmS16, armnnSerializer::DataType_QSymmS8, armnnSerializer::DataType_QuantisedAsymm8, armnnSerializer::DataType_QuantisedSymm16, armnnSerializer::DataType_Signed32, armnnSerializer::DataType_Signed64, armnnSerializer::EnumNameDataType(), armnn::Float16, armnn::Float32, armnn::MaxNumOfTensorDimensions, armnn::QAsymmS8, armnn::QAsymmU8, armnn::QSymmS16, armnn::QSymmS8, armnn::Scalar, armnn::Signed32, and armnn::Signed64.

Referenced by armnnTfLiteParser::AsFloatArray(), armnnTfLiteParser::ComputeWrappedIndex(), OnnxParserImpl::CreateNetworkFromString(), TfLiteParserImpl::GetBuffer(), IDeserializer::DeserializerImpl::GetLstmDescriptor(), TfLiteParserImpl::GetNetworkInputBindingInfo(), IDeserializer::DeserializerImpl::GetNetworkOutputBindingInfo(), TfLiteParserImpl::GetNetworkOutputBindingInfo(), IDeserializer::DeserializerImpl::GetNormalizationDescriptor(), GetOriginsDescriptor(), TfLiteParserImpl::GetOutputTensorIds(), IDeserializer::DeserializerImpl::GetPooling3dDescriptor(), IDeserializer::DeserializerImpl::GetQLstmDescriptor(), IDeserializer::DeserializerImpl::GetUnidirectionalSequenceLstmDescriptor(), IDeserializer::DeserializerImpl::OutputShapeOfReshape(), TfLiteParserImpl::OutputShapeOfReshape(), TfLiteParserImpl::OutputShapeOfSqueeze(), and ToConstTensor().

614 {
615  armnn::DataType type;
616  CHECK_TENSOR_PTR(tensorPtr);
617 
618  switch (tensorPtr->dataType())
619  {
620  case DataType_QAsymmS8:
622  break;
623  case DataType_QSymmS8:
625  break;
627  case DataType_QAsymmU8:
629  break;
630  case DataType_QSymmS16:
633  break;
634  case DataType_Signed32:
636  break;
637  case DataType_Signed64:
639  break;
640  case DataType_Float32:
642  break;
643  case DataType_Float16:
645  break;
646  case DataType_Boolean:
648  break;
649  default:
650  {
651  CheckLocation location = CHECK_LOCATION();
652  throw ParseException(fmt::format("Unsupported data type {0} = {1}. {2}",
653  tensorPtr->dataType(),
654  EnumNameDataType(tensorPtr->dataType()),
655  location.AsString()));
656  }
657  }
658 
659  float quantizationScale = tensorPtr->quantizationScale();
660  int32_t quantizationOffset = tensorPtr->quantizationOffset();
661 
662  if (tensorPtr->dimensionality() == static_cast<unsigned int>(Dimensionality::Scalar))
663  {
665  type,
666  quantizationScale,
667  quantizationOffset);
668  }
669  else if (tensorPtr->dimensionality() == static_cast<unsigned int>(Dimensionality::NotSpecified))
670  {
671  armnn::TensorInfo result(TensorShape{Dimensionality::NotSpecified},
672  type,
673  quantizationScale,
674  quantizationOffset);
675  return result;
676  }
677 
678  auto dimensions = tensorPtr->dimensions();
679  unsigned int size = dimensions->size();
680  std::vector<unsigned int> outputDims(dimensions->begin(), dimensions->begin() + size);
681  bool dimensionsSpecificity[armnn::MaxNumOfTensorDimensions];
682  std::fill_n(dimensionsSpecificity, armnn::MaxNumOfTensorDimensions, true);
683  // For backwards compatibility check if the dimensionSpecificity vector is present first.
684  // The default is to have dimensionSpecificity set to all true's anyway.
685  if (tensorPtr->dimensionSpecificity() != nullptr)
686  {
687  auto dimensionSpecificity = tensorPtr->dimensionSpecificity();
688  size = dimensionSpecificity->size();
689  for (unsigned int i = 0; i < size; ++i)
690  {
691  dimensionsSpecificity[i] = dimensionSpecificity->Get(i);
692  }
693  }
694  // Construct a TensorShape
695  TensorShape shape(size, outputDims.data(), dimensionsSpecificity);
696 
697  auto quantizationScales = tensorPtr->quantizationScales();
698  if (quantizationScales)
699  {
700  unsigned int quantizationScalesSize = quantizationScales->size();
701  std::vector<float> scales(quantizationScales->begin(), quantizationScales->begin() + quantizationScalesSize);
702  unsigned int quantizationDim = tensorPtr->quantizationDim();
703  armnn::TensorInfo result(shape,
704  type,
705  scales,
706  quantizationDim);
707  return result;
708  }
709 
710  // two statements (on purpose) for easier debugging:
711  armnn::TensorInfo result(shape,
712  type,
713  quantizationScale,
714  quantizationOffset);
715 
716  return result;
717 }
std::string AsString() const
Definition: Exceptions.hpp:29
#define CHECK_TENSOR_PTR(TENSOR_PTR)
DataType
Definition: Types.hpp:48
#define CHECK_LOCATION()
Definition: Exceptions.hpp:203
const char * EnumNameDataType(DataType e)
constexpr unsigned int MaxNumOfTensorDimensions
Definition: Types.hpp:31

◆ ToUnaryOperation()

armnn::UnaryOperation armnnDeserializer::ToUnaryOperation ( armnnSerializer::UnaryOperation  operation)

Definition at line 562 of file Deserializer.cpp.

References armnn::Abs, armnn::Exp, armnn::Log, armnn::LogicalNot, armnn::Neg, armnn::Rsqrt, armnn::Sin, armnn::Sqrt, armnnSerializer::UnaryOperation_Abs, armnnSerializer::UnaryOperation_Exp, armnnSerializer::UnaryOperation_Log, armnnSerializer::UnaryOperation_LogicalNot, armnnSerializer::UnaryOperation_Neg, armnnSerializer::UnaryOperation_Rsqrt, armnnSerializer::UnaryOperation_Sin, and armnnSerializer::UnaryOperation_Sqrt.

Referenced by GetOriginsDescriptor().

563 {
564  switch (operation)
565  {
582  default:
583  throw armnn::InvalidArgumentException("Unary operation unknown");
584  }
585 }