ArmNN
 20.11
armnnDeserializer Namespace Reference

Classes

struct  BindingPointInfo
 
class  Deserializer
 
class  IDeserializer
 

Typedefs

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

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::LogicalBinaryOperation ToLogicalBinaryOperation (armnnSerializer::LogicalBinaryOperation operation)
 
armnn::UnaryOperation ToUnaryOperation (armnnSerializer::UnaryOperation operation)
 
armnn::ResizeMethod ToResizeMethod (armnnSerializer::ResizeMethod method)
 
armnn::TensorInfo ToTensorInfo (Deserializer::TensorRawPtr tensorPtr)
 
armnn::ConstTensor ToConstTensor (Deserializer::ConstTensorRawPtr constTensorPtr)
 
const armnnSerializer::OriginsDescriptor * GetOriginsDescriptor (const armnnSerializer::SerializedGraph *graph, unsigned int layerIndex)
 

Typedef Documentation

◆ IDeserializerPtr

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

Definition at line 25 of file IDeserializer.hpp.

Function Documentation

◆ CheckShape()

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

Definition at line 148 of file Deserializer.cpp.

References TensorShape::GetNumDimensions().

Referenced by Deserializer::OutputShapeOfReshape(), and TfLiteParser::OutputShapeOfReshape().

149 {
150  const unsigned int actualSize = actual.GetNumDimensions();
151  if (actualSize != expected.size())
152  {
153  return false;
154  }
155 
156  for (unsigned int i = 0u; i < actualSize; i++)
157  {
158  if (actual[i] != static_cast<unsigned int>(expected[i]))
159  {
160  return false;
161  }
162  }
163 
164  return true;
165 }
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 1626 of file Deserializer.cpp.

References CHECK_LAYERS, CHECK_LOCATION, CHECK_VALID_SIZE, Deserializer::GetInputs(), Deserializer::GetLayerName(), Deserializer::GetOutputs(), IConnectableLayer::GetOutputSlot(), FullyConnectedDescriptor::m_BiasEnabled, ComparisonDescriptor::m_Operation, ElementwiseUnaryDescriptor::m_Operation, FullyConnectedDescriptor::m_TransposeWeightMatrix, IOutputSlot::SetTensorInfo(), ToComparisonOperation(), ToConstTensor(), ToTensorInfo(), and ToUnaryOperation().

1628 {
1629  auto layerType = graph->layers()->Get(layerIndex)->layer_type();
1630 
1631  switch (layerType)
1632  {
1633  case Layer::Layer_ConcatLayer:
1634  return graph->layers()->Get(layerIndex)->layer_as_ConcatLayer()->descriptor();
1635  case Layer::Layer_MergerLayer:
1636  return graph->layers()->Get(layerIndex)->layer_as_MergerLayer()->descriptor();
1637  default:
1638  throw armnn::Exception("unknown layer type, should be concat or merger");
1639  }
1640 }
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 399 of file Deserializer.cpp.

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

Referenced by Deserializer::GetNetworkOutputBindingInfo().

400 {
401  switch (function)
402  {
403  case armnnSerializer::ActivationFunction_Sigmoid:
405  case armnnSerializer::ActivationFunction_TanH:
407  case armnnSerializer::ActivationFunction_Linear:
409  case armnnSerializer::ActivationFunction_ReLu:
411  case armnnSerializer::ActivationFunction_BoundedReLu:
413  case armnnSerializer::ActivationFunction_LeakyReLu:
415  case armnnSerializer::ActivationFunction_Abs:
417  case armnnSerializer::ActivationFunction_Sqrt:
419  case armnnSerializer::ActivationFunction_Square:
421  case armnnSerializer::ActivationFunction_Elu:
423  case armnnSerializer::ActivationFunction_HardSwish:
425  default:
427  }
428 }
min(a, max(b, input)) ReLu1 & ReLu6.

◆ ToArgMinMaxFunction()

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

Definition at line 430 of file Deserializer.cpp.

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

Referenced by Deserializer::GetNetworkOutputBindingInfo().

431 {
432  switch (function)
433  {
434  case armnnSerializer::ArgMinMaxFunction::ArgMinMaxFunction_Max:
436  case armnnSerializer::ArgMinMaxFunction::ArgMinMaxFunction_Min:
437  default:
439  }
440 }

◆ ToComparisonOperation()

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

Definition at line 442 of file Deserializer.cpp.

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

Referenced by GetOriginsDescriptor().

443 {
444  switch (operation)
445  {
446  case armnnSerializer::ComparisonOperation::ComparisonOperation_Equal:
448  case armnnSerializer::ComparisonOperation::ComparisonOperation_Greater:
450  case armnnSerializer::ComparisonOperation::ComparisonOperation_GreaterOrEqual:
452  case armnnSerializer::ComparisonOperation::ComparisonOperation_Less:
454  case armnnSerializer::ComparisonOperation::ComparisonOperation_LessOrEqual:
456  case armnnSerializer::ComparisonOperation::ComparisonOperation_NotEqual:
457  default:
459  }
460 }

◆ ToConstTensor()

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

Definition at line 594 of file Deserializer.cpp.

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

Referenced by Deserializer::GetLstmDescriptor(), Deserializer::GetNetworkOutputBindingInfo(), GetOriginsDescriptor(), and Deserializer::GetQLstmDescriptor().

595 {
596  CHECK_CONST_TENSOR_PTR(constTensorPtr);
597  armnn::TensorInfo tensorInfo = ToTensorInfo(constTensorPtr->info());
598 
599  switch (constTensorPtr->data_type())
600  {
601  case ConstTensorData_ByteData:
602  {
603  auto byteData = constTensorPtr->data_as_ByteData()->data();
604  CHECK_CONST_TENSOR_SIZE(byteData->size(), tensorInfo.GetNumElements());
605  return armnn::ConstTensor(tensorInfo, byteData->data());
606  }
607  case ConstTensorData_ShortData:
608  {
609  auto shortData = constTensorPtr->data_as_ShortData()->data();
610  CHECK_CONST_TENSOR_SIZE(shortData->size(), tensorInfo.GetNumElements());
611  return armnn::ConstTensor(tensorInfo, shortData->data());
612  }
613  case ConstTensorData_IntData:
614  {
615  auto intData = constTensorPtr->data_as_IntData()->data();
616  CHECK_CONST_TENSOR_SIZE(intData->size(), tensorInfo.GetNumElements());
617  return armnn::ConstTensor(tensorInfo, intData->data());
618  }
619  case ConstTensorData_LongData:
620  {
621  auto longData = constTensorPtr->data_as_LongData()->data();
622  CHECK_CONST_TENSOR_SIZE(longData->size(), tensorInfo.GetNumElements());
623  return armnn::ConstTensor(tensorInfo, longData->data());
624  }
625  default:
626  {
627  CheckLocation location = CHECK_LOCATION();
628  throw ParseException(fmt::format("Unsupported data type {0} = {1}. {2}",
629  constTensorPtr->data_type(),
630  EnumNameConstTensorData(constTensorPtr->data_type()),
631  location.AsString()));
632  }
633  }
634 }
std::string AsString() const
Definition: Exceptions.hpp:29
#define CHECK_CONST_TENSOR_SIZE(CONST_TENSOR_SIZE, TENSOR_SIZE)
armnn::TensorInfo ToTensorInfo(Deserializer::TensorRawPtr tensorPtr)
A tensor defined by a TensorInfo (shape and data type) and an immutable backing store.
Definition: Tensor.hpp:314
#define CHECK_CONST_TENSOR_PTR(TENSOR_PTR)
#define CHECK_LOCATION()
Definition: Exceptions.hpp:197
unsigned int GetNumElements() const
Definition: Tensor.hpp:192

◆ ToDataLayout()

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

Definition at line 387 of file Deserializer.cpp.

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

Referenced by Deserializer::GetNetworkOutputBindingInfo(), Deserializer::GetNormalizationDescriptor(), Deserializer::GetQLstmDescriptor(), and Deserializer::OutputShapeOfReshape().

388 {
389  switch (dataLayout)
390  {
391  case armnnSerializer::DataLayout::DataLayout_NHWC:
393  case armnnSerializer::DataLayout::DataLayout_NCHW:
394  default:
396  }
397 }

◆ ToLogicalBinaryOperation()

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

Definition at line 462 of file Deserializer.cpp.

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

Referenced by Deserializer::GetNetworkOutputBindingInfo().

463 {
464  switch (operation)
465  {
466  case armnnSerializer::LogicalBinaryOperation::LogicalBinaryOperation_LogicalAnd:
468  case armnnSerializer::LogicalBinaryOperation::LogicalBinaryOperation_LogicalOr:
470  default:
471  throw armnn::InvalidArgumentException("Logical Binary operation unknown");
472  }
473 }

◆ ToResizeMethod()

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

Definition at line 496 of file Deserializer.cpp.

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

Referenced by Deserializer::OutputShapeOfReshape().

