ArmNN
 21.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 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 1928 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::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.

1933 {
1934  IgnoreUnused(constants);
1935 
1936  switch (layer->GetType())
1937  {
1939  {
1940  const armnn::ActivationDescriptor& layerDescriptor =
1941  static_cast<const armnn::ActivationDescriptor&>(descriptor);
1942  SerializeActivationLayer(layer, layerDescriptor, name);
1943  break;
1944  }
1946  {
1947  SerializeAdditionLayer(layer, name);
1948  break;
1949  }
1951  {
1952  const armnn::ArgMinMaxDescriptor& layerDescriptor =
1953  static_cast<const armnn::ArgMinMaxDescriptor&>(descriptor);
1954  SerializeArgMinMaxLayer(layer, layerDescriptor, name);
1955  break;
1956  }
1958  {
1959  const armnn::BatchNormalizationDescriptor& layerDescriptor =
1960  static_cast<const armnn::BatchNormalizationDescriptor&>(descriptor);
1961  SerializeBatchNormalizationLayer(layer,
1962  layerDescriptor,
1963  constants,
1964  name);
1965  break;
1966  }
1968  {
1969  const armnn::BatchToSpaceNdDescriptor& layerDescriptor =
1970  static_cast<const armnn::BatchToSpaceNdDescriptor&>(descriptor);
1971  SerializeBatchToSpaceNdLayer(layer,
1972  layerDescriptor,
1973  name);
1974  break;
1975  }
1976  case armnn::LayerType::Cast :
1977  {
1978  SerializeCastLayer(layer, name);
1979  break;
1980  }
1982  {
1983  const armnn::ChannelShuffleDescriptor& layerDescriptor =
1984  static_cast<const armnn::ChannelShuffleDescriptor&>(descriptor);
1985  SerializeChannelShuffleLayer(layer,
1986  layerDescriptor,
1987  name);
1988  break;
1989  }
1991  {
1992  const armnn::ComparisonDescriptor& layerDescriptor =
1993  static_cast<const armnn::ComparisonDescriptor&>(descriptor);
1994  SerializeComparisonLayer(layer,
1995  layerDescriptor,
1996  name);
1997  break;
1998  }
2000  {
2001  const armnn::ConcatDescriptor& layerDescriptor =
2002  static_cast<const armnn::ConcatDescriptor&>(descriptor);
2003  SerializeConcatLayer(layer,
2004  layerDescriptor,
2005  name);
2006  break;
2007  }
2009  {
2010  SerializeConstantLayer(layer,
2011  constants,
2012  name);
2013  break;
2014  }
2016  {
2017  const armnn::Convolution2dDescriptor& layerDescriptor =
2018  static_cast<const armnn::Convolution2dDescriptor&>(descriptor);
2019  SerializeConvolution2dLayer(layer,
2020  layerDescriptor,
2021  constants,
2022  name);
2023  break;
2024  }
2026  {
2027  const armnn::Convolution3dDescriptor& layerDescriptor =
2028  static_cast<const armnn::Convolution3dDescriptor&>(descriptor);
2029  SerializeConvolution3dLayer(layer,
2030  layerDescriptor,
2031  name);
2032  break;
2033  }
2035  {
2036  const armnn::DepthToSpaceDescriptor& layerDescriptor =
2037  static_cast<const armnn::DepthToSpaceDescriptor&>(descriptor);
2038  SerializeDepthToSpaceLayer(layer,
2039  layerDescriptor,
2040  name);
2041  break;
2042  }
2044  {
2045  const armnn::DepthwiseConvolution2dDescriptor& layerDescriptor =
2046  static_cast<const armnn::DepthwiseConvolution2dDescriptor&>(descriptor);
2047  SerializeDepthwiseConvolution2dLayer(layer,
2048  layerDescriptor,
2049  constants,
2050  name);
2051  break;
2052  }
2054  {
2055  SerializeDequantizeLayer(layer,
2056  name);
2057  break;
2058  }
2060  {
2061  const armnn::DetectionPostProcessDescriptor& layerDescriptor =
2062  static_cast<const armnn::DetectionPostProcessDescriptor&>(descriptor);
2063  SerializeDetectionPostProcessLayer(layer, layerDescriptor, constants, name);
2064  break;
2065  }
2067  {
2068  SerializeDivisionLayer(layer, name);
2069  break;
2070  }
2072  {
2073  const armnn::ElementwiseUnaryDescriptor& layerDescriptor =
2074  static_cast<const armnn::ElementwiseUnaryDescriptor&>(descriptor);
2075  SerializeElementwiseUnaryLayer(layer, layerDescriptor, name);
2076  break;
2077  }
2078  case armnn::LayerType::Fill :
2079  {
2080  const armnn::FillDescriptor& layerDescriptor =
2081  static_cast<const armnn::FillDescriptor&>(descriptor);
2082  SerializeFillLayer(layer, layerDescriptor, name);
2083  break;
2084  }
2086  {
2087  SerializeFloorLayer(layer, name);
2088  break;
2089  }
2091  {
2092  const armnn::FullyConnectedDescriptor& layerDescriptor =
2093  static_cast<const armnn::FullyConnectedDescriptor&>(descriptor);
2094  SerializeFullyConnectedLayer(layer, layerDescriptor, name);
2095  break;
2096  }
2098  {
2099  const armnn::GatherDescriptor& layerDescriptor =
2100  static_cast<const armnn::GatherDescriptor&>(descriptor);
2101  SerializeGatherLayer(layer, layerDescriptor, name);
2102  break;
2103  }
2105  {
2106  SerializeInputLayer(layer, id, name);
2107  break;
2108  }
2110  {
2111  const armnn::InstanceNormalizationDescriptor& layerDescriptor =
2112  static_cast<const armnn::InstanceNormalizationDescriptor&>(descriptor);
2113  SerializeInstanceNormalizationLayer(layer, layerDescriptor, name);
2114  break;
2115  }
2117  {
2118  const armnn::L2NormalizationDescriptor& layerDescriptor =
2119  static_cast<const armnn::L2NormalizationDescriptor&>(descriptor);
2120  SerializeL2NormalizationLayer(layer, layerDescriptor, name);
2121  break;
2122  }
2124  {
2125  const armnn::LogicalBinaryDescriptor& layerDescriptor =
2126  static_cast<const armnn::LogicalBinaryDescriptor&>(descriptor);
2127  SerializeLogicalBinaryLayer(layer, layerDescriptor, name);
2128  break;
2129  }
2131  {
2132  const armnn::LogSoftmaxDescriptor& layerDescriptor =
2133  static_cast<const armnn::LogSoftmaxDescriptor&>(descriptor);
2134  SerializeLogSoftmaxLayer(layer, layerDescriptor, name);
2135  break;
2136  }
2137  case armnn::LayerType::Lstm :
2138  {
2139  const armnn::LstmDescriptor& layerDescriptor =
2140  static_cast<const armnn::LstmDescriptor&>(descriptor);
2141  SerializeLstmLayer(layer, layerDescriptor, constants, name);
2142  break;
2143  }
2145  {
2146  const armnn::QLstmDescriptor& layerDescriptor =
2147  static_cast<const armnn::QLstmDescriptor&>(descriptor);
2148  SerializeQLstmLayer(layer, layerDescriptor, constants, name);
2149  break;
2150  }
2152  {
2153  SerializeMaximumLayer(layer, name);
2154  break;
2155  }
2156  case armnn::LayerType::Mean :
2157  {
2158  const armnn::MeanDescriptor& layerDescriptor =
2159  static_cast<const armnn::MeanDescriptor&>(descriptor);
2160  SerializeMeanLayer(layer, layerDescriptor, name);
2161  break;
2162  }
2164  {
2165  SerializeMergeLayer(layer, name);
2166  break;
2167  }
2169  {
2170  SerializeMinimumLayer(layer, name);
2171  break;
2172  }
2174  {
2175  SerializeMultiplicationLayer(layer, name);
2176  break;
2177  }
2179  {
2180  const armnn::NormalizationDescriptor& layerDescriptor =
2181  static_cast<const armnn::NormalizationDescriptor&>(descriptor);
2182  SerializeNormalizationLayer(layer, layerDescriptor, name);
2183  break;
2184  }
2186  {
2187  SerializeOutputLayer(layer, id, name);
2188  break;
2189  }
2190  case armnn::LayerType::Pad :
2191  {
2192  const armnn::PadDescriptor& layerDescriptor =
2193  static_cast<const armnn::PadDescriptor&>(descriptor);
2194  SerializePadLayer(layer, layerDescriptor, name);
2195  break;
2196  }
2198  {
2199  const armnn::PermuteDescriptor& layerDescriptor =
2200  static_cast<const armnn::PermuteDescriptor&>(descriptor);
2201  SerializePermuteLayer(layer, layerDescriptor, name);
2202  break;
2203  }
2205  {
2206  const armnn::Pooling2dDescriptor& layerDescriptor =
2207  static_cast<const armnn::Pooling2dDescriptor&>(descriptor);
2208  SerializePooling2dLayer(layer, layerDescriptor, name);
2209  break;
2210  }
2212  {
2213  SerializePreluLayer(layer, name);
2214  break;
2215  }
2217  {
2218  SerializeQuantizeLayer(layer, name);
2219  break;
2220  }
2222  SerializeQuantizedLstmLayer(layer, constants, name);
2223  break;
2225  {
2226  const armnn::ReshapeDescriptor &layerDescriptor =
2227  static_cast<const armnn::ReshapeDescriptor &>(descriptor);
2228  SerializeReshapeLayer(layer, layerDescriptor, name);
2229  break;
2230  }
2232  {
2233  SerializeRankLayer(layer, name);
2234  break;
2235  }
2237  {
2238  const armnn::ReduceDescriptor& layerDescriptor =
2239  static_cast<const armnn::ReduceDescriptor&>(descriptor);
2240  SerializeReduceLayer(layer, layerDescriptor, name);
2241  break;
2242  }
2244  {
2245  const armnn::ResizeDescriptor& layerDescriptor =
2246  static_cast<const armnn::ResizeDescriptor&>(descriptor);
2247  SerializeResizeLayer(layer, layerDescriptor, name);
2248  break;
2249  }
2251  {
2252  SerializeShapeLayer(layer, name);
2253  break;
2254  }
2256  {
2257  const armnn::SliceDescriptor& layerDescriptor =
2258  static_cast<const armnn::SliceDescriptor&>(descriptor);
2259  SerializeSliceLayer(layer, layerDescriptor, name);
2260  break;
2261  }
2263  {
2264  const armnn::SoftmaxDescriptor& layerDescriptor =
2265  static_cast<const armnn::SoftmaxDescriptor&>(descriptor);
2266  SerializeSoftmaxLayer(layer, layerDescriptor, name);
2267  break;
2268  }
2270  {
2271  const armnn::SpaceToBatchNdDescriptor& layerDescriptor =
2272  static_cast<const armnn::SpaceToBatchNdDescriptor&>(descriptor);
2273  SerializeSpaceToBatchNdLayer(layer, layerDescriptor, name);
2274  break;
2275  }
2277  {
2278  const armnn::SpaceToDepthDescriptor& layerDescriptor =
2279  static_cast<const armnn::SpaceToDepthDescriptor&>(descriptor);
2280  SerializeSpaceToDepthLayer(layer, layerDescriptor, name);
2281  break;
2282  }
2284  {
2285  const armnn::SplitterDescriptor& layerDescriptor =
2286  static_cast<const armnn::SplitterDescriptor&>(descriptor);
2287  SerializeSplitterLayer(layer, layerDescriptor, name);
2288  break;
2289  }
2291  {
2292  const armnn::StackDescriptor& layerDescriptor =
2293  static_cast<const armnn::StackDescriptor&>(descriptor);
2294  SerializeStackLayer(layer, layerDescriptor, name);
2295  break;
2296  }
2298  {
2299  const armnn::StandInDescriptor& layerDescriptor =
2300  static_cast<const armnn::StandInDescriptor&>(descriptor);
2301  SerializeStandInLayer(layer, layerDescriptor, name);
2302  break;
2303  }
2305  {
2306  const armnn::StridedSliceDescriptor& layerDescriptor =
2307  static_cast<const armnn::StridedSliceDescriptor&>(descriptor);
2308  SerializeStridedSliceLayer(layer, layerDescriptor, name);
2309  break;
2310  }
2312  {
2313  SerializeSubtractionLayer(layer, name);
2314  break;
2315  }
2317  {
2318  SerializeSwitchLayer(layer, name);
2319  break;
2320  }
2322  {
2323  const armnn::TransposeDescriptor& layerDescriptor =
2324  static_cast<const armnn::TransposeDescriptor&>(descriptor);
2325  SerializeTransposeLayer(layer, layerDescriptor, name);
2326  break;
2327  }
2329  {
2330  const armnn::TransposeConvolution2dDescriptor& layerDescriptor =
2331  static_cast<const armnn::TransposeConvolution2dDescriptor&>(descriptor);
2332  SerializeTransposeConvolution2dLayer(layer, layerDescriptor, constants, name);
2333  break;
2334  }
2336  {
2337  const armnn::UnidirectionalSequenceLstmDescriptor& layerDescriptor =
2338  static_cast<const armnn::UnidirectionalSequenceLstmDescriptor&>(descriptor);
2339  SerializeUnidirectionalSequenceLstmLayer(layer, layerDescriptor, constants, name);
2340  break;
2341  }
2342  default:
2343  {
2345  fmt::format("A layer of unknown type was given to the serializer. Layer name: {}; Layer Id: {}",
2346  layer->GetName(),
2347  id));
2348  }
2349  }
2350 }
A ViewsDescriptor for the SplitterLayer.
A TransposeConvolution2dDescriptor for the TransposeConvolution2dLayer.
A ReshapeDescriptor for the ReshapeLayer.
A ComparisonDescriptor for the ComparisonLayer.
Definition: Descriptors.hpp:78
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:56
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:25
A SliceDescriptor for the SliceLayer.
A Convolution3dDescriptor for the Convolution3dLayer.
virtual LayerType GetType() const =0
Returns the armnn::LayerType of this layer.
A SpaceToBatchNdDescriptor for the SpaceToBatchNdLayer.
A ElementwiseUnaryDescriptor for the ElementwiseUnaryLayer.
Definition: Descriptors.hpp:98
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 1875 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().

1876 {
1877  flatbuffers::Offset<armnnSerializer::FeatureCompatibilityVersions> versionsTable =
1879  m_flatBufferBuilder,
1880  1, // Binding ids scheme version
1881  1, // Weights layout scheme version
1882  1 // Constant tensors as inputs version
1883  );
1884  return versionsTable;
1885 }
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: