ArmNN
 22.05
SerializerStrategy Class Reference

#include <Serializer.hpp>

Inheritance diagram for SerializerStrategy:
IStrategy

Public Member Functions

void ExecuteStrategy (const armnn::IConnectableLayer *layer, const armnn::BaseDescriptor &descriptor, const std::vector< armnn::ConstTensor > &constants, const char *name, const armnn::LayerBindingId id) override
 
 SerializerStrategy ()
 
 ~SerializerStrategy ()
 
flatbuffers::FlatBufferBuilder & GetFlatBufferBuilder ()
 
std::vector< int > & GetInputIds ()
 
std::vector< int > & GetOutputIds ()
 
std::vector< flatbuffers::Offset< armnnSerializer::AnyLayer > > & GetSerializedLayers ()
 
flatbuffers::Offset< armnnSerializer::FeatureCompatibilityVersions > GetVersionTable ()
 
- Public Member Functions inherited from IStrategy
virtual void ExecuteStrategy (const armnn::IConnectableLayer *layer, const armnn::BaseDescriptor &descriptor, const std::vector< armnn::ConstTensor > &constants, const char *name, const armnn::LayerBindingId id=0)=0
 
virtual void FinishStrategy ()
 

Additional Inherited Members

- Protected Member Functions inherited from IStrategy
 IStrategy ()
 
virtual ~IStrategy ()
 

Detailed Description

Definition at line 24 of file Serializer.hpp.

Constructor & Destructor Documentation

◆ SerializerStrategy()

SerializerStrategy ( )
inline

Definition at line 33 of file Serializer.hpp.

33 : m_layerId(0) {}

◆ ~SerializerStrategy()

~SerializerStrategy ( )
inline

Definition at line 34 of file Serializer.hpp.

34 {}

Member Function Documentation

◆ ExecuteStrategy()

void ExecuteStrategy ( const armnn::IConnectableLayer layer,
const armnn::BaseDescriptor descriptor,
const std::vector< armnn::ConstTensor > &  constants,
const char *  name,
const armnn::LayerBindingId  id 
)
override

Definition at line 1945 of file Serializer.cpp.

References armnn::Activation, armnn::Addition, armnn::ArgMinMax, armnn::BatchNormalization, armnn::BatchToSpaceNd, armnn::Cast, armnn::ChannelShuffle, armnn::Comparison, armnn::Concat, armnn::Constant, armnn::Convolution2d, armnn::Convolution3d, armnn::DepthToSpace, armnn::DepthwiseConvolution2d, armnn::Dequantize, armnn::DetectionPostProcess, armnn::Division, armnn::ElementwiseUnary, armnn::Fill, armnn::Floor, armnn::FullyConnected, armnn::Gather, armnn::GatherNd, IConnectableLayer::GetName(), IConnectableLayer::GetType(), armnn::IgnoreUnused(), armnn::Input, armnn::InstanceNormalization, armnn::L2Normalization, armnn::LogicalBinary, armnn::LogSoftmax, armnn::Lstm, armnn::Maximum, armnn::Mean, armnn::Merge, armnn::Minimum, armnn::Multiplication, armnn::Normalization, armnn::Output, armnn::Pad, armnn::Permute, armnn::Pooling2d, armnn::Pooling3d, armnn::Prelu, armnn::QLstm, armnn::Quantize, armnn::QuantizedLstm, armnn::Rank, armnn::Reduce, armnn::Reshape, armnn::Resize, armnn::Shape, armnn::Slice, armnn::Softmax, armnn::SpaceToBatchNd, armnn::SpaceToDepth, armnn::Splitter, armnn::Stack, armnn::StandIn, armnn::StridedSlice, armnn::Subtraction, armnn::Switch, armnn::Transpose, armnn::TransposeConvolution2d, and armnn::UnidirectionalSequenceLstm.

