53 Target NETargetInfo::TargetType = Target::NEON;
56 struct NEConvolutionLayerFunctions
58 using GenericConvolutionLayer = NEConvolutionLayer;
59 using GEMMConvolutionLayer = NEGEMMConvolutionLayer;
60 using DirectConvolutionLayer = NEDirectConvolutionLayer;
61 using WinogradConvolutionLayer = NEWinogradConvolutionLayer;
65 struct NEEltwiseFunctions
67 using Addition = NEArithmeticAddition;
68 using Subtraction = NEArithmeticSubtraction;
69 using Multiplication = NEPixelWiseMultiplication;
70 using Maximum = NEElementwiseMax;
71 using Division = NEElementwiseDivision;
75 struct NEUnaryEltwiseFunctions
81 struct NEFusedLayerTypes
85 using FuseBatchNormalization = NEFuseBatchNormalization;
94 validate_node<NETargetInfo>(node, 1 , 1 );
104 auto func = std::make_unique<NENormalizationLayer>(
get_memory_manager(ctx, NETargetInfo::TargetType));
105 func->configure(
input, output, norm_info);
109 << node.
name() <<
" Type: " << node.
type() <<
" Target: " << NETargetInfo::TargetType
110 <<
" Data Type: " <<
input->info()->data_type() <<
" Input shape: "
112 <<
" Normalization info: " << norm_info.
type() << std::endl);
128 case NodeType::ActivationLayer:
129 return detail::create_activation_layer<NEActivationLayer, NETargetInfo>(
130 *polymorphic_downcast<ActivationLayerNode *>(node));
131 case NodeType::ArgMinMaxLayer:
132 return detail::create_arg_min_max_layer<NEArgMinMaxLayer, NETargetInfo>(
133 *polymorphic_downcast<ArgMinMaxLayerNode *>(node));
134 case NodeType::BatchNormalizationLayer:
135 return detail::create_batch_normalization_layer<NEBatchNormalizationLayer, NETargetInfo>(
136 *polymorphic_downcast<BatchNormalizationLayerNode *>(node));
137 case NodeType::ChannelShuffleLayer:
138 return detail::create_channel_shuffle_layer<NEChannelShuffleLayer, NETargetInfo>(
139 *polymorphic_downcast<ChannelShuffleLayerNode *>(node));
140 case NodeType::ConvolutionLayer:
141 return detail::create_convolution_layer<NEConvolutionLayerFunctions, NETargetInfo>(
142 *polymorphic_downcast<ConvolutionLayerNode *>(node), ctx);
143 case NodeType::DepthToSpaceLayer:
144 return detail::create_depth_to_space_layer<NEDepthToSpaceLayer, NETargetInfo>(
145 *polymorphic_downcast<DepthToSpaceLayerNode *>(node));
146 case NodeType::DeconvolutionLayer:
147 return detail::create_deconvolution_layer<NEDeconvolutionLayer, NETargetInfo>(
148 *polymorphic_downcast<DeconvolutionLayerNode *>(node), ctx);
149 case NodeType::ConcatenateLayer:
150 return detail::create_concatenate_layer<NEConcatenateLayer, NETargetInfo>(
151 *polymorphic_downcast<ConcatenateLayerNode *>(node));
152 case NodeType::DepthwiseConvolutionLayer:
153 return detail::create_depthwise_convolution_layer<NEDepthwiseConvolutionLayer, NETargetInfo>(
154 *polymorphic_downcast<DepthwiseConvolutionLayerNode *>(node));
155 case NodeType::DequantizationLayer:
156 return detail::create_dequantization_layer<NEDequantizationLayer, NETargetInfo>(
157 *polymorphic_downcast<DequantizationLayerNode *>(node));
158 case NodeType::DetectionOutputLayer:
159 return detail::create_detection_output_layer<CPPDetectionOutputLayer, NETargetInfo>(
160 *polymorphic_downcast<DetectionOutputLayerNode *>(node));
161 case NodeType::DetectionPostProcessLayer:
162 return detail::create_detection_post_process_layer<NEDetectionPostProcessLayer, NETargetInfo>(
163 *polymorphic_downcast<DetectionPostProcessLayerNode *>(node));
164 case NodeType::EltwiseLayer:
165 return detail::create_eltwise_layer<NEEltwiseFunctions, NETargetInfo>(
166 *polymorphic_downcast<EltwiseLayerNode *>(node));
167 case NodeType::UnaryEltwiseLayer:
168 return detail::create_unary_eltwise_layer<NEUnaryEltwiseFunctions, NETargetInfo>(
169 *polymorphic_downcast<UnaryEltwiseLayerNode *>(node));
170 case NodeType::FlattenLayer:
171 return detail::create_flatten_layer<NEFlattenLayer, NETargetInfo>(
172 *polymorphic_downcast<FlattenLayerNode *>(node));
173 case NodeType::FullyConnectedLayer:
174 return detail::create_fully_connected_layer<NEFullyConnectedLayer, NETargetInfo>(
175 *polymorphic_downcast<FullyConnectedLayerNode *>(node), ctx);
176 case NodeType::FusedConvolutionBatchNormalizationLayer:
177 return detail::create_fused_convolution_batch_normalization_layer<NEFusedLayerTypes, NETargetInfo>(
178 *polymorphic_downcast<FusedConvolutionBatchNormalizationNode *>(node), ctx);
179 case NodeType::FusedDepthwiseConvolutionBatchNormalizationLayer:
182 *polymorphic_downcast<FusedDepthwiseConvolutionBatchNormalizationNode *>(node), ctx);
183 case NodeType::L2NormalizeLayer:
184 return detail::create_l2_normalize_layer<NEL2NormalizeLayer, NETargetInfo>(
185 *polymorphic_downcast<L2NormalizeLayerNode *>(node), ctx);
186 case NodeType::NormalizationLayer:
188 *polymorphic_downcast<NormalizationLayerNode *>(node), ctx);
189 case NodeType::PadLayer:
190 return detail::create_pad_layer<NEPadLayer, NETargetInfo>(*polymorphic_downcast<PadLayerNode *>(node));
191 case NodeType::PermuteLayer:
192 return detail::create_permute_layer<NEPermute, NETargetInfo>(
193 *polymorphic_downcast<PermuteLayerNode *>(node));
194 case NodeType::PoolingLayer:
195 return detail::create_pooling_layer<NEPoolingLayer, NETargetInfo>(
196 *polymorphic_downcast<PoolingLayerNode *>(node));
197 case NodeType::PReluLayer:
198 return detail::create_prelu_layer<NEPReluLayer, NETargetInfo>(
199 *polymorphic_downcast<PReluLayerNode *>(node));
200 case NodeType::PrintLayer:
201 return detail::create_print_layer<NETargetInfo>(*polymorphic_downcast<PrintLayerNode *>(node));
202 case NodeType::PriorBoxLayer:
203 return detail::create_priorbox_layer<NEPriorBoxLayer, NETargetInfo>(
204 *polymorphic_downcast<PriorBoxLayerNode *>(node));
205 case NodeType::QuantizationLayer:
206 return detail::create_quantization_layer<NEQuantizationLayer, NETargetInfo>(
207 *polymorphic_downcast<QuantizationLayerNode *>(node));
208 case NodeType::ReductionOperationLayer:
209 return detail::create_reduction_operation_layer<NEReductionOperation, NETargetInfo>(
210 *polymorphic_downcast<ReductionLayerNode *>(node), ctx);
211 case NodeType::ReorgLayer:
212 return detail::create_reorg_layer<NEReorgLayer, NETargetInfo>(
213 *polymorphic_downcast<ReorgLayerNode *>(node));
214 case NodeType::ReshapeLayer:
215 return detail::create_reshape_layer<NEReshapeLayer, NETargetInfo>(
216 *polymorphic_downcast<ReshapeLayerNode *>(node));
217 case NodeType::ResizeLayer:
218 return detail::create_resize_layer<NEScale, NETargetInfo>(*polymorphic_downcast<ResizeLayerNode *>(node));
219 case NodeType::SliceLayer:
220 return detail::create_slice_layer<NESlice, NETargetInfo>(*polymorphic_downcast<SliceLayerNode *>(node));
221 case NodeType::SoftmaxLayer:
222 return detail::create_softmax_layer<NESoftmaxLayer, NETargetInfo>(
223 *polymorphic_downcast<SoftmaxLayerNode *>(node), ctx);
224 case NodeType::StackLayer:
225 return detail::create_stack_layer<NEStackLayer, NETargetInfo>(
226 *polymorphic_downcast<StackLayerNode *>(node));
227 case NodeType::StridedSliceLayer:
228 return detail::create_strided_slice_layer<NEStridedSlice, NETargetInfo>(
229 *polymorphic_downcast<StridedSliceLayerNode *>(node));