15 #include <flatbuffers/util.h> 19 using namespace armnn;
20 namespace fb = flatbuffers;
31 return serializer::ActivationFunction::ActivationFunction_Sigmoid;
33 return serializer::ActivationFunction::ActivationFunction_TanH;
35 return serializer::ActivationFunction::ActivationFunction_Linear;
37 return serializer::ActivationFunction::ActivationFunction_ReLu;
39 return serializer::ActivationFunction::ActivationFunction_BoundedReLu;
41 return serializer::ActivationFunction::ActivationFunction_LeakyReLu;
43 return serializer::ActivationFunction::ActivationFunction_Abs;
45 return serializer::ActivationFunction::ActivationFunction_Sqrt;
47 return serializer::ActivationFunction::ActivationFunction_Square;
49 return serializer::ActivationFunction::ActivationFunction_Elu;
51 return serializer::ActivationFunction::ActivationFunction_HardSwish;
53 return serializer::ActivationFunction::ActivationFunction_Sigmoid;
62 return serializer::ArgMinMaxFunction::ArgMinMaxFunction_Max;
65 return serializer::ArgMinMaxFunction::ArgMinMaxFunction_Min;
71 if (m_guidMap.empty())
73 m_guidMap.insert(std::make_pair(guid, m_layerId));
75 else if (m_guidMap.find(guid) == m_guidMap.end())
78 m_guidMap.insert(std::make_pair(guid, m_layerId));
82 return m_guidMap[guid];
91 auto flatBufferInputBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Input);
94 auto flatBufferInputBindableBaseLayer = serializer::CreateBindableLayerBase(m_flatBufferBuilder,
95 flatBufferInputBaseLayer,
98 m_inputIds.push_back(
id);
101 auto flatBufferInputLayer = serializer::CreateInputLayer(m_flatBufferBuilder, flatBufferInputBindableBaseLayer);
104 CreateAnyLayer(flatBufferInputLayer.o, serializer::Layer::Layer_InputLayer);
113 auto flatBufferOutputBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Output);
116 auto flatBufferOutputBindableBaseLayer = serializer::CreateBindableLayerBase(m_flatBufferBuilder,
117 flatBufferOutputBaseLayer,
120 m_outputIds.push_back(
id);
123 auto flatBufferOutputLayer = serializer::CreateOutputLayer(m_flatBufferBuilder, flatBufferOutputBindableBaseLayer);
125 CreateAnyLayer(flatBufferOutputLayer.o, serializer::Layer::Layer_OutputLayer);
131 auto flatBufferBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Abs);
132 auto flatBufferAbsLayer = serializer::CreateAbsLayer(m_flatBufferBuilder, flatBufferBaseLayer);
134 CreateAnyLayer(flatBufferAbsLayer.o, serializer::Layer::Layer_AbsLayer);
145 auto flatBufferBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Activation);
148 auto flatBufferDescriptor = CreateActivationDescriptor(m_flatBufferBuilder,
154 auto flatBufferAdditionLayer = CreateActivationLayer(m_flatBufferBuilder,
156 flatBufferDescriptor);
159 CreateAnyLayer(flatBufferAdditionLayer.o, serializer::Layer::Layer_ActivationLayer);
168 auto flatBufferAdditionBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Addition);
171 auto flatBufferAdditionLayer = serializer::CreateAdditionLayer(m_flatBufferBuilder, flatBufferAdditionBaseLayer);
174 CreateAnyLayer(flatBufferAdditionLayer.o, serializer::Layer::Layer_AdditionLayer);
185 auto flatBufferBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_ArgMinMax);
188 auto flatBufferDescriptor = CreateArgMinMaxDescriptor(m_flatBufferBuilder,
193 auto flatBufferLayer = CreateArgMinMaxLayer(m_flatBufferBuilder,
195 flatBufferDescriptor);
197 CreateAnyLayer(flatBufferLayer.o, serializer::Layer::Layer_ArgMinMaxLayer);
208 auto flatBufferBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_BatchToSpaceNd);
210 std::vector<unsigned int> crops;
211 crops.reserve(descriptor.
m_Crops.size() * 2);
212 for (
auto& crop : descriptor.
m_Crops)
214 crops.push_back(crop.first);
215 crops.push_back(crop.second);
218 auto flatBufferDescriptor =
219 CreateBatchToSpaceNdDescriptor(m_flatBufferBuilder,
220 m_flatBufferBuilder.CreateVector(descriptor.
m_BlockShape),
221 m_flatBufferBuilder.CreateVector(crops),
224 auto flatBufferLayer = serializer::CreateBatchToSpaceNdLayer(m_flatBufferBuilder,
226 flatBufferDescriptor);
228 CreateAnyLayer(flatBufferLayer.o, serializer::Layer::Layer_BatchToSpaceNdLayer);
241 auto fbBatchNormalizationBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_BatchNormalization);
242 auto fbBatchNormalizationDescriptor = serializer::CreateBatchNormalizationDescriptor(
244 batchNormDescriptor.
m_Eps,
247 auto fbMeanConstTensorInfo = CreateConstTensorInfo(mean);
248 auto fbVarianceConstTensorInfo = CreateConstTensorInfo(variance);
249 auto fbBetaConstTensorInfo = CreateConstTensorInfo(beta);
250 auto fbGammaConstTensorInfo = CreateConstTensorInfo(gamma);
251 auto fbBatchNormalizationLayer = serializer::CreateBatchNormalizationLayer(m_flatBufferBuilder,
252 fbBatchNormalizationBaseLayer,
253 fbBatchNormalizationDescriptor,
254 fbMeanConstTensorInfo,
255 fbVarianceConstTensorInfo,
256 fbBetaConstTensorInfo,
257 fbGammaConstTensorInfo);
259 CreateAnyLayer(fbBatchNormalizationLayer.o, serializer::Layer::Layer_BatchNormalizationLayer);
268 auto fbBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Comparison);
269 auto fbDescriptor = serializer::CreateComparisonDescriptor(
273 auto fbLayer = serializer::CreateComparisonLayer(m_flatBufferBuilder, fbBaseLayer, fbDescriptor);
274 CreateAnyLayer(fbLayer.o, serializer::Layer::Layer_ComparisonLayer);
285 auto flatBufferConstantBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Constant);
287 auto flatBufferConstTensorInfo = CreateConstTensorInfo(input);
290 auto flatBufferLayer = CreateConstantLayer(m_flatBufferBuilder,
291 flatBufferConstantBaseLayer,
292 flatBufferConstTensorInfo);
295 CreateAnyLayer(flatBufferLayer.o, serializer::Layer::Layer_ConstantLayer);
308 auto flatBufferBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Convolution2d);
310 auto flatBufferDescriptor = CreateConvolution2dDescriptor(m_flatBufferBuilder,
321 auto flatBufferWeightsConstTensorInfo = CreateConstTensorInfo(weights);
322 flatbuffers::Offset<serializer::ConstTensor> flatBufferBiasesConstTensorInfo;
326 flatBufferBiasesConstTensorInfo = CreateConstTensorInfo(biases.
value());
330 auto flatBufferLayer = CreateConvolution2dLayer(m_flatBufferBuilder,
332 flatBufferDescriptor,
333 flatBufferWeightsConstTensorInfo,
334 flatBufferBiasesConstTensorInfo);
337 CreateAnyLayer(flatBufferLayer.o, serializer::Layer::Layer_Convolution2dLayer);
346 auto fbBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_DepthToSpace);
347 auto fbDescriptor = CreateDepthToSpaceDescriptor(m_flatBufferBuilder,
351 auto fbLayer = serializer::CreateDepthToSpaceLayer(m_flatBufferBuilder, fbBaseLayer, fbDescriptor);
353 CreateAnyLayer(fbLayer.o, serializer::Layer::Layer_DepthToSpaceLayer);
364 auto fbBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_DepthwiseConvolution2d);
365 auto fbDescriptor = CreateDepthwiseConvolution2dDescriptor(m_flatBufferBuilder,
377 flatbuffers::Offset<serializer::ConstTensor> fbWeightsConstTensorInfo = CreateConstTensorInfo(weights);
378 flatbuffers::Offset<serializer::ConstTensor> fbBiasesConstTensorInfo;
381 fbBiasesConstTensorInfo = CreateConstTensorInfo(biases.
value());
384 auto flatBufferLayer = CreateDepthwiseConvolution2dLayer(m_flatBufferBuilder,
387 fbWeightsConstTensorInfo,
388 fbBiasesConstTensorInfo);
390 CreateAnyLayer(flatBufferLayer.o, serializer::Layer::Layer_DepthwiseConvolution2dLayer);
398 auto fbDequantizeBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Dequantize);
399 auto fbDequantizeLayer = serializer::CreateDequantizeLayer(m_flatBufferBuilder, fbDequantizeBaseLayer);
401 CreateAnyLayer(fbDequantizeLayer.o, serializer::Layer::Layer_DequantizeLayer);
411 auto fbBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_DetectionPostProcess);
412 auto fbDescriptor = CreateDetectionPostProcessDescriptor(m_flatBufferBuilder,
425 flatbuffers::Offset<serializer::ConstTensor> fbAnchorsConstTensorInfo = CreateConstTensorInfo(anchors);
427 auto flatBufferLayer = CreateDetectionPostProcessLayer(m_flatBufferBuilder,
430 fbAnchorsConstTensorInfo);
432 CreateAnyLayer(flatBufferLayer.o, serializer::Layer::Layer_DetectionPostProcessLayer);
439 auto fbDivisionBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Division);
440 auto fbDivisionLayer = serializer::CreateDivisionLayer(m_flatBufferBuilder, fbDivisionBaseLayer);
442 CreateAnyLayer(fbDivisionLayer.o, serializer::Layer::Layer_DivisionLayer);
451 auto fbBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_ElementwiseUnary);
452 auto fbDescriptor = serializer::CreateElementwiseUnaryDescriptor(
456 auto fbLayer = serializer::CreateElementwiseUnaryLayer(m_flatBufferBuilder, fbBaseLayer, fbDescriptor);
457 CreateAnyLayer(fbLayer.o, serializer::Layer::Layer_ElementwiseUnaryLayer);
464 auto fbBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Equal);
465 auto fbEqualLayer = serializer::CreateEqualLayer(m_flatBufferBuilder, fbBaseLayer);
467 CreateAnyLayer(fbEqualLayer.o, serializer::Layer::Layer_EqualLayer);
476 auto fbFillBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Fill);
478 auto fbDescriptor = serializer::CreateFillDescriptor(m_flatBufferBuilder, fillDescriptor.
m_Value);
480 auto fbFillLayer = serializer::CreateFillLayer(m_flatBufferBuilder, fbFillBaseLayer, fbDescriptor);
482 CreateAnyLayer(fbFillLayer.o, serializer::Layer::Layer_FillLayer);
489 auto flatBufferFloorBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Floor);
490 auto flatBufferFloorLayer = serializer::CreateFloorLayer(m_flatBufferBuilder, flatBufferFloorBaseLayer);
492 CreateAnyLayer(flatBufferFloorLayer.o, serializer::Layer::Layer_FloorLayer);
499 VisitGatherLayer(layer, gatherDescriptor, name);
508 auto fbGatherDescriptor = CreateGatherDescriptor(m_flatBufferBuilder,
510 auto fbGatherBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Gather);
511 auto flatBufferLayer = serializer::CreateGatherLayer(m_flatBufferBuilder, fbGatherBaseLayer, fbGatherDescriptor);
513 CreateAnyLayer(flatBufferLayer.o, serializer::Layer::Layer_GatherLayer);
520 auto fbGreaterBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Greater);
521 auto fbGreaterLayer = serializer::CreateGreaterLayer(m_flatBufferBuilder, fbGreaterBaseLayer);
523 CreateAnyLayer(fbGreaterLayer.o, serializer::Layer::Layer_GreaterLayer);
526 void SerializerVisitor::VisitInstanceNormalizationLayer(
533 auto fbDescriptor = serializer::CreateInstanceNormalizationDescriptor(
535 instanceNormalizationDescriptor.
m_Gamma,
536 instanceNormalizationDescriptor.
m_Beta,
537 instanceNormalizationDescriptor.
m_Eps,
540 auto fbBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_InstanceNormalization);
541 auto fbLayer = serializer::CreateInstanceNormalizationLayer(m_flatBufferBuilder, fbBaseLayer, fbDescriptor);
543 CreateAnyLayer(fbLayer.o, serializer::Layer::Layer_InstanceNormalizationLayer);
553 auto fbBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_L2Normalization);
556 auto fbDescriptor = serializer::CreateL2NormalizationDescriptor(
559 l2NormalizationDescriptor.
m_Eps);
562 auto fbLayer = serializer::CreateL2NormalizationLayer(m_flatBufferBuilder, fbBaseLayer, fbDescriptor);
564 CreateAnyLayer(fbLayer.o, serializer::Layer::Layer_L2NormalizationLayer);
573 auto fbBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_LogicalBinary);
574 auto fbDescriptor = serializer::CreateLogicalBinaryDescriptor(
578 auto fbLayer = serializer::CreateLogicalBinaryLayer(m_flatBufferBuilder, fbBaseLayer, fbDescriptor);
579 CreateAnyLayer(fbLayer.o, serializer::Layer::Layer_LogicalBinaryLayer);
589 auto flatBufferLogSoftmaxBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_LogSoftmax);
592 auto flatBufferLogSoftmaxDesc =
593 serializer::CreateLogSoftmaxDescriptor(m_flatBufferBuilder,
594 logSoftmaxDescriptor.
m_Beta,
595 logSoftmaxDescriptor.
m_Axis);
598 auto flatBufferLogSoftmaxLayer =
599 serializer::CreateLogSoftmaxLayer(m_flatBufferBuilder,
600 flatBufferLogSoftmaxBaseLayer,
601 flatBufferLogSoftmaxDesc);
603 CreateAnyLayer(flatBufferLogSoftmaxLayer.o, serializer::Layer::Layer_LogSoftmaxLayer);
613 auto fbLstmBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Lstm);
615 auto fbLstmDescriptor = serializer::CreateLstmDescriptor(
633 auto cellBias = CreateConstTensorInfo(*params.
m_CellBias);
637 flatbuffers::Offset<serializer::ConstTensor> inputToInputWeights;
638 flatbuffers::Offset<serializer::ConstTensor> recurrentToInputWeights;
639 flatbuffers::Offset<serializer::ConstTensor> cellToInputWeights;
640 flatbuffers::Offset<serializer::ConstTensor> inputGateBias;
641 flatbuffers::Offset<serializer::ConstTensor> projectionWeights;
642 flatbuffers::Offset<serializer::ConstTensor> projectionBias;
643 flatbuffers::Offset<serializer::ConstTensor> cellToForgetWeights;
644 flatbuffers::Offset<serializer::ConstTensor> cellToOutputWeights;
645 flatbuffers::Offset<serializer::ConstTensor> inputLayerNormWeights;
646 flatbuffers::Offset<serializer::ConstTensor> forgetLayerNormWeights;
647 flatbuffers::Offset<serializer::ConstTensor> cellLayerNormWeights;
648 flatbuffers::Offset<serializer::ConstTensor> outputLayerNormWeights;
681 auto fbLstmParams = serializer::CreateLstmInputParams(
683 inputToForgetWeights,
685 inputToOutputWeights,
686 recurrentToForgetWeights,
687 recurrentToCellWeights,
688 recurrentToOutputWeights,
693 recurrentToInputWeights,
700 inputLayerNormWeights,
701 forgetLayerNormWeights,
702 cellLayerNormWeights,
703 outputLayerNormWeights);
705 auto fbLstmLayer = serializer::CreateLstmLayer(
711 CreateAnyLayer(fbLstmLayer.o, serializer::Layer::Layer_LstmLayer);
718 auto fbMaximumBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Maximum);
719 auto fbMaximumLayer = serializer::CreateMaximumLayer(m_flatBufferBuilder, fbMaximumBaseLayer);
721 CreateAnyLayer(fbMaximumLayer.o, serializer::Layer::Layer_MaximumLayer);
730 auto fbMeanBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Mean);
731 auto fbMeanDescriptor = serializer::CreateMeanDescriptor(m_flatBufferBuilder,
732 m_flatBufferBuilder.CreateVector(descriptor.
m_Axis),
735 auto fbMeanLayer = serializer::CreateMeanLayer(m_flatBufferBuilder,
739 CreateAnyLayer(fbMeanLayer.o, serializer::Layer::Layer_MeanLayer);
746 auto fbMinimumBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Minimum);
747 auto fbMinimumLayer = serializer::CreateMinimumLayer(m_flatBufferBuilder, fbMinimumBaseLayer);
749 CreateAnyLayer(fbMinimumLayer.o, serializer::Layer::Layer_MinimumLayer);
756 auto fbMergeBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Merge);
757 auto fbMergeLayer = serializer::CreateMergeLayer(m_flatBufferBuilder, fbMergeBaseLayer);
759 CreateAnyLayer(fbMergeLayer.o, serializer::Layer::Layer_MergeLayer);
766 VisitConcatLayer(layer, mergerDescriptor, name);
775 auto flatBufferConcatBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Concat);
777 std::vector<flatbuffers::Offset<UintVector>> views;
778 for (
unsigned int v = 0; v < concatDescriptor.
GetNumViews(); ++v)
781 std::vector<uint32_t> origins;
784 origins.push_back(origin[d]);
786 auto view = m_flatBufferBuilder.CreateVector(origins);
787 auto uintVector = CreateUintVector(m_flatBufferBuilder, view);
788 views.push_back(uintVector);
791 auto flatBufferConcatDescriptor = CreateOriginsDescriptor(m_flatBufferBuilder,
795 m_flatBufferBuilder.CreateVector(views));
797 auto flatBufferLayer = CreateConcatLayer(m_flatBufferBuilder,
798 flatBufferConcatBaseLayer,
799 flatBufferConcatDescriptor);
801 CreateAnyLayer(flatBufferLayer.o, serializer::Layer::Layer_ConcatLayer);
808 auto fbMultiplicationBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Multiplication);
809 auto fbMultiplicationLayer = serializer::CreateMultiplicationLayer(m_flatBufferBuilder,
810 fbMultiplicationBaseLayer);
812 CreateAnyLayer(fbMultiplicationLayer.o, serializer::Layer::Layer_MultiplicationLayer);
821 auto flatBufferBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Pad);
823 std::vector<unsigned int> padList;
826 padList.push_back(p.first);
827 padList.push_back(p.second);
830 auto flatBufferPadDesc = serializer::CreatePadDescriptor(m_flatBufferBuilder,
831 m_flatBufferBuilder.CreateVector(padList),
834 auto flatBufferPadLayer = serializer::CreatePadLayer(m_flatBufferBuilder,
838 CreateAnyLayer(flatBufferPadLayer.o, serializer::Layer::Layer_PadLayer);
848 auto flatBufferPermuteBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Permute);
850 std::vector<unsigned int> dimMappings;
856 auto flatBufferPermuteDesc = serializer::CreatePermuteDescriptor(m_flatBufferBuilder,
857 m_flatBufferBuilder.CreateVector(dimMappings));
860 auto flatBufferPermuteLayer = serializer::CreatePermuteLayer(m_flatBufferBuilder,
861 flatBufferPermuteBaseLayer,
862 flatBufferPermuteDesc);
865 CreateAnyLayer(flatBufferPermuteLayer.o, serializer::Layer::Layer_PermuteLayer);
873 auto flatBufferBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Rank);
874 auto flatBufferRankLayer = serializer::CreateRankLayer(m_flatBufferBuilder, flatBufferBaseLayer);
876 CreateAnyLayer(flatBufferRankLayer.o, serializer::Layer::Layer_RankLayer);
886 auto flatBufferReshapeBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Reshape);
888 std::vector<unsigned int> targetShape;
894 auto flatBufferReshapeDesc = serializer::CreateReshapeDescriptor(m_flatBufferBuilder,
895 m_flatBufferBuilder.CreateVector(targetShape));
898 auto flatBufferReshapeLayer = serializer::CreateReshapeLayer(m_flatBufferBuilder, flatBufferReshapeBaseLayer,
899 flatBufferReshapeDesc);
902 CreateAnyLayer(flatBufferReshapeLayer.o, serializer::Layer::Layer_ReshapeLayer);
911 auto flatBufferBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_ResizeBilinear);
913 auto flatBufferDescriptor =
914 CreateResizeBilinearDescriptor(m_flatBufferBuilder,
921 auto flatBufferLayer = serializer::CreateResizeBilinearLayer(m_flatBufferBuilder,
923 flatBufferDescriptor);
925 CreateAnyLayer(flatBufferLayer.o, serializer::Layer::Layer_ResizeBilinearLayer);
934 auto flatBufferBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Resize);
936 auto flatBufferDescriptor =
937 CreateResizeDescriptor(m_flatBufferBuilder,
945 auto flatBufferLayer = serializer::CreateResizeLayer(m_flatBufferBuilder,
947 flatBufferDescriptor);
949 CreateAnyLayer(flatBufferLayer.o, serializer::Layer::Layer_ResizeLayer);
956 auto fbRsqrtBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Rsqrt);
957 auto fbRsqrtLayer = serializer::CreateRsqrtLayer(m_flatBufferBuilder, fbRsqrtBaseLayer);
959 CreateAnyLayer(fbRsqrtLayer.o, serializer::Layer::Layer_RsqrtLayer);
968 auto fbSliceBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Slice);
969 auto fbSliceDescriptor = CreateSliceDescriptor(m_flatBufferBuilder,
970 m_flatBufferBuilder.CreateVector(sliceDescriptor.
m_Begin),
971 m_flatBufferBuilder.CreateVector(sliceDescriptor.
m_Size));
973 auto fbSliceLayer = serializer::CreateSliceLayer(m_flatBufferBuilder, fbSliceBaseLayer, fbSliceDescriptor);
975 CreateAnyLayer(fbSliceLayer.o, serializer::Layer::Layer_SliceLayer);
986 auto flatBufferSoftmaxBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Softmax);
989 auto flatBufferSoftmaxDesc =
990 serializer::CreateSoftmaxDescriptor(m_flatBufferBuilder, softmaxDescriptor.
m_Beta);
993 auto flatBufferSoftmaxLayer =
994 serializer::CreateSoftmaxLayer(m_flatBufferBuilder,
995 flatBufferSoftmaxBaseLayer,
996 flatBufferSoftmaxDesc);
998 CreateAnyLayer(flatBufferSoftmaxLayer.o, serializer::Layer::Layer_SoftmaxLayer);
1007 auto fbPooling2dBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Pooling2d);
1008 auto fbPooling2dDescriptor = serializer::CreatePooling2dDescriptor(
1009 m_flatBufferBuilder,
1023 auto fbPooling2dLayer = serializer::CreatePooling2dLayer(m_flatBufferBuilder,
1024 fbPooling2dBaseLayer,
1025 fbPooling2dDescriptor);
1027 CreateAnyLayer(fbPooling2dLayer.o, serializer::Layer::Layer_Pooling2dLayer);
1036 auto flatBufferPreluBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Prelu);
1039 auto flatBufferPreluLayer = serializer::CreatePreluLayer(m_flatBufferBuilder, flatBufferPreluBaseLayer);
1042 CreateAnyLayer(flatBufferPreluLayer.o, serializer::Layer::Layer_PreluLayer);
1049 auto fbQuantizeBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Quantize);
1050 auto fbQuantizeLayer = serializer::CreateQuantizeLayer(m_flatBufferBuilder,
1051 fbQuantizeBaseLayer);
1052 CreateAnyLayer(fbQuantizeLayer.o, serializer::Layer::Layer_QuantizeLayer);
1065 auto flatBufferBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_FullyConnected);
1068 auto flatBufferDescriptor =
1069 serializer::CreateFullyConnectedDescriptor(m_flatBufferBuilder,
1074 auto flatBufferWeights = CreateConstTensorInfo(weights);
1077 flatbuffers::Offset<serializer::ConstTensor> flatBufferBiases;
1080 flatBufferBiases = CreateConstTensorInfo(biases.
value());
1084 auto flatBufferLayer = serializer::CreateFullyConnectedLayer(m_flatBufferBuilder,
1085 flatBufferBaseLayer,
1086 flatBufferDescriptor,
1091 CreateAnyLayer(flatBufferLayer.o, serializer::Layer::Layer_FullyConnectedLayer);
1102 auto flatBufferBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_SpaceToBatchNd);
1104 std::vector<unsigned int> padList;
1105 padList.reserve(spaceToBatchNdDescriptor.
m_PadList.size()*2);
1106 for (
auto& pad : spaceToBatchNdDescriptor.
m_PadList)
1108 padList.push_back(pad.first);
1109 padList.push_back(pad.second);
1112 auto flatBufferDescriptor =
1113 CreateSpaceToBatchNdDescriptor(m_flatBufferBuilder,
1114 m_flatBufferBuilder.CreateVector(spaceToBatchNdDescriptor.
m_BlockShape),
1115 m_flatBufferBuilder.CreateVector(padList),
1118 auto flatBufferLayer = serializer::CreateSpaceToBatchNdLayer(m_flatBufferBuilder,
1119 flatBufferBaseLayer,
1120 flatBufferDescriptor);
1122 CreateAnyLayer(flatBufferLayer.o, serializer::Layer::Layer_SpaceToBatchNdLayer);
1132 auto flatBufferBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_SpaceToDepth);
1133 auto flatBufferDescriptor =
1134 CreateSpaceToDepthDescriptor(m_flatBufferBuilder,
1138 auto flatBufferLayer = serializer::CreateSpaceToDepthLayer(m_flatBufferBuilder,
1139 flatBufferBaseLayer,
1140 flatBufferDescriptor);
1142 CreateAnyLayer(flatBufferLayer.o, serializer::Layer::Layer_SpaceToDepthLayer);
1153 std::vector<flatbuffers::Offset<UintVector>> flatBufferViewOrigins;
1154 flatBufferViewOrigins.reserve(viewsDescriptor.
GetNumViews());
1156 for(
unsigned int vIdx = 0; vIdx < viewsDescriptor.
GetNumViews(); ++vIdx)
1158 std::vector<uint32_t> viewOrigin;
1162 for(
unsigned int dIdx = 0; dIdx < viewsDescriptor.
GetNumDimensions(); ++dIdx)
1164 viewOrigin.push_back(viewsDescriptor.
GetViewOrigin(vIdx)[dIdx]);
1167 flatBufferViewOrigins.push_back(CreateUintVector(m_flatBufferBuilder,
1168 m_flatBufferBuilder.CreateVector(viewOrigin)));
1172 auto flatBufferOriginDescriptor = CreateOriginsDescriptor(m_flatBufferBuilder,
1176 m_flatBufferBuilder.CreateVector(flatBufferViewOrigins));
1179 std::vector<flatbuffers::Offset<UintVector>> flatBufferViewSizes;
1180 flatBufferViewSizes.reserve(viewsDescriptor.
GetNumViews());
1182 for(
unsigned int vIdx = 0; vIdx < viewsDescriptor.
GetNumViews(); ++vIdx)
1184 std::vector<uint32_t> viewSize;
1188 for(
unsigned int dIdx = 0; dIdx < viewsDescriptor.
GetNumDimensions(); ++dIdx)
1190 viewSize.push_back(viewsDescriptor.
GetViewSizes(vIdx)[dIdx]);
1193 flatBufferViewSizes.push_back(CreateUintVector(m_flatBufferBuilder,
1194 m_flatBufferBuilder.CreateVector(viewSize)));
1198 auto flatBufferViewsDescriptor = CreateViewsDescriptor(m_flatBufferBuilder,
1199 flatBufferOriginDescriptor,
1200 m_flatBufferBuilder.CreateVector(flatBufferViewSizes));
1203 auto flatBufferBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Splitter);
1205 auto flatBufferSplitterLayer = serializer::CreateSplitterLayer(m_flatBufferBuilder,
1206 flatBufferBaseLayer,
1207 flatBufferViewsDescriptor);
1209 CreateAnyLayer(flatBufferSplitterLayer.o, serializer::Layer::Layer_SplitterLayer);
1218 auto fbNormalizationBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Normalization);
1220 auto fbNormalizationDescriptor = serializer::CreateNormalizationDescriptor(
1221 m_flatBufferBuilder,
1230 auto flatBufferLayer = serializer::CreateNormalizationLayer(m_flatBufferBuilder,
1231 fbNormalizationBaseLayer,
1232 fbNormalizationDescriptor);
1234 CreateAnyLayer(flatBufferLayer.o, serializer::Layer::Layer_NormalizationLayer);
1243 auto stackBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Stack);
1245 std::vector<unsigned int> inputShape;
1251 auto flatBufferStackDescriptor = CreateStackDescriptor(m_flatBufferBuilder,
1254 m_flatBufferBuilder.CreateVector(inputShape));
1256 auto stackLayer = serializer::CreateStackLayer(m_flatBufferBuilder, stackBaseLayer, flatBufferStackDescriptor);
1257 CreateAnyLayer(stackLayer.o, serializer::Layer::Layer_StackLayer);
1266 auto fbDescriptor = serializer::CreateStandInDescriptor(m_flatBufferBuilder,
1270 auto fbBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_StandIn);
1271 auto fbLayer = serializer::CreateStandInLayer(m_flatBufferBuilder, fbBaseLayer, fbDescriptor);
1273 CreateAnyLayer(fbLayer.o, serializer::Layer::Layer_StandInLayer);
1282 auto flatBufferBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_StridedSlice);
1284 auto flatBufferDescriptor =
1285 CreateStridedSliceDescriptor(m_flatBufferBuilder,
1286 m_flatBufferBuilder.CreateVector(stridedSliceDescriptor.
m_Begin),
1287 m_flatBufferBuilder.CreateVector(stridedSliceDescriptor.
m_End),
1288 m_flatBufferBuilder.CreateVector(stridedSliceDescriptor.
m_Stride),
1296 auto flatBufferLayer = serializer::CreateStridedSliceLayer(m_flatBufferBuilder,
1297 flatBufferBaseLayer,
1298 flatBufferDescriptor);
1300 CreateAnyLayer(flatBufferLayer.o, serializer::Layer::Layer_StridedSliceLayer);
1307 auto fbSubtractionBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Subtraction);
1308 auto fbSubtractionLayer = serializer::CreateSubtractionLayer(m_flatBufferBuilder, fbSubtractionBaseLayer);
1310 CreateAnyLayer(fbSubtractionLayer.o, serializer::Layer::Layer_SubtractionLayer);
1317 auto fbSwitchBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Switch);
1318 auto fbSwitchLayer = serializer::CreateSwitchLayer(m_flatBufferBuilder, fbSwitchBaseLayer);
1320 CreateAnyLayer(fbSwitchLayer.o, serializer::Layer::Layer_SwitchLayer);
1323 void SerializerVisitor::VisitTransposeConvolution2dLayer(
1332 auto fbBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Convolution2d);
1333 auto fbDescriptor = CreateTransposeConvolution2dDescriptor(m_flatBufferBuilder,
1344 auto fbWeightsConstTensorInfo = CreateConstTensorInfo(weights);
1345 flatbuffers::Offset<serializer::ConstTensor> fbBiasesConstTensorInfo;
1348 fbBiasesConstTensorInfo = CreateConstTensorInfo(biases.
value());
1351 auto fbLayer = CreateTransposeConvolution2dLayer(m_flatBufferBuilder,
1354 fbWeightsConstTensorInfo,
1355 fbBiasesConstTensorInfo);
1357 CreateAnyLayer(fbLayer.o, serializer::Layer::Layer_TransposeConvolution2dLayer);
1367 auto flatBufferBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Transpose);
1369 std::vector<unsigned int> dimMappings;
1375 auto flatBufferDesc = serializer::CreateTransposeDescriptor(m_flatBufferBuilder,
1376 m_flatBufferBuilder.CreateVector(dimMappings));
1379 auto flatBufferLayer = serializer::CreateTransposeLayer(m_flatBufferBuilder,
1380 flatBufferBaseLayer,
1384 CreateAnyLayer(flatBufferLayer.o, serializer::Layer::Layer_TransposeLayer);
1394 auto fbQLstmBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_QLstm);
1396 auto fbQLstmDescriptor = serializer::CreateQLstmDescriptor(
1397 m_flatBufferBuilder,
1420 auto cellBias = CreateConstTensorInfo(*params.
m_CellBias);
1424 flatbuffers::Offset<serializer::ConstTensor> inputToInputWeights;
1425 flatbuffers::Offset<serializer::ConstTensor> recurrentToInputWeights;
1426 flatbuffers::Offset<serializer::ConstTensor> inputGateBias;
1436 flatbuffers::Offset<serializer::ConstTensor> projectionWeights;
1437 flatbuffers::Offset<serializer::ConstTensor> projectionBias;
1446 flatbuffers::Offset<serializer::ConstTensor> cellToInputWeights;
1447 flatbuffers::Offset<serializer::ConstTensor> cellToForgetWeights;
1448 flatbuffers::Offset<serializer::ConstTensor> cellToOutputWeights;
1462 flatbuffers::Offset<serializer::ConstTensor> inputLayerNormWeights;
1463 flatbuffers::Offset<serializer::ConstTensor> forgetLayerNormWeights;
1464 flatbuffers::Offset<serializer::ConstTensor> cellLayerNormWeights;
1465 flatbuffers::Offset<serializer::ConstTensor> outputLayerNormWeights;
1479 auto fbQLstmParams = serializer::CreateQLstmInputParams(
1480 m_flatBufferBuilder,
1481 inputToForgetWeights,
1483 inputToOutputWeights,
1484 recurrentToForgetWeights,
1485 recurrentToCellWeights,
1486 recurrentToOutputWeights,
1490 inputToInputWeights,
1491 recurrentToInputWeights,
1496 cellToForgetWeights,
1497 cellToOutputWeights,
1498 inputLayerNormWeights,
1499 forgetLayerNormWeights,
1500 cellLayerNormWeights,
1501 outputLayerNormWeights);
1503 auto fbQLstmLayer = serializer::CreateQLstmLayer(
1504 m_flatBufferBuilder,
1509 CreateAnyLayer(fbQLstmLayer.o, serializer::Layer::Layer_QLstmLayer);
1518 auto fbQuantizedLstmBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_QuantizedLstm);
1533 auto cellBias = CreateConstTensorInfo(params.
GetCellBias());
1536 auto fbQuantizedLstmParams = serializer::CreateQuantizedLstmInputParams(
1537 m_flatBufferBuilder,
1538 inputToInputWeights,
1539 inputToForgetWeights,
1541 inputToOutputWeights,
1542 recurrentToInputWeights,
1543 recurrentToForgetWeights,
1544 recurrentToCellWeights,
1545 recurrentToOutputWeights,
1551 auto fbQuantizedLstmLayer = serializer::CreateQuantizedLstmLayer(
1552 m_flatBufferBuilder,
1553 fbQuantizedLstmBaseLayer,
1554 fbQuantizedLstmParams);
1556 CreateAnyLayer(fbQuantizedLstmLayer.o, serializer::Layer::Layer_QuantizedLstmLayer);
1559 fb::Offset<serializer::LayerBase> SerializerVisitor::CreateLayerBase(
const IConnectableLayer* layer,
1563 uint32_t fbIndex = GetSerializedId(layer->
GetGuid());
1565 std::vector<fb::Offset<serializer::InputSlot>> inputSlots = CreateInputSlots(layer);
1566 std::vector<fb::Offset<serializer::OutputSlot>> outputSlots = CreateOutputSlots(layer);
1568 return serializer::CreateLayerBase(m_flatBufferBuilder,
1570 m_flatBufferBuilder.CreateString(layer->
GetName()),
1572 m_flatBufferBuilder.CreateVector(inputSlots),
1573 m_flatBufferBuilder.CreateVector(outputSlots));
1576 void SerializerVisitor::CreateAnyLayer(
const flatbuffers::Offset<void>& layer,
const serializer::Layer serializerLayer)
1579 auto anyLayer = armnnSerializer::CreateAnyLayer(m_flatBufferBuilder, serializerLayer, layer);
1580 m_serializedLayers.push_back(anyLayer);
1583 template <
typename T>
1584 flatbuffers::Offset<flatbuffers::Vector<T>> SerializerVisitor::CreateDataVector(
const void* memory,
unsigned int size)
1586 const T* buffer =
reinterpret_cast<const T*
>(memory);
1587 std::vector<T> vector(buffer, buffer + (size /
sizeof(T)));
1588 auto fbVector = m_flatBufferBuilder.CreateVector(vector);
1592 flatbuffers::Offset<TensorInfo> SerializerVisitor::CreateTensorInfo(
const armnn::TensorInfo& tensorInfo)
1595 std::vector<unsigned int> shape;
1598 shape.push_back(tensorInfo.
GetShape()[dim]);
1604 auto flatBufferTensorInfo =
1605 serializer::CreateTensorInfo(m_flatBufferBuilder,
1606 m_flatBufferBuilder.CreateVector(shape),
1612 static_cast<unsigned int> 1614 return flatBufferTensorInfo;
1618 auto flatBufferTensorInfo = serializer::CreateTensorInfo(m_flatBufferBuilder,
1619 m_flatBufferBuilder.CreateVector(shape),
1625 static_cast<unsigned int> 1627 return flatBufferTensorInfo;
1630 flatbuffers::Offset<serializer::ConstTensor>
1635 flatbuffers::Offset<void> fbPayload;
1643 flatbuffers::Offset<serializer::IntData> flatBuffersData = serializer::CreateIntData(
1644 m_flatBufferBuilder,
1646 fbPayload = flatBuffersData.o;
1654 flatbuffers::Offset<serializer::ShortData> flatBuffersData = serializer::CreateShortData(
1655 m_flatBufferBuilder,
1657 fbPayload = flatBuffersData.o;
1667 flatbuffers::Offset<serializer::ByteData> flatBuffersData = serializer::CreateByteData(
1668 m_flatBufferBuilder,
1670 fbPayload = flatBuffersData.o;
1673 flatbuffers::Offset<serializer::ConstTensor> flatBufferConstTensor = serializer::CreateConstTensor(
1674 m_flatBufferBuilder,
1675 CreateTensorInfo(tensorInfo),
1678 return flatBufferConstTensor;
1681 flatbuffers::Offset<armnnSerializer::FeatureCompatibilityVersions> SerializerVisitor::GetVersionTable()
1683 flatbuffers::Offset<armnnSerializer::FeatureCompatibilityVersions> versionsTable =
1684 serializer::CreateFeatureCompatibilityVersions(
1685 m_flatBufferBuilder,
1688 return versionsTable;
1691 std::vector<fb::Offset<serializer::InputSlot>>
1694 std::vector<fb::Offset<serializer::InputSlot>> inputSlots;
1697 for (
unsigned int slotIndex = 0; slotIndex<layer->
GetNumInputSlots(); ++slotIndex)
1708 inputSlots.push_back(serializer::CreateInputSlot(m_flatBufferBuilder, slotIndex, &conn));
1713 std::vector<fb::Offset<serializer::OutputSlot>>
1716 std::vector<fb::Offset<serializer::OutputSlot>> outputSlots;
1719 for (
unsigned int slotIndex = 0; slotIndex < layer->
GetNumOutputSlots(); ++slotIndex)
1725 outputSlots.push_back(serializer::CreateOutputSlot(m_flatBufferBuilder,
1727 CreateTensorInfo(tensorInfo)));
1751 inNetwork.
Accept(m_SerializerVisitor);
1752 flatbuffers::FlatBufferBuilder& fbBuilder = m_SerializerVisitor.GetFlatBufferBuilder();
1755 auto serializedGraph = serializer::CreateSerializedGraph(
1757 fbBuilder.CreateVector(m_SerializerVisitor.GetSerializedLayers()),
1758 fbBuilder.CreateVector(m_SerializerVisitor.GetInputIds()),
1759 fbBuilder.CreateVector(m_SerializerVisitor.GetOutputIds()),
1760 m_SerializerVisitor.GetVersionTable());
1763 fbBuilder.Finish(serializedGraph);
1766 bool Serializer::SaveSerializedToStream(std::ostream& stream)
1768 flatbuffers::FlatBufferBuilder& fbBuilder = m_SerializerVisitor.GetFlatBufferBuilder();
1771 stream.write(reinterpret_cast<const char*>(fbBuilder.GetBufferPointer()), bytesToWrite);
1772 return !stream.bad();
uint32_t m_PadBottom
Padding bottom value in the height dimension.
bool m_BiasEnabled
Enable/disable bias.
float m_Eps
Used to avoid dividing by zero.
virtual unsigned int GetNumOutputSlots() const =0
Returns the number of connectable output slots.
bool m_HalfPixelCenters
Half Pixel Centers.
armnnSerializer::UnaryOperation GetFlatBufferUnaryOperation(armnn::UnaryOperation comparisonOperation)
bool m_ProjectionEnabled
Enable/disable the projection layer.
DataLayout m_DataLayout
The data layout to be used (NCHW, NHWC).
bool m_AlignCorners
Aligned corners.
UnaryOperation m_Operation
Specifies the elementwiseUnary operation to execute.
uint32_t m_Axis
0-based axis along which to stack the input tensors.
A ViewsDescriptor for the SplitterLayer.
Interface for a layer that is connectable to other layers via InputSlots and OutputSlots.
float m_ScaleW
Center size encoding scale weight.
uint32_t m_PadBottom
Padding bottom value in the height dimension.
bool m_BiasEnabled
Enable/disable bias.
virtual unsigned int GetNumInputSlots() const =0
Returns the number of connectable input slots.
float m_K
Kappa value used for the across channel normalization equation.
int m_Axis
Scalar, defaulted to the last index (-1), specifying the dimension the activation will be performed o...
A TransposeConvolution2dDescriptor for the TransposeConvolution2dLayer.
const TensorShape & GetShape() const
uint32_t m_PadBottom
Padding bottom value in the height dimension.
uint32_t m_PadLeft
Padding left value in the width dimension.
float m_ClippingThresProj
Clipping threshold value for the projection.
int32_t m_ShrinkAxisMask
Shrink axis mask value. If set, the nth specification shrinks the dimensionality by 1...
A ReshapeDescriptor for the ReshapeLayer.
std::vector< int > m_Begin
Begin values for the input that will be sliced.
float m_PadValue
Optional value to use for padding, defaults to 0.
DataLayout m_DataLayout
The data layout to be used (NCHW, NHWC).
DataLayout m_DataLayout
The data layout to be used (NCHW, NHWC).
uint32_t GetNumDimensions() const
Get the number of dimensions.
A ComparisonDescriptor for the ComparisonLayer.
float m_ScaleX
Center size encoding scale x.
TensorShape m_InputShape
Required shape of all input tensors.
uint32_t m_TargetWidth
Target width value.
bool m_TransposeWeightMatrix
Enable/disable transpose weight matrix.
DataLayout m_DataLayout
The data layout to be used (NCHW, NHWC).
Dimensionality GetDimensionality() const
Function that returns the tensor type.
bool HasPerAxisQuantization() const
uint32_t m_PoolWidth
Pooling width value.
bool m_PeepholeEnabled
Enable/disable peephole.
armnnSerializer::OutputShapeRounding GetFlatBufferOutputShapeRounding(armnn::OutputShapeRounding outputShapeRounding)
A Convolution2dDescriptor for the Convolution2dLayer.
float m_Alpha
Alpha value for the normalization equation.
uint32_t m_PadLeft
Padding left value in the width dimension.
float m_HiddenStateScale
Hidden State quantization scale.
bool m_BiasEnabled
Enable/disable bias.
Optional< unsigned int > GetQuantizationDim() const
float m_OutputIntermediateScale
Output intermediate quantization scale.
ResizeMethod m_Method
The Interpolation method to use (Bilinear, NearestNeighbor).
float m_Gamma
Gamma, the scale scalar value applied for the normalized tensor. Defaults to 1.0. ...
float m_Beta
Exponentiation value.
std::vector< unsigned int > m_Size
Size of the slice in each dimension.
float m_Eps
Value to add to the variance. Used to avoid dividing by zero.
PaddingMethod m_PaddingMethod
The padding method to be used. (Exclude, IgnoreValue).
ArgMinMaxFunction m_Function
Specify if the function is to find Min or Max.
uint32_t m_DetectionsPerClass
Detections per classes, used in Regular NMS.
DataLayout m_DataLayout
The data layout to be used (NCHW, NHWC).
DataLayout m_DataLayout
The data layout to be used (NCHW, NHWC).
serializer::ActivationFunction GetFlatBufferActivationFunction(armnn::ActivationFunction function)
Main network class which provides the interface for building up a neural network. ...
armnnSerializer::NormalizationAlgorithmMethod GetFlatBufferNormalizationAlgorithmMethod(armnn::NormalizationAlgorithmMethod normalizationAlgorithmMethod)
uint32_t m_PadTop
Padding top value in the height dimension.
A LogicalBinaryDescriptor for the LogicalBinaryLayer.
uint32_t m_PadRight
Padding right value in the width dimension.
DataLayout m_DataLayout
The data layout to be used (NCHW, NHWC).
MemoryType GetMemoryArea() const
std::vector< std::pair< unsigned int, unsigned int > > m_PadList
Specifies the padding for input dimension.
uint32_t GetNumViews() const
Get the number of views.
Copyright (c) 2020 ARM Limited.
void IgnoreUnused(Ts &&...)
uint32_t m_PadBottom
Padding bottom value in the height dimension.
int32_t m_BeginMask
Begin mask value.
uint32_t m_DilationY
Dilation along y axis.
int32_t m_EndMask
End mask value.
A SpaceToDepthDescriptor for the SpaceToDepthLayer.
std::vector< std::pair< unsigned int, unsigned int > > m_PadList
Specifies the padding values for the input dimension: heightPad{top, bottom} widthPad{left, right}.
std::vector< float > GetQuantizationScales() const
uint32_t m_DilationY
Dilation factor value for height dimension.
armnnSerializer::ConstTensorData GetFlatBufferConstTensorData(armnn::DataType dataType)
LogicalBinaryOperation m_Operation
Specifies the logical operation to execute.
A BatchToSpaceNdDescriptor for the BatchToSpaceNdLayer.
uint32_t m_StrideX
Stride value when proceeding through input for the width dimension.
PermutationVector m_DimMappings
Indicates how to translate tensor elements from a given source into the target destination, when source and target potentially have different memory layouts e.g.
int LayerBindingId
Type of identifiers for bindable layers (inputs, outputs).
armnnSerializer::DataType GetFlatBufferDataType(armnn::DataType dataType)
uint32_t m_NumOutputs
Number of output tensors.
NormalizationAlgorithmMethod m_NormMethodType
Normalization method algorithm to use (LocalBrightness, LocalContrast).
A ResizeDescriptor for the ResizeLayer.
DataLayout m_DataLayout
The data layout to be used (NCHW, NHWC).
uint32_t m_MaxClassesPerDetection
Maximum numbers of classes per detection, used in Fast NMS.
std::vector< unsigned int > m_Axis
Values for the dimensions to reduce.
A StackDescriptor for the StackLayer.
DataLayout m_DataLayout
The data layout to be used (NCHW, NHWC).
serializer::ArgMinMaxFunction GetFlatBufferArgMinMaxFunction(armnn::ArgMinMaxFunction function)
TensorShape m_TargetShape
Target shape value.
uint32_t m_PoolHeight
Pooling height value.
uint32_t m_PadTop
Padding top value in the height dimension.
uint32_t m_MaxDetections
Maximum numbers of detections.
A PadDescriptor for the PadLayer.
const uint32_t * GetViewOrigin(uint32_t idx) const
Return the view origin at the int value idx.
uint32_t m_StrideX
Stride value when proceeding through input for the width dimension.
armnnSerializer::NormalizationAlgorithmChannel GetFlatBufferNormalizationAlgorithmChannel(armnn::NormalizationAlgorithmChannel normalizationAlgorithmChannel)
uint32_t m_StrideX
Stride value when proceeding through input for the width dimension.
bool m_LayerNormEnabled
Enable/disable layer normalization.
float m_NmsIouThreshold
Intersection over union threshold.
armnnSerializer::LogicalBinaryOperation GetFlatBufferLogicalBinaryOperation(armnn::LogicalBinaryOperation logicalBinaryOperation)
An LstmDescriptor for the LstmLayer.
uint32_t m_PadRight
Padding right value in the width dimension.
uint32_t m_DilationX
Dilation factor value for width dimension.
uint32_t m_PadTop
Padding top value in the height dimension.
std::vector< unsigned int > m_Begin
Beginning indices of the slice in each dimension.
int32_t m_NewAxisMask
New axis mask value.
bool m_KeepDims
Enable/disable keep dimensions. If true, then the reduced dimensions that are of length 1 are kept...
std::vector< unsigned int > m_BlockShape
Block shape values.
float m_Eps
Epsilon, small scalar value added to variance to avoid dividing by zero. Defaults to 1e-12f...
An output connection slot for a layer.
A L2NormalizationDescriptor for the L2NormalizationLayer.
int32_t GetQuantizationOffset() const
An ArgMinMaxDescriptor for ArgMinMaxLayer.
float GetQuantizationScale() const
DataType GetDataType() const
An OriginsDescriptor for the ConcatLayer.
float m_ProjectionClip
Clipping threshold value for the projection.
bool has_value() const noexcept
A FullyConnectedDescriptor for the FullyConnectedLayer.
int32_t m_EllipsisMask
Ellipsis mask value.
virtual LayerGuid GetGuid() const =0
Returns the unique id of the layer.
bool m_BiasEnabled
Enable/disable bias.
A tensor defined by a TensorInfo (shape and data type) and an immutable backing store.
float m_InputIntermediateScale
Input intermediate quantization scale.
uint32_t m_TargetWidth
Target width value.
A GatherDescriptor for the GatherLayer.
bool m_PeepholeEnabled
Enable/disable peephole.
uint32_t m_NumClasses
Number of classes.
bool m_HalfPixelCenters
Half Pixel Centers.
uint32_t m_PadTop
Padding top value in the height dimension.
A StandInDescriptor for the StandIn layer.
A QLstmDescriptor for the QLstmLayer.
virtual unsigned int CalculateIndexOnOwner() const =0
bool m_UseRegularNms
Use Regular NMS.
DataLayout m_DataLayout
The data layout to be used (NCHW, NHWC).
std::vector< unsigned int > m_BlockShape
Block shape value.
std::vector< int > m_Stride
Stride values for the input that will be sliced.
An ActivationDescriptor for the ActivationLayer.
const TensorInfo & GetInfo() const
min(a, max(b, input)) ReLu1 & ReLu6.
uint32_t m_TargetHeight
Target height value.
uint32_t m_NumInputs
Number of input tensors.
uint32_t m_TargetHeight
Target height value.
uint32_t m_ActivationFunc
The activation function to use.
A SliceDescriptor for the SliceLayer.
uint32_t m_StrideY
Stride value when proceeding through input for the height dimension.
float m_ClippingThresCell
Clipping threshold value for the cell state.
unsigned int m_BlockSize
Scalar specifying the input block size. It must be >= 1.
const uint32_t * GetViewOrigin(uint32_t idx) const
Get the view origin at the int value idx.
DataLayout m_DataLayout
The data layout to be used (NCHW, NHWC).
float m_ForgetIntermediateScale
Forget intermediate quantization scale.
DataLayout m_DataLayout
The data layout to be used (NCHW, NHWC).
float m_Beta
Beta, the offset scalar value applied for the normalized tensor. Defaults to 1.0. ...
armnnSerializer::DataLayout GetFlatBufferDataLayout(armnn::DataLayout dataLayout)
float m_ScaleH
Center size encoding scale height.
ComparisonOperation m_Operation
Specifies the comparison operation to execute.
std::vector< int > m_End
End values for the input that will be sliced.
A SpaceToBatchNdDescriptor for the SpaceToBatchNdLayer.
NormalizationAlgorithmChannel m_NormChannelType
Normalization channel algorithm to use (Across, Within).
const uint32_t * GetViewSizes(uint32_t idx) const
Get the view sizes at the int value idx.
float m_CellClip
Clipping threshold value for the cell state.
float m_A
Alpha upper bound value used by the activation functions. (BoundedReLu, Linear, TanH, Elu).
uint32_t m_DilationX
Dilation along x axis.
DataLayout m_DataLayout
The data layout to be used (NCHW, NHWC).
bool m_CifgEnabled
Enable/disable cifg (coupled input & forget gate).
std::unique_ptr< ISerializer, void(*)(ISerializer *serializer)> ISerializerPtr
uint32_t m_PadLeft
Padding left value in the width dimension.
armnnSerializer::ComparisonOperation GetFlatBufferComparisonOperation(armnn::ComparisonOperation comparisonOperation)
bool m_AlignCorners
Aligned corners.
uint32_t m_StrideX
Stride value when proceeding through input for the width dimension.
int32_t m_Axis
The axis in params to gather indices from.
virtual void Accept(ILayerVisitor &visitor) const =0
A ElementwiseUnaryDescriptor for the ElementwiseUnaryLayer.
PoolingAlgorithm m_PoolType
The pooling algorithm to use (Max. Average, L2).
uint32_t m_StrideY
Stride value when proceeding through input for the height dimension.
uint32_t m_StrideY
Stride value when proceeding through input for the height dimension.
std::vector< std::pair< unsigned int, unsigned int > > m_Crops
The values to crop from the input dimension.
unsigned int GetNumDimensions() const
Function that returns the tensor rank.
bool m_ProjectionEnabled
Enable/disable the projection layer.
OutputShapeRounding m_OutputShapeRounding
The rounding method for the output shape. (Floor, Ceiling).
armnnSerializer::ResizeMethod GetFlatBufferResizeMethod(armnn::ResizeMethod method)
uint32_t m_NumInputs
Number of input tensors.
uint32_t GetNumDimensions() const
Get the number of dimensions.
virtual const IInputSlot & GetInputSlot(unsigned int index) const =0
Get a const input slot handle by slot index.
A MeanDescriptor for the MeanLayer.
armnnSerializer::PaddingMethod GetFlatBufferPaddingMethod(armnn::PaddingMethod paddingMethod)
bool m_LayerNormEnabled
Enable/disable layer normalization.
std::enable_if_t< std::is_unsigned< Source >::value &&std::is_unsigned< Dest >::value, Dest > numeric_cast(Source source)
uint32_t m_PadRight
Padding right value in the width dimension.
A TransposeDescriptor for the TransposeLayer.
A StridedSliceDescriptor for the StridedSliceLayer.
virtual const TensorInfo & GetTensorInfo() const =0
virtual const IOutputSlot & GetOutputSlot(unsigned int index) const =0
Get the const output slot handle by slot index.
int m_Axis
Axis to reduce across the input tensor.
virtual const char * GetName() const =0
Returns the name of the layer.
float m_ScaleY
Center size encoding scale y.
uint32_t GetNumViews() const
Get the number of views.
float m_NmsScoreThreshold
NMS score threshold.
virtual LayerGuid GetOwningLayerGuid() const =0
A Pooling2dDescriptor for the Pooling2dLayer.
A NormalizationDescriptor for the NormalizationLayer.
DataLayout m_DataLayout
The data layout to be used (NCHW, NHWC).
An InstanceNormalizationDescriptor for InstanceNormalizationLayer.
unsigned int GetConcatAxis() const
Get the concatenation axis value.
A ResizeBilinearDescriptor for the ResizeBilinearLayer.
float m_CellIntermediateScale
Cell intermediate quantization scale.
float m_B
Beta lower bound value used by the activation functions. (BoundedReLu, Linear, TanH).
A SoftmaxDescriptor for the SoftmaxLayer.
float m_Beta
Beta value for the normalization equation.
const OriginsDescriptor & GetOrigins() const
Get the View Origins.
bool m_CifgEnabled
Enable/disable CIFG (coupled input & forget gate).
PermutationVector m_DimMappings
Indicates how to translate tensor elements from a given source into the target destination, when source and target potentially have different memory layouts e.g.
uint32_t m_NormSize
Depth radius value.
ActivationFunction m_Function
The activation function to use (Sigmoid, TanH, Linear, ReLu, BoundedReLu, SoftReLu, LeakyReLu, Abs, Sqrt, Square, Elu).
armnnSerializer::PoolingAlgorithm GetFlatBufferPoolingAlgorithm(armnn::PoolingAlgorithm poolingAlgorithm)
uint32_t m_StrideY
Stride value when proceeding through input for the height dimension.
A DepthwiseConvolution2dDescriptor for the DepthwiseConvolution2dLayer.
A FillDescriptor for the FillLayer.
A BatchNormalizationDescriptor for the BatchNormalizationLayer.
uint32_t m_PadLeft
Padding left value in the width dimension.
unsigned int GetNumBytes() const
A PermuteDescriptor for the PermuteLayer.
uint32_t m_PadRight
Padding right value in the width dimension.
int32_t m_HiddenStateZeroPoint
Hidden State zero point.
std::vector< float > anchors({ 0.5f, 0.5f, 1.0f, 1.0f, 0.5f, 0.5f, 1.0f, 1.0f, 0.5f, 0.5f, 1.0f, 1.0f, 0.5f, 10.5f, 1.0f, 1.0f, 0.5f, 10.5f, 1.0f, 1.0f, 0.5f, 100.5f, 1.0f, 1.0f })