1950 {
1951  IgnoreUnused(constants);
1952 
1953  switch (layer->GetType())
1954  {
1956  {
1957  const armnn::ActivationDescriptor& layerDescriptor =
1958  static_cast<const armnn::ActivationDescriptor&>(descriptor);
1959  SerializeActivationLayer(layer, layerDescriptor, name);
1960  break;
1961  }
1963  {
1964  SerializeAdditionLayer(layer, name);
1965  break;
1966  }
1968  {
1969  const armnn::ArgMinMaxDescriptor& layerDescriptor =
1970  static_cast<const armnn::ArgMinMaxDescriptor&>(descriptor);
1971  SerializeArgMinMaxLayer(layer, layerDescriptor, name);
1972  break;
1973  }
1975  {
1976  const armnn::BatchNormalizationDescriptor& layerDescriptor =
1977  static_cast<const armnn::BatchNormalizationDescriptor&>(descriptor);
1978  SerializeBatchNormalizationLayer(layer,
1979  layerDescriptor,
1980  constants,
1981  name);
1982  break;
1983  }
1985  {
1986  const armnn::BatchToSpaceNdDescriptor& layerDescriptor =
1987  static_cast<const armnn::BatchToSpaceNdDescriptor&>(descriptor);
1988  SerializeBatchToSpaceNdLayer(layer,
1989  layerDescriptor,
1990  name);
1991  break;
1992  }
1993  case armnn::LayerType::Cast :
1994  {
1995  SerializeCastLayer(layer, name);
1996  break;
1997  }
1999  {
2000  const armnn::ChannelShuffleDescriptor& layerDescriptor =
2001  static_cast<const armnn::ChannelShuffleDescriptor&>(descriptor);
2002  SerializeChannelShuffleLayer(layer,
2003  layerDescriptor,
2004  name);
2005  break;
2006  }
2008  {
2009  const armnn::ComparisonDescriptor& layerDescriptor =
2010  static_cast<const armnn::ComparisonDescriptor&>(descriptor);
2011  SerializeComparisonLayer(layer,
2012  layerDescriptor,
2013  name);
2014  break;
2015  }
2017  {
2018  const armnn::ConcatDescriptor& layerDescriptor =
2019  static_cast<const armnn::ConcatDescriptor&>(descriptor);
2020  SerializeConcatLayer(layer,
2021  layerDescriptor,
2022  name);
2023  break;
2024  }
2026  {
2027  SerializeConstantLayer(layer,
2028  constants,
2029  name);
2030  break;
2031  }
2033  {
2034  const armnn::Convolution2dDescriptor& layerDescriptor =
2035  static_cast<const armnn::Convolution2dDescriptor&>(descriptor);
2036  SerializeConvolution2dLayer(layer,
2037  layerDescriptor,
2038  name);
2039  break;
2040  }
2042  {
2043  const armnn::Convolution3dDescriptor& layerDescriptor =
2044  static_cast<const armnn::Convolution3dDescriptor&>(descriptor);
2045  SerializeConvolution3dLayer(layer,
2046  layerDescriptor,
2047  name);
2048  break;
2049  }
2051  {
2052  const armnn::DepthToSpaceDescriptor& layerDescriptor =
2053  static_cast<const armnn::DepthToSpaceDescriptor&>(descriptor);
2054  SerializeDepthToSpaceLayer(layer,
2055  layerDescriptor,
2056  name);
2057  break;
2058  }
2060  {
2061  const armnn::DepthwiseConvolution2dDescriptor& layerDescriptor =
2062  static_cast<const armnn::DepthwiseConvolution2dDescriptor&>(descriptor);
2063  SerializeDepthwiseConvolution2dLayer(layer,
2064  layerDescriptor,
2065  name);
2066  break;
2067  }
2069  {
2070  SerializeDequantizeLayer(layer,
2071  name);
2072  break;
2073  }
2075  {
2076  const armnn::DetectionPostProcessDescriptor& layerDescriptor =
2077  static_cast<const armnn::DetectionPostProcessDescriptor&>(descriptor);
2078  SerializeDetectionPostProcessLayer(layer, layerDescriptor, constants, name);
2079  break;
2080  }
2082  {
2083  SerializeDivisionLayer(layer, name);
2084  break;
2085  }
2087  {
2088  const armnn::ElementwiseUnaryDescriptor& layerDescriptor =
2089  static_cast<const armnn::ElementwiseUnaryDescriptor&>(descriptor);
2090  SerializeElementwiseUnaryLayer(layer, layerDescriptor, name);
2091  break;
2092  }
2093  case armnn::LayerType::Fill :
2094  {
2095  const armnn::FillDescriptor& layerDescriptor =
2096  static_cast<const armnn::FillDescriptor&>(descriptor);
2097  SerializeFillLayer(layer, layerDescriptor, name);
2098  break;
2099  }
2101  {
2102  SerializeFloorLayer(layer, name);
2103  break;
2104  }
2106  {
2107  const armnn::FullyConnectedDescriptor& layerDescriptor =
2108  static_cast<const armnn::FullyConnectedDescriptor&>(descriptor);
2109  SerializeFullyConnectedLayer(layer, layerDescriptor, name);
2110  break;
2111  }
2113  {
2114  const armnn::GatherDescriptor& layerDescriptor =
2115  static_cast<const armnn::GatherDescriptor&>(descriptor);
2116  SerializeGatherLayer(layer, layerDescriptor, name);
2117  break;
2118  }
2120  {
2121  SerializeGatherNdLayer(layer, name);
2122  break;
2123  }
2125  {
2126  SerializeInputLayer(layer, id, name);
2127  break;
2128  }
2130  {
2131  const armnn::InstanceNormalizationDescriptor& layerDescriptor =
2132  static_cast<const armnn::InstanceNormalizationDescriptor&>(descriptor);
2133  SerializeInstanceNormalizationLayer(layer, layerDescriptor, name);
2134  break;
2135  }
2137  {
2138  const armnn::L2NormalizationDescriptor& layerDescriptor =
2139  static_cast<const armnn::L2NormalizationDescriptor&>(descriptor);
2140  SerializeL2NormalizationLayer(layer, layerDescriptor, name);
2141  break;
2142  }
2144  {
2145  const armnn::LogicalBinaryDescriptor& layerDescriptor =
2146  static_cast<const armnn::LogicalBinaryDescriptor&>(descriptor);
2147  SerializeLogicalBinaryLayer(layer, layerDescriptor, name);
2148  break;
2149  }
2151  {
2152  const armnn::LogSoftmaxDescriptor& layerDescriptor =
2153  static_cast<const armnn::LogSoftmaxDescriptor&>(descriptor);
2154  SerializeLogSoftmaxLayer(layer, layerDescriptor, name);
2155  break;
2156  }
2157  case armnn::LayerType::Lstm :
2158  {
2159  const armnn::LstmDescriptor& layerDescriptor =
2160  static_cast<const armnn::LstmDescriptor&>(descriptor);
2161  SerializeLstmLayer(layer, layerDescriptor, constants, name);
2162  break;
2163  }
2165  {
2166  const armnn::QLstmDescriptor& layerDescriptor =
2167  static_cast<const armnn::QLstmDescriptor&>(descriptor);
2168  SerializeQLstmLayer(layer, layerDescriptor, constants, name);
2169  break;
2170  }
2172  {
2173  SerializeMaximumLayer(layer, name);
2174  break;
2175  }
2176  case armnn::LayerType::Mean :
2177  {
2178  const armnn::MeanDescriptor& layerDescriptor =
2179  static_cast<const armnn::MeanDescriptor&>(descriptor);
2180  SerializeMeanLayer(layer, layerDescriptor, name);
2181  break;
2182  }
2184  {
2185  SerializeMergeLayer(layer, name);
2186  break;
2187  }
2189  {
2190  SerializeMinimumLayer(layer, name);
2191  break;
2192  }
2194  {
2195  SerializeMultiplicationLayer(layer, name);
2196  break;
2197  }
2199  {
2200  const armnn::NormalizationDescriptor& layerDescriptor =
2201  static_cast<const armnn::NormalizationDescriptor&>(descriptor);
2202  SerializeNormalizationLayer(layer, layerDescriptor, name);
2203  break;
2204  }
2206  {
2207  SerializeOutputLayer(layer, id, name);
2208  break;
2209  }
2210  case armnn::LayerType::Pad :
2211  {
2212  const armnn::PadDescriptor& layerDescriptor =
2213  static_cast<const armnn::PadDescriptor&>(descriptor);
2214  SerializePadLayer(layer, layerDescriptor, name);
2215  break;
2216  }
2218  {
2219  const armnn::PermuteDescriptor& layerDescriptor =
2220  static_cast<const armnn::PermuteDescriptor&>(descriptor);
2221  SerializePermuteLayer(layer, layerDescriptor, name);
2222  break;
2223  }
2225  {
2226  const armnn::Pooling2dDescriptor& layerDescriptor =
2227  static_cast<const armnn::Pooling2dDescriptor&>(descriptor);
2228  SerializePooling2dLayer(layer, layerDescriptor, name);
2229  break;
2230  }
2232  {
2233  const armnn::Pooling3dDescriptor& layerDescriptor =
2234  static_cast<const armnn::Pooling3dDescriptor&>(descriptor);
2235  SerializePooling3dLayer(layer, layerDescriptor, name);
2236  break;
2237  }
2239  {
2240  SerializePreluLayer(layer, name);
2241  break;
2242  }
2244  {
2245  SerializeQuantizeLayer(layer, name);
2246  break;
2247  }
2249  SerializeQuantizedLstmLayer(layer, constants, name);
2250  break;
2252  {
2253  const armnn::ReshapeDescriptor &layerDescriptor =
2254  static_cast<const armnn::ReshapeDescriptor &>(descriptor);
2255  SerializeReshapeLayer(layer, layerDescriptor, name);
2256  break;
2257  }
2259  {
2260  SerializeRankLayer(layer, name);
2261  break;
2262  }
2264  {
2265  const armnn::ReduceDescriptor& layerDescriptor =
2266  static_cast<const armnn::ReduceDescriptor&>(descriptor);
2267  SerializeReduceLayer(layer, layerDescriptor, name);
2268  break;
2269  }
2271  {
2272  const armnn::ResizeDescriptor& layerDescriptor =
2273  static_cast<const armnn::ResizeDescriptor&>(descriptor);
2274  SerializeResizeLayer(layer, layerDescriptor, name);
2275  break;
2276  }
2278  {
2279  SerializeShapeLayer(layer, name);
2280  break;
2281  }
2283  {
2284  const armnn::SliceDescriptor& layerDescriptor =
2285  static_cast<const armnn::SliceDescriptor&>(descriptor);
2286  SerializeSliceLayer(layer, layerDescriptor, name);
2287  break;
2288  }
2290  {
2291  const armnn::SoftmaxDescriptor& layerDescriptor =
2292  static_cast<const armnn::SoftmaxDescriptor&>(descriptor);
2293  SerializeSoftmaxLayer(layer, layerDescriptor, name);
2294  break;
2295  }
2297  {
2298  const armnn::SpaceToBatchNdDescriptor& layerDescriptor =
2299  static_cast<const armnn::SpaceToBatchNdDescriptor&>(descriptor);
2300  SerializeSpaceToBatchNdLayer(layer, layerDescriptor, name);
2301  break;
2302  }
2304  {
2305  const armnn::SpaceToDepthDescriptor& layerDescriptor =
2306  static_cast<const armnn::SpaceToDepthDescriptor&>(descriptor);
2307  SerializeSpaceToDepthLayer(layer, layerDescriptor, name);
2308  break;
2309  }
2311  {
2312  const armnn::SplitterDescriptor& layerDescriptor =
2313  static_cast<const armnn::SplitterDescriptor&>(descriptor);
2314  SerializeSplitterLayer(layer, layerDescriptor, name);
2315  break;
2316  }
2318  {
2319  const armnn::StackDescriptor& layerDescriptor =
2320  static_cast<const armnn::StackDescriptor&>(descriptor);
2321  SerializeStackLayer(layer, layerDescriptor, name);
2322  break;
2323  }
2325  {
2326  const armnn::StandInDescriptor& layerDescriptor =
2327  static_cast<const armnn::StandInDescriptor&>(descriptor);
2328  SerializeStandInLayer(layer, layerDescriptor, name);
2329  break;
2330  }
2332  {
2333  const armnn::StridedSliceDescriptor& layerDescriptor =
2334  static_cast<const armnn::StridedSliceDescriptor&>(descriptor);
2335  SerializeStridedSliceLayer(layer, layerDescriptor, name);
2336  break;
2337  }
2339  {
2340  SerializeSubtractionLayer(layer, name);
2341  break;
2342  }
2344  {
2345  SerializeSwitchLayer(layer, name);
2346  break;
2347  }
2349  {
2350  const armnn::TransposeDescriptor& layerDescriptor =
2351  static_cast<const armnn::TransposeDescriptor&>(descriptor);
2352  SerializeTransposeLayer(layer, layerDescriptor, name);
2353  break;
2354  }
2356  {
2357  const armnn::TransposeConvolution2dDescriptor& layerDescriptor =
2358  static_cast<const armnn::TransposeConvolution2dDescriptor&>(descriptor);
2359  SerializeTransposeConvolution2dLayer(layer, layerDescriptor, constants, name);
2360  break;
2361  }
2363  {
2364  const armnn::UnidirectionalSequenceLstmDescriptor& layerDescriptor =
2365  static_cast<const armnn::UnidirectionalSequenceLstmDescriptor&>(descriptor);
2366  SerializeUnidirectionalSequenceLstmLayer(layer, layerDescriptor, constants, name);
2367  break;
2368  }
2369  default:
2370  {
2372  fmt::format("A layer of unknown type was given to the serializer. Layer name: {}; Layer Id: {}",
2373  layer->GetName(),
2374  id));
2375  }
2376  }
2377 }
A ViewsDescriptor for the SplitterLayer.
A TransposeConvolution2dDescriptor for the TransposeConvolution2dLayer.
A ReshapeDescriptor for the ReshapeLayer.
A ComparisonDescriptor for the ComparisonLayer.
Definition: Descriptors.hpp:89
A Convolution2dDescriptor for the Convolution2dLayer.
A LogicalBinaryDescriptor for the LogicalBinaryLayer.
void IgnoreUnused(Ts &&...)
A SpaceToDepthDescriptor for the SpaceToDepthLayer.
A BatchToSpaceNdDescriptor for the BatchToSpaceNdLayer.
A ResizeBilinearDescriptor for the ResizeBilinearLayer.
A StackDescriptor for the StackLayer.
A PadDescriptor for the PadLayer.
An LstmDescriptor for the LstmLayer.
A L2NormalizationDescriptor for the L2NormalizationLayer.
An ArgMinMaxDescriptor for ArgMinMaxLayer.
Definition: Descriptors.hpp:67
An OriginsDescriptor for the ConcatLayer.
A ReduceDescriptor for the REDUCE operators.
A FullyConnectedDescriptor for the FullyConnectedLayer.
A GatherDescriptor for the GatherLayer.
A StandInDescriptor for the StandIn layer.
A QLstmDescriptor for the QLstmLayer.
An ActivationDescriptor for the ActivationLayer.
Definition: Descriptors.hpp:36
A SliceDescriptor for the SliceLayer.
A Convolution3dDescriptor for the Convolution3dLayer.
virtual LayerType GetType() const =0
Returns the armnn::LayerType of this layer.
A Pooling3dDescriptor for the Pooling3dLayer.
A SpaceToBatchNdDescriptor for the SpaceToBatchNdLayer.
A ElementwiseUnaryDescriptor for the ElementwiseUnaryLayer.
A MeanDescriptor for the MeanLayer.
A TransposeDescriptor for the TransposeLayer.
A StridedSliceDescriptor for the StridedSliceLayer.
virtual const char * GetName() const =0
Returns the name of the layer.
A Pooling2dDescriptor for the Pooling2dLayer.
A NormalizationDescriptor for the NormalizationLayer.
An InstanceNormalizationDescriptor for InstanceNormalizationLayer.
A ChannelShuffleDescriptor for the ChannelShuffle operator.
A SoftmaxDescriptor for the SoftmaxLayer.
A DepthwiseConvolution2dDescriptor for the DepthwiseConvolution2dLayer.
A FillDescriptor for the FillLayer.
A BatchNormalizationDescriptor for the BatchNormalizationLayer.
A PermuteDescriptor for the PermuteLayer.