497 {
498  switch (method)
499  {
500  case armnnSerializer::ResizeMethod_NearestNeighbor:
502  case armnnSerializer::ResizeMethod_Bilinear:
504  default:
506  }
507 }

◆ ToTensorInfo()

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

Definition at line 509 of file Deserializer.cpp.

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

Referenced by armnnTfLiteParser::ComputeWrappedIndex(), TfLiteParser::CreateNetworkFromBinary(), OnnxParser::CreateNetworkFromString(), Deserializer::GetLstmDescriptor(), OnnxParser::GetNetworkInputBindingInfo(), TfLiteParser::GetNetworkInputBindingInfo(), Deserializer::GetNetworkOutputBindingInfo(), OnnxParser::GetNetworkOutputBindingInfo(), TfLiteParser::GetNetworkOutputBindingInfo(), Deserializer::GetNormalizationDescriptor(), GetOriginsDescriptor(), TfLiteParser::GetOutputTensorIds(), Deserializer::GetPoolingDescriptor(), Deserializer::GetQLstmDescriptor(), Deserializer::OutputShapeOfReshape(), TfLiteParser::OutputShapeOfReshape(), TfLiteParser::OutputShapeOfSqueeze(), and ToConstTensor().

510 {
511  armnn::DataType type;
512  CHECK_TENSOR_PTR(tensorPtr);
513 
514  switch (tensorPtr->dataType())
515  {
516  case DataType_QAsymmS8:
518  break;
519  case DataType_QSymmS8:
521  break;
522  case DataType_QuantisedAsymm8:
523  case DataType_QAsymmU8:
525  break;
526  case DataType_QSymmS16:
527  case DataType_QuantisedSymm16:
529  break;
530  case DataType_Signed32:
532  break;
533  case DataType_Float32:
535  break;
536  case DataType_Float16:
538  break;
539  case DataType_Boolean:
541  break;
542  default:
543  {
544  CheckLocation location = CHECK_LOCATION();
545  throw ParseException(fmt::format("Unsupported data type {0} = {1}. {2}",
546  tensorPtr->dataType(),
547  EnumNameDataType(tensorPtr->dataType()),
548  location.AsString()));
549  }
550  }
551 
552  if (tensorPtr->dimensionality() == static_cast<unsigned int>(Dimensionality::Scalar))
553  {
554  float quantizationScale = tensorPtr->quantizationScale();
555  int32_t quantizationOffset = tensorPtr->quantizationOffset();
556 
558  type,
559  quantizationScale,
560  quantizationOffset);
561  }
562 
563  auto dimensions = tensorPtr->dimensions();
564  unsigned int size = dimensions->size();
565  std::vector<unsigned int> outputDims(dimensions->begin(), dimensions->begin() + size);
566 
567  auto quantizationScales = tensorPtr->quantizationScales();
568 
569  if (quantizationScales)
570  {
571  unsigned int quantizationScalesSize = quantizationScales->size();
572  std::vector<float> scales(quantizationScales->begin(), quantizationScales->begin() + quantizationScalesSize);
573  unsigned int quantizationDim = tensorPtr->quantizationDim();
574  armnn::TensorInfo result(size,
575  outputDims.data(),
576  type,
577  scales,
578  quantizationDim);
579  return result;
580  }
581 
582  float quantizationScale = tensorPtr->quantizationScale();
583  int32_t quantizationOffset = tensorPtr->quantizationOffset();
584 
585  // two statements (on purpose) for easier debugging:
586  armnn::TensorInfo result(size,
587  outputDims.data(),
588  type,
589  quantizationScale,
590  quantizationOffset);
591  return result;
592 }
std::string AsString() const
Definition: Exceptions.hpp:29
#define CHECK_TENSOR_PTR(TENSOR_PTR)
DataType
Definition: Types.hpp:32
#define CHECK_LOCATION()
Definition: Exceptions.hpp:197

◆ ToUnaryOperation()

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

Definition at line 475 of file Deserializer.cpp.

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

Referenced by GetOriginsDescriptor().

476 {
477  switch (operation)
478  {
479  case armnnSerializer::UnaryOperation::UnaryOperation_Abs:
481  case armnnSerializer::UnaryOperation::UnaryOperation_Rsqrt:
483  case armnnSerializer::UnaryOperation::UnaryOperation_Sqrt:
485  case armnnSerializer::UnaryOperation::UnaryOperation_Exp:
487  case armnnSerializer::UnaryOperation::UnaryOperation_Neg:
489  case armnnSerializer::UnaryOperation::UnaryOperation_LogicalNot:
491  default:
492  throw armnn::InvalidArgumentException("Unary operation unknown");
493  }
494 }