1*89c4ff92SAndroid Build Coastguard Worker // 2*89c4ff92SAndroid Build Coastguard Worker // Copyright © 2017,2019-2023 Arm Ltd and Contributors. All rights reserved. 3*89c4ff92SAndroid Build Coastguard Worker // SPDX-License-Identifier: MIT 4*89c4ff92SAndroid Build Coastguard Worker // 5*89c4ff92SAndroid Build Coastguard Worker #pragma once 6*89c4ff92SAndroid Build Coastguard Worker 7*89c4ff92SAndroid Build Coastguard Worker #include <armnn/IStrategy.hpp> 8*89c4ff92SAndroid Build Coastguard Worker 9*89c4ff92SAndroid Build Coastguard Worker #include <armnnSerializer/ISerializer.hpp> 10*89c4ff92SAndroid Build Coastguard Worker 11*89c4ff92SAndroid Build Coastguard Worker #include <common/include/ProfilingGuid.hpp> 12*89c4ff92SAndroid Build Coastguard Worker 13*89c4ff92SAndroid Build Coastguard Worker #include <unordered_map> 14*89c4ff92SAndroid Build Coastguard Worker 15*89c4ff92SAndroid Build Coastguard Worker #include "ArmnnSchema_generated.h" 16*89c4ff92SAndroid Build Coastguard Worker 17*89c4ff92SAndroid Build Coastguard Worker #include <armnn/Types.hpp> 18*89c4ff92SAndroid Build Coastguard Worker 19*89c4ff92SAndroid Build Coastguard Worker namespace armnnSerializer 20*89c4ff92SAndroid Build Coastguard Worker { 21*89c4ff92SAndroid Build Coastguard Worker 22*89c4ff92SAndroid Build Coastguard Worker class SerializerStrategy : public armnn::IStrategy 23*89c4ff92SAndroid Build Coastguard Worker { 24*89c4ff92SAndroid Build Coastguard Worker public: 25*89c4ff92SAndroid Build Coastguard Worker void ExecuteStrategy(const armnn::IConnectableLayer* layer, 26*89c4ff92SAndroid Build Coastguard Worker const armnn::BaseDescriptor& descriptor, 27*89c4ff92SAndroid Build Coastguard Worker const std::vector<armnn::ConstTensor>& constants, 28*89c4ff92SAndroid Build Coastguard Worker const char* name, 29*89c4ff92SAndroid Build Coastguard Worker const armnn::LayerBindingId id) override; 30*89c4ff92SAndroid Build Coastguard Worker SerializerStrategy()31*89c4ff92SAndroid Build Coastguard Worker SerializerStrategy() : m_layerId(0) {} ~SerializerStrategy()32*89c4ff92SAndroid Build Coastguard Worker ~SerializerStrategy() {} 33*89c4ff92SAndroid Build Coastguard Worker GetFlatBufferBuilder()34*89c4ff92SAndroid Build Coastguard Worker flatbuffers::FlatBufferBuilder& GetFlatBufferBuilder() 35*89c4ff92SAndroid Build Coastguard Worker { 36*89c4ff92SAndroid Build Coastguard Worker return m_flatBufferBuilder; 37*89c4ff92SAndroid Build Coastguard Worker } 38*89c4ff92SAndroid Build Coastguard Worker GetInputIds()39*89c4ff92SAndroid Build Coastguard Worker std::vector<int>& GetInputIds() 40*89c4ff92SAndroid Build Coastguard Worker { 41*89c4ff92SAndroid Build Coastguard Worker return m_inputIds; 42*89c4ff92SAndroid Build Coastguard Worker } 43*89c4ff92SAndroid Build Coastguard Worker GetOutputIds()44*89c4ff92SAndroid Build Coastguard Worker std::vector<int>& GetOutputIds() 45*89c4ff92SAndroid Build Coastguard Worker { 46*89c4ff92SAndroid Build Coastguard Worker return m_outputIds; 47*89c4ff92SAndroid Build Coastguard Worker } 48*89c4ff92SAndroid Build Coastguard Worker GetSerializedLayers()49*89c4ff92SAndroid Build Coastguard Worker std::vector<flatbuffers::Offset<armnnSerializer::AnyLayer>>& GetSerializedLayers() 50*89c4ff92SAndroid Build Coastguard Worker { 51*89c4ff92SAndroid Build Coastguard Worker return m_serializedLayers; 52*89c4ff92SAndroid Build Coastguard Worker } 53*89c4ff92SAndroid Build Coastguard Worker 54*89c4ff92SAndroid Build Coastguard Worker flatbuffers::Offset<armnnSerializer::FeatureCompatibilityVersions> GetVersionTable(); 55*89c4ff92SAndroid Build Coastguard Worker 56*89c4ff92SAndroid Build Coastguard Worker private: 57*89c4ff92SAndroid Build Coastguard Worker /// Creates the Input Slots and Output Slots and LayerBase for the layer. 58*89c4ff92SAndroid Build Coastguard Worker flatbuffers::Offset<armnnSerializer::LayerBase> CreateLayerBase( 59*89c4ff92SAndroid Build Coastguard Worker const armnn::IConnectableLayer* layer, 60*89c4ff92SAndroid Build Coastguard Worker const armnnSerializer::LayerType layerType); 61*89c4ff92SAndroid Build Coastguard Worker 62*89c4ff92SAndroid Build Coastguard Worker /// Creates the serializer AnyLayer for the layer and adds it to m_serializedLayers. 63*89c4ff92SAndroid Build Coastguard Worker void CreateAnyLayer(const flatbuffers::Offset<void>& layer, const armnnSerializer::Layer serializerLayer); 64*89c4ff92SAndroid Build Coastguard Worker 65*89c4ff92SAndroid Build Coastguard Worker /// Creates the serializer ConstTensor for the armnn ConstTensor. 66*89c4ff92SAndroid Build Coastguard Worker flatbuffers::Offset<armnnSerializer::ConstTensor> CreateConstTensorInfo( 67*89c4ff92SAndroid Build Coastguard Worker const armnn::ConstTensor& constTensor); 68*89c4ff92SAndroid Build Coastguard Worker 69*89c4ff92SAndroid Build Coastguard Worker /// Creates the serializer TensorInfo for the armnn TensorInfo. 70*89c4ff92SAndroid Build Coastguard Worker flatbuffers::Offset<TensorInfo> CreateTensorInfo(const armnn::TensorInfo& tensorInfo); 71*89c4ff92SAndroid Build Coastguard Worker 72*89c4ff92SAndroid Build Coastguard Worker template <typename T> 73*89c4ff92SAndroid Build Coastguard Worker flatbuffers::Offset<flatbuffers::Vector<T>> CreateDataVector(const void* memory, unsigned int size); 74*89c4ff92SAndroid Build Coastguard Worker 75*89c4ff92SAndroid Build Coastguard Worker ///Function which maps Guid to an index 76*89c4ff92SAndroid Build Coastguard Worker uint32_t GetSerializedId(LayerGuid guid); 77*89c4ff92SAndroid Build Coastguard Worker 78*89c4ff92SAndroid Build Coastguard Worker /// Creates the serializer InputSlots for the layer. 79*89c4ff92SAndroid Build Coastguard Worker std::vector<flatbuffers::Offset<armnnSerializer::InputSlot>> CreateInputSlots( 80*89c4ff92SAndroid Build Coastguard Worker const armnn::IConnectableLayer* layer); 81*89c4ff92SAndroid Build Coastguard Worker 82*89c4ff92SAndroid Build Coastguard Worker /// Creates the serializer OutputSlots for the layer. 83*89c4ff92SAndroid Build Coastguard Worker std::vector<flatbuffers::Offset<armnnSerializer::OutputSlot>> CreateOutputSlots( 84*89c4ff92SAndroid Build Coastguard Worker const armnn::IConnectableLayer* layer); 85*89c4ff92SAndroid Build Coastguard Worker 86*89c4ff92SAndroid Build Coastguard Worker /// FlatBufferBuilder to create our layers' FlatBuffers. 87*89c4ff92SAndroid Build Coastguard Worker flatbuffers::FlatBufferBuilder m_flatBufferBuilder; 88*89c4ff92SAndroid Build Coastguard Worker 89*89c4ff92SAndroid Build Coastguard Worker /// AnyLayers required by the SerializedGraph. 90*89c4ff92SAndroid Build Coastguard Worker std::vector<flatbuffers::Offset<armnnSerializer::AnyLayer>> m_serializedLayers; 91*89c4ff92SAndroid Build Coastguard Worker 92*89c4ff92SAndroid Build Coastguard Worker /// Vector of the binding ids of all Input Layers required by the SerializedGraph. 93*89c4ff92SAndroid Build Coastguard Worker std::vector<int> m_inputIds; 94*89c4ff92SAndroid Build Coastguard Worker 95*89c4ff92SAndroid Build Coastguard Worker /// Vector of the binding ids of all Output Layers required by the SerializedGraph. 96*89c4ff92SAndroid Build Coastguard Worker std::vector<int> m_outputIds; 97*89c4ff92SAndroid Build Coastguard Worker 98*89c4ff92SAndroid Build Coastguard Worker /// Mapped Guids of all Layers to match our index. 99*89c4ff92SAndroid Build Coastguard Worker std::unordered_map<LayerGuid, uint32_t > m_guidMap; 100*89c4ff92SAndroid Build Coastguard Worker 101*89c4ff92SAndroid Build Coastguard Worker /// layer within our FlatBuffer index. 102*89c4ff92SAndroid Build Coastguard Worker uint32_t m_layerId; 103*89c4ff92SAndroid Build Coastguard Worker 104*89c4ff92SAndroid Build Coastguard Worker private: 105*89c4ff92SAndroid Build Coastguard Worker void SerializeActivationLayer(const armnn::IConnectableLayer* layer, 106*89c4ff92SAndroid Build Coastguard Worker const armnn::ActivationDescriptor& descriptor, 107*89c4ff92SAndroid Build Coastguard Worker const char* name = nullptr); 108*89c4ff92SAndroid Build Coastguard Worker 109*89c4ff92SAndroid Build Coastguard Worker void SerializeAdditionLayer(const armnn::IConnectableLayer* layer, 110*89c4ff92SAndroid Build Coastguard Worker const char* name = nullptr); 111*89c4ff92SAndroid Build Coastguard Worker 112*89c4ff92SAndroid Build Coastguard Worker void SerializeArgMinMaxLayer(const armnn::IConnectableLayer* layer, 113*89c4ff92SAndroid Build Coastguard Worker const armnn::ArgMinMaxDescriptor& argMinMaxDescriptor, 114*89c4ff92SAndroid Build Coastguard Worker const char* name = nullptr); 115*89c4ff92SAndroid Build Coastguard Worker 116*89c4ff92SAndroid Build Coastguard Worker void SerializeBatchMatMulLayer(const armnn::IConnectableLayer* layer, 117*89c4ff92SAndroid Build Coastguard Worker const armnn::BatchMatMulDescriptor& descriptor, 118*89c4ff92SAndroid Build Coastguard Worker const char* name = nullptr); 119*89c4ff92SAndroid Build Coastguard Worker 120*89c4ff92SAndroid Build Coastguard Worker void SerializeBatchToSpaceNdLayer(const armnn::IConnectableLayer* layer, 121*89c4ff92SAndroid Build Coastguard Worker const armnn::BatchToSpaceNdDescriptor& descriptor, 122*89c4ff92SAndroid Build Coastguard Worker const char* name = nullptr); 123*89c4ff92SAndroid Build Coastguard Worker 124*89c4ff92SAndroid Build Coastguard Worker void SerializeBatchNormalizationLayer(const armnn::IConnectableLayer* layer, 125*89c4ff92SAndroid Build Coastguard Worker const armnn::BatchNormalizationDescriptor& BatchNormalizationDescriptor, 126*89c4ff92SAndroid Build Coastguard Worker const std::vector<armnn::ConstTensor>& constants, 127*89c4ff92SAndroid Build Coastguard Worker const char* name = nullptr); 128*89c4ff92SAndroid Build Coastguard Worker 129*89c4ff92SAndroid Build Coastguard Worker void SerializeCastLayer(const armnn::IConnectableLayer* layer, 130*89c4ff92SAndroid Build Coastguard Worker const char* name = nullptr); 131*89c4ff92SAndroid Build Coastguard Worker 132*89c4ff92SAndroid Build Coastguard Worker void SerializeChannelShuffleLayer(const armnn::IConnectableLayer* layer, 133*89c4ff92SAndroid Build Coastguard Worker const armnn::ChannelShuffleDescriptor& descriptor, 134*89c4ff92SAndroid Build Coastguard Worker const char* name = nullptr); 135*89c4ff92SAndroid Build Coastguard Worker 136*89c4ff92SAndroid Build Coastguard Worker void SerializeComparisonLayer(const armnn::IConnectableLayer* layer, 137*89c4ff92SAndroid Build Coastguard Worker const armnn::ComparisonDescriptor& descriptor, 138*89c4ff92SAndroid Build Coastguard Worker const char* name = nullptr); 139*89c4ff92SAndroid Build Coastguard Worker 140*89c4ff92SAndroid Build Coastguard Worker void SerializeConcatLayer(const armnn::IConnectableLayer* layer, 141*89c4ff92SAndroid Build Coastguard Worker const armnn::ConcatDescriptor& concatDescriptor, 142*89c4ff92SAndroid Build Coastguard Worker const char* name = nullptr); 143*89c4ff92SAndroid Build Coastguard Worker 144*89c4ff92SAndroid Build Coastguard Worker void SerializeConstantLayer(const armnn::IConnectableLayer* layer, 145*89c4ff92SAndroid Build Coastguard Worker const std::vector<armnn::ConstTensor>& constants, 146*89c4ff92SAndroid Build Coastguard Worker const char* name = nullptr); 147*89c4ff92SAndroid Build Coastguard Worker 148*89c4ff92SAndroid Build Coastguard Worker void SerializeConvolution2dLayer(const armnn::IConnectableLayer* layer, 149*89c4ff92SAndroid Build Coastguard Worker const armnn::Convolution2dDescriptor& descriptor, 150*89c4ff92SAndroid Build Coastguard Worker const char* name = nullptr); 151*89c4ff92SAndroid Build Coastguard Worker 152*89c4ff92SAndroid Build Coastguard Worker void SerializeConvolution3dLayer(const armnn::IConnectableLayer* layer, 153*89c4ff92SAndroid Build Coastguard Worker const armnn::Convolution3dDescriptor& descriptor, 154*89c4ff92SAndroid Build Coastguard Worker const char* name = nullptr); 155*89c4ff92SAndroid Build Coastguard Worker 156*89c4ff92SAndroid Build Coastguard Worker void SerializeDepthToSpaceLayer(const armnn::IConnectableLayer* layer, 157*89c4ff92SAndroid Build Coastguard Worker const armnn::DepthToSpaceDescriptor& descriptor, 158*89c4ff92SAndroid Build Coastguard Worker const char* name = nullptr); 159*89c4ff92SAndroid Build Coastguard Worker 160*89c4ff92SAndroid Build Coastguard Worker void SerializeDepthwiseConvolution2dLayer(const armnn::IConnectableLayer* layer, 161*89c4ff92SAndroid Build Coastguard Worker const armnn::DepthwiseConvolution2dDescriptor& descriptor, 162*89c4ff92SAndroid Build Coastguard Worker const char* name = nullptr); 163*89c4ff92SAndroid Build Coastguard Worker 164*89c4ff92SAndroid Build Coastguard Worker void SerializeDequantizeLayer(const armnn::IConnectableLayer* layer, 165*89c4ff92SAndroid Build Coastguard Worker const char* name = nullptr); 166*89c4ff92SAndroid Build Coastguard Worker 167*89c4ff92SAndroid Build Coastguard Worker void SerializeDetectionPostProcessLayer(const armnn::IConnectableLayer* layer, 168*89c4ff92SAndroid Build Coastguard Worker const armnn::DetectionPostProcessDescriptor& descriptor, 169*89c4ff92SAndroid Build Coastguard Worker const std::vector<armnn::ConstTensor>& constants, 170*89c4ff92SAndroid Build Coastguard Worker const char* name = nullptr); 171*89c4ff92SAndroid Build Coastguard Worker 172*89c4ff92SAndroid Build Coastguard Worker void SerializeDivisionLayer(const armnn::IConnectableLayer* layer, 173*89c4ff92SAndroid Build Coastguard Worker const char* name = nullptr); 174*89c4ff92SAndroid Build Coastguard Worker 175*89c4ff92SAndroid Build Coastguard Worker void SerializeElementwiseBinaryLayer(const armnn::IConnectableLayer* layer, 176*89c4ff92SAndroid Build Coastguard Worker const armnn::ElementwiseBinaryDescriptor& descriptor, 177*89c4ff92SAndroid Build Coastguard Worker const char* name = nullptr); 178*89c4ff92SAndroid Build Coastguard Worker 179*89c4ff92SAndroid Build Coastguard Worker void SerializeElementwiseUnaryLayer(const armnn::IConnectableLayer* layer, 180*89c4ff92SAndroid Build Coastguard Worker const armnn::ElementwiseUnaryDescriptor& descriptor, 181*89c4ff92SAndroid Build Coastguard Worker const char* name = nullptr); 182*89c4ff92SAndroid Build Coastguard Worker 183*89c4ff92SAndroid Build Coastguard Worker void SerializeFillLayer(const armnn::IConnectableLayer* layer, 184*89c4ff92SAndroid Build Coastguard Worker const armnn::FillDescriptor& fillDescriptor, 185*89c4ff92SAndroid Build Coastguard Worker const char* name = nullptr); 186*89c4ff92SAndroid Build Coastguard Worker 187*89c4ff92SAndroid Build Coastguard Worker void SerializeFloorLayer(const armnn::IConnectableLayer *layer, 188*89c4ff92SAndroid Build Coastguard Worker const char *name = nullptr); 189*89c4ff92SAndroid Build Coastguard Worker 190*89c4ff92SAndroid Build Coastguard Worker void SerializeFullyConnectedLayer(const armnn::IConnectableLayer* layer, 191*89c4ff92SAndroid Build Coastguard Worker const armnn::FullyConnectedDescriptor& fullyConnectedDescriptor, 192*89c4ff92SAndroid Build Coastguard Worker const char* name = nullptr); 193*89c4ff92SAndroid Build Coastguard Worker 194*89c4ff92SAndroid Build Coastguard Worker void SerializeGatherLayer(const armnn::IConnectableLayer* layer, 195*89c4ff92SAndroid Build Coastguard Worker const armnn::GatherDescriptor& gatherDescriptor, 196*89c4ff92SAndroid Build Coastguard Worker const char* name = nullptr); 197*89c4ff92SAndroid Build Coastguard Worker 198*89c4ff92SAndroid Build Coastguard Worker void SerializeGatherNdLayer(const armnn::IConnectableLayer* layer, 199*89c4ff92SAndroid Build Coastguard Worker const char* name = nullptr); 200*89c4ff92SAndroid Build Coastguard Worker 201*89c4ff92SAndroid Build Coastguard Worker void SerializeInputLayer(const armnn::IConnectableLayer* layer, 202*89c4ff92SAndroid Build Coastguard Worker armnn::LayerBindingId id, 203*89c4ff92SAndroid Build Coastguard Worker const char* name = nullptr); 204*89c4ff92SAndroid Build Coastguard Worker 205*89c4ff92SAndroid Build Coastguard Worker void SerializeInstanceNormalizationLayer(const armnn::IConnectableLayer* layer, 206*89c4ff92SAndroid Build Coastguard Worker const armnn::InstanceNormalizationDescriptor& instanceNormalizationDescriptor, 207*89c4ff92SAndroid Build Coastguard Worker const char* name = nullptr); 208*89c4ff92SAndroid Build Coastguard Worker 209*89c4ff92SAndroid Build Coastguard Worker void SerializeL2NormalizationLayer(const armnn::IConnectableLayer* layer, 210*89c4ff92SAndroid Build Coastguard Worker const armnn::L2NormalizationDescriptor& l2NormalizationDescriptor, 211*89c4ff92SAndroid Build Coastguard Worker const char* name = nullptr); 212*89c4ff92SAndroid Build Coastguard Worker 213*89c4ff92SAndroid Build Coastguard Worker void SerializeLogicalBinaryLayer(const armnn::IConnectableLayer* layer, 214*89c4ff92SAndroid Build Coastguard Worker const armnn::LogicalBinaryDescriptor& descriptor, 215*89c4ff92SAndroid Build Coastguard Worker const char* name = nullptr); 216*89c4ff92SAndroid Build Coastguard Worker 217*89c4ff92SAndroid Build Coastguard Worker void SerializeLogSoftmaxLayer(const armnn::IConnectableLayer* layer, 218*89c4ff92SAndroid Build Coastguard Worker const armnn::LogSoftmaxDescriptor& logSoftmaxDescriptor, 219*89c4ff92SAndroid Build Coastguard Worker const char* name = nullptr); 220*89c4ff92SAndroid Build Coastguard Worker 221*89c4ff92SAndroid Build Coastguard Worker void SerializeLstmLayer(const armnn::IConnectableLayer* layer, 222*89c4ff92SAndroid Build Coastguard Worker const armnn::LstmDescriptor& descriptor, 223*89c4ff92SAndroid Build Coastguard Worker const std::vector<armnn::ConstTensor>& constants, 224*89c4ff92SAndroid Build Coastguard Worker const char* name = nullptr); 225*89c4ff92SAndroid Build Coastguard Worker 226*89c4ff92SAndroid Build Coastguard Worker void SerializeMeanLayer(const armnn::IConnectableLayer* layer, 227*89c4ff92SAndroid Build Coastguard Worker const armnn::MeanDescriptor& descriptor, 228*89c4ff92SAndroid Build Coastguard Worker const char* name); 229*89c4ff92SAndroid Build Coastguard Worker 230*89c4ff92SAndroid Build Coastguard Worker void SerializeMinimumLayer(const armnn::IConnectableLayer* layer, 231*89c4ff92SAndroid Build Coastguard Worker const char* name = nullptr); 232*89c4ff92SAndroid Build Coastguard Worker 233*89c4ff92SAndroid Build Coastguard Worker void SerializeMaximumLayer(const armnn::IConnectableLayer* layer, 234*89c4ff92SAndroid Build Coastguard Worker const char* name = nullptr); 235*89c4ff92SAndroid Build Coastguard Worker 236*89c4ff92SAndroid Build Coastguard Worker void SerializeMergeLayer(const armnn::IConnectableLayer* layer, 237*89c4ff92SAndroid Build Coastguard Worker const char* name = nullptr); 238*89c4ff92SAndroid Build Coastguard Worker 239*89c4ff92SAndroid Build Coastguard Worker void SerializeMultiplicationLayer(const armnn::IConnectableLayer* layer, 240*89c4ff92SAndroid Build Coastguard Worker const char* name = nullptr); 241*89c4ff92SAndroid Build Coastguard Worker 242*89c4ff92SAndroid Build Coastguard Worker void SerializeOutputLayer(const armnn::IConnectableLayer* layer, 243*89c4ff92SAndroid Build Coastguard Worker armnn::LayerBindingId id, 244*89c4ff92SAndroid Build Coastguard Worker const char* name = nullptr); 245*89c4ff92SAndroid Build Coastguard Worker 246*89c4ff92SAndroid Build Coastguard Worker void SerializePadLayer(const armnn::IConnectableLayer* layer, 247*89c4ff92SAndroid Build Coastguard Worker const armnn::PadDescriptor& PadDescriptor, 248*89c4ff92SAndroid Build Coastguard Worker const char* name = nullptr); 249*89c4ff92SAndroid Build Coastguard Worker 250*89c4ff92SAndroid Build Coastguard Worker void SerializePermuteLayer(const armnn::IConnectableLayer* layer, 251*89c4ff92SAndroid Build Coastguard Worker const armnn::PermuteDescriptor& PermuteDescriptor, 252*89c4ff92SAndroid Build Coastguard Worker const char* name = nullptr); 253*89c4ff92SAndroid Build Coastguard Worker 254*89c4ff92SAndroid Build Coastguard Worker void SerializePooling2dLayer(const armnn::IConnectableLayer* layer, 255*89c4ff92SAndroid Build Coastguard Worker const armnn::Pooling2dDescriptor& pooling2dDescriptor, 256*89c4ff92SAndroid Build Coastguard Worker const char* name = nullptr); 257*89c4ff92SAndroid Build Coastguard Worker 258*89c4ff92SAndroid Build Coastguard Worker void SerializePooling3dLayer(const armnn::IConnectableLayer* layer, 259*89c4ff92SAndroid Build Coastguard Worker const armnn::Pooling3dDescriptor& pooling3dDescriptor, 260*89c4ff92SAndroid Build Coastguard Worker const char* name = nullptr); 261*89c4ff92SAndroid Build Coastguard Worker 262*89c4ff92SAndroid Build Coastguard Worker void SerializePreluLayer(const armnn::IConnectableLayer* layer, 263*89c4ff92SAndroid Build Coastguard Worker const char* name = nullptr); 264*89c4ff92SAndroid Build Coastguard Worker 265*89c4ff92SAndroid Build Coastguard Worker void SerializeQuantizeLayer(const armnn::IConnectableLayer* layer, 266*89c4ff92SAndroid Build Coastguard Worker const char* name = nullptr); 267*89c4ff92SAndroid Build Coastguard Worker 268*89c4ff92SAndroid Build Coastguard Worker void SerializeQLstmLayer(const armnn::IConnectableLayer* layer, 269*89c4ff92SAndroid Build Coastguard Worker const armnn::QLstmDescriptor& descriptor, 270*89c4ff92SAndroid Build Coastguard Worker const std::vector<armnn::ConstTensor>& constants, 271*89c4ff92SAndroid Build Coastguard Worker const char* name = nullptr); 272*89c4ff92SAndroid Build Coastguard Worker 273*89c4ff92SAndroid Build Coastguard Worker void SerializeQuantizedLstmLayer(const armnn::IConnectableLayer* layer, 274*89c4ff92SAndroid Build Coastguard Worker const std::vector<armnn::ConstTensor>& constants, 275*89c4ff92SAndroid Build Coastguard Worker const char* name = nullptr); 276*89c4ff92SAndroid Build Coastguard Worker 277*89c4ff92SAndroid Build Coastguard Worker void SerializeRankLayer(const armnn::IConnectableLayer* layer, 278*89c4ff92SAndroid Build Coastguard Worker const char* name = nullptr); 279*89c4ff92SAndroid Build Coastguard Worker 280*89c4ff92SAndroid Build Coastguard Worker void SerializeReduceLayer(const armnn::IConnectableLayer* layer, 281*89c4ff92SAndroid Build Coastguard Worker const armnn::ReduceDescriptor& reduceDescriptor, 282*89c4ff92SAndroid Build Coastguard Worker const char* name = nullptr); 283*89c4ff92SAndroid Build Coastguard Worker 284*89c4ff92SAndroid Build Coastguard Worker void SerializeReshapeLayer(const armnn::IConnectableLayer* layer, 285*89c4ff92SAndroid Build Coastguard Worker const armnn::ReshapeDescriptor& reshapeDescriptor, 286*89c4ff92SAndroid Build Coastguard Worker const char* name = nullptr); 287*89c4ff92SAndroid Build Coastguard Worker 288*89c4ff92SAndroid Build Coastguard Worker void SerializeResizeLayer(const armnn::IConnectableLayer* layer, 289*89c4ff92SAndroid Build Coastguard Worker const armnn::ResizeDescriptor& resizeDescriptor, 290*89c4ff92SAndroid Build Coastguard Worker const char* name = nullptr); 291*89c4ff92SAndroid Build Coastguard Worker 292*89c4ff92SAndroid Build Coastguard Worker void SerializeSliceLayer(const armnn::IConnectableLayer* layer, 293*89c4ff92SAndroid Build Coastguard Worker const armnn::SliceDescriptor& sliceDescriptor, 294*89c4ff92SAndroid Build Coastguard Worker const char* name = nullptr); 295*89c4ff92SAndroid Build Coastguard Worker 296*89c4ff92SAndroid Build Coastguard Worker void SerializeSoftmaxLayer(const armnn::IConnectableLayer* layer, 297*89c4ff92SAndroid Build Coastguard Worker const armnn::SoftmaxDescriptor& softmaxDescriptor, 298*89c4ff92SAndroid Build Coastguard Worker const char* name = nullptr); 299*89c4ff92SAndroid Build Coastguard Worker 300*89c4ff92SAndroid Build Coastguard Worker void SerializeSpaceToBatchNdLayer(const armnn::IConnectableLayer* layer, 301*89c4ff92SAndroid Build Coastguard Worker const armnn::SpaceToBatchNdDescriptor& spaceToBatchNdDescriptor, 302*89c4ff92SAndroid Build Coastguard Worker const char* name = nullptr); 303*89c4ff92SAndroid Build Coastguard Worker 304*89c4ff92SAndroid Build Coastguard Worker void SerializeSpaceToDepthLayer(const armnn::IConnectableLayer* layer, 305*89c4ff92SAndroid Build Coastguard Worker const armnn::SpaceToDepthDescriptor& spaceToDepthDescriptor, 306*89c4ff92SAndroid Build Coastguard Worker const char* name = nullptr); 307*89c4ff92SAndroid Build Coastguard Worker 308*89c4ff92SAndroid Build Coastguard Worker void SerializeNormalizationLayer(const armnn::IConnectableLayer* layer, 309*89c4ff92SAndroid Build Coastguard Worker const armnn::NormalizationDescriptor& normalizationDescriptor, 310*89c4ff92SAndroid Build Coastguard Worker const char* name = nullptr); 311*89c4ff92SAndroid Build Coastguard Worker 312*89c4ff92SAndroid Build Coastguard Worker void SerializeShapeLayer(const armnn::IConnectableLayer* layer, 313*89c4ff92SAndroid Build Coastguard Worker const char* name = nullptr); 314*89c4ff92SAndroid Build Coastguard Worker 315*89c4ff92SAndroid Build Coastguard Worker void SerializeSplitterLayer(const armnn::IConnectableLayer* layer, 316*89c4ff92SAndroid Build Coastguard Worker const armnn::ViewsDescriptor& viewsDescriptor, 317*89c4ff92SAndroid Build Coastguard Worker const char* name = nullptr); 318*89c4ff92SAndroid Build Coastguard Worker 319*89c4ff92SAndroid Build Coastguard Worker void SerializeStandInLayer(const armnn::IConnectableLayer* layer, 320*89c4ff92SAndroid Build Coastguard Worker const armnn::StandInDescriptor& standInDescriptor, 321*89c4ff92SAndroid Build Coastguard Worker const char* name = nullptr); 322*89c4ff92SAndroid Build Coastguard Worker 323*89c4ff92SAndroid Build Coastguard Worker void SerializeStackLayer(const armnn::IConnectableLayer* layer, 324*89c4ff92SAndroid Build Coastguard Worker const armnn::StackDescriptor& stackDescriptor, 325*89c4ff92SAndroid Build Coastguard Worker const char* name = nullptr); 326*89c4ff92SAndroid Build Coastguard Worker 327*89c4ff92SAndroid Build Coastguard Worker void SerializeStridedSliceLayer(const armnn::IConnectableLayer* layer, 328*89c4ff92SAndroid Build Coastguard Worker const armnn::StridedSliceDescriptor& stridedSliceDescriptor, 329*89c4ff92SAndroid Build Coastguard Worker const char* name = nullptr); 330*89c4ff92SAndroid Build Coastguard Worker 331*89c4ff92SAndroid Build Coastguard Worker void SerializeSubtractionLayer(const armnn::IConnectableLayer* layer, 332*89c4ff92SAndroid Build Coastguard Worker const char* name = nullptr); 333*89c4ff92SAndroid Build Coastguard Worker 334*89c4ff92SAndroid Build Coastguard Worker void SerializeSwitchLayer(const armnn::IConnectableLayer* layer, 335*89c4ff92SAndroid Build Coastguard Worker const char* name = nullptr); 336*89c4ff92SAndroid Build Coastguard Worker 337*89c4ff92SAndroid Build Coastguard Worker void SerializeTransposeConvolution2dLayer(const armnn::IConnectableLayer* layer, 338*89c4ff92SAndroid Build Coastguard Worker const armnn::TransposeConvolution2dDescriptor& descriptor, 339*89c4ff92SAndroid Build Coastguard Worker const std::vector<armnn::ConstTensor>& constants, 340*89c4ff92SAndroid Build Coastguard Worker const char* = nullptr); 341*89c4ff92SAndroid Build Coastguard Worker 342*89c4ff92SAndroid Build Coastguard Worker void SerializeTransposeLayer(const armnn::IConnectableLayer* layer, 343*89c4ff92SAndroid Build Coastguard Worker const armnn::TransposeDescriptor& descriptor, 344*89c4ff92SAndroid Build Coastguard Worker const char* name = nullptr); 345*89c4ff92SAndroid Build Coastguard Worker 346*89c4ff92SAndroid Build Coastguard Worker void SerializeUnidirectionalSequenceLstmLayer(const armnn::IConnectableLayer* layer, 347*89c4ff92SAndroid Build Coastguard Worker const armnn::UnidirectionalSequenceLstmDescriptor& descriptor, 348*89c4ff92SAndroid Build Coastguard Worker const std::vector<armnn::ConstTensor>& constants, 349*89c4ff92SAndroid Build Coastguard Worker const char* name = nullptr); 350*89c4ff92SAndroid Build Coastguard Worker }; 351*89c4ff92SAndroid Build Coastguard Worker 352*89c4ff92SAndroid Build Coastguard Worker 353*89c4ff92SAndroid Build Coastguard Worker 354*89c4ff92SAndroid Build Coastguard Worker class ISerializer::SerializerImpl 355*89c4ff92SAndroid Build Coastguard Worker { 356*89c4ff92SAndroid Build Coastguard Worker public: 357*89c4ff92SAndroid Build Coastguard Worker SerializerImpl() = default; 358*89c4ff92SAndroid Build Coastguard Worker ~SerializerImpl() = default; 359*89c4ff92SAndroid Build Coastguard Worker 360*89c4ff92SAndroid Build Coastguard Worker /// Serializes the network to ArmNN SerializedGraph. 361*89c4ff92SAndroid Build Coastguard Worker /// @param [in] inNetwork The network to be serialized. 362*89c4ff92SAndroid Build Coastguard Worker void Serialize(const armnn::INetwork& inNetwork); 363*89c4ff92SAndroid Build Coastguard Worker 364*89c4ff92SAndroid Build Coastguard Worker /// Serializes the SerializedGraph to the stream. 365*89c4ff92SAndroid Build Coastguard Worker /// @param [stream] the stream to save to 366*89c4ff92SAndroid Build Coastguard Worker /// @return true if graph is Serialized to the Stream, false otherwise 367*89c4ff92SAndroid Build Coastguard Worker bool SaveSerializedToStream(std::ostream& stream); 368*89c4ff92SAndroid Build Coastguard Worker 369*89c4ff92SAndroid Build Coastguard Worker private: 370*89c4ff92SAndroid Build Coastguard Worker 371*89c4ff92SAndroid Build Coastguard Worker /// Visitor to contruct serialized network 372*89c4ff92SAndroid Build Coastguard Worker SerializerStrategy m_SerializerStrategy; 373*89c4ff92SAndroid Build Coastguard Worker }; 374*89c4ff92SAndroid Build Coastguard Worker 375*89c4ff92SAndroid Build Coastguard Worker } //namespace armnnSerializer 376