• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //
2 // Copyright © 2017 Arm Ltd. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5 #include "SerializeLayerParameters.hpp"
6 #include <armnn/TypesUtils.hpp>
7 #include <string>
8 #include <iostream>
9 #include <sstream>
10 
11 namespace armnn
12 {
13 
Serialize(ParameterStringifyFunction & fn,const PermuteDescriptor & desc)14 void StringifyLayerParameters<PermuteDescriptor>::Serialize(ParameterStringifyFunction& fn,
15                                                             const PermuteDescriptor& desc)
16 {
17     std::stringstream ss;
18     ss <<  "[";
19     bool addComma = false;
20     for (auto it : desc.m_DimMappings)
21     {
22         if (addComma)
23         {
24             ss << ",";
25         }
26         ss << it;
27         addComma = true;
28     }
29     ss << "]";
30 
31     fn("DimMappings",ss.str());
32 }
33 
Serialize(ParameterStringifyFunction & fn,const ReshapeDescriptor & desc)34 void StringifyLayerParameters<ReshapeDescriptor>::Serialize(ParameterStringifyFunction& fn,
35                                                             const ReshapeDescriptor& desc)
36 {
37     std::stringstream ss;
38     ss << desc.m_TargetShape;
39     fn("TargetShape",ss.str());
40 }
41 
Serialize(ParameterStringifyFunction & fn,const ActivationDescriptor & desc)42 void StringifyLayerParameters<ActivationDescriptor>::Serialize(ParameterStringifyFunction& fn,
43                                                                const ActivationDescriptor& desc)
44 {
45     fn("Function", GetActivationFunctionAsCString(desc.m_Function));
46     fn("A", std::to_string(desc.m_A));
47     fn("B", std::to_string(desc.m_B));
48 }
49 
Serialize(ParameterStringifyFunction & fn,const Convolution2dDescriptor & desc)50 void StringifyLayerParameters<Convolution2dDescriptor>::Serialize(ParameterStringifyFunction& fn,
51                                                                   const Convolution2dDescriptor& desc)
52 {
53     {
54         std::stringstream ss;
55         ss << "(" << desc.m_PadTop    << "," << desc.m_PadLeft
56            << "," << desc.m_PadBottom << "," << desc.m_PadRight << ")";
57         fn("Padding(T,L,B,R)",ss.str());
58     }
59 
60     {
61         std::stringstream ss;
62         ss << "(" << desc.m_StrideX <<  "," << desc.m_StrideY << ")";
63         fn("Stride(X,Y)", ss.str());
64     }
65 
66     {
67         std::stringstream ss;
68         ss << "(" << desc.m_DilationX << "," << desc.m_DilationY << ")";
69         fn("Dilation(X,Y)", ss.str());
70     }
71 
72     fn("BiasEnabled",(desc.m_BiasEnabled ? "true" : "false"));
73     fn("DataLayout", GetDataLayoutName(desc.m_DataLayout));
74 }
75 
Serialize(ParameterStringifyFunction & fn,const BatchNormalizationDescriptor & desc)76 void StringifyLayerParameters<BatchNormalizationDescriptor>::Serialize(ParameterStringifyFunction& fn,
77                                                                        const BatchNormalizationDescriptor& desc)
78 {
79     fn("Eps", std::to_string(desc.m_Eps));
80     fn("DataLayout", GetDataLayoutName(desc.m_DataLayout));
81 }
82 
Serialize(ParameterStringifyFunction & fn,const DepthwiseConvolution2dDescriptor & desc)83 void StringifyLayerParameters<DepthwiseConvolution2dDescriptor>::Serialize(
84     ParameterStringifyFunction& fn,
85     const DepthwiseConvolution2dDescriptor& desc)
86 {
87     {
88         std::stringstream ss;
89         ss << "(" << desc.m_PadTop    << "," << desc.m_PadLeft
90            << "," << desc.m_PadBottom << "," << desc.m_PadRight << ")";
91         fn("Padding(T,L,B,R)",ss.str());
92     }
93 
94     {
95         std::stringstream ss;
96         ss << "(" << desc.m_StrideX <<  "," << desc.m_StrideY << ")";
97         fn("Stride(X,Y)", ss.str());
98     }
99 
100     {
101         std::stringstream ss;
102         ss << "(" << desc.m_DilationX << "," << desc.m_DilationY << ")";
103         fn("Dilation(X,Y)", ss.str());
104     }
105 
106     fn("BiasEnabled",(desc.m_BiasEnabled ? "true" : "false"));
107     fn("DataLayout", GetDataLayoutName(desc.m_DataLayout));
108 }
109 
Serialize(ParameterStringifyFunction & fn,const Pooling2dDescriptor & desc)110 void StringifyLayerParameters<Pooling2dDescriptor>::Serialize(ParameterStringifyFunction& fn,
111                                                               const Pooling2dDescriptor& desc)
112 {
113     fn("Type", GetPoolingAlgorithmAsCString(desc.m_PoolType));
114     {
115         std::stringstream ss;
116         ss << "(" << desc.m_PadTop    << "," << desc.m_PadLeft
117            << "," << desc.m_PadBottom << "," << desc.m_PadRight << ")";
118         fn("Padding(T,L,B,R)", ss.str());
119     }
120 
121     {
122         std::stringstream ss;
123         ss << "(" << desc.m_PoolWidth    << "," << desc.m_PoolHeight << ")";
124         fn("(Width,Height)", ss.str());
125     }
126 
127     {
128         std::stringstream ss;
129         ss << "(" << desc.m_StrideX <<  "," << desc.m_StrideY << ")";
130         fn("Stride(X,Y)", ss.str());
131     }
132 
133     fn("OutputShapeRounding", GetOutputShapeRoundingAsCString(desc.m_OutputShapeRounding));
134     fn("PaddingMethod", GetPaddingMethodAsCString(desc.m_PaddingMethod));
135     fn("DataLayout", GetDataLayoutName(desc.m_DataLayout));
136 }
137 
Serialize(ParameterStringifyFunction & fn,const SoftmaxDescriptor & desc)138 void StringifyLayerParameters<SoftmaxDescriptor>::Serialize(ParameterStringifyFunction& fn,
139                                                             const SoftmaxDescriptor& desc)
140 {
141     fn("Beta", std::to_string(desc.m_Beta));
142     fn("Axis", std::to_string(desc.m_Axis));
143 }
144 
Serialize(ParameterStringifyFunction & fn,const FullyConnectedDescriptor & desc)145 void StringifyLayerParameters<FullyConnectedDescriptor>::Serialize(ParameterStringifyFunction& fn,
146                                                                    const FullyConnectedDescriptor& desc)
147 {
148     fn("BiasEnabled", (desc.m_BiasEnabled ? "true" : "false"));
149     fn("TransposeWeightMatrix", (desc.m_TransposeWeightMatrix ? "true" : "false"));
150 }
151 
Serialize(ParameterStringifyFunction & fn,const OriginsDescriptor & desc)152 void StringifyLayerParameters<OriginsDescriptor>::Serialize(ParameterStringifyFunction& fn,
153                                                             const OriginsDescriptor& desc)
154 {
155     fn("ConcatAxis", std::to_string(desc.GetConcatAxis()));
156 
157     uint32_t numViews = desc.GetNumViews();
158     uint32_t numDims  = desc.GetNumDimensions();
159 
160     for (uint32_t view = 0; view < numViews; ++view)
161     {
162         std::stringstream key;
163         key << "MergeTo#" << view;
164         std::stringstream value;
165         value << "[";
166         auto viewData = desc.GetViewOrigin(view);
167 
168         for (uint32_t dim = 0; dim < numDims; ++dim)
169         {
170             if (dim > 0)
171             {
172                 value << ",";
173             }
174             value << viewData[dim];
175         }
176         value << "]";
177         fn(key.str(), value.str());
178     }
179 }
180 
Serialize(ParameterStringifyFunction & fn,const ViewsDescriptor & desc)181 void StringifyLayerParameters<ViewsDescriptor>::Serialize(ParameterStringifyFunction& fn, const ViewsDescriptor& desc)
182 {
183     uint32_t numViews = desc.GetNumViews();
184     uint32_t numDims  = desc.GetNumDimensions();
185     for (uint32_t view = 0; view < numViews; ++view) {
186         std::stringstream key;
187         key << "ViewSizes#" << view;
188         std::stringstream value;
189         value << "[";
190         auto viewData = desc.GetViewSizes(view);
191         for (uint32_t dim = 0; dim < numDims; ++dim)
192         {
193             if (dim > 0)
194             {
195                 value << ",";
196             }
197             value << viewData[dim];
198         }
199         value << "]";
200         fn(key.str(), value.str());
201     }
202     StringifyLayerParameters<OriginsDescriptor>::Serialize(fn, desc.GetOrigins());
203 }
204 
Serialize(ParameterStringifyFunction & fn,const DetectionPostProcessDescriptor & desc)205 void StringifyLayerParameters<DetectionPostProcessDescriptor>::Serialize(ParameterStringifyFunction& fn,
206                                                                          const DetectionPostProcessDescriptor& desc)
207 {
208     fn("MaxDetections", std::to_string(desc.m_MaxDetections));
209     fn("MaxClassesPerDetection", std::to_string(desc.m_MaxClassesPerDetection));
210     fn("DetectionsPerClass", std::to_string(desc.m_DetectionsPerClass));
211     fn("NmsScoreThreshold", std::to_string(desc.m_NmsScoreThreshold));
212     fn("NmsIouThreshold", std::to_string(desc.m_NmsIouThreshold));
213     fn("NumClasses", std::to_string(desc.m_NumClasses));
214     fn("UseRegularNms", (desc.m_UseRegularNms ? "true" : "false"));
215     {
216         std::stringstream ss;
217         ss << "(" << desc.m_ScaleX <<  "," << desc.m_ScaleY << ")";
218         fn("Scale(X,Y)", ss.str());
219     }
220 
221     {
222         std::stringstream ss;
223         ss << "(" << desc.m_ScaleW <<  "," << desc.m_ScaleH << ")";
224         fn("Scale(W,H)", ss.str());
225     }
226 }
227 
Serialize(ParameterStringifyFunction & fn,const NormalizationDescriptor & desc)228 void StringifyLayerParameters<NormalizationDescriptor>::Serialize(ParameterStringifyFunction& fn,
229                                                                   const NormalizationDescriptor& desc)
230 {
231     fn("NormChannelType", GetNormalizationAlgorithmChannelAsCString(desc.m_NormChannelType));
232     fn("NormMethodType", GetNormalizationAlgorithmMethodAsCString(desc.m_NormMethodType));
233     fn("NormSize", std::to_string(desc.m_NormSize));
234     fn("Alpha", std::to_string(desc.m_Alpha));
235     fn("Beta", std::to_string(desc.m_Beta));
236     fn("K", std::to_string(desc.m_K));
237     fn("DataLayout", GetDataLayoutName(desc.m_DataLayout));
238 }
239 
Serialize(ParameterStringifyFunction & fn,const L2NormalizationDescriptor & desc)240 void StringifyLayerParameters<L2NormalizationDescriptor>::Serialize(ParameterStringifyFunction& fn,
241                                                                     const L2NormalizationDescriptor& desc)
242 {
243     fn("Eps", std::to_string(desc.m_Eps));
244     fn("DataLayout", GetDataLayoutName(desc.m_DataLayout));
245 }
246 
Serialize(ParameterStringifyFunction & fn,const BatchToSpaceNdDescriptor & desc)247 void StringifyLayerParameters<BatchToSpaceNdDescriptor>::Serialize(ParameterStringifyFunction& fn,
248                                                                    const BatchToSpaceNdDescriptor& desc)
249 {
250     {
251         std::stringstream ss;
252         int count = 0;
253         for (auto&& var : desc.m_BlockShape)
254         {
255             if (count > 0)
256             {
257                 ss << ",";
258             }
259             ss << var;
260             ++count;
261         }
262         fn("BlockShape", ss.str());
263     }
264 
265     {
266         std::stringstream ss;
267         int count = 0;
268         for (auto&& var : desc.m_Crops)
269         {
270             if (count > 0)
271             {
272                 ss << ",";
273             }
274             ss << "[" << var.first << "," << var.second << "]";
275             ++count;
276         }
277         fn("Crops", ss.str());
278     }
279 
280     fn("DataLayout", GetDataLayoutName(desc.m_DataLayout));
281 }
282 
Serialize(ParameterStringifyFunction & fn,const FakeQuantizationDescriptor & desc)283 void StringifyLayerParameters<FakeQuantizationDescriptor>::Serialize(ParameterStringifyFunction& fn,
284                                                                      const FakeQuantizationDescriptor& desc)
285 {
286     fn("Min", std::to_string(desc.m_Min));
287     fn("Max", std::to_string(desc.m_Max));
288 }
289 
Serialize(ParameterStringifyFunction & fn,const ResizeBilinearDescriptor & desc)290 void StringifyLayerParameters<ResizeBilinearDescriptor>::Serialize(ParameterStringifyFunction& fn,
291                                                                    const ResizeBilinearDescriptor& desc)
292 {
293     fn("TargetWidth", std::to_string(desc.m_TargetWidth));
294     fn("TargetHeight", std::to_string(desc.m_TargetHeight));
295     fn("DataLayout", GetDataLayoutName(desc.m_DataLayout));
296     fn("AlignCorners", std::to_string(desc.m_AlignCorners));
297     fn("HalfPixelCenters", std::to_string(desc.m_HalfPixelCenters));
298 }
299 
Serialize(ParameterStringifyFunction & fn,const ResizeDescriptor & desc)300 void StringifyLayerParameters<ResizeDescriptor>::Serialize(ParameterStringifyFunction& fn,
301                                                            const ResizeDescriptor& desc)
302 {
303     fn("TargetWidth", std::to_string(desc.m_TargetWidth));
304     fn("TargetHeight", std::to_string(desc.m_TargetHeight));
305     fn("ResizeMethod", GetResizeMethodAsCString(desc.m_Method));
306     fn("DataLayout", GetDataLayoutName(desc.m_DataLayout));
307     fn("AlignCorners", std::to_string(desc.m_AlignCorners));
308     fn("HalfPixelCenters", std::to_string(desc.m_HalfPixelCenters));
309 }
310 
Serialize(ParameterStringifyFunction & fn,const SpaceToBatchNdDescriptor & desc)311 void StringifyLayerParameters<SpaceToBatchNdDescriptor>::Serialize(ParameterStringifyFunction& fn,
312                                                                    const SpaceToBatchNdDescriptor& desc)
313 {
314     {
315         std::stringstream ss;
316         int count = 0;
317         for (auto&& var : desc.m_BlockShape)
318         {
319             if (count > 0)
320             {
321                 ss << ",";
322             }
323             ss << var;
324             ++count;
325         }
326         fn("BlockShape", ss.str());
327     }
328 
329     {
330         std::stringstream ss;
331         int count = 0;
332         for (auto&& var : desc.m_PadList)
333         {
334             if (count > 0)
335             {
336                 ss << ",";
337             }
338             ss << "[" << var.first << "," << var.second << "]";
339             ++count;
340         }
341         fn("PadList", ss.str());
342     }
343 
344     fn("DataLayout", GetDataLayoutName(desc.m_DataLayout));
345 }
346 
Serialize(ParameterStringifyFunction & fn,const SpaceToDepthDescriptor & desc)347 void StringifyLayerParameters<SpaceToDepthDescriptor>::Serialize(ParameterStringifyFunction& fn,
348                                                                  const SpaceToDepthDescriptor& desc)
349 {
350     fn("BlockSize", std::to_string(desc.m_BlockSize));
351     fn("DataLayout", GetDataLayoutName(desc.m_DataLayout));
352 }
353 
Serialize(ParameterStringifyFunction & fn,const LstmDescriptor & desc)354 void StringifyLayerParameters<LstmDescriptor>::Serialize(ParameterStringifyFunction& fn, const LstmDescriptor& desc)
355 {
356     fn("ActivationFunc", std::to_string(desc.m_ActivationFunc));
357     fn("ClippingThresCell", std::to_string(desc.m_ClippingThresCell));
358     fn("ClippingThresProj", std::to_string(desc.m_ClippingThresProj));
359     fn("CifgEnabled", (desc.m_CifgEnabled ? "true" : "false"))   ;
360     fn("PeepholeEnabled", (desc.m_PeepholeEnabled ? "true" : "false"))   ;
361     fn("ProjectionEnabled", (desc.m_ProjectionEnabled ? "true" : "false"))   ;
362     fn("LayerNormEnabled", (desc.m_LayerNormEnabled ? "true" : "false"));
363 }
364 
Serialize(ParameterStringifyFunction & fn,const MeanDescriptor & desc)365 void StringifyLayerParameters<MeanDescriptor>::Serialize(ParameterStringifyFunction& fn, const MeanDescriptor& desc)
366 {
367     {
368         std::stringstream ss;
369         int count = 0;
370         for (auto&& var : desc.m_Axis)
371         {
372             if (count > 0)
373             {
374                 ss << ",";
375             }
376             ss << var;
377             ++count;
378         }
379         fn("Axis", ss.str());
380     }
381     fn("KeepDims", (desc.m_KeepDims ? "true" : "false"));
382 }
383 
Serialize(ParameterStringifyFunction & fn,const PadDescriptor & desc)384 void StringifyLayerParameters<PadDescriptor>::Serialize(ParameterStringifyFunction& fn, const PadDescriptor& desc)
385 {
386     {
387         std::stringstream ss;
388         int count = 0;
389         for (auto&& var : desc.m_PadList)
390         {
391             if (count > 0)
392             {
393                 ss << ",";
394             }
395             ss << "[" << var.first << "," << var.second << "]";
396             ++count;
397         }
398         fn("PadList", ss.str());
399     }
400     fn("PadValue", std::to_string(desc.m_PadValue));
401 }
402 
Serialize(ParameterStringifyFunction & fn,const StackDescriptor & desc)403 void StringifyLayerParameters<StackDescriptor>::Serialize(ParameterStringifyFunction& fn, const StackDescriptor& desc)
404 {
405     fn("Axis", std::to_string(desc.m_Axis));
406     fn("NumInputs", std::to_string(desc.m_NumInputs));
407     {
408         std::stringstream ss;
409         ss << desc.m_InputShape;
410         fn("InputShape",ss.str());
411     }
412 }
413 
Serialize(ParameterStringifyFunction & fn,const StridedSliceDescriptor & desc)414 void StringifyLayerParameters<StridedSliceDescriptor>::Serialize(ParameterStringifyFunction& fn,
415                                                                  const StridedSliceDescriptor& desc)
416 {
417     {
418         std::stringstream ss;
419         int count = 0;
420         for (auto&& var : desc.m_Begin)
421         {
422             if (count > 0)
423             {
424                 ss << ",";
425             }
426             ss << var;
427             ++count;
428         }
429         fn("Begin", ss.str());
430     }
431 
432     {
433         std::stringstream ss;
434         int count = 0;
435         for (auto&& var : desc.m_End)
436         {
437             if (count > 0)
438             {
439                 ss << ",";
440             }
441             ss << var;
442             ++count;
443         }
444         fn("End", ss.str());
445     }
446 
447     {
448         std::stringstream ss;
449         int count = 0;
450         for (auto&& var : desc.m_Stride)
451         {
452             if (count > 0)
453             {
454                 ss << ",";
455             }
456             ss << var;
457             ++count;
458         }
459         fn("Stride", ss.str());
460     }
461 
462     fn("BeginMask", std::to_string(desc.m_BeginMask));
463     fn("EndMask", std::to_string(desc.m_EndMask));
464     fn("ShrinkAxisMask", std::to_string(desc.m_ShrinkAxisMask));
465     fn("EllipsisMask", std::to_string(desc.m_EllipsisMask));
466     fn("NewAxisMask", std::to_string(desc.m_NewAxisMask));
467     fn("DataLayout", GetDataLayoutName(desc.m_DataLayout));
468 }
469 
Serialize(ParameterStringifyFunction & fn,const PreCompiledDescriptor & desc)470 void StringifyLayerParameters<PreCompiledDescriptor>::Serialize(ParameterStringifyFunction& fn,
471                                                                 const PreCompiledDescriptor& desc)
472 {
473     fn("NumInputSlots", std::to_string(desc.m_NumInputSlots));
474     fn("NumOutputSlots", std::to_string(desc.m_NumOutputSlots));
475 }
476 
Serialize(ParameterStringifyFunction & fn,const TransposeConvolution2dDescriptor & desc)477 void StringifyLayerParameters<TransposeConvolution2dDescriptor>::Serialize(
478     ParameterStringifyFunction& fn,
479     const TransposeConvolution2dDescriptor& desc)
480 {
481     {
482         std::stringstream ss;
483         ss << "(" << desc.m_PadTop    << "," << desc.m_PadLeft
484            << "," << desc.m_PadBottom << "," << desc.m_PadRight << ")";
485         fn("Padding(T,L,B,R)",ss.str());
486     }
487 
488     {
489         std::stringstream ss;
490         ss << "(" << desc.m_StrideX <<  "," << desc.m_StrideY << ")";
491         fn("Stride(X,Y)", ss.str());
492     }
493 
494     fn("BiasEnabled", (desc.m_BiasEnabled ? "true" : "false"));
495     fn("DataLayout", GetDataLayoutName(desc.m_DataLayout));
496 }
497 
Serialize(ParameterStringifyFunction & fn,const TransposeDescriptor & desc)498 void StringifyLayerParameters<TransposeDescriptor>::Serialize(ParameterStringifyFunction& fn,
499                                                               const TransposeDescriptor& desc)
500 {
501     std::stringstream ss;
502     ss <<  "[";
503     bool addComma = false;
504     for (auto it : desc.m_DimMappings)
505     {
506         if (addComma)
507         {
508             ss << ",";
509         }
510         ss << it;
511         addComma = true;
512     }
513     ss << "]";
514 
515     fn("DimMappings",ss.str());
516 }
517 
518 } // namespace armnn