26{
27 switch (type)
28 {
29 case LayerType::Activation:
30 {
32 switch (activationDesc->m_Function)
33 {
34 case ActivationFunction::LeakyReLu:
35 {
37 }
38 case ActivationFunction::ReLu:
39 case ActivationFunction::BoundedReLu:
40 {
42 }
43 case ActivationFunction::Gelu:
44 {
46 }
47 case ActivationFunction::HardSwish:
48 {
50 }
51 case ActivationFunction::Sigmoid:
52 {
54 }
55 case ActivationFunction::TanH:
56 {
58 }
59 default:
60 {
62 }
63 }
64 }
65 case LayerType::Addition:
66 case LayerType::Multiplication:
67 case LayerType::Subtraction:
68 {
70 }
71 case LayerType::ElementwiseBinary:
72 {
74 switch (binaryDesc->m_Operation)
75 {
76 case BinaryOperation::SqDiff:
78 default:
80 }
81 }
82 case LayerType::ElementwiseUnary:
83 {
85 switch(unaryDesc->m_Operation)
86 {
87 case UnaryOperation::Rsqrt:
88 {
90 }
91 case UnaryOperation::Exp:
92 {
94 }
95 case UnaryOperation::Log:
96 {
98 }
99 default:
100 {
102 }
103 }
104 }
105 case LayerType::BatchMatMul:
106 {
109 }
110 case LayerType::BatchToSpaceNd:
111 {
114 }
115 case LayerType::Concat:
116 {
119 }
120 case LayerType::Constant:
121 {
122 bool isDepthwiseConv2dWeights = false;
123 if(layer)
124 {
125
126
129 if(type == LayerType::DepthwiseConvolution2d && slotIdx == 1)
130 {
131 isDepthwiseConv2dWeights = true;
132 }
133 }
135 }
136 case LayerType::Convolution2d:
137 {
140 }
141 case LayerType::Convolution3d:
142 {
145 }
146 case LayerType::DepthwiseConvolution2d:
147 {
150 }
151 case LayerType::DepthToSpace:
152 {
155 }
156 case LayerType::FullyConnected:
157 {
160 }
161 case LayerType::Gather:
162 {
165 }
166 case LayerType::Pad:
167 {
170 }
171 case LayerType::Pooling2d:
172 {
174
175 bool avgPoolIgnoreValue =
176 (poolDesc->m_PoolType == PoolingAlgorithm::Average) &&
177 (poolDesc->m_PaddingMethod == PaddingMethod::IgnoreValue);
178
179 if (poolDesc->m_PoolType == PoolingAlgorithm::L2)
180 {
182 }
183 else if (avgPoolIgnoreValue)
184 {
186 }
187 else
188 {
190 }
191 }
192 case LayerType::Mean:
193 {
195
198 reduceDesc.
m_vAxis = meanDesc->m_Axis;
200
202 }
203 case LayerType::Dequantize:
204 {
206 }
207 case LayerType::Quantize:
208 {
210 }
211 case LayerType::Prelu:
212 {
214 }
215 case LayerType::Reduce:
216 {
219 }
220 case LayerType::Reshape:
221 {
224 }
225 case LayerType::Resize:
226 {
229 }
230 case LayerType::Slice:
231 {
234 }
235 case LayerType::Softmax:
236 {
239 }
240 case LayerType::Splitter:
241 {
244 }
245 case LayerType::SpaceToBatchNd:
246 {
249 }
250 case LayerType::Stack:
251 {
254 }
255 case LayerType::StridedSlice:
256 {
259 }
260 case LayerType::TransposeConvolution2d:
261 {
264 }
265 case LayerType::Transpose:
266 {
269 }
270 default:
271 {
273 }
274 }
275}
TosaSerializationBasicBlock * ConvertAvgPool2DIgnoreValueToTosaOperator(const Layer *layer, const std::vector< const TensorInfo * > &inputs, const std::vector< const TensorInfo * > &outputs, const Pooling2dDescriptor *poolDescriptor)
TosaSerializationBasicBlock * ConvertBatchMatMulToTosaOperator(const Layer *layer, const std::vector< const TensorInfo * > &inputs, const std::vector< const TensorInfo * > &outputs, const BatchMatMulDescriptor *descriptor)
TosaSerializationBasicBlock * ConvertBatchToSpaceToTosaOperator(const Layer *layer, const std::vector< const TensorInfo * > &inputs, const std::vector< const TensorInfo * > &outputs, const BatchToSpaceNdDescriptor *batchToSpaceDescriptor)
TosaSerializationBasicBlock * ConvertConcatToTosaOperator(const Layer *layer, const std::vector< const TensorInfo * > &inputs, const std::vector< const TensorInfo * > &outputs, const OriginsDescriptor *concatDescriptor)
TosaSerializationBasicBlock * ConvertConstantToTosaOperator(const Layer *layer, const std::vector< const TensorInfo * > &outputs, bool isDepthwiseConv2dWeights=false)
TosaSerializationBasicBlock * ConvertConv2dToTosaOperator(const Layer *layer, const std::vector< const TensorInfo * > &inputs, const std::vector< const TensorInfo * > &outputs, const Convolution2dDescriptor *conv2dDescriptor)
TosaSerializationBasicBlock * ConvertConv3dToTosaOperator(const Layer *layer, const std::vector< const TensorInfo * > &inputs, const std::vector< const TensorInfo * > &outputs, const Convolution3dDescriptor *conv3dDescriptor)
TosaSerializationBasicBlock * ConvertDepthToSpaceToTosaOperator(const Layer *layer, const std::vector< const TensorInfo * > &inputs, const std::vector< const TensorInfo * > &outputs, const DepthToSpaceDescriptor *descriptor)
TosaSerializationBasicBlock * ConvertDepthwiseConv2dToTosaOperator(const Layer *layer, const std::vector< const TensorInfo * > &inputs, const std::vector< const TensorInfo * > &outputs, const DepthwiseConvolution2dDescriptor *conv2dDescriptor)
TosaSerializationBasicBlock * ConvertDequantizeToTosaOperator(const Layer *layer, const std::vector< const TensorInfo * > &inputs, const std::vector< const TensorInfo * > &outputs)
TosaSerializationBasicBlock * ConvertSquaredDifferenceToTosaOperator(const Layer *layer, const LayerType, const std::vector< const TensorInfo * > &inputs, const std::vector< const TensorInfo * > &outputs, const ElementwiseBinaryDescriptor *descriptor)
TosaSerializationBasicBlock * ConvertElementwiseBinaryToTosaOperator(const Layer *layer, const LayerType type, const std::vector< const TensorInfo * > &inputs, const std::vector< const TensorInfo * > &outputs, const ElementwiseBinaryDescriptor *descriptor)
TosaSerializationBasicBlock * ConvertExpOperator(const Layer *layer, const std::vector< const TensorInfo * > &inputs, const std::vector< const TensorInfo * > &outputs, const ElementwiseUnaryDescriptor *unaryDescriptor)
TosaSerializationBasicBlock * ConvertFullyConnectedToTosaOperator(const Layer *layer, const std::vector< const TensorInfo * > &inputs, const std::vector< const TensorInfo * > &outputs, const FullyConnectedDescriptor *fcDescriptor)
TosaSerializationBasicBlock * ConvertGatherToTosaOperator(const Layer *layer, const std::vector< const TensorInfo * > &inputs, const std::vector< const TensorInfo * > &outputs, const GatherDescriptor *gatherDescriptor)
TosaSerializationBasicBlock * ConvertGeluToTosaOperator(const Layer *layer, const std::vector< const TensorInfo * > &inputs, const std::vector< const TensorInfo * > &outputs, const ActivationDescriptor *desc)
TosaSerializationBasicBlock * ConvertHardSwishToTosaOperator(const Layer *layer, const std::vector< const TensorInfo * > &inputs, const std::vector< const TensorInfo * > &outputs, const ActivationDescriptor *desc)
TosaSerializationBasicBlock * ConvertLeakyReluToTosaOperator(const Layer *layer, const std::vector< const TensorInfo * > &inputs, const std::vector< const TensorInfo * > &outputs, const ActivationDescriptor *activationDescriptor)
TosaSerializationBasicBlock * ConvertLogOperator(const Layer *layer, const std::vector< const TensorInfo * > &inputs, const std::vector< const TensorInfo * > &outputs, const ElementwiseUnaryDescriptor *unaryDescriptor)
TosaSerializationBasicBlock * ConvertPReluToTosaOperator(const Layer *layer, const std::vector< const TensorInfo * > &inputs, const std::vector< const TensorInfo * > &outputs)
TosaSerializationBasicBlock * ConvertPadToTosaOperator(const Layer *layer, const std::vector< const TensorInfo * > &inputs, const std::vector< const TensorInfo * > &outputs, const PadDescriptor *padDescriptor)
TosaSerializationBasicBlock * ConvertPooling2DToTosaOperator(const Layer *layer, const std::vector< const TensorInfo * > &inputs, const std::vector< const TensorInfo * > &outputs, const Pooling2dDescriptor *poolDescriptor)
TosaSerializationBasicBlock * ConvertQuantizeToTosaOperator(const Layer *layer, const std::vector< const TensorInfo * > &inputs, const std::vector< const TensorInfo * > &outputs)
TosaSerializationBasicBlock * ConvertReduceToTosaOperator(const Layer *layer, const std::vector< const TensorInfo * > &inputs, const std::vector< const TensorInfo * > &outputs, const ReduceDescriptor *reduceDescriptor)
TosaSerializationBasicBlock * ConvertReluToTosaOperator(const Layer *layer, const std::vector< const TensorInfo * > &inputs, const std::vector< const TensorInfo * > &outputs, const ActivationDescriptor *desc)
TosaSerializationBasicBlock * ConvertReshapeToTosaOperator(const Layer *layer, const std::vector< const TensorInfo * > &inputs, const std::vector< const TensorInfo * > &outputs, const ReshapeDescriptor *reshapeDescriptor)
TosaSerializationBasicBlock * ConvertResizeToTosaOperator(const Layer *layer, const std::vector< const TensorInfo * > &inputs, const std::vector< const TensorInfo * > &outputs, const ResizeDescriptor *resizeDescriptor)
TosaSerializationBasicBlock * ConvertRsqrtOperator(const Layer *layer, const std::vector< const TensorInfo * > &inputs, const std::vector< const TensorInfo * > &outputs, const ElementwiseUnaryDescriptor *unaryDescriptor)
TosaSerializationBasicBlock * ConvertSigmoidToTosaOperator(const Layer *layer, const std::vector< const TensorInfo * > &inputs, const std::vector< const TensorInfo * > &outputs, const ActivationDescriptor *desc)
TosaSerializationBasicBlock * ConvertSliceToTosaOperator(const Layer *layer, const std::vector< const TensorInfo * > &inputs, const std::vector< const TensorInfo * > &outputs, const SliceDescriptor *sliceDescriptor)
TosaSerializationBasicBlock * ConvertSoftmaxToTosaOperator(const Layer *layer, const std::vector< const TensorInfo * > &inputs, const std::vector< const TensorInfo * > &outputs, const SoftmaxDescriptor *softmaxDescriptor)
TosaSerializationBasicBlock * ConvertSpaceToBatchToTosaOperator(const Layer *layer, const std::vector< const TensorInfo * > &inputs, const std::vector< const TensorInfo * > &outputs, const SpaceToBatchNdDescriptor *spaceToBatchDescriptor)
TosaSerializationBasicBlock * ConvertSplitToTosaOperator(const Layer *layer, const std::vector< const TensorInfo * > &inputs, const std::vector< const TensorInfo * > &outputs, const SplitterDescriptor *splitDescriptor)
TosaSerializationBasicBlock * ConvertStackToTosaOperator(const Layer *layer, const std::vector< const TensorInfo * > &inputs, const std::vector< const TensorInfo * > &outputs, const StackDescriptor *stackDescriptor)
TosaSerializationBasicBlock * ConvertStridedSliceToTosaOperator(const Layer *layer, const std::vector< const TensorInfo * > &inputs, const std::vector< const TensorInfo * > &outputs, const StridedSliceDescriptor *stridedSliceDescriptor)
TosaSerializationBasicBlock * ConvertTanHToTosaOperator(const Layer *layer, const std::vector< const TensorInfo * > &inputs, const std::vector< const TensorInfo * > &outputs, const ActivationDescriptor *desc)
TosaSerializationBasicBlock * CreateEmptyTosaSerializationBasicBlock()
TosaSerializationBasicBlock * ConvertTransposeConv2dToTosaOperator(const Layer *layer, const std::vector< const TensorInfo * > &inputs, const std::vector< const TensorInfo * > &outputs, const TransposeConvolution2dDescriptor *descriptor)
TosaSerializationBasicBlock * ConvertTransposeToTosaOperator(const Layer *layer, const std::vector< const TensorInfo * > &inputs, const std::vector< const TensorInfo * > &outputs, const TransposeDescriptor *transposeDescriptor)
const OutputSlot & GetOutputSlot(unsigned int index=0) const override
Get the const output slot handle by slot index.
LayerType GetType() const override
Returns the armnn::LayerType of this layer.
const InputSlot * GetConnection(unsigned int index) const override
LayerType
When adding a new layer, adapt also the LastLayer enum value in the enum class LayerType below.
DestType PolymorphicDowncast(SourceType *value)
Polymorphic downcast for build in pointers only.
A ReduceDescriptor for the REDUCE operators.
bool m_KeepDims
if true then output shape has no change.
std::vector< uint32_t > m_vAxis
The indices of the dimensions to reduce.
ReduceOperation m_ReduceOperation
Specifies the reduction operation to execute.