1*89c4ff92SAndroid Build Coastguard Worker //
2*89c4ff92SAndroid Build Coastguard Worker // Copyright © 2017,2019-2023 Arm Ltd and Contributors. All rights reserved.
3*89c4ff92SAndroid Build Coastguard Worker // SPDX-License-Identifier: MIT
4*89c4ff92SAndroid Build Coastguard Worker //
5*89c4ff92SAndroid Build Coastguard Worker #include "Serializer.hpp"
6*89c4ff92SAndroid Build Coastguard Worker #include "SerializerUtils.hpp"
7*89c4ff92SAndroid Build Coastguard Worker
8*89c4ff92SAndroid Build Coastguard Worker #include <armnn/Descriptors.hpp>
9*89c4ff92SAndroid Build Coastguard Worker #include <armnn/LstmParams.hpp>
10*89c4ff92SAndroid Build Coastguard Worker #include <armnn/QuantizedLstmParams.hpp>
11*89c4ff92SAndroid Build Coastguard Worker #include <armnn/utility/IgnoreUnused.hpp>
12*89c4ff92SAndroid Build Coastguard Worker #include <armnn/utility/NumericCast.hpp>
13*89c4ff92SAndroid Build Coastguard Worker
14*89c4ff92SAndroid Build Coastguard Worker #include <fmt/format.h>
15*89c4ff92SAndroid Build Coastguard Worker #include <iostream>
16*89c4ff92SAndroid Build Coastguard Worker
17*89c4ff92SAndroid Build Coastguard Worker using namespace armnn;
18*89c4ff92SAndroid Build Coastguard Worker namespace fb = flatbuffers;
19*89c4ff92SAndroid Build Coastguard Worker namespace serializer = armnnSerializer;
20*89c4ff92SAndroid Build Coastguard Worker
21*89c4ff92SAndroid Build Coastguard Worker namespace armnnSerializer
22*89c4ff92SAndroid Build Coastguard Worker {
23*89c4ff92SAndroid Build Coastguard Worker
ISerializer()24*89c4ff92SAndroid Build Coastguard Worker ISerializer::ISerializer() : pSerializerImpl(new SerializerImpl())
25*89c4ff92SAndroid Build Coastguard Worker {
26*89c4ff92SAndroid Build Coastguard Worker }
27*89c4ff92SAndroid Build Coastguard Worker
28*89c4ff92SAndroid Build Coastguard Worker ISerializer::~ISerializer() = default;
29*89c4ff92SAndroid Build Coastguard Worker
CreateRaw()30*89c4ff92SAndroid Build Coastguard Worker ISerializer* ISerializer::CreateRaw()
31*89c4ff92SAndroid Build Coastguard Worker {
32*89c4ff92SAndroid Build Coastguard Worker return new ISerializer();
33*89c4ff92SAndroid Build Coastguard Worker }
34*89c4ff92SAndroid Build Coastguard Worker
Create()35*89c4ff92SAndroid Build Coastguard Worker ISerializerPtr ISerializer::Create()
36*89c4ff92SAndroid Build Coastguard Worker {
37*89c4ff92SAndroid Build Coastguard Worker return ISerializerPtr(CreateRaw(), &ISerializer::Destroy);
38*89c4ff92SAndroid Build Coastguard Worker }
39*89c4ff92SAndroid Build Coastguard Worker
Destroy(ISerializer * serializer)40*89c4ff92SAndroid Build Coastguard Worker void ISerializer::Destroy(ISerializer* serializer)
41*89c4ff92SAndroid Build Coastguard Worker {
42*89c4ff92SAndroid Build Coastguard Worker delete serializer;
43*89c4ff92SAndroid Build Coastguard Worker }
44*89c4ff92SAndroid Build Coastguard Worker
Serialize(const armnn::INetwork & inNetwork)45*89c4ff92SAndroid Build Coastguard Worker void ISerializer::Serialize(const armnn::INetwork& inNetwork)
46*89c4ff92SAndroid Build Coastguard Worker {
47*89c4ff92SAndroid Build Coastguard Worker pSerializerImpl->Serialize(inNetwork);
48*89c4ff92SAndroid Build Coastguard Worker }
49*89c4ff92SAndroid Build Coastguard Worker
SaveSerializedToStream(std::ostream & stream)50*89c4ff92SAndroid Build Coastguard Worker bool ISerializer::SaveSerializedToStream(std::ostream& stream)
51*89c4ff92SAndroid Build Coastguard Worker {
52*89c4ff92SAndroid Build Coastguard Worker return pSerializerImpl->SaveSerializedToStream(stream);
53*89c4ff92SAndroid Build Coastguard Worker }
54*89c4ff92SAndroid Build Coastguard Worker
GetFlatBufferActivationFunction(armnn::ActivationFunction function)55*89c4ff92SAndroid Build Coastguard Worker serializer::ActivationFunction GetFlatBufferActivationFunction(armnn::ActivationFunction function)
56*89c4ff92SAndroid Build Coastguard Worker {
57*89c4ff92SAndroid Build Coastguard Worker switch (function)
58*89c4ff92SAndroid Build Coastguard Worker {
59*89c4ff92SAndroid Build Coastguard Worker case armnn::ActivationFunction::Sigmoid:
60*89c4ff92SAndroid Build Coastguard Worker return serializer::ActivationFunction::ActivationFunction_Sigmoid;
61*89c4ff92SAndroid Build Coastguard Worker case armnn::ActivationFunction::TanH:
62*89c4ff92SAndroid Build Coastguard Worker return serializer::ActivationFunction::ActivationFunction_TanH;
63*89c4ff92SAndroid Build Coastguard Worker case armnn::ActivationFunction::Linear:
64*89c4ff92SAndroid Build Coastguard Worker return serializer::ActivationFunction::ActivationFunction_Linear;
65*89c4ff92SAndroid Build Coastguard Worker case armnn::ActivationFunction::ReLu:
66*89c4ff92SAndroid Build Coastguard Worker return serializer::ActivationFunction::ActivationFunction_ReLu;
67*89c4ff92SAndroid Build Coastguard Worker case armnn::ActivationFunction::BoundedReLu:
68*89c4ff92SAndroid Build Coastguard Worker return serializer::ActivationFunction::ActivationFunction_BoundedReLu;
69*89c4ff92SAndroid Build Coastguard Worker case armnn::ActivationFunction::LeakyReLu:
70*89c4ff92SAndroid Build Coastguard Worker return serializer::ActivationFunction::ActivationFunction_LeakyReLu;
71*89c4ff92SAndroid Build Coastguard Worker case armnn::ActivationFunction::Abs:
72*89c4ff92SAndroid Build Coastguard Worker return serializer::ActivationFunction::ActivationFunction_Abs;
73*89c4ff92SAndroid Build Coastguard Worker case armnn::ActivationFunction::Sqrt:
74*89c4ff92SAndroid Build Coastguard Worker return serializer::ActivationFunction::ActivationFunction_Sqrt;
75*89c4ff92SAndroid Build Coastguard Worker case armnn::ActivationFunction::Square:
76*89c4ff92SAndroid Build Coastguard Worker return serializer::ActivationFunction::ActivationFunction_Square;
77*89c4ff92SAndroid Build Coastguard Worker case armnn::ActivationFunction::Elu:
78*89c4ff92SAndroid Build Coastguard Worker return serializer::ActivationFunction::ActivationFunction_Elu;
79*89c4ff92SAndroid Build Coastguard Worker case armnn::ActivationFunction::HardSwish:
80*89c4ff92SAndroid Build Coastguard Worker return serializer::ActivationFunction::ActivationFunction_HardSwish;
81*89c4ff92SAndroid Build Coastguard Worker default:
82*89c4ff92SAndroid Build Coastguard Worker return serializer::ActivationFunction::ActivationFunction_Sigmoid;
83*89c4ff92SAndroid Build Coastguard Worker }
84*89c4ff92SAndroid Build Coastguard Worker }
85*89c4ff92SAndroid Build Coastguard Worker
GetFlatBufferArgMinMaxFunction(armnn::ArgMinMaxFunction function)86*89c4ff92SAndroid Build Coastguard Worker serializer::ArgMinMaxFunction GetFlatBufferArgMinMaxFunction(armnn::ArgMinMaxFunction function)
87*89c4ff92SAndroid Build Coastguard Worker {
88*89c4ff92SAndroid Build Coastguard Worker switch (function)
89*89c4ff92SAndroid Build Coastguard Worker {
90*89c4ff92SAndroid Build Coastguard Worker case armnn::ArgMinMaxFunction::Max:
91*89c4ff92SAndroid Build Coastguard Worker return serializer::ArgMinMaxFunction::ArgMinMaxFunction_Max;
92*89c4ff92SAndroid Build Coastguard Worker case armnn::ArgMinMaxFunction::Min:
93*89c4ff92SAndroid Build Coastguard Worker default:
94*89c4ff92SAndroid Build Coastguard Worker return serializer::ArgMinMaxFunction::ArgMinMaxFunction_Min;
95*89c4ff92SAndroid Build Coastguard Worker }
96*89c4ff92SAndroid Build Coastguard Worker }
97*89c4ff92SAndroid Build Coastguard Worker
GetSerializedId(LayerGuid guid)98*89c4ff92SAndroid Build Coastguard Worker uint32_t SerializerStrategy::GetSerializedId(LayerGuid guid)
99*89c4ff92SAndroid Build Coastguard Worker {
100*89c4ff92SAndroid Build Coastguard Worker if (m_guidMap.empty())
101*89c4ff92SAndroid Build Coastguard Worker {
102*89c4ff92SAndroid Build Coastguard Worker m_guidMap.insert(std::make_pair(guid, m_layerId));
103*89c4ff92SAndroid Build Coastguard Worker }
104*89c4ff92SAndroid Build Coastguard Worker else if (m_guidMap.find(guid) == m_guidMap.end())
105*89c4ff92SAndroid Build Coastguard Worker {
106*89c4ff92SAndroid Build Coastguard Worker ++m_layerId;
107*89c4ff92SAndroid Build Coastguard Worker m_guidMap.insert(std::make_pair(guid, m_layerId));
108*89c4ff92SAndroid Build Coastguard Worker
109*89c4ff92SAndroid Build Coastguard Worker return m_layerId;
110*89c4ff92SAndroid Build Coastguard Worker }
111*89c4ff92SAndroid Build Coastguard Worker return m_guidMap[guid];
112*89c4ff92SAndroid Build Coastguard Worker }
113*89c4ff92SAndroid Build Coastguard Worker
114*89c4ff92SAndroid Build Coastguard Worker // Build FlatBuffer for Input Layer
SerializeInputLayer(const armnn::IConnectableLayer * layer,LayerBindingId id,const char * name)115*89c4ff92SAndroid Build Coastguard Worker void SerializerStrategy::SerializeInputLayer(const armnn::IConnectableLayer* layer, LayerBindingId id, const char* name)
116*89c4ff92SAndroid Build Coastguard Worker {
117*89c4ff92SAndroid Build Coastguard Worker IgnoreUnused(name);
118*89c4ff92SAndroid Build Coastguard Worker
119*89c4ff92SAndroid Build Coastguard Worker // Create FlatBuffer BaseLayer
120*89c4ff92SAndroid Build Coastguard Worker auto flatBufferInputBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Input);
121*89c4ff92SAndroid Build Coastguard Worker
122*89c4ff92SAndroid Build Coastguard Worker // Create FlatBuffer BindableBaseLayer
123*89c4ff92SAndroid Build Coastguard Worker auto flatBufferInputBindableBaseLayer = serializer::CreateBindableLayerBase(m_flatBufferBuilder,
124*89c4ff92SAndroid Build Coastguard Worker flatBufferInputBaseLayer,
125*89c4ff92SAndroid Build Coastguard Worker id);
126*89c4ff92SAndroid Build Coastguard Worker // Push layer binding id to outputIds.
127*89c4ff92SAndroid Build Coastguard Worker m_inputIds.push_back(id);
128*89c4ff92SAndroid Build Coastguard Worker
129*89c4ff92SAndroid Build Coastguard Worker // Create the FlatBuffer InputLayer
130*89c4ff92SAndroid Build Coastguard Worker auto flatBufferInputLayer = serializer::CreateInputLayer(m_flatBufferBuilder, flatBufferInputBindableBaseLayer);
131*89c4ff92SAndroid Build Coastguard Worker
132*89c4ff92SAndroid Build Coastguard Worker // Add the AnyLayer to the FlatBufferLayers
133*89c4ff92SAndroid Build Coastguard Worker CreateAnyLayer(flatBufferInputLayer.o, serializer::Layer::Layer_InputLayer);
134*89c4ff92SAndroid Build Coastguard Worker }
135*89c4ff92SAndroid Build Coastguard Worker
136*89c4ff92SAndroid Build Coastguard Worker // Build FlatBuffer for Output Layer
SerializeOutputLayer(const armnn::IConnectableLayer * layer,LayerBindingId id,const char * name)137*89c4ff92SAndroid Build Coastguard Worker void SerializerStrategy::SerializeOutputLayer(const armnn::IConnectableLayer* layer,
138*89c4ff92SAndroid Build Coastguard Worker LayerBindingId id, const char* name)
139*89c4ff92SAndroid Build Coastguard Worker {
140*89c4ff92SAndroid Build Coastguard Worker IgnoreUnused(name);
141*89c4ff92SAndroid Build Coastguard Worker
142*89c4ff92SAndroid Build Coastguard Worker // Create FlatBuffer BaseLayer
143*89c4ff92SAndroid Build Coastguard Worker auto flatBufferOutputBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Output);
144*89c4ff92SAndroid Build Coastguard Worker
145*89c4ff92SAndroid Build Coastguard Worker // Create FlatBuffer BindableBaseLayer
146*89c4ff92SAndroid Build Coastguard Worker auto flatBufferOutputBindableBaseLayer = serializer::CreateBindableLayerBase(m_flatBufferBuilder,
147*89c4ff92SAndroid Build Coastguard Worker flatBufferOutputBaseLayer,
148*89c4ff92SAndroid Build Coastguard Worker id);
149*89c4ff92SAndroid Build Coastguard Worker // Push layer binding id to outputIds.
150*89c4ff92SAndroid Build Coastguard Worker m_outputIds.push_back(id);
151*89c4ff92SAndroid Build Coastguard Worker
152*89c4ff92SAndroid Build Coastguard Worker // Create the FlatBuffer OutputLayer
153*89c4ff92SAndroid Build Coastguard Worker auto flatBufferOutputLayer = serializer::CreateOutputLayer(m_flatBufferBuilder, flatBufferOutputBindableBaseLayer);
154*89c4ff92SAndroid Build Coastguard Worker // Add the AnyLayer to the FlatBufferLayers
155*89c4ff92SAndroid Build Coastguard Worker CreateAnyLayer(flatBufferOutputLayer.o, serializer::Layer::Layer_OutputLayer);
156*89c4ff92SAndroid Build Coastguard Worker }
157*89c4ff92SAndroid Build Coastguard Worker
158*89c4ff92SAndroid Build Coastguard Worker // Build FlatBuffer for Activation Layer
SerializeActivationLayer(const armnn::IConnectableLayer * layer,const armnn::ActivationDescriptor & descriptor,const char * name)159*89c4ff92SAndroid Build Coastguard Worker void SerializerStrategy::SerializeActivationLayer(const armnn::IConnectableLayer* layer,
160*89c4ff92SAndroid Build Coastguard Worker const armnn::ActivationDescriptor& descriptor,
161*89c4ff92SAndroid Build Coastguard Worker const char* name)
162*89c4ff92SAndroid Build Coastguard Worker {
163*89c4ff92SAndroid Build Coastguard Worker IgnoreUnused(name);
164*89c4ff92SAndroid Build Coastguard Worker
165*89c4ff92SAndroid Build Coastguard Worker // Create FlatBuffer BaseLayer
166*89c4ff92SAndroid Build Coastguard Worker auto flatBufferBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Activation);
167*89c4ff92SAndroid Build Coastguard Worker
168*89c4ff92SAndroid Build Coastguard Worker // Create the FlatBuffer ActivationDescriptor
169*89c4ff92SAndroid Build Coastguard Worker auto flatBufferDescriptor = CreateActivationDescriptor(m_flatBufferBuilder,
170*89c4ff92SAndroid Build Coastguard Worker GetFlatBufferActivationFunction(descriptor.m_Function),
171*89c4ff92SAndroid Build Coastguard Worker descriptor.m_A,
172*89c4ff92SAndroid Build Coastguard Worker descriptor.m_B);
173*89c4ff92SAndroid Build Coastguard Worker
174*89c4ff92SAndroid Build Coastguard Worker // Create the FlatBuffer ActivationLayer
175*89c4ff92SAndroid Build Coastguard Worker auto flatBufferAdditionLayer = CreateActivationLayer(m_flatBufferBuilder,
176*89c4ff92SAndroid Build Coastguard Worker flatBufferBaseLayer,
177*89c4ff92SAndroid Build Coastguard Worker flatBufferDescriptor);
178*89c4ff92SAndroid Build Coastguard Worker
179*89c4ff92SAndroid Build Coastguard Worker // Add the AnyLayer to the FlatBufferLayers
180*89c4ff92SAndroid Build Coastguard Worker CreateAnyLayer(flatBufferAdditionLayer.o, serializer::Layer::Layer_ActivationLayer);
181*89c4ff92SAndroid Build Coastguard Worker }
182*89c4ff92SAndroid Build Coastguard Worker
183*89c4ff92SAndroid Build Coastguard Worker // Build FlatBuffer for Addition Layer
SerializeAdditionLayer(const armnn::IConnectableLayer * layer,const char * name)184*89c4ff92SAndroid Build Coastguard Worker void SerializerStrategy::SerializeAdditionLayer(const armnn::IConnectableLayer* layer, const char* name)
185*89c4ff92SAndroid Build Coastguard Worker {
186*89c4ff92SAndroid Build Coastguard Worker IgnoreUnused(name);
187*89c4ff92SAndroid Build Coastguard Worker
188*89c4ff92SAndroid Build Coastguard Worker // Create FlatBuffer BaseLayer
189*89c4ff92SAndroid Build Coastguard Worker auto flatBufferAdditionBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Addition);
190*89c4ff92SAndroid Build Coastguard Worker
191*89c4ff92SAndroid Build Coastguard Worker // Create the FlatBuffer AdditionLayer
192*89c4ff92SAndroid Build Coastguard Worker auto flatBufferAdditionLayer = serializer::CreateAdditionLayer(m_flatBufferBuilder, flatBufferAdditionBaseLayer);
193*89c4ff92SAndroid Build Coastguard Worker
194*89c4ff92SAndroid Build Coastguard Worker // Add the AnyLayer to the FlatBufferLayers
195*89c4ff92SAndroid Build Coastguard Worker CreateAnyLayer(flatBufferAdditionLayer.o, serializer::Layer::Layer_AdditionLayer);
196*89c4ff92SAndroid Build Coastguard Worker }
197*89c4ff92SAndroid Build Coastguard Worker
198*89c4ff92SAndroid Build Coastguard Worker // Build FlatBuffer for ArgMinMax Layer
SerializeArgMinMaxLayer(const armnn::IConnectableLayer * layer,const armnn::ArgMinMaxDescriptor & descriptor,const char * name)199*89c4ff92SAndroid Build Coastguard Worker void SerializerStrategy::SerializeArgMinMaxLayer(const armnn::IConnectableLayer *layer,
200*89c4ff92SAndroid Build Coastguard Worker const armnn::ArgMinMaxDescriptor& descriptor,
201*89c4ff92SAndroid Build Coastguard Worker const char *name)
202*89c4ff92SAndroid Build Coastguard Worker {
203*89c4ff92SAndroid Build Coastguard Worker IgnoreUnused(name);
204*89c4ff92SAndroid Build Coastguard Worker
205*89c4ff92SAndroid Build Coastguard Worker // Create FlatBuffer BaseLayer
206*89c4ff92SAndroid Build Coastguard Worker auto flatBufferBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_ArgMinMax);
207*89c4ff92SAndroid Build Coastguard Worker
208*89c4ff92SAndroid Build Coastguard Worker // Create FlatBuffer Descriptor
209*89c4ff92SAndroid Build Coastguard Worker auto flatBufferDescriptor = CreateArgMinMaxDescriptor(m_flatBufferBuilder,
210*89c4ff92SAndroid Build Coastguard Worker GetFlatBufferArgMinMaxFunction(descriptor.m_Function),
211*89c4ff92SAndroid Build Coastguard Worker descriptor.m_Axis);
212*89c4ff92SAndroid Build Coastguard Worker
213*89c4ff92SAndroid Build Coastguard Worker // Create FlatBuffer ArgMinMaxLayer
214*89c4ff92SAndroid Build Coastguard Worker auto flatBufferLayer = CreateArgMinMaxLayer(m_flatBufferBuilder,
215*89c4ff92SAndroid Build Coastguard Worker flatBufferBaseLayer,
216*89c4ff92SAndroid Build Coastguard Worker flatBufferDescriptor);
217*89c4ff92SAndroid Build Coastguard Worker
218*89c4ff92SAndroid Build Coastguard Worker CreateAnyLayer(flatBufferLayer.o, serializer::Layer::Layer_ArgMinMaxLayer);
219*89c4ff92SAndroid Build Coastguard Worker }
220*89c4ff92SAndroid Build Coastguard Worker
SerializeBatchMatMulLayer(const armnn::IConnectableLayer * layer,const armnn::BatchMatMulDescriptor & descriptor,const char * name)221*89c4ff92SAndroid Build Coastguard Worker void SerializerStrategy::SerializeBatchMatMulLayer(const armnn::IConnectableLayer* layer,
222*89c4ff92SAndroid Build Coastguard Worker const armnn::BatchMatMulDescriptor& descriptor,
223*89c4ff92SAndroid Build Coastguard Worker const char* name)
224*89c4ff92SAndroid Build Coastguard Worker {
225*89c4ff92SAndroid Build Coastguard Worker IgnoreUnused(name);
226*89c4ff92SAndroid Build Coastguard Worker
227*89c4ff92SAndroid Build Coastguard Worker // Create FlatBuffer BaseLayer
228*89c4ff92SAndroid Build Coastguard Worker auto flatBufferBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_BatchMatMul);
229*89c4ff92SAndroid Build Coastguard Worker
230*89c4ff92SAndroid Build Coastguard Worker // Create the FlatBuffer BatchMatMulDescriptor
231*89c4ff92SAndroid Build Coastguard Worker auto flatBufferDescriptor = CreateBatchMatMulDescriptor(m_flatBufferBuilder,
232*89c4ff92SAndroid Build Coastguard Worker descriptor.m_TransposeX,
233*89c4ff92SAndroid Build Coastguard Worker descriptor.m_TransposeY,
234*89c4ff92SAndroid Build Coastguard Worker descriptor.m_AdjointX,
235*89c4ff92SAndroid Build Coastguard Worker descriptor.m_AdjointY,
236*89c4ff92SAndroid Build Coastguard Worker GetFlatBufferDataLayout(descriptor.m_DataLayoutX),
237*89c4ff92SAndroid Build Coastguard Worker GetFlatBufferDataLayout(descriptor.m_DataLayoutY));
238*89c4ff92SAndroid Build Coastguard Worker
239*89c4ff92SAndroid Build Coastguard Worker // Create the FlatBuffer BatchMatMulLayer
240*89c4ff92SAndroid Build Coastguard Worker auto flatBufferBatchMatMulLayer = CreateBatchMatMulLayer(m_flatBufferBuilder,
241*89c4ff92SAndroid Build Coastguard Worker flatBufferBaseLayer,
242*89c4ff92SAndroid Build Coastguard Worker flatBufferDescriptor);
243*89c4ff92SAndroid Build Coastguard Worker
244*89c4ff92SAndroid Build Coastguard Worker // Add the AnyLayer to the FlatBufferLayers
245*89c4ff92SAndroid Build Coastguard Worker CreateAnyLayer(flatBufferBatchMatMulLayer.o, serializer::Layer::Layer_BatchMatMulLayer);
246*89c4ff92SAndroid Build Coastguard Worker }
247*89c4ff92SAndroid Build Coastguard Worker
248*89c4ff92SAndroid Build Coastguard Worker // Build FlatBuffer for BatchToSpaceNd Layer
SerializeBatchToSpaceNdLayer(const armnn::IConnectableLayer * layer,const armnn::BatchToSpaceNdDescriptor & descriptor,const char * name)249*89c4ff92SAndroid Build Coastguard Worker void SerializerStrategy::SerializeBatchToSpaceNdLayer(const armnn::IConnectableLayer* layer,
250*89c4ff92SAndroid Build Coastguard Worker const armnn::BatchToSpaceNdDescriptor& descriptor,
251*89c4ff92SAndroid Build Coastguard Worker const char* name)
252*89c4ff92SAndroid Build Coastguard Worker {
253*89c4ff92SAndroid Build Coastguard Worker IgnoreUnused(name);
254*89c4ff92SAndroid Build Coastguard Worker
255*89c4ff92SAndroid Build Coastguard Worker // Create FlatBuffer BaseLayer
256*89c4ff92SAndroid Build Coastguard Worker auto flatBufferBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_BatchToSpaceNd);
257*89c4ff92SAndroid Build Coastguard Worker
258*89c4ff92SAndroid Build Coastguard Worker std::vector<unsigned int> crops;
259*89c4ff92SAndroid Build Coastguard Worker crops.reserve(descriptor.m_Crops.size() * 2);
260*89c4ff92SAndroid Build Coastguard Worker for (auto& crop : descriptor.m_Crops)
261*89c4ff92SAndroid Build Coastguard Worker {
262*89c4ff92SAndroid Build Coastguard Worker crops.push_back(crop.first);
263*89c4ff92SAndroid Build Coastguard Worker crops.push_back(crop.second);
264*89c4ff92SAndroid Build Coastguard Worker }
265*89c4ff92SAndroid Build Coastguard Worker
266*89c4ff92SAndroid Build Coastguard Worker auto flatBufferDescriptor =
267*89c4ff92SAndroid Build Coastguard Worker CreateBatchToSpaceNdDescriptor(m_flatBufferBuilder,
268*89c4ff92SAndroid Build Coastguard Worker m_flatBufferBuilder.CreateVector(descriptor.m_BlockShape),
269*89c4ff92SAndroid Build Coastguard Worker m_flatBufferBuilder.CreateVector(crops),
270*89c4ff92SAndroid Build Coastguard Worker GetFlatBufferDataLayout(descriptor.m_DataLayout));
271*89c4ff92SAndroid Build Coastguard Worker
272*89c4ff92SAndroid Build Coastguard Worker auto flatBufferLayer = serializer::CreateBatchToSpaceNdLayer(m_flatBufferBuilder,
273*89c4ff92SAndroid Build Coastguard Worker flatBufferBaseLayer,
274*89c4ff92SAndroid Build Coastguard Worker flatBufferDescriptor);
275*89c4ff92SAndroid Build Coastguard Worker
276*89c4ff92SAndroid Build Coastguard Worker CreateAnyLayer(flatBufferLayer.o, serializer::Layer::Layer_BatchToSpaceNdLayer);
277*89c4ff92SAndroid Build Coastguard Worker }
278*89c4ff92SAndroid Build Coastguard Worker
SerializeBatchNormalizationLayer(const armnn::IConnectableLayer * layer,const armnn::BatchNormalizationDescriptor & batchNormDescriptor,const std::vector<armnn::ConstTensor> & constants,const char * name)279*89c4ff92SAndroid Build Coastguard Worker void SerializerStrategy::SerializeBatchNormalizationLayer(
280*89c4ff92SAndroid Build Coastguard Worker const armnn::IConnectableLayer* layer,
281*89c4ff92SAndroid Build Coastguard Worker const armnn::BatchNormalizationDescriptor& batchNormDescriptor,
282*89c4ff92SAndroid Build Coastguard Worker const std::vector<armnn::ConstTensor>& constants,
283*89c4ff92SAndroid Build Coastguard Worker const char* name)
284*89c4ff92SAndroid Build Coastguard Worker {
285*89c4ff92SAndroid Build Coastguard Worker IgnoreUnused(name);
286*89c4ff92SAndroid Build Coastguard Worker
287*89c4ff92SAndroid Build Coastguard Worker const armnn::ConstTensor& mean = constants[0];
288*89c4ff92SAndroid Build Coastguard Worker const armnn::ConstTensor& variance = constants[1];
289*89c4ff92SAndroid Build Coastguard Worker const armnn::ConstTensor& beta = constants[2];
290*89c4ff92SAndroid Build Coastguard Worker const armnn::ConstTensor& gamma = constants[3];
291*89c4ff92SAndroid Build Coastguard Worker
292*89c4ff92SAndroid Build Coastguard Worker auto fbBatchNormalizationBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_BatchNormalization);
293*89c4ff92SAndroid Build Coastguard Worker auto fbBatchNormalizationDescriptor = serializer::CreateBatchNormalizationDescriptor(
294*89c4ff92SAndroid Build Coastguard Worker m_flatBufferBuilder,
295*89c4ff92SAndroid Build Coastguard Worker batchNormDescriptor.m_Eps,
296*89c4ff92SAndroid Build Coastguard Worker GetFlatBufferDataLayout(batchNormDescriptor.m_DataLayout));
297*89c4ff92SAndroid Build Coastguard Worker
298*89c4ff92SAndroid Build Coastguard Worker auto fbMeanConstTensorInfo = CreateConstTensorInfo(mean);
299*89c4ff92SAndroid Build Coastguard Worker auto fbVarianceConstTensorInfo = CreateConstTensorInfo(variance);
300*89c4ff92SAndroid Build Coastguard Worker auto fbBetaConstTensorInfo = CreateConstTensorInfo(beta);
301*89c4ff92SAndroid Build Coastguard Worker auto fbGammaConstTensorInfo = CreateConstTensorInfo(gamma);
302*89c4ff92SAndroid Build Coastguard Worker auto fbBatchNormalizationLayer = serializer::CreateBatchNormalizationLayer(m_flatBufferBuilder,
303*89c4ff92SAndroid Build Coastguard Worker fbBatchNormalizationBaseLayer,
304*89c4ff92SAndroid Build Coastguard Worker fbBatchNormalizationDescriptor,
305*89c4ff92SAndroid Build Coastguard Worker fbMeanConstTensorInfo,
306*89c4ff92SAndroid Build Coastguard Worker fbVarianceConstTensorInfo,
307*89c4ff92SAndroid Build Coastguard Worker fbBetaConstTensorInfo,
308*89c4ff92SAndroid Build Coastguard Worker fbGammaConstTensorInfo);
309*89c4ff92SAndroid Build Coastguard Worker
310*89c4ff92SAndroid Build Coastguard Worker CreateAnyLayer(fbBatchNormalizationLayer.o, serializer::Layer::Layer_BatchNormalizationLayer);
311*89c4ff92SAndroid Build Coastguard Worker }
312*89c4ff92SAndroid Build Coastguard Worker
SerializeCastLayer(const armnn::IConnectableLayer * layer,const char * name)313*89c4ff92SAndroid Build Coastguard Worker void SerializerStrategy::SerializeCastLayer(const armnn::IConnectableLayer* layer,
314*89c4ff92SAndroid Build Coastguard Worker const char* name)
315*89c4ff92SAndroid Build Coastguard Worker {
316*89c4ff92SAndroid Build Coastguard Worker IgnoreUnused(name);
317*89c4ff92SAndroid Build Coastguard Worker
318*89c4ff92SAndroid Build Coastguard Worker auto fbBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Cast);
319*89c4ff92SAndroid Build Coastguard Worker auto fbCastLayer = serializer::CreateCastLayer(m_flatBufferBuilder, fbBaseLayer);
320*89c4ff92SAndroid Build Coastguard Worker CreateAnyLayer(fbCastLayer.o, serializer::Layer::Layer_CastLayer);
321*89c4ff92SAndroid Build Coastguard Worker }
322*89c4ff92SAndroid Build Coastguard Worker
SerializeChannelShuffleLayer(const armnn::IConnectableLayer * layer,const armnn::ChannelShuffleDescriptor & descriptor,const char * name)323*89c4ff92SAndroid Build Coastguard Worker void SerializerStrategy::SerializeChannelShuffleLayer(const armnn::IConnectableLayer* layer,
324*89c4ff92SAndroid Build Coastguard Worker const armnn::ChannelShuffleDescriptor& descriptor,
325*89c4ff92SAndroid Build Coastguard Worker const char* name)
326*89c4ff92SAndroid Build Coastguard Worker {
327*89c4ff92SAndroid Build Coastguard Worker IgnoreUnused(name);
328*89c4ff92SAndroid Build Coastguard Worker auto fbDescriptor = CreateChannelShuffleDescriptor(m_flatBufferBuilder,
329*89c4ff92SAndroid Build Coastguard Worker descriptor.m_Axis,
330*89c4ff92SAndroid Build Coastguard Worker descriptor.m_NumGroups);
331*89c4ff92SAndroid Build Coastguard Worker auto fbBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_ChannelShuffle);
332*89c4ff92SAndroid Build Coastguard Worker auto fbChannelShuffleLayer = serializer::CreateChannelShuffleLayer(m_flatBufferBuilder, fbBaseLayer, fbDescriptor);
333*89c4ff92SAndroid Build Coastguard Worker CreateAnyLayer(fbChannelShuffleLayer.o, serializer::Layer::Layer_ChannelShuffleLayer);
334*89c4ff92SAndroid Build Coastguard Worker }
335*89c4ff92SAndroid Build Coastguard Worker
SerializeComparisonLayer(const armnn::IConnectableLayer * layer,const armnn::ComparisonDescriptor & descriptor,const char * name)336*89c4ff92SAndroid Build Coastguard Worker void SerializerStrategy::SerializeComparisonLayer(const armnn::IConnectableLayer* layer,
337*89c4ff92SAndroid Build Coastguard Worker const armnn::ComparisonDescriptor& descriptor,
338*89c4ff92SAndroid Build Coastguard Worker const char* name)
339*89c4ff92SAndroid Build Coastguard Worker {
340*89c4ff92SAndroid Build Coastguard Worker IgnoreUnused(name);
341*89c4ff92SAndroid Build Coastguard Worker
342*89c4ff92SAndroid Build Coastguard Worker auto fbBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Comparison);
343*89c4ff92SAndroid Build Coastguard Worker auto fbDescriptor = serializer::CreateComparisonDescriptor(
344*89c4ff92SAndroid Build Coastguard Worker m_flatBufferBuilder,
345*89c4ff92SAndroid Build Coastguard Worker GetFlatBufferComparisonOperation(descriptor.m_Operation));
346*89c4ff92SAndroid Build Coastguard Worker
347*89c4ff92SAndroid Build Coastguard Worker auto fbLayer = serializer::CreateComparisonLayer(m_flatBufferBuilder, fbBaseLayer, fbDescriptor);
348*89c4ff92SAndroid Build Coastguard Worker CreateAnyLayer(fbLayer.o, serializer::Layer::Layer_ComparisonLayer);
349*89c4ff92SAndroid Build Coastguard Worker }
350*89c4ff92SAndroid Build Coastguard Worker
351*89c4ff92SAndroid Build Coastguard Worker // Build FlatBuffer for Constant Layer
SerializeConstantLayer(const armnn::IConnectableLayer * layer,const std::vector<armnn::ConstTensor> & constants,const char * name)352*89c4ff92SAndroid Build Coastguard Worker void SerializerStrategy::SerializeConstantLayer(const armnn::IConnectableLayer* layer,
353*89c4ff92SAndroid Build Coastguard Worker const std::vector<armnn::ConstTensor>& constants,
354*89c4ff92SAndroid Build Coastguard Worker const char* name)
355*89c4ff92SAndroid Build Coastguard Worker {
356*89c4ff92SAndroid Build Coastguard Worker IgnoreUnused(name);
357*89c4ff92SAndroid Build Coastguard Worker
358*89c4ff92SAndroid Build Coastguard Worker armnn::ConstTensor input = constants[0];
359*89c4ff92SAndroid Build Coastguard Worker
360*89c4ff92SAndroid Build Coastguard Worker // Create FlatBuffer BaseLayer
361*89c4ff92SAndroid Build Coastguard Worker auto flatBufferConstantBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Constant);
362*89c4ff92SAndroid Build Coastguard Worker
363*89c4ff92SAndroid Build Coastguard Worker auto flatBufferConstTensorInfo = CreateConstTensorInfo(input);
364*89c4ff92SAndroid Build Coastguard Worker
365*89c4ff92SAndroid Build Coastguard Worker // Create the FlatBuffer ConstantLayer
366*89c4ff92SAndroid Build Coastguard Worker auto flatBufferLayer = CreateConstantLayer(m_flatBufferBuilder,
367*89c4ff92SAndroid Build Coastguard Worker flatBufferConstantBaseLayer,
368*89c4ff92SAndroid Build Coastguard Worker flatBufferConstTensorInfo);
369*89c4ff92SAndroid Build Coastguard Worker
370*89c4ff92SAndroid Build Coastguard Worker // Add the AnyLayer to the FlatBufferLayers
371*89c4ff92SAndroid Build Coastguard Worker CreateAnyLayer(flatBufferLayer.o, serializer::Layer::Layer_ConstantLayer);
372*89c4ff92SAndroid Build Coastguard Worker }
373*89c4ff92SAndroid Build Coastguard Worker
374*89c4ff92SAndroid Build Coastguard Worker // Build FlatBuffer for Convolution2dLayer
SerializeConvolution2dLayer(const armnn::IConnectableLayer * layer,const armnn::Convolution2dDescriptor & descriptor,const char * name)375*89c4ff92SAndroid Build Coastguard Worker void SerializerStrategy::SerializeConvolution2dLayer(const armnn::IConnectableLayer* layer,
376*89c4ff92SAndroid Build Coastguard Worker const armnn::Convolution2dDescriptor& descriptor,
377*89c4ff92SAndroid Build Coastguard Worker const char* name)
378*89c4ff92SAndroid Build Coastguard Worker {
379*89c4ff92SAndroid Build Coastguard Worker IgnoreUnused(name);
380*89c4ff92SAndroid Build Coastguard Worker
381*89c4ff92SAndroid Build Coastguard Worker // Create FlatBuffer BaseLayer
382*89c4ff92SAndroid Build Coastguard Worker auto flatBufferBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Convolution2d);
383*89c4ff92SAndroid Build Coastguard Worker
384*89c4ff92SAndroid Build Coastguard Worker auto flatBufferDescriptor = CreateConvolution2dDescriptor(m_flatBufferBuilder,
385*89c4ff92SAndroid Build Coastguard Worker descriptor.m_PadLeft,
386*89c4ff92SAndroid Build Coastguard Worker descriptor.m_PadRight,
387*89c4ff92SAndroid Build Coastguard Worker descriptor.m_PadTop,
388*89c4ff92SAndroid Build Coastguard Worker descriptor.m_PadBottom,
389*89c4ff92SAndroid Build Coastguard Worker descriptor.m_StrideX,
390*89c4ff92SAndroid Build Coastguard Worker descriptor.m_StrideY,
391*89c4ff92SAndroid Build Coastguard Worker descriptor.m_DilationX,
392*89c4ff92SAndroid Build Coastguard Worker descriptor.m_DilationY,
393*89c4ff92SAndroid Build Coastguard Worker descriptor.m_BiasEnabled,
394*89c4ff92SAndroid Build Coastguard Worker GetFlatBufferDataLayout(descriptor.m_DataLayout));
395*89c4ff92SAndroid Build Coastguard Worker
396*89c4ff92SAndroid Build Coastguard Worker // Create the FlatBuffer Convolution2dLayer
397*89c4ff92SAndroid Build Coastguard Worker auto flatBufferLayer = CreateConvolution2dLayer(m_flatBufferBuilder,
398*89c4ff92SAndroid Build Coastguard Worker flatBufferBaseLayer,
399*89c4ff92SAndroid Build Coastguard Worker flatBufferDescriptor);
400*89c4ff92SAndroid Build Coastguard Worker
401*89c4ff92SAndroid Build Coastguard Worker // Add the AnyLayer to the FlatBufferLayers
402*89c4ff92SAndroid Build Coastguard Worker CreateAnyLayer(flatBufferLayer.o, serializer::Layer::Layer_Convolution2dLayer);
403*89c4ff92SAndroid Build Coastguard Worker }
404*89c4ff92SAndroid Build Coastguard Worker
405*89c4ff92SAndroid Build Coastguard Worker // Build FlatBuffer for Convolution3dLayer
SerializeConvolution3dLayer(const armnn::IConnectableLayer * layer,const armnn::Convolution3dDescriptor & descriptor,const char * name)406*89c4ff92SAndroid Build Coastguard Worker void SerializerStrategy::SerializeConvolution3dLayer(const armnn::IConnectableLayer* layer,
407*89c4ff92SAndroid Build Coastguard Worker const armnn::Convolution3dDescriptor& descriptor,
408*89c4ff92SAndroid Build Coastguard Worker const char* name)
409*89c4ff92SAndroid Build Coastguard Worker {
410*89c4ff92SAndroid Build Coastguard Worker IgnoreUnused(name);
411*89c4ff92SAndroid Build Coastguard Worker
412*89c4ff92SAndroid Build Coastguard Worker // Create FlatBuffer BaseLayer
413*89c4ff92SAndroid Build Coastguard Worker auto flatBufferBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Convolution3d);
414*89c4ff92SAndroid Build Coastguard Worker
415*89c4ff92SAndroid Build Coastguard Worker auto flatBufferDescriptor = CreateConvolution3dDescriptor(m_flatBufferBuilder,
416*89c4ff92SAndroid Build Coastguard Worker descriptor.m_PadLeft,
417*89c4ff92SAndroid Build Coastguard Worker descriptor.m_PadRight,
418*89c4ff92SAndroid Build Coastguard Worker descriptor.m_PadTop,
419*89c4ff92SAndroid Build Coastguard Worker descriptor.m_PadBottom,
420*89c4ff92SAndroid Build Coastguard Worker descriptor.m_PadFront,
421*89c4ff92SAndroid Build Coastguard Worker descriptor.m_PadBack,
422*89c4ff92SAndroid Build Coastguard Worker descriptor.m_StrideX,
423*89c4ff92SAndroid Build Coastguard Worker descriptor.m_StrideY,
424*89c4ff92SAndroid Build Coastguard Worker descriptor.m_StrideZ,
425*89c4ff92SAndroid Build Coastguard Worker descriptor.m_DilationX,
426*89c4ff92SAndroid Build Coastguard Worker descriptor.m_DilationY,
427*89c4ff92SAndroid Build Coastguard Worker descriptor.m_DilationZ,
428*89c4ff92SAndroid Build Coastguard Worker descriptor.m_BiasEnabled,
429*89c4ff92SAndroid Build Coastguard Worker GetFlatBufferDataLayout(descriptor.m_DataLayout));
430*89c4ff92SAndroid Build Coastguard Worker
431*89c4ff92SAndroid Build Coastguard Worker // Create the FlatBuffer Convolution3dLayer
432*89c4ff92SAndroid Build Coastguard Worker auto flatBufferLayer = CreateConvolution3dLayer(m_flatBufferBuilder,
433*89c4ff92SAndroid Build Coastguard Worker flatBufferBaseLayer,
434*89c4ff92SAndroid Build Coastguard Worker flatBufferDescriptor);
435*89c4ff92SAndroid Build Coastguard Worker
436*89c4ff92SAndroid Build Coastguard Worker // Add the AnyLayer to the FlatBufferLayers
437*89c4ff92SAndroid Build Coastguard Worker CreateAnyLayer(flatBufferLayer.o, serializer::Layer::Layer_Convolution3dLayer);
438*89c4ff92SAndroid Build Coastguard Worker }
439*89c4ff92SAndroid Build Coastguard Worker
SerializeDepthToSpaceLayer(const armnn::IConnectableLayer * layer,const armnn::DepthToSpaceDescriptor & descriptor,const char * name)440*89c4ff92SAndroid Build Coastguard Worker void SerializerStrategy::SerializeDepthToSpaceLayer(const armnn::IConnectableLayer* layer,
441*89c4ff92SAndroid Build Coastguard Worker const armnn::DepthToSpaceDescriptor& descriptor,
442*89c4ff92SAndroid Build Coastguard Worker const char* name)
443*89c4ff92SAndroid Build Coastguard Worker {
444*89c4ff92SAndroid Build Coastguard Worker IgnoreUnused(name);
445*89c4ff92SAndroid Build Coastguard Worker
446*89c4ff92SAndroid Build Coastguard Worker auto fbBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_DepthToSpace);
447*89c4ff92SAndroid Build Coastguard Worker auto fbDescriptor = CreateDepthToSpaceDescriptor(m_flatBufferBuilder,
448*89c4ff92SAndroid Build Coastguard Worker descriptor.m_BlockSize,
449*89c4ff92SAndroid Build Coastguard Worker GetFlatBufferDataLayout(descriptor.m_DataLayout));
450*89c4ff92SAndroid Build Coastguard Worker
451*89c4ff92SAndroid Build Coastguard Worker auto fbLayer = serializer::CreateDepthToSpaceLayer(m_flatBufferBuilder, fbBaseLayer, fbDescriptor);
452*89c4ff92SAndroid Build Coastguard Worker
453*89c4ff92SAndroid Build Coastguard Worker CreateAnyLayer(fbLayer.o, serializer::Layer::Layer_DepthToSpaceLayer);
454*89c4ff92SAndroid Build Coastguard Worker }
455*89c4ff92SAndroid Build Coastguard Worker
SerializeDepthwiseConvolution2dLayer(const armnn::IConnectableLayer * layer,const armnn::DepthwiseConvolution2dDescriptor & descriptor,const char * name)456*89c4ff92SAndroid Build Coastguard Worker void SerializerStrategy::SerializeDepthwiseConvolution2dLayer(const armnn::IConnectableLayer* layer,
457*89c4ff92SAndroid Build Coastguard Worker const armnn::DepthwiseConvolution2dDescriptor& descriptor,
458*89c4ff92SAndroid Build Coastguard Worker const char* name)
459*89c4ff92SAndroid Build Coastguard Worker {
460*89c4ff92SAndroid Build Coastguard Worker IgnoreUnused(name);
461*89c4ff92SAndroid Build Coastguard Worker
462*89c4ff92SAndroid Build Coastguard Worker auto fbBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_DepthwiseConvolution2d);
463*89c4ff92SAndroid Build Coastguard Worker auto fbDescriptor = CreateDepthwiseConvolution2dDescriptor(m_flatBufferBuilder,
464*89c4ff92SAndroid Build Coastguard Worker descriptor.m_PadLeft,
465*89c4ff92SAndroid Build Coastguard Worker descriptor.m_PadRight,
466*89c4ff92SAndroid Build Coastguard Worker descriptor.m_PadTop,
467*89c4ff92SAndroid Build Coastguard Worker descriptor.m_PadBottom,
468*89c4ff92SAndroid Build Coastguard Worker descriptor.m_StrideX,
469*89c4ff92SAndroid Build Coastguard Worker descriptor.m_StrideY,
470*89c4ff92SAndroid Build Coastguard Worker descriptor.m_DilationX,
471*89c4ff92SAndroid Build Coastguard Worker descriptor.m_DilationY,
472*89c4ff92SAndroid Build Coastguard Worker descriptor.m_BiasEnabled,
473*89c4ff92SAndroid Build Coastguard Worker GetFlatBufferDataLayout(descriptor.m_DataLayout));
474*89c4ff92SAndroid Build Coastguard Worker
475*89c4ff92SAndroid Build Coastguard Worker auto flatBufferLayer = CreateDepthwiseConvolution2dLayer(m_flatBufferBuilder,
476*89c4ff92SAndroid Build Coastguard Worker fbBaseLayer,
477*89c4ff92SAndroid Build Coastguard Worker fbDescriptor);
478*89c4ff92SAndroid Build Coastguard Worker
479*89c4ff92SAndroid Build Coastguard Worker CreateAnyLayer(flatBufferLayer.o, serializer::Layer::Layer_DepthwiseConvolution2dLayer);
480*89c4ff92SAndroid Build Coastguard Worker }
481*89c4ff92SAndroid Build Coastguard Worker
SerializeDequantizeLayer(const armnn::IConnectableLayer * layer,const char * name)482*89c4ff92SAndroid Build Coastguard Worker void SerializerStrategy::SerializeDequantizeLayer(const armnn::IConnectableLayer* layer,
483*89c4ff92SAndroid Build Coastguard Worker const char* name)
484*89c4ff92SAndroid Build Coastguard Worker {
485*89c4ff92SAndroid Build Coastguard Worker IgnoreUnused(name);
486*89c4ff92SAndroid Build Coastguard Worker
487*89c4ff92SAndroid Build Coastguard Worker auto fbDequantizeBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Dequantize);
488*89c4ff92SAndroid Build Coastguard Worker auto fbDequantizeLayer = serializer::CreateDequantizeLayer(m_flatBufferBuilder, fbDequantizeBaseLayer);
489*89c4ff92SAndroid Build Coastguard Worker
490*89c4ff92SAndroid Build Coastguard Worker CreateAnyLayer(fbDequantizeLayer.o, serializer::Layer::Layer_DequantizeLayer);
491*89c4ff92SAndroid Build Coastguard Worker }
492*89c4ff92SAndroid Build Coastguard Worker
SerializeDetectionPostProcessLayer(const armnn::IConnectableLayer * layer,const armnn::DetectionPostProcessDescriptor & descriptor,const std::vector<armnn::ConstTensor> & constants,const char * name)493*89c4ff92SAndroid Build Coastguard Worker void SerializerStrategy::SerializeDetectionPostProcessLayer(const armnn::IConnectableLayer* layer,
494*89c4ff92SAndroid Build Coastguard Worker const armnn::DetectionPostProcessDescriptor& descriptor,
495*89c4ff92SAndroid Build Coastguard Worker const std::vector<armnn::ConstTensor>& constants,
496*89c4ff92SAndroid Build Coastguard Worker const char* name)
497*89c4ff92SAndroid Build Coastguard Worker {
498*89c4ff92SAndroid Build Coastguard Worker IgnoreUnused(name);
499*89c4ff92SAndroid Build Coastguard Worker
500*89c4ff92SAndroid Build Coastguard Worker const armnn::ConstTensor& anchors = constants[0];
501*89c4ff92SAndroid Build Coastguard Worker
502*89c4ff92SAndroid Build Coastguard Worker auto fbBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_DetectionPostProcess);
503*89c4ff92SAndroid Build Coastguard Worker auto fbDescriptor = CreateDetectionPostProcessDescriptor(m_flatBufferBuilder,
504*89c4ff92SAndroid Build Coastguard Worker descriptor.m_MaxDetections,
505*89c4ff92SAndroid Build Coastguard Worker descriptor.m_MaxClassesPerDetection,
506*89c4ff92SAndroid Build Coastguard Worker descriptor.m_DetectionsPerClass,
507*89c4ff92SAndroid Build Coastguard Worker descriptor.m_NmsScoreThreshold,
508*89c4ff92SAndroid Build Coastguard Worker descriptor.m_NmsIouThreshold,
509*89c4ff92SAndroid Build Coastguard Worker descriptor.m_NumClasses,
510*89c4ff92SAndroid Build Coastguard Worker descriptor.m_UseRegularNms,
511*89c4ff92SAndroid Build Coastguard Worker descriptor.m_ScaleX,
512*89c4ff92SAndroid Build Coastguard Worker descriptor.m_ScaleY,
513*89c4ff92SAndroid Build Coastguard Worker descriptor.m_ScaleW,
514*89c4ff92SAndroid Build Coastguard Worker descriptor.m_ScaleH);
515*89c4ff92SAndroid Build Coastguard Worker
516*89c4ff92SAndroid Build Coastguard Worker flatbuffers::Offset<serializer::ConstTensor> fbAnchorsConstTensorInfo = CreateConstTensorInfo(anchors);
517*89c4ff92SAndroid Build Coastguard Worker
518*89c4ff92SAndroid Build Coastguard Worker auto flatBufferLayer = CreateDetectionPostProcessLayer(m_flatBufferBuilder,
519*89c4ff92SAndroid Build Coastguard Worker fbBaseLayer,
520*89c4ff92SAndroid Build Coastguard Worker fbDescriptor,
521*89c4ff92SAndroid Build Coastguard Worker fbAnchorsConstTensorInfo);
522*89c4ff92SAndroid Build Coastguard Worker
523*89c4ff92SAndroid Build Coastguard Worker CreateAnyLayer(flatBufferLayer.o, serializer::Layer::Layer_DetectionPostProcessLayer);
524*89c4ff92SAndroid Build Coastguard Worker }
525*89c4ff92SAndroid Build Coastguard Worker
SerializeDivisionLayer(const armnn::IConnectableLayer * layer,const char * name)526*89c4ff92SAndroid Build Coastguard Worker void SerializerStrategy::SerializeDivisionLayer(const armnn::IConnectableLayer* layer, const char* name)
527*89c4ff92SAndroid Build Coastguard Worker {
528*89c4ff92SAndroid Build Coastguard Worker IgnoreUnused(name);
529*89c4ff92SAndroid Build Coastguard Worker
530*89c4ff92SAndroid Build Coastguard Worker auto fbDivisionBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Division);
531*89c4ff92SAndroid Build Coastguard Worker auto fbDivisionLayer = serializer::CreateDivisionLayer(m_flatBufferBuilder, fbDivisionBaseLayer);
532*89c4ff92SAndroid Build Coastguard Worker
533*89c4ff92SAndroid Build Coastguard Worker CreateAnyLayer(fbDivisionLayer.o, serializer::Layer::Layer_DivisionLayer);
534*89c4ff92SAndroid Build Coastguard Worker }
535*89c4ff92SAndroid Build Coastguard Worker
SerializeElementwiseBinaryLayer(const armnn::IConnectableLayer * layer,const armnn::ElementwiseBinaryDescriptor & descriptor,const char * name)536*89c4ff92SAndroid Build Coastguard Worker void SerializerStrategy::SerializeElementwiseBinaryLayer(const armnn::IConnectableLayer* layer,
537*89c4ff92SAndroid Build Coastguard Worker const armnn::ElementwiseBinaryDescriptor& descriptor,
538*89c4ff92SAndroid Build Coastguard Worker const char* name)
539*89c4ff92SAndroid Build Coastguard Worker {
540*89c4ff92SAndroid Build Coastguard Worker IgnoreUnused(name);
541*89c4ff92SAndroid Build Coastguard Worker
542*89c4ff92SAndroid Build Coastguard Worker auto fbBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_ElementwiseBinary);
543*89c4ff92SAndroid Build Coastguard Worker auto fbDescriptor = serializer::CreateElementwiseBinaryDescriptor(
544*89c4ff92SAndroid Build Coastguard Worker m_flatBufferBuilder,
545*89c4ff92SAndroid Build Coastguard Worker GetFlatBufferBinaryOperation(descriptor.m_Operation));
546*89c4ff92SAndroid Build Coastguard Worker
547*89c4ff92SAndroid Build Coastguard Worker auto fbLayer = serializer::CreateElementwiseBinaryLayer(m_flatBufferBuilder, fbBaseLayer, fbDescriptor);
548*89c4ff92SAndroid Build Coastguard Worker CreateAnyLayer(fbLayer.o, serializer::Layer::Layer_ElementwiseBinaryLayer);
549*89c4ff92SAndroid Build Coastguard Worker }
550*89c4ff92SAndroid Build Coastguard Worker
SerializeElementwiseUnaryLayer(const armnn::IConnectableLayer * layer,const armnn::ElementwiseUnaryDescriptor & descriptor,const char * name)551*89c4ff92SAndroid Build Coastguard Worker void SerializerStrategy::SerializeElementwiseUnaryLayer(const armnn::IConnectableLayer* layer,
552*89c4ff92SAndroid Build Coastguard Worker const armnn::ElementwiseUnaryDescriptor& descriptor,
553*89c4ff92SAndroid Build Coastguard Worker const char* name)
554*89c4ff92SAndroid Build Coastguard Worker {
555*89c4ff92SAndroid Build Coastguard Worker IgnoreUnused(name);
556*89c4ff92SAndroid Build Coastguard Worker
557*89c4ff92SAndroid Build Coastguard Worker auto fbBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_ElementwiseUnary);
558*89c4ff92SAndroid Build Coastguard Worker auto fbDescriptor = serializer::CreateElementwiseUnaryDescriptor(
559*89c4ff92SAndroid Build Coastguard Worker m_flatBufferBuilder,
560*89c4ff92SAndroid Build Coastguard Worker GetFlatBufferUnaryOperation(descriptor.m_Operation));
561*89c4ff92SAndroid Build Coastguard Worker
562*89c4ff92SAndroid Build Coastguard Worker auto fbLayer = serializer::CreateElementwiseUnaryLayer(m_flatBufferBuilder, fbBaseLayer, fbDescriptor);
563*89c4ff92SAndroid Build Coastguard Worker CreateAnyLayer(fbLayer.o, serializer::Layer::Layer_ElementwiseUnaryLayer);
564*89c4ff92SAndroid Build Coastguard Worker }
565*89c4ff92SAndroid Build Coastguard Worker
SerializeFillLayer(const armnn::IConnectableLayer * layer,const armnn::FillDescriptor & fillDescriptor,const char * name)566*89c4ff92SAndroid Build Coastguard Worker void SerializerStrategy::SerializeFillLayer(const armnn::IConnectableLayer* layer,
567*89c4ff92SAndroid Build Coastguard Worker const armnn::FillDescriptor& fillDescriptor,
568*89c4ff92SAndroid Build Coastguard Worker const char* name)
569*89c4ff92SAndroid Build Coastguard Worker {
570*89c4ff92SAndroid Build Coastguard Worker IgnoreUnused(name);
571*89c4ff92SAndroid Build Coastguard Worker
572*89c4ff92SAndroid Build Coastguard Worker auto fbFillBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Fill);
573*89c4ff92SAndroid Build Coastguard Worker
574*89c4ff92SAndroid Build Coastguard Worker auto fbDescriptor = serializer::CreateFillDescriptor(m_flatBufferBuilder, fillDescriptor.m_Value);
575*89c4ff92SAndroid Build Coastguard Worker
576*89c4ff92SAndroid Build Coastguard Worker auto fbFillLayer = serializer::CreateFillLayer(m_flatBufferBuilder, fbFillBaseLayer, fbDescriptor);
577*89c4ff92SAndroid Build Coastguard Worker
578*89c4ff92SAndroid Build Coastguard Worker CreateAnyLayer(fbFillLayer.o, serializer::Layer::Layer_FillLayer);
579*89c4ff92SAndroid Build Coastguard Worker }
580*89c4ff92SAndroid Build Coastguard Worker
SerializeFloorLayer(const armnn::IConnectableLayer * layer,const char * name)581*89c4ff92SAndroid Build Coastguard Worker void SerializerStrategy::SerializeFloorLayer(const armnn::IConnectableLayer *layer, const char *name)
582*89c4ff92SAndroid Build Coastguard Worker {
583*89c4ff92SAndroid Build Coastguard Worker IgnoreUnused(name);
584*89c4ff92SAndroid Build Coastguard Worker
585*89c4ff92SAndroid Build Coastguard Worker auto flatBufferFloorBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Floor);
586*89c4ff92SAndroid Build Coastguard Worker auto flatBufferFloorLayer = serializer::CreateFloorLayer(m_flatBufferBuilder, flatBufferFloorBaseLayer);
587*89c4ff92SAndroid Build Coastguard Worker
588*89c4ff92SAndroid Build Coastguard Worker CreateAnyLayer(flatBufferFloorLayer.o, serializer::Layer::Layer_FloorLayer);
589*89c4ff92SAndroid Build Coastguard Worker }
590*89c4ff92SAndroid Build Coastguard Worker
SerializeGatherLayer(const armnn::IConnectableLayer * layer,const armnn::GatherDescriptor & gatherDescriptor,const char * name)591*89c4ff92SAndroid Build Coastguard Worker void SerializerStrategy::SerializeGatherLayer(const armnn::IConnectableLayer* layer,
592*89c4ff92SAndroid Build Coastguard Worker const armnn::GatherDescriptor& gatherDescriptor,
593*89c4ff92SAndroid Build Coastguard Worker const char* name)
594*89c4ff92SAndroid Build Coastguard Worker {
595*89c4ff92SAndroid Build Coastguard Worker IgnoreUnused(name);
596*89c4ff92SAndroid Build Coastguard Worker
597*89c4ff92SAndroid Build Coastguard Worker auto fbGatherDescriptor = CreateGatherDescriptor(m_flatBufferBuilder,
598*89c4ff92SAndroid Build Coastguard Worker gatherDescriptor.m_Axis);
599*89c4ff92SAndroid Build Coastguard Worker auto fbGatherBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Gather);
600*89c4ff92SAndroid Build Coastguard Worker auto flatBufferLayer = serializer::CreateGatherLayer(m_flatBufferBuilder, fbGatherBaseLayer, fbGatherDescriptor);
601*89c4ff92SAndroid Build Coastguard Worker
602*89c4ff92SAndroid Build Coastguard Worker CreateAnyLayer(flatBufferLayer.o, serializer::Layer::Layer_GatherLayer);
603*89c4ff92SAndroid Build Coastguard Worker }
604*89c4ff92SAndroid Build Coastguard Worker
SerializeGatherNdLayer(const armnn::IConnectableLayer * layer,const char * name)605*89c4ff92SAndroid Build Coastguard Worker void SerializerStrategy::SerializeGatherNdLayer(const armnn::IConnectableLayer* layer,
606*89c4ff92SAndroid Build Coastguard Worker const char* name)
607*89c4ff92SAndroid Build Coastguard Worker {
608*89c4ff92SAndroid Build Coastguard Worker IgnoreUnused(name);
609*89c4ff92SAndroid Build Coastguard Worker
610*89c4ff92SAndroid Build Coastguard Worker auto fbGatherNdBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_GatherNd);
611*89c4ff92SAndroid Build Coastguard Worker auto flatBufferLayer = serializer::CreateGatherNdLayer(m_flatBufferBuilder, fbGatherNdBaseLayer);
612*89c4ff92SAndroid Build Coastguard Worker
613*89c4ff92SAndroid Build Coastguard Worker CreateAnyLayer(flatBufferLayer.o, serializer::Layer::Layer_GatherNdLayer);
614*89c4ff92SAndroid Build Coastguard Worker }
615*89c4ff92SAndroid Build Coastguard Worker
SerializeInstanceNormalizationLayer(const armnn::IConnectableLayer * layer,const armnn::InstanceNormalizationDescriptor & instanceNormalizationDescriptor,const char * name)616*89c4ff92SAndroid Build Coastguard Worker void SerializerStrategy::SerializeInstanceNormalizationLayer(
617*89c4ff92SAndroid Build Coastguard Worker const armnn::IConnectableLayer* layer,
618*89c4ff92SAndroid Build Coastguard Worker const armnn::InstanceNormalizationDescriptor& instanceNormalizationDescriptor,
619*89c4ff92SAndroid Build Coastguard Worker const char* name)
620*89c4ff92SAndroid Build Coastguard Worker {
621*89c4ff92SAndroid Build Coastguard Worker IgnoreUnused(name);
622*89c4ff92SAndroid Build Coastguard Worker
623*89c4ff92SAndroid Build Coastguard Worker auto fbDescriptor = serializer::CreateInstanceNormalizationDescriptor(
624*89c4ff92SAndroid Build Coastguard Worker m_flatBufferBuilder,
625*89c4ff92SAndroid Build Coastguard Worker instanceNormalizationDescriptor.m_Gamma,
626*89c4ff92SAndroid Build Coastguard Worker instanceNormalizationDescriptor.m_Beta,
627*89c4ff92SAndroid Build Coastguard Worker instanceNormalizationDescriptor.m_Eps,
628*89c4ff92SAndroid Build Coastguard Worker GetFlatBufferDataLayout(instanceNormalizationDescriptor.m_DataLayout));
629*89c4ff92SAndroid Build Coastguard Worker
630*89c4ff92SAndroid Build Coastguard Worker auto fbBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_InstanceNormalization);
631*89c4ff92SAndroid Build Coastguard Worker auto fbLayer = serializer::CreateInstanceNormalizationLayer(m_flatBufferBuilder, fbBaseLayer, fbDescriptor);
632*89c4ff92SAndroid Build Coastguard Worker
633*89c4ff92SAndroid Build Coastguard Worker CreateAnyLayer(fbLayer.o, serializer::Layer::Layer_InstanceNormalizationLayer);
634*89c4ff92SAndroid Build Coastguard Worker }
635*89c4ff92SAndroid Build Coastguard Worker
SerializeL2NormalizationLayer(const armnn::IConnectableLayer * layer,const armnn::L2NormalizationDescriptor & l2NormalizationDescriptor,const char * name)636*89c4ff92SAndroid Build Coastguard Worker void SerializerStrategy::SerializeL2NormalizationLayer(const armnn::IConnectableLayer* layer,
637*89c4ff92SAndroid Build Coastguard Worker const armnn::L2NormalizationDescriptor& l2NormalizationDescriptor,
638*89c4ff92SAndroid Build Coastguard Worker const char* name)
639*89c4ff92SAndroid Build Coastguard Worker {
640*89c4ff92SAndroid Build Coastguard Worker IgnoreUnused(name);
641*89c4ff92SAndroid Build Coastguard Worker
642*89c4ff92SAndroid Build Coastguard Worker // Create FlatBuffer BaseLayer
643*89c4ff92SAndroid Build Coastguard Worker auto fbBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_L2Normalization);
644*89c4ff92SAndroid Build Coastguard Worker
645*89c4ff92SAndroid Build Coastguard Worker // Create the FlatBuffer L2Normalization Descriptor
646*89c4ff92SAndroid Build Coastguard Worker auto fbDescriptor = serializer::CreateL2NormalizationDescriptor(
647*89c4ff92SAndroid Build Coastguard Worker m_flatBufferBuilder,
648*89c4ff92SAndroid Build Coastguard Worker GetFlatBufferDataLayout(l2NormalizationDescriptor.m_DataLayout),
649*89c4ff92SAndroid Build Coastguard Worker l2NormalizationDescriptor.m_Eps);
650*89c4ff92SAndroid Build Coastguard Worker
651*89c4ff92SAndroid Build Coastguard Worker // Create FlatBuffer layer
652*89c4ff92SAndroid Build Coastguard Worker auto fbLayer = serializer::CreateL2NormalizationLayer(m_flatBufferBuilder, fbBaseLayer, fbDescriptor);
653*89c4ff92SAndroid Build Coastguard Worker
654*89c4ff92SAndroid Build Coastguard Worker CreateAnyLayer(fbLayer.o, serializer::Layer::Layer_L2NormalizationLayer);
655*89c4ff92SAndroid Build Coastguard Worker }
656*89c4ff92SAndroid Build Coastguard Worker
SerializeLogicalBinaryLayer(const armnn::IConnectableLayer * layer,const armnn::LogicalBinaryDescriptor & descriptor,const char * name)657*89c4ff92SAndroid Build Coastguard Worker void SerializerStrategy::SerializeLogicalBinaryLayer(const armnn::IConnectableLayer* layer,
658*89c4ff92SAndroid Build Coastguard Worker const armnn::LogicalBinaryDescriptor& descriptor,
659*89c4ff92SAndroid Build Coastguard Worker const char* name)
660*89c4ff92SAndroid Build Coastguard Worker {
661*89c4ff92SAndroid Build Coastguard Worker IgnoreUnused(name);
662*89c4ff92SAndroid Build Coastguard Worker
663*89c4ff92SAndroid Build Coastguard Worker auto fbBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_LogicalBinary);
664*89c4ff92SAndroid Build Coastguard Worker auto fbDescriptor = serializer::CreateLogicalBinaryDescriptor(
665*89c4ff92SAndroid Build Coastguard Worker m_flatBufferBuilder,
666*89c4ff92SAndroid Build Coastguard Worker GetFlatBufferLogicalBinaryOperation(descriptor.m_Operation));
667*89c4ff92SAndroid Build Coastguard Worker
668*89c4ff92SAndroid Build Coastguard Worker auto fbLayer = serializer::CreateLogicalBinaryLayer(m_flatBufferBuilder, fbBaseLayer, fbDescriptor);
669*89c4ff92SAndroid Build Coastguard Worker CreateAnyLayer(fbLayer.o, serializer::Layer::Layer_LogicalBinaryLayer);
670*89c4ff92SAndroid Build Coastguard Worker }
671*89c4ff92SAndroid Build Coastguard Worker
SerializeLogSoftmaxLayer(const armnn::IConnectableLayer * layer,const armnn::LogSoftmaxDescriptor & logSoftmaxDescriptor,const char * name)672*89c4ff92SAndroid Build Coastguard Worker void SerializerStrategy::SerializeLogSoftmaxLayer(const armnn::IConnectableLayer* layer,
673*89c4ff92SAndroid Build Coastguard Worker const armnn::LogSoftmaxDescriptor& logSoftmaxDescriptor,
674*89c4ff92SAndroid Build Coastguard Worker const char* name)
675*89c4ff92SAndroid Build Coastguard Worker {
676*89c4ff92SAndroid Build Coastguard Worker IgnoreUnused(name);
677*89c4ff92SAndroid Build Coastguard Worker
678*89c4ff92SAndroid Build Coastguard Worker // Create FlatBuffer BaseLayer
679*89c4ff92SAndroid Build Coastguard Worker auto flatBufferLogSoftmaxBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_LogSoftmax);
680*89c4ff92SAndroid Build Coastguard Worker
681*89c4ff92SAndroid Build Coastguard Worker // Create the FlatBuffer LogSoftmaxDescriptor
682*89c4ff92SAndroid Build Coastguard Worker auto flatBufferLogSoftmaxDesc =
683*89c4ff92SAndroid Build Coastguard Worker serializer::CreateLogSoftmaxDescriptor(m_flatBufferBuilder,
684*89c4ff92SAndroid Build Coastguard Worker logSoftmaxDescriptor.m_Beta,
685*89c4ff92SAndroid Build Coastguard Worker logSoftmaxDescriptor.m_Axis);
686*89c4ff92SAndroid Build Coastguard Worker
687*89c4ff92SAndroid Build Coastguard Worker // Create the FlatBuffer LogSoftmaxLayer
688*89c4ff92SAndroid Build Coastguard Worker auto flatBufferLogSoftmaxLayer =
689*89c4ff92SAndroid Build Coastguard Worker serializer::CreateLogSoftmaxLayer(m_flatBufferBuilder,
690*89c4ff92SAndroid Build Coastguard Worker flatBufferLogSoftmaxBaseLayer,
691*89c4ff92SAndroid Build Coastguard Worker flatBufferLogSoftmaxDesc);
692*89c4ff92SAndroid Build Coastguard Worker
693*89c4ff92SAndroid Build Coastguard Worker CreateAnyLayer(flatBufferLogSoftmaxLayer.o, serializer::Layer::Layer_LogSoftmaxLayer);
694*89c4ff92SAndroid Build Coastguard Worker }
695*89c4ff92SAndroid Build Coastguard Worker
SerializeLstmLayer(const armnn::IConnectableLayer * layer,const armnn::LstmDescriptor & descriptor,const std::vector<armnn::ConstTensor> & constants,const char * name)696*89c4ff92SAndroid Build Coastguard Worker void SerializerStrategy::SerializeLstmLayer(const armnn::IConnectableLayer* layer,
697*89c4ff92SAndroid Build Coastguard Worker const armnn::LstmDescriptor& descriptor,
698*89c4ff92SAndroid Build Coastguard Worker const std::vector<armnn::ConstTensor>& constants,
699*89c4ff92SAndroid Build Coastguard Worker const char* name)
700*89c4ff92SAndroid Build Coastguard Worker {
701*89c4ff92SAndroid Build Coastguard Worker IgnoreUnused(name);
702*89c4ff92SAndroid Build Coastguard Worker
703*89c4ff92SAndroid Build Coastguard Worker auto fbLstmBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Lstm);
704*89c4ff92SAndroid Build Coastguard Worker
705*89c4ff92SAndroid Build Coastguard Worker auto fbLstmDescriptor = serializer::CreateLstmDescriptor(
706*89c4ff92SAndroid Build Coastguard Worker m_flatBufferBuilder,
707*89c4ff92SAndroid Build Coastguard Worker descriptor.m_ActivationFunc,
708*89c4ff92SAndroid Build Coastguard Worker descriptor.m_ClippingThresCell,
709*89c4ff92SAndroid Build Coastguard Worker descriptor.m_ClippingThresProj,
710*89c4ff92SAndroid Build Coastguard Worker descriptor.m_CifgEnabled,
711*89c4ff92SAndroid Build Coastguard Worker descriptor.m_PeepholeEnabled,
712*89c4ff92SAndroid Build Coastguard Worker descriptor.m_ProjectionEnabled,
713*89c4ff92SAndroid Build Coastguard Worker descriptor.m_LayerNormEnabled);
714*89c4ff92SAndroid Build Coastguard Worker
715*89c4ff92SAndroid Build Coastguard Worker // Index for constants vector
716*89c4ff92SAndroid Build Coastguard Worker std::size_t i = 0;
717*89c4ff92SAndroid Build Coastguard Worker
718*89c4ff92SAndroid Build Coastguard Worker // Get mandatory/basic input parameters
719*89c4ff92SAndroid Build Coastguard Worker auto inputToForgetWeights = CreateConstTensorInfo(constants[i++]); //InputToForgetWeights
720*89c4ff92SAndroid Build Coastguard Worker auto inputToCellWeights = CreateConstTensorInfo(constants[i++]); //InputToCellWeights
721*89c4ff92SAndroid Build Coastguard Worker auto inputToOutputWeights = CreateConstTensorInfo(constants[i++]); //InputToOutputWeights
722*89c4ff92SAndroid Build Coastguard Worker auto recurrentToForgetWeights = CreateConstTensorInfo(constants[i++]); //RecurrentToForgetWeights
723*89c4ff92SAndroid Build Coastguard Worker auto recurrentToCellWeights = CreateConstTensorInfo(constants[i++]); //RecurrentToCellWeights
724*89c4ff92SAndroid Build Coastguard Worker auto recurrentToOutputWeights = CreateConstTensorInfo(constants[i++]); //RecurrentToOutputWeights
725*89c4ff92SAndroid Build Coastguard Worker auto forgetGateBias = CreateConstTensorInfo(constants[i++]); //ForgetGateBias
726*89c4ff92SAndroid Build Coastguard Worker auto cellBias = CreateConstTensorInfo(constants[i++]); //CellBias
727*89c4ff92SAndroid Build Coastguard Worker auto outputGateBias = CreateConstTensorInfo(constants[i++]); //OutputGateBias
728*89c4ff92SAndroid Build Coastguard Worker
729*89c4ff92SAndroid Build Coastguard Worker
730*89c4ff92SAndroid Build Coastguard Worker
731*89c4ff92SAndroid Build Coastguard Worker //Define optional parameters, these will be set depending on configuration in Lstm descriptor
732*89c4ff92SAndroid Build Coastguard Worker flatbuffers::Offset<serializer::ConstTensor> inputToInputWeights;
733*89c4ff92SAndroid Build Coastguard Worker flatbuffers::Offset<serializer::ConstTensor> recurrentToInputWeights;
734*89c4ff92SAndroid Build Coastguard Worker flatbuffers::Offset<serializer::ConstTensor> cellToInputWeights;
735*89c4ff92SAndroid Build Coastguard Worker flatbuffers::Offset<serializer::ConstTensor> inputGateBias;
736*89c4ff92SAndroid Build Coastguard Worker flatbuffers::Offset<serializer::ConstTensor> projectionWeights;
737*89c4ff92SAndroid Build Coastguard Worker flatbuffers::Offset<serializer::ConstTensor> projectionBias;
738*89c4ff92SAndroid Build Coastguard Worker flatbuffers::Offset<serializer::ConstTensor> cellToForgetWeights;
739*89c4ff92SAndroid Build Coastguard Worker flatbuffers::Offset<serializer::ConstTensor> cellToOutputWeights;
740*89c4ff92SAndroid Build Coastguard Worker flatbuffers::Offset<serializer::ConstTensor> inputLayerNormWeights;
741*89c4ff92SAndroid Build Coastguard Worker flatbuffers::Offset<serializer::ConstTensor> forgetLayerNormWeights;
742*89c4ff92SAndroid Build Coastguard Worker flatbuffers::Offset<serializer::ConstTensor> cellLayerNormWeights;
743*89c4ff92SAndroid Build Coastguard Worker flatbuffers::Offset<serializer::ConstTensor> outputLayerNormWeights;
744*89c4ff92SAndroid Build Coastguard Worker
745*89c4ff92SAndroid Build Coastguard Worker if (!descriptor.m_CifgEnabled)
746*89c4ff92SAndroid Build Coastguard Worker {
747*89c4ff92SAndroid Build Coastguard Worker inputToInputWeights = CreateConstTensorInfo(constants[i++]); //InputToInputWeights
748*89c4ff92SAndroid Build Coastguard Worker recurrentToInputWeights = CreateConstTensorInfo(constants[i++]); //RecurrentToInputWeights
749*89c4ff92SAndroid Build Coastguard Worker inputGateBias = CreateConstTensorInfo(constants[i++]); //InputGateBias
750*89c4ff92SAndroid Build Coastguard Worker }
751*89c4ff92SAndroid Build Coastguard Worker
752*89c4ff92SAndroid Build Coastguard Worker if (descriptor.m_PeepholeEnabled)
753*89c4ff92SAndroid Build Coastguard Worker {
754*89c4ff92SAndroid Build Coastguard Worker if (!descriptor.m_CifgEnabled)
755*89c4ff92SAndroid Build Coastguard Worker {
756*89c4ff92SAndroid Build Coastguard Worker cellToInputWeights = CreateConstTensorInfo(constants[i++]); //CellToInputWeights
757*89c4ff92SAndroid Build Coastguard Worker }
758*89c4ff92SAndroid Build Coastguard Worker cellToForgetWeights = CreateConstTensorInfo(constants[i++]); //CellToForgetWeights
759*89c4ff92SAndroid Build Coastguard Worker cellToOutputWeights = CreateConstTensorInfo(constants[i++]); //CellToOutputWeights
760*89c4ff92SAndroid Build Coastguard Worker }
761*89c4ff92SAndroid Build Coastguard Worker
762*89c4ff92SAndroid Build Coastguard Worker if (descriptor.m_ProjectionEnabled)
763*89c4ff92SAndroid Build Coastguard Worker {
764*89c4ff92SAndroid Build Coastguard Worker projectionWeights = CreateConstTensorInfo(constants[i++]); //ProjectionWeights
765*89c4ff92SAndroid Build Coastguard Worker projectionBias = CreateConstTensorInfo(constants[i++]); //ProjectionBias
766*89c4ff92SAndroid Build Coastguard Worker }
767*89c4ff92SAndroid Build Coastguard Worker
768*89c4ff92SAndroid Build Coastguard Worker if (descriptor.m_LayerNormEnabled)
769*89c4ff92SAndroid Build Coastguard Worker {
770*89c4ff92SAndroid Build Coastguard Worker if (!descriptor.m_CifgEnabled)
771*89c4ff92SAndroid Build Coastguard Worker {
772*89c4ff92SAndroid Build Coastguard Worker inputLayerNormWeights = CreateConstTensorInfo(constants[i++]); //InputLayerNormWeights
773*89c4ff92SAndroid Build Coastguard Worker }
774*89c4ff92SAndroid Build Coastguard Worker forgetLayerNormWeights = CreateConstTensorInfo(constants[i++]); //ForgetLayerNormWeights
775*89c4ff92SAndroid Build Coastguard Worker cellLayerNormWeights = CreateConstTensorInfo(constants[i++]); //CellLayerNormWeights
776*89c4ff92SAndroid Build Coastguard Worker outputLayerNormWeights = CreateConstTensorInfo(constants[i++]); //OutputLayerNormWeights
777*89c4ff92SAndroid Build Coastguard Worker }
778*89c4ff92SAndroid Build Coastguard Worker
779*89c4ff92SAndroid Build Coastguard Worker auto fbLstmParams = serializer::CreateLstmInputParams(
780*89c4ff92SAndroid Build Coastguard Worker m_flatBufferBuilder,
781*89c4ff92SAndroid Build Coastguard Worker inputToForgetWeights,
782*89c4ff92SAndroid Build Coastguard Worker inputToCellWeights,
783*89c4ff92SAndroid Build Coastguard Worker inputToOutputWeights,
784*89c4ff92SAndroid Build Coastguard Worker recurrentToForgetWeights,
785*89c4ff92SAndroid Build Coastguard Worker recurrentToCellWeights,
786*89c4ff92SAndroid Build Coastguard Worker recurrentToOutputWeights,
787*89c4ff92SAndroid Build Coastguard Worker forgetGateBias,
788*89c4ff92SAndroid Build Coastguard Worker cellBias,
789*89c4ff92SAndroid Build Coastguard Worker outputGateBias,
790*89c4ff92SAndroid Build Coastguard Worker inputToInputWeights,
791*89c4ff92SAndroid Build Coastguard Worker recurrentToInputWeights,
792*89c4ff92SAndroid Build Coastguard Worker cellToInputWeights,
793*89c4ff92SAndroid Build Coastguard Worker inputGateBias,
794*89c4ff92SAndroid Build Coastguard Worker projectionWeights,
795*89c4ff92SAndroid Build Coastguard Worker projectionBias,
796*89c4ff92SAndroid Build Coastguard Worker cellToForgetWeights,
797*89c4ff92SAndroid Build Coastguard Worker cellToOutputWeights,
798*89c4ff92SAndroid Build Coastguard Worker inputLayerNormWeights,
799*89c4ff92SAndroid Build Coastguard Worker forgetLayerNormWeights,
800*89c4ff92SAndroid Build Coastguard Worker cellLayerNormWeights,
801*89c4ff92SAndroid Build Coastguard Worker outputLayerNormWeights);
802*89c4ff92SAndroid Build Coastguard Worker
803*89c4ff92SAndroid Build Coastguard Worker auto fbLstmLayer = serializer::CreateLstmLayer(
804*89c4ff92SAndroid Build Coastguard Worker m_flatBufferBuilder,
805*89c4ff92SAndroid Build Coastguard Worker fbLstmBaseLayer,
806*89c4ff92SAndroid Build Coastguard Worker fbLstmDescriptor,
807*89c4ff92SAndroid Build Coastguard Worker fbLstmParams);
808*89c4ff92SAndroid Build Coastguard Worker
809*89c4ff92SAndroid Build Coastguard Worker CreateAnyLayer(fbLstmLayer.o, serializer::Layer::Layer_LstmLayer);
810*89c4ff92SAndroid Build Coastguard Worker }
811*89c4ff92SAndroid Build Coastguard Worker
SerializeMaximumLayer(const armnn::IConnectableLayer * layer,const char * name)812*89c4ff92SAndroid Build Coastguard Worker void SerializerStrategy::SerializeMaximumLayer(const armnn::IConnectableLayer* layer, const char* name)
813*89c4ff92SAndroid Build Coastguard Worker {
814*89c4ff92SAndroid Build Coastguard Worker IgnoreUnused(name);
815*89c4ff92SAndroid Build Coastguard Worker
816*89c4ff92SAndroid Build Coastguard Worker auto fbMaximumBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Maximum);
817*89c4ff92SAndroid Build Coastguard Worker auto fbMaximumLayer = serializer::CreateMaximumLayer(m_flatBufferBuilder, fbMaximumBaseLayer);
818*89c4ff92SAndroid Build Coastguard Worker
819*89c4ff92SAndroid Build Coastguard Worker CreateAnyLayer(fbMaximumLayer.o, serializer::Layer::Layer_MaximumLayer);
820*89c4ff92SAndroid Build Coastguard Worker }
821*89c4ff92SAndroid Build Coastguard Worker
SerializeMeanLayer(const armnn::IConnectableLayer * layer,const armnn::MeanDescriptor & descriptor,const char * name)822*89c4ff92SAndroid Build Coastguard Worker void SerializerStrategy::SerializeMeanLayer(const armnn::IConnectableLayer* layer,
823*89c4ff92SAndroid Build Coastguard Worker const armnn::MeanDescriptor& descriptor,
824*89c4ff92SAndroid Build Coastguard Worker const char* name)
825*89c4ff92SAndroid Build Coastguard Worker {
826*89c4ff92SAndroid Build Coastguard Worker IgnoreUnused(name);
827*89c4ff92SAndroid Build Coastguard Worker
828*89c4ff92SAndroid Build Coastguard Worker auto fbMeanBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Mean);
829*89c4ff92SAndroid Build Coastguard Worker auto fbMeanDescriptor = serializer::CreateMeanDescriptor(m_flatBufferBuilder,
830*89c4ff92SAndroid Build Coastguard Worker m_flatBufferBuilder.CreateVector(descriptor.m_Axis),
831*89c4ff92SAndroid Build Coastguard Worker descriptor.m_KeepDims);
832*89c4ff92SAndroid Build Coastguard Worker
833*89c4ff92SAndroid Build Coastguard Worker auto fbMeanLayer = serializer::CreateMeanLayer(m_flatBufferBuilder,
834*89c4ff92SAndroid Build Coastguard Worker fbMeanBaseLayer,
835*89c4ff92SAndroid Build Coastguard Worker fbMeanDescriptor);
836*89c4ff92SAndroid Build Coastguard Worker
837*89c4ff92SAndroid Build Coastguard Worker CreateAnyLayer(fbMeanLayer.o, serializer::Layer::Layer_MeanLayer);
838*89c4ff92SAndroid Build Coastguard Worker }
839*89c4ff92SAndroid Build Coastguard Worker
SerializeMinimumLayer(const armnn::IConnectableLayer * layer,const char * name)840*89c4ff92SAndroid Build Coastguard Worker void SerializerStrategy::SerializeMinimumLayer(const armnn::IConnectableLayer* layer, const char* name)
841*89c4ff92SAndroid Build Coastguard Worker {
842*89c4ff92SAndroid Build Coastguard Worker IgnoreUnused(name);
843*89c4ff92SAndroid Build Coastguard Worker
844*89c4ff92SAndroid Build Coastguard Worker auto fbMinimumBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Minimum);
845*89c4ff92SAndroid Build Coastguard Worker auto fbMinimumLayer = serializer::CreateMinimumLayer(m_flatBufferBuilder, fbMinimumBaseLayer);
846*89c4ff92SAndroid Build Coastguard Worker
847*89c4ff92SAndroid Build Coastguard Worker CreateAnyLayer(fbMinimumLayer.o, serializer::Layer::Layer_MinimumLayer);
848*89c4ff92SAndroid Build Coastguard Worker }
849*89c4ff92SAndroid Build Coastguard Worker
SerializeMergeLayer(const armnn::IConnectableLayer * layer,const char * name)850*89c4ff92SAndroid Build Coastguard Worker void SerializerStrategy::SerializeMergeLayer(const armnn::IConnectableLayer* layer, const char* name)
851*89c4ff92SAndroid Build Coastguard Worker {
852*89c4ff92SAndroid Build Coastguard Worker IgnoreUnused(name);
853*89c4ff92SAndroid Build Coastguard Worker
854*89c4ff92SAndroid Build Coastguard Worker auto fbMergeBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Merge);
855*89c4ff92SAndroid Build Coastguard Worker auto fbMergeLayer = serializer::CreateMergeLayer(m_flatBufferBuilder, fbMergeBaseLayer);
856*89c4ff92SAndroid Build Coastguard Worker
857*89c4ff92SAndroid Build Coastguard Worker CreateAnyLayer(fbMergeLayer.o, serializer::Layer::Layer_MergeLayer);
858*89c4ff92SAndroid Build Coastguard Worker }
859*89c4ff92SAndroid Build Coastguard Worker
SerializeConcatLayer(const armnn::IConnectableLayer * layer,const armnn::ConcatDescriptor & concatDescriptor,const char * name)860*89c4ff92SAndroid Build Coastguard Worker void SerializerStrategy::SerializeConcatLayer(const armnn::IConnectableLayer* layer,
861*89c4ff92SAndroid Build Coastguard Worker const armnn::ConcatDescriptor& concatDescriptor,
862*89c4ff92SAndroid Build Coastguard Worker const char* name)
863*89c4ff92SAndroid Build Coastguard Worker {
864*89c4ff92SAndroid Build Coastguard Worker IgnoreUnused(name);
865*89c4ff92SAndroid Build Coastguard Worker
866*89c4ff92SAndroid Build Coastguard Worker auto flatBufferConcatBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Concat);
867*89c4ff92SAndroid Build Coastguard Worker
868*89c4ff92SAndroid Build Coastguard Worker std::vector<flatbuffers::Offset<UintVector>> views;
869*89c4ff92SAndroid Build Coastguard Worker for (unsigned int v = 0; v < concatDescriptor.GetNumViews(); ++v)
870*89c4ff92SAndroid Build Coastguard Worker {
871*89c4ff92SAndroid Build Coastguard Worker const uint32_t* origin = concatDescriptor.GetViewOrigin(v);
872*89c4ff92SAndroid Build Coastguard Worker std::vector<uint32_t> origins;
873*89c4ff92SAndroid Build Coastguard Worker for (unsigned int d = 0; d < concatDescriptor.GetNumDimensions(); ++d)
874*89c4ff92SAndroid Build Coastguard Worker {
875*89c4ff92SAndroid Build Coastguard Worker origins.push_back(origin[d]);
876*89c4ff92SAndroid Build Coastguard Worker }
877*89c4ff92SAndroid Build Coastguard Worker auto view = m_flatBufferBuilder.CreateVector(origins);
878*89c4ff92SAndroid Build Coastguard Worker auto uintVector = CreateUintVector(m_flatBufferBuilder, view);
879*89c4ff92SAndroid Build Coastguard Worker views.push_back(uintVector);
880*89c4ff92SAndroid Build Coastguard Worker }
881*89c4ff92SAndroid Build Coastguard Worker
882*89c4ff92SAndroid Build Coastguard Worker auto flatBufferConcatDescriptor = CreateOriginsDescriptor(m_flatBufferBuilder,
883*89c4ff92SAndroid Build Coastguard Worker concatDescriptor.GetConcatAxis(),
884*89c4ff92SAndroid Build Coastguard Worker concatDescriptor.GetNumViews(),
885*89c4ff92SAndroid Build Coastguard Worker concatDescriptor.GetNumDimensions(),
886*89c4ff92SAndroid Build Coastguard Worker m_flatBufferBuilder.CreateVector(views));
887*89c4ff92SAndroid Build Coastguard Worker
888*89c4ff92SAndroid Build Coastguard Worker auto flatBufferLayer = CreateConcatLayer(m_flatBufferBuilder,
889*89c4ff92SAndroid Build Coastguard Worker flatBufferConcatBaseLayer,
890*89c4ff92SAndroid Build Coastguard Worker flatBufferConcatDescriptor);
891*89c4ff92SAndroid Build Coastguard Worker
892*89c4ff92SAndroid Build Coastguard Worker CreateAnyLayer(flatBufferLayer.o, serializer::Layer::Layer_ConcatLayer);
893*89c4ff92SAndroid Build Coastguard Worker }
894*89c4ff92SAndroid Build Coastguard Worker
SerializeMultiplicationLayer(const armnn::IConnectableLayer * layer,const char * name)895*89c4ff92SAndroid Build Coastguard Worker void SerializerStrategy::SerializeMultiplicationLayer(const armnn::IConnectableLayer* layer, const char* name)
896*89c4ff92SAndroid Build Coastguard Worker {
897*89c4ff92SAndroid Build Coastguard Worker IgnoreUnused(name);
898*89c4ff92SAndroid Build Coastguard Worker
899*89c4ff92SAndroid Build Coastguard Worker auto fbMultiplicationBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Multiplication);
900*89c4ff92SAndroid Build Coastguard Worker auto fbMultiplicationLayer = serializer::CreateMultiplicationLayer(m_flatBufferBuilder,
901*89c4ff92SAndroid Build Coastguard Worker fbMultiplicationBaseLayer);
902*89c4ff92SAndroid Build Coastguard Worker
903*89c4ff92SAndroid Build Coastguard Worker CreateAnyLayer(fbMultiplicationLayer.o, serializer::Layer::Layer_MultiplicationLayer);
904*89c4ff92SAndroid Build Coastguard Worker }
905*89c4ff92SAndroid Build Coastguard Worker
SerializePadLayer(const armnn::IConnectableLayer * layer,const armnn::PadDescriptor & padDescriptor,const char * name)906*89c4ff92SAndroid Build Coastguard Worker void SerializerStrategy::SerializePadLayer(const armnn::IConnectableLayer* layer,
907*89c4ff92SAndroid Build Coastguard Worker const armnn::PadDescriptor& padDescriptor,
908*89c4ff92SAndroid Build Coastguard Worker const char* name)
909*89c4ff92SAndroid Build Coastguard Worker {
910*89c4ff92SAndroid Build Coastguard Worker IgnoreUnused(name);
911*89c4ff92SAndroid Build Coastguard Worker
912*89c4ff92SAndroid Build Coastguard Worker auto flatBufferBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Pad);
913*89c4ff92SAndroid Build Coastguard Worker
914*89c4ff92SAndroid Build Coastguard Worker std::vector<unsigned int> padList;
915*89c4ff92SAndroid Build Coastguard Worker for (auto& p: padDescriptor.m_PadList)
916*89c4ff92SAndroid Build Coastguard Worker {
917*89c4ff92SAndroid Build Coastguard Worker padList.push_back(p.first);
918*89c4ff92SAndroid Build Coastguard Worker padList.push_back(p.second);
919*89c4ff92SAndroid Build Coastguard Worker }
920*89c4ff92SAndroid Build Coastguard Worker
921*89c4ff92SAndroid Build Coastguard Worker auto flatBufferPadDesc = serializer::CreatePadDescriptor(m_flatBufferBuilder,
922*89c4ff92SAndroid Build Coastguard Worker m_flatBufferBuilder.CreateVector(padList),
923*89c4ff92SAndroid Build Coastguard Worker padDescriptor.m_PadValue,
924*89c4ff92SAndroid Build Coastguard Worker GetFlatBufferPaddingMode(padDescriptor.m_PaddingMode));
925*89c4ff92SAndroid Build Coastguard Worker
926*89c4ff92SAndroid Build Coastguard Worker auto flatBufferPadLayer = serializer::CreatePadLayer(m_flatBufferBuilder,
927*89c4ff92SAndroid Build Coastguard Worker flatBufferBaseLayer,
928*89c4ff92SAndroid Build Coastguard Worker flatBufferPadDesc);
929*89c4ff92SAndroid Build Coastguard Worker
930*89c4ff92SAndroid Build Coastguard Worker CreateAnyLayer(flatBufferPadLayer.o, serializer::Layer::Layer_PadLayer);
931*89c4ff92SAndroid Build Coastguard Worker }
932*89c4ff92SAndroid Build Coastguard Worker
SerializePermuteLayer(const armnn::IConnectableLayer * layer,const armnn::PermuteDescriptor & permuteDescriptor,const char * name)933*89c4ff92SAndroid Build Coastguard Worker void SerializerStrategy::SerializePermuteLayer(const armnn::IConnectableLayer* layer,
934*89c4ff92SAndroid Build Coastguard Worker const armnn::PermuteDescriptor& permuteDescriptor,
935*89c4ff92SAndroid Build Coastguard Worker const char* name)
936*89c4ff92SAndroid Build Coastguard Worker {
937*89c4ff92SAndroid Build Coastguard Worker IgnoreUnused(name);
938*89c4ff92SAndroid Build Coastguard Worker
939*89c4ff92SAndroid Build Coastguard Worker // Create FlatBuffer BaseLayer
940*89c4ff92SAndroid Build Coastguard Worker auto flatBufferPermuteBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Permute);
941*89c4ff92SAndroid Build Coastguard Worker
942*89c4ff92SAndroid Build Coastguard Worker std::vector<unsigned int> dimMappings;
943*89c4ff92SAndroid Build Coastguard Worker for (unsigned int i=0; i<permuteDescriptor.m_DimMappings.GetSize(); ++i)
944*89c4ff92SAndroid Build Coastguard Worker {
945*89c4ff92SAndroid Build Coastguard Worker dimMappings.push_back(permuteDescriptor.m_DimMappings[i]);
946*89c4ff92SAndroid Build Coastguard Worker }
947*89c4ff92SAndroid Build Coastguard Worker
948*89c4ff92SAndroid Build Coastguard Worker auto flatBufferPermuteDesc = serializer::CreatePermuteDescriptor(m_flatBufferBuilder,
949*89c4ff92SAndroid Build Coastguard Worker m_flatBufferBuilder.CreateVector(dimMappings));
950*89c4ff92SAndroid Build Coastguard Worker
951*89c4ff92SAndroid Build Coastguard Worker // Create the FlatBuffer PermuteLayer
952*89c4ff92SAndroid Build Coastguard Worker auto flatBufferPermuteLayer = serializer::CreatePermuteLayer(m_flatBufferBuilder,
953*89c4ff92SAndroid Build Coastguard Worker flatBufferPermuteBaseLayer,
954*89c4ff92SAndroid Build Coastguard Worker flatBufferPermuteDesc);
955*89c4ff92SAndroid Build Coastguard Worker
956*89c4ff92SAndroid Build Coastguard Worker // Add the AnyLayer to the FlatBufferLayers
957*89c4ff92SAndroid Build Coastguard Worker CreateAnyLayer(flatBufferPermuteLayer.o, serializer::Layer::Layer_PermuteLayer);
958*89c4ff92SAndroid Build Coastguard Worker }
959*89c4ff92SAndroid Build Coastguard Worker
960*89c4ff92SAndroid Build Coastguard Worker // Build FlatBuffer for Rank Layer
SerializeRankLayer(const armnn::IConnectableLayer * layer,const char * name)961*89c4ff92SAndroid Build Coastguard Worker void SerializerStrategy::SerializeRankLayer(const armnn::IConnectableLayer* layer,
962*89c4ff92SAndroid Build Coastguard Worker const char* name)
963*89c4ff92SAndroid Build Coastguard Worker {
964*89c4ff92SAndroid Build Coastguard Worker IgnoreUnused(name);
965*89c4ff92SAndroid Build Coastguard Worker auto flatBufferBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Rank);
966*89c4ff92SAndroid Build Coastguard Worker auto flatBufferRankLayer = serializer::CreateRankLayer(m_flatBufferBuilder, flatBufferBaseLayer);
967*89c4ff92SAndroid Build Coastguard Worker
968*89c4ff92SAndroid Build Coastguard Worker CreateAnyLayer(flatBufferRankLayer.o, serializer::Layer::Layer_RankLayer);
969*89c4ff92SAndroid Build Coastguard Worker }
970*89c4ff92SAndroid Build Coastguard Worker
SerializeReduceLayer(const armnn::IConnectableLayer * layer,const armnn::ReduceDescriptor & reduceDescriptor,const char *)971*89c4ff92SAndroid Build Coastguard Worker void SerializerStrategy::SerializeReduceLayer(const armnn::IConnectableLayer* layer,
972*89c4ff92SAndroid Build Coastguard Worker const armnn::ReduceDescriptor& reduceDescriptor,
973*89c4ff92SAndroid Build Coastguard Worker const char*)
974*89c4ff92SAndroid Build Coastguard Worker {
975*89c4ff92SAndroid Build Coastguard Worker auto fbReduceBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Reduce);
976*89c4ff92SAndroid Build Coastguard Worker auto fbDescriptor = CreateReduceDescriptor(m_flatBufferBuilder,
977*89c4ff92SAndroid Build Coastguard Worker reduceDescriptor.m_KeepDims,
978*89c4ff92SAndroid Build Coastguard Worker m_flatBufferBuilder.CreateVector(reduceDescriptor.m_vAxis),
979*89c4ff92SAndroid Build Coastguard Worker GetFlatBufferReduceOperation(reduceDescriptor.m_ReduceOperation));
980*89c4ff92SAndroid Build Coastguard Worker auto fbReduceLayer = serializer::CreateReduceLayer(m_flatBufferBuilder,
981*89c4ff92SAndroid Build Coastguard Worker fbReduceBaseLayer,
982*89c4ff92SAndroid Build Coastguard Worker fbDescriptor);
983*89c4ff92SAndroid Build Coastguard Worker
984*89c4ff92SAndroid Build Coastguard Worker CreateAnyLayer(fbReduceLayer.o, serializer::Layer::Layer_ReduceLayer);
985*89c4ff92SAndroid Build Coastguard Worker }
986*89c4ff92SAndroid Build Coastguard Worker
987*89c4ff92SAndroid Build Coastguard Worker // Build FlatBuffer for Reshape Layer
SerializeReshapeLayer(const armnn::IConnectableLayer * layer,const armnn::ReshapeDescriptor & reshapeDescriptor,const char * name)988*89c4ff92SAndroid Build Coastguard Worker void SerializerStrategy::SerializeReshapeLayer(const armnn::IConnectableLayer* layer,
989*89c4ff92SAndroid Build Coastguard Worker const armnn::ReshapeDescriptor& reshapeDescriptor,
990*89c4ff92SAndroid Build Coastguard Worker const char* name)
991*89c4ff92SAndroid Build Coastguard Worker {
992*89c4ff92SAndroid Build Coastguard Worker IgnoreUnused(name);
993*89c4ff92SAndroid Build Coastguard Worker
994*89c4ff92SAndroid Build Coastguard Worker // Create FlatBuffer BaseLayer
995*89c4ff92SAndroid Build Coastguard Worker auto flatBufferReshapeBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Reshape);
996*89c4ff92SAndroid Build Coastguard Worker
997*89c4ff92SAndroid Build Coastguard Worker std::vector<unsigned int> targetShape;
998*89c4ff92SAndroid Build Coastguard Worker for (unsigned int i =0; i < reshapeDescriptor.m_TargetShape.GetNumDimensions(); i++)
999*89c4ff92SAndroid Build Coastguard Worker {
1000*89c4ff92SAndroid Build Coastguard Worker targetShape.push_back(reshapeDescriptor.m_TargetShape[i]);
1001*89c4ff92SAndroid Build Coastguard Worker }
1002*89c4ff92SAndroid Build Coastguard Worker
1003*89c4ff92SAndroid Build Coastguard Worker auto flatBufferReshapeDesc = serializer::CreateReshapeDescriptor(m_flatBufferBuilder,
1004*89c4ff92SAndroid Build Coastguard Worker m_flatBufferBuilder.CreateVector(targetShape));
1005*89c4ff92SAndroid Build Coastguard Worker
1006*89c4ff92SAndroid Build Coastguard Worker // Create the FlatBuffer ReshapeLayer
1007*89c4ff92SAndroid Build Coastguard Worker auto flatBufferReshapeLayer = serializer::CreateReshapeLayer(m_flatBufferBuilder, flatBufferReshapeBaseLayer,
1008*89c4ff92SAndroid Build Coastguard Worker flatBufferReshapeDesc);
1009*89c4ff92SAndroid Build Coastguard Worker
1010*89c4ff92SAndroid Build Coastguard Worker // Add the AnyLayer to the FlatBufferLayers
1011*89c4ff92SAndroid Build Coastguard Worker CreateAnyLayer(flatBufferReshapeLayer.o, serializer::Layer::Layer_ReshapeLayer);
1012*89c4ff92SAndroid Build Coastguard Worker }
1013*89c4ff92SAndroid Build Coastguard Worker
SerializeResizeLayer(const armnn::IConnectableLayer * layer,const armnn::ResizeDescriptor & resizeDescriptor,const char * name)1014*89c4ff92SAndroid Build Coastguard Worker void SerializerStrategy::SerializeResizeLayer(const armnn::IConnectableLayer* layer,
1015*89c4ff92SAndroid Build Coastguard Worker const armnn::ResizeDescriptor& resizeDescriptor,
1016*89c4ff92SAndroid Build Coastguard Worker const char* name)
1017*89c4ff92SAndroid Build Coastguard Worker {
1018*89c4ff92SAndroid Build Coastguard Worker IgnoreUnused(name);
1019*89c4ff92SAndroid Build Coastguard Worker
1020*89c4ff92SAndroid Build Coastguard Worker auto flatBufferBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Resize);
1021*89c4ff92SAndroid Build Coastguard Worker
1022*89c4ff92SAndroid Build Coastguard Worker auto flatBufferDescriptor =
1023*89c4ff92SAndroid Build Coastguard Worker CreateResizeDescriptor(m_flatBufferBuilder,
1024*89c4ff92SAndroid Build Coastguard Worker resizeDescriptor.m_TargetHeight,
1025*89c4ff92SAndroid Build Coastguard Worker resizeDescriptor.m_TargetWidth,
1026*89c4ff92SAndroid Build Coastguard Worker GetFlatBufferResizeMethod(resizeDescriptor.m_Method),
1027*89c4ff92SAndroid Build Coastguard Worker GetFlatBufferDataLayout(resizeDescriptor.m_DataLayout),
1028*89c4ff92SAndroid Build Coastguard Worker resizeDescriptor.m_AlignCorners,
1029*89c4ff92SAndroid Build Coastguard Worker resizeDescriptor.m_HalfPixelCenters);
1030*89c4ff92SAndroid Build Coastguard Worker
1031*89c4ff92SAndroid Build Coastguard Worker auto flatBufferLayer = serializer::CreateResizeLayer(m_flatBufferBuilder,
1032*89c4ff92SAndroid Build Coastguard Worker flatBufferBaseLayer,
1033*89c4ff92SAndroid Build Coastguard Worker flatBufferDescriptor);
1034*89c4ff92SAndroid Build Coastguard Worker
1035*89c4ff92SAndroid Build Coastguard Worker CreateAnyLayer(flatBufferLayer.o, serializer::Layer::Layer_ResizeLayer);
1036*89c4ff92SAndroid Build Coastguard Worker }
1037*89c4ff92SAndroid Build Coastguard Worker
SerializeSliceLayer(const armnn::IConnectableLayer * layer,const armnn::SliceDescriptor & sliceDescriptor,const char * name)1038*89c4ff92SAndroid Build Coastguard Worker void SerializerStrategy::SerializeSliceLayer(const armnn::IConnectableLayer* layer,
1039*89c4ff92SAndroid Build Coastguard Worker const armnn::SliceDescriptor& sliceDescriptor,
1040*89c4ff92SAndroid Build Coastguard Worker const char* name)
1041*89c4ff92SAndroid Build Coastguard Worker {
1042*89c4ff92SAndroid Build Coastguard Worker IgnoreUnused(name);
1043*89c4ff92SAndroid Build Coastguard Worker
1044*89c4ff92SAndroid Build Coastguard Worker auto fbSliceBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Slice);
1045*89c4ff92SAndroid Build Coastguard Worker auto fbSliceDescriptor = CreateSliceDescriptor(m_flatBufferBuilder,
1046*89c4ff92SAndroid Build Coastguard Worker m_flatBufferBuilder.CreateVector(sliceDescriptor.m_Begin),
1047*89c4ff92SAndroid Build Coastguard Worker m_flatBufferBuilder.CreateVector(sliceDescriptor.m_Size));
1048*89c4ff92SAndroid Build Coastguard Worker
1049*89c4ff92SAndroid Build Coastguard Worker auto fbSliceLayer = serializer::CreateSliceLayer(m_flatBufferBuilder, fbSliceBaseLayer, fbSliceDescriptor);
1050*89c4ff92SAndroid Build Coastguard Worker
1051*89c4ff92SAndroid Build Coastguard Worker CreateAnyLayer(fbSliceLayer.o, serializer::Layer::Layer_SliceLayer);
1052*89c4ff92SAndroid Build Coastguard Worker }
1053*89c4ff92SAndroid Build Coastguard Worker
1054*89c4ff92SAndroid Build Coastguard Worker // Build FlatBuffer for Softmax Layer
SerializeSoftmaxLayer(const armnn::IConnectableLayer * layer,const armnn::SoftmaxDescriptor & softmaxDescriptor,const char * name)1055*89c4ff92SAndroid Build Coastguard Worker void SerializerStrategy::SerializeSoftmaxLayer(const armnn::IConnectableLayer* layer,
1056*89c4ff92SAndroid Build Coastguard Worker const armnn::SoftmaxDescriptor& softmaxDescriptor,
1057*89c4ff92SAndroid Build Coastguard Worker const char* name)
1058*89c4ff92SAndroid Build Coastguard Worker {
1059*89c4ff92SAndroid Build Coastguard Worker IgnoreUnused(name);
1060*89c4ff92SAndroid Build Coastguard Worker
1061*89c4ff92SAndroid Build Coastguard Worker // Create FlatBuffer BaseLayer
1062*89c4ff92SAndroid Build Coastguard Worker auto flatBufferSoftmaxBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Softmax);
1063*89c4ff92SAndroid Build Coastguard Worker
1064*89c4ff92SAndroid Build Coastguard Worker // Create the FlatBuffer SoftmaxDescriptor
1065*89c4ff92SAndroid Build Coastguard Worker auto flatBufferSoftmaxDesc =
1066*89c4ff92SAndroid Build Coastguard Worker serializer::CreateSoftmaxDescriptor(m_flatBufferBuilder,
1067*89c4ff92SAndroid Build Coastguard Worker softmaxDescriptor.m_Beta,
1068*89c4ff92SAndroid Build Coastguard Worker softmaxDescriptor.m_Axis);
1069*89c4ff92SAndroid Build Coastguard Worker
1070*89c4ff92SAndroid Build Coastguard Worker // Create the FlatBuffer SoftmaxLayer
1071*89c4ff92SAndroid Build Coastguard Worker auto flatBufferSoftmaxLayer =
1072*89c4ff92SAndroid Build Coastguard Worker serializer::CreateSoftmaxLayer(m_flatBufferBuilder,
1073*89c4ff92SAndroid Build Coastguard Worker flatBufferSoftmaxBaseLayer,
1074*89c4ff92SAndroid Build Coastguard Worker flatBufferSoftmaxDesc);
1075*89c4ff92SAndroid Build Coastguard Worker
1076*89c4ff92SAndroid Build Coastguard Worker CreateAnyLayer(flatBufferSoftmaxLayer.o, serializer::Layer::Layer_SoftmaxLayer);
1077*89c4ff92SAndroid Build Coastguard Worker }
1078*89c4ff92SAndroid Build Coastguard Worker
SerializePooling2dLayer(const armnn::IConnectableLayer * layer,const armnn::Pooling2dDescriptor & pooling2dDescriptor,const char * name)1079*89c4ff92SAndroid Build Coastguard Worker void SerializerStrategy::SerializePooling2dLayer(const armnn::IConnectableLayer* layer,
1080*89c4ff92SAndroid Build Coastguard Worker const armnn::Pooling2dDescriptor& pooling2dDescriptor,
1081*89c4ff92SAndroid Build Coastguard Worker const char* name)
1082*89c4ff92SAndroid Build Coastguard Worker {
1083*89c4ff92SAndroid Build Coastguard Worker IgnoreUnused(name);
1084*89c4ff92SAndroid Build Coastguard Worker
1085*89c4ff92SAndroid Build Coastguard Worker auto fbPooling2dBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Pooling2d);
1086*89c4ff92SAndroid Build Coastguard Worker auto fbPooling2dDescriptor = serializer::CreatePooling2dDescriptor(
1087*89c4ff92SAndroid Build Coastguard Worker m_flatBufferBuilder,
1088*89c4ff92SAndroid Build Coastguard Worker GetFlatBufferPoolingAlgorithm(pooling2dDescriptor.m_PoolType),
1089*89c4ff92SAndroid Build Coastguard Worker pooling2dDescriptor.m_PadLeft,
1090*89c4ff92SAndroid Build Coastguard Worker pooling2dDescriptor.m_PadRight,
1091*89c4ff92SAndroid Build Coastguard Worker pooling2dDescriptor.m_PadTop,
1092*89c4ff92SAndroid Build Coastguard Worker pooling2dDescriptor.m_PadBottom,
1093*89c4ff92SAndroid Build Coastguard Worker pooling2dDescriptor.m_PoolWidth,
1094*89c4ff92SAndroid Build Coastguard Worker pooling2dDescriptor.m_PoolHeight,
1095*89c4ff92SAndroid Build Coastguard Worker pooling2dDescriptor.m_StrideX,
1096*89c4ff92SAndroid Build Coastguard Worker pooling2dDescriptor.m_StrideY,
1097*89c4ff92SAndroid Build Coastguard Worker GetFlatBufferOutputShapeRounding(pooling2dDescriptor.m_OutputShapeRounding),
1098*89c4ff92SAndroid Build Coastguard Worker GetFlatBufferPaddingMethod(pooling2dDescriptor.m_PaddingMethod),
1099*89c4ff92SAndroid Build Coastguard Worker GetFlatBufferDataLayout(pooling2dDescriptor.m_DataLayout));
1100*89c4ff92SAndroid Build Coastguard Worker
1101*89c4ff92SAndroid Build Coastguard Worker auto fbPooling2dLayer = serializer::CreatePooling2dLayer(m_flatBufferBuilder,
1102*89c4ff92SAndroid Build Coastguard Worker fbPooling2dBaseLayer,
1103*89c4ff92SAndroid Build Coastguard Worker fbPooling2dDescriptor);
1104*89c4ff92SAndroid Build Coastguard Worker
1105*89c4ff92SAndroid Build Coastguard Worker CreateAnyLayer(fbPooling2dLayer.o, serializer::Layer::Layer_Pooling2dLayer);
1106*89c4ff92SAndroid Build Coastguard Worker }
1107*89c4ff92SAndroid Build Coastguard Worker
SerializePooling3dLayer(const armnn::IConnectableLayer * layer,const armnn::Pooling3dDescriptor & pooling3dDescriptor,const char * name)1108*89c4ff92SAndroid Build Coastguard Worker void SerializerStrategy::SerializePooling3dLayer(const armnn::IConnectableLayer* layer,
1109*89c4ff92SAndroid Build Coastguard Worker const armnn::Pooling3dDescriptor& pooling3dDescriptor,
1110*89c4ff92SAndroid Build Coastguard Worker const char* name)
1111*89c4ff92SAndroid Build Coastguard Worker {
1112*89c4ff92SAndroid Build Coastguard Worker IgnoreUnused(name);
1113*89c4ff92SAndroid Build Coastguard Worker
1114*89c4ff92SAndroid Build Coastguard Worker auto fbPooling3dBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Pooling3d);
1115*89c4ff92SAndroid Build Coastguard Worker auto fbPooling3dDescriptor = serializer::CreatePooling3dDescriptor(
1116*89c4ff92SAndroid Build Coastguard Worker m_flatBufferBuilder,
1117*89c4ff92SAndroid Build Coastguard Worker GetFlatBufferPoolingAlgorithm(pooling3dDescriptor.m_PoolType),
1118*89c4ff92SAndroid Build Coastguard Worker pooling3dDescriptor.m_PadLeft,
1119*89c4ff92SAndroid Build Coastguard Worker pooling3dDescriptor.m_PadRight,
1120*89c4ff92SAndroid Build Coastguard Worker pooling3dDescriptor.m_PadTop,
1121*89c4ff92SAndroid Build Coastguard Worker pooling3dDescriptor.m_PadBottom,
1122*89c4ff92SAndroid Build Coastguard Worker pooling3dDescriptor.m_PadFront,
1123*89c4ff92SAndroid Build Coastguard Worker pooling3dDescriptor.m_PadBack,
1124*89c4ff92SAndroid Build Coastguard Worker pooling3dDescriptor.m_PoolWidth,
1125*89c4ff92SAndroid Build Coastguard Worker pooling3dDescriptor.m_PoolHeight,
1126*89c4ff92SAndroid Build Coastguard Worker pooling3dDescriptor.m_PoolDepth,
1127*89c4ff92SAndroid Build Coastguard Worker pooling3dDescriptor.m_StrideX,
1128*89c4ff92SAndroid Build Coastguard Worker pooling3dDescriptor.m_StrideY,
1129*89c4ff92SAndroid Build Coastguard Worker pooling3dDescriptor.m_StrideZ,
1130*89c4ff92SAndroid Build Coastguard Worker GetFlatBufferOutputShapeRounding(pooling3dDescriptor.m_OutputShapeRounding),
1131*89c4ff92SAndroid Build Coastguard Worker GetFlatBufferPaddingMethod(pooling3dDescriptor.m_PaddingMethod),
1132*89c4ff92SAndroid Build Coastguard Worker GetFlatBufferDataLayout(pooling3dDescriptor.m_DataLayout));
1133*89c4ff92SAndroid Build Coastguard Worker
1134*89c4ff92SAndroid Build Coastguard Worker auto fbPooling3dLayer = serializer::CreatePooling3dLayer(m_flatBufferBuilder,
1135*89c4ff92SAndroid Build Coastguard Worker fbPooling3dBaseLayer,
1136*89c4ff92SAndroid Build Coastguard Worker fbPooling3dDescriptor);
1137*89c4ff92SAndroid Build Coastguard Worker
1138*89c4ff92SAndroid Build Coastguard Worker CreateAnyLayer(fbPooling3dLayer.o, serializer::Layer::Layer_Pooling3dLayer);
1139*89c4ff92SAndroid Build Coastguard Worker }
1140*89c4ff92SAndroid Build Coastguard Worker
SerializePreluLayer(const armnn::IConnectableLayer * layer,const char * name)1141*89c4ff92SAndroid Build Coastguard Worker void SerializerStrategy::SerializePreluLayer(const armnn::IConnectableLayer* layer,
1142*89c4ff92SAndroid Build Coastguard Worker const char* name)
1143*89c4ff92SAndroid Build Coastguard Worker {
1144*89c4ff92SAndroid Build Coastguard Worker IgnoreUnused(name);
1145*89c4ff92SAndroid Build Coastguard Worker
1146*89c4ff92SAndroid Build Coastguard Worker // Create FlatBuffer BaseLayer
1147*89c4ff92SAndroid Build Coastguard Worker auto flatBufferPreluBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Prelu);
1148*89c4ff92SAndroid Build Coastguard Worker
1149*89c4ff92SAndroid Build Coastguard Worker // Create the FlatBuffer AdditionLayer
1150*89c4ff92SAndroid Build Coastguard Worker auto flatBufferPreluLayer = serializer::CreatePreluLayer(m_flatBufferBuilder, flatBufferPreluBaseLayer);
1151*89c4ff92SAndroid Build Coastguard Worker
1152*89c4ff92SAndroid Build Coastguard Worker // Add the AnyLayer to the FlatBufferLayers
1153*89c4ff92SAndroid Build Coastguard Worker CreateAnyLayer(flatBufferPreluLayer.o, serializer::Layer::Layer_PreluLayer);
1154*89c4ff92SAndroid Build Coastguard Worker }
1155*89c4ff92SAndroid Build Coastguard Worker
SerializeQuantizeLayer(const armnn::IConnectableLayer * layer,const char * name)1156*89c4ff92SAndroid Build Coastguard Worker void SerializerStrategy::SerializeQuantizeLayer(const armnn::IConnectableLayer *layer, const char *name)
1157*89c4ff92SAndroid Build Coastguard Worker {
1158*89c4ff92SAndroid Build Coastguard Worker IgnoreUnused(name);
1159*89c4ff92SAndroid Build Coastguard Worker
1160*89c4ff92SAndroid Build Coastguard Worker auto fbQuantizeBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Quantize);
1161*89c4ff92SAndroid Build Coastguard Worker auto fbQuantizeLayer = serializer::CreateQuantizeLayer(m_flatBufferBuilder,
1162*89c4ff92SAndroid Build Coastguard Worker fbQuantizeBaseLayer);
1163*89c4ff92SAndroid Build Coastguard Worker CreateAnyLayer(fbQuantizeLayer.o, serializer::Layer::Layer_QuantizeLayer);
1164*89c4ff92SAndroid Build Coastguard Worker }
1165*89c4ff92SAndroid Build Coastguard Worker
1166*89c4ff92SAndroid Build Coastguard Worker // Build FlatBuffer for FullyConnected Layer
SerializeFullyConnectedLayer(const armnn::IConnectableLayer * layer,const armnn::FullyConnectedDescriptor & fullyConnectedDescriptor,const char *)1167*89c4ff92SAndroid Build Coastguard Worker void SerializerStrategy::SerializeFullyConnectedLayer(const armnn::IConnectableLayer* layer,
1168*89c4ff92SAndroid Build Coastguard Worker const armnn::FullyConnectedDescriptor& fullyConnectedDescriptor,
1169*89c4ff92SAndroid Build Coastguard Worker const char*)
1170*89c4ff92SAndroid Build Coastguard Worker {
1171*89c4ff92SAndroid Build Coastguard Worker // Create FlatBuffer BaseLayer
1172*89c4ff92SAndroid Build Coastguard Worker auto flatBufferBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_FullyConnected);
1173*89c4ff92SAndroid Build Coastguard Worker
1174*89c4ff92SAndroid Build Coastguard Worker // Create FlatBuffer FullyConnectedDescriptor
1175*89c4ff92SAndroid Build Coastguard Worker auto flatBufferDescriptor =
1176*89c4ff92SAndroid Build Coastguard Worker serializer::CreateFullyConnectedDescriptor(m_flatBufferBuilder,
1177*89c4ff92SAndroid Build Coastguard Worker fullyConnectedDescriptor.m_BiasEnabled,
1178*89c4ff92SAndroid Build Coastguard Worker fullyConnectedDescriptor.m_TransposeWeightMatrix,
1179*89c4ff92SAndroid Build Coastguard Worker fullyConnectedDescriptor.m_ConstantWeights);
1180*89c4ff92SAndroid Build Coastguard Worker
1181*89c4ff92SAndroid Build Coastguard Worker // Create FlatBuffer FullyConnectedLayer
1182*89c4ff92SAndroid Build Coastguard Worker auto flatBufferLayer = serializer::CreateFullyConnectedLayer(m_flatBufferBuilder,
1183*89c4ff92SAndroid Build Coastguard Worker flatBufferBaseLayer,
1184*89c4ff92SAndroid Build Coastguard Worker flatBufferDescriptor);
1185*89c4ff92SAndroid Build Coastguard Worker
1186*89c4ff92SAndroid Build Coastguard Worker // Add created FullyConnectedLayer to the FlatBufferLayers
1187*89c4ff92SAndroid Build Coastguard Worker CreateAnyLayer(flatBufferLayer.o, serializer::Layer::Layer_FullyConnectedLayer);
1188*89c4ff92SAndroid Build Coastguard Worker }
1189*89c4ff92SAndroid Build Coastguard Worker
1190*89c4ff92SAndroid Build Coastguard Worker // Build FlatBuffer for SpaceToBatchNd Layer
SerializeSpaceToBatchNdLayer(const armnn::IConnectableLayer * layer,const armnn::SpaceToBatchNdDescriptor & spaceToBatchNdDescriptor,const char * name)1191*89c4ff92SAndroid Build Coastguard Worker void SerializerStrategy::SerializeSpaceToBatchNdLayer(const armnn::IConnectableLayer* layer,
1192*89c4ff92SAndroid Build Coastguard Worker const armnn::SpaceToBatchNdDescriptor& spaceToBatchNdDescriptor,
1193*89c4ff92SAndroid Build Coastguard Worker const char* name)
1194*89c4ff92SAndroid Build Coastguard Worker {
1195*89c4ff92SAndroid Build Coastguard Worker IgnoreUnused(name);
1196*89c4ff92SAndroid Build Coastguard Worker
1197*89c4ff92SAndroid Build Coastguard Worker // Create FlatBuffer BaseLayer
1198*89c4ff92SAndroid Build Coastguard Worker auto flatBufferBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_SpaceToBatchNd);
1199*89c4ff92SAndroid Build Coastguard Worker
1200*89c4ff92SAndroid Build Coastguard Worker std::vector<unsigned int> padList;
1201*89c4ff92SAndroid Build Coastguard Worker padList.reserve(spaceToBatchNdDescriptor.m_PadList.size()*2);
1202*89c4ff92SAndroid Build Coastguard Worker for (auto& pad : spaceToBatchNdDescriptor.m_PadList)
1203*89c4ff92SAndroid Build Coastguard Worker {
1204*89c4ff92SAndroid Build Coastguard Worker padList.push_back(pad.first);
1205*89c4ff92SAndroid Build Coastguard Worker padList.push_back(pad.second);
1206*89c4ff92SAndroid Build Coastguard Worker }
1207*89c4ff92SAndroid Build Coastguard Worker
1208*89c4ff92SAndroid Build Coastguard Worker auto flatBufferDescriptor =
1209*89c4ff92SAndroid Build Coastguard Worker CreateSpaceToBatchNdDescriptor(m_flatBufferBuilder,
1210*89c4ff92SAndroid Build Coastguard Worker m_flatBufferBuilder.CreateVector(spaceToBatchNdDescriptor.m_BlockShape),
1211*89c4ff92SAndroid Build Coastguard Worker m_flatBufferBuilder.CreateVector(padList),
1212*89c4ff92SAndroid Build Coastguard Worker GetFlatBufferDataLayout(spaceToBatchNdDescriptor.m_DataLayout));
1213*89c4ff92SAndroid Build Coastguard Worker
1214*89c4ff92SAndroid Build Coastguard Worker auto flatBufferLayer = serializer::CreateSpaceToBatchNdLayer(m_flatBufferBuilder,
1215*89c4ff92SAndroid Build Coastguard Worker flatBufferBaseLayer,
1216*89c4ff92SAndroid Build Coastguard Worker flatBufferDescriptor);
1217*89c4ff92SAndroid Build Coastguard Worker
1218*89c4ff92SAndroid Build Coastguard Worker CreateAnyLayer(flatBufferLayer.o, serializer::Layer::Layer_SpaceToBatchNdLayer);
1219*89c4ff92SAndroid Build Coastguard Worker }
1220*89c4ff92SAndroid Build Coastguard Worker
1221*89c4ff92SAndroid Build Coastguard Worker // Build FlatBuffer for SpaceToDepthLayer
SerializeSpaceToDepthLayer(const armnn::IConnectableLayer * layer,const armnn::SpaceToDepthDescriptor & spaceToDepthDescriptor,const char * name)1222*89c4ff92SAndroid Build Coastguard Worker void SerializerStrategy::SerializeSpaceToDepthLayer(const armnn::IConnectableLayer* layer,
1223*89c4ff92SAndroid Build Coastguard Worker const armnn::SpaceToDepthDescriptor& spaceToDepthDescriptor,
1224*89c4ff92SAndroid Build Coastguard Worker const char* name)
1225*89c4ff92SAndroid Build Coastguard Worker {
1226*89c4ff92SAndroid Build Coastguard Worker IgnoreUnused(name);
1227*89c4ff92SAndroid Build Coastguard Worker
1228*89c4ff92SAndroid Build Coastguard Worker auto flatBufferBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_SpaceToDepth);
1229*89c4ff92SAndroid Build Coastguard Worker auto flatBufferDescriptor =
1230*89c4ff92SAndroid Build Coastguard Worker CreateSpaceToDepthDescriptor(m_flatBufferBuilder,
1231*89c4ff92SAndroid Build Coastguard Worker spaceToDepthDescriptor.m_BlockSize,
1232*89c4ff92SAndroid Build Coastguard Worker GetFlatBufferDataLayout(spaceToDepthDescriptor.m_DataLayout));
1233*89c4ff92SAndroid Build Coastguard Worker
1234*89c4ff92SAndroid Build Coastguard Worker auto flatBufferLayer = serializer::CreateSpaceToDepthLayer(m_flatBufferBuilder,
1235*89c4ff92SAndroid Build Coastguard Worker flatBufferBaseLayer,
1236*89c4ff92SAndroid Build Coastguard Worker flatBufferDescriptor);
1237*89c4ff92SAndroid Build Coastguard Worker
1238*89c4ff92SAndroid Build Coastguard Worker CreateAnyLayer(flatBufferLayer.o, serializer::Layer::Layer_SpaceToDepthLayer);
1239*89c4ff92SAndroid Build Coastguard Worker }
1240*89c4ff92SAndroid Build Coastguard Worker
1241*89c4ff92SAndroid Build Coastguard Worker // Build FlatBuffer for Splitter Layer
SerializeSplitterLayer(const armnn::IConnectableLayer * layer,const armnn::ViewsDescriptor & viewsDescriptor,const char * name)1242*89c4ff92SAndroid Build Coastguard Worker void SerializerStrategy::SerializeSplitterLayer(const armnn::IConnectableLayer* layer,
1243*89c4ff92SAndroid Build Coastguard Worker const armnn::ViewsDescriptor& viewsDescriptor,
1244*89c4ff92SAndroid Build Coastguard Worker const char* name)
1245*89c4ff92SAndroid Build Coastguard Worker {
1246*89c4ff92SAndroid Build Coastguard Worker IgnoreUnused(name);
1247*89c4ff92SAndroid Build Coastguard Worker
1248*89c4ff92SAndroid Build Coastguard Worker // Create FlatBuffer ViewOrigins
1249*89c4ff92SAndroid Build Coastguard Worker std::vector<flatbuffers::Offset<UintVector>> flatBufferViewOrigins;
1250*89c4ff92SAndroid Build Coastguard Worker flatBufferViewOrigins.reserve(viewsDescriptor.GetNumViews());
1251*89c4ff92SAndroid Build Coastguard Worker
1252*89c4ff92SAndroid Build Coastguard Worker for(unsigned int vIdx = 0; vIdx < viewsDescriptor.GetNumViews(); ++vIdx)
1253*89c4ff92SAndroid Build Coastguard Worker {
1254*89c4ff92SAndroid Build Coastguard Worker std::vector<uint32_t> viewOrigin;
1255*89c4ff92SAndroid Build Coastguard Worker viewOrigin.reserve(viewsDescriptor.GetNumDimensions());
1256*89c4ff92SAndroid Build Coastguard Worker
1257*89c4ff92SAndroid Build Coastguard Worker // Copy vector
1258*89c4ff92SAndroid Build Coastguard Worker for(unsigned int dIdx = 0; dIdx < viewsDescriptor.GetNumDimensions(); ++dIdx)
1259*89c4ff92SAndroid Build Coastguard Worker {
1260*89c4ff92SAndroid Build Coastguard Worker viewOrigin.push_back(viewsDescriptor.GetViewOrigin(vIdx)[dIdx]);
1261*89c4ff92SAndroid Build Coastguard Worker }
1262*89c4ff92SAndroid Build Coastguard Worker
1263*89c4ff92SAndroid Build Coastguard Worker flatBufferViewOrigins.push_back(CreateUintVector(m_flatBufferBuilder,
1264*89c4ff92SAndroid Build Coastguard Worker m_flatBufferBuilder.CreateVector(viewOrigin)));
1265*89c4ff92SAndroid Build Coastguard Worker }
1266*89c4ff92SAndroid Build Coastguard Worker
1267*89c4ff92SAndroid Build Coastguard Worker // Create FlatBuffer OriginsDescriptor
1268*89c4ff92SAndroid Build Coastguard Worker auto flatBufferOriginDescriptor = CreateOriginsDescriptor(m_flatBufferBuilder,
1269*89c4ff92SAndroid Build Coastguard Worker viewsDescriptor.GetOrigins().GetConcatAxis(),
1270*89c4ff92SAndroid Build Coastguard Worker viewsDescriptor.GetOrigins().GetNumViews(),
1271*89c4ff92SAndroid Build Coastguard Worker viewsDescriptor.GetOrigins().GetNumDimensions(),
1272*89c4ff92SAndroid Build Coastguard Worker m_flatBufferBuilder.CreateVector(flatBufferViewOrigins));
1273*89c4ff92SAndroid Build Coastguard Worker
1274*89c4ff92SAndroid Build Coastguard Worker // Create FlatBuffer ViewOrigins
1275*89c4ff92SAndroid Build Coastguard Worker std::vector<flatbuffers::Offset<UintVector>> flatBufferViewSizes;
1276*89c4ff92SAndroid Build Coastguard Worker flatBufferViewSizes.reserve(viewsDescriptor.GetNumViews());
1277*89c4ff92SAndroid Build Coastguard Worker
1278*89c4ff92SAndroid Build Coastguard Worker for(unsigned int vIdx = 0; vIdx < viewsDescriptor.GetNumViews(); ++vIdx)
1279*89c4ff92SAndroid Build Coastguard Worker {
1280*89c4ff92SAndroid Build Coastguard Worker std::vector<uint32_t> viewSize;
1281*89c4ff92SAndroid Build Coastguard Worker viewSize.reserve(viewsDescriptor.GetNumDimensions());
1282*89c4ff92SAndroid Build Coastguard Worker
1283*89c4ff92SAndroid Build Coastguard Worker // Copy vector
1284*89c4ff92SAndroid Build Coastguard Worker for(unsigned int dIdx = 0; dIdx < viewsDescriptor.GetNumDimensions(); ++dIdx)
1285*89c4ff92SAndroid Build Coastguard Worker {
1286*89c4ff92SAndroid Build Coastguard Worker viewSize.push_back(viewsDescriptor.GetViewSizes(vIdx)[dIdx]);
1287*89c4ff92SAndroid Build Coastguard Worker }
1288*89c4ff92SAndroid Build Coastguard Worker
1289*89c4ff92SAndroid Build Coastguard Worker flatBufferViewSizes.push_back(CreateUintVector(m_flatBufferBuilder,
1290*89c4ff92SAndroid Build Coastguard Worker m_flatBufferBuilder.CreateVector(viewSize)));
1291*89c4ff92SAndroid Build Coastguard Worker }
1292*89c4ff92SAndroid Build Coastguard Worker
1293*89c4ff92SAndroid Build Coastguard Worker // Create FlatBuffer ViewsDescriptor
1294*89c4ff92SAndroid Build Coastguard Worker auto flatBufferViewsDescriptor = CreateViewsDescriptor(m_flatBufferBuilder,
1295*89c4ff92SAndroid Build Coastguard Worker flatBufferOriginDescriptor,
1296*89c4ff92SAndroid Build Coastguard Worker m_flatBufferBuilder.CreateVector(flatBufferViewSizes));
1297*89c4ff92SAndroid Build Coastguard Worker
1298*89c4ff92SAndroid Build Coastguard Worker // Create FlatBuffer BaseLayer
1299*89c4ff92SAndroid Build Coastguard Worker auto flatBufferBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Splitter);
1300*89c4ff92SAndroid Build Coastguard Worker
1301*89c4ff92SAndroid Build Coastguard Worker auto flatBufferSplitterLayer = serializer::CreateSplitterLayer(m_flatBufferBuilder,
1302*89c4ff92SAndroid Build Coastguard Worker flatBufferBaseLayer,
1303*89c4ff92SAndroid Build Coastguard Worker flatBufferViewsDescriptor);
1304*89c4ff92SAndroid Build Coastguard Worker
1305*89c4ff92SAndroid Build Coastguard Worker CreateAnyLayer(flatBufferSplitterLayer.o, serializer::Layer::Layer_SplitterLayer);
1306*89c4ff92SAndroid Build Coastguard Worker }
1307*89c4ff92SAndroid Build Coastguard Worker
SerializeNormalizationLayer(const armnn::IConnectableLayer * layer,const armnn::NormalizationDescriptor & descriptor,const char * name)1308*89c4ff92SAndroid Build Coastguard Worker void SerializerStrategy::SerializeNormalizationLayer(const armnn::IConnectableLayer* layer,
1309*89c4ff92SAndroid Build Coastguard Worker const armnn::NormalizationDescriptor& descriptor,
1310*89c4ff92SAndroid Build Coastguard Worker const char* name)
1311*89c4ff92SAndroid Build Coastguard Worker {
1312*89c4ff92SAndroid Build Coastguard Worker IgnoreUnused(name);
1313*89c4ff92SAndroid Build Coastguard Worker
1314*89c4ff92SAndroid Build Coastguard Worker auto fbNormalizationBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Normalization);
1315*89c4ff92SAndroid Build Coastguard Worker
1316*89c4ff92SAndroid Build Coastguard Worker auto fbNormalizationDescriptor = serializer::CreateNormalizationDescriptor(
1317*89c4ff92SAndroid Build Coastguard Worker m_flatBufferBuilder,
1318*89c4ff92SAndroid Build Coastguard Worker GetFlatBufferNormalizationAlgorithmChannel(descriptor.m_NormChannelType),
1319*89c4ff92SAndroid Build Coastguard Worker GetFlatBufferNormalizationAlgorithmMethod(descriptor.m_NormMethodType),
1320*89c4ff92SAndroid Build Coastguard Worker descriptor.m_NormSize,
1321*89c4ff92SAndroid Build Coastguard Worker descriptor.m_Alpha,
1322*89c4ff92SAndroid Build Coastguard Worker descriptor.m_Beta,
1323*89c4ff92SAndroid Build Coastguard Worker descriptor.m_K,
1324*89c4ff92SAndroid Build Coastguard Worker GetFlatBufferDataLayout(descriptor.m_DataLayout));
1325*89c4ff92SAndroid Build Coastguard Worker
1326*89c4ff92SAndroid Build Coastguard Worker auto flatBufferLayer = serializer::CreateNormalizationLayer(m_flatBufferBuilder,
1327*89c4ff92SAndroid Build Coastguard Worker fbNormalizationBaseLayer,
1328*89c4ff92SAndroid Build Coastguard Worker fbNormalizationDescriptor);
1329*89c4ff92SAndroid Build Coastguard Worker
1330*89c4ff92SAndroid Build Coastguard Worker CreateAnyLayer(flatBufferLayer.o, serializer::Layer::Layer_NormalizationLayer);
1331*89c4ff92SAndroid Build Coastguard Worker }
1332*89c4ff92SAndroid Build Coastguard Worker
SerializeShapeLayer(const armnn::IConnectableLayer * layer,const char * name)1333*89c4ff92SAndroid Build Coastguard Worker void SerializerStrategy::SerializeShapeLayer(const armnn::IConnectableLayer* layer,
1334*89c4ff92SAndroid Build Coastguard Worker const char* name)
1335*89c4ff92SAndroid Build Coastguard Worker {
1336*89c4ff92SAndroid Build Coastguard Worker IgnoreUnused(name);
1337*89c4ff92SAndroid Build Coastguard Worker
1338*89c4ff92SAndroid Build Coastguard Worker auto shapeBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Shape);
1339*89c4ff92SAndroid Build Coastguard Worker auto shapeLayer = serializer::CreateShapeLayer(m_flatBufferBuilder, shapeBaseLayer);
1340*89c4ff92SAndroid Build Coastguard Worker
1341*89c4ff92SAndroid Build Coastguard Worker CreateAnyLayer(shapeLayer.o, serializer::Layer::Layer_ShapeLayer);
1342*89c4ff92SAndroid Build Coastguard Worker }
1343*89c4ff92SAndroid Build Coastguard Worker
SerializeStackLayer(const armnn::IConnectableLayer * layer,const armnn::StackDescriptor & stackDescriptor,const char * name)1344*89c4ff92SAndroid Build Coastguard Worker void SerializerStrategy::SerializeStackLayer(const armnn::IConnectableLayer* layer,
1345*89c4ff92SAndroid Build Coastguard Worker const armnn::StackDescriptor& stackDescriptor,
1346*89c4ff92SAndroid Build Coastguard Worker const char* name)
1347*89c4ff92SAndroid Build Coastguard Worker {
1348*89c4ff92SAndroid Build Coastguard Worker IgnoreUnused(name);
1349*89c4ff92SAndroid Build Coastguard Worker
1350*89c4ff92SAndroid Build Coastguard Worker auto stackBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Stack);
1351*89c4ff92SAndroid Build Coastguard Worker
1352*89c4ff92SAndroid Build Coastguard Worker std::vector<unsigned int> inputShape;
1353*89c4ff92SAndroid Build Coastguard Worker for (unsigned int i =0; i < stackDescriptor.m_InputShape.GetNumDimensions(); i++)
1354*89c4ff92SAndroid Build Coastguard Worker {
1355*89c4ff92SAndroid Build Coastguard Worker inputShape.push_back(stackDescriptor.m_InputShape[i]);
1356*89c4ff92SAndroid Build Coastguard Worker }
1357*89c4ff92SAndroid Build Coastguard Worker
1358*89c4ff92SAndroid Build Coastguard Worker auto flatBufferStackDescriptor = CreateStackDescriptor(m_flatBufferBuilder,
1359*89c4ff92SAndroid Build Coastguard Worker stackDescriptor.m_Axis,
1360*89c4ff92SAndroid Build Coastguard Worker stackDescriptor.m_NumInputs,
1361*89c4ff92SAndroid Build Coastguard Worker m_flatBufferBuilder.CreateVector(inputShape));
1362*89c4ff92SAndroid Build Coastguard Worker
1363*89c4ff92SAndroid Build Coastguard Worker auto stackLayer = serializer::CreateStackLayer(m_flatBufferBuilder, stackBaseLayer, flatBufferStackDescriptor);
1364*89c4ff92SAndroid Build Coastguard Worker CreateAnyLayer(stackLayer.o, serializer::Layer::Layer_StackLayer);
1365*89c4ff92SAndroid Build Coastguard Worker }
1366*89c4ff92SAndroid Build Coastguard Worker
SerializeStandInLayer(const armnn::IConnectableLayer * layer,const armnn::StandInDescriptor & standInDescriptor,const char * name)1367*89c4ff92SAndroid Build Coastguard Worker void SerializerStrategy::SerializeStandInLayer(const armnn::IConnectableLayer *layer,
1368*89c4ff92SAndroid Build Coastguard Worker const armnn::StandInDescriptor& standInDescriptor,
1369*89c4ff92SAndroid Build Coastguard Worker const char *name)
1370*89c4ff92SAndroid Build Coastguard Worker {
1371*89c4ff92SAndroid Build Coastguard Worker IgnoreUnused(name);
1372*89c4ff92SAndroid Build Coastguard Worker
1373*89c4ff92SAndroid Build Coastguard Worker auto fbDescriptor = serializer::CreateStandInDescriptor(m_flatBufferBuilder,
1374*89c4ff92SAndroid Build Coastguard Worker standInDescriptor.m_NumInputs,
1375*89c4ff92SAndroid Build Coastguard Worker standInDescriptor.m_NumOutputs);
1376*89c4ff92SAndroid Build Coastguard Worker
1377*89c4ff92SAndroid Build Coastguard Worker auto fbBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_StandIn);
1378*89c4ff92SAndroid Build Coastguard Worker auto fbLayer = serializer::CreateStandInLayer(m_flatBufferBuilder, fbBaseLayer, fbDescriptor);
1379*89c4ff92SAndroid Build Coastguard Worker
1380*89c4ff92SAndroid Build Coastguard Worker CreateAnyLayer(fbLayer.o, serializer::Layer::Layer_StandInLayer);
1381*89c4ff92SAndroid Build Coastguard Worker }
1382*89c4ff92SAndroid Build Coastguard Worker
SerializeStridedSliceLayer(const armnn::IConnectableLayer * layer,const armnn::StridedSliceDescriptor & stridedSliceDescriptor,const char * name)1383*89c4ff92SAndroid Build Coastguard Worker void SerializerStrategy::SerializeStridedSliceLayer(const armnn::IConnectableLayer* layer,
1384*89c4ff92SAndroid Build Coastguard Worker const armnn::StridedSliceDescriptor& stridedSliceDescriptor,
1385*89c4ff92SAndroid Build Coastguard Worker const char* name)
1386*89c4ff92SAndroid Build Coastguard Worker {
1387*89c4ff92SAndroid Build Coastguard Worker IgnoreUnused(name);
1388*89c4ff92SAndroid Build Coastguard Worker
1389*89c4ff92SAndroid Build Coastguard Worker auto flatBufferBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_StridedSlice);
1390*89c4ff92SAndroid Build Coastguard Worker
1391*89c4ff92SAndroid Build Coastguard Worker auto flatBufferDescriptor =
1392*89c4ff92SAndroid Build Coastguard Worker CreateStridedSliceDescriptor(m_flatBufferBuilder,
1393*89c4ff92SAndroid Build Coastguard Worker m_flatBufferBuilder.CreateVector(stridedSliceDescriptor.m_Begin),
1394*89c4ff92SAndroid Build Coastguard Worker m_flatBufferBuilder.CreateVector(stridedSliceDescriptor.m_End),
1395*89c4ff92SAndroid Build Coastguard Worker m_flatBufferBuilder.CreateVector(stridedSliceDescriptor.m_Stride),
1396*89c4ff92SAndroid Build Coastguard Worker stridedSliceDescriptor.m_BeginMask,
1397*89c4ff92SAndroid Build Coastguard Worker stridedSliceDescriptor.m_EndMask,
1398*89c4ff92SAndroid Build Coastguard Worker stridedSliceDescriptor.m_ShrinkAxisMask,
1399*89c4ff92SAndroid Build Coastguard Worker stridedSliceDescriptor.m_EllipsisMask,
1400*89c4ff92SAndroid Build Coastguard Worker stridedSliceDescriptor.m_NewAxisMask,
1401*89c4ff92SAndroid Build Coastguard Worker GetFlatBufferDataLayout(stridedSliceDescriptor.m_DataLayout));
1402*89c4ff92SAndroid Build Coastguard Worker
1403*89c4ff92SAndroid Build Coastguard Worker auto flatBufferLayer = serializer::CreateStridedSliceLayer(m_flatBufferBuilder,
1404*89c4ff92SAndroid Build Coastguard Worker flatBufferBaseLayer,
1405*89c4ff92SAndroid Build Coastguard Worker flatBufferDescriptor);
1406*89c4ff92SAndroid Build Coastguard Worker
1407*89c4ff92SAndroid Build Coastguard Worker CreateAnyLayer(flatBufferLayer.o, serializer::Layer::Layer_StridedSliceLayer);
1408*89c4ff92SAndroid Build Coastguard Worker }
1409*89c4ff92SAndroid Build Coastguard Worker
SerializeSubtractionLayer(const armnn::IConnectableLayer * layer,const char * name)1410*89c4ff92SAndroid Build Coastguard Worker void SerializerStrategy::SerializeSubtractionLayer(const armnn::IConnectableLayer* layer, const char* name)
1411*89c4ff92SAndroid Build Coastguard Worker {
1412*89c4ff92SAndroid Build Coastguard Worker IgnoreUnused(name);
1413*89c4ff92SAndroid Build Coastguard Worker
1414*89c4ff92SAndroid Build Coastguard Worker auto fbSubtractionBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Subtraction);
1415*89c4ff92SAndroid Build Coastguard Worker auto fbSubtractionLayer = serializer::CreateSubtractionLayer(m_flatBufferBuilder, fbSubtractionBaseLayer);
1416*89c4ff92SAndroid Build Coastguard Worker
1417*89c4ff92SAndroid Build Coastguard Worker CreateAnyLayer(fbSubtractionLayer.o, serializer::Layer::Layer_SubtractionLayer);
1418*89c4ff92SAndroid Build Coastguard Worker }
1419*89c4ff92SAndroid Build Coastguard Worker
SerializeSwitchLayer(const armnn::IConnectableLayer * layer,const char * name)1420*89c4ff92SAndroid Build Coastguard Worker void SerializerStrategy::SerializeSwitchLayer(const armnn::IConnectableLayer* layer, const char* name)
1421*89c4ff92SAndroid Build Coastguard Worker {
1422*89c4ff92SAndroid Build Coastguard Worker IgnoreUnused(name);
1423*89c4ff92SAndroid Build Coastguard Worker
1424*89c4ff92SAndroid Build Coastguard Worker auto fbSwitchBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Switch);
1425*89c4ff92SAndroid Build Coastguard Worker auto fbSwitchLayer = serializer::CreateSwitchLayer(m_flatBufferBuilder, fbSwitchBaseLayer);
1426*89c4ff92SAndroid Build Coastguard Worker
1427*89c4ff92SAndroid Build Coastguard Worker CreateAnyLayer(fbSwitchLayer.o, serializer::Layer::Layer_SwitchLayer);
1428*89c4ff92SAndroid Build Coastguard Worker }
1429*89c4ff92SAndroid Build Coastguard Worker
SerializeTransposeConvolution2dLayer(const armnn::IConnectableLayer * layer,const armnn::TransposeConvolution2dDescriptor & descriptor,const std::vector<armnn::ConstTensor> & constants,const char * name)1430*89c4ff92SAndroid Build Coastguard Worker void SerializerStrategy::SerializeTransposeConvolution2dLayer(
1431*89c4ff92SAndroid Build Coastguard Worker const armnn::IConnectableLayer* layer,
1432*89c4ff92SAndroid Build Coastguard Worker const armnn::TransposeConvolution2dDescriptor& descriptor,
1433*89c4ff92SAndroid Build Coastguard Worker const std::vector<armnn::ConstTensor>& constants,
1434*89c4ff92SAndroid Build Coastguard Worker const char* name)
1435*89c4ff92SAndroid Build Coastguard Worker {
1436*89c4ff92SAndroid Build Coastguard Worker IgnoreUnused(name);
1437*89c4ff92SAndroid Build Coastguard Worker
1438*89c4ff92SAndroid Build Coastguard Worker const armnn::ConstTensor& weights = constants.at(0);
1439*89c4ff92SAndroid Build Coastguard Worker
1440*89c4ff92SAndroid Build Coastguard Worker auto fbBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Convolution2d);
1441*89c4ff92SAndroid Build Coastguard Worker auto fbDescriptor = CreateTransposeConvolution2dDescriptor(m_flatBufferBuilder,
1442*89c4ff92SAndroid Build Coastguard Worker descriptor.m_PadLeft,
1443*89c4ff92SAndroid Build Coastguard Worker descriptor.m_PadRight,
1444*89c4ff92SAndroid Build Coastguard Worker descriptor.m_PadTop,
1445*89c4ff92SAndroid Build Coastguard Worker descriptor.m_PadBottom,
1446*89c4ff92SAndroid Build Coastguard Worker descriptor.m_StrideX,
1447*89c4ff92SAndroid Build Coastguard Worker descriptor.m_StrideY,
1448*89c4ff92SAndroid Build Coastguard Worker descriptor.m_BiasEnabled,
1449*89c4ff92SAndroid Build Coastguard Worker GetFlatBufferDataLayout(descriptor.m_DataLayout));
1450*89c4ff92SAndroid Build Coastguard Worker
1451*89c4ff92SAndroid Build Coastguard Worker // weights & biases
1452*89c4ff92SAndroid Build Coastguard Worker auto fbWeightsConstTensorInfo = CreateConstTensorInfo(weights);
1453*89c4ff92SAndroid Build Coastguard Worker flatbuffers::Offset<serializer::ConstTensor> fbBiasesConstTensorInfo;
1454*89c4ff92SAndroid Build Coastguard Worker if (constants.size() > 1)
1455*89c4ff92SAndroid Build Coastguard Worker {
1456*89c4ff92SAndroid Build Coastguard Worker const armnn::ConstTensor& biases = constants.at(1);
1457*89c4ff92SAndroid Build Coastguard Worker fbBiasesConstTensorInfo = CreateConstTensorInfo(biases);
1458*89c4ff92SAndroid Build Coastguard Worker }
1459*89c4ff92SAndroid Build Coastguard Worker
1460*89c4ff92SAndroid Build Coastguard Worker auto fbLayer = CreateTransposeConvolution2dLayer(m_flatBufferBuilder,
1461*89c4ff92SAndroid Build Coastguard Worker fbBaseLayer,
1462*89c4ff92SAndroid Build Coastguard Worker fbDescriptor,
1463*89c4ff92SAndroid Build Coastguard Worker fbWeightsConstTensorInfo,
1464*89c4ff92SAndroid Build Coastguard Worker fbBiasesConstTensorInfo);
1465*89c4ff92SAndroid Build Coastguard Worker
1466*89c4ff92SAndroid Build Coastguard Worker CreateAnyLayer(fbLayer.o, serializer::Layer::Layer_TransposeConvolution2dLayer);
1467*89c4ff92SAndroid Build Coastguard Worker }
1468*89c4ff92SAndroid Build Coastguard Worker
SerializeTransposeLayer(const armnn::IConnectableLayer * layer,const armnn::TransposeDescriptor & descriptor,const char * name)1469*89c4ff92SAndroid Build Coastguard Worker void SerializerStrategy::SerializeTransposeLayer(const armnn::IConnectableLayer* layer,
1470*89c4ff92SAndroid Build Coastguard Worker const armnn::TransposeDescriptor& descriptor,
1471*89c4ff92SAndroid Build Coastguard Worker const char* name)
1472*89c4ff92SAndroid Build Coastguard Worker {
1473*89c4ff92SAndroid Build Coastguard Worker IgnoreUnused(name);
1474*89c4ff92SAndroid Build Coastguard Worker
1475*89c4ff92SAndroid Build Coastguard Worker // Create FlatBuffer BaseLayer
1476*89c4ff92SAndroid Build Coastguard Worker auto flatBufferBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Transpose);
1477*89c4ff92SAndroid Build Coastguard Worker
1478*89c4ff92SAndroid Build Coastguard Worker std::vector<unsigned int> dimMappings;
1479*89c4ff92SAndroid Build Coastguard Worker for (unsigned int i=0; i<descriptor.m_DimMappings.GetSize(); ++i)
1480*89c4ff92SAndroid Build Coastguard Worker {
1481*89c4ff92SAndroid Build Coastguard Worker dimMappings.push_back(descriptor.m_DimMappings[i]);
1482*89c4ff92SAndroid Build Coastguard Worker }
1483*89c4ff92SAndroid Build Coastguard Worker
1484*89c4ff92SAndroid Build Coastguard Worker auto flatBufferDesc = serializer::CreateTransposeDescriptor(m_flatBufferBuilder,
1485*89c4ff92SAndroid Build Coastguard Worker m_flatBufferBuilder.CreateVector(dimMappings));
1486*89c4ff92SAndroid Build Coastguard Worker
1487*89c4ff92SAndroid Build Coastguard Worker // Create the FlatBuffer TransposeLayer
1488*89c4ff92SAndroid Build Coastguard Worker auto flatBufferLayer = serializer::CreateTransposeLayer(m_flatBufferBuilder,
1489*89c4ff92SAndroid Build Coastguard Worker flatBufferBaseLayer,
1490*89c4ff92SAndroid Build Coastguard Worker flatBufferDesc);
1491*89c4ff92SAndroid Build Coastguard Worker
1492*89c4ff92SAndroid Build Coastguard Worker // Add the AnyLayer to the FlatBufferLayers
1493*89c4ff92SAndroid Build Coastguard Worker CreateAnyLayer(flatBufferLayer.o, serializer::Layer::Layer_TransposeLayer);
1494*89c4ff92SAndroid Build Coastguard Worker }
1495*89c4ff92SAndroid Build Coastguard Worker
SerializeQLstmLayer(const armnn::IConnectableLayer * layer,const armnn::QLstmDescriptor & descriptor,const std::vector<armnn::ConstTensor> & constants,const char * name)1496*89c4ff92SAndroid Build Coastguard Worker void SerializerStrategy::SerializeQLstmLayer(const armnn::IConnectableLayer* layer,
1497*89c4ff92SAndroid Build Coastguard Worker const armnn::QLstmDescriptor& descriptor,
1498*89c4ff92SAndroid Build Coastguard Worker const std::vector<armnn::ConstTensor>& constants,
1499*89c4ff92SAndroid Build Coastguard Worker const char* name)
1500*89c4ff92SAndroid Build Coastguard Worker {
1501*89c4ff92SAndroid Build Coastguard Worker IgnoreUnused(name);
1502*89c4ff92SAndroid Build Coastguard Worker
1503*89c4ff92SAndroid Build Coastguard Worker auto fbQLstmBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_QLstm);
1504*89c4ff92SAndroid Build Coastguard Worker
1505*89c4ff92SAndroid Build Coastguard Worker auto fbQLstmDescriptor = serializer::CreateQLstmDescriptor(
1506*89c4ff92SAndroid Build Coastguard Worker m_flatBufferBuilder,
1507*89c4ff92SAndroid Build Coastguard Worker descriptor.m_CifgEnabled,
1508*89c4ff92SAndroid Build Coastguard Worker descriptor.m_PeepholeEnabled,
1509*89c4ff92SAndroid Build Coastguard Worker descriptor.m_ProjectionEnabled,
1510*89c4ff92SAndroid Build Coastguard Worker descriptor.m_LayerNormEnabled,
1511*89c4ff92SAndroid Build Coastguard Worker descriptor.m_CellClip,
1512*89c4ff92SAndroid Build Coastguard Worker descriptor.m_ProjectionClip,
1513*89c4ff92SAndroid Build Coastguard Worker descriptor.m_InputIntermediateScale,
1514*89c4ff92SAndroid Build Coastguard Worker descriptor.m_ForgetIntermediateScale,
1515*89c4ff92SAndroid Build Coastguard Worker descriptor.m_CellIntermediateScale,
1516*89c4ff92SAndroid Build Coastguard Worker descriptor.m_OutputIntermediateScale,
1517*89c4ff92SAndroid Build Coastguard Worker descriptor.m_HiddenStateZeroPoint,
1518*89c4ff92SAndroid Build Coastguard Worker descriptor.m_HiddenStateScale
1519*89c4ff92SAndroid Build Coastguard Worker );
1520*89c4ff92SAndroid Build Coastguard Worker
1521*89c4ff92SAndroid Build Coastguard Worker // Index for constants vector
1522*89c4ff92SAndroid Build Coastguard Worker std::size_t i = 0;
1523*89c4ff92SAndroid Build Coastguard Worker
1524*89c4ff92SAndroid Build Coastguard Worker // Mandatory params
1525*89c4ff92SAndroid Build Coastguard Worker auto inputToForgetWeights = CreateConstTensorInfo(constants[i++]); //InputToForgetWeights
1526*89c4ff92SAndroid Build Coastguard Worker auto inputToCellWeights = CreateConstTensorInfo(constants[i++]); //InputToCellWeights
1527*89c4ff92SAndroid Build Coastguard Worker auto inputToOutputWeights = CreateConstTensorInfo(constants[i++]); //InputToOutputWeights
1528*89c4ff92SAndroid Build Coastguard Worker auto recurrentToForgetWeights = CreateConstTensorInfo(constants[i++]); //RecurrentToForgetWeights
1529*89c4ff92SAndroid Build Coastguard Worker auto recurrentToCellWeights = CreateConstTensorInfo(constants[i++]); //RecurrentToCellWeights
1530*89c4ff92SAndroid Build Coastguard Worker auto recurrentToOutputWeights = CreateConstTensorInfo(constants[i++]); //RecurrentToOutputWeights
1531*89c4ff92SAndroid Build Coastguard Worker auto forgetGateBias = CreateConstTensorInfo(constants[i++]); //ForgetGateBias
1532*89c4ff92SAndroid Build Coastguard Worker auto cellBias = CreateConstTensorInfo(constants[i++]); //CellBias
1533*89c4ff92SAndroid Build Coastguard Worker auto outputGateBias = CreateConstTensorInfo(constants[i++]); //OutputGateBias
1534*89c4ff92SAndroid Build Coastguard Worker
1535*89c4ff92SAndroid Build Coastguard Worker // CIFG
1536*89c4ff92SAndroid Build Coastguard Worker flatbuffers::Offset<serializer::ConstTensor> inputToInputWeights;
1537*89c4ff92SAndroid Build Coastguard Worker flatbuffers::Offset<serializer::ConstTensor> recurrentToInputWeights;
1538*89c4ff92SAndroid Build Coastguard Worker flatbuffers::Offset<serializer::ConstTensor> inputGateBias;
1539*89c4ff92SAndroid Build Coastguard Worker
1540*89c4ff92SAndroid Build Coastguard Worker if (!descriptor.m_CifgEnabled)
1541*89c4ff92SAndroid Build Coastguard Worker {
1542*89c4ff92SAndroid Build Coastguard Worker inputToInputWeights = CreateConstTensorInfo(constants[i++]); //InputToInputWeights
1543*89c4ff92SAndroid Build Coastguard Worker recurrentToInputWeights = CreateConstTensorInfo(constants[i++]); //RecurrentToInputWeights
1544*89c4ff92SAndroid Build Coastguard Worker inputGateBias = CreateConstTensorInfo(constants[i++]); //InputGateBias
1545*89c4ff92SAndroid Build Coastguard Worker }
1546*89c4ff92SAndroid Build Coastguard Worker
1547*89c4ff92SAndroid Build Coastguard Worker // Peephole
1548*89c4ff92SAndroid Build Coastguard Worker flatbuffers::Offset<serializer::ConstTensor> cellToInputWeights;
1549*89c4ff92SAndroid Build Coastguard Worker flatbuffers::Offset<serializer::ConstTensor> cellToForgetWeights;
1550*89c4ff92SAndroid Build Coastguard Worker flatbuffers::Offset<serializer::ConstTensor> cellToOutputWeights;
1551*89c4ff92SAndroid Build Coastguard Worker
1552*89c4ff92SAndroid Build Coastguard Worker if (descriptor.m_PeepholeEnabled)
1553*89c4ff92SAndroid Build Coastguard Worker {
1554*89c4ff92SAndroid Build Coastguard Worker if (!descriptor.m_CifgEnabled)
1555*89c4ff92SAndroid Build Coastguard Worker {
1556*89c4ff92SAndroid Build Coastguard Worker cellToInputWeights = CreateConstTensorInfo(constants[i++]); //CellToInputWeights
1557*89c4ff92SAndroid Build Coastguard Worker }
1558*89c4ff92SAndroid Build Coastguard Worker cellToForgetWeights = CreateConstTensorInfo(constants[i++]); //CellToForgetWeights
1559*89c4ff92SAndroid Build Coastguard Worker cellToOutputWeights = CreateConstTensorInfo(constants[i++]); //CellToOutputWeights
1560*89c4ff92SAndroid Build Coastguard Worker }
1561*89c4ff92SAndroid Build Coastguard Worker
1562*89c4ff92SAndroid Build Coastguard Worker // Projection
1563*89c4ff92SAndroid Build Coastguard Worker flatbuffers::Offset<serializer::ConstTensor> projectionWeights;
1564*89c4ff92SAndroid Build Coastguard Worker flatbuffers::Offset<serializer::ConstTensor> projectionBias;
1565*89c4ff92SAndroid Build Coastguard Worker
1566*89c4ff92SAndroid Build Coastguard Worker if (descriptor.m_ProjectionEnabled)
1567*89c4ff92SAndroid Build Coastguard Worker {
1568*89c4ff92SAndroid Build Coastguard Worker projectionWeights = CreateConstTensorInfo(constants[i++]); //ProjectionWeights
1569*89c4ff92SAndroid Build Coastguard Worker projectionBias = CreateConstTensorInfo(constants[i++]); //ProjectionBias
1570*89c4ff92SAndroid Build Coastguard Worker }
1571*89c4ff92SAndroid Build Coastguard Worker
1572*89c4ff92SAndroid Build Coastguard Worker // Layer norm
1573*89c4ff92SAndroid Build Coastguard Worker flatbuffers::Offset<serializer::ConstTensor> inputLayerNormWeights;
1574*89c4ff92SAndroid Build Coastguard Worker flatbuffers::Offset<serializer::ConstTensor> forgetLayerNormWeights;
1575*89c4ff92SAndroid Build Coastguard Worker flatbuffers::Offset<serializer::ConstTensor> cellLayerNormWeights;
1576*89c4ff92SAndroid Build Coastguard Worker flatbuffers::Offset<serializer::ConstTensor> outputLayerNormWeights;
1577*89c4ff92SAndroid Build Coastguard Worker
1578*89c4ff92SAndroid Build Coastguard Worker if (descriptor.m_LayerNormEnabled)
1579*89c4ff92SAndroid Build Coastguard Worker {
1580*89c4ff92SAndroid Build Coastguard Worker if (!descriptor.m_CifgEnabled)
1581*89c4ff92SAndroid Build Coastguard Worker {
1582*89c4ff92SAndroid Build Coastguard Worker inputLayerNormWeights = CreateConstTensorInfo(constants[i++]); //InputLayerNormWeights
1583*89c4ff92SAndroid Build Coastguard Worker }
1584*89c4ff92SAndroid Build Coastguard Worker forgetLayerNormWeights = CreateConstTensorInfo(constants[i++]); //ForgetLayerNormWeights
1585*89c4ff92SAndroid Build Coastguard Worker cellLayerNormWeights = CreateConstTensorInfo(constants[i++]); //CellLayerNormWeights
1586*89c4ff92SAndroid Build Coastguard Worker outputLayerNormWeights = CreateConstTensorInfo(constants[i++]); //OutputLayerNormWeights
1587*89c4ff92SAndroid Build Coastguard Worker }
1588*89c4ff92SAndroid Build Coastguard Worker
1589*89c4ff92SAndroid Build Coastguard Worker auto fbQLstmParams = serializer::CreateQLstmInputParams(
1590*89c4ff92SAndroid Build Coastguard Worker m_flatBufferBuilder,
1591*89c4ff92SAndroid Build Coastguard Worker inputToForgetWeights,
1592*89c4ff92SAndroid Build Coastguard Worker inputToCellWeights,
1593*89c4ff92SAndroid Build Coastguard Worker inputToOutputWeights,
1594*89c4ff92SAndroid Build Coastguard Worker recurrentToForgetWeights,
1595*89c4ff92SAndroid Build Coastguard Worker recurrentToCellWeights,
1596*89c4ff92SAndroid Build Coastguard Worker recurrentToOutputWeights,
1597*89c4ff92SAndroid Build Coastguard Worker forgetGateBias,
1598*89c4ff92SAndroid Build Coastguard Worker cellBias,
1599*89c4ff92SAndroid Build Coastguard Worker outputGateBias,
1600*89c4ff92SAndroid Build Coastguard Worker inputToInputWeights,
1601*89c4ff92SAndroid Build Coastguard Worker recurrentToInputWeights,
1602*89c4ff92SAndroid Build Coastguard Worker inputGateBias,
1603*89c4ff92SAndroid Build Coastguard Worker projectionWeights,
1604*89c4ff92SAndroid Build Coastguard Worker projectionBias,
1605*89c4ff92SAndroid Build Coastguard Worker cellToInputWeights,
1606*89c4ff92SAndroid Build Coastguard Worker cellToForgetWeights,
1607*89c4ff92SAndroid Build Coastguard Worker cellToOutputWeights,
1608*89c4ff92SAndroid Build Coastguard Worker inputLayerNormWeights,
1609*89c4ff92SAndroid Build Coastguard Worker forgetLayerNormWeights,
1610*89c4ff92SAndroid Build Coastguard Worker cellLayerNormWeights,
1611*89c4ff92SAndroid Build Coastguard Worker outputLayerNormWeights);
1612*89c4ff92SAndroid Build Coastguard Worker
1613*89c4ff92SAndroid Build Coastguard Worker auto fbQLstmLayer = serializer::CreateQLstmLayer(
1614*89c4ff92SAndroid Build Coastguard Worker m_flatBufferBuilder,
1615*89c4ff92SAndroid Build Coastguard Worker fbQLstmBaseLayer,
1616*89c4ff92SAndroid Build Coastguard Worker fbQLstmDescriptor,
1617*89c4ff92SAndroid Build Coastguard Worker fbQLstmParams);
1618*89c4ff92SAndroid Build Coastguard Worker
1619*89c4ff92SAndroid Build Coastguard Worker CreateAnyLayer(fbQLstmLayer.o, serializer::Layer::Layer_QLstmLayer);
1620*89c4ff92SAndroid Build Coastguard Worker }
1621*89c4ff92SAndroid Build Coastguard Worker
SerializeQuantizedLstmLayer(const armnn::IConnectableLayer * layer,const std::vector<armnn::ConstTensor> & constants,const char * name)1622*89c4ff92SAndroid Build Coastguard Worker void SerializerStrategy::SerializeQuantizedLstmLayer(const armnn::IConnectableLayer* layer,
1623*89c4ff92SAndroid Build Coastguard Worker const std::vector<armnn::ConstTensor>& constants,
1624*89c4ff92SAndroid Build Coastguard Worker const char* name)
1625*89c4ff92SAndroid Build Coastguard Worker {
1626*89c4ff92SAndroid Build Coastguard Worker IgnoreUnused(name);
1627*89c4ff92SAndroid Build Coastguard Worker
1628*89c4ff92SAndroid Build Coastguard Worker auto fbQuantizedLstmBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_QuantizedLstm);
1629*89c4ff92SAndroid Build Coastguard Worker
1630*89c4ff92SAndroid Build Coastguard Worker // index for constants vector
1631*89c4ff92SAndroid Build Coastguard Worker size_t i = 0;
1632*89c4ff92SAndroid Build Coastguard Worker
1633*89c4ff92SAndroid Build Coastguard Worker // Get input parameters
1634*89c4ff92SAndroid Build Coastguard Worker auto inputToInputWeights = CreateConstTensorInfo(constants[i++]);
1635*89c4ff92SAndroid Build Coastguard Worker auto inputToForgetWeights = CreateConstTensorInfo(constants[i++]);
1636*89c4ff92SAndroid Build Coastguard Worker auto inputToCellWeights = CreateConstTensorInfo(constants[i++]);
1637*89c4ff92SAndroid Build Coastguard Worker auto inputToOutputWeights = CreateConstTensorInfo(constants[i++]);
1638*89c4ff92SAndroid Build Coastguard Worker
1639*89c4ff92SAndroid Build Coastguard Worker auto recurrentToInputWeights = CreateConstTensorInfo(constants[i++]);
1640*89c4ff92SAndroid Build Coastguard Worker auto recurrentToForgetWeights = CreateConstTensorInfo(constants[i++]);
1641*89c4ff92SAndroid Build Coastguard Worker auto recurrentToCellWeights = CreateConstTensorInfo(constants[i++]);
1642*89c4ff92SAndroid Build Coastguard Worker auto recurrentToOutputWeights = CreateConstTensorInfo(constants[i++]);
1643*89c4ff92SAndroid Build Coastguard Worker
1644*89c4ff92SAndroid Build Coastguard Worker auto inputGateBias = CreateConstTensorInfo(constants[i++]);
1645*89c4ff92SAndroid Build Coastguard Worker auto forgetGateBias = CreateConstTensorInfo(constants[i++]);
1646*89c4ff92SAndroid Build Coastguard Worker auto cellBias = CreateConstTensorInfo(constants[i++]);
1647*89c4ff92SAndroid Build Coastguard Worker auto outputGateBias = CreateConstTensorInfo(constants[i++]);
1648*89c4ff92SAndroid Build Coastguard Worker
1649*89c4ff92SAndroid Build Coastguard Worker auto fbQuantizedLstmParams = serializer::CreateQuantizedLstmInputParams(
1650*89c4ff92SAndroid Build Coastguard Worker m_flatBufferBuilder,
1651*89c4ff92SAndroid Build Coastguard Worker inputToInputWeights,
1652*89c4ff92SAndroid Build Coastguard Worker inputToForgetWeights,
1653*89c4ff92SAndroid Build Coastguard Worker inputToCellWeights,
1654*89c4ff92SAndroid Build Coastguard Worker inputToOutputWeights,
1655*89c4ff92SAndroid Build Coastguard Worker recurrentToInputWeights,
1656*89c4ff92SAndroid Build Coastguard Worker recurrentToForgetWeights,
1657*89c4ff92SAndroid Build Coastguard Worker recurrentToCellWeights,
1658*89c4ff92SAndroid Build Coastguard Worker recurrentToOutputWeights,
1659*89c4ff92SAndroid Build Coastguard Worker inputGateBias,
1660*89c4ff92SAndroid Build Coastguard Worker forgetGateBias,
1661*89c4ff92SAndroid Build Coastguard Worker cellBias,
1662*89c4ff92SAndroid Build Coastguard Worker outputGateBias);
1663*89c4ff92SAndroid Build Coastguard Worker
1664*89c4ff92SAndroid Build Coastguard Worker auto fbQuantizedLstmLayer = serializer::CreateQuantizedLstmLayer(
1665*89c4ff92SAndroid Build Coastguard Worker m_flatBufferBuilder,
1666*89c4ff92SAndroid Build Coastguard Worker fbQuantizedLstmBaseLayer,
1667*89c4ff92SAndroid Build Coastguard Worker fbQuantizedLstmParams);
1668*89c4ff92SAndroid Build Coastguard Worker
1669*89c4ff92SAndroid Build Coastguard Worker CreateAnyLayer(fbQuantizedLstmLayer.o, serializer::Layer::Layer_QuantizedLstmLayer);
1670*89c4ff92SAndroid Build Coastguard Worker }
1671*89c4ff92SAndroid Build Coastguard Worker
SerializeUnidirectionalSequenceLstmLayer(const armnn::IConnectableLayer * layer,const armnn::UnidirectionalSequenceLstmDescriptor & descriptor,const std::vector<armnn::ConstTensor> & constants,const char * name)1672*89c4ff92SAndroid Build Coastguard Worker void SerializerStrategy::SerializeUnidirectionalSequenceLstmLayer(
1673*89c4ff92SAndroid Build Coastguard Worker const armnn::IConnectableLayer* layer,
1674*89c4ff92SAndroid Build Coastguard Worker const armnn::UnidirectionalSequenceLstmDescriptor& descriptor,
1675*89c4ff92SAndroid Build Coastguard Worker const std::vector<armnn::ConstTensor>& constants,
1676*89c4ff92SAndroid Build Coastguard Worker const char* name)
1677*89c4ff92SAndroid Build Coastguard Worker {
1678*89c4ff92SAndroid Build Coastguard Worker IgnoreUnused(name);
1679*89c4ff92SAndroid Build Coastguard Worker
1680*89c4ff92SAndroid Build Coastguard Worker auto fbUnidirectionalSequenceLstmBaseLayer =
1681*89c4ff92SAndroid Build Coastguard Worker CreateLayerBase(layer, serializer::LayerType::LayerType_UnidirectionalSequenceLstm);
1682*89c4ff92SAndroid Build Coastguard Worker
1683*89c4ff92SAndroid Build Coastguard Worker auto fbUnidirectionalSequenceLstmDescriptor = serializer::CreateUnidirectionalSequenceLstmDescriptor(
1684*89c4ff92SAndroid Build Coastguard Worker m_flatBufferBuilder,
1685*89c4ff92SAndroid Build Coastguard Worker descriptor.m_ActivationFunc,
1686*89c4ff92SAndroid Build Coastguard Worker descriptor.m_ClippingThresCell,
1687*89c4ff92SAndroid Build Coastguard Worker descriptor.m_ClippingThresProj,
1688*89c4ff92SAndroid Build Coastguard Worker descriptor.m_CifgEnabled,
1689*89c4ff92SAndroid Build Coastguard Worker descriptor.m_PeepholeEnabled,
1690*89c4ff92SAndroid Build Coastguard Worker descriptor.m_ProjectionEnabled,
1691*89c4ff92SAndroid Build Coastguard Worker descriptor.m_LayerNormEnabled,
1692*89c4ff92SAndroid Build Coastguard Worker descriptor.m_TimeMajor);
1693*89c4ff92SAndroid Build Coastguard Worker
1694*89c4ff92SAndroid Build Coastguard Worker // Index for constants vector
1695*89c4ff92SAndroid Build Coastguard Worker std::size_t i = 0;
1696*89c4ff92SAndroid Build Coastguard Worker
1697*89c4ff92SAndroid Build Coastguard Worker // Get mandatory/basic input parameters
1698*89c4ff92SAndroid Build Coastguard Worker auto inputToForgetWeights = CreateConstTensorInfo(constants[i++]); //InputToForgetWeights
1699*89c4ff92SAndroid Build Coastguard Worker auto inputToCellWeights = CreateConstTensorInfo(constants[i++]); //InputToCellWeights
1700*89c4ff92SAndroid Build Coastguard Worker auto inputToOutputWeights = CreateConstTensorInfo(constants[i++]); //InputToOutputWeights
1701*89c4ff92SAndroid Build Coastguard Worker auto recurrentToForgetWeights = CreateConstTensorInfo(constants[i++]); //RecurrentToForgetWeights
1702*89c4ff92SAndroid Build Coastguard Worker auto recurrentToCellWeights = CreateConstTensorInfo(constants[i++]); //RecurrentToCellWeights
1703*89c4ff92SAndroid Build Coastguard Worker auto recurrentToOutputWeights = CreateConstTensorInfo(constants[i++]); //RecurrentToOutputWeights
1704*89c4ff92SAndroid Build Coastguard Worker auto forgetGateBias = CreateConstTensorInfo(constants[i++]); //ForgetGateBias
1705*89c4ff92SAndroid Build Coastguard Worker auto cellBias = CreateConstTensorInfo(constants[i++]); //CellBias
1706*89c4ff92SAndroid Build Coastguard Worker auto outputGateBias = CreateConstTensorInfo(constants[i++]); //OutputGateBias
1707*89c4ff92SAndroid Build Coastguard Worker
1708*89c4ff92SAndroid Build Coastguard Worker //Define optional parameters, these will be set depending on configuration in Lstm descriptor
1709*89c4ff92SAndroid Build Coastguard Worker flatbuffers::Offset<serializer::ConstTensor> inputToInputWeights;
1710*89c4ff92SAndroid Build Coastguard Worker flatbuffers::Offset<serializer::ConstTensor> recurrentToInputWeights;
1711*89c4ff92SAndroid Build Coastguard Worker flatbuffers::Offset<serializer::ConstTensor> cellToInputWeights;
1712*89c4ff92SAndroid Build Coastguard Worker flatbuffers::Offset<serializer::ConstTensor> inputGateBias;
1713*89c4ff92SAndroid Build Coastguard Worker flatbuffers::Offset<serializer::ConstTensor> projectionWeights;
1714*89c4ff92SAndroid Build Coastguard Worker flatbuffers::Offset<serializer::ConstTensor> projectionBias;
1715*89c4ff92SAndroid Build Coastguard Worker flatbuffers::Offset<serializer::ConstTensor> cellToForgetWeights;
1716*89c4ff92SAndroid Build Coastguard Worker flatbuffers::Offset<serializer::ConstTensor> cellToOutputWeights;
1717*89c4ff92SAndroid Build Coastguard Worker flatbuffers::Offset<serializer::ConstTensor> inputLayerNormWeights;
1718*89c4ff92SAndroid Build Coastguard Worker flatbuffers::Offset<serializer::ConstTensor> forgetLayerNormWeights;
1719*89c4ff92SAndroid Build Coastguard Worker flatbuffers::Offset<serializer::ConstTensor> cellLayerNormWeights;
1720*89c4ff92SAndroid Build Coastguard Worker flatbuffers::Offset<serializer::ConstTensor> outputLayerNormWeights;
1721*89c4ff92SAndroid Build Coastguard Worker
1722*89c4ff92SAndroid Build Coastguard Worker if (!descriptor.m_CifgEnabled)
1723*89c4ff92SAndroid Build Coastguard Worker {
1724*89c4ff92SAndroid Build Coastguard Worker inputToInputWeights = CreateConstTensorInfo(constants[i++]); //InputToInputWeights
1725*89c4ff92SAndroid Build Coastguard Worker recurrentToInputWeights = CreateConstTensorInfo(constants[i++]); //RecurrentToInputWeights
1726*89c4ff92SAndroid Build Coastguard Worker inputGateBias = CreateConstTensorInfo(constants[i++]); //InputGateBias
1727*89c4ff92SAndroid Build Coastguard Worker }
1728*89c4ff92SAndroid Build Coastguard Worker
1729*89c4ff92SAndroid Build Coastguard Worker if (descriptor.m_PeepholeEnabled)
1730*89c4ff92SAndroid Build Coastguard Worker {
1731*89c4ff92SAndroid Build Coastguard Worker if (!descriptor.m_CifgEnabled)
1732*89c4ff92SAndroid Build Coastguard Worker {
1733*89c4ff92SAndroid Build Coastguard Worker cellToInputWeights = CreateConstTensorInfo(constants[i++]); //CellToInputWeights
1734*89c4ff92SAndroid Build Coastguard Worker }
1735*89c4ff92SAndroid Build Coastguard Worker cellToForgetWeights = CreateConstTensorInfo(constants[i++]); //CellToForgetWeights
1736*89c4ff92SAndroid Build Coastguard Worker cellToOutputWeights = CreateConstTensorInfo(constants[i++]); //CellToOutputWeights
1737*89c4ff92SAndroid Build Coastguard Worker }
1738*89c4ff92SAndroid Build Coastguard Worker
1739*89c4ff92SAndroid Build Coastguard Worker if (descriptor.m_ProjectionEnabled)
1740*89c4ff92SAndroid Build Coastguard Worker {
1741*89c4ff92SAndroid Build Coastguard Worker projectionWeights = CreateConstTensorInfo(constants[i++]); //ProjectionWeights
1742*89c4ff92SAndroid Build Coastguard Worker projectionBias = CreateConstTensorInfo(constants[i++]); //ProjectionBias
1743*89c4ff92SAndroid Build Coastguard Worker }
1744*89c4ff92SAndroid Build Coastguard Worker
1745*89c4ff92SAndroid Build Coastguard Worker if (descriptor.m_LayerNormEnabled)
1746*89c4ff92SAndroid Build Coastguard Worker {
1747*89c4ff92SAndroid Build Coastguard Worker if (!descriptor.m_CifgEnabled)
1748*89c4ff92SAndroid Build Coastguard Worker {
1749*89c4ff92SAndroid Build Coastguard Worker inputLayerNormWeights = CreateConstTensorInfo(constants[i++]); //InputLayerNormWeights
1750*89c4ff92SAndroid Build Coastguard Worker }
1751*89c4ff92SAndroid Build Coastguard Worker forgetLayerNormWeights = CreateConstTensorInfo(constants[i++]); //ForgetLayerNormWeights
1752*89c4ff92SAndroid Build Coastguard Worker cellLayerNormWeights = CreateConstTensorInfo(constants[i++]); //CellLayerNormWeights
1753*89c4ff92SAndroid Build Coastguard Worker outputLayerNormWeights = CreateConstTensorInfo(constants[i++]); //OutputLayerNormWeights
1754*89c4ff92SAndroid Build Coastguard Worker }
1755*89c4ff92SAndroid Build Coastguard Worker
1756*89c4ff92SAndroid Build Coastguard Worker auto fbUnidirectionalSequenceLstmParams = serializer::CreateLstmInputParams(
1757*89c4ff92SAndroid Build Coastguard Worker m_flatBufferBuilder,
1758*89c4ff92SAndroid Build Coastguard Worker inputToForgetWeights,
1759*89c4ff92SAndroid Build Coastguard Worker inputToCellWeights,
1760*89c4ff92SAndroid Build Coastguard Worker inputToOutputWeights,
1761*89c4ff92SAndroid Build Coastguard Worker recurrentToForgetWeights,
1762*89c4ff92SAndroid Build Coastguard Worker recurrentToCellWeights,
1763*89c4ff92SAndroid Build Coastguard Worker recurrentToOutputWeights,
1764*89c4ff92SAndroid Build Coastguard Worker forgetGateBias,
1765*89c4ff92SAndroid Build Coastguard Worker cellBias,
1766*89c4ff92SAndroid Build Coastguard Worker outputGateBias,
1767*89c4ff92SAndroid Build Coastguard Worker inputToInputWeights,
1768*89c4ff92SAndroid Build Coastguard Worker recurrentToInputWeights,
1769*89c4ff92SAndroid Build Coastguard Worker cellToInputWeights,
1770*89c4ff92SAndroid Build Coastguard Worker inputGateBias,
1771*89c4ff92SAndroid Build Coastguard Worker projectionWeights,
1772*89c4ff92SAndroid Build Coastguard Worker projectionBias,
1773*89c4ff92SAndroid Build Coastguard Worker cellToForgetWeights,
1774*89c4ff92SAndroid Build Coastguard Worker cellToOutputWeights,
1775*89c4ff92SAndroid Build Coastguard Worker inputLayerNormWeights,
1776*89c4ff92SAndroid Build Coastguard Worker forgetLayerNormWeights,
1777*89c4ff92SAndroid Build Coastguard Worker cellLayerNormWeights,
1778*89c4ff92SAndroid Build Coastguard Worker outputLayerNormWeights);
1779*89c4ff92SAndroid Build Coastguard Worker
1780*89c4ff92SAndroid Build Coastguard Worker auto fbUnidirectionalSequenceLstmLayer = serializer::CreateUnidirectionalSequenceLstmLayer(
1781*89c4ff92SAndroid Build Coastguard Worker m_flatBufferBuilder,
1782*89c4ff92SAndroid Build Coastguard Worker fbUnidirectionalSequenceLstmBaseLayer,
1783*89c4ff92SAndroid Build Coastguard Worker fbUnidirectionalSequenceLstmDescriptor,
1784*89c4ff92SAndroid Build Coastguard Worker fbUnidirectionalSequenceLstmParams);
1785*89c4ff92SAndroid Build Coastguard Worker
1786*89c4ff92SAndroid Build Coastguard Worker CreateAnyLayer(fbUnidirectionalSequenceLstmLayer.o, serializer::Layer::Layer_UnidirectionalSequenceLstmLayer);
1787*89c4ff92SAndroid Build Coastguard Worker }
1788*89c4ff92SAndroid Build Coastguard Worker
CreateLayerBase(const IConnectableLayer * layer,const serializer::LayerType layerType)1789*89c4ff92SAndroid Build Coastguard Worker fb::Offset<serializer::LayerBase> SerializerStrategy::CreateLayerBase(const IConnectableLayer* layer,
1790*89c4ff92SAndroid Build Coastguard Worker const serializer::LayerType layerType)
1791*89c4ff92SAndroid Build Coastguard Worker {
1792*89c4ff92SAndroid Build Coastguard Worker
1793*89c4ff92SAndroid Build Coastguard Worker uint32_t fbIndex = GetSerializedId(layer->GetGuid());
1794*89c4ff92SAndroid Build Coastguard Worker
1795*89c4ff92SAndroid Build Coastguard Worker std::vector<fb::Offset<serializer::InputSlot>> inputSlots = CreateInputSlots(layer);
1796*89c4ff92SAndroid Build Coastguard Worker std::vector<fb::Offset<serializer::OutputSlot>> outputSlots = CreateOutputSlots(layer);
1797*89c4ff92SAndroid Build Coastguard Worker
1798*89c4ff92SAndroid Build Coastguard Worker return serializer::CreateLayerBase(m_flatBufferBuilder,
1799*89c4ff92SAndroid Build Coastguard Worker fbIndex,
1800*89c4ff92SAndroid Build Coastguard Worker m_flatBufferBuilder.CreateString(layer->GetName()),
1801*89c4ff92SAndroid Build Coastguard Worker layerType,
1802*89c4ff92SAndroid Build Coastguard Worker m_flatBufferBuilder.CreateVector(inputSlots),
1803*89c4ff92SAndroid Build Coastguard Worker m_flatBufferBuilder.CreateVector(outputSlots));
1804*89c4ff92SAndroid Build Coastguard Worker }
1805*89c4ff92SAndroid Build Coastguard Worker
CreateAnyLayer(const flatbuffers::Offset<void> & layer,const serializer::Layer serializerLayer)1806*89c4ff92SAndroid Build Coastguard Worker void SerializerStrategy::CreateAnyLayer(const flatbuffers::Offset<void>& layer, const serializer::Layer serializerLayer)
1807*89c4ff92SAndroid Build Coastguard Worker {
1808*89c4ff92SAndroid Build Coastguard Worker
1809*89c4ff92SAndroid Build Coastguard Worker auto anyLayer = armnnSerializer::CreateAnyLayer(m_flatBufferBuilder, serializerLayer, layer);
1810*89c4ff92SAndroid Build Coastguard Worker m_serializedLayers.push_back(anyLayer);
1811*89c4ff92SAndroid Build Coastguard Worker }
1812*89c4ff92SAndroid Build Coastguard Worker
1813*89c4ff92SAndroid Build Coastguard Worker template <typename T>
CreateDataVector(const void * memory,unsigned int size)1814*89c4ff92SAndroid Build Coastguard Worker flatbuffers::Offset<flatbuffers::Vector<T>> SerializerStrategy::CreateDataVector(const void* memory, unsigned int size)
1815*89c4ff92SAndroid Build Coastguard Worker {
1816*89c4ff92SAndroid Build Coastguard Worker const T* buffer = reinterpret_cast<const T*>(memory);
1817*89c4ff92SAndroid Build Coastguard Worker std::vector<T> vector(buffer, buffer + (size / sizeof(T)));
1818*89c4ff92SAndroid Build Coastguard Worker auto fbVector = m_flatBufferBuilder.CreateVector(vector);
1819*89c4ff92SAndroid Build Coastguard Worker return fbVector;
1820*89c4ff92SAndroid Build Coastguard Worker }
1821*89c4ff92SAndroid Build Coastguard Worker
CreateTensorInfo(const armnn::TensorInfo & tensorInfo)1822*89c4ff92SAndroid Build Coastguard Worker flatbuffers::Offset<TensorInfo> SerializerStrategy::CreateTensorInfo(const armnn::TensorInfo& tensorInfo)
1823*89c4ff92SAndroid Build Coastguard Worker {
1824*89c4ff92SAndroid Build Coastguard Worker // Get the dimensions
1825*89c4ff92SAndroid Build Coastguard Worker std::vector<unsigned int> shape;
1826*89c4ff92SAndroid Build Coastguard Worker std::vector<bool> specificity;
1827*89c4ff92SAndroid Build Coastguard Worker // This assumes that the TensorShape constructors have ensured that the size of m_DimensionsSpecificity
1828*89c4ff92SAndroid Build Coastguard Worker // matches the size of dimensions.
1829*89c4ff92SAndroid Build Coastguard Worker for(unsigned int dim = 0; dim < tensorInfo.GetShape().GetNumDimensions(); ++dim)
1830*89c4ff92SAndroid Build Coastguard Worker {
1831*89c4ff92SAndroid Build Coastguard Worker specificity.push_back(tensorInfo.GetShape().GetDimensionSpecificity(dim));
1832*89c4ff92SAndroid Build Coastguard Worker
1833*89c4ff92SAndroid Build Coastguard Worker if (tensorInfo.GetShape().GetDimensionSpecificity(dim))
1834*89c4ff92SAndroid Build Coastguard Worker {
1835*89c4ff92SAndroid Build Coastguard Worker shape.push_back(tensorInfo.GetShape()[dim]);
1836*89c4ff92SAndroid Build Coastguard Worker }
1837*89c4ff92SAndroid Build Coastguard Worker else
1838*89c4ff92SAndroid Build Coastguard Worker {
1839*89c4ff92SAndroid Build Coastguard Worker shape.push_back(0);
1840*89c4ff92SAndroid Build Coastguard Worker }
1841*89c4ff92SAndroid Build Coastguard Worker }
1842*89c4ff92SAndroid Build Coastguard Worker
1843*89c4ff92SAndroid Build Coastguard Worker if (tensorInfo.HasPerAxisQuantization())
1844*89c4ff92SAndroid Build Coastguard Worker {
1845*89c4ff92SAndroid Build Coastguard Worker // Create FlatBuffer TensorInfo
1846*89c4ff92SAndroid Build Coastguard Worker auto flatBufferTensorInfo =
1847*89c4ff92SAndroid Build Coastguard Worker serializer::CreateTensorInfo(m_flatBufferBuilder,
1848*89c4ff92SAndroid Build Coastguard Worker m_flatBufferBuilder.CreateVector(shape),
1849*89c4ff92SAndroid Build Coastguard Worker GetFlatBufferDataType(tensorInfo.GetDataType()),
1850*89c4ff92SAndroid Build Coastguard Worker tensorInfo.GetQuantizationScales()[0],
1851*89c4ff92SAndroid Build Coastguard Worker tensorInfo.GetQuantizationOffset(),
1852*89c4ff92SAndroid Build Coastguard Worker m_flatBufferBuilder.CreateVector(tensorInfo.GetQuantizationScales()),
1853*89c4ff92SAndroid Build Coastguard Worker tensorInfo.GetQuantizationDim().value(),
1854*89c4ff92SAndroid Build Coastguard Worker static_cast<unsigned int>
1855*89c4ff92SAndroid Build Coastguard Worker (tensorInfo.GetShape().GetDimensionality()),
1856*89c4ff92SAndroid Build Coastguard Worker m_flatBufferBuilder.CreateVector(specificity));
1857*89c4ff92SAndroid Build Coastguard Worker return flatBufferTensorInfo;
1858*89c4ff92SAndroid Build Coastguard Worker }
1859*89c4ff92SAndroid Build Coastguard Worker
1860*89c4ff92SAndroid Build Coastguard Worker // Create FlatBuffer TensorInfo
1861*89c4ff92SAndroid Build Coastguard Worker auto flatBufferTensorInfo = serializer::CreateTensorInfo(m_flatBufferBuilder,
1862*89c4ff92SAndroid Build Coastguard Worker m_flatBufferBuilder.CreateVector(shape),
1863*89c4ff92SAndroid Build Coastguard Worker GetFlatBufferDataType(tensorInfo.GetDataType()),
1864*89c4ff92SAndroid Build Coastguard Worker tensorInfo.GetQuantizationScale(),
1865*89c4ff92SAndroid Build Coastguard Worker tensorInfo.GetQuantizationOffset(),
1866*89c4ff92SAndroid Build Coastguard Worker 0,
1867*89c4ff92SAndroid Build Coastguard Worker 0,
1868*89c4ff92SAndroid Build Coastguard Worker static_cast<unsigned int>
1869*89c4ff92SAndroid Build Coastguard Worker (tensorInfo.GetShape().GetDimensionality()),
1870*89c4ff92SAndroid Build Coastguard Worker m_flatBufferBuilder.CreateVector(specificity));
1871*89c4ff92SAndroid Build Coastguard Worker return flatBufferTensorInfo;
1872*89c4ff92SAndroid Build Coastguard Worker }
1873*89c4ff92SAndroid Build Coastguard Worker
1874*89c4ff92SAndroid Build Coastguard Worker flatbuffers::Offset<serializer::ConstTensor>
CreateConstTensorInfo(const armnn::ConstTensor & constTensor)1875*89c4ff92SAndroid Build Coastguard Worker SerializerStrategy::CreateConstTensorInfo(const armnn::ConstTensor& constTensor)
1876*89c4ff92SAndroid Build Coastguard Worker {
1877*89c4ff92SAndroid Build Coastguard Worker armnn::TensorInfo tensorInfo = constTensor.GetInfo();
1878*89c4ff92SAndroid Build Coastguard Worker
1879*89c4ff92SAndroid Build Coastguard Worker flatbuffers::Offset<void> fbPayload;
1880*89c4ff92SAndroid Build Coastguard Worker
1881*89c4ff92SAndroid Build Coastguard Worker switch (tensorInfo.GetDataType())
1882*89c4ff92SAndroid Build Coastguard Worker {
1883*89c4ff92SAndroid Build Coastguard Worker case armnn::DataType::Signed64:
1884*89c4ff92SAndroid Build Coastguard Worker {
1885*89c4ff92SAndroid Build Coastguard Worker auto fbVector = CreateDataVector<int64_t>(constTensor.GetMemoryArea(), constTensor.GetNumBytes());
1886*89c4ff92SAndroid Build Coastguard Worker flatbuffers::Offset<serializer::LongData> flatBuffersData = serializer::CreateLongData(
1887*89c4ff92SAndroid Build Coastguard Worker m_flatBufferBuilder,
1888*89c4ff92SAndroid Build Coastguard Worker fbVector);
1889*89c4ff92SAndroid Build Coastguard Worker fbPayload = flatBuffersData.o;
1890*89c4ff92SAndroid Build Coastguard Worker break;
1891*89c4ff92SAndroid Build Coastguard Worker }
1892*89c4ff92SAndroid Build Coastguard Worker case armnn::DataType::Float32:
1893*89c4ff92SAndroid Build Coastguard Worker case armnn::DataType::Signed32:
1894*89c4ff92SAndroid Build Coastguard Worker {
1895*89c4ff92SAndroid Build Coastguard Worker auto fbVector = CreateDataVector<int32_t>(constTensor.GetMemoryArea(), constTensor.GetNumBytes());
1896*89c4ff92SAndroid Build Coastguard Worker flatbuffers::Offset<serializer::IntData> flatBuffersData = serializer::CreateIntData(
1897*89c4ff92SAndroid Build Coastguard Worker m_flatBufferBuilder,
1898*89c4ff92SAndroid Build Coastguard Worker fbVector);
1899*89c4ff92SAndroid Build Coastguard Worker fbPayload = flatBuffersData.o;
1900*89c4ff92SAndroid Build Coastguard Worker break;
1901*89c4ff92SAndroid Build Coastguard Worker }
1902*89c4ff92SAndroid Build Coastguard Worker case armnn::DataType::Float16:
1903*89c4ff92SAndroid Build Coastguard Worker case armnn::DataType::BFloat16:
1904*89c4ff92SAndroid Build Coastguard Worker case armnn::DataType::QSymmS16:
1905*89c4ff92SAndroid Build Coastguard Worker {
1906*89c4ff92SAndroid Build Coastguard Worker auto fbVector = CreateDataVector<int16_t>(constTensor.GetMemoryArea(), constTensor.GetNumBytes());
1907*89c4ff92SAndroid Build Coastguard Worker flatbuffers::Offset<serializer::ShortData> flatBuffersData = serializer::CreateShortData(
1908*89c4ff92SAndroid Build Coastguard Worker m_flatBufferBuilder,
1909*89c4ff92SAndroid Build Coastguard Worker fbVector);
1910*89c4ff92SAndroid Build Coastguard Worker fbPayload = flatBuffersData.o;
1911*89c4ff92SAndroid Build Coastguard Worker break;
1912*89c4ff92SAndroid Build Coastguard Worker }
1913*89c4ff92SAndroid Build Coastguard Worker case armnn::DataType::QSymmS8:
1914*89c4ff92SAndroid Build Coastguard Worker case armnn::DataType::QAsymmS8:
1915*89c4ff92SAndroid Build Coastguard Worker case armnn::DataType::QAsymmU8:
1916*89c4ff92SAndroid Build Coastguard Worker case armnn::DataType::Boolean:
1917*89c4ff92SAndroid Build Coastguard Worker default:
1918*89c4ff92SAndroid Build Coastguard Worker {
1919*89c4ff92SAndroid Build Coastguard Worker auto fbVector = CreateDataVector<int8_t>(constTensor.GetMemoryArea(), constTensor.GetNumBytes());
1920*89c4ff92SAndroid Build Coastguard Worker flatbuffers::Offset<serializer::ByteData> flatBuffersData = serializer::CreateByteData(
1921*89c4ff92SAndroid Build Coastguard Worker m_flatBufferBuilder,
1922*89c4ff92SAndroid Build Coastguard Worker fbVector);
1923*89c4ff92SAndroid Build Coastguard Worker fbPayload = flatBuffersData.o;
1924*89c4ff92SAndroid Build Coastguard Worker }
1925*89c4ff92SAndroid Build Coastguard Worker }
1926*89c4ff92SAndroid Build Coastguard Worker flatbuffers::Offset<serializer::ConstTensor> flatBufferConstTensor = serializer::CreateConstTensor(
1927*89c4ff92SAndroid Build Coastguard Worker m_flatBufferBuilder,
1928*89c4ff92SAndroid Build Coastguard Worker CreateTensorInfo(tensorInfo),
1929*89c4ff92SAndroid Build Coastguard Worker GetFlatBufferConstTensorData(tensorInfo.GetDataType()),
1930*89c4ff92SAndroid Build Coastguard Worker fbPayload);
1931*89c4ff92SAndroid Build Coastguard Worker return flatBufferConstTensor;
1932*89c4ff92SAndroid Build Coastguard Worker }
1933*89c4ff92SAndroid Build Coastguard Worker
GetVersionTable()1934*89c4ff92SAndroid Build Coastguard Worker flatbuffers::Offset<armnnSerializer::FeatureCompatibilityVersions> SerializerStrategy::GetVersionTable()
1935*89c4ff92SAndroid Build Coastguard Worker {
1936*89c4ff92SAndroid Build Coastguard Worker flatbuffers::Offset<armnnSerializer::FeatureCompatibilityVersions> versionsTable =
1937*89c4ff92SAndroid Build Coastguard Worker serializer::CreateFeatureCompatibilityVersions(
1938*89c4ff92SAndroid Build Coastguard Worker m_flatBufferBuilder,
1939*89c4ff92SAndroid Build Coastguard Worker 1, // Binding ids scheme version
1940*89c4ff92SAndroid Build Coastguard Worker 1, // Weights layout scheme version
1941*89c4ff92SAndroid Build Coastguard Worker 1 // Constant tensors as inputs version
1942*89c4ff92SAndroid Build Coastguard Worker );
1943*89c4ff92SAndroid Build Coastguard Worker return versionsTable;
1944*89c4ff92SAndroid Build Coastguard Worker }
1945*89c4ff92SAndroid Build Coastguard Worker
1946*89c4ff92SAndroid Build Coastguard Worker std::vector<fb::Offset<serializer::InputSlot>>
CreateInputSlots(const armnn::IConnectableLayer * layer)1947*89c4ff92SAndroid Build Coastguard Worker SerializerStrategy::CreateInputSlots(const armnn::IConnectableLayer* layer)
1948*89c4ff92SAndroid Build Coastguard Worker {
1949*89c4ff92SAndroid Build Coastguard Worker std::vector<fb::Offset<serializer::InputSlot>> inputSlots;
1950*89c4ff92SAndroid Build Coastguard Worker
1951*89c4ff92SAndroid Build Coastguard Worker // Get the InputSlots
1952*89c4ff92SAndroid Build Coastguard Worker for (unsigned int slotIndex = 0; slotIndex<layer->GetNumInputSlots(); ++slotIndex)
1953*89c4ff92SAndroid Build Coastguard Worker {
1954*89c4ff92SAndroid Build Coastguard Worker const IInputSlot& inputSlot = layer->GetInputSlot(slotIndex);
1955*89c4ff92SAndroid Build Coastguard Worker
1956*89c4ff92SAndroid Build Coastguard Worker // Get the Connection for the InputSlot
1957*89c4ff92SAndroid Build Coastguard Worker const IOutputSlot* connection = inputSlot.GetConnection();
1958*89c4ff92SAndroid Build Coastguard Worker
1959*89c4ff92SAndroid Build Coastguard Worker // Create FlatBuffer Connection
1960*89c4ff92SAndroid Build Coastguard Worker serializer::Connection conn(GetSerializedId(inputSlot.GetConnection()->GetOwningLayerGuid()),
1961*89c4ff92SAndroid Build Coastguard Worker connection->CalculateIndexOnOwner());
1962*89c4ff92SAndroid Build Coastguard Worker // Create FlatBuffer InputSlot
1963*89c4ff92SAndroid Build Coastguard Worker inputSlots.push_back(serializer::CreateInputSlot(m_flatBufferBuilder, slotIndex, &conn));
1964*89c4ff92SAndroid Build Coastguard Worker }
1965*89c4ff92SAndroid Build Coastguard Worker return inputSlots;
1966*89c4ff92SAndroid Build Coastguard Worker }
1967*89c4ff92SAndroid Build Coastguard Worker
1968*89c4ff92SAndroid Build Coastguard Worker std::vector<fb::Offset<serializer::OutputSlot>>
CreateOutputSlots(const armnn::IConnectableLayer * layer)1969*89c4ff92SAndroid Build Coastguard Worker SerializerStrategy::CreateOutputSlots(const armnn::IConnectableLayer* layer)
1970*89c4ff92SAndroid Build Coastguard Worker {
1971*89c4ff92SAndroid Build Coastguard Worker std::vector<fb::Offset<serializer::OutputSlot>> outputSlots;
1972*89c4ff92SAndroid Build Coastguard Worker
1973*89c4ff92SAndroid Build Coastguard Worker // Get the OutputSlots
1974*89c4ff92SAndroid Build Coastguard Worker for (unsigned int slotIndex = 0; slotIndex < layer->GetNumOutputSlots(); ++slotIndex)
1975*89c4ff92SAndroid Build Coastguard Worker {
1976*89c4ff92SAndroid Build Coastguard Worker const IOutputSlot& outputSlot = layer->GetOutputSlot(slotIndex);
1977*89c4ff92SAndroid Build Coastguard Worker const armnn::TensorInfo& tensorInfo = outputSlot.GetTensorInfo();
1978*89c4ff92SAndroid Build Coastguard Worker
1979*89c4ff92SAndroid Build Coastguard Worker // Create FlatBuffer Outputslot
1980*89c4ff92SAndroid Build Coastguard Worker outputSlots.push_back(serializer::CreateOutputSlot(m_flatBufferBuilder,
1981*89c4ff92SAndroid Build Coastguard Worker slotIndex,
1982*89c4ff92SAndroid Build Coastguard Worker CreateTensorInfo(tensorInfo)));
1983*89c4ff92SAndroid Build Coastguard Worker }
1984*89c4ff92SAndroid Build Coastguard Worker return outputSlots;
1985*89c4ff92SAndroid Build Coastguard Worker }
1986*89c4ff92SAndroid Build Coastguard Worker
ExecuteStrategy(const armnn::IConnectableLayer * layer,const BaseDescriptor & descriptor,const std::vector<armnn::ConstTensor> & constants,const char * name,const armnn::LayerBindingId id)1987*89c4ff92SAndroid Build Coastguard Worker void SerializerStrategy::ExecuteStrategy(const armnn::IConnectableLayer* layer,
1988*89c4ff92SAndroid Build Coastguard Worker const BaseDescriptor& descriptor,
1989*89c4ff92SAndroid Build Coastguard Worker const std::vector<armnn::ConstTensor>& constants,
1990*89c4ff92SAndroid Build Coastguard Worker const char* name,
1991*89c4ff92SAndroid Build Coastguard Worker const armnn::LayerBindingId id)
1992*89c4ff92SAndroid Build Coastguard Worker {
1993*89c4ff92SAndroid Build Coastguard Worker IgnoreUnused(constants);
1994*89c4ff92SAndroid Build Coastguard Worker
1995*89c4ff92SAndroid Build Coastguard Worker switch (layer->GetType())
1996*89c4ff92SAndroid Build Coastguard Worker {
1997*89c4ff92SAndroid Build Coastguard Worker case armnn::LayerType::Activation :
1998*89c4ff92SAndroid Build Coastguard Worker {
1999*89c4ff92SAndroid Build Coastguard Worker const armnn::ActivationDescriptor& layerDescriptor =
2000*89c4ff92SAndroid Build Coastguard Worker static_cast<const armnn::ActivationDescriptor&>(descriptor);
2001*89c4ff92SAndroid Build Coastguard Worker SerializeActivationLayer(layer, layerDescriptor, name);
2002*89c4ff92SAndroid Build Coastguard Worker break;
2003*89c4ff92SAndroid Build Coastguard Worker }
2004*89c4ff92SAndroid Build Coastguard Worker case armnn::LayerType::Addition :
2005*89c4ff92SAndroid Build Coastguard Worker {
2006*89c4ff92SAndroid Build Coastguard Worker SerializeAdditionLayer(layer, name);
2007*89c4ff92SAndroid Build Coastguard Worker break;
2008*89c4ff92SAndroid Build Coastguard Worker }
2009*89c4ff92SAndroid Build Coastguard Worker case armnn::LayerType::ArgMinMax :
2010*89c4ff92SAndroid Build Coastguard Worker {
2011*89c4ff92SAndroid Build Coastguard Worker const armnn::ArgMinMaxDescriptor& layerDescriptor =
2012*89c4ff92SAndroid Build Coastguard Worker static_cast<const armnn::ArgMinMaxDescriptor&>(descriptor);
2013*89c4ff92SAndroid Build Coastguard Worker SerializeArgMinMaxLayer(layer, layerDescriptor, name);
2014*89c4ff92SAndroid Build Coastguard Worker break;
2015*89c4ff92SAndroid Build Coastguard Worker }
2016*89c4ff92SAndroid Build Coastguard Worker case armnn::LayerType::BatchMatMul:
2017*89c4ff92SAndroid Build Coastguard Worker {
2018*89c4ff92SAndroid Build Coastguard Worker const armnn::BatchMatMulDescriptor& layerDescriptor =
2019*89c4ff92SAndroid Build Coastguard Worker static_cast<const armnn::BatchMatMulDescriptor&>(descriptor);
2020*89c4ff92SAndroid Build Coastguard Worker SerializeBatchMatMulLayer(layer,
2021*89c4ff92SAndroid Build Coastguard Worker layerDescriptor,
2022*89c4ff92SAndroid Build Coastguard Worker name);
2023*89c4ff92SAndroid Build Coastguard Worker break;
2024*89c4ff92SAndroid Build Coastguard Worker }
2025*89c4ff92SAndroid Build Coastguard Worker case armnn::LayerType::BatchNormalization :
2026*89c4ff92SAndroid Build Coastguard Worker {
2027*89c4ff92SAndroid Build Coastguard Worker const armnn::BatchNormalizationDescriptor& layerDescriptor =
2028*89c4ff92SAndroid Build Coastguard Worker static_cast<const armnn::BatchNormalizationDescriptor&>(descriptor);
2029*89c4ff92SAndroid Build Coastguard Worker SerializeBatchNormalizationLayer(layer,
2030*89c4ff92SAndroid Build Coastguard Worker layerDescriptor,
2031*89c4ff92SAndroid Build Coastguard Worker constants,
2032*89c4ff92SAndroid Build Coastguard Worker name);
2033*89c4ff92SAndroid Build Coastguard Worker break;
2034*89c4ff92SAndroid Build Coastguard Worker }
2035*89c4ff92SAndroid Build Coastguard Worker case armnn::LayerType::BatchToSpaceNd :
2036*89c4ff92SAndroid Build Coastguard Worker {
2037*89c4ff92SAndroid Build Coastguard Worker const armnn::BatchToSpaceNdDescriptor& layerDescriptor =
2038*89c4ff92SAndroid Build Coastguard Worker static_cast<const armnn::BatchToSpaceNdDescriptor&>(descriptor);
2039*89c4ff92SAndroid Build Coastguard Worker SerializeBatchToSpaceNdLayer(layer,
2040*89c4ff92SAndroid Build Coastguard Worker layerDescriptor,
2041*89c4ff92SAndroid Build Coastguard Worker name);
2042*89c4ff92SAndroid Build Coastguard Worker break;
2043*89c4ff92SAndroid Build Coastguard Worker }
2044*89c4ff92SAndroid Build Coastguard Worker case armnn::LayerType::Cast :
2045*89c4ff92SAndroid Build Coastguard Worker {
2046*89c4ff92SAndroid Build Coastguard Worker SerializeCastLayer(layer, name);
2047*89c4ff92SAndroid Build Coastguard Worker break;
2048*89c4ff92SAndroid Build Coastguard Worker }
2049*89c4ff92SAndroid Build Coastguard Worker case armnn::LayerType::ChannelShuffle :
2050*89c4ff92SAndroid Build Coastguard Worker {
2051*89c4ff92SAndroid Build Coastguard Worker const armnn::ChannelShuffleDescriptor& layerDescriptor =
2052*89c4ff92SAndroid Build Coastguard Worker static_cast<const armnn::ChannelShuffleDescriptor&>(descriptor);
2053*89c4ff92SAndroid Build Coastguard Worker SerializeChannelShuffleLayer(layer,
2054*89c4ff92SAndroid Build Coastguard Worker layerDescriptor,
2055*89c4ff92SAndroid Build Coastguard Worker name);
2056*89c4ff92SAndroid Build Coastguard Worker break;
2057*89c4ff92SAndroid Build Coastguard Worker }
2058*89c4ff92SAndroid Build Coastguard Worker case armnn::LayerType::Comparison :
2059*89c4ff92SAndroid Build Coastguard Worker {
2060*89c4ff92SAndroid Build Coastguard Worker const armnn::ComparisonDescriptor& layerDescriptor =
2061*89c4ff92SAndroid Build Coastguard Worker static_cast<const armnn::ComparisonDescriptor&>(descriptor);
2062*89c4ff92SAndroid Build Coastguard Worker SerializeComparisonLayer(layer,
2063*89c4ff92SAndroid Build Coastguard Worker layerDescriptor,
2064*89c4ff92SAndroid Build Coastguard Worker name);
2065*89c4ff92SAndroid Build Coastguard Worker break;
2066*89c4ff92SAndroid Build Coastguard Worker }
2067*89c4ff92SAndroid Build Coastguard Worker case armnn::LayerType::Concat :
2068*89c4ff92SAndroid Build Coastguard Worker {
2069*89c4ff92SAndroid Build Coastguard Worker const armnn::ConcatDescriptor& layerDescriptor =
2070*89c4ff92SAndroid Build Coastguard Worker static_cast<const armnn::ConcatDescriptor&>(descriptor);
2071*89c4ff92SAndroid Build Coastguard Worker SerializeConcatLayer(layer,
2072*89c4ff92SAndroid Build Coastguard Worker layerDescriptor,
2073*89c4ff92SAndroid Build Coastguard Worker name);
2074*89c4ff92SAndroid Build Coastguard Worker break;
2075*89c4ff92SAndroid Build Coastguard Worker }
2076*89c4ff92SAndroid Build Coastguard Worker case armnn::LayerType::Constant :
2077*89c4ff92SAndroid Build Coastguard Worker {
2078*89c4ff92SAndroid Build Coastguard Worker SerializeConstantLayer(layer,
2079*89c4ff92SAndroid Build Coastguard Worker constants,
2080*89c4ff92SAndroid Build Coastguard Worker name);
2081*89c4ff92SAndroid Build Coastguard Worker break;
2082*89c4ff92SAndroid Build Coastguard Worker }
2083*89c4ff92SAndroid Build Coastguard Worker case armnn::LayerType::Convolution2d :
2084*89c4ff92SAndroid Build Coastguard Worker {
2085*89c4ff92SAndroid Build Coastguard Worker const armnn::Convolution2dDescriptor& layerDescriptor =
2086*89c4ff92SAndroid Build Coastguard Worker static_cast<const armnn::Convolution2dDescriptor&>(descriptor);
2087*89c4ff92SAndroid Build Coastguard Worker SerializeConvolution2dLayer(layer,
2088*89c4ff92SAndroid Build Coastguard Worker layerDescriptor,
2089*89c4ff92SAndroid Build Coastguard Worker name);
2090*89c4ff92SAndroid Build Coastguard Worker break;
2091*89c4ff92SAndroid Build Coastguard Worker }
2092*89c4ff92SAndroid Build Coastguard Worker case armnn::LayerType::Convolution3d :
2093*89c4ff92SAndroid Build Coastguard Worker {
2094*89c4ff92SAndroid Build Coastguard Worker const armnn::Convolution3dDescriptor& layerDescriptor =
2095*89c4ff92SAndroid Build Coastguard Worker static_cast<const armnn::Convolution3dDescriptor&>(descriptor);
2096*89c4ff92SAndroid Build Coastguard Worker SerializeConvolution3dLayer(layer,
2097*89c4ff92SAndroid Build Coastguard Worker layerDescriptor,
2098*89c4ff92SAndroid Build Coastguard Worker name);
2099*89c4ff92SAndroid Build Coastguard Worker break;
2100*89c4ff92SAndroid Build Coastguard Worker }
2101*89c4ff92SAndroid Build Coastguard Worker case armnn::LayerType::DepthToSpace :
2102*89c4ff92SAndroid Build Coastguard Worker {
2103*89c4ff92SAndroid Build Coastguard Worker const armnn::DepthToSpaceDescriptor& layerDescriptor =
2104*89c4ff92SAndroid Build Coastguard Worker static_cast<const armnn::DepthToSpaceDescriptor&>(descriptor);
2105*89c4ff92SAndroid Build Coastguard Worker SerializeDepthToSpaceLayer(layer,
2106*89c4ff92SAndroid Build Coastguard Worker layerDescriptor,
2107*89c4ff92SAndroid Build Coastguard Worker name);
2108*89c4ff92SAndroid Build Coastguard Worker break;
2109*89c4ff92SAndroid Build Coastguard Worker }
2110*89c4ff92SAndroid Build Coastguard Worker case armnn::LayerType::DepthwiseConvolution2d :
2111*89c4ff92SAndroid Build Coastguard Worker {
2112*89c4ff92SAndroid Build Coastguard Worker const armnn::DepthwiseConvolution2dDescriptor& layerDescriptor =
2113*89c4ff92SAndroid Build Coastguard Worker static_cast<const armnn::DepthwiseConvolution2dDescriptor&>(descriptor);
2114*89c4ff92SAndroid Build Coastguard Worker SerializeDepthwiseConvolution2dLayer(layer,
2115*89c4ff92SAndroid Build Coastguard Worker layerDescriptor,
2116*89c4ff92SAndroid Build Coastguard Worker name);
2117*89c4ff92SAndroid Build Coastguard Worker break;
2118*89c4ff92SAndroid Build Coastguard Worker }
2119*89c4ff92SAndroid Build Coastguard Worker case armnn::LayerType::Dequantize :
2120*89c4ff92SAndroid Build Coastguard Worker {
2121*89c4ff92SAndroid Build Coastguard Worker SerializeDequantizeLayer(layer,
2122*89c4ff92SAndroid Build Coastguard Worker name);
2123*89c4ff92SAndroid Build Coastguard Worker break;
2124*89c4ff92SAndroid Build Coastguard Worker }
2125*89c4ff92SAndroid Build Coastguard Worker case armnn::LayerType::DetectionPostProcess :
2126*89c4ff92SAndroid Build Coastguard Worker {
2127*89c4ff92SAndroid Build Coastguard Worker const armnn::DetectionPostProcessDescriptor& layerDescriptor =
2128*89c4ff92SAndroid Build Coastguard Worker static_cast<const armnn::DetectionPostProcessDescriptor&>(descriptor);
2129*89c4ff92SAndroid Build Coastguard Worker SerializeDetectionPostProcessLayer(layer, layerDescriptor, constants, name);
2130*89c4ff92SAndroid Build Coastguard Worker break;
2131*89c4ff92SAndroid Build Coastguard Worker }
2132*89c4ff92SAndroid Build Coastguard Worker case armnn::LayerType::Division :
2133*89c4ff92SAndroid Build Coastguard Worker {
2134*89c4ff92SAndroid Build Coastguard Worker SerializeDivisionLayer(layer, name);
2135*89c4ff92SAndroid Build Coastguard Worker break;
2136*89c4ff92SAndroid Build Coastguard Worker }
2137*89c4ff92SAndroid Build Coastguard Worker case armnn::LayerType::ElementwiseBinary :
2138*89c4ff92SAndroid Build Coastguard Worker {
2139*89c4ff92SAndroid Build Coastguard Worker const armnn::ElementwiseBinaryDescriptor& layerDescriptor =
2140*89c4ff92SAndroid Build Coastguard Worker static_cast<const armnn::ElementwiseBinaryDescriptor&>(descriptor);
2141*89c4ff92SAndroid Build Coastguard Worker SerializeElementwiseBinaryLayer(layer, layerDescriptor, name);
2142*89c4ff92SAndroid Build Coastguard Worker break;
2143*89c4ff92SAndroid Build Coastguard Worker }
2144*89c4ff92SAndroid Build Coastguard Worker case armnn::LayerType::ElementwiseUnary :
2145*89c4ff92SAndroid Build Coastguard Worker {
2146*89c4ff92SAndroid Build Coastguard Worker const armnn::ElementwiseUnaryDescriptor& layerDescriptor =
2147*89c4ff92SAndroid Build Coastguard Worker static_cast<const armnn::ElementwiseUnaryDescriptor&>(descriptor);
2148*89c4ff92SAndroid Build Coastguard Worker SerializeElementwiseUnaryLayer(layer, layerDescriptor, name);
2149*89c4ff92SAndroid Build Coastguard Worker break;
2150*89c4ff92SAndroid Build Coastguard Worker }
2151*89c4ff92SAndroid Build Coastguard Worker case armnn::LayerType::Fill :
2152*89c4ff92SAndroid Build Coastguard Worker {
2153*89c4ff92SAndroid Build Coastguard Worker const armnn::FillDescriptor& layerDescriptor =
2154*89c4ff92SAndroid Build Coastguard Worker static_cast<const armnn::FillDescriptor&>(descriptor);
2155*89c4ff92SAndroid Build Coastguard Worker SerializeFillLayer(layer, layerDescriptor, name);
2156*89c4ff92SAndroid Build Coastguard Worker break;
2157*89c4ff92SAndroid Build Coastguard Worker }
2158*89c4ff92SAndroid Build Coastguard Worker case armnn::LayerType::Floor :
2159*89c4ff92SAndroid Build Coastguard Worker {
2160*89c4ff92SAndroid Build Coastguard Worker SerializeFloorLayer(layer, name);
2161*89c4ff92SAndroid Build Coastguard Worker break;
2162*89c4ff92SAndroid Build Coastguard Worker }
2163*89c4ff92SAndroid Build Coastguard Worker case armnn::LayerType::FullyConnected :
2164*89c4ff92SAndroid Build Coastguard Worker {
2165*89c4ff92SAndroid Build Coastguard Worker const armnn::FullyConnectedDescriptor& layerDescriptor =
2166*89c4ff92SAndroid Build Coastguard Worker static_cast<const armnn::FullyConnectedDescriptor&>(descriptor);
2167*89c4ff92SAndroid Build Coastguard Worker SerializeFullyConnectedLayer(layer, layerDescriptor, name);
2168*89c4ff92SAndroid Build Coastguard Worker break;
2169*89c4ff92SAndroid Build Coastguard Worker }
2170*89c4ff92SAndroid Build Coastguard Worker case armnn::LayerType::Gather :
2171*89c4ff92SAndroid Build Coastguard Worker {
2172*89c4ff92SAndroid Build Coastguard Worker const armnn::GatherDescriptor& layerDescriptor =
2173*89c4ff92SAndroid Build Coastguard Worker static_cast<const armnn::GatherDescriptor&>(descriptor);
2174*89c4ff92SAndroid Build Coastguard Worker SerializeGatherLayer(layer, layerDescriptor, name);
2175*89c4ff92SAndroid Build Coastguard Worker break;
2176*89c4ff92SAndroid Build Coastguard Worker }
2177*89c4ff92SAndroid Build Coastguard Worker case armnn::LayerType::GatherNd :
2178*89c4ff92SAndroid Build Coastguard Worker {
2179*89c4ff92SAndroid Build Coastguard Worker SerializeGatherNdLayer(layer, name);
2180*89c4ff92SAndroid Build Coastguard Worker break;
2181*89c4ff92SAndroid Build Coastguard Worker }
2182*89c4ff92SAndroid Build Coastguard Worker case armnn::LayerType::Input:
2183*89c4ff92SAndroid Build Coastguard Worker {
2184*89c4ff92SAndroid Build Coastguard Worker SerializeInputLayer(layer, id, name);
2185*89c4ff92SAndroid Build Coastguard Worker break;
2186*89c4ff92SAndroid Build Coastguard Worker }
2187*89c4ff92SAndroid Build Coastguard Worker case armnn::LayerType::InstanceNormalization :
2188*89c4ff92SAndroid Build Coastguard Worker {
2189*89c4ff92SAndroid Build Coastguard Worker const armnn::InstanceNormalizationDescriptor& layerDescriptor =
2190*89c4ff92SAndroid Build Coastguard Worker static_cast<const armnn::InstanceNormalizationDescriptor&>(descriptor);
2191*89c4ff92SAndroid Build Coastguard Worker SerializeInstanceNormalizationLayer(layer, layerDescriptor, name);
2192*89c4ff92SAndroid Build Coastguard Worker break;
2193*89c4ff92SAndroid Build Coastguard Worker }
2194*89c4ff92SAndroid Build Coastguard Worker case armnn::LayerType::L2Normalization :
2195*89c4ff92SAndroid Build Coastguard Worker {
2196*89c4ff92SAndroid Build Coastguard Worker const armnn::L2NormalizationDescriptor& layerDescriptor =
2197*89c4ff92SAndroid Build Coastguard Worker static_cast<const armnn::L2NormalizationDescriptor&>(descriptor);
2198*89c4ff92SAndroid Build Coastguard Worker SerializeL2NormalizationLayer(layer, layerDescriptor, name);
2199*89c4ff92SAndroid Build Coastguard Worker break;
2200*89c4ff92SAndroid Build Coastguard Worker }
2201*89c4ff92SAndroid Build Coastguard Worker case armnn::LayerType::LogicalBinary :
2202*89c4ff92SAndroid Build Coastguard Worker {
2203*89c4ff92SAndroid Build Coastguard Worker const armnn::LogicalBinaryDescriptor& layerDescriptor =
2204*89c4ff92SAndroid Build Coastguard Worker static_cast<const armnn::LogicalBinaryDescriptor&>(descriptor);
2205*89c4ff92SAndroid Build Coastguard Worker SerializeLogicalBinaryLayer(layer, layerDescriptor, name);
2206*89c4ff92SAndroid Build Coastguard Worker break;
2207*89c4ff92SAndroid Build Coastguard Worker }
2208*89c4ff92SAndroid Build Coastguard Worker case armnn::LayerType::LogSoftmax :
2209*89c4ff92SAndroid Build Coastguard Worker {
2210*89c4ff92SAndroid Build Coastguard Worker const armnn::LogSoftmaxDescriptor& layerDescriptor =
2211*89c4ff92SAndroid Build Coastguard Worker static_cast<const armnn::LogSoftmaxDescriptor&>(descriptor);
2212*89c4ff92SAndroid Build Coastguard Worker SerializeLogSoftmaxLayer(layer, layerDescriptor, name);
2213*89c4ff92SAndroid Build Coastguard Worker break;
2214*89c4ff92SAndroid Build Coastguard Worker }
2215*89c4ff92SAndroid Build Coastguard Worker case armnn::LayerType::Lstm :
2216*89c4ff92SAndroid Build Coastguard Worker {
2217*89c4ff92SAndroid Build Coastguard Worker const armnn::LstmDescriptor& layerDescriptor =
2218*89c4ff92SAndroid Build Coastguard Worker static_cast<const armnn::LstmDescriptor&>(descriptor);
2219*89c4ff92SAndroid Build Coastguard Worker SerializeLstmLayer(layer, layerDescriptor, constants, name);
2220*89c4ff92SAndroid Build Coastguard Worker break;
2221*89c4ff92SAndroid Build Coastguard Worker }
2222*89c4ff92SAndroid Build Coastguard Worker case armnn::LayerType::QLstm :
2223*89c4ff92SAndroid Build Coastguard Worker {
2224*89c4ff92SAndroid Build Coastguard Worker const armnn::QLstmDescriptor& layerDescriptor =
2225*89c4ff92SAndroid Build Coastguard Worker static_cast<const armnn::QLstmDescriptor&>(descriptor);
2226*89c4ff92SAndroid Build Coastguard Worker SerializeQLstmLayer(layer, layerDescriptor, constants, name);
2227*89c4ff92SAndroid Build Coastguard Worker break;
2228*89c4ff92SAndroid Build Coastguard Worker }
2229*89c4ff92SAndroid Build Coastguard Worker case armnn::LayerType::Maximum :
2230*89c4ff92SAndroid Build Coastguard Worker {
2231*89c4ff92SAndroid Build Coastguard Worker SerializeMaximumLayer(layer, name);
2232*89c4ff92SAndroid Build Coastguard Worker break;
2233*89c4ff92SAndroid Build Coastguard Worker }
2234*89c4ff92SAndroid Build Coastguard Worker case armnn::LayerType::Mean :
2235*89c4ff92SAndroid Build Coastguard Worker {
2236*89c4ff92SAndroid Build Coastguard Worker const armnn::MeanDescriptor& layerDescriptor =
2237*89c4ff92SAndroid Build Coastguard Worker static_cast<const armnn::MeanDescriptor&>(descriptor);
2238*89c4ff92SAndroid Build Coastguard Worker SerializeMeanLayer(layer, layerDescriptor, name);
2239*89c4ff92SAndroid Build Coastguard Worker break;
2240*89c4ff92SAndroid Build Coastguard Worker }
2241*89c4ff92SAndroid Build Coastguard Worker case armnn::LayerType::Merge :
2242*89c4ff92SAndroid Build Coastguard Worker {
2243*89c4ff92SAndroid Build Coastguard Worker SerializeMergeLayer(layer, name);
2244*89c4ff92SAndroid Build Coastguard Worker break;
2245*89c4ff92SAndroid Build Coastguard Worker }
2246*89c4ff92SAndroid Build Coastguard Worker case armnn::LayerType::Minimum :
2247*89c4ff92SAndroid Build Coastguard Worker {
2248*89c4ff92SAndroid Build Coastguard Worker SerializeMinimumLayer(layer, name);
2249*89c4ff92SAndroid Build Coastguard Worker break;
2250*89c4ff92SAndroid Build Coastguard Worker }
2251*89c4ff92SAndroid Build Coastguard Worker case armnn::LayerType::Multiplication :
2252*89c4ff92SAndroid Build Coastguard Worker {
2253*89c4ff92SAndroid Build Coastguard Worker SerializeMultiplicationLayer(layer, name);
2254*89c4ff92SAndroid Build Coastguard Worker break;
2255*89c4ff92SAndroid Build Coastguard Worker }
2256*89c4ff92SAndroid Build Coastguard Worker case armnn::LayerType::Normalization :
2257*89c4ff92SAndroid Build Coastguard Worker {
2258*89c4ff92SAndroid Build Coastguard Worker const armnn::NormalizationDescriptor& layerDescriptor =
2259*89c4ff92SAndroid Build Coastguard Worker static_cast<const armnn::NormalizationDescriptor&>(descriptor);
2260*89c4ff92SAndroid Build Coastguard Worker SerializeNormalizationLayer(layer, layerDescriptor, name);
2261*89c4ff92SAndroid Build Coastguard Worker break;
2262*89c4ff92SAndroid Build Coastguard Worker }
2263*89c4ff92SAndroid Build Coastguard Worker case armnn::LayerType::Output:
2264*89c4ff92SAndroid Build Coastguard Worker {
2265*89c4ff92SAndroid Build Coastguard Worker SerializeOutputLayer(layer, id, name);
2266*89c4ff92SAndroid Build Coastguard Worker break;
2267*89c4ff92SAndroid Build Coastguard Worker }
2268*89c4ff92SAndroid Build Coastguard Worker case armnn::LayerType::Pad :
2269*89c4ff92SAndroid Build Coastguard Worker {
2270*89c4ff92SAndroid Build Coastguard Worker const armnn::PadDescriptor& layerDescriptor =
2271*89c4ff92SAndroid Build Coastguard Worker static_cast<const armnn::PadDescriptor&>(descriptor);
2272*89c4ff92SAndroid Build Coastguard Worker SerializePadLayer(layer, layerDescriptor, name);
2273*89c4ff92SAndroid Build Coastguard Worker break;
2274*89c4ff92SAndroid Build Coastguard Worker }
2275*89c4ff92SAndroid Build Coastguard Worker case armnn::LayerType::Permute :
2276*89c4ff92SAndroid Build Coastguard Worker {
2277*89c4ff92SAndroid Build Coastguard Worker const armnn::PermuteDescriptor& layerDescriptor =
2278*89c4ff92SAndroid Build Coastguard Worker static_cast<const armnn::PermuteDescriptor&>(descriptor);
2279*89c4ff92SAndroid Build Coastguard Worker SerializePermuteLayer(layer, layerDescriptor, name);
2280*89c4ff92SAndroid Build Coastguard Worker break;
2281*89c4ff92SAndroid Build Coastguard Worker }
2282*89c4ff92SAndroid Build Coastguard Worker case armnn::LayerType::Pooling2d :
2283*89c4ff92SAndroid Build Coastguard Worker {
2284*89c4ff92SAndroid Build Coastguard Worker const armnn::Pooling2dDescriptor& layerDescriptor =
2285*89c4ff92SAndroid Build Coastguard Worker static_cast<const armnn::Pooling2dDescriptor&>(descriptor);
2286*89c4ff92SAndroid Build Coastguard Worker SerializePooling2dLayer(layer, layerDescriptor, name);
2287*89c4ff92SAndroid Build Coastguard Worker break;
2288*89c4ff92SAndroid Build Coastguard Worker }
2289*89c4ff92SAndroid Build Coastguard Worker case armnn::LayerType::Pooling3d :
2290*89c4ff92SAndroid Build Coastguard Worker {
2291*89c4ff92SAndroid Build Coastguard Worker const armnn::Pooling3dDescriptor& layerDescriptor =
2292*89c4ff92SAndroid Build Coastguard Worker static_cast<const armnn::Pooling3dDescriptor&>(descriptor);
2293*89c4ff92SAndroid Build Coastguard Worker SerializePooling3dLayer(layer, layerDescriptor, name);
2294*89c4ff92SAndroid Build Coastguard Worker break;
2295*89c4ff92SAndroid Build Coastguard Worker }
2296*89c4ff92SAndroid Build Coastguard Worker case armnn::LayerType::Prelu :
2297*89c4ff92SAndroid Build Coastguard Worker {
2298*89c4ff92SAndroid Build Coastguard Worker SerializePreluLayer(layer, name);
2299*89c4ff92SAndroid Build Coastguard Worker break;
2300*89c4ff92SAndroid Build Coastguard Worker }
2301*89c4ff92SAndroid Build Coastguard Worker case armnn::LayerType::Quantize :
2302*89c4ff92SAndroid Build Coastguard Worker {
2303*89c4ff92SAndroid Build Coastguard Worker SerializeQuantizeLayer(layer, name);
2304*89c4ff92SAndroid Build Coastguard Worker break;
2305*89c4ff92SAndroid Build Coastguard Worker }
2306*89c4ff92SAndroid Build Coastguard Worker case armnn::LayerType::QuantizedLstm:
2307*89c4ff92SAndroid Build Coastguard Worker SerializeQuantizedLstmLayer(layer, constants, name);
2308*89c4ff92SAndroid Build Coastguard Worker break;
2309*89c4ff92SAndroid Build Coastguard Worker case armnn::LayerType::Reshape:
2310*89c4ff92SAndroid Build Coastguard Worker {
2311*89c4ff92SAndroid Build Coastguard Worker const armnn::ReshapeDescriptor &layerDescriptor =
2312*89c4ff92SAndroid Build Coastguard Worker static_cast<const armnn::ReshapeDescriptor &>(descriptor);
2313*89c4ff92SAndroid Build Coastguard Worker SerializeReshapeLayer(layer, layerDescriptor, name);
2314*89c4ff92SAndroid Build Coastguard Worker break;
2315*89c4ff92SAndroid Build Coastguard Worker }
2316*89c4ff92SAndroid Build Coastguard Worker case armnn::LayerType::Rank:
2317*89c4ff92SAndroid Build Coastguard Worker {
2318*89c4ff92SAndroid Build Coastguard Worker SerializeRankLayer(layer, name);
2319*89c4ff92SAndroid Build Coastguard Worker break;
2320*89c4ff92SAndroid Build Coastguard Worker }
2321*89c4ff92SAndroid Build Coastguard Worker case armnn::LayerType::Reduce:
2322*89c4ff92SAndroid Build Coastguard Worker {
2323*89c4ff92SAndroid Build Coastguard Worker const armnn::ReduceDescriptor& layerDescriptor =
2324*89c4ff92SAndroid Build Coastguard Worker static_cast<const armnn::ReduceDescriptor&>(descriptor);
2325*89c4ff92SAndroid Build Coastguard Worker SerializeReduceLayer(layer, layerDescriptor, name);
2326*89c4ff92SAndroid Build Coastguard Worker break;
2327*89c4ff92SAndroid Build Coastguard Worker }
2328*89c4ff92SAndroid Build Coastguard Worker case armnn::LayerType::Resize:
2329*89c4ff92SAndroid Build Coastguard Worker {
2330*89c4ff92SAndroid Build Coastguard Worker const armnn::ResizeDescriptor& layerDescriptor =
2331*89c4ff92SAndroid Build Coastguard Worker static_cast<const armnn::ResizeDescriptor&>(descriptor);
2332*89c4ff92SAndroid Build Coastguard Worker SerializeResizeLayer(layer, layerDescriptor, name);
2333*89c4ff92SAndroid Build Coastguard Worker break;
2334*89c4ff92SAndroid Build Coastguard Worker }
2335*89c4ff92SAndroid Build Coastguard Worker case armnn::LayerType::Shape:
2336*89c4ff92SAndroid Build Coastguard Worker {
2337*89c4ff92SAndroid Build Coastguard Worker SerializeShapeLayer(layer, name);
2338*89c4ff92SAndroid Build Coastguard Worker break;
2339*89c4ff92SAndroid Build Coastguard Worker }
2340*89c4ff92SAndroid Build Coastguard Worker case armnn::LayerType::Slice:
2341*89c4ff92SAndroid Build Coastguard Worker {
2342*89c4ff92SAndroid Build Coastguard Worker const armnn::SliceDescriptor& layerDescriptor =
2343*89c4ff92SAndroid Build Coastguard Worker static_cast<const armnn::SliceDescriptor&>(descriptor);
2344*89c4ff92SAndroid Build Coastguard Worker SerializeSliceLayer(layer, layerDescriptor, name);
2345*89c4ff92SAndroid Build Coastguard Worker break;
2346*89c4ff92SAndroid Build Coastguard Worker }
2347*89c4ff92SAndroid Build Coastguard Worker case armnn::LayerType::Softmax:
2348*89c4ff92SAndroid Build Coastguard Worker {
2349*89c4ff92SAndroid Build Coastguard Worker const armnn::SoftmaxDescriptor& layerDescriptor =
2350*89c4ff92SAndroid Build Coastguard Worker static_cast<const armnn::SoftmaxDescriptor&>(descriptor);
2351*89c4ff92SAndroid Build Coastguard Worker SerializeSoftmaxLayer(layer, layerDescriptor, name);
2352*89c4ff92SAndroid Build Coastguard Worker break;
2353*89c4ff92SAndroid Build Coastguard Worker }
2354*89c4ff92SAndroid Build Coastguard Worker case armnn::LayerType::SpaceToBatchNd:
2355*89c4ff92SAndroid Build Coastguard Worker {
2356*89c4ff92SAndroid Build Coastguard Worker const armnn::SpaceToBatchNdDescriptor& layerDescriptor =
2357*89c4ff92SAndroid Build Coastguard Worker static_cast<const armnn::SpaceToBatchNdDescriptor&>(descriptor);
2358*89c4ff92SAndroid Build Coastguard Worker SerializeSpaceToBatchNdLayer(layer, layerDescriptor, name);
2359*89c4ff92SAndroid Build Coastguard Worker break;
2360*89c4ff92SAndroid Build Coastguard Worker }
2361*89c4ff92SAndroid Build Coastguard Worker case armnn::LayerType::SpaceToDepth:
2362*89c4ff92SAndroid Build Coastguard Worker {
2363*89c4ff92SAndroid Build Coastguard Worker const armnn::SpaceToDepthDescriptor& layerDescriptor =
2364*89c4ff92SAndroid Build Coastguard Worker static_cast<const armnn::SpaceToDepthDescriptor&>(descriptor);
2365*89c4ff92SAndroid Build Coastguard Worker SerializeSpaceToDepthLayer(layer, layerDescriptor, name);
2366*89c4ff92SAndroid Build Coastguard Worker break;
2367*89c4ff92SAndroid Build Coastguard Worker }
2368*89c4ff92SAndroid Build Coastguard Worker case armnn::LayerType::Splitter:
2369*89c4ff92SAndroid Build Coastguard Worker {
2370*89c4ff92SAndroid Build Coastguard Worker const armnn::SplitterDescriptor& layerDescriptor =
2371*89c4ff92SAndroid Build Coastguard Worker static_cast<const armnn::SplitterDescriptor&>(descriptor);
2372*89c4ff92SAndroid Build Coastguard Worker SerializeSplitterLayer(layer, layerDescriptor, name);
2373*89c4ff92SAndroid Build Coastguard Worker break;
2374*89c4ff92SAndroid Build Coastguard Worker }
2375*89c4ff92SAndroid Build Coastguard Worker case armnn::LayerType::Stack:
2376*89c4ff92SAndroid Build Coastguard Worker {
2377*89c4ff92SAndroid Build Coastguard Worker const armnn::StackDescriptor& layerDescriptor =
2378*89c4ff92SAndroid Build Coastguard Worker static_cast<const armnn::StackDescriptor&>(descriptor);
2379*89c4ff92SAndroid Build Coastguard Worker SerializeStackLayer(layer, layerDescriptor, name);
2380*89c4ff92SAndroid Build Coastguard Worker break;
2381*89c4ff92SAndroid Build Coastguard Worker }
2382*89c4ff92SAndroid Build Coastguard Worker case armnn::LayerType::StandIn:
2383*89c4ff92SAndroid Build Coastguard Worker {
2384*89c4ff92SAndroid Build Coastguard Worker const armnn::StandInDescriptor& layerDescriptor =
2385*89c4ff92SAndroid Build Coastguard Worker static_cast<const armnn::StandInDescriptor&>(descriptor);
2386*89c4ff92SAndroid Build Coastguard Worker SerializeStandInLayer(layer, layerDescriptor, name);
2387*89c4ff92SAndroid Build Coastguard Worker break;
2388*89c4ff92SAndroid Build Coastguard Worker }
2389*89c4ff92SAndroid Build Coastguard Worker case armnn::LayerType::StridedSlice:
2390*89c4ff92SAndroid Build Coastguard Worker {
2391*89c4ff92SAndroid Build Coastguard Worker const armnn::StridedSliceDescriptor& layerDescriptor =
2392*89c4ff92SAndroid Build Coastguard Worker static_cast<const armnn::StridedSliceDescriptor&>(descriptor);
2393*89c4ff92SAndroid Build Coastguard Worker SerializeStridedSliceLayer(layer, layerDescriptor, name);
2394*89c4ff92SAndroid Build Coastguard Worker break;
2395*89c4ff92SAndroid Build Coastguard Worker }
2396*89c4ff92SAndroid Build Coastguard Worker case armnn::LayerType::Subtraction:
2397*89c4ff92SAndroid Build Coastguard Worker {
2398*89c4ff92SAndroid Build Coastguard Worker SerializeSubtractionLayer(layer, name);
2399*89c4ff92SAndroid Build Coastguard Worker break;
2400*89c4ff92SAndroid Build Coastguard Worker }
2401*89c4ff92SAndroid Build Coastguard Worker case armnn::LayerType::Switch:
2402*89c4ff92SAndroid Build Coastguard Worker {
2403*89c4ff92SAndroid Build Coastguard Worker SerializeSwitchLayer(layer, name);
2404*89c4ff92SAndroid Build Coastguard Worker break;
2405*89c4ff92SAndroid Build Coastguard Worker }
2406*89c4ff92SAndroid Build Coastguard Worker case armnn::LayerType::Transpose:
2407*89c4ff92SAndroid Build Coastguard Worker {
2408*89c4ff92SAndroid Build Coastguard Worker const armnn::TransposeDescriptor& layerDescriptor =
2409*89c4ff92SAndroid Build Coastguard Worker static_cast<const armnn::TransposeDescriptor&>(descriptor);
2410*89c4ff92SAndroid Build Coastguard Worker SerializeTransposeLayer(layer, layerDescriptor, name);
2411*89c4ff92SAndroid Build Coastguard Worker break;
2412*89c4ff92SAndroid Build Coastguard Worker }
2413*89c4ff92SAndroid Build Coastguard Worker case armnn::LayerType::TransposeConvolution2d:
2414*89c4ff92SAndroid Build Coastguard Worker {
2415*89c4ff92SAndroid Build Coastguard Worker const armnn::TransposeConvolution2dDescriptor& layerDescriptor =
2416*89c4ff92SAndroid Build Coastguard Worker static_cast<const armnn::TransposeConvolution2dDescriptor&>(descriptor);
2417*89c4ff92SAndroid Build Coastguard Worker SerializeTransposeConvolution2dLayer(layer, layerDescriptor, constants, name);
2418*89c4ff92SAndroid Build Coastguard Worker break;
2419*89c4ff92SAndroid Build Coastguard Worker }
2420*89c4ff92SAndroid Build Coastguard Worker case armnn::LayerType::UnidirectionalSequenceLstm :
2421*89c4ff92SAndroid Build Coastguard Worker {
2422*89c4ff92SAndroid Build Coastguard Worker const armnn::UnidirectionalSequenceLstmDescriptor& layerDescriptor =
2423*89c4ff92SAndroid Build Coastguard Worker static_cast<const armnn::UnidirectionalSequenceLstmDescriptor&>(descriptor);
2424*89c4ff92SAndroid Build Coastguard Worker SerializeUnidirectionalSequenceLstmLayer(layer, layerDescriptor, constants, name);
2425*89c4ff92SAndroid Build Coastguard Worker break;
2426*89c4ff92SAndroid Build Coastguard Worker }
2427*89c4ff92SAndroid Build Coastguard Worker default:
2428*89c4ff92SAndroid Build Coastguard Worker {
2429*89c4ff92SAndroid Build Coastguard Worker throw InvalidArgumentException(
2430*89c4ff92SAndroid Build Coastguard Worker fmt::format("A layer of unknown type was given to the serializer. Layer name: {}; Layer Id: {}",
2431*89c4ff92SAndroid Build Coastguard Worker layer->GetName(),
2432*89c4ff92SAndroid Build Coastguard Worker id));
2433*89c4ff92SAndroid Build Coastguard Worker }
2434*89c4ff92SAndroid Build Coastguard Worker }
2435*89c4ff92SAndroid Build Coastguard Worker }
2436*89c4ff92SAndroid Build Coastguard Worker
Serialize(const INetwork & inNetwork)2437*89c4ff92SAndroid Build Coastguard Worker void ISerializer::SerializerImpl::Serialize(const INetwork& inNetwork)
2438*89c4ff92SAndroid Build Coastguard Worker {
2439*89c4ff92SAndroid Build Coastguard Worker // Iterate through to network
2440*89c4ff92SAndroid Build Coastguard Worker inNetwork.ExecuteStrategy(m_SerializerStrategy);
2441*89c4ff92SAndroid Build Coastguard Worker flatbuffers::FlatBufferBuilder& fbBuilder = m_SerializerStrategy.GetFlatBufferBuilder();
2442*89c4ff92SAndroid Build Coastguard Worker
2443*89c4ff92SAndroid Build Coastguard Worker // Create FlatBuffer SerializedGraph
2444*89c4ff92SAndroid Build Coastguard Worker auto serializedGraph = serializer::CreateSerializedGraph(
2445*89c4ff92SAndroid Build Coastguard Worker fbBuilder,
2446*89c4ff92SAndroid Build Coastguard Worker fbBuilder.CreateVector(m_SerializerStrategy.GetSerializedLayers()),
2447*89c4ff92SAndroid Build Coastguard Worker fbBuilder.CreateVector(m_SerializerStrategy.GetInputIds()),
2448*89c4ff92SAndroid Build Coastguard Worker fbBuilder.CreateVector(m_SerializerStrategy.GetOutputIds()),
2449*89c4ff92SAndroid Build Coastguard Worker m_SerializerStrategy.GetVersionTable());
2450*89c4ff92SAndroid Build Coastguard Worker
2451*89c4ff92SAndroid Build Coastguard Worker // Serialize the graph
2452*89c4ff92SAndroid Build Coastguard Worker fbBuilder.Finish(serializedGraph);
2453*89c4ff92SAndroid Build Coastguard Worker }
2454*89c4ff92SAndroid Build Coastguard Worker
2455*89c4ff92SAndroid Build Coastguard Worker
SaveSerializedToStream(std::ostream & stream)2456*89c4ff92SAndroid Build Coastguard Worker bool ISerializer::SerializerImpl::SaveSerializedToStream(std::ostream& stream)
2457*89c4ff92SAndroid Build Coastguard Worker {
2458*89c4ff92SAndroid Build Coastguard Worker flatbuffers::FlatBufferBuilder& fbBuilder = m_SerializerStrategy.GetFlatBufferBuilder();
2459*89c4ff92SAndroid Build Coastguard Worker
2460*89c4ff92SAndroid Build Coastguard Worker auto bytesToWrite = armnn::numeric_cast<std::streamsize>(fbBuilder.GetSize());
2461*89c4ff92SAndroid Build Coastguard Worker stream.write(reinterpret_cast<const char*>(fbBuilder.GetBufferPointer()), bytesToWrite);
2462*89c4ff92SAndroid Build Coastguard Worker return !stream.bad();
2463*89c4ff92SAndroid Build Coastguard Worker }
2464*89c4ff92SAndroid Build Coastguard Worker
2465*89c4ff92SAndroid Build Coastguard Worker } // namespace armnnSerializer
2466