ArmNN  NotReleased
ILayerVisitor.hpp
Go to the documentation of this file.
1 //
2 // Copyright © 2017 Arm Ltd. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5 #pragma once
6 
7 #include <armnn/Deprecated.hpp>
9 #include <armnn/NetworkFwd.hpp>
10 #include <armnn/Optional.hpp>
11 #include <armnn/TensorFwd.hpp>
12 #include <armnn/Types.hpp>
13 
14 namespace armnn
15 {
17 {
18 protected:
20  virtual ~ILayerVisitor() {}
21 
22 public:
27  ARMNN_DEPRECATED_MSG("Use VisitElementwiseUnaryLayer instead")
28  virtual void VisitAbsLayer(const IConnectableLayer* layer,
29  const char* name = nullptr) = 0;
30 
35  virtual void VisitActivationLayer(const IConnectableLayer* layer,
36  const ActivationDescriptor& activationDescriptor,
37  const char* name = nullptr) = 0;
38 
42  virtual void VisitAdditionLayer(const IConnectableLayer* layer,
43  const char* name = nullptr) = 0;
44 
49  virtual void VisitArgMinMaxLayer(const IConnectableLayer* layer,
50  const ArgMinMaxDescriptor& argMinMaxDescriptor,
51  const char* name = nullptr) = 0;
52 
61  virtual void VisitBatchNormalizationLayer(const IConnectableLayer* layer,
62  const BatchNormalizationDescriptor& desc,
63  const ConstTensor& mean,
64  const ConstTensor& variance,
65  const ConstTensor& beta,
66  const ConstTensor& gamma,
67  const char* name = nullptr) = 0;
68 
74  virtual void VisitBatchToSpaceNdLayer(const IConnectableLayer* layer,
75  const BatchToSpaceNdDescriptor& batchToSpaceNdDescriptor,
76  const char* name = nullptr) = 0;
77 
82  virtual void VisitComparisonLayer(const IConnectableLayer* layer,
83  const ComparisonDescriptor& comparisonDescriptor,
84  const char* name = nullptr) = 0;
85 
93  virtual void VisitConcatLayer(const IConnectableLayer* layer,
94  const OriginsDescriptor& concatDescriptor,
95  const char* name = nullptr)
96  {
97  // default implementation to ease transition while MergerLayer is being deprecated
99  VisitMergerLayer(layer, concatDescriptor, name);
101  }
102 
110  virtual void VisitConstantLayer(const IConnectableLayer* layer,
111  const ConstTensor& input,
112  const char* name = nullptr) = 0;
113 
121  virtual void VisitConvolution2dLayer(const IConnectableLayer* layer,
122  const Convolution2dDescriptor& convolution2dDescriptor,
123  const ConstTensor& weights,
124  const Optional<ConstTensor>& biases,
125  const char* name = nullptr) = 0;
126 
131  virtual void VisitDepthToSpaceLayer(const IConnectableLayer* layer,
132  const DepthToSpaceDescriptor& depthToSpaceDescriptor,
133  const char* name = nullptr) = 0;
134 
142  virtual void VisitDepthwiseConvolution2dLayer(const IConnectableLayer* layer,
143  const DepthwiseConvolution2dDescriptor& convolution2dDescriptor,
144  const ConstTensor& weights,
145  const Optional<ConstTensor>& biases,
146  const char* name = nullptr) = 0;
147 
152  virtual void VisitDequantizeLayer(const IConnectableLayer* layer,
153  const char* name = nullptr) = 0;
154 
161  virtual void VisitDetectionPostProcessLayer(const IConnectableLayer* layer,
162  const DetectionPostProcessDescriptor& descriptor,
163  const ConstTensor& anchors,
164  const char* name = nullptr) = 0;
165 
169  virtual void VisitDivisionLayer(const IConnectableLayer* layer,
170  const char* name = nullptr) = 0;
171 
176  virtual void VisitElementwiseUnaryLayer(const IConnectableLayer* layer,
177  const ElementwiseUnaryDescriptor& elementwiseUnaryDescriptor,
178  const char* name = nullptr) = 0;
179 
183  ARMNN_DEPRECATED_MSG("Use VisitComparisonLayer instead")
184  virtual void VisitEqualLayer(const IConnectableLayer* layer,
185  const char* name = nullptr) = 0;
186 
190  virtual void VisitFloorLayer(const IConnectableLayer* layer,
191  const char* name = nullptr) = 0;
192 
200  virtual void VisitFullyConnectedLayer(const IConnectableLayer* layer,
201  const FullyConnectedDescriptor& fullyConnectedDescriptor,
202  const ConstTensor& weights,
203  const Optional<ConstTensor>& biases,
204  const char* name = nullptr) = 0;
205 
209  virtual void VisitGatherLayer(const IConnectableLayer* layer,
210  const char* name = nullptr) = 0;
211 
215  ARMNN_DEPRECATED_MSG("Use VisitComparisonLayer instead")
216  virtual void VisitGreaterLayer(const IConnectableLayer* layer,
217  const char* name = nullptr) = 0;
218 
224  virtual void VisitInputLayer(const IConnectableLayer* layer,
225  LayerBindingId id,
226  const char* name = nullptr) = 0;
227 
233  virtual void VisitInstanceNormalizationLayer(const IConnectableLayer* layer,
235  const char* name = nullptr) = 0;
236 
242  virtual void VisitL2NormalizationLayer(const IConnectableLayer* layer,
243  const L2NormalizationDescriptor& desc,
244  const char* name = nullptr) = 0;
245 
250  virtual void VisitLogSoftmaxLayer(const IConnectableLayer* layer,
251  const LogSoftmaxDescriptor& logSoftmaxDescriptor,
252  const char* name = nullptr) = 0;
253 
259  virtual void VisitLstmLayer(const IConnectableLayer* layer,
260  const LstmDescriptor& descriptor,
261  const LstmInputParams& params,
262  const char* name = nullptr) = 0;
263 
267  virtual void VisitMaximumLayer(const IConnectableLayer* layer,
268  const char* name = nullptr) = 0;
269 
274  virtual void VisitMeanLayer(const IConnectableLayer* layer,
275  const MeanDescriptor& meanDescriptor,
276  const char* name = nullptr) = 0;
277 
281  virtual void VisitMergeLayer(const IConnectableLayer* layer,
282  const char* name = nullptr) = 0;
283 
291  ARMNN_DEPRECATED_MSG("Use VisitConcatLayer instead")
292  virtual void VisitMergerLayer(const IConnectableLayer* layer,
293  const MergerDescriptor& mergerDescriptor,
294  const char* name = nullptr) = 0;
295 
299  virtual void VisitMinimumLayer(const IConnectableLayer* layer,
300  const char* name = nullptr) = 0;
301 
305  virtual void VisitMultiplicationLayer(const IConnectableLayer* layer,
306  const char* name = nullptr) = 0;
307 
312  virtual void VisitNormalizationLayer(const IConnectableLayer* layer,
313  const NormalizationDescriptor& normalizationDescriptor,
314  const char* name = nullptr) = 0;
315 
321  virtual void VisitOutputLayer(const IConnectableLayer* layer,
322  LayerBindingId id,
323  const char* name = nullptr) = 0;
324 
331  virtual void VisitPadLayer(const IConnectableLayer* layer,
332  const PadDescriptor& padDescriptor,
333  const char* name = nullptr) = 0;
334 
339  virtual void VisitPermuteLayer(const IConnectableLayer* layer,
340  const PermuteDescriptor& permuteDescriptor,
341  const char* name = nullptr) = 0;
342 
347  virtual void VisitPooling2dLayer(const IConnectableLayer* layer,
348  const Pooling2dDescriptor& pooling2dDescriptor,
349  const char* name = nullptr) = 0;
350 
354  virtual void VisitPreluLayer(const IConnectableLayer* layer,
355  const char* name = nullptr) = 0;
356 
360  virtual void VisitQuantizeLayer(const IConnectableLayer* layer,
361  const char* name = nullptr) = 0;
362 
367  virtual void VisitQuantizedLstmLayer(const IConnectableLayer* layer,
368  const QuantizedLstmInputParams& params,
369  const char* name = nullptr) = 0;
370 
375  virtual void VisitReshapeLayer(const IConnectableLayer* layer,
376  const ReshapeDescriptor& reshapeDescriptor,
377  const char* name = nullptr) = 0;
378 
383  ARMNN_DEPRECATED_MSG("Use VisitResizeLayer instead")
384  virtual void VisitResizeBilinearLayer(const IConnectableLayer* layer,
385  const ResizeBilinearDescriptor& resizeDesc,
386  const char* name = nullptr) = 0;
387 
392  virtual void VisitResizeLayer(const IConnectableLayer* layer,
393  const ResizeDescriptor& resizeDescriptor,
394  const char* name = nullptr) = 0;
395 
400  ARMNN_DEPRECATED_MSG("Use VisitElementwiseUnaryLayer instead")
401  virtual void VisitRsqrtLayer(const IConnectableLayer* layer,
402  const char* name = nullptr) = 0;
403 
408  virtual void VisitSliceLayer(const IConnectableLayer* layer,
409  const SliceDescriptor& sliceDescriptor,
410  const char* name = nullptr) = 0;
411 
412 
417  virtual void VisitSoftmaxLayer(const IConnectableLayer* layer,
418  const SoftmaxDescriptor& softmaxDescriptor,
419  const char* name = nullptr) = 0;
420 
425  virtual void VisitSpaceToBatchNdLayer(const IConnectableLayer* layer,
426  const SpaceToBatchNdDescriptor& spaceToBatchNdDescriptor,
427  const char* name = nullptr) = 0;
428 
433  virtual void VisitSpaceToDepthLayer(const IConnectableLayer* layer,
434  const SpaceToDepthDescriptor& spaceToDepthDescriptor,
435  const char* name = nullptr) = 0;
436 
444  virtual void VisitSplitterLayer(const IConnectableLayer* layer,
445  const ViewsDescriptor& splitterDescriptor,
446  const char* name = nullptr) = 0;
447 
452  virtual void VisitStackLayer(const IConnectableLayer* layer,
453  const StackDescriptor& stackDescriptor,
454  const char* name = nullptr) = 0;
455 
460  virtual void VisitStandInLayer(const IConnectableLayer* layer,
461  const StandInDescriptor& standInDescriptor,
462  const char* name = nullptr) = 0;
463 
468  virtual void VisitStridedSliceLayer(const IConnectableLayer* layer,
469  const StridedSliceDescriptor& stridedSliceDescriptor,
470  const char* name = nullptr) = 0;
471 
475  virtual void VisitSubtractionLayer(const IConnectableLayer* layer,
476  const char* name = nullptr) = 0;
477 
481  virtual void VisitSwitchLayer(const IConnectableLayer* layer,
482  const char* name = nullptr) = 0;
483 
491  virtual void VisitTransposeConvolution2dLayer(const IConnectableLayer* layer,
492  const TransposeConvolution2dDescriptor& descriptor,
493  const ConstTensor& weights,
494  const Optional<ConstTensor>& biases,
495  const char* name = nullptr) = 0;
496 
497  virtual void StartVisit() {}
498  virtual void FinishVisit() {}
499 
500 };
501 } // namespace armnn
virtual void VisitMinimumLayer(const IConnectableLayer *layer, const char *name=nullptr)=0
virtual void VisitGreaterLayer(const IConnectableLayer *layer, const char *name=nullptr)=0
virtual void VisitMergeLayer(const IConnectableLayer *layer, const char *name=nullptr)=0
virtual void VisitDepthToSpaceLayer(const IConnectableLayer *layer, const DepthToSpaceDescriptor &depthToSpaceDescriptor, const char *name=nullptr)=0
virtual void VisitFullyConnectedLayer(const IConnectableLayer *layer, const FullyConnectedDescriptor &fullyConnectedDescriptor, const ConstTensor &weights, const Optional< ConstTensor > &biases, const char *name=nullptr)=0
virtual void VisitAdditionLayer(const IConnectableLayer *layer, const char *name=nullptr)=0
virtual void VisitSwitchLayer(const IConnectableLayer *layer, const char *name=nullptr)=0
A BatchToSpaceNdDescriptor for the BatchToSpaceNdLayer.
virtual void VisitConvolution2dLayer(const IConnectableLayer *layer, const Convolution2dDescriptor &convolution2dDescriptor, const ConstTensor &weights, const Optional< ConstTensor > &biases, const char *name=nullptr)=0
A NormalizationDescriptor for the NormalizationLayer.
virtual void VisitResizeLayer(const IConnectableLayer *layer, const ResizeDescriptor &resizeDescriptor, const char *name=nullptr)=0
A tensor defined by a TensorInfo (shape and data type) and an immutable backing store.
Definition: Tensor.hpp:199
virtual void VisitGatherLayer(const IConnectableLayer *layer, const char *name=nullptr)=0
virtual void VisitLogSoftmaxLayer(const IConnectableLayer *layer, const LogSoftmaxDescriptor &logSoftmaxDescriptor, const char *name=nullptr)=0
virtual void VisitDetectionPostProcessLayer(const IConnectableLayer *layer, const DetectionPostProcessDescriptor &descriptor, const ConstTensor &anchors, const char *name=nullptr)=0
virtual void VisitResizeBilinearLayer(const IConnectableLayer *layer, const ResizeBilinearDescriptor &resizeDesc, const char *name=nullptr)=0
virtual void VisitAbsLayer(const IConnectableLayer *layer, const char *name=nullptr)=0
virtual void VisitMaximumLayer(const IConnectableLayer *layer, const char *name=nullptr)=0
virtual void VisitActivationLayer(const IConnectableLayer *layer, const ActivationDescriptor &activationDescriptor, const char *name=nullptr)=0
virtual void VisitConcatLayer(const IConnectableLayer *layer, const OriginsDescriptor &concatDescriptor, const char *name=nullptr)
virtual void VisitComparisonLayer(const IConnectableLayer *layer, const ComparisonDescriptor &comparisonDescriptor, const char *name=nullptr)=0
virtual void VisitArgMinMaxLayer(const IConnectableLayer *layer, const ArgMinMaxDescriptor &argMinMaxDescriptor, const char *name=nullptr)=0
A PadDescriptor for the PadLayer.
An ActivationDescriptor for the ActivationLayer.
Definition: Descriptors.hpp:20
virtual void VisitQuantizeLayer(const IConnectableLayer *layer, const char *name=nullptr)=0
virtual void VisitDepthwiseConvolution2dLayer(const IConnectableLayer *layer, const DepthwiseConvolution2dDescriptor &convolution2dDescriptor, const ConstTensor &weights, const Optional< ConstTensor > &biases, const char *name=nullptr)=0
A BatchNormalizationDescriptor for the BatchNormalizationLayer.
virtual void VisitReshapeLayer(const IConnectableLayer *layer, const ReshapeDescriptor &reshapeDescriptor, const char *name=nullptr)=0
virtual void VisitDivisionLayer(const IConnectableLayer *layer, const char *name=nullptr)=0
virtual void VisitNormalizationLayer(const IConnectableLayer *layer, const NormalizationDescriptor &normalizationDescriptor, const char *name=nullptr)=0
virtual void VisitPermuteLayer(const IConnectableLayer *layer, const PermuteDescriptor &permuteDescriptor, const char *name=nullptr)=0
virtual void FinishVisit()
A L2NormalizationDescriptor for the L2NormalizationLayer.
A ViewsDescriptor for the SplitterLayer. Descriptor to configure the splitting process. Number of Views must be equal to the number of outputs, and their order must match - e.g. first view corresponds to the first output, second view to the second output, etc.
virtual void VisitPooling2dLayer(const IConnectableLayer *layer, const Pooling2dDescriptor &pooling2dDescriptor, const char *name=nullptr)=0
virtual void VisitRsqrtLayer(const IConnectableLayer *layer, const char *name=nullptr)=0
A SpaceToDepthDescriptor for the SpaceToDepthLayer.
A ReshapeDescriptor for the ReshapeLayer.
A TransposeConvolution2dDescriptor for the TransposeConvolution2dLayer.
A ElementwiseUnaryDescriptor for the ElementwiseUnaryLayer.
Definition: Descriptors.hpp:82
virtual void VisitDequantizeLayer(const IConnectableLayer *layer, const char *name=nullptr)=0
virtual void VisitFloorLayer(const IConnectableLayer *layer, const char *name=nullptr)=0
virtual void VisitInstanceNormalizationLayer(const IConnectableLayer *layer, const InstanceNormalizationDescriptor &desc, const char *name=nullptr)=0
virtual void VisitPadLayer(const IConnectableLayer *layer, const PadDescriptor &padDescriptor, const char *name=nullptr)=0
virtual void VisitInputLayer(const IConnectableLayer *layer, LayerBindingId id, const char *name=nullptr)=0
#define ARMNN_NO_DEPRECATE_WARN_BEGIN
Definition: Deprecated.hpp:33
virtual void VisitBatchNormalizationLayer(const IConnectableLayer *layer, const BatchNormalizationDescriptor &desc, const ConstTensor &mean, const ConstTensor &variance, const ConstTensor &beta, const ConstTensor &gamma, const char *name=nullptr)=0
virtual void VisitL2NormalizationLayer(const IConnectableLayer *layer, const L2NormalizationDescriptor &desc, const char *name=nullptr)=0
virtual void VisitConstantLayer(const IConnectableLayer *layer, const ConstTensor &input, const char *name=nullptr)=0
An LstmDescriptor for the LstmLayer.
virtual void VisitPreluLayer(const IConnectableLayer *layer, const char *name=nullptr)=0
virtual void VisitStandInLayer(const IConnectableLayer *layer, const StandInDescriptor &standInDescriptor, const char *name=nullptr)=0
An InstanceNormalizationDescriptor for InstanceNormalizationLayer.
virtual void VisitStridedSliceLayer(const IConnectableLayer *layer, const StridedSliceDescriptor &stridedSliceDescriptor, const char *name=nullptr)=0
virtual void VisitSpaceToDepthLayer(const IConnectableLayer *layer, const SpaceToDepthDescriptor &spaceToDepthDescriptor, const char *name=nullptr)=0
A FullyConnectedDescriptor for the FullyConnectedLayer.
virtual void VisitLstmLayer(const IConnectableLayer *layer, const LstmDescriptor &descriptor, const LstmInputParams &params, const char *name=nullptr)=0
virtual void VisitSliceLayer(const IConnectableLayer *layer, const SliceDescriptor &sliceDescriptor, const char *name=nullptr)=0
virtual void VisitStackLayer(const IConnectableLayer *layer, const StackDescriptor &stackDescriptor, const char *name=nullptr)=0
virtual void VisitMeanLayer(const IConnectableLayer *layer, const MeanDescriptor &meanDescriptor, const char *name=nullptr)=0
A StackDescriptor for the StackLayer.
virtual void VisitSoftmaxLayer(const IConnectableLayer *layer, const SoftmaxDescriptor &softmaxDescriptor, const char *name=nullptr)=0
A ResizeBilinearDescriptor for the ResizeBilinearLayer.
A SoftmaxDescriptor for the SoftmaxLayer.
virtual void VisitSubtractionLayer(const IConnectableLayer *layer, const char *name=nullptr)=0
virtual void VisitSpaceToBatchNdLayer(const IConnectableLayer *layer, const SpaceToBatchNdDescriptor &spaceToBatchNdDescriptor, const char *name=nullptr)=0
virtual void VisitQuantizedLstmLayer(const IConnectableLayer *layer, const QuantizedLstmInputParams &params, const char *name=nullptr)=0
std::vector< float > anchors({ 0.5f, 0.5f, 1.0f, 1.0f, 0.5f, 0.5f, 1.0f, 1.0f, 0.5f, 0.5f, 1.0f, 1.0f, 0.5f, 10.5f, 1.0f, 1.0f, 0.5f, 10.5f, 1.0f, 1.0f, 0.5f, 100.5f, 1.0f, 1.0f })
virtual void VisitTransposeConvolution2dLayer(const IConnectableLayer *layer, const TransposeConvolution2dDescriptor &descriptor, const ConstTensor &weights, const Optional< ConstTensor > &biases, const char *name=nullptr)=0
Interface for a layer that is connectable to other layers via InputSlots and OutputSlots.
Definition: INetwork.hpp:61
virtual void VisitMergerLayer(const IConnectableLayer *layer, const MergerDescriptor &mergerDescriptor, const char *name=nullptr)=0
virtual void VisitEqualLayer(const IConnectableLayer *layer, const char *name=nullptr)=0
A Pooling2dDescriptor for the Pooling2dLayer.
A StandInDescriptor for the StandIn layer.
A SliceDescriptor for the SliceLayer.
A DepthwiseConvolution2dDescriptor for the DepthwiseConvolution2dLayer.
A PermuteDescriptor for the PermuteLayer.
A Convolution2dDescriptor for the Convolution2dLayer.
A MeanDescriptor for the MeanLayer.
virtual void VisitElementwiseUnaryLayer(const IConnectableLayer *layer, const ElementwiseUnaryDescriptor &elementwiseUnaryDescriptor, const char *name=nullptr)=0
virtual void StartVisit()
A SpaceToBatchNdDescriptor for the SpaceToBatchNdLayer.
#define ARMNN_DEPRECATED_MSG(message)
Definition: Deprecated.hpp:43
virtual void VisitOutputLayer(const IConnectableLayer *layer, LayerBindingId id, const char *name=nullptr)=0
An ArgMinMaxDescriptor for ArgMinMaxLayer.
Definition: Descriptors.hpp:43
virtual void VisitMultiplicationLayer(const IConnectableLayer *layer, const char *name=nullptr)=0
virtual void VisitBatchToSpaceNdLayer(const IConnectableLayer *layer, const BatchToSpaceNdDescriptor &batchToSpaceNdDescriptor, const char *name=nullptr)=0
int LayerBindingId
Type of identifiers for bindable layers (inputs, outputs).
Definition: Types.hpp:168
A ResizeDescriptor for the ResizeLayer.
virtual void VisitSplitterLayer(const IConnectableLayer *layer, const ViewsDescriptor &splitterDescriptor, const char *name=nullptr)=0
A ComparisonDescriptor for the ComparisonLayer.
Definition: Descriptors.hpp:62
An OriginsDescriptor for the ConcatLayer. Descriptor to configure the concatenation process...
#define ARMNN_NO_DEPRECATE_WARN_END
Definition: Deprecated.hpp:34
A StridedSliceDescriptor for the StridedSliceLayer.