ArmNN
 24.08
TfLiteParser.hpp
Go to the documentation of this file.
1 //
2 // Copyright © 2017-2024 Arm Ltd and Contributors. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5 #pragma once
6 
7 #include <armnn/Descriptors.hpp>
8 #include "armnn/INetwork.hpp"
10 #include "armnn/Types.hpp"
11 
12 #include <schema_generated.h>
13 #include <functional>
14 #include <unordered_map>
15 #include <vector>
16 
17 #include <tensorflow/lite/version.h>
18 
19 #if TF_MAJOR_VERSION > 2 || (TF_MAJOR_VERSION == 2 && TF_MINOR_VERSION > 3)
20 #define ARMNN_POST_TFLITE_2_3
21 #endif
22 
23 namespace armnnTfLiteParser
24 {
25 
27 {
28 public:
29  // Shorthands for TfLite types
30  using ModelPtr = std::unique_ptr<tflite::ModelT>;
31  using SubgraphPtr = std::unique_ptr<tflite::SubGraphT>;
32  using OperatorPtr = std::unique_ptr<tflite::OperatorT>;
33  using OperatorCodePtr = std::unique_ptr<tflite::OperatorCodeT>;
34  using TensorPtr = std::unique_ptr<tflite::TensorT>;
35  using TensorRawPtr = const tflite::TensorT *;
36  using TensorRawPtrVector = std::vector<TensorRawPtr>;
37  using TensorIdRawPtr = std::pair<size_t, TensorRawPtr>;
38  using TensorIdRawPtrVector = std::vector<TensorIdRawPtr>;
39  using BufferPtr = std::unique_ptr<tflite::BufferT>;
40  using BufferRawPtr = const tflite::BufferT *;
41 
42 public:
43  /// Create the network from a flatbuffers binary file on disk
44  armnn::INetworkPtr CreateNetworkFromBinaryFile(const char* graphFile);
45 
46  /// Create the network from a flatbuffers binary
47  armnn::INetworkPtr CreateNetworkFromBinary(const std::vector<uint8_t> & binaryContent);
48 
49 
50  /// Retrieve binding info (layer id and tensor info) for the network input identified by
51  /// the given layer name and subgraph id
53  const std::string& name) const;
54 
55  /// Retrieve binding info (layer id and tensor info) for the network output identified by
56  /// the given layer name and subgraph id
58  const std::string& name) const;
59 
60  /// Return the number of subgraphs in the parsed model
61  size_t GetSubgraphCount() const;
62 
63  /// Return the input tensor names for a given subgraph
64  std::vector<std::string> GetSubgraphInputTensorNames(size_t subgraphId) const;
65 
66  /// Return the output tensor names for a given subgraph
67  std::vector<std::string> GetSubgraphOutputTensorNames(size_t subgraphId) const;
68 
70  ~TfLiteParserImpl() = default;
71 
72 public:
73  // testable helpers
74  armnn::INetworkPtr CreateNetworkFromBinaryAsDynamic(const std::vector<uint8_t>& binaryContent);
75 
76  armnn::INetworkPtr LoadModel(std::unique_ptr<tflite::ModelT> model);
77 
78  static ModelPtr LoadModelFromFile(const char* fileName);
79  static ModelPtr LoadModelFromBinary(const uint8_t* binaryContent, size_t len);
80  static TensorRawPtrVector GetInputs(const ModelPtr& model, size_t subgraphIndex, size_t operatorIndex);
81  static TensorRawPtrVector GetOutputs(const ModelPtr& model, size_t subgraphIndex, size_t operatorIndex);
82  static TensorIdRawPtrVector GetSubgraphInputs(const ModelPtr& model, size_t subgraphIndex);
83  static TensorIdRawPtrVector GetSubgraphOutputs(const ModelPtr& model, size_t subgraphIndex);
84  static std::vector<int32_t>& GetInputTensorIds(const ModelPtr& model, size_t subgraphIndex, size_t operatorIndex);
85  static std::vector<int32_t>& GetOutputTensorIds(const ModelPtr& model, size_t subgraphIndex, size_t operatorIndex);
86 
87  static BufferRawPtr GetBuffer(const ModelPtr& model, size_t bufferIndex);
88  static armnn::TensorInfo OutputShapeOfSqueeze(std::vector<uint32_t> squeezeDims,
89  const armnn::TensorInfo& inputTensorInfo);
90  static armnn::TensorInfo OutputShapeOfReshape(const armnn::TensorInfo& inputTensorInfo,
91  const std::vector<int32_t>& targetDimsIn);
92 
93  /// Retrieve version in X.Y.Z form
94  static const std::string GetVersion();
95 
96 private:
97 
98  // No copying allowed until it is wanted and properly implemented
99  TfLiteParserImpl(const TfLiteParserImpl &) = delete;
100  TfLiteParserImpl & operator=(const TfLiteParserImpl &) = delete;
101 
102  /// Create the network from an already loaded flatbuffers model
103  armnn::INetworkPtr CreateNetworkFromModel();
104 
105  // signature for the parser functions
106  using OperatorParsingFunction = void(TfLiteParserImpl::*)(size_t subgraphIndex, size_t operatorIndex);
107 
108  void ParseCustomOperator(size_t subgraphIndex, size_t operatorIndex);
109  void ParseUnsupportedOperator(size_t subgraphIndex, size_t operatorIndex);
110 
111  void ParseAbs(size_t subgraphIndex, size_t operatorIndex);
112  void ParseActivation(size_t subgraphIndex, size_t operatorIndex, armnn::ActivationFunction activationType);
113  void ParseAdd(size_t subgraphIndex, size_t operatorIndex);
114  void ParseArgMinMax(size_t subgraphIndex, size_t operatorIndex, armnn::ArgMinMaxFunction argMinMaxFunction);
115  void ParseArgMin(size_t subgraphIndex, size_t operatorIndex);
116  void ParseArgMax(size_t subgraphIndex, size_t operatorIndex);
117  void ParseAveragePool2D(size_t subgraphIndex, size_t operatorIndex);
118  void ParseBatchMatMul(size_t subgraphIndex, size_t operatorIndex);
119  void ParseBatchToSpaceND(size_t subgraphIndex, size_t operatorIndex);
120  void ParseBroadcastTo(size_t subgraphIndex, size_t operatorIndex);
121  void ParseCast(size_t subgraphIndex, size_t operatorIndex);
122  void ParseCeil(size_t subgraphIndex, size_t operatorIndex);
123  void ParseComparison(size_t subgraphIndex, size_t operatorIndex, armnn::ComparisonOperation comparisonOperation);
124  void ParseConcatenation(size_t subgraphIndex, size_t operatorIndex);
125  void ParseConv2D(size_t subgraphIndex, size_t operatorIndex);
126  // Conv3D support was added in TF 2.5, so for backwards compatibility a hash define is needed.
127  #if defined(ARMNN_POST_TFLITE_2_4)
128  void ParseConv3D(size_t subgraphIndex, size_t operatorIndex);
129  #endif
130  void ParseDepthToSpace(size_t subgraphIndex, size_t operatorIndex);
131  void ParseDepthwiseConv2D(size_t subgraphIndex, size_t operatorIndex);
132  void ParseDequantize(size_t subgraphIndex, size_t operatorIndex);
133  void ParseDetectionPostProcess(size_t subgraphIndex, size_t operatorIndex);
134  void ParseDiv(size_t subgraphIndex, size_t operatorIndex);
135  void ParseElementwiseUnary(size_t subgraphIndex, size_t operatorIndex, armnn::UnaryOperation unaryOperation);
136  void ParseElu(size_t subgraphIndex, size_t operatorIndex);
137  void ParseEqual(size_t subgraphIndex, size_t operatorIndex);
138  void ParseExp(size_t subgraphIndex, size_t operatorIndex);
139  void ParseExpandDims(size_t subgraphIndex, size_t operatorIndex);
140  void ParseFloorDiv(size_t subgraphIndex, size_t operatorIndex);
141  void ParseFullyConnected(size_t subgraphIndex, size_t operatorIndex);
142  void ParseGather(size_t subgraphIndex, size_t operatorIndex);
143  void ParseGatherNd(size_t subgraphIndex, size_t operatorIndex);
144  void ParseGelu(size_t subgraphIndex, size_t operatorIndex);
145  void ParseGreater(size_t subgraphIndex, size_t operatorIndex);
146  void ParseGreaterOrEqual(size_t subgraphIndex, size_t operatorIndex);
147  void ParseHardSwish(size_t subgraphIndex, size_t operatorIndex);
148  void ParseLeakyRelu(size_t subgraphIndex, size_t operatorIndex);
149  void ParseLess(size_t subgraphIndex, size_t operatorIndex);
150  void ParseLessOrEqual(size_t subgraphIndex, size_t operatorIndex);
151  void ParseLog(size_t subgraphIndex, size_t operatorIndex);
152  void ParseLocalResponseNormalization(size_t subgraphIndex, size_t operatorIndex);
153  void ParseLogicalNot(size_t subgraphIndex, size_t operatorIndex);
154  void ParseLogistic(size_t subgraphIndex, size_t operatorIndex);
155  void ParseLogSoftmax(size_t subgraphIndex, size_t operatorIndex);
156  void ParseL2Normalization(size_t subgraphIndex, size_t operatorIndex);
157  void ParseMaxPool2D(size_t subgraphIndex, size_t operatorIndex);
158  void ParseMaximum(size_t subgraphIndex, size_t operatorIndex);
159  void ParseMean(size_t subgraphIndex, size_t operatorIndex);
160  void ParseMinimum(size_t subgraphIndex, size_t operatorIndex);
161  void ParseMirrorPad(size_t subgraphIndex, size_t operatorIndex);
162  void ParseMul(size_t subgraphIndex, size_t operatorIndex);
163  void ParseNeg(size_t subgraphIndex, size_t operatorIndex);
164  void ParseNotEqual(size_t subgraphIndex, size_t operatorIndex);
165  void ParsePack(size_t subgraphIndex, size_t operatorIndex);
166  void ParsePad(size_t subgraphIndex, size_t operatorIndex);
167  void ParsePool(size_t subgraphIndex, size_t operatorIndex, armnn::PoolingAlgorithm algorithm);
168  void ParsePower(size_t subgraphIndex, size_t operatorIndex);
169  void ParsePrelu(size_t subgraphIndex, size_t operatorIndex);
170  void ParseQuantize(size_t subgraphIndex, size_t operatorIndex);
171  void ParseReduce(size_t subgraphIndex, size_t operatorIndex, armnn::ReduceOperation reduceOperation);
172  void ParseReduceMax(size_t subgraphIndex, size_t operatorIndex);
173  void ParseReduceMin(size_t subgraphIndex, size_t operatorIndex);
174  void ParseReduceProd(size_t subgraphIndex, size_t operatorIndex);
175  void ParseRelu(size_t subgraphIndex, size_t operatorIndex);
176  void ParseRelu6(size_t subgraphIndex, size_t operatorIndex);
177  void ParseReshape(size_t subgraphIndex, size_t operatorIndex);
178  void ParseResize(size_t subgraphIndex, size_t operatorIndex, armnn::ResizeMethod resizeMethod);
179  void ParseResizeBilinear(size_t subgraphIndex, size_t operatorIndex);
180  void ParseResizeNearestNeighbor(size_t subgraphIndex, size_t operatorIndex);
181  void ParseReverseV2(size_t subgraphIndex, size_t operatorIndex);
182  void ParseRsqrt(size_t subgraphIndex, size_t operatorIndex);
183  void ParseScatterNd(size_t subgraphIndex, size_t operatorIndex);
184  void ParseShape(size_t subgraphIndex, size_t operatorIndex);
185  void ParseSin(size_t subgraphIndex, size_t operatorIndex);
186  void ParseSlice(size_t subgraphIndex, size_t operatorIndex);
187  void ParseSoftmax(size_t subgraphIndex, size_t operatorIndex);
188  void ParseSqrt(size_t subgraphIndex, size_t operatorIndex);
189  void ParseSpaceToBatchND(size_t subgraphIndex, size_t operatorIndex);
190  void ParseSpaceToDepth(size_t subgraphIndex, size_t operatorIndex);
191  void ParseSplit(size_t subgraphIndex, size_t operatorIndex);
192  void ParseSplitV(size_t subgraphIndex, size_t operatorIndex);
193  void ParseSqueeze(size_t subgraphIndex, size_t operatorIndex);
194  void ParseSquare(size_t subgraphIndex, size_t operatorIndex);
195  void ParseSquaredDifference(size_t subgraphIndex, size_t operatorIndex);
196  void ParseStridedSlice(size_t subgraphIndex, size_t operatorIndex);
197  void ParseSub(size_t subgraphIndex, size_t operatorIndex);
198  void ParseSum(size_t subgraphIndex, size_t operatorIndex);
199  void ParseTanH(size_t subgraphIndex, size_t operatorIndex);
200  void ParseTile(size_t subgraphIndex, size_t operatorIndex);
201  void ParseTranspose(size_t subgraphIndex, size_t operatorIndex);
202  void ParseTransposeConv(size_t subgraphIndex, size_t operatorIndex);
203  void ParseUnidirectionalSequenceLSTM(size_t subgraphIndex, size_t operatorIndex);
204  void ParseUnpack(size_t subgraphIndex, size_t operatorIndex);
205 
206  void RegisterProducerOfTensor(size_t subgraphIndex, size_t tensorIndex, armnn::IOutputSlot* slot);
207  void RegisterConsumerOfTensor(size_t subgraphIndex, size_t tensorIndex, armnn::IInputSlot* slot);
208  void RegisterInputSlots(size_t subgraphIndex,
209  size_t operatorIndex,
211  const std::vector<unsigned int>& tensorIndexes,
212  unsigned int startingSlotIndex = 0);
213  void RegisterOutputSlots(size_t subgraphIndex,
214  size_t operatorIndex,
216  const std::vector<unsigned int>& tensorIndexes);
217 
218  void SetupInputLayerTensorInfos(size_t subgraphIndex);
219  void SetupConstantLayerTensorInfos(size_t subgraphIndex);
220 
221  void SetupInputLayers(size_t subgraphIndex);
222  void SetupOutputLayers(size_t subgraphIndex);
223  void SetupConstantLayers(size_t subgraphIndex);
224 
225  void ResetParser();
226 
227  void AddBroadcastReshapeLayer(size_t subgraphIndex,
228  size_t operatorIndex,
229  armnn::IConnectableLayer* layer);
230 
231  /// Attach an reshape layer to the one passed as a parameter
232  armnn::IConnectableLayer* AddReshapeLayer(armnn::IConnectableLayer* layer,
233  unsigned int outputSlot,
234  std::string reshapeLayerName,
235  armnn::TensorInfo outputShape);
236 
237  /// Attach an activation layer to the one passed as a parameter
238  armnn::IConnectableLayer* AddFusedActivationLayer(armnn::IConnectableLayer* layer,
239  unsigned int outputSlot,
240  tflite::ActivationFunctionType activationType);
241 
242  /// Attach a floor layer to the one passed as a parameter
243  armnn::IConnectableLayer* AddFusedFloorLayer(armnn::IConnectableLayer* layer, unsigned int outputSlot);
244 
245  // SupportedDataStorage's purpose is to hold data till we pass over to the network.
246  // We don't care about the content, and we want a single datatype to simplify the code.
247  struct SupportedDataStorage
248  {
249  public:
250  // Convenience constructors
251  SupportedDataStorage(std::unique_ptr<float[]>&& data);
252  SupportedDataStorage(std::unique_ptr<uint8_t[]>&& data);
253  SupportedDataStorage(std::unique_ptr<int8_t[]>&& data);
254  SupportedDataStorage(std::unique_ptr<int32_t[]>&& data);
255 
256  private:
257  // Pointers to the data buffers
258  std::unique_ptr<float[]> m_FloatData;
259  std::unique_ptr<uint8_t[]> m_Uint8Data;
260  std::unique_ptr<int8_t[]> m_Int8Data;
261  std::unique_ptr<int32_t[]> m_Int32Data;
262  };
263 
264  bool ShouldConstantTensorBeCreated(unsigned int tensorIndex);
265 
266  bool IsConstTensor(TensorRawPtr tensorPtr);
267 
268  bool ShouldConstantTensorBeConverted(TfLiteParserImpl::TensorRawPtr tensorPtr,
269  armnn::DataType inputDataType,
270  armnn::DataType filterDataType);
271 
272  armnn::ConstTensor CreateConstTensorNonPermuted(TensorRawPtr tensorPtr,
273  armnn::TensorInfo& tensorInfo);
274 
275  std::pair<armnn::ConstTensor, SupportedDataStorage>
276  CreateConstTensorPermuted(TensorRawPtr tensorPtr,
277  armnn::TensorInfo& tensorInfo,
279 
280  std::pair<armnn::ConstTensor, std::unique_ptr<float[]>>
281  CreateConstTensorNonPermuted(TensorRawPtr tensorPtr,
282  armnn::TensorInfo& tensorInfo,
283  armnn::DataType inputDataType);
284 
285  template<typename T>
286  std::pair<armnn::ConstTensor, TfLiteParserImpl::SupportedDataStorage>
287  CreateConstTensorAndStoreData(TfLiteParserImpl::BufferRawPtr bufferPtr,
289  armnn::TensorInfo& tensorInfo,
291 
292  std::pair<armnn::ConstTensor*, std::unique_ptr<float[]>>
293  CreateConstTensorPtr(TensorRawPtr tensorPtr,
294  armnn::TensorInfo& inputTensorInfo);
295 
296  armnn::TensorInfo InputTensorInfo(size_t subgraphIndex,
297  size_t operatorIndex,
298  int input);
299 
300  armnn::TensorInfo OutputTensorInfoFromInputs(size_t subgraphIndex,
301  size_t operatorIndex,
303  int output,
304  std::vector<int> inputs);
305 
306  armnn::TensorInfo OutputTensorInfoFromShapes(size_t subgraphIndex,
307  size_t operatorIndex,
309  int output = 0,
310  std::vector<armnn::TensorShape> inputShapes = {});
311 
312  /// Settings for configuring the TfLiteParser
314 
315  /// The network we're building. Gets cleared after it is passed to the user
316  armnn::INetworkPtr m_Network;
317  ModelPtr m_Model;
318 
319  std::vector<OperatorParsingFunction> m_ParserFunctions;
320  std::unordered_map<std::string, OperatorParsingFunction> m_CustomParserFunctions;
321 
322  /// A mapping of an output slot to each of the input slots it should be connected to
323  /// The outputSlot is from the layer that creates this tensor as one of its ouputs
324  /// The inputSlots are from the layers that use this tensor as one of their inputs
325  struct TensorSlots
326  {
327  armnn::IOutputSlot* outputSlot;
328  std::vector<armnn::IInputSlot*> inputSlots;
329 
330  TensorSlots() : outputSlot(nullptr) { }
331  };
332  typedef std::vector<TensorSlots> TensorConnections;
333  /// Connections for tensors in each subgraph
334  /// The first index is the subgraph ID, the second index is the tensor ID
335  std::vector<TensorConnections> m_SubgraphConnections;
336 
337  /// This is used in case that the model does not specify the output.
338  /// The shape can be calculated from the options.
339  std::vector<std::vector<unsigned int>> m_OverriddenOutputShapes;
340 
341  std::vector<unsigned int> m_ConstantsToDequantize;
342  std::vector<unsigned int> m_ConstantsToBeCreated;
343  std::map<size_t, armnn::TensorInfo> m_TensorInfos;
344 };
345 
346 }
armnn::INetworkPtr
std::unique_ptr< INetwork, void(*)(INetwork *network)> INetworkPtr
Definition: INetwork.hpp:339
armnnTfLiteParser::TfLiteParserImpl::GetInputs
static TensorRawPtrVector GetInputs(const ModelPtr &model, size_t subgraphIndex, size_t operatorIndex)
Definition: TfLiteParser.cpp:5451
armnnTfLiteParser::TfLiteParserImpl::GetOutputs
static TensorRawPtrVector GetOutputs(const ModelPtr &model, size_t subgraphIndex, size_t operatorIndex)
Definition: TfLiteParser.cpp:5478
armnnTfLiteParser::TfLiteParserImpl::TensorRawPtrVector
std::vector< TensorRawPtr > TensorRawPtrVector
Definition: TfLiteParser.hpp:36
armnnTfLiteParser::TfLiteParserImpl::TensorRawPtr
const tflite::TensorT * TensorRawPtr
Definition: TfLiteParser.hpp:35
armnnTfLiteParser::TfLiteParserImpl::CreateNetworkFromBinaryFile
armnn::INetworkPtr CreateNetworkFromBinaryFile(const char *graphFile)
Create the network from a flatbuffers binary file on disk.
Definition: TfLiteParser.cpp:957
armnn::Optional
Definition: Optional.hpp:270
armnn::ResizeMethod
ResizeMethod
Definition: Types.hpp:166
Descriptors.hpp
armnnTfLiteParser::TfLiteParserImpl::CreateNetworkFromBinary
armnn::INetworkPtr CreateNetworkFromBinary(const std::vector< uint8_t > &binaryContent)
Create the network from a flatbuffers binary.
Definition: TfLiteParser.cpp:964
armnnTfLiteParser::TfLiteParserImpl::SubgraphPtr
std::unique_ptr< tflite::SubGraphT > SubgraphPtr
Definition: TfLiteParser.hpp:31
armnn::TensorInfo
Definition: Tensor.hpp:152
armnnTfLiteParser::TfLiteParserImpl::GetSubgraphOutputs
static TensorIdRawPtrVector GetSubgraphOutputs(const ModelPtr &model, size_t subgraphIndex)
Definition: TfLiteParser.cpp:5515
armnnTfLiteParser::TfLiteParserImpl::GetSubgraphInputTensorNames
std::vector< std::string > GetSubgraphInputTensorNames(size_t subgraphId) const
Return the input tensor names for a given subgraph.
Definition: TfLiteParser.cpp:6010
armnnTfLiteParser::TfLiteParserImpl::GetOutputTensorIds
static std::vector< int32_t > & GetOutputTensorIds(const ModelPtr &model, size_t subgraphIndex, size_t operatorIndex)
Definition: TfLiteParser.cpp:5541
armnnTfLiteParser::TfLiteParserImpl::GetSubgraphOutputTensorNames
std::vector< std::string > GetSubgraphOutputTensorNames(size_t subgraphId) const
Return the output tensor names for a given subgraph.
Definition: TfLiteParser.cpp:6023
armnnTfLiteParser::TfLiteParserImpl::LoadModelFromFile
static ModelPtr LoadModelFromFile(const char *fileName)
Definition: TfLiteParser.cpp:5402
armnn::ArgMinMaxFunction
ArgMinMaxFunction
Definition: Types.hpp:103
armnnTfLiteParser::TfLiteParserImpl::TfLiteParserImpl
TfLiteParserImpl(const armnn::Optional< ITfLiteParser::TfLiteParserOptions > &options=armnn::EmptyOptional())
Definition: TfLiteParser.cpp:744
armnnTfLiteParser::TfLiteParserImpl::BufferRawPtr
const tflite::BufferT * BufferRawPtr
Definition: TfLiteParser.hpp:40
armnnTfLiteParser::TfLiteParserImpl::OutputShapeOfReshape
static armnn::TensorInfo OutputShapeOfReshape(const armnn::TensorInfo &inputTensorInfo, const std::vector< int32_t > &targetDimsIn)
Definition: TfLiteParser.cpp:3311
armnnTfLiteParser::TfLiteParserImpl::CreateNetworkFromBinaryAsDynamic
armnn::INetworkPtr CreateNetworkFromBinaryAsDynamic(const std::vector< uint8_t > &binaryContent)
armnnTfLiteParser::TfLiteParserImpl::TensorPtr
std::unique_ptr< tflite::TensorT > TensorPtr
Definition: TfLiteParser.hpp:34
armnnTfLiteParser::TfLiteParserImpl::LoadModelFromBinary
static ModelPtr LoadModelFromBinary(const uint8_t *binaryContent, size_t len)
Definition: TfLiteParser.cpp:5432
armnnTfLiteParser::TfLiteParserImpl::GetNetworkInputBindingInfo
BindingPointInfo GetNetworkInputBindingInfo(size_t subgraphId, const std::string &name) const
Retrieve binding info (layer id and tensor info) for the network input identified by the given layer ...
Definition: TfLiteParser.cpp:5941
armnn::IOutputSlot
An output connection slot for a layer.
Definition: INetwork.hpp:53
INetwork.hpp
armnnTfLiteParser::BindingPointInfo
armnn::BindingPointInfo BindingPointInfo
Definition: ITfLiteParser.hpp:20
armnnTfLiteParser::TfLiteParserImpl::BufferPtr
std::unique_ptr< tflite::BufferT > BufferPtr
Definition: TfLiteParser.hpp:39
armnn::EmptyOptional
EmptyOptional is used to initialize the Optional class in case we want to have default value for an O...
Definition: Optional.hpp:32
armnn::DataType
DataType
Definition: Types.hpp:48
armnnTfLiteParser::TfLiteParserImpl::TensorIdRawPtrVector
std::vector< TensorIdRawPtr > TensorIdRawPtrVector
Definition: TfLiteParser.hpp:38
armnnTfLiteParser::TfLiteParserImpl::GetNetworkOutputBindingInfo
BindingPointInfo GetNetworkOutputBindingInfo(size_t subgraphId, const std::string &name) const
Retrieve binding info (layer id and tensor info) for the network output identified by the given layer...
Definition: TfLiteParser.cpp:5973
armnnTfLiteParser::TfLiteParserImpl::TensorIdRawPtr
std::pair< size_t, TensorRawPtr > TensorIdRawPtr
Definition: TfLiteParser.hpp:37
armnnTfLiteParser::TfLiteParserImpl::LoadModel
armnn::INetworkPtr LoadModel(std::unique_ptr< tflite::ModelT > model)
Definition: TfLiteParser.cpp:972
armnnTfLiteParser::TfLiteParserImpl::GetVersion
static const std::string GetVersion()
Retrieve version in X.Y.Z form.
Definition: TfLiteParser.cpp:6036
armnn::ActivationFunction
ActivationFunction
Definition: Types.hpp:86
armnn::UnaryOperation
UnaryOperation
Definition: Types.hpp:125
armnnTfLiteParser::TfLiteParserImpl
Definition: TfLiteParser.hpp:26
ITfLiteParser.hpp
armnnTfLiteParser::TfLiteParserImpl::GetSubgraphInputs
static TensorIdRawPtrVector GetSubgraphInputs(const ModelPtr &model, size_t subgraphIndex)
Definition: TfLiteParser.cpp:5498
armnn::ComparisonOperation
ComparisonOperation
Definition: Types.hpp:109
armnnTfLiteParser::TfLiteParserImpl::ModelPtr
std::unique_ptr< tflite::ModelT > ModelPtr
Definition: TfLiteParser.hpp:30
armnnTfLiteParser::TfLiteParserImpl::OperatorCodePtr
std::unique_ptr< tflite::OperatorCodeT > OperatorCodePtr
Definition: TfLiteParser.hpp:33
armnnTfLiteParser::TfLiteParserImpl::~TfLiteParserImpl
~TfLiteParserImpl()=default
armnnTfLiteParser::TfLiteParserImpl::OperatorPtr
std::unique_ptr< tflite::OperatorT > OperatorPtr
Definition: TfLiteParser.hpp:32
Types.hpp
armnn::ReduceOperation
ReduceOperation
Definition: Types.hpp:157
armnnTfLiteParser::TfLiteParserImpl::GetSubgraphCount
size_t GetSubgraphCount() const
Return the number of subgraphs in the parsed model.
Definition: TfLiteParser.cpp:6005
armnn::ConstTensor
A tensor defined by a TensorInfo (shape and data type) and an immutable backing store.
Definition: Tensor.hpp:329
armnn::IConnectableLayer
Interface for a layer that is connectable to other layers via InputSlots and OutputSlots.
Definition: INetwork.hpp:80
armnn::IInputSlot
An input connection slot for a layer.
Definition: INetwork.hpp:25
armnn::PoolingAlgorithm
PoolingAlgorithm
Definition: Types.hpp:150
armnnTfLiteParser
Definition: ITfLiteParser.hpp:17
armnnTfLiteParser::TfLiteParserImpl::GetBuffer
static BufferRawPtr GetBuffer(const ModelPtr &model, size_t bufferIndex)
Definition: TfLiteParser.cpp:5763
armnnTfLiteParser::TfLiteParserImpl::GetInputTensorIds
static std::vector< int32_t > & GetInputTensorIds(const ModelPtr &model, size_t subgraphIndex, size_t operatorIndex)
Definition: TfLiteParser.cpp:5531
armnnTfLiteParser::TfLiteParserImpl::OutputShapeOfSqueeze
static armnn::TensorInfo OutputShapeOfSqueeze(std::vector< uint32_t > squeezeDims, const armnn::TensorInfo &inputTensorInfo)
Definition: TfLiteParser.cpp:2430