ArmNN
 21.08
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 1947 of file Serializer.cpp.

References armnn::Activation, armnn::Addition, armnn::ArgMinMax, armnn::BatchNormalization, armnn::BatchToSpaceNd, armnn::Cast, armnn::Comparison, armnn::Concat, armnn::Constant, armnn::Convolution2d, 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.

1952 {
1953  IgnoreUnused(constants);
1954 
1955  switch (layer->GetType())
1956  {
1958  {
1959  const armnn::ActivationDescriptor& layerDescriptor =
1960  static_cast<const armnn::ActivationDescriptor&>(descriptor);
1961  SerializeActivationLayer(layer, layerDescriptor, name);
1962  break;
1963  }
1965  {
1966  SerializeAdditionLayer(layer, name);
1967  break;
1968  }
1970  {
1971  const armnn::ArgMinMaxDescriptor& layerDescriptor =
1972  static_cast<const armnn::ArgMinMaxDescriptor&>(descriptor);
1973  SerializeArgMinMaxLayer(layer, layerDescriptor, name);
1974  break;
1975  }
1977  {
1978  const armnn::BatchNormalizationDescriptor& layerDescriptor =
1979  static_cast<const armnn::BatchNormalizationDescriptor&>(descriptor);
1980  SerializeBatchNormalizationLayer(layer,
1981  layerDescriptor,
1982  constants,
1983  name);
1984  break;
1985  }
1987  {
1988  const armnn::BatchToSpaceNdDescriptor& layerDescriptor =
1989  static_cast<const armnn::BatchToSpaceNdDescriptor&>(descriptor);
1990  SerializeBatchToSpaceNdLayer(layer,
1991  layerDescriptor,
1992  name);
1993  break;
1994  }
1995  case armnn::LayerType::Cast :
1996  {
1997  SerializeCastLayer(layer, name);
1998  break;
1999  }
2001  {
2002  const armnn::ComparisonDescriptor& layerDescriptor =
2003  static_cast<const armnn::ComparisonDescriptor&>(descriptor);
2004  SerializeComparisonLayer(layer,
2005  layerDescriptor,
2006  name);
2007  break;
2008  }
2010  {
2011  const armnn::ConcatDescriptor& layerDescriptor =
2012  static_cast<const armnn::ConcatDescriptor&>(descriptor);
2013  SerializeConcatLayer(layer,
2014  layerDescriptor,
2015  name);
2016  break;
2017  }
2019  {
2020  SerializeConstantLayer(layer,
2021  constants,
2022  name);
2023  break;
2024  }
2026  {
2027  const armnn::Convolution2dDescriptor& layerDescriptor =
2028  static_cast<const armnn::Convolution2dDescriptor&>(descriptor);
2029  SerializeConvolution2dLayer(layer,
2030  layerDescriptor,
2031  constants,
2032  name);
2033  break;
2034  }
2036  {
2037  const armnn::DepthToSpaceDescriptor& layerDescriptor =
2038  static_cast<const armnn::DepthToSpaceDescriptor&>(descriptor);
2039  SerializeDepthToSpaceLayer(layer,
2040  layerDescriptor,
2041  name);
2042  break;
2043  }
2045  {
2046  const armnn::DepthwiseConvolution2dDescriptor& layerDescriptor =
2047  static_cast<const armnn::DepthwiseConvolution2dDescriptor&>(descriptor);
2048  SerializeDepthwiseConvolution2dLayer(layer,
2049  layerDescriptor,
2050  constants,
2051  name);
2052  break;
2053  }
2055  {
2056  SerializeDequantizeLayer(layer,
2057  name);
2058  break;
2059  }
2061  {
2062  const armnn::DetectionPostProcessDescriptor& layerDescriptor =
2063  static_cast<const armnn::DetectionPostProcessDescriptor&>(descriptor);
2064  SerializeDetectionPostProcessLayer(layer, layerDescriptor, constants, name);
2065  break;
2066  }
2068  {
2069  SerializeDivisionLayer(layer, name);
2070  break;
2071  }
2073  {
2074  const armnn::ElementwiseUnaryDescriptor& layerDescriptor =
2075  static_cast<const armnn::ElementwiseUnaryDescriptor&>(descriptor);
2076  SerializeElementwiseUnaryLayer(layer, layerDescriptor, name);
2077  break;
2078  }
2079  case armnn::LayerType::Fill :
2080  {
2081  const armnn::FillDescriptor& layerDescriptor =
2082  static_cast<const armnn::FillDescriptor&>(descriptor);
2083  SerializeFillLayer(layer, layerDescriptor, name);
2084  break;
2085  }
2087  {
2088  SerializeFloorLayer(layer, name);
2089  break;
2090  }
2092  {
2093  const armnn::FullyConnectedDescriptor& layerDescriptor =
2094  static_cast<const armnn::FullyConnectedDescriptor&>(descriptor);
2095  SerializeFullyConnectedLayer(layer, layerDescriptor, name);
2096  break;
2097  }
2099  {
2100  const armnn::GatherDescriptor& layerDescriptor =
2101  static_cast<const armnn::GatherDescriptor&>(descriptor);
2102  SerializeGatherLayer(layer, layerDescriptor, name);
2103  break;
2104  }
2106  {
2107  SerializeInputLayer(layer, id, name);
2108  break;
2109  }
2111  {
2112  const armnn::InstanceNormalizationDescriptor& layerDescriptor =
2113  static_cast<const armnn::InstanceNormalizationDescriptor&>(descriptor);
2114  SerializeInstanceNormalizationLayer(layer, layerDescriptor, name);
2115  break;
2116  }
2118  {
2119  const armnn::L2NormalizationDescriptor& layerDescriptor =
2120  static_cast<const armnn::L2NormalizationDescriptor&>(descriptor);
2121  SerializeL2NormalizationLayer(layer, layerDescriptor, name);
2122  break;
2123  }
2125  {
2126  const armnn::LogicalBinaryDescriptor& layerDescriptor =
2127  static_cast<const armnn::LogicalBinaryDescriptor&>(descriptor);
2128  SerializeLogicalBinaryLayer(layer, layerDescriptor, name);
2129  break;
2130  }
2132  {
2133  const armnn::LogSoftmaxDescriptor& layerDescriptor =
2134  static_cast<const armnn::LogSoftmaxDescriptor&>(descriptor);
2135  SerializeLogSoftmaxLayer(layer, layerDescriptor, name);
2136  break;
2137  }
2138  case armnn::LayerType::Lstm :
2139  {
2140  const armnn::LstmDescriptor& layerDescriptor =
2141  static_cast<const armnn::LstmDescriptor&>(descriptor);
2142  SerializeLstmLayer(layer, layerDescriptor, constants, name);
2143  break;
2144  }
2146  {
2147  const armnn::QLstmDescriptor& layerDescriptor =
2148  static_cast<const armnn::QLstmDescriptor&>(descriptor);
2149  SerializeQLstmLayer(layer, layerDescriptor, constants, name);
2150  break;
2151  }
2153  {
2154  SerializeMaximumLayer(layer, name);
2155  break;
2156  }
2157  case armnn::LayerType::Mean :
2158  {
2159  const armnn::MeanDescriptor& layerDescriptor =
2160  static_cast<const armnn::MeanDescriptor&>(descriptor);
2161  SerializeMeanLayer(layer, layerDescriptor, name);
2162  break;
2163  }
2165  {
2166  SerializeMergeLayer(layer, name);
2167  break;
2168  }
2170  {
2171  SerializeMinimumLayer(layer, name);
2172  break;
2173  }
2175  {
2176  SerializeMultiplicationLayer(layer, name);
2177  break;
2178  }
2180  {
2181  const armnn::NormalizationDescriptor& layerDescriptor =
2182  static_cast<const armnn::NormalizationDescriptor&>(descriptor);
2183  SerializeNormalizationLayer(layer, layerDescriptor, name);
2184  break;
2185  }
2187  {
2188  SerializeOutputLayer(layer, id, name);
2189  break;
2190  }
2191  case armnn::LayerType::Pad :
2192  {
2193  const armnn::PadDescriptor& layerDescriptor =
2194  static_cast<const armnn::PadDescriptor&>(descriptor);
2195  SerializePadLayer(layer, layerDescriptor, name);
2196  break;
2197  }
2199  {
2200  const armnn::PermuteDescriptor& layerDescriptor =
2201  static_cast<const armnn::PermuteDescriptor&>(descriptor);
2202  SerializePermuteLayer(layer, layerDescriptor, name);
2203  break;
2204  }
2206  {
2207  const armnn::Pooling2dDescriptor& layerDescriptor =
2208  static_cast<const armnn::Pooling2dDescriptor&>(descriptor);
2209  SerializePooling2dLayer(layer, layerDescriptor, name);
2210  break;
2211  }
2213  {
2214  SerializePreluLayer(layer, name);
2215  break;
2216  }
2218  {
2219  SerializeQuantizeLayer(layer, name);
2220  break;
2221  }
2223  SerializeQuantizedLstmLayer(layer, constants, name);
2224  break;
2226  {
2227  const armnn::ReshapeDescriptor &layerDescriptor =
2228  static_cast<const armnn::ReshapeDescriptor &>(descriptor);
2229  SerializeReshapeLayer(layer, layerDescriptor, name);
2230  break;
2231  }
2233  {
2234  SerializeRankLayer(layer, name);
2235  break;
2236  }
2238  {
2239  const armnn::ReduceDescriptor& layerDescriptor =
2240  static_cast<const armnn::ReduceDescriptor&>(descriptor);
2241  SerializeReduceLayer(layer, layerDescriptor, name);
2242  break;
2243  }
2245  {
2246  const armnn::ResizeDescriptor& layerDescriptor =
2247  static_cast<const armnn::ResizeDescriptor&>(descriptor);
2248  SerializeResizeLayer(layer, layerDescriptor, name);
2249  break;
2250  }
2252  {
2253  SerializeShapeLayer(layer, name);
2254  break;
2255  }
2257  {
2258  const armnn::SliceDescriptor& layerDescriptor =
2259  static_cast<const armnn::SliceDescriptor&>(descriptor);
2260  SerializeSliceLayer(layer, layerDescriptor, name);
2261  break;
2262  }
2264  {
2265  const armnn::SoftmaxDescriptor& layerDescriptor =
2266  static_cast<const armnn::SoftmaxDescriptor&>(descriptor);
2267  SerializeSoftmaxLayer(layer, layerDescriptor, name);
2268  break;
2269  }
2271  {
2272  const armnn::SpaceToBatchNdDescriptor& layerDescriptor =
2273  static_cast<const armnn::SpaceToBatchNdDescriptor&>(descriptor);
2274  SerializeSpaceToBatchNdLayer(layer, layerDescriptor, name);
2275  break;
2276  }
2278  {
2279  const armnn::SpaceToDepthDescriptor& layerDescriptor =
2280  static_cast<const armnn::SpaceToDepthDescriptor&>(descriptor);
2281  SerializeSpaceToDepthLayer(layer, layerDescriptor, name);
2282  break;
2283  }
2285  {
2286  const armnn::SplitterDescriptor& layerDescriptor =
2287  static_cast<const armnn::SplitterDescriptor&>(descriptor);
2288  SerializeSplitterLayer(layer, layerDescriptor, name);
2289  break;
2290  }
2292  {
2293  const armnn::StackDescriptor& layerDescriptor =
2294  static_cast<const armnn::StackDescriptor&>(descriptor);
2295  SerializeStackLayer(layer, layerDescriptor, name);
2296  break;
2297  }
2299  {
2300  const armnn::StandInDescriptor& layerDescriptor =
2301  static_cast<const armnn::StandInDescriptor&>(descriptor);
2302  SerializeStandInLayer(layer, layerDescriptor, name);
2303  break;
2304  }
2306  {
2307  const armnn::StridedSliceDescriptor& layerDescriptor =
2308  static_cast<const armnn::StridedSliceDescriptor&>(descriptor);
2309  SerializeStridedSliceLayer(layer, layerDescriptor, name);
2310  break;
2311  }
2313  {
2314  SerializeSubtractionLayer(layer, name);
2315  break;
2316  }
2318  {
2319  SerializeSwitchLayer(layer, name);
2320  break;
2321  }
2323  {
2324  const armnn::TransposeDescriptor& layerDescriptor =
2325  static_cast<const armnn::TransposeDescriptor&>(descriptor);
2326  SerializeTransposeLayer(layer, layerDescriptor, name);
2327  break;
2328  }
2330  {
2331  const armnn::TransposeConvolution2dDescriptor& layerDescriptor =
2332  static_cast<const armnn::TransposeConvolution2dDescriptor&>(descriptor);
2333  SerializeTransposeConvolution2dLayer(layer, layerDescriptor, constants, name);
2334  break;
2335  }
2337  {
2338  const armnn::UnidirectionalSequenceLstmDescriptor& layerDescriptor =
2339  static_cast<const armnn::UnidirectionalSequenceLstmDescriptor&>(descriptor);
2340  SerializeUnidirectionalSequenceLstmLayer(layer, layerDescriptor, constants, name);
2341  break;
2342  }
2343  default:
2344  {
2346  fmt::format("A layer of unknown type was given to the serializer. Layer name: {}; Layer Id: {}",
2347  layer->GetName(),
2348  id));
2349  }
2350  }
2351 }
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 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: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.
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 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 ARMNN_DEPRECATED_MSG, and SerializerStrategy::GetVersionTable().

52  {
53  return m_serializedLayers;
54  }

◆ GetVersionTable()

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

Definition at line 1894 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().

1895 {
1896  flatbuffers::Offset<armnnSerializer::FeatureCompatibilityVersions> versionsTable =
1898  m_flatBufferBuilder,
1899  1, // Binding ids scheme version
1900  1, // Weights layout scheme version
1901  1 // Constant tensors as inputs version
1902  );
1903  return versionsTable;
1904 }
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: