ArmNN
 25.02
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
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::ScatterNdFunction ToScatterNdFunction (armnnSerializer::ScatterNdFunction function)
 
armnn::ComparisonOperation ToComparisonOperation (armnnSerializer::ComparisonOperation operation)
 
armnn::ReduceOperation ToReduceOperation (armnnSerializer::ReduceOperation operation)
 
armnn::LogicalBinaryOperation ToLogicalBinaryOperation (armnnSerializer::LogicalBinaryOperation operation)
 
armnn::BinaryOperation ToElementwiseBinaryOperation (armnnSerializer::BinaryOperation operation)
 
armnn::UnaryOperation ToElementwiseUnaryOperation (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.

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

References TensorShape::GetNumDimensions().

◆ GetOriginsDescriptor()

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

Definition at line 2057 of file Deserializer.cpp.

2059 {
2060  auto layerType = graph->layers()->Get(layerIndex)->layer_type();
2061 
2062  switch (layerType)
2063  {
2064  case Layer::Layer_ConcatLayer:
2065  return graph->layers()->Get(layerIndex)->layer_as_ConcatLayer()->descriptor();
2066  case Layer::Layer_MergerLayer:
2067  return graph->layers()->Get(layerIndex)->layer_as_MergerLayer()->descriptor();
2068  default:
2069  throw armnn::Exception("unknown layer type, should be concat or merger");
2070  }
2071 }
Base class for all ArmNN exceptions so that users can filter to just those.
Definition: Exceptions.hpp:47

◆ ToActivationFunction()

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

Definition at line 482 of file Deserializer.cpp.

483 {
484  switch (function)
485  {
486  case armnnSerializer::ActivationFunction_Sigmoid:
488  case armnnSerializer::ActivationFunction_TanH:
490  case armnnSerializer::ActivationFunction_Linear:
492  case armnnSerializer::ActivationFunction_ReLu:
494  case armnnSerializer::ActivationFunction_BoundedReLu:
496  case armnnSerializer::ActivationFunction_LeakyReLu:
498  case armnnSerializer::ActivationFunction_Abs:
500  case armnnSerializer::ActivationFunction_Sqrt:
502  case armnnSerializer::ActivationFunction_Square:
504  case armnnSerializer::ActivationFunction_Elu:
506  case armnnSerializer::ActivationFunction_HardSwish:
508  case armnnSerializer::ActivationFunction_Gelu:
510  default:
512  }
513 }
@ BoundedReLu
min(a, max(b, input)) ReLu1 & ReLu6.

References armnn::Abs, armnn::BoundedReLu, armnn::Elu, armnn::Gelu, armnn::HardSwish, armnn::LeakyReLu, armnn::Linear, armnn::ReLu, armnn::Sigmoid, armnn::Sqrt, armnn::Square, and armnn::TanH.

◆ ToArgMinMaxFunction()

armnn::ArgMinMaxFunction armnnDeserializer::ToArgMinMaxFunction ( armnnSerializer::ArgMinMaxFunction  function)

Definition at line 515 of file Deserializer.cpp.

516 {
517  switch (function)
518  {
519  case armnnSerializer::ArgMinMaxFunction::ArgMinMaxFunction_Max:
521  case armnnSerializer::ArgMinMaxFunction::ArgMinMaxFunction_Min:
522  default:
524  }
525 }

References armnn::Max, and armnn::Min.

◆ ToComparisonOperation()

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

Definition at line 546 of file Deserializer.cpp.

547 {
548  switch (operation)
549  {
550  case armnnSerializer::ComparisonOperation::ComparisonOperation_Equal:
552  case armnnSerializer::ComparisonOperation::ComparisonOperation_Greater:
554  case armnnSerializer::ComparisonOperation::ComparisonOperation_GreaterOrEqual:
556  case armnnSerializer::ComparisonOperation::ComparisonOperation_Less:
558  case armnnSerializer::ComparisonOperation::ComparisonOperation_LessOrEqual:
560  case armnnSerializer::ComparisonOperation::ComparisonOperation_NotEqual:
561  default:
563  }
564 }

References armnn::Equal, armnn::Greater, armnn::GreaterOrEqual, armnn::Less, armnn::LessOrEqual, and armnn::NotEqual.

◆ ToConstTensor()

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

Definition at line 784 of file Deserializer.cpp.

785 {
786  CHECK_CONST_TENSOR_PTR(constTensorPtr);
787  armnn::TensorInfo tensorInfo = ToTensorInfo(constTensorPtr->info());
788  tensorInfo.SetConstant();
789 
790  switch (constTensorPtr->data_type())
791  {
792  case ConstTensorData_ByteData:
793  {
794  auto byteData = constTensorPtr->data_as_ByteData()->data();
795  CHECK_CONST_TENSOR_SIZE(byteData->size(), tensorInfo.GetNumElements());
796  return armnn::ConstTensor(tensorInfo, byteData->data());
797  }
798  case ConstTensorData_ShortData:
799  {
800  auto shortData = constTensorPtr->data_as_ShortData()->data();
801  CHECK_CONST_TENSOR_SIZE(shortData->size(), tensorInfo.GetNumElements());
802  return armnn::ConstTensor(tensorInfo, shortData->data());
803  }
804  case ConstTensorData_IntData:
805  {
806  auto intData = constTensorPtr->data_as_IntData()->data();
807  CHECK_CONST_TENSOR_SIZE(intData->size(), tensorInfo.GetNumElements());
808  return armnn::ConstTensor(tensorInfo, intData->data());
809  }
810  case ConstTensorData_LongData:
811  {
812  auto longData = constTensorPtr->data_as_LongData()->data();
813  CHECK_CONST_TENSOR_SIZE(longData->size(), tensorInfo.GetNumElements());
814  return armnn::ConstTensor(tensorInfo, longData->data());
815  }
816  default:
817  {
818  CheckLocation location = CHECK_LOCATION();
819  throw ParseException(fmt::format("Unsupported data type {0} = {1}. {2}",
820  constTensorPtr->data_type(),
821  EnumNameConstTensorData(constTensorPtr->data_type()),
822  location.AsString()));
823  }
824  }
825 }
#define CHECK_CONST_TENSOR_PTR(TENSOR_PTR)
#define CHECK_CONST_TENSOR_SIZE(CONST_TENSOR_SIZE, TENSOR_SIZE)
#define CHECK_LOCATION()
Definition: Exceptions.hpp:203
A tensor defined by a TensorInfo (shape and data type) and an immutable backing store.
Definition: Tensor.hpp:330
unsigned int GetNumElements() const
Definition: Tensor.hpp:198
void SetConstant(const bool IsConstant=true)
Marks the data corresponding to this tensor info as constant.
Definition: Tensor.cpp:518
armnn::TensorInfo ToTensorInfo(TensorRawPtr tensorPtr)
std::string AsString() const
Definition: Exceptions.hpp:29

References CheckLocation::AsString(), CHECK_CONST_TENSOR_PTR, CHECK_CONST_TENSOR_SIZE, CHECK_LOCATION, TensorInfo::GetNumElements(), TensorInfo::SetConstant(), and ToTensorInfo().

◆ ToDataLayout()

armnn::DataLayout armnnDeserializer::ToDataLayout ( armnnSerializer::DataLayout  dataLayout)

Definition at line 466 of file Deserializer.cpp.

467 {
468  switch (dataLayout)
469  {
470  case armnnSerializer::DataLayout::DataLayout_NHWC:
472  case armnnSerializer::DataLayout::DataLayout_NDHWC:
474  case armnnSerializer::DataLayout::DataLayout_NCDHW:
476  case armnnSerializer::DataLayout::DataLayout_NCHW:
477  default:
479  }
480 }

References armnn::NCDHW, armnn::NCHW, armnn::NDHWC, and armnn::NHWC.

◆ ToElementwiseBinaryOperation()

armnn::BinaryOperation armnnDeserializer::ToElementwiseBinaryOperation ( armnnSerializer::BinaryOperation  operation)

Definition at line 598 of file Deserializer.cpp.

599 {
600  switch (operation)
601  {
602  case armnnSerializer::BinaryOperation::BinaryOperation_Add:
604  case armnnSerializer::BinaryOperation::BinaryOperation_Div:
606  case armnnSerializer::BinaryOperation::BinaryOperation_FloorDiv:
608  case armnnSerializer::BinaryOperation::BinaryOperation_Maximum:
610  case armnnSerializer::BinaryOperation::BinaryOperation_Minimum:
612  case armnnSerializer::BinaryOperation::BinaryOperation_Mul:
614  case armnnSerializer::BinaryOperation::BinaryOperation_Sub:
616  case armnnSerializer::BinaryOperation::BinaryOperation_SqDiff:
618  case armnnSerializer::BinaryOperation::BinaryOperation_Power:
620  default:
621  throw armnn::InvalidArgumentException("Binary operation unknown");
622  }
623 }

References armnn::Add, armnn::Div, armnn::FloorDiv, armnn::Maximum, armnn::Minimum, armnn::Mul, armnn::Power, armnn::SqDiff, and armnn::Sub.

◆ ToElementwiseUnaryOperation()

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

Definition at line 625 of file Deserializer.cpp.

626 {
627  switch (operation)
628  {
629  case armnnSerializer::UnaryOperation::UnaryOperation_Abs:
631  case armnnSerializer::UnaryOperation::UnaryOperation_Ceil:
633  case armnnSerializer::UnaryOperation::UnaryOperation_Rsqrt:
635  case armnnSerializer::UnaryOperation::UnaryOperation_Sqrt:
637  case armnnSerializer::UnaryOperation::UnaryOperation_Exp:
639  case armnnSerializer::UnaryOperation::UnaryOperation_Neg:
641  case armnnSerializer::UnaryOperation::UnaryOperation_LogicalNot:
643  case armnnSerializer::UnaryOperation::UnaryOperation_Log:
645  case armnnSerializer::UnaryOperation::UnaryOperation_Sin:
647  default:
648  throw armnn::InvalidArgumentException("Unary operation unknown");
649  }
650 }

References armnn::Abs, armnn::Ceil, armnn::Exp, armnn::Log, armnn::LogicalNot, armnn::Neg, armnn::Rsqrt, armnn::Sin, and armnn::Sqrt.

◆ ToLogicalBinaryOperation()

armnn::LogicalBinaryOperation armnnDeserializer::ToLogicalBinaryOperation ( armnnSerializer::LogicalBinaryOperation  operation)

Definition at line 585 of file Deserializer.cpp.

586 {
587  switch (operation)
588  {
589  case armnnSerializer::LogicalBinaryOperation::LogicalBinaryOperation_LogicalAnd:
591  case armnnSerializer::LogicalBinaryOperation::LogicalBinaryOperation_LogicalOr:
593  default:
594  throw armnn::InvalidArgumentException("Logical Binary operation unknown");
595  }
596 }

References armnn::LogicalAnd, and armnn::LogicalOr.

◆ ToPaddingMode()

armnn::PaddingMode armnnDeserializer::ToPaddingMode ( armnnSerializer::PaddingMode  paddingMode)

Definition at line 652 of file Deserializer.cpp.

653 {
654  switch (paddingMode)
655  {
656  case armnnSerializer::PaddingMode::PaddingMode_Reflect:
658  case armnnSerializer::PaddingMode::PaddingMode_Symmetric:
660  default:
662  }
663 }

References armnn::Constant, armnn::Reflect, and armnn::Symmetric.

◆ ToReduceOperation()

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

Definition at line 566 of file Deserializer.cpp.

567 {
568  switch (operation)
569  {
570  case armnnSerializer::ReduceOperation::ReduceOperation_Sum:
572  case armnnSerializer::ReduceOperation::ReduceOperation_Max:
574  case armnnSerializer::ReduceOperation::ReduceOperation_Mean:
576  case armnnSerializer::ReduceOperation::ReduceOperation_Min:
578  case armnnSerializer::ReduceOperation::ReduceOperation_Prod:
580  default:
582  }
583 }

References armnn::Max, armnn::Mean, armnn::Min, armnn::Prod, and armnn::Sum.

◆ ToResizeMethod()

armnn::ResizeMethod armnnDeserializer::ToResizeMethod ( armnnSerializer::ResizeMethod  method)

Definition at line 665 of file Deserializer.cpp.

666 {
667  switch (method)
668  {
669  case armnnSerializer::ResizeMethod_NearestNeighbor:
671  case armnnSerializer::ResizeMethod_Bilinear:
673  default:
675  }
676 }

References armnn::Bilinear, and armnn::NearestNeighbor.

◆ ToScatterNdFunction()

armnn::ScatterNdFunction armnnDeserializer::ToScatterNdFunction ( armnnSerializer::ScatterNdFunction  function)

Definition at line 527 of file Deserializer.cpp.

528 {
529  switch (function)
530  {
531  case armnnSerializer::ScatterNdFunction_Update:
533  case armnnSerializer::ScatterNdFunction_Add:
535  case armnnSerializer::ScatterNdFunction_Sub:
537  case armnnSerializer::ScatterNdFunction_Max:
539  case armnnSerializer::ScatterNdFunction_Min:
541  default:
543  }
544 }

References armnn::Add, armnn::Max, armnn::Min, armnn::Sub, and armnn::Update.

◆ ToTensorInfo()

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

Definition at line 678 of file Deserializer.cpp.

679 {
680  armnn::DataType type;
681  CHECK_TENSOR_PTR(tensorPtr);
682 
683  switch (tensorPtr->dataType())
684  {
685  case DataType_QAsymmS8:
687  break;
688  case DataType_QSymmS8:
690  break;
691  case DataType_QuantisedAsymm8:
692  case DataType_QAsymmU8:
694  break;
695  case DataType_QSymmS16:
696  case DataType_QuantisedSymm16:
698  break;
699  case DataType_Signed32:
701  break;
702  case DataType_Signed64:
704  break;
705  case DataType_Float32:
707  break;
708  case DataType_Float16:
710  break;
711  case DataType_Boolean:
713  break;
714  default:
715  {
716  CheckLocation location = CHECK_LOCATION();
717  throw ParseException(fmt::format("Unsupported data type {0} = {1}. {2}",
718  tensorPtr->dataType(),
719  EnumNameDataType(tensorPtr->dataType()),
720  location.AsString()));
721  }
722  }
723 
724  float quantizationScale = tensorPtr->quantizationScale();
725  int32_t quantizationOffset = tensorPtr->quantizationOffset();
726 
727  if (tensorPtr->dimensionality() == static_cast<unsigned int>(Dimensionality::Scalar))
728  {
730  type,
731  quantizationScale,
732  quantizationOffset);
733  }
734  else if (tensorPtr->dimensionality() == static_cast<unsigned int>(Dimensionality::NotSpecified))
735  {
736  armnn::TensorInfo result(TensorShape{Dimensionality::NotSpecified},
737  type,
738  quantizationScale,
739  quantizationOffset);
740  return result;
741  }
742 
743  auto dimensions = tensorPtr->dimensions();
744  unsigned int size = dimensions->size();
745  std::vector<unsigned int> outputDims(dimensions->begin(), dimensions->begin() + size);
746  bool dimensionsSpecificity[armnn::MaxNumOfTensorDimensions];
747  std::fill_n(dimensionsSpecificity, armnn::MaxNumOfTensorDimensions, true);
748  // For backwards compatibility check if the dimensionSpecificity vector is present first.
749  // The default is to have dimensionSpecificity set to all true's anyway.
750  if (tensorPtr->dimensionSpecificity() != nullptr)
751  {
752  auto dimensionSpecificity = tensorPtr->dimensionSpecificity();
753  size = dimensionSpecificity->size();
754  for (unsigned int i = 0; i < size; ++i)
755  {
756  dimensionsSpecificity[i] = dimensionSpecificity->Get(i);
757  }
758  }
759  // Construct a TensorShape
760  TensorShape shape(size, outputDims.data(), dimensionsSpecificity);
761 
762  auto quantizationScales = tensorPtr->quantizationScales();
763  if (quantizationScales)
764  {
765  unsigned int quantizationScalesSize = quantizationScales->size();
766  std::vector<float> scales(quantizationScales->begin(), quantizationScales->begin() + quantizationScalesSize);
767  unsigned int quantizationDim = tensorPtr->quantizationDim();
768  armnn::TensorInfo result(shape,
769  type,
770  scales,
771  quantizationDim);
772  return result;
773  }
774 
775  // two statements (on purpose) for easier debugging:
776  armnn::TensorInfo result(shape,
777  type,
778  quantizationScale,
779  quantizationOffset);
780 
781  return result;
782 }
#define CHECK_TENSOR_PTR(TENSOR_PTR)
constexpr unsigned int MaxNumOfTensorDimensions
Definition: Types.hpp:31
DataType
Definition: Types.hpp:49

References CheckLocation::AsString(), armnn::Boolean, CHECK_LOCATION, CHECK_TENSOR_PTR, armnn::Float16, armnn::Float32, armnn::MaxNumOfTensorDimensions, armnn::QAsymmS8, armnn::QAsymmU8, armnn::QSymmS16, armnn::QSymmS8, armnn::Scalar, armnn::Signed32, and armnn::Signed64.

Referenced by TfLiteParserImpl::GetNetworkInputBindingInfo(), TfLiteParserImpl::GetNetworkOutputBindingInfo(), and ToConstTensor().