ArmNN
 22.11
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 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 22 of file Serializer.hpp.

Constructor & Destructor Documentation

◆ SerializerStrategy()

SerializerStrategy ( )
inline

Definition at line 31 of file Serializer.hpp.

31 : m_layerId(0) {}

◆ ~SerializerStrategy()

~SerializerStrategy ( )
inline

Definition at line 32 of file Serializer.hpp.

32 {}

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 1972 of file Serializer.cpp.

References armnn::Activation, armnn::Addition, armnn::ArgMinMax, armnn::BatchMatMul, 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.

1977 {
1978  IgnoreUnused(constants);
1979 
1980  switch (layer->GetType())
1981  {
1983  {
1984  const armnn::ActivationDescriptor& layerDescriptor =
1985  static_cast<const armnn::ActivationDescriptor&>(descriptor);
1986  SerializeActivationLayer(layer, layerDescriptor, name);
1987  break;
1988  }
1990  {
1991  SerializeAdditionLayer(layer, name);
1992  break;
1993  }
1995  {
1996  const armnn::ArgMinMaxDescriptor& layerDescriptor =
1997  static_cast<const armnn::ArgMinMaxDescriptor&>(descriptor);
1998  SerializeArgMinMaxLayer(layer, layerDescriptor, name);
1999  break;
2000  }
2002  {
2003  const armnn::BatchMatMulDescriptor& layerDescriptor =
2004  static_cast<const armnn::BatchMatMulDescriptor&>(descriptor);
2005  SerializeBatchMatMulLayer(layer,
2006  layerDescriptor,
2007  name);
2008  break;
2009  }
2011  {
2012  const armnn::BatchNormalizationDescriptor& layerDescriptor =
2013  static_cast<const armnn::BatchNormalizationDescriptor&>(descriptor);
2014  SerializeBatchNormalizationLayer(layer,
2015  layerDescriptor,
2016  constants,
2017  name);
2018  break;
2019  }
2021  {
2022  const armnn::BatchToSpaceNdDescriptor& layerDescriptor =
2023  static_cast<const armnn::BatchToSpaceNdDescriptor&>(descriptor);
2024  SerializeBatchToSpaceNdLayer(layer,
2025  layerDescriptor,
2026  name);
2027  break;
2028  }
2029  case armnn::LayerType::Cast :
2030  {
2031  SerializeCastLayer(layer, name);
2032  break;
2033  }
2035  {
2036  const armnn::ChannelShuffleDescriptor& layerDescriptor =
2037  static_cast<const armnn::ChannelShuffleDescriptor&>(descriptor);
2038  SerializeChannelShuffleLayer(layer,
2039  layerDescriptor,
2040  name);
2041  break;
2042  }
2044  {
2045  const armnn::ComparisonDescriptor& layerDescriptor =
2046  static_cast<const armnn::ComparisonDescriptor&>(descriptor);
2047  SerializeComparisonLayer(layer,
2048  layerDescriptor,
2049  name);
2050  break;
2051  }
2053  {
2054  const armnn::ConcatDescriptor& layerDescriptor =
2055  static_cast<const armnn::ConcatDescriptor&>(descriptor);
2056  SerializeConcatLayer(layer,
2057  layerDescriptor,
2058  name);
2059  break;
2060  }
2062  {
2063  SerializeConstantLayer(layer,
2064  constants,
2065  name);
2066  break;
2067  }
2069  {
2070  const armnn::Convolution2dDescriptor& layerDescriptor =
2071  static_cast<const armnn::Convolution2dDescriptor&>(descriptor);
2072  SerializeConvolution2dLayer(layer,
2073  layerDescriptor,
2074  name);
2075  break;
2076  }
2078  {
2079  const armnn::Convolution3dDescriptor& layerDescriptor =
2080  static_cast<const armnn::Convolution3dDescriptor&>(descriptor);
2081  SerializeConvolution3dLayer(layer,
2082  layerDescriptor,
2083  name);
2084  break;
2085  }
2087  {
2088  const armnn::DepthToSpaceDescriptor& layerDescriptor =
2089  static_cast<const armnn::DepthToSpaceDescriptor&>(descriptor);
2090  SerializeDepthToSpaceLayer(layer,
2091  layerDescriptor,
2092  name);
2093  break;
2094  }
2096  {
2097  const armnn::DepthwiseConvolution2dDescriptor& layerDescriptor =
2098  static_cast<const armnn::DepthwiseConvolution2dDescriptor&>(descriptor);
2099  SerializeDepthwiseConvolution2dLayer(layer,
2100  layerDescriptor,
2101  name);
2102  break;
2103  }
2105  {
2106  SerializeDequantizeLayer(layer,
2107  name);
2108  break;
2109  }
2111  {
2112  const armnn::DetectionPostProcessDescriptor& layerDescriptor =
2113  static_cast<const armnn::DetectionPostProcessDescriptor&>(descriptor);
2114  SerializeDetectionPostProcessLayer(layer, layerDescriptor, constants, name);
2115  break;
2116  }
2118  {
2119  SerializeDivisionLayer(layer, name);
2120  break;
2121  }
2123  {
2124  const armnn::ElementwiseUnaryDescriptor& layerDescriptor =
2125  static_cast<const armnn::ElementwiseUnaryDescriptor&>(descriptor);
2126  SerializeElementwiseUnaryLayer(layer, layerDescriptor, name);
2127  break;
2128  }
2129  case armnn::LayerType::Fill :
2130  {
2131  const armnn::FillDescriptor& layerDescriptor =
2132  static_cast<const armnn::FillDescriptor&>(descriptor);
2133  SerializeFillLayer(layer, layerDescriptor, name);
2134  break;
2135  }
2137  {
2138  SerializeFloorLayer(layer, name);
2139  break;
2140  }
2142  {
2143  const armnn::FullyConnectedDescriptor& layerDescriptor =
2144  static_cast<const armnn::FullyConnectedDescriptor&>(descriptor);
2145  SerializeFullyConnectedLayer(layer, layerDescriptor, name);
2146  break;
2147  }
2149  {
2150  const armnn::GatherDescriptor& layerDescriptor =
2151  static_cast<const armnn::GatherDescriptor&>(descriptor);
2152  SerializeGatherLayer(layer, layerDescriptor, name);
2153  break;
2154  }
2156  {
2157  SerializeGatherNdLayer(layer, name);
2158  break;
2159  }
2161  {
2162  SerializeInputLayer(layer, id, name);
2163  break;
2164  }
2166  {
2167  const armnn::InstanceNormalizationDescriptor& layerDescriptor =
2168  static_cast<const armnn::InstanceNormalizationDescriptor&>(descriptor);
2169  SerializeInstanceNormalizationLayer(layer, layerDescriptor, name);
2170  break;
2171  }
2173  {
2174  const armnn::L2NormalizationDescriptor& layerDescriptor =
2175  static_cast<const armnn::L2NormalizationDescriptor&>(descriptor);
2176  SerializeL2NormalizationLayer(layer, layerDescriptor, name);
2177  break;
2178  }
2180  {
2181  const armnn::LogicalBinaryDescriptor& layerDescriptor =
2182  static_cast<const armnn::LogicalBinaryDescriptor&>(descriptor);
2183  SerializeLogicalBinaryLayer(layer, layerDescriptor, name);
2184  break;
2185  }
2187  {
2188  const armnn::LogSoftmaxDescriptor& layerDescriptor =
2189  static_cast<const armnn::LogSoftmaxDescriptor&>(descriptor);
2190  SerializeLogSoftmaxLayer(layer, layerDescriptor, name);
2191  break;
2192  }
2193  case armnn::LayerType::Lstm :
2194  {
2195  const armnn::LstmDescriptor& layerDescriptor =
2196  static_cast<const armnn::LstmDescriptor&>(descriptor);
2197  SerializeLstmLayer(layer, layerDescriptor, constants, name);
2198  break;
2199  }
2201  {
2202  const armnn::QLstmDescriptor& layerDescriptor =
2203  static_cast<const armnn::QLstmDescriptor&>(descriptor);
2204  SerializeQLstmLayer(layer, layerDescriptor, constants, name);
2205  break;
2206  }
2208  {
2209  SerializeMaximumLayer(layer, name);
2210  break;
2211  }
2212  case armnn::LayerType::Mean :
2213  {
2214  const armnn::MeanDescriptor& layerDescriptor =
2215  static_cast<const armnn::MeanDescriptor&>(descriptor);
2216  SerializeMeanLayer(layer, layerDescriptor, name);
2217  break;
2218  }
2220  {
2221  SerializeMergeLayer(layer, name);
2222  break;
2223  }
2225  {
2226  SerializeMinimumLayer(layer, name);
2227  break;
2228  }
2230  {
2231  SerializeMultiplicationLayer(layer, name);
2232  break;
2233  }
2235  {
2236  const armnn::NormalizationDescriptor& layerDescriptor =
2237  static_cast<const armnn::NormalizationDescriptor&>(descriptor);
2238  SerializeNormalizationLayer(layer, layerDescriptor, name);
2239  break;
2240  }
2242  {
2243  SerializeOutputLayer(layer, id, name);
2244  break;
2245  }
2246  case armnn::LayerType::Pad :
2247  {
2248  const armnn::PadDescriptor& layerDescriptor =
2249  static_cast<const armnn::PadDescriptor&>(descriptor);
2250  SerializePadLayer(layer, layerDescriptor, name);
2251  break;
2252  }
2254  {
2255  const armnn::PermuteDescriptor& layerDescriptor =
2256  static_cast<const armnn::PermuteDescriptor&>(descriptor);
2257  SerializePermuteLayer(layer, layerDescriptor, name);
2258  break;
2259  }
2261  {
2262  const armnn::Pooling2dDescriptor& layerDescriptor =
2263  static_cast<const armnn::Pooling2dDescriptor&>(descriptor);
2264  SerializePooling2dLayer(layer, layerDescriptor, name);
2265  break;
2266  }
2268  {
2269  const armnn::Pooling3dDescriptor& layerDescriptor =
2270  static_cast<const armnn::Pooling3dDescriptor&>(descriptor);
2271  SerializePooling3dLayer(layer, layerDescriptor, name);
2272  break;
2273  }
2275  {
2276  SerializePreluLayer(layer, name);
2277  break;
2278  }
2280  {
2281  SerializeQuantizeLayer(layer, name);
2282  break;
2283  }
2285  SerializeQuantizedLstmLayer(layer, constants, name);
2286  break;
2288  {
2289  const armnn::ReshapeDescriptor &layerDescriptor =
2290  static_cast<const armnn::ReshapeDescriptor &>(descriptor);
2291  SerializeReshapeLayer(layer, layerDescriptor, name);
2292  break;
2293  }
2295  {
2296  SerializeRankLayer(layer, name);
2297  break;
2298  }
2300  {
2301  const armnn::ReduceDescriptor& layerDescriptor =
2302  static_cast<const armnn::ReduceDescriptor&>(descriptor);
2303  SerializeReduceLayer(layer, layerDescriptor, name);
2304  break;
2305  }
2307  {
2308  const armnn::ResizeDescriptor& layerDescriptor =
2309  static_cast<const armnn::ResizeDescriptor&>(descriptor);
2310  SerializeResizeLayer(layer, layerDescriptor, name);
2311  break;
2312  }
2314  {
2315  SerializeShapeLayer(layer, name);
2316  break;
2317  }
2319  {
2320  const armnn::SliceDescriptor& layerDescriptor =
2321  static_cast<const armnn::SliceDescriptor&>(descriptor);
2322  SerializeSliceLayer(layer, layerDescriptor, name);
2323  break;
2324  }
2326  {
2327  const armnn::SoftmaxDescriptor& layerDescriptor =
2328  static_cast<const armnn::SoftmaxDescriptor&>(descriptor);
2329  SerializeSoftmaxLayer(layer, layerDescriptor, name);
2330  break;
2331  }
2333  {
2334  const armnn::SpaceToBatchNdDescriptor& layerDescriptor =
2335  static_cast<const armnn::SpaceToBatchNdDescriptor&>(descriptor);
2336  SerializeSpaceToBatchNdLayer(layer, layerDescriptor, name);
2337  break;
2338  }
2340  {
2341  const armnn::SpaceToDepthDescriptor& layerDescriptor =
2342  static_cast<const armnn::SpaceToDepthDescriptor&>(descriptor);
2343  SerializeSpaceToDepthLayer(layer, layerDescriptor, name);
2344  break;
2345  }
2347  {
2348  const armnn::SplitterDescriptor& layerDescriptor =
2349  static_cast<const armnn::SplitterDescriptor&>(descriptor);
2350  SerializeSplitterLayer(layer, layerDescriptor, name);
2351  break;
2352  }
2354  {
2355  const armnn::StackDescriptor& layerDescriptor =
2356  static_cast<const armnn::StackDescriptor&>(descriptor);
2357  SerializeStackLayer(layer, layerDescriptor, name);
2358  break;
2359  }
2361  {
2362  const armnn::StandInDescriptor& layerDescriptor =
2363  static_cast<const armnn::StandInDescriptor&>(descriptor);
2364  SerializeStandInLayer(layer, layerDescriptor, name);
2365  break;
2366  }
2368  {
2369  const armnn::StridedSliceDescriptor& layerDescriptor =
2370  static_cast<const armnn::StridedSliceDescriptor&>(descriptor);
2371  SerializeStridedSliceLayer(layer, layerDescriptor, name);
2372  break;
2373  }
2375  {
2376  SerializeSubtractionLayer(layer, name);
2377  break;
2378  }
2380  {
2381  SerializeSwitchLayer(layer, name);
2382  break;
2383  }
2385  {
2386  const armnn::TransposeDescriptor& layerDescriptor =
2387  static_cast<const armnn::TransposeDescriptor&>(descriptor);
2388  SerializeTransposeLayer(layer, layerDescriptor, name);
2389  break;
2390  }
2392  {
2393  const armnn::TransposeConvolution2dDescriptor& layerDescriptor =
2394  static_cast<const armnn::TransposeConvolution2dDescriptor&>(descriptor);
2395  SerializeTransposeConvolution2dLayer(layer, layerDescriptor, constants, name);
2396  break;
2397  }
2399  {
2400  const armnn::UnidirectionalSequenceLstmDescriptor& layerDescriptor =
2401  static_cast<const armnn::UnidirectionalSequenceLstmDescriptor&>(descriptor);
2402  SerializeUnidirectionalSequenceLstmLayer(layer, layerDescriptor, constants, name);
2403  break;
2404  }
2405  default:
2406  {
2408  fmt::format("A layer of unknown type was given to the serializer. Layer name: {}; Layer Id: {}",
2409  layer->GetName(),
2410  id));
2411  }
2412  }
2413 }
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 ResizeDescriptor for the ResizeLayer.
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 BatchMatMulDescriptor for the BatchMatMul operator.
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 34 of file Serializer.hpp.

35  {
36  return m_flatBufferBuilder;
37  }

◆ GetInputIds()

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

Definition at line 39 of file Serializer.hpp.

40  {
41  return m_inputIds;
42  }

◆ GetOutputIds()

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

Definition at line 44 of file Serializer.hpp.

45  {
46  return m_outputIds;
47  }

◆ GetSerializedLayers()

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

Definition at line 49 of file Serializer.hpp.

References SerializerStrategy::GetVersionTable().

50  {
51  return m_serializedLayers;
52  }

◆ GetVersionTable()

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

Definition at line 1919 of file Serializer.cpp.

References IOutputSlot::CalculateIndexOnOwner(), IInputSlot::GetConnection(), IConnectableLayer::GetInputSlot(), IConnectableLayer::GetNumInputSlots(), IConnectableLayer::GetNumOutputSlots(), IConnectableLayer::GetOutputSlot(), IOutputSlot::GetOwningLayerGuid(), and IOutputSlot::GetTensorInfo().

Referenced by SerializerStrategy::GetSerializedLayers().

1920 {
1921  flatbuffers::Offset<armnnSerializer::FeatureCompatibilityVersions> versionsTable =
1922  serializer::CreateFeatureCompatibilityVersions(
1923  m_flatBufferBuilder,
1924  1, // Binding ids scheme version
1925  1, // Weights layout scheme version
1926  1 // Constant tensors as inputs version
1927  );
1928  return versionsTable;
1929 }

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