14 #include <fmt/format.h>
17 using namespace armnn;
18 namespace fb = flatbuffers;
24 ISerializer::ISerializer() : pSerializerImpl(new SerializerImpl())
28 ISerializer::~ISerializer() =
default;
47 pSerializerImpl->Serialize(inNetwork);
50 bool ISerializer::SaveSerializedToStream(std::ostream& stream)
52 return pSerializerImpl->SaveSerializedToStream(stream);
60 return serializer::ActivationFunction::ActivationFunction_Sigmoid;
62 return serializer::ActivationFunction::ActivationFunction_TanH;
64 return serializer::ActivationFunction::ActivationFunction_Linear;
66 return serializer::ActivationFunction::ActivationFunction_ReLu;
68 return serializer::ActivationFunction::ActivationFunction_BoundedReLu;
70 return serializer::ActivationFunction::ActivationFunction_LeakyReLu;
72 return serializer::ActivationFunction::ActivationFunction_Abs;
74 return serializer::ActivationFunction::ActivationFunction_Sqrt;
76 return serializer::ActivationFunction::ActivationFunction_Square;
78 return serializer::ActivationFunction::ActivationFunction_Elu;
80 return serializer::ActivationFunction::ActivationFunction_HardSwish;
82 return serializer::ActivationFunction::ActivationFunction_Sigmoid;
91 return serializer::ArgMinMaxFunction::ArgMinMaxFunction_Max;
94 return serializer::ArgMinMaxFunction::ArgMinMaxFunction_Min;
98 uint32_t SerializerStrategy::GetSerializedId(
LayerGuid guid)
100 if (m_guidMap.empty())
102 m_guidMap.insert(std::make_pair(guid, m_layerId));
104 else if (m_guidMap.find(guid) == m_guidMap.end())
107 m_guidMap.insert(std::make_pair(guid, m_layerId));
111 return m_guidMap[guid];
120 auto flatBufferInputBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Input);
123 auto flatBufferInputBindableBaseLayer = serializer::CreateBindableLayerBase(m_flatBufferBuilder,
124 flatBufferInputBaseLayer,
127 m_inputIds.push_back(
id);
130 auto flatBufferInputLayer = serializer::CreateInputLayer(m_flatBufferBuilder, flatBufferInputBindableBaseLayer);
133 CreateAnyLayer(flatBufferInputLayer.o, serializer::Layer::Layer_InputLayer);
143 auto flatBufferOutputBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Output);
146 auto flatBufferOutputBindableBaseLayer = serializer::CreateBindableLayerBase(m_flatBufferBuilder,
147 flatBufferOutputBaseLayer,
150 m_outputIds.push_back(
id);
153 auto flatBufferOutputLayer = serializer::CreateOutputLayer(m_flatBufferBuilder, flatBufferOutputBindableBaseLayer);
155 CreateAnyLayer(flatBufferOutputLayer.o, serializer::Layer::Layer_OutputLayer);
166 auto flatBufferBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Activation);
169 auto flatBufferDescriptor = CreateActivationDescriptor(m_flatBufferBuilder,
175 auto flatBufferAdditionLayer = CreateActivationLayer(m_flatBufferBuilder,
177 flatBufferDescriptor);
180 CreateAnyLayer(flatBufferAdditionLayer.o, serializer::Layer::Layer_ActivationLayer);
189 auto flatBufferAdditionBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Addition);
192 auto flatBufferAdditionLayer = serializer::CreateAdditionLayer(m_flatBufferBuilder, flatBufferAdditionBaseLayer);
195 CreateAnyLayer(flatBufferAdditionLayer.o, serializer::Layer::Layer_AdditionLayer);
206 auto flatBufferBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_ArgMinMax);
209 auto flatBufferDescriptor = CreateArgMinMaxDescriptor(m_flatBufferBuilder,
214 auto flatBufferLayer = CreateArgMinMaxLayer(m_flatBufferBuilder,
216 flatBufferDescriptor);
218 CreateAnyLayer(flatBufferLayer.o, serializer::Layer::Layer_ArgMinMaxLayer);
228 auto flatBufferBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_BatchMatMul);
231 auto flatBufferDescriptor = CreateBatchMatMulDescriptor(m_flatBufferBuilder,
240 auto flatBufferBatchMatMulLayer = CreateBatchMatMulLayer(m_flatBufferBuilder,
242 flatBufferDescriptor);
245 CreateAnyLayer(flatBufferBatchMatMulLayer.o, serializer::Layer::Layer_BatchMatMulLayer);
256 auto flatBufferBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_BatchToSpaceNd);
258 std::vector<unsigned int> crops;
259 crops.reserve(descriptor.
m_Crops.size() * 2);
260 for (
auto& crop : descriptor.
m_Crops)
262 crops.push_back(crop.first);
263 crops.push_back(crop.second);
266 auto flatBufferDescriptor =
267 CreateBatchToSpaceNdDescriptor(m_flatBufferBuilder,
268 m_flatBufferBuilder.CreateVector(descriptor.
m_BlockShape),
269 m_flatBufferBuilder.CreateVector(crops),
272 auto flatBufferLayer = serializer::CreateBatchToSpaceNdLayer(m_flatBufferBuilder,
274 flatBufferDescriptor);
276 CreateAnyLayer(flatBufferLayer.o, serializer::Layer::Layer_BatchToSpaceNdLayer);
279 void SerializerStrategy::SerializeBatchNormalizationLayer(
282 const std::vector<armnn::ConstTensor>& constants,
292 auto fbBatchNormalizationBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_BatchNormalization);
293 auto fbBatchNormalizationDescriptor = serializer::CreateBatchNormalizationDescriptor(
295 batchNormDescriptor.
m_Eps,
298 auto fbMeanConstTensorInfo = CreateConstTensorInfo(mean);
299 auto fbVarianceConstTensorInfo = CreateConstTensorInfo(variance);
300 auto fbBetaConstTensorInfo = CreateConstTensorInfo(beta);
301 auto fbGammaConstTensorInfo = CreateConstTensorInfo(gamma);
302 auto fbBatchNormalizationLayer = serializer::CreateBatchNormalizationLayer(m_flatBufferBuilder,
303 fbBatchNormalizationBaseLayer,
304 fbBatchNormalizationDescriptor,
305 fbMeanConstTensorInfo,
306 fbVarianceConstTensorInfo,
307 fbBetaConstTensorInfo,
308 fbGammaConstTensorInfo);
310 CreateAnyLayer(fbBatchNormalizationLayer.o, serializer::Layer::Layer_BatchNormalizationLayer);
318 auto fbBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Cast);
319 auto fbCastLayer = serializer::CreateCastLayer(m_flatBufferBuilder, fbBaseLayer);
320 CreateAnyLayer(fbCastLayer.o, serializer::Layer::Layer_CastLayer);
328 auto fbDescriptor = CreateChannelShuffleDescriptor(m_flatBufferBuilder,
331 auto fbBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_ChannelShuffle);
332 auto fbChannelShuffleLayer = serializer::CreateChannelShuffleLayer(m_flatBufferBuilder, fbBaseLayer, fbDescriptor);
333 CreateAnyLayer(fbChannelShuffleLayer.o, serializer::Layer::Layer_ChannelShuffleLayer);
342 auto fbBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Comparison);
343 auto fbDescriptor = serializer::CreateComparisonDescriptor(
347 auto fbLayer = serializer::CreateComparisonLayer(m_flatBufferBuilder, fbBaseLayer, fbDescriptor);
348 CreateAnyLayer(fbLayer.o, serializer::Layer::Layer_ComparisonLayer);
353 const std::vector<armnn::ConstTensor>& constants,
361 auto flatBufferConstantBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Constant);
363 auto flatBufferConstTensorInfo = CreateConstTensorInfo(input);
366 auto flatBufferLayer = CreateConstantLayer(m_flatBufferBuilder,
367 flatBufferConstantBaseLayer,
368 flatBufferConstTensorInfo);
371 CreateAnyLayer(flatBufferLayer.o, serializer::Layer::Layer_ConstantLayer);
382 auto flatBufferBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Convolution2d);
384 auto flatBufferDescriptor = CreateConvolution2dDescriptor(m_flatBufferBuilder,
397 auto flatBufferLayer = CreateConvolution2dLayer(m_flatBufferBuilder,
399 flatBufferDescriptor);
402 CreateAnyLayer(flatBufferLayer.o, serializer::Layer::Layer_Convolution2dLayer);
413 auto flatBufferBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Convolution3d);
415 auto flatBufferDescriptor = CreateConvolution3dDescriptor(m_flatBufferBuilder,
432 auto flatBufferLayer = CreateConvolution3dLayer(m_flatBufferBuilder,
434 flatBufferDescriptor);
437 CreateAnyLayer(flatBufferLayer.o, serializer::Layer::Layer_Convolution3dLayer);
446 auto fbBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_DepthToSpace);
447 auto fbDescriptor = CreateDepthToSpaceDescriptor(m_flatBufferBuilder,
451 auto fbLayer = serializer::CreateDepthToSpaceLayer(m_flatBufferBuilder, fbBaseLayer, fbDescriptor);
453 CreateAnyLayer(fbLayer.o, serializer::Layer::Layer_DepthToSpaceLayer);
462 auto fbBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_DepthwiseConvolution2d);
463 auto fbDescriptor = CreateDepthwiseConvolution2dDescriptor(m_flatBufferBuilder,
475 auto flatBufferLayer = CreateDepthwiseConvolution2dLayer(m_flatBufferBuilder,
479 CreateAnyLayer(flatBufferLayer.o, serializer::Layer::Layer_DepthwiseConvolution2dLayer);
487 auto fbDequantizeBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Dequantize);
488 auto fbDequantizeLayer = serializer::CreateDequantizeLayer(m_flatBufferBuilder, fbDequantizeBaseLayer);
490 CreateAnyLayer(fbDequantizeLayer.o, serializer::Layer::Layer_DequantizeLayer);
495 const std::vector<armnn::ConstTensor>& constants,
502 auto fbBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_DetectionPostProcess);
503 auto fbDescriptor = CreateDetectionPostProcessDescriptor(m_flatBufferBuilder,
516 flatbuffers::Offset<serializer::ConstTensor> fbAnchorsConstTensorInfo = CreateConstTensorInfo(anchors);
518 auto flatBufferLayer = CreateDetectionPostProcessLayer(m_flatBufferBuilder,
521 fbAnchorsConstTensorInfo);
523 CreateAnyLayer(flatBufferLayer.o, serializer::Layer::Layer_DetectionPostProcessLayer);
530 auto fbDivisionBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Division);
531 auto fbDivisionLayer = serializer::CreateDivisionLayer(m_flatBufferBuilder, fbDivisionBaseLayer);
533 CreateAnyLayer(fbDivisionLayer.o, serializer::Layer::Layer_DivisionLayer);
542 auto fbBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_ElementwiseBinary);
543 auto fbDescriptor = serializer::CreateElementwiseBinaryDescriptor(
547 auto fbLayer = serializer::CreateElementwiseBinaryLayer(m_flatBufferBuilder, fbBaseLayer, fbDescriptor);
548 CreateAnyLayer(fbLayer.o, serializer::Layer::Layer_ElementwiseBinaryLayer);
557 auto fbBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_ElementwiseUnary);
558 auto fbDescriptor = serializer::CreateElementwiseUnaryDescriptor(
562 auto fbLayer = serializer::CreateElementwiseUnaryLayer(m_flatBufferBuilder, fbBaseLayer, fbDescriptor);
563 CreateAnyLayer(fbLayer.o, serializer::Layer::Layer_ElementwiseUnaryLayer);
572 auto fbFillBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Fill);
574 auto fbDescriptor = serializer::CreateFillDescriptor(m_flatBufferBuilder, fillDescriptor.
m_Value);
576 auto fbFillLayer = serializer::CreateFillLayer(m_flatBufferBuilder, fbFillBaseLayer, fbDescriptor);
578 CreateAnyLayer(fbFillLayer.o, serializer::Layer::Layer_FillLayer);
585 auto flatBufferFloorBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Floor);
586 auto flatBufferFloorLayer = serializer::CreateFloorLayer(m_flatBufferBuilder, flatBufferFloorBaseLayer);
588 CreateAnyLayer(flatBufferFloorLayer.o, serializer::Layer::Layer_FloorLayer);
597 auto fbGatherDescriptor = CreateGatherDescriptor(m_flatBufferBuilder,
599 auto fbGatherBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Gather);
600 auto flatBufferLayer = serializer::CreateGatherLayer(m_flatBufferBuilder, fbGatherBaseLayer, fbGatherDescriptor);
602 CreateAnyLayer(flatBufferLayer.o, serializer::Layer::Layer_GatherLayer);
610 auto fbGatherNdBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_GatherNd);
611 auto flatBufferLayer = serializer::CreateGatherNdLayer(m_flatBufferBuilder, fbGatherNdBaseLayer);
613 CreateAnyLayer(flatBufferLayer.o, serializer::Layer::Layer_GatherNdLayer);
616 void SerializerStrategy::SerializeInstanceNormalizationLayer(
623 auto fbDescriptor = serializer::CreateInstanceNormalizationDescriptor(
625 instanceNormalizationDescriptor.
m_Gamma,
626 instanceNormalizationDescriptor.
m_Beta,
627 instanceNormalizationDescriptor.
m_Eps,
630 auto fbBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_InstanceNormalization);
631 auto fbLayer = serializer::CreateInstanceNormalizationLayer(m_flatBufferBuilder, fbBaseLayer, fbDescriptor);
633 CreateAnyLayer(fbLayer.o, serializer::Layer::Layer_InstanceNormalizationLayer);
643 auto fbBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_L2Normalization);
646 auto fbDescriptor = serializer::CreateL2NormalizationDescriptor(
649 l2NormalizationDescriptor.
m_Eps);
652 auto fbLayer = serializer::CreateL2NormalizationLayer(m_flatBufferBuilder, fbBaseLayer, fbDescriptor);
654 CreateAnyLayer(fbLayer.o, serializer::Layer::Layer_L2NormalizationLayer);
663 auto fbBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_LogicalBinary);
664 auto fbDescriptor = serializer::CreateLogicalBinaryDescriptor(
668 auto fbLayer = serializer::CreateLogicalBinaryLayer(m_flatBufferBuilder, fbBaseLayer, fbDescriptor);
669 CreateAnyLayer(fbLayer.o, serializer::Layer::Layer_LogicalBinaryLayer);
679 auto flatBufferLogSoftmaxBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_LogSoftmax);
682 auto flatBufferLogSoftmaxDesc =
683 serializer::CreateLogSoftmaxDescriptor(m_flatBufferBuilder,
684 logSoftmaxDescriptor.
m_Beta,
685 logSoftmaxDescriptor.
m_Axis);
688 auto flatBufferLogSoftmaxLayer =
689 serializer::CreateLogSoftmaxLayer(m_flatBufferBuilder,
690 flatBufferLogSoftmaxBaseLayer,
691 flatBufferLogSoftmaxDesc);
693 CreateAnyLayer(flatBufferLogSoftmaxLayer.o, serializer::Layer::Layer_LogSoftmaxLayer);
698 const std::vector<armnn::ConstTensor>& constants,
703 auto fbLstmBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Lstm);
705 auto fbLstmDescriptor = serializer::CreateLstmDescriptor(
719 auto inputToForgetWeights = CreateConstTensorInfo(constants[i++]);
720 auto inputToCellWeights = CreateConstTensorInfo(constants[i++]);
721 auto inputToOutputWeights = CreateConstTensorInfo(constants[i++]);
722 auto recurrentToForgetWeights = CreateConstTensorInfo(constants[i++]);
723 auto recurrentToCellWeights = CreateConstTensorInfo(constants[i++]);
724 auto recurrentToOutputWeights = CreateConstTensorInfo(constants[i++]);
725 auto forgetGateBias = CreateConstTensorInfo(constants[i++]);
726 auto cellBias = CreateConstTensorInfo(constants[i++]);
727 auto outputGateBias = CreateConstTensorInfo(constants[i++]);
732 flatbuffers::Offset<serializer::ConstTensor> inputToInputWeights;
733 flatbuffers::Offset<serializer::ConstTensor> recurrentToInputWeights;
734 flatbuffers::Offset<serializer::ConstTensor> cellToInputWeights;
735 flatbuffers::Offset<serializer::ConstTensor> inputGateBias;
736 flatbuffers::Offset<serializer::ConstTensor> projectionWeights;
737 flatbuffers::Offset<serializer::ConstTensor> projectionBias;
738 flatbuffers::Offset<serializer::ConstTensor> cellToForgetWeights;
739 flatbuffers::Offset<serializer::ConstTensor> cellToOutputWeights;
740 flatbuffers::Offset<serializer::ConstTensor> inputLayerNormWeights;
741 flatbuffers::Offset<serializer::ConstTensor> forgetLayerNormWeights;
742 flatbuffers::Offset<serializer::ConstTensor> cellLayerNormWeights;
743 flatbuffers::Offset<serializer::ConstTensor> outputLayerNormWeights;
747 inputToInputWeights = CreateConstTensorInfo(constants[i++]);
748 recurrentToInputWeights = CreateConstTensorInfo(constants[i++]);
749 inputGateBias = CreateConstTensorInfo(constants[i++]);
756 cellToInputWeights = CreateConstTensorInfo(constants[i++]);
758 cellToForgetWeights = CreateConstTensorInfo(constants[i++]);
759 cellToOutputWeights = CreateConstTensorInfo(constants[i++]);
764 projectionWeights = CreateConstTensorInfo(constants[i++]);
765 projectionBias = CreateConstTensorInfo(constants[i++]);
772 inputLayerNormWeights = CreateConstTensorInfo(constants[i++]);
774 forgetLayerNormWeights = CreateConstTensorInfo(constants[i++]);
775 cellLayerNormWeights = CreateConstTensorInfo(constants[i++]);
776 outputLayerNormWeights = CreateConstTensorInfo(constants[i++]);
779 auto fbLstmParams = serializer::CreateLstmInputParams(
781 inputToForgetWeights,
783 inputToOutputWeights,
784 recurrentToForgetWeights,
785 recurrentToCellWeights,
786 recurrentToOutputWeights,
791 recurrentToInputWeights,
798 inputLayerNormWeights,
799 forgetLayerNormWeights,
800 cellLayerNormWeights,
801 outputLayerNormWeights);
803 auto fbLstmLayer = serializer::CreateLstmLayer(
809 CreateAnyLayer(fbLstmLayer.o, serializer::Layer::Layer_LstmLayer);
816 auto fbMaximumBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Maximum);
817 auto fbMaximumLayer = serializer::CreateMaximumLayer(m_flatBufferBuilder, fbMaximumBaseLayer);
819 CreateAnyLayer(fbMaximumLayer.o, serializer::Layer::Layer_MaximumLayer);
828 auto fbMeanBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Mean);
829 auto fbMeanDescriptor = serializer::CreateMeanDescriptor(m_flatBufferBuilder,
830 m_flatBufferBuilder.CreateVector(descriptor.
m_Axis),
833 auto fbMeanLayer = serializer::CreateMeanLayer(m_flatBufferBuilder,
837 CreateAnyLayer(fbMeanLayer.o, serializer::Layer::Layer_MeanLayer);
844 auto fbMinimumBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Minimum);
845 auto fbMinimumLayer = serializer::CreateMinimumLayer(m_flatBufferBuilder, fbMinimumBaseLayer);
847 CreateAnyLayer(fbMinimumLayer.o, serializer::Layer::Layer_MinimumLayer);
854 auto fbMergeBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Merge);
855 auto fbMergeLayer = serializer::CreateMergeLayer(m_flatBufferBuilder, fbMergeBaseLayer);
857 CreateAnyLayer(fbMergeLayer.o, serializer::Layer::Layer_MergeLayer);
866 auto flatBufferConcatBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Concat);
868 std::vector<flatbuffers::Offset<UintVector>> views;
869 for (
unsigned int v = 0; v < concatDescriptor.
GetNumViews(); ++v)
872 std::vector<uint32_t> origins;
875 origins.push_back(origin[d]);
877 auto view = m_flatBufferBuilder.CreateVector(origins);
878 auto uintVector = CreateUintVector(m_flatBufferBuilder, view);
879 views.push_back(uintVector);
882 auto flatBufferConcatDescriptor = CreateOriginsDescriptor(m_flatBufferBuilder,
886 m_flatBufferBuilder.CreateVector(views));
888 auto flatBufferLayer = CreateConcatLayer(m_flatBufferBuilder,
889 flatBufferConcatBaseLayer,
890 flatBufferConcatDescriptor);
892 CreateAnyLayer(flatBufferLayer.o, serializer::Layer::Layer_ConcatLayer);
899 auto fbMultiplicationBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Multiplication);
900 auto fbMultiplicationLayer = serializer::CreateMultiplicationLayer(m_flatBufferBuilder,
901 fbMultiplicationBaseLayer);
903 CreateAnyLayer(fbMultiplicationLayer.o, serializer::Layer::Layer_MultiplicationLayer);
912 auto flatBufferBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Pad);
914 std::vector<unsigned int> padList;
917 padList.push_back(p.first);
918 padList.push_back(p.second);
921 auto flatBufferPadDesc = serializer::CreatePadDescriptor(m_flatBufferBuilder,
922 m_flatBufferBuilder.CreateVector(padList),
926 auto flatBufferPadLayer = serializer::CreatePadLayer(m_flatBufferBuilder,
930 CreateAnyLayer(flatBufferPadLayer.o, serializer::Layer::Layer_PadLayer);
940 auto flatBufferPermuteBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Permute);
942 std::vector<unsigned int> dimMappings;
948 auto flatBufferPermuteDesc = serializer::CreatePermuteDescriptor(m_flatBufferBuilder,
949 m_flatBufferBuilder.CreateVector(dimMappings));
952 auto flatBufferPermuteLayer = serializer::CreatePermuteLayer(m_flatBufferBuilder,
953 flatBufferPermuteBaseLayer,
954 flatBufferPermuteDesc);
957 CreateAnyLayer(flatBufferPermuteLayer.o, serializer::Layer::Layer_PermuteLayer);
965 auto flatBufferBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Rank);
966 auto flatBufferRankLayer = serializer::CreateRankLayer(m_flatBufferBuilder, flatBufferBaseLayer);
968 CreateAnyLayer(flatBufferRankLayer.o, serializer::Layer::Layer_RankLayer);
975 auto fbReduceBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Reduce);
976 auto fbDescriptor = CreateReduceDescriptor(m_flatBufferBuilder,
978 m_flatBufferBuilder.CreateVector(reduceDescriptor.
m_vAxis),
980 auto fbReduceLayer = serializer::CreateReduceLayer(m_flatBufferBuilder,
984 CreateAnyLayer(fbReduceLayer.o, serializer::Layer::Layer_ReduceLayer);
995 auto flatBufferReshapeBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Reshape);
997 std::vector<unsigned int> targetShape;
1003 auto flatBufferReshapeDesc = serializer::CreateReshapeDescriptor(m_flatBufferBuilder,
1004 m_flatBufferBuilder.CreateVector(targetShape));
1007 auto flatBufferReshapeLayer = serializer::CreateReshapeLayer(m_flatBufferBuilder, flatBufferReshapeBaseLayer,
1008 flatBufferReshapeDesc);
1011 CreateAnyLayer(flatBufferReshapeLayer.o, serializer::Layer::Layer_ReshapeLayer);
1020 auto flatBufferBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Resize);
1022 auto flatBufferDescriptor =
1023 CreateResizeDescriptor(m_flatBufferBuilder,
1031 auto flatBufferLayer = serializer::CreateResizeLayer(m_flatBufferBuilder,
1032 flatBufferBaseLayer,
1033 flatBufferDescriptor);
1035 CreateAnyLayer(flatBufferLayer.o, serializer::Layer::Layer_ResizeLayer);
1043 auto flatBufferBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_ReverseV2);
1045 auto flatBufferLayer = serializer::CreateReverseV2Layer(m_flatBufferBuilder,
1046 flatBufferBaseLayer);
1048 CreateAnyLayer(flatBufferLayer.o, serializer::Layer::Layer_ReverseV2Layer);
1057 auto fbSliceBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Slice);
1058 auto fbSliceDescriptor = CreateSliceDescriptor(m_flatBufferBuilder,
1059 m_flatBufferBuilder.CreateVector(sliceDescriptor.
m_Begin),
1060 m_flatBufferBuilder.CreateVector(sliceDescriptor.
m_Size));
1062 auto fbSliceLayer = serializer::CreateSliceLayer(m_flatBufferBuilder, fbSliceBaseLayer, fbSliceDescriptor);
1064 CreateAnyLayer(fbSliceLayer.o, serializer::Layer::Layer_SliceLayer);
1075 auto flatBufferSoftmaxBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Softmax);
1078 auto flatBufferSoftmaxDesc =
1079 serializer::CreateSoftmaxDescriptor(m_flatBufferBuilder,
1080 softmaxDescriptor.
m_Beta,
1081 softmaxDescriptor.
m_Axis);
1084 auto flatBufferSoftmaxLayer =
1085 serializer::CreateSoftmaxLayer(m_flatBufferBuilder,
1086 flatBufferSoftmaxBaseLayer,
1087 flatBufferSoftmaxDesc);
1089 CreateAnyLayer(flatBufferSoftmaxLayer.o, serializer::Layer::Layer_SoftmaxLayer);
1098 auto fbPooling2dBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Pooling2d);
1099 auto fbPooling2dDescriptor = serializer::CreatePooling2dDescriptor(
1100 m_flatBufferBuilder,
1114 auto fbPooling2dLayer = serializer::CreatePooling2dLayer(m_flatBufferBuilder,
1115 fbPooling2dBaseLayer,
1116 fbPooling2dDescriptor);
1118 CreateAnyLayer(fbPooling2dLayer.o, serializer::Layer::Layer_Pooling2dLayer);
1127 auto fbPooling3dBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Pooling3d);
1128 auto fbPooling3dDescriptor = serializer::CreatePooling3dDescriptor(
1129 m_flatBufferBuilder,
1147 auto fbPooling3dLayer = serializer::CreatePooling3dLayer(m_flatBufferBuilder,
1148 fbPooling3dBaseLayer,
1149 fbPooling3dDescriptor);
1151 CreateAnyLayer(fbPooling3dLayer.o, serializer::Layer::Layer_Pooling3dLayer);
1160 auto flatBufferPreluBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Prelu);
1163 auto flatBufferPreluLayer = serializer::CreatePreluLayer(m_flatBufferBuilder, flatBufferPreluBaseLayer);
1166 CreateAnyLayer(flatBufferPreluLayer.o, serializer::Layer::Layer_PreluLayer);
1173 auto fbQuantizeBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Quantize);
1174 auto fbQuantizeLayer = serializer::CreateQuantizeLayer(m_flatBufferBuilder,
1175 fbQuantizeBaseLayer);
1176 CreateAnyLayer(fbQuantizeLayer.o, serializer::Layer::Layer_QuantizeLayer);
1185 auto flatBufferBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_FullyConnected);
1188 auto flatBufferDescriptor =
1189 serializer::CreateFullyConnectedDescriptor(m_flatBufferBuilder,
1195 auto flatBufferLayer = serializer::CreateFullyConnectedLayer(m_flatBufferBuilder,
1196 flatBufferBaseLayer,
1197 flatBufferDescriptor);
1200 CreateAnyLayer(flatBufferLayer.o, serializer::Layer::Layer_FullyConnectedLayer);
1211 auto flatBufferBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_SpaceToBatchNd);
1213 std::vector<unsigned int> padList;
1214 padList.reserve(spaceToBatchNdDescriptor.
m_PadList.size()*2);
1215 for (
auto& pad : spaceToBatchNdDescriptor.
m_PadList)
1217 padList.push_back(pad.first);
1218 padList.push_back(pad.second);
1221 auto flatBufferDescriptor =
1222 CreateSpaceToBatchNdDescriptor(m_flatBufferBuilder,
1223 m_flatBufferBuilder.CreateVector(spaceToBatchNdDescriptor.
m_BlockShape),
1224 m_flatBufferBuilder.CreateVector(padList),
1227 auto flatBufferLayer = serializer::CreateSpaceToBatchNdLayer(m_flatBufferBuilder,
1228 flatBufferBaseLayer,
1229 flatBufferDescriptor);
1231 CreateAnyLayer(flatBufferLayer.o, serializer::Layer::Layer_SpaceToBatchNdLayer);
1241 auto flatBufferBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_SpaceToDepth);
1242 auto flatBufferDescriptor =
1243 CreateSpaceToDepthDescriptor(m_flatBufferBuilder,
1247 auto flatBufferLayer = serializer::CreateSpaceToDepthLayer(m_flatBufferBuilder,
1248 flatBufferBaseLayer,
1249 flatBufferDescriptor);
1251 CreateAnyLayer(flatBufferLayer.o, serializer::Layer::Layer_SpaceToDepthLayer);
1262 std::vector<flatbuffers::Offset<UintVector>> flatBufferViewOrigins;
1263 flatBufferViewOrigins.reserve(viewsDescriptor.
GetNumViews());
1265 for(
unsigned int vIdx = 0; vIdx < viewsDescriptor.
GetNumViews(); ++vIdx)
1267 std::vector<uint32_t> viewOrigin;
1271 for(
unsigned int dIdx = 0; dIdx < viewsDescriptor.
GetNumDimensions(); ++dIdx)
1273 viewOrigin.push_back(viewsDescriptor.
GetViewOrigin(vIdx)[dIdx]);
1276 flatBufferViewOrigins.push_back(CreateUintVector(m_flatBufferBuilder,
1277 m_flatBufferBuilder.CreateVector(viewOrigin)));
1281 auto flatBufferOriginDescriptor = CreateOriginsDescriptor(m_flatBufferBuilder,
1285 m_flatBufferBuilder.CreateVector(flatBufferViewOrigins));
1288 std::vector<flatbuffers::Offset<UintVector>> flatBufferViewSizes;
1289 flatBufferViewSizes.reserve(viewsDescriptor.
GetNumViews());
1291 for(
unsigned int vIdx = 0; vIdx < viewsDescriptor.
GetNumViews(); ++vIdx)
1293 std::vector<uint32_t> viewSize;
1297 for(
unsigned int dIdx = 0; dIdx < viewsDescriptor.
GetNumDimensions(); ++dIdx)
1299 viewSize.push_back(viewsDescriptor.
GetViewSizes(vIdx)[dIdx]);
1302 flatBufferViewSizes.push_back(CreateUintVector(m_flatBufferBuilder,
1303 m_flatBufferBuilder.CreateVector(viewSize)));
1307 auto flatBufferViewsDescriptor = CreateViewsDescriptor(m_flatBufferBuilder,
1308 flatBufferOriginDescriptor,
1309 m_flatBufferBuilder.CreateVector(flatBufferViewSizes));
1312 auto flatBufferBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Splitter);
1314 auto flatBufferSplitterLayer = serializer::CreateSplitterLayer(m_flatBufferBuilder,
1315 flatBufferBaseLayer,
1316 flatBufferViewsDescriptor);
1318 CreateAnyLayer(flatBufferSplitterLayer.o, serializer::Layer::Layer_SplitterLayer);
1327 auto fbNormalizationBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Normalization);
1329 auto fbNormalizationDescriptor = serializer::CreateNormalizationDescriptor(
1330 m_flatBufferBuilder,
1339 auto flatBufferLayer = serializer::CreateNormalizationLayer(m_flatBufferBuilder,
1340 fbNormalizationBaseLayer,
1341 fbNormalizationDescriptor);
1343 CreateAnyLayer(flatBufferLayer.o, serializer::Layer::Layer_NormalizationLayer);
1351 auto shapeBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Shape);
1352 auto shapeLayer = serializer::CreateShapeLayer(m_flatBufferBuilder, shapeBaseLayer);
1354 CreateAnyLayer(shapeLayer.o, serializer::Layer::Layer_ShapeLayer);
1363 auto stackBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Stack);
1365 std::vector<unsigned int> inputShape;
1371 auto flatBufferStackDescriptor = CreateStackDescriptor(m_flatBufferBuilder,
1374 m_flatBufferBuilder.CreateVector(inputShape));
1376 auto stackLayer = serializer::CreateStackLayer(m_flatBufferBuilder, stackBaseLayer, flatBufferStackDescriptor);
1377 CreateAnyLayer(stackLayer.o, serializer::Layer::Layer_StackLayer);
1386 auto fbDescriptor = serializer::CreateStandInDescriptor(m_flatBufferBuilder,
1390 auto fbBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_StandIn);
1391 auto fbLayer = serializer::CreateStandInLayer(m_flatBufferBuilder, fbBaseLayer, fbDescriptor);
1393 CreateAnyLayer(fbLayer.o, serializer::Layer::Layer_StandInLayer);
1402 auto flatBufferBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_StridedSlice);
1404 auto flatBufferDescriptor =
1405 CreateStridedSliceDescriptor(m_flatBufferBuilder,
1406 m_flatBufferBuilder.CreateVector(stridedSliceDescriptor.
m_Begin),
1407 m_flatBufferBuilder.CreateVector(stridedSliceDescriptor.
m_End),
1408 m_flatBufferBuilder.CreateVector(stridedSliceDescriptor.
m_Stride),
1416 auto flatBufferLayer = serializer::CreateStridedSliceLayer(m_flatBufferBuilder,
1417 flatBufferBaseLayer,
1418 flatBufferDescriptor);
1420 CreateAnyLayer(flatBufferLayer.o, serializer::Layer::Layer_StridedSliceLayer);
1427 auto fbSubtractionBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Subtraction);
1428 auto fbSubtractionLayer = serializer::CreateSubtractionLayer(m_flatBufferBuilder, fbSubtractionBaseLayer);
1430 CreateAnyLayer(fbSubtractionLayer.o, serializer::Layer::Layer_SubtractionLayer);
1437 auto fbSwitchBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Switch);
1438 auto fbSwitchLayer = serializer::CreateSwitchLayer(m_flatBufferBuilder, fbSwitchBaseLayer);
1440 CreateAnyLayer(fbSwitchLayer.o, serializer::Layer::Layer_SwitchLayer);
1450 auto flatBufferBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Tile);
1452 auto flatBufferDesc = serializer::CreateTileDescriptor(m_flatBufferBuilder,
1453 m_flatBufferBuilder.CreateVector(descriptor.
m_Multiples));
1456 auto flatBufferLayer = serializer::CreateTileLayer(m_flatBufferBuilder,
1457 flatBufferBaseLayer,
1461 CreateAnyLayer(flatBufferLayer.o, serializer::Layer::Layer_TileLayer);
1464 void SerializerStrategy::SerializeTransposeConvolution2dLayer(
1467 const std::vector<armnn::ConstTensor>& constants,
1474 auto fbBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Convolution2d);
1475 auto fbDescriptor = CreateTransposeConvolution2dDescriptor(m_flatBufferBuilder,
1486 auto fbWeightsConstTensorInfo = CreateConstTensorInfo(weights);
1487 flatbuffers::Offset<serializer::ConstTensor> fbBiasesConstTensorInfo;
1488 if (constants.size() > 1)
1491 fbBiasesConstTensorInfo = CreateConstTensorInfo(biases);
1494 auto fbLayer = CreateTransposeConvolution2dLayer(m_flatBufferBuilder,
1497 fbWeightsConstTensorInfo,
1498 fbBiasesConstTensorInfo);
1500 CreateAnyLayer(fbLayer.o, serializer::Layer::Layer_TransposeConvolution2dLayer);
1510 auto flatBufferBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Transpose);
1512 std::vector<unsigned int> dimMappings;
1518 auto flatBufferDesc = serializer::CreateTransposeDescriptor(m_flatBufferBuilder,
1519 m_flatBufferBuilder.CreateVector(dimMappings));
1522 auto flatBufferLayer = serializer::CreateTransposeLayer(m_flatBufferBuilder,
1523 flatBufferBaseLayer,
1527 CreateAnyLayer(flatBufferLayer.o, serializer::Layer::Layer_TransposeLayer);
1532 const std::vector<armnn::ConstTensor>& constants,
1537 auto fbQLstmBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_QLstm);
1539 auto fbQLstmDescriptor = serializer::CreateQLstmDescriptor(
1540 m_flatBufferBuilder,
1559 auto inputToForgetWeights = CreateConstTensorInfo(constants[i++]);
1560 auto inputToCellWeights = CreateConstTensorInfo(constants[i++]);
1561 auto inputToOutputWeights = CreateConstTensorInfo(constants[i++]);
1562 auto recurrentToForgetWeights = CreateConstTensorInfo(constants[i++]);
1563 auto recurrentToCellWeights = CreateConstTensorInfo(constants[i++]);
1564 auto recurrentToOutputWeights = CreateConstTensorInfo(constants[i++]);
1565 auto forgetGateBias = CreateConstTensorInfo(constants[i++]);
1566 auto cellBias = CreateConstTensorInfo(constants[i++]);
1567 auto outputGateBias = CreateConstTensorInfo(constants[i++]);
1570 flatbuffers::Offset<serializer::ConstTensor> inputToInputWeights;
1571 flatbuffers::Offset<serializer::ConstTensor> recurrentToInputWeights;
1572 flatbuffers::Offset<serializer::ConstTensor> inputGateBias;
1576 inputToInputWeights = CreateConstTensorInfo(constants[i++]);
1577 recurrentToInputWeights = CreateConstTensorInfo(constants[i++]);
1578 inputGateBias = CreateConstTensorInfo(constants[i++]);
1582 flatbuffers::Offset<serializer::ConstTensor> cellToInputWeights;
1583 flatbuffers::Offset<serializer::ConstTensor> cellToForgetWeights;
1584 flatbuffers::Offset<serializer::ConstTensor> cellToOutputWeights;
1590 cellToInputWeights = CreateConstTensorInfo(constants[i++]);
1592 cellToForgetWeights = CreateConstTensorInfo(constants[i++]);
1593 cellToOutputWeights = CreateConstTensorInfo(constants[i++]);
1597 flatbuffers::Offset<serializer::ConstTensor> projectionWeights;
1598 flatbuffers::Offset<serializer::ConstTensor> projectionBias;
1602 projectionWeights = CreateConstTensorInfo(constants[i++]);
1603 projectionBias = CreateConstTensorInfo(constants[i++]);
1607 flatbuffers::Offset<serializer::ConstTensor> inputLayerNormWeights;
1608 flatbuffers::Offset<serializer::ConstTensor> forgetLayerNormWeights;
1609 flatbuffers::Offset<serializer::ConstTensor> cellLayerNormWeights;
1610 flatbuffers::Offset<serializer::ConstTensor> outputLayerNormWeights;
1616 inputLayerNormWeights = CreateConstTensorInfo(constants[i++]);
1618 forgetLayerNormWeights = CreateConstTensorInfo(constants[i++]);
1619 cellLayerNormWeights = CreateConstTensorInfo(constants[i++]);
1620 outputLayerNormWeights = CreateConstTensorInfo(constants[i++]);
1623 auto fbQLstmParams = serializer::CreateQLstmInputParams(
1624 m_flatBufferBuilder,
1625 inputToForgetWeights,
1627 inputToOutputWeights,
1628 recurrentToForgetWeights,
1629 recurrentToCellWeights,
1630 recurrentToOutputWeights,
1634 inputToInputWeights,
1635 recurrentToInputWeights,
1640 cellToForgetWeights,
1641 cellToOutputWeights,
1642 inputLayerNormWeights,
1643 forgetLayerNormWeights,
1644 cellLayerNormWeights,
1645 outputLayerNormWeights);
1647 auto fbQLstmLayer = serializer::CreateQLstmLayer(
1648 m_flatBufferBuilder,
1653 CreateAnyLayer(fbQLstmLayer.o, serializer::Layer::Layer_QLstmLayer);
1657 const std::vector<armnn::ConstTensor>& constants,
1662 auto fbQuantizedLstmBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_QuantizedLstm);
1668 auto inputToInputWeights = CreateConstTensorInfo(constants[i++]);
1669 auto inputToForgetWeights = CreateConstTensorInfo(constants[i++]);
1670 auto inputToCellWeights = CreateConstTensorInfo(constants[i++]);
1671 auto inputToOutputWeights = CreateConstTensorInfo(constants[i++]);
1673 auto recurrentToInputWeights = CreateConstTensorInfo(constants[i++]);
1674 auto recurrentToForgetWeights = CreateConstTensorInfo(constants[i++]);
1675 auto recurrentToCellWeights = CreateConstTensorInfo(constants[i++]);
1676 auto recurrentToOutputWeights = CreateConstTensorInfo(constants[i++]);
1678 auto inputGateBias = CreateConstTensorInfo(constants[i++]);
1679 auto forgetGateBias = CreateConstTensorInfo(constants[i++]);
1680 auto cellBias = CreateConstTensorInfo(constants[i++]);
1681 auto outputGateBias = CreateConstTensorInfo(constants[i++]);
1683 auto fbQuantizedLstmParams = serializer::CreateQuantizedLstmInputParams(
1684 m_flatBufferBuilder,
1685 inputToInputWeights,
1686 inputToForgetWeights,
1688 inputToOutputWeights,
1689 recurrentToInputWeights,
1690 recurrentToForgetWeights,
1691 recurrentToCellWeights,
1692 recurrentToOutputWeights,
1698 auto fbQuantizedLstmLayer = serializer::CreateQuantizedLstmLayer(
1699 m_flatBufferBuilder,
1700 fbQuantizedLstmBaseLayer,
1701 fbQuantizedLstmParams);
1703 CreateAnyLayer(fbQuantizedLstmLayer.o, serializer::Layer::Layer_QuantizedLstmLayer);
1706 void SerializerStrategy::SerializeUnidirectionalSequenceLstmLayer(
1709 const std::vector<armnn::ConstTensor>& constants,
1714 auto fbUnidirectionalSequenceLstmBaseLayer =
1715 CreateLayerBase(layer, serializer::LayerType::LayerType_UnidirectionalSequenceLstm);
1717 auto fbUnidirectionalSequenceLstmDescriptor = serializer::CreateUnidirectionalSequenceLstmDescriptor(
1718 m_flatBufferBuilder,
1732 auto inputToForgetWeights = CreateConstTensorInfo(constants[i++]);
1733 auto inputToCellWeights = CreateConstTensorInfo(constants[i++]);
1734 auto inputToOutputWeights = CreateConstTensorInfo(constants[i++]);
1735 auto recurrentToForgetWeights = CreateConstTensorInfo(constants[i++]);
1736 auto recurrentToCellWeights = CreateConstTensorInfo(constants[i++]);
1737 auto recurrentToOutputWeights = CreateConstTensorInfo(constants[i++]);
1738 auto forgetGateBias = CreateConstTensorInfo(constants[i++]);
1739 auto cellBias = CreateConstTensorInfo(constants[i++]);
1740 auto outputGateBias = CreateConstTensorInfo(constants[i++]);
1743 flatbuffers::Offset<serializer::ConstTensor> inputToInputWeights;
1744 flatbuffers::Offset<serializer::ConstTensor> recurrentToInputWeights;
1745 flatbuffers::Offset<serializer::ConstTensor> cellToInputWeights;
1746 flatbuffers::Offset<serializer::ConstTensor> inputGateBias;
1747 flatbuffers::Offset<serializer::ConstTensor> projectionWeights;
1748 flatbuffers::Offset<serializer::ConstTensor> projectionBias;
1749 flatbuffers::Offset<serializer::ConstTensor> cellToForgetWeights;
1750 flatbuffers::Offset<serializer::ConstTensor> cellToOutputWeights;
1751 flatbuffers::Offset<serializer::ConstTensor> inputLayerNormWeights;
1752 flatbuffers::Offset<serializer::ConstTensor> forgetLayerNormWeights;
1753 flatbuffers::Offset<serializer::ConstTensor> cellLayerNormWeights;
1754 flatbuffers::Offset<serializer::ConstTensor> outputLayerNormWeights;
1758 inputToInputWeights = CreateConstTensorInfo(constants[i++]);
1759 recurrentToInputWeights = CreateConstTensorInfo(constants[i++]);
1760 inputGateBias = CreateConstTensorInfo(constants[i++]);
1767 cellToInputWeights = CreateConstTensorInfo(constants[i++]);
1769 cellToForgetWeights = CreateConstTensorInfo(constants[i++]);
1770 cellToOutputWeights = CreateConstTensorInfo(constants[i++]);
1775 projectionWeights = CreateConstTensorInfo(constants[i++]);
1776 projectionBias = CreateConstTensorInfo(constants[i++]);
1783 inputLayerNormWeights = CreateConstTensorInfo(constants[i++]);
1785 forgetLayerNormWeights = CreateConstTensorInfo(constants[i++]);
1786 cellLayerNormWeights = CreateConstTensorInfo(constants[i++]);
1787 outputLayerNormWeights = CreateConstTensorInfo(constants[i++]);
1790 auto fbUnidirectionalSequenceLstmParams = serializer::CreateLstmInputParams(
1791 m_flatBufferBuilder,
1792 inputToForgetWeights,
1794 inputToOutputWeights,
1795 recurrentToForgetWeights,
1796 recurrentToCellWeights,
1797 recurrentToOutputWeights,
1801 inputToInputWeights,
1802 recurrentToInputWeights,
1807 cellToForgetWeights,
1808 cellToOutputWeights,
1809 inputLayerNormWeights,
1810 forgetLayerNormWeights,
1811 cellLayerNormWeights,
1812 outputLayerNormWeights);
1814 auto fbUnidirectionalSequenceLstmLayer = serializer::CreateUnidirectionalSequenceLstmLayer(
1815 m_flatBufferBuilder,
1816 fbUnidirectionalSequenceLstmBaseLayer,
1817 fbUnidirectionalSequenceLstmDescriptor,
1818 fbUnidirectionalSequenceLstmParams);
1820 CreateAnyLayer(fbUnidirectionalSequenceLstmLayer.o, serializer::Layer::Layer_UnidirectionalSequenceLstmLayer);
1823 fb::Offset<serializer::LayerBase> SerializerStrategy::CreateLayerBase(
const IConnectableLayer* layer,
1827 uint32_t fbIndex = GetSerializedId(layer->
GetGuid());
1829 std::vector<fb::Offset<serializer::InputSlot>> inputSlots = CreateInputSlots(layer);
1830 std::vector<fb::Offset<serializer::OutputSlot>> outputSlots = CreateOutputSlots(layer);
1832 return serializer::CreateLayerBase(m_flatBufferBuilder,
1834 m_flatBufferBuilder.CreateString(layer->
GetName()),
1836 m_flatBufferBuilder.CreateVector(inputSlots),
1837 m_flatBufferBuilder.CreateVector(outputSlots));
1840 void SerializerStrategy::CreateAnyLayer(
const flatbuffers::Offset<void>& layer,
const serializer::Layer serializerLayer)
1843 auto anyLayer = armnnSerializer::CreateAnyLayer(m_flatBufferBuilder, serializerLayer, layer);
1844 m_serializedLayers.push_back(anyLayer);
1847 template <
typename T>
1848 flatbuffers::Offset<flatbuffers::Vector<T>> SerializerStrategy::CreateDataVector(
const void* memory,
unsigned int size)
1850 const T* buffer =
reinterpret_cast<const T*
>(memory);
1851 std::vector<T> vector(buffer, buffer + (size /
sizeof(T)));
1852 auto fbVector = m_flatBufferBuilder.CreateVector(vector);
1856 flatbuffers::Offset<TensorInfo> SerializerStrategy::CreateTensorInfo(
const armnn::TensorInfo& tensorInfo)
1859 std::vector<unsigned int> shape;
1860 std::vector<bool> specificity;
1863 for(
unsigned int dim = 0; dim < tensorInfo.
GetShape().GetNumDimensions(); ++dim)
1869 shape.push_back(tensorInfo.
GetShape()[dim]);
1880 auto flatBufferTensorInfo =
1881 serializer::CreateTensorInfo(m_flatBufferBuilder,
1882 m_flatBufferBuilder.CreateVector(shape),
1888 static_cast<unsigned int>
1890 m_flatBufferBuilder.CreateVector(specificity));
1891 return flatBufferTensorInfo;
1895 auto flatBufferTensorInfo = serializer::CreateTensorInfo(m_flatBufferBuilder,
1896 m_flatBufferBuilder.CreateVector(shape),
1902 static_cast<unsigned int>
1904 m_flatBufferBuilder.CreateVector(specificity));
1905 return flatBufferTensorInfo;
1908 flatbuffers::Offset<serializer::ConstTensor>
1913 flatbuffers::Offset<void> fbPayload;
1920 flatbuffers::Offset<serializer::LongData> flatBuffersData = serializer::CreateLongData(
1921 m_flatBufferBuilder,
1923 fbPayload = flatBuffersData.o;
1930 flatbuffers::Offset<serializer::IntData> flatBuffersData = serializer::CreateIntData(
1931 m_flatBufferBuilder,
1933 fbPayload = flatBuffersData.o;
1941 flatbuffers::Offset<serializer::ShortData> flatBuffersData = serializer::CreateShortData(
1942 m_flatBufferBuilder,
1944 fbPayload = flatBuffersData.o;
1954 flatbuffers::Offset<serializer::ByteData> flatBuffersData = serializer::CreateByteData(
1955 m_flatBufferBuilder,
1957 fbPayload = flatBuffersData.o;
1960 flatbuffers::Offset<serializer::ConstTensor> flatBufferConstTensor = serializer::CreateConstTensor(
1961 m_flatBufferBuilder,
1962 CreateTensorInfo(tensorInfo),
1965 return flatBufferConstTensor;
1968 flatbuffers::Offset<armnnSerializer::FeatureCompatibilityVersions> SerializerStrategy::GetVersionTable()
1970 flatbuffers::Offset<armnnSerializer::FeatureCompatibilityVersions> versionsTable =
1971 serializer::CreateFeatureCompatibilityVersions(
1972 m_flatBufferBuilder,
1977 return versionsTable;
1980 std::vector<fb::Offset<serializer::InputSlot>>
1983 std::vector<fb::Offset<serializer::InputSlot>> inputSlots;
1986 for (
unsigned int slotIndex = 0; slotIndex<layer->
GetNumInputSlots(); ++slotIndex)
1994 flatbuffers::Offset<TensorInfo> overriddenTensorInfo = CreateTensorInfo(inputSlot.
GetTensorInfo());
2000 inputSlots.push_back(serializer::CreateInputSlot(m_flatBufferBuilder, slotIndex, &conn, isOverridden,
2001 overriddenTensorInfo));
2006 std::vector<fb::Offset<serializer::OutputSlot>>
2009 std::vector<fb::Offset<serializer::OutputSlot>> outputSlots;
2012 for (
unsigned int slotIndex = 0; slotIndex < layer->
GetNumOutputSlots(); ++slotIndex)
2018 outputSlots.push_back(serializer::CreateOutputSlot(m_flatBufferBuilder,
2020 CreateTensorInfo(tensorInfo)));
2027 const std::vector<armnn::ConstTensor>& constants,
2039 SerializeActivationLayer(layer, layerDescriptor, name);
2044 SerializeAdditionLayer(layer, name);
2051 SerializeArgMinMaxLayer(layer, layerDescriptor, name);
2058 SerializeBatchMatMulLayer(layer,
2067 SerializeBatchNormalizationLayer(layer,
2077 SerializeBatchToSpaceNdLayer(layer,
2084 SerializeCastLayer(layer, name);
2091 SerializeChannelShuffleLayer(layer,
2100 SerializeComparisonLayer(layer,
2109 SerializeConcatLayer(layer,
2116 SerializeConstantLayer(layer,
2125 SerializeConvolution2dLayer(layer,
2134 SerializeConvolution3dLayer(layer,
2143 SerializeDepthToSpaceLayer(layer,
2152 SerializeDepthwiseConvolution2dLayer(layer,
2159 SerializeDequantizeLayer(layer,
2167 SerializeDetectionPostProcessLayer(layer, layerDescriptor, constants, name);
2172 SerializeDivisionLayer(layer, name);
2179 SerializeElementwiseBinaryLayer(layer, layerDescriptor, name);
2186 SerializeElementwiseUnaryLayer(layer, layerDescriptor, name);
2193 SerializeFillLayer(layer, layerDescriptor, name);
2198 SerializeFloorLayer(layer, name);
2205 SerializeFullyConnectedLayer(layer, layerDescriptor, name);
2212 SerializeGatherLayer(layer, layerDescriptor, name);
2217 SerializeGatherNdLayer(layer, name);
2222 SerializeInputLayer(layer,
id, name);
2229 SerializeInstanceNormalizationLayer(layer, layerDescriptor, name);
2236 SerializeL2NormalizationLayer(layer, layerDescriptor, name);
2243 SerializeLogicalBinaryLayer(layer, layerDescriptor, name);
2250 SerializeLogSoftmaxLayer(layer, layerDescriptor, name);
2257 SerializeLstmLayer(layer, layerDescriptor, constants, name);
2264 SerializeQLstmLayer(layer, layerDescriptor, constants, name);
2269 SerializeMaximumLayer(layer, name);
2276 SerializeMeanLayer(layer, layerDescriptor, name);
2281 SerializeMergeLayer(layer, name);
2286 SerializeMinimumLayer(layer, name);
2291 SerializeMultiplicationLayer(layer, name);
2298 SerializeNormalizationLayer(layer, layerDescriptor, name);
2303 SerializeOutputLayer(layer,
id, name);
2310 SerializePadLayer(layer, layerDescriptor, name);
2317 SerializePermuteLayer(layer, layerDescriptor, name);
2324 SerializePooling2dLayer(layer, layerDescriptor, name);
2331 SerializePooling3dLayer(layer, layerDescriptor, name);
2336 SerializePreluLayer(layer, name);
2341 SerializeQuantizeLayer(layer, name);
2345 SerializeQuantizedLstmLayer(layer, constants, name);
2351 SerializeReshapeLayer(layer, layerDescriptor, name);
2356 SerializeRankLayer(layer, name);
2363 SerializeReduceLayer(layer, layerDescriptor, name);
2370 SerializeResizeLayer(layer, layerDescriptor, name);
2375 SerializeReverseV2Layer(layer, name);
2380 SerializeShapeLayer(layer, name);
2387 SerializeSliceLayer(layer, layerDescriptor, name);
2394 SerializeSoftmaxLayer(layer, layerDescriptor, name);
2401 SerializeSpaceToBatchNdLayer(layer, layerDescriptor, name);
2408 SerializeSpaceToDepthLayer(layer, layerDescriptor, name);
2415 SerializeSplitterLayer(layer, layerDescriptor, name);
2422 SerializeStackLayer(layer, layerDescriptor, name);
2429 SerializeStandInLayer(layer, layerDescriptor, name);
2436 SerializeStridedSliceLayer(layer, layerDescriptor, name);
2441 SerializeSubtractionLayer(layer, name);
2446 SerializeSwitchLayer(layer, name);
2453 SerializeTileLayer(layer, layerDescriptor, name);
2460 SerializeTransposeLayer(layer, layerDescriptor, name);
2467 SerializeTransposeConvolution2dLayer(layer, layerDescriptor, constants, name);
2474 SerializeUnidirectionalSequenceLstmLayer(layer, layerDescriptor, constants, name);
2480 fmt::format(
"A layer of unknown type was given to the serializer. Layer name: {}; Layer Id: {}",
2487 void ISerializer::SerializerImpl::Serialize(
const INetwork& inNetwork)
2491 flatbuffers::FlatBufferBuilder& fbBuilder = m_SerializerStrategy.GetFlatBufferBuilder();
2494 auto serializedGraph = serializer::CreateSerializedGraph(
2496 fbBuilder.CreateVector(m_SerializerStrategy.GetSerializedLayers()),
2497 fbBuilder.CreateVector(m_SerializerStrategy.GetInputIds()),
2498 fbBuilder.CreateVector(m_SerializerStrategy.GetOutputIds()),
2499 m_SerializerStrategy.GetVersionTable());
2502 fbBuilder.Finish(serializedGraph);
2506 bool ISerializer::SerializerImpl::SaveSerializedToStream(std::ostream& stream)
2508 flatbuffers::FlatBufferBuilder& fbBuilder = m_SerializerStrategy.GetFlatBufferBuilder();
2510 auto bytesToWrite = armnn::numeric_cast<std::streamsize>(fbBuilder.GetSize());
2511 stream.write(
reinterpret_cast<const char*
>(fbBuilder.GetBufferPointer()), bytesToWrite);
2512 return !stream.bad();