11 #include <schema_generated.h> 13 #include <unordered_map> 23 using ModelPtr = std::unique_ptr<tflite::ModelT>;
46 const std::string& name)
const override;
51 const std::string& name)
const override;
80 const std::vector<int32_t> & targetDimsIn);
91 using OperatorParsingFunction = void(
TfLiteParser::*)(
size_t subgraphIndex,
size_t operatorIndex);
93 void ParseCustomOperator(
size_t subgraphIndex,
size_t operatorIndex);
94 void ParseUnsupportedOperator(
size_t subgraphIndex,
size_t operatorIndex);
97 void ParseAdd(
size_t subgraphIndex,
size_t operatorIndex);
98 void ParseAveragePool2D(
size_t subgraphIndex,
size_t operatorIndex);
99 void ParseBatchToSpaceND(
size_t subgraphIndex,
size_t operatorIndex);
100 void ParseConcatenation(
size_t subgraphIndex,
size_t operatorIndex);
101 void ParseConv2D(
size_t subgraphIndex,
size_t operatorIndex);
102 void ParseDepthwiseConv2D(
size_t subgraphIndex,
size_t operatorIndex);
103 void ParseDequantize(
size_t subgraphIndex,
size_t operatorIndex);
104 void ParseDetectionPostProcess(
size_t subgraphIndex,
size_t operatorIndex);
105 void ParseExp(
size_t subgraphIndex,
size_t operatorIndex);
106 void ParseFullyConnected(
size_t subgraphIndex,
size_t operatorIndex);
107 void ParseLogistic(
size_t subgraphIndex,
size_t operatorIndex);
108 void ParseL2Normalization(
size_t subgraphIndex,
size_t operatorIndex);
109 void ParseMaxPool2D(
size_t subgraphIndex,
size_t operatorIndex);
110 void ParseMaximum(
size_t subgraphIndex,
size_t operatorIndex);
111 void ParseMean(
size_t subgraphIndex,
size_t operatorIndex);
112 void ParseMinimum(
size_t subgraphIndex,
size_t operatorIndex);
113 void ParseMul(
size_t subgraphIndex,
size_t operatorIndex);
114 void ParsePack(
size_t subgraphIndex,
size_t operatorIndex);
115 void ParsePad(
size_t subgraphIndex,
size_t operatorIndex);
117 void ParseQuantize(
size_t subgraphIndex,
size_t operatorIndex);
118 void ParseRelu(
size_t subgraphIndex,
size_t operatorIndex);
119 void ParseRelu6(
size_t subgraphIndex,
size_t operatorIndex);
120 void ParseReshape(
size_t subgraphIndex,
size_t operatorIndex);
121 void ParseResize(
size_t subgraphIndex,
size_t operatorIndex,
armnn::ResizeMethod resizeMethod);
122 void ParseResizeBilinear(
size_t subgraphIndex,
size_t operatorIndex);
123 void ParseResizeNearestNeighbor(
size_t subgraphIndex,
size_t operatorIndex);
124 void ParseSlice(
size_t subgraphIndex,
size_t operatorIndex);
125 void ParseSoftmax(
size_t subgraphIndex,
size_t operatorIndex);
126 void ParseSpaceToBatchND(
size_t subgraphIndex,
size_t operatorIndex);
127 void ParseSplit(
size_t subgraphIndex,
size_t operatorIndex);
128 void ParseSplitV(
size_t subgraphIndex,
size_t operatorIndex);
129 void ParseSqueeze(
size_t subgraphIndex,
size_t operatorIndex);
130 void ParseStridedSlice(
size_t subgraphIndex,
size_t operatorIndex);
131 void ParseSub(
size_t subgraphIndex,
size_t operatorIndex);
132 void ParseTanH(
size_t subgraphIndex,
size_t operatorIndex);
133 void ParseTranspose(
size_t subgraphIndex,
size_t operatorIndex);
134 void ParseTransposeConv(
size_t subgraphIndex,
size_t operatorIndex);
135 void ParseUnpack(
size_t subgraphIndex,
size_t operatorIndex);
137 void RegisterProducerOfTensor(
size_t subgraphIndex,
size_t tensorIndex,
armnn::IOutputSlot* slot);
138 void RegisterConsumerOfTensor(
size_t subgraphIndex,
size_t tensorIndex,
armnn::IInputSlot* slot);
139 void RegisterInputSlots(
size_t subgraphIndex,
140 size_t operatorIndex,
142 const std::vector<unsigned int>& tensorIndexes);
143 void RegisterOutputSlots(
size_t subgraphIndex,
144 size_t operatorIndex,
146 const std::vector<unsigned int>& tensorIndexes);
148 void SetupInputLayers(
size_t subgraphIndex);
149 void SetupOutputLayers(
size_t subgraphIndex);
150 void SetupConstantLayers(
size_t subgraphIndex);
154 void AddBroadcastReshapeLayer(
size_t subgraphIndex,
155 size_t operatorIndex,
160 unsigned int outputSlot,
161 tflite::ActivationFunctionType activationType);
165 struct SupportedDataStorage
169 SupportedDataStorage(std::unique_ptr<
float[]>&& data);
170 SupportedDataStorage(std::unique_ptr<uint8_t[]>&& data);
171 SupportedDataStorage(std::unique_ptr<int8_t[]>&& data);
172 SupportedDataStorage(std::unique_ptr<int32_t[]>&& data);
176 std::unique_ptr<float[]> m_FloatData;
177 std::unique_ptr<uint8_t[]> m_Uint8Data;
178 std::unique_ptr<int8_t[]> m_Int8Data;
179 std::unique_ptr<int32_t[]> m_Int32Data;
184 std::pair<armnn::ConstTensor, TfLiteParser::SupportedDataStorage>
190 std::pair<armnn::ConstTensor, SupportedDataStorage>
202 std::vector<OperatorParsingFunction> m_ParserFunctions;
203 std::unordered_map<std::string, OperatorParsingFunction> m_CustomParserFunctions;
211 std::vector<armnn::IInputSlot*> inputSlots;
213 TensorSlots() : outputSlot(
nullptr) { }
215 typedef std::vector<TensorSlots> TensorConnections;
218 std::vector<TensorConnections> m_SubgraphConnections;
222 std::vector<std::vector<unsigned int>> m_OverridenOutputShapes;
virtual armnn::INetworkPtr CreateNetworkFromBinaryFile(const char *graphFile) override
Create the network from a flatbuffers binary file on disk.
virtual BindingPointInfo GetNetworkOutputBindingInfo(size_t subgraphId, const std::string &name) const override
Retrieve binding info (layer id and tensor info) for the network output identified by the given layer...
std::unique_ptr< tflite::SubGraphT > SubgraphPtr
static BufferRawPtr GetBuffer(const ModelPtr &model, size_t bufferIndex)
Interface for a layer that is connectable to other layers via InputSlots and OutputSlots.
static ModelPtr LoadModelFromBinary(const uint8_t *binaryContent, size_t len)
virtual armnn::INetworkPtr CreateNetworkFromBinary(const std::vector< uint8_t > &binaryContent) override
Create the network from a flatbuffers binary.
std::vector< TensorRawPtr > TensorRawPtrVector
std::unique_ptr< tflite::OperatorCodeT > OperatorCodePtr
std::pair< size_t, TensorRawPtr > TensorIdRawPtr
static ModelPtr LoadModelFromFile(const char *fileName)
static TensorRawPtrVector GetInputs(const ModelPtr &model, size_t subgraphIndex, size_t operatorIndex)
std::unique_ptr< tflite::BufferT > BufferPtr
virtual BindingPointInfo GetNetworkInputBindingInfo(size_t subgraphId, const std::string &name) const override
Retrieve binding info (layer id and tensor info) for the network input identified by the given layer ...
virtual size_t GetSubgraphCount() const override
Return the number of subgraphs in the parsed model.
static armnn::TensorInfo OutputShapeOfReshape(const armnn::TensorInfo &inputTensorInfo, const std::vector< int32_t > &targetDimsIn)
std::unique_ptr< tflite::TensorT > TensorPtr
static TensorIdRawPtrVector GetSubgraphInputs(const ModelPtr &model, size_t subgraphIndex)
static TensorRawPtrVector GetOutputs(const ModelPtr &model, size_t subgraphIndex, size_t operatorIndex)
static TensorIdRawPtrVector GetSubgraphOutputs(const ModelPtr &model, size_t subgraphIndex)
An output connection slot for a layer.
static std::vector< int32_t > & GetOutputTensorIds(const ModelPtr &model, size_t subgraphIndex, size_t operatorIndex)
static std::vector< int32_t > & GetInputTensorIds(const ModelPtr &model, size_t subgraphIndex, size_t operatorIndex)
EmptyOptional is used to initialize the Optional class in case we want to have default value for an O...
static armnn::TensorInfo OutputShapeOfSqueeze(const std::vector< uint32_t > &squeezeDims, const armnn::TensorInfo &inputTensorInfo)
const tflite::BufferT * BufferRawPtr
virtual std::vector< std::string > GetSubgraphInputTensorNames(size_t subgraphId) const override
Return the input tensor names for a given subgraph.
armnn::BindingPointInfo BindingPointInfo
virtual std::vector< std::string > GetSubgraphOutputTensorNames(size_t subgraphId) const override
Return the output tensor names for a given subgraph.
std::unique_ptr< INetwork, void(*)(INetwork *network)> INetworkPtr
armnn::Runtime::CreationOptions::ExternalProfilingOptions options
std::unique_ptr< tflite::ModelT > ModelPtr
const tflite::TensorT * TensorRawPtr
std::unique_ptr< tflite::OperatorT > OperatorPtr
TfLiteParser(const armnn::Optional< ITfLiteParser::TfLiteParserOptions > &options=armnn::EmptyOptional())
std::vector< TensorIdRawPtr > TensorIdRawPtrVector