◆ GetFlatBufferBuilder()

flatbuffers::FlatBufferBuilder& GetFlatBufferBuilder ( )
inline

Definition at line 36 of file Serializer.hpp.

37  {
38  return m_flatBufferBuilder;
39  }

◆ GetInputIds()

std::vector<int>& GetInputIds ( )
inline

Definition at line 41 of file Serializer.hpp.

42  {
43  return m_inputIds;
44  }

◆ GetOutputIds()

std::vector<int>& GetOutputIds ( )
inline

Definition at line 46 of file Serializer.hpp.

47  {
48  return m_outputIds;
49  }

◆ GetSerializedLayers()

std::vector<flatbuffers::Offset<armnnSerializer::AnyLayer> >& GetSerializedLayers ( )
inline

Definition at line 51 of file Serializer.hpp.

References SerializerStrategy::GetVersionTable().

52  {
53  return m_serializedLayers;
54  }

◆ GetVersionTable()

flatbuffers::Offset< armnnSerializer::FeatureCompatibilityVersions > GetVersionTable ( )

Definition at line 1892 of file Serializer.cpp.

References IOutputSlot::CalculateIndexOnOwner(), armnnSerializer::CreateFeatureCompatibilityVersions(), armnnSerializer::CreateInputSlot(), armnnSerializer::CreateOutputSlot(), armnnSerializer::CreateTensorInfo(), IInputSlot::GetConnection(), IConnectableLayer::GetInputSlot(), IConnectableLayer::GetNumInputSlots(), IConnectableLayer::GetNumOutputSlots(), IConnectableLayer::GetOutputSlot(), IOutputSlot::GetOwningLayerGuid(), and IOutputSlot::GetTensorInfo().

Referenced by SerializerStrategy::GetSerializedLayers().

1893 {
1894  flatbuffers::Offset<armnnSerializer::FeatureCompatibilityVersions> versionsTable =
1896  m_flatBufferBuilder,
1897  1, // Binding ids scheme version
1898  1, // Weights layout scheme version
1899  1 // Constant tensors as inputs version
1900  );
1901  return versionsTable;
1902 }
flatbuffers::Offset< FeatureCompatibilityVersions > CreateFeatureCompatibilityVersions(flatbuffers::FlatBufferBuilder &_fbb, uint32_t bindingIdsScheme=0, uint32_t weightsLayoutScheme=0, uint32_t constantTensorsAsInputs=0)

The documentation for this class was generated from the following files: