2 // Copyright © 2017 Arm Ltd. All rights reserved.
3 // SPDX-License-Identifier: MIT
5 #include "SerializeLayerParameters.hpp"
6 #include <armnn/TypesUtils.hpp>
14 void StringifyLayerParameters<PermuteDescriptor>::Serialize(ParameterStringifyFunction& fn,
15 const PermuteDescriptor& desc)
19 bool addComma = false;
20 for (auto it : desc.m_DimMappings)
31 fn("DimMappings",ss.str());
34 void StringifyLayerParameters<ReshapeDescriptor>::Serialize(ParameterStringifyFunction& fn,
35 const ReshapeDescriptor& desc)
38 ss << desc.m_TargetShape;
39 fn("TargetShape",ss.str());
42 void StringifyLayerParameters<ActivationDescriptor>::Serialize(ParameterStringifyFunction& fn,
43 const ActivationDescriptor& desc)
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));
50 void StringifyLayerParameters<Convolution2dDescriptor>::Serialize(ParameterStringifyFunction& fn,
51 const Convolution2dDescriptor& desc)
55 ss << "(" << desc.m_PadTop << "," << desc.m_PadLeft
56 << "," << desc.m_PadBottom << "," << desc.m_PadRight << ")";
57 fn("Padding(T,L,B,R)",ss.str());
62 ss << "(" << desc.m_StrideX << "," << desc.m_StrideY << ")";
63 fn("Stride(X,Y)", ss.str());
68 ss << "(" << desc.m_DilationX << "," << desc.m_DilationY << ")";
69 fn("Dilation(X,Y)", ss.str());
72 fn("BiasEnabled",(desc.m_BiasEnabled ? "true" : "false"));
73 fn("DataLayout", GetDataLayoutName(desc.m_DataLayout));
76 void StringifyLayerParameters<BatchNormalizationDescriptor>::Serialize(ParameterStringifyFunction& fn,
77 const BatchNormalizationDescriptor& desc)
79 fn("Eps", std::to_string(desc.m_Eps));
80 fn("DataLayout", GetDataLayoutName(desc.m_DataLayout));
83 void StringifyLayerParameters<DepthwiseConvolution2dDescriptor>::Serialize(
84 ParameterStringifyFunction& fn,
85 const DepthwiseConvolution2dDescriptor& desc)
89 ss << "(" << desc.m_PadTop << "," << desc.m_PadLeft
90 << "," << desc.m_PadBottom << "," << desc.m_PadRight << ")";
91 fn("Padding(T,L,B,R)",ss.str());
96 ss << "(" << desc.m_StrideX << "," << desc.m_StrideY << ")";
97 fn("Stride(X,Y)", ss.str());
101 std::stringstream ss;
102 ss << "(" << desc.m_DilationX << "," << desc.m_DilationY << ")";
103 fn("Dilation(X,Y)", ss.str());
106 fn("BiasEnabled",(desc.m_BiasEnabled ? "true" : "false"));
107 fn("DataLayout", GetDataLayoutName(desc.m_DataLayout));
110 void StringifyLayerParameters<Pooling2dDescriptor>::Serialize(ParameterStringifyFunction& fn,
111 const Pooling2dDescriptor& desc)
113 fn("Type", GetPoolingAlgorithmAsCString(desc.m_PoolType));
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());
122 std::stringstream ss;
123 ss << "(" << desc.m_PoolWidth << "," << desc.m_PoolHeight << ")";
124 fn("(Width,Height)", ss.str());
128 std::stringstream ss;
129 ss << "(" << desc.m_StrideX << "," << desc.m_StrideY << ")";
130 fn("Stride(X,Y)", ss.str());
133 fn("OutputShapeRounding", GetOutputShapeRoundingAsCString(desc.m_OutputShapeRounding));
134 fn("PaddingMethod", GetPaddingMethodAsCString(desc.m_PaddingMethod));
135 fn("DataLayout", GetDataLayoutName(desc.m_DataLayout));
138 void StringifyLayerParameters<SoftmaxDescriptor>::Serialize(ParameterStringifyFunction& fn,
139 const SoftmaxDescriptor& desc)
141 fn("Beta", std::to_string(desc.m_Beta));
142 fn("Axis", std::to_string(desc.m_Axis));
145 void StringifyLayerParameters<FullyConnectedDescriptor>::Serialize(ParameterStringifyFunction& fn,
146 const FullyConnectedDescriptor& desc)
148 fn("BiasEnabled", (desc.m_BiasEnabled ? "true" : "false"));
149 fn("TransposeWeightMatrix", (desc.m_TransposeWeightMatrix ? "true" : "false"));
152 void StringifyLayerParameters<OriginsDescriptor>::Serialize(ParameterStringifyFunction& fn,
153 const OriginsDescriptor& desc)
155 fn("ConcatAxis", std::to_string(desc.GetConcatAxis()));
157 uint32_t numViews = desc.GetNumViews();
158 uint32_t numDims = desc.GetNumDimensions();
160 for (uint32_t view = 0; view < numViews; ++view)
162 std::stringstream key;
163 key << "MergeTo#" << view;
164 std::stringstream value;
166 auto viewData = desc.GetViewOrigin(view);
168 for (uint32_t dim = 0; dim < numDims; ++dim)
174 value << viewData[dim];
177 fn(key.str(), value.str());
181 void StringifyLayerParameters<ViewsDescriptor>::Serialize(ParameterStringifyFunction& fn, const ViewsDescriptor& desc)
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;
190 auto viewData = desc.GetViewSizes(view);
191 for (uint32_t dim = 0; dim < numDims; ++dim)
197 value << viewData[dim];
200 fn(key.str(), value.str());
202 StringifyLayerParameters<OriginsDescriptor>::Serialize(fn, desc.GetOrigins());
205 void StringifyLayerParameters<DetectionPostProcessDescriptor>::Serialize(ParameterStringifyFunction& fn,
206 const DetectionPostProcessDescriptor& desc)
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"));
216 std::stringstream ss;
217 ss << "(" << desc.m_ScaleX << "," << desc.m_ScaleY << ")";
218 fn("Scale(X,Y)", ss.str());
222 std::stringstream ss;
223 ss << "(" << desc.m_ScaleW << "," << desc.m_ScaleH << ")";
224 fn("Scale(W,H)", ss.str());
228 void StringifyLayerParameters<NormalizationDescriptor>::Serialize(ParameterStringifyFunction& fn,
229 const NormalizationDescriptor& desc)
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));
240 void StringifyLayerParameters<L2NormalizationDescriptor>::Serialize(ParameterStringifyFunction& fn,
241 const L2NormalizationDescriptor& desc)
243 fn("Eps", std::to_string(desc.m_Eps));
244 fn("DataLayout", GetDataLayoutName(desc.m_DataLayout));
247 void StringifyLayerParameters<BatchToSpaceNdDescriptor>::Serialize(ParameterStringifyFunction& fn,
248 const BatchToSpaceNdDescriptor& desc)
251 std::stringstream ss;
253 for (auto&& var : desc.m_BlockShape)
262 fn("BlockShape", ss.str());
266 std::stringstream ss;
268 for (auto&& var : desc.m_Crops)
274 ss << "[" << var.first << "," << var.second << "]";
277 fn("Crops", ss.str());
280 fn("DataLayout", GetDataLayoutName(desc.m_DataLayout));
283 void StringifyLayerParameters<FakeQuantizationDescriptor>::Serialize(ParameterStringifyFunction& fn,
284 const FakeQuantizationDescriptor& desc)
286 fn("Min", std::to_string(desc.m_Min));
287 fn("Max", std::to_string(desc.m_Max));
290 void StringifyLayerParameters<ResizeBilinearDescriptor>::Serialize(ParameterStringifyFunction& fn,
291 const ResizeBilinearDescriptor& desc)
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));
298 void StringifyLayerParameters<ResizeDescriptor>::Serialize(ParameterStringifyFunction& fn,
299 const ResizeDescriptor& desc)
301 fn("TargetWidth", std::to_string(desc.m_TargetWidth));
302 fn("TargetHeight", std::to_string(desc.m_TargetHeight));
303 fn("ResizeMethod", GetResizeMethodAsCString(desc.m_Method));
304 fn("DataLayout", GetDataLayoutName(desc.m_DataLayout));
307 void StringifyLayerParameters<SpaceToBatchNdDescriptor>::Serialize(ParameterStringifyFunction& fn,
308 const SpaceToBatchNdDescriptor& desc)
311 std::stringstream ss;
313 for (auto&& var : desc.m_BlockShape)
322 fn("BlockShape", ss.str());
326 std::stringstream ss;
328 for (auto&& var : desc.m_PadList)
334 ss << "[" << var.first << "," << var.second << "]";
337 fn("PadList", ss.str());
340 fn("DataLayout", GetDataLayoutName(desc.m_DataLayout));
343 void StringifyLayerParameters<SpaceToDepthDescriptor>::Serialize(ParameterStringifyFunction& fn,
344 const SpaceToDepthDescriptor& desc)
346 fn("BlockSize", std::to_string(desc.m_BlockSize));
347 fn("DataLayout", GetDataLayoutName(desc.m_DataLayout));
350 void StringifyLayerParameters<LstmDescriptor>::Serialize(ParameterStringifyFunction& fn, const LstmDescriptor& desc)
352 fn("ActivationFunc", std::to_string(desc.m_ActivationFunc));
353 fn("ClippingThresCell", std::to_string(desc.m_ClippingThresCell));
354 fn("ClippingThresProj", std::to_string(desc.m_ClippingThresProj));
355 fn("CifgEnabled", (desc.m_CifgEnabled ? "true" : "false")) ;
356 fn("PeepholeEnabled", (desc.m_PeepholeEnabled ? "true" : "false")) ;
357 fn("ProjectionEnabled", (desc.m_ProjectionEnabled ? "true" : "false")) ;
358 fn("LayerNormEnabled", (desc.m_LayerNormEnabled ? "true" : "false"));
361 void StringifyLayerParameters<MeanDescriptor>::Serialize(ParameterStringifyFunction& fn, const MeanDescriptor& desc)
364 std::stringstream ss;
366 for (auto&& var : desc.m_Axis)
375 fn("Axis", ss.str());
377 fn("KeepDims", (desc.m_KeepDims ? "true" : "false"));
380 void StringifyLayerParameters<PadDescriptor>::Serialize(ParameterStringifyFunction& fn, const PadDescriptor& desc)
383 std::stringstream ss;
385 for (auto&& var : desc.m_PadList)
391 ss << "[" << var.first << "," << var.second << "]";
394 fn("PadList", ss.str());
396 fn("PadValue", std::to_string(desc.m_PadValue));
399 void StringifyLayerParameters<StackDescriptor>::Serialize(ParameterStringifyFunction& fn, const StackDescriptor& desc)
401 fn("Axis", std::to_string(desc.m_Axis));
402 fn("NumInputs", std::to_string(desc.m_NumInputs));
404 std::stringstream ss;
405 ss << desc.m_InputShape;
406 fn("InputShape",ss.str());
410 void StringifyLayerParameters<StridedSliceDescriptor>::Serialize(ParameterStringifyFunction& fn,
411 const StridedSliceDescriptor& desc)
414 std::stringstream ss;
416 for (auto&& var : desc.m_Begin)
425 fn("Begin", ss.str());
429 std::stringstream ss;
431 for (auto&& var : desc.m_End)
444 std::stringstream ss;
446 for (auto&& var : desc.m_Stride)
455 fn("Stride", ss.str());
458 fn("BeginMask", std::to_string(desc.m_BeginMask));
459 fn("EndMask", std::to_string(desc.m_EndMask));
460 fn("ShrinkAxisMask", std::to_string(desc.m_ShrinkAxisMask));
461 fn("EllipsisMask", std::to_string(desc.m_EllipsisMask));
462 fn("NewAxisMask", std::to_string(desc.m_NewAxisMask));
463 fn("DataLayout", GetDataLayoutName(desc.m_DataLayout));
466 void StringifyLayerParameters<PreCompiledDescriptor>::Serialize(ParameterStringifyFunction& fn,
467 const PreCompiledDescriptor& desc)
469 fn("NumInputSlots", std::to_string(desc.m_NumInputSlots));
470 fn("NumOutputSlots", std::to_string(desc.m_NumOutputSlots));
473 void StringifyLayerParameters<TransposeConvolution2dDescriptor>::Serialize(
474 ParameterStringifyFunction& fn,
475 const TransposeConvolution2dDescriptor& desc)
478 std::stringstream ss;
479 ss << "(" << desc.m_PadTop << "," << desc.m_PadLeft
480 << "," << desc.m_PadBottom << "," << desc.m_PadRight << ")";
481 fn("Padding(T,L,B,R)",ss.str());
485 std::stringstream ss;
486 ss << "(" << desc.m_StrideX << "," << desc.m_StrideY << ")";
487 fn("Stride(X,Y)", ss.str());
490 fn("BiasEnabled", (desc.m_BiasEnabled ? "true" : "false"));
491 fn("DataLayout", GetDataLayoutName(desc.m_DataLayout));