ArmNN
 22.02
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 1961 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, 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.

1966 {
1967  IgnoreUnused(constants);
1968 
1969  switch (layer->GetType())
1970  {
1972  {
1973  const armnn::ActivationDescriptor& layerDescriptor =
1974  static_cast<const armnn::ActivationDescriptor&>(descriptor);
1975  SerializeActivationLayer(layer, layerDescriptor, name);
1976  break;
1977  }
1979  {
1980  SerializeAdditionLayer(layer, name);
1981  break;
1982  }
1984  {
1985  const armnn::ArgMinMaxDescriptor& layerDescriptor =
1986  static_cast<const armnn::ArgMinMaxDescriptor&>(descriptor);
1987  SerializeArgMinMaxLayer(layer, layerDescriptor, name);
1988  break;
1989  }
1991  {
1992  const armnn::BatchNormalizationDescriptor& layerDescriptor =
1993  static_cast<const armnn::BatchNormalizationDescriptor&>(descriptor);
1994  SerializeBatchNormalizationLayer(layer,
1995  layerDescriptor,
1996  constants,
1997  name);
1998  break;
1999  }
2001  {
2002  const armnn::BatchToSpaceNdDescriptor& layerDescriptor =
2003  static_cast<const armnn::BatchToSpaceNdDescriptor&>(descriptor);
2004  SerializeBatchToSpaceNdLayer(layer,
2005  layerDescriptor,
2006  name);
2007  break;
2008  }
2009  case armnn::LayerType::Cast :
2010  {
2011  SerializeCastLayer(layer, name);
2012  break;
2013  }
2015  {
2016  const armnn::ChannelShuffleDescriptor& layerDescriptor =
2017  static_cast<const armnn::ChannelShuffleDescriptor&>(descriptor);
2018  SerializeChannelShuffleLayer(layer,
2019  layerDescriptor,
2020  name);
2021  break;
2022  }
2024  {
2025  const armnn::ComparisonDescriptor& layerDescriptor =
2026  static_cast<const armnn::ComparisonDescriptor&>(descriptor);
2027  SerializeComparisonLayer(layer,
2028  layerDescriptor,
2029  name);
2030  break;
2031  }
2033  {
2034  const armnn::ConcatDescriptor& layerDescriptor =
2035  static_cast<const armnn::ConcatDescriptor&>(descriptor);
2036  SerializeConcatLayer(layer,
2037  layerDescriptor,
2038  name);
2039  break;
2040  }
2042  {
2043  SerializeConstantLayer(layer,
2044  constants,
2045  name);
2046  break;
2047  }
2049  {
2050  const armnn::Convolution2dDescriptor& layerDescriptor =
2051  static_cast<const armnn::Convolution2dDescriptor&>(descriptor);
2052  SerializeConvolution2dLayer(layer,
2053  layerDescriptor,
2054  constants,
2055  name);
2056  break;
2057  }
2059  {
2060  const armnn::Convolution3dDescriptor& layerDescriptor =
2061  static_cast<const armnn::Convolution3dDescriptor&>(descriptor);
2062  SerializeConvolution3dLayer(layer,
2063  layerDescriptor,
2064  name);
2065  break;
2066  }
2068  {
2069  const armnn::DepthToSpaceDescriptor& layerDescriptor =
2070  static_cast<const armnn::DepthToSpaceDescriptor&>(descriptor);
2071  SerializeDepthToSpaceLayer(layer,
2072  layerDescriptor,
2073  name);
2074  break;
2075  }
2077  {
2078  const armnn::DepthwiseConvolution2dDescriptor& layerDescriptor =
2079  static_cast<const armnn::DepthwiseConvolution2dDescriptor&>(descriptor);
2080  SerializeDepthwiseConvolution2dLayer(layer,
2081  layerDescriptor,
2082  constants,
2083  name);
2084  break;
2085  }
2087  {
2088  SerializeDequantizeLayer(layer,
2089  name);
2090  break;
2091  }
2093  {
2094  const armnn::DetectionPostProcessDescriptor& layerDescriptor =
2095  static_cast<const armnn::DetectionPostProcessDescriptor&>(descriptor);
2096  SerializeDetectionPostProcessLayer(layer, layerDescriptor, constants, name);
2097  break;
2098  }
2100  {
2101  SerializeDivisionLayer(layer, name);
2102  break;
2103  }
2105  {
2106  const armnn::ElementwiseUnaryDescriptor& layerDescriptor =
2107  static_cast<const armnn::ElementwiseUnaryDescriptor&>(descriptor);
2108  SerializeElementwiseUnaryLayer(layer, layerDescriptor, name);
2109  break;
2110  }
2111  case armnn::LayerType::Fill :
2112  {
2113  const armnn::FillDescriptor& layerDescriptor =
2114  static_cast<const armnn::FillDescriptor&>(descriptor);
2115  SerializeFillLayer(layer, layerDescriptor, name);
2116  break;
2117  }
2119  {
2120  SerializeFloorLayer(layer, name);
2121  break;
2122  }
2124  {
2125  const armnn::FullyConnectedDescriptor& layerDescriptor =
2126  static_cast<const armnn::FullyConnectedDescriptor&>(descriptor);
2127  SerializeFullyConnectedLayer(layer, layerDescriptor, name);
2128  break;
2129  }
2131  {
2132  const armnn::GatherDescriptor& layerDescriptor =
2133  static_cast<const armnn::GatherDescriptor&>(descriptor);
2134  SerializeGatherLayer(layer, layerDescriptor, name);
2135  break;
2136  }
2138  {
2139  SerializeInputLayer(layer, id, name);
2140  break;
2141  }
2143  {
2144  const armnn::InstanceNormalizationDescriptor& layerDescriptor =
2145  static_cast<const armnn::InstanceNormalizationDescriptor&>(descriptor);
2146  SerializeInstanceNormalizationLayer(layer, layerDescriptor, name);
2147  break;
2148  }
2150  {
2151  const armnn::L2NormalizationDescriptor& layerDescriptor =
2152  static_cast<const armnn::L2NormalizationDescriptor&>(descriptor);
2153  SerializeL2NormalizationLayer(layer, layerDescriptor, name);
2154  break;
2155  }
2157  {
2158  const armnn::LogicalBinaryDescriptor& layerDescriptor =
2159  static_cast<const armnn::LogicalBinaryDescriptor&>(descriptor);
2160  SerializeLogicalBinaryLayer(layer, layerDescriptor, name);
2161  break;
2162  }
2164  {
2165  const armnn::LogSoftmaxDescriptor& layerDescriptor =
2166  static_cast<const armnn::LogSoftmaxDescriptor&>(descriptor);
2167  SerializeLogSoftmaxLayer(layer, layerDescriptor, name);
2168  break;
2169  }
2170  case armnn::LayerType::Lstm :
2171  {
2172  const armnn::LstmDescriptor& layerDescriptor =
2173  static_cast<const armnn::LstmDescriptor&>(descriptor);
2174  SerializeLstmLayer(layer, layerDescriptor, constants, name);
2175  break;
2176  }
2178  {
2179  const armnn::QLstmDescriptor& layerDescriptor =
2180  static_cast<const armnn::QLstmDescriptor&>(descriptor);
2181  SerializeQLstmLayer(layer, layerDescriptor, constants, name);
2182  break;
2183  }
2185  {
2186  SerializeMaximumLayer(layer, name);
2187  break;
2188  }
2189  case armnn::LayerType::Mean :
2190  {
2191  const armnn::MeanDescriptor& layerDescriptor =
2192  static_cast<const armnn::MeanDescriptor&>(descriptor);
2193  SerializeMeanLayer(layer, layerDescriptor, name);
2194  break;
2195  }
2197  {
2198  SerializeMergeLayer(layer, name);
2199  break;
2200  }
2202  {
2203  SerializeMinimumLayer(layer, name);
2204  break;
2205  }
2207  {
2208  SerializeMultiplicationLayer(layer, name);
2209  break;
2210  }
2212  {
2213  const armnn::NormalizationDescriptor& layerDescriptor =
2214  static_cast<const armnn::NormalizationDescriptor&>(descriptor);
2215  SerializeNormalizationLayer(layer, layerDescriptor, name);
2216  break;
2217  }
2219  {
2220  SerializeOutputLayer(layer, id, name);
2221  break;
2222  }
2223  case armnn::LayerType::Pad :
2224  {
2225  const armnn::PadDescriptor& layerDescriptor =
2226  static_cast<const armnn::PadDescriptor&>(descriptor);
2227  SerializePadLayer(layer, layerDescriptor, name);
2228  break;
2229  }
2231  {
2232  const armnn::PermuteDescriptor& layerDescriptor =
2233  static_cast<const armnn::PermuteDescriptor&>(descriptor);
2234  SerializePermuteLayer(layer, layerDescriptor, name);
2235  break;
2236  }
2238  {
2239  const armnn::Pooling2dDescriptor& layerDescriptor =
2240  static_cast<const armnn::Pooling2dDescriptor&>(descriptor);
2241  SerializePooling2dLayer(layer, layerDescriptor, name);
2242  break;
2243  }
2245  {
2246  const armnn::Pooling3dDescriptor& layerDescriptor =
2247  static_cast<const armnn::Pooling3dDescriptor&>(descriptor);
2248  SerializePooling3dLayer(layer, layerDescriptor, name);
2249  break;
2250  }
2252  {
2253  SerializePreluLayer(layer, name);
2254  break;
2255  }
2257  {
2258  SerializeQuantizeLayer(layer, name);
2259  break;
2260  }
2262  SerializeQuantizedLstmLayer(layer, constants, name);
2263  break;
2265  {
2266  const armnn::ReshapeDescriptor &layerDescriptor =
2267  static_cast<const armnn::ReshapeDescriptor &>(descriptor);
2268  SerializeReshapeLayer(layer, layerDescriptor, name);
2269  break;
2270  }
2272  {
2273  SerializeRankLayer(layer, name);
2274  break;
2275  }
2277  {
2278  const armnn::ReduceDescriptor& layerDescriptor =
2279  static_cast<const armnn::ReduceDescriptor&>(descriptor);
2280  SerializeReduceLayer(layer, layerDescriptor, name);
2281  break;
2282  }
2284  {
2285  const armnn::ResizeDescriptor& layerDescriptor =
2286  static_cast<const armnn::ResizeDescriptor&>(descriptor);
2287  SerializeResizeLayer(layer, layerDescriptor, name);
2288  break;
2289  }
2291  {
2292  SerializeShapeLayer(layer, name);
2293  break;
2294  }
2296  {
2297  const armnn::SliceDescriptor& layerDescriptor =
2298  static_cast<const armnn::SliceDescriptor&>(descriptor);
2299  SerializeSliceLayer(layer, layerDescriptor, name);
2300  break;
2301  }
2303  {
2304  const armnn::SoftmaxDescriptor& layerDescriptor =
2305  static_cast<const armnn::SoftmaxDescriptor&>(descriptor);
2306  SerializeSoftmaxLayer(layer, layerDescriptor, name);
2307  break;
2308  }
2310  {
2311  const armnn::SpaceToBatchNdDescriptor& layerDescriptor =
2312  static_cast<const armnn::SpaceToBatchNdDescriptor&>(descriptor);
2313  SerializeSpaceToBatchNdLayer(layer, layerDescriptor, name);
2314  break;
2315  }
2317  {
2318  const armnn::SpaceToDepthDescriptor& layerDescriptor =
2319  static_cast<const armnn::SpaceToDepthDescriptor&>(descriptor);
2320  SerializeSpaceToDepthLayer(layer, layerDescriptor, name);
2321  break;
2322  }
2324  {
2325  const armnn::SplitterDescriptor& layerDescriptor =
2326  static_cast<const armnn::SplitterDescriptor&>(descriptor);
2327  SerializeSplitterLayer(layer, layerDescriptor, name);
2328  break;
2329  }
2331  {
2332  const armnn::StackDescriptor& layerDescriptor =
2333  static_cast<const armnn::StackDescriptor&>(descriptor);
2334  SerializeStackLayer(layer, layerDescriptor, name);
2335  break;
2336  }
2338  {
2339  const armnn::StandInDescriptor& layerDescriptor =
2340  static_cast<const armnn::StandInDescriptor&>(descriptor);
2341  SerializeStandInLayer(layer, layerDescriptor, name);
2342  break;
2343  }
2345  {
2346  const armnn::StridedSliceDescriptor& layerDescriptor =
2347  static_cast<const armnn::StridedSliceDescriptor&>(descriptor);
2348  SerializeStridedSliceLayer(layer, layerDescriptor, name);
2349  break;
2350  }
2352  {
2353  SerializeSubtractionLayer(layer, name);
2354  break;
2355  }
2357  {
2358  SerializeSwitchLayer(layer, name);
2359  break;
2360  }
2362  {
2363  const armnn::TransposeDescriptor& layerDescriptor =
2364  static_cast<const armnn::TransposeDescriptor&>(descriptor);
2365  SerializeTransposeLayer(layer, layerDescriptor, name);
2366  break;
2367  }
2369  {
2370  const armnn::TransposeConvolution2dDescriptor& layerDescriptor =
2371  static_cast<const armnn::TransposeConvolution2dDescriptor&>(descriptor);
2372  SerializeTransposeConvolution2dLayer(layer, layerDescriptor, constants, name);
2373  break;
2374  }
2376  {
2377  const armnn::UnidirectionalSequenceLstmDescriptor& layerDescriptor =
2378  static_cast<const armnn::UnidirectionalSequenceLstmDescriptor&>(descriptor);
2379  SerializeUnidirectionalSequenceLstmLayer(layer, layerDescriptor, constants, name);
2380  break;
2381  }
2382  default:
2383  {
2385  fmt::format("A layer of unknown type was given to the serializer. Layer name: {}; Layer Id: {}",
2386  layer->GetName(),
2387  id));
2388  }
2389  }
2390 }
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 1908 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().

1909 {
1910  flatbuffers::Offset<armnnSerializer::FeatureCompatibilityVersions> versionsTable =
1912  m_flatBufferBuilder,
1913  1, // Binding ids scheme version
1914  1, // Weights layout scheme version
1915  1 // Constant tensors as inputs version
1916  );
1917  return versionsTable;
1918 }
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: