ArmNN
 20.08
TestNameAndDescriptorLayerVisitor.cpp
Go to the documentation of this file.
1 //
2 // Copyright © 2017 Arm Ltd and Contributors. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
6 #include "Network.hpp"
7 
8 #include <armnn/Exceptions.hpp>
9 
10 namespace
11 {
12 
13 #define TEST_CASE_CHECK_LAYER_VISITOR_NAME_AND_DESCRIPTOR(name) \
14 BOOST_AUTO_TEST_CASE(Check##name##LayerVisitorNameAndDescriptor) \
15 { \
16  const char* layerName = "name##Layer"; \
17  armnn::name##Descriptor descriptor = GetDescriptor<armnn::name##Descriptor>(); \
18  Test##name##LayerVisitor visitor(descriptor, layerName); \
19  armnn::Network net; \
20  armnn::IConnectableLayer *const layer = net.Add##name##Layer(descriptor, layerName); \
21  layer->Accept(visitor); \
22 }
23 
24 #define TEST_CASE_CHECK_LAYER_VISITOR_NAME_NULLPTR_AND_DESCRIPTOR(name) \
25 BOOST_AUTO_TEST_CASE(Check##name##LayerVisitorNameNullptrAndDescriptor) \
26 { \
27  armnn::name##Descriptor descriptor = GetDescriptor<armnn::name##Descriptor>(); \
28  Test##name##LayerVisitor visitor(descriptor); \
29  armnn::Network net; \
30  armnn::IConnectableLayer *const layer = net.Add##name##Layer(descriptor); \
31  layer->Accept(visitor); \
32 }
33 
34 #define TEST_SUITE_NAME_AND_DESCRIPTOR_LAYER_VISITOR(name) \
35 TEST_CASE_CHECK_LAYER_VISITOR_NAME_AND_DESCRIPTOR(name) \
36 TEST_CASE_CHECK_LAYER_VISITOR_NAME_NULLPTR_AND_DESCRIPTOR(name)
37 
38 template<typename Descriptor> Descriptor GetDescriptor();
39 
40 template<>
41 armnn::ActivationDescriptor GetDescriptor<armnn::ActivationDescriptor>()
42 {
43  armnn::ActivationDescriptor descriptor;
45  descriptor.m_A = 2.0f;
46  descriptor.m_B = 2.0f;
47 
48  return descriptor;
49 }
50 
51 template<>
52 armnn::ArgMinMaxDescriptor GetDescriptor<armnn::ArgMinMaxDescriptor>()
53 {
54  armnn::ArgMinMaxDescriptor descriptor;
56  descriptor.m_Axis = 1;
57 
58  return descriptor;
59 }
60 
61 template<>
62 armnn::BatchToSpaceNdDescriptor GetDescriptor<armnn::BatchToSpaceNdDescriptor>()
63 {
64  return armnn::BatchToSpaceNdDescriptor({ 1, 1 }, {{ 0, 0 }, { 0, 0 }});
65 }
66 
67 template<>
68 armnn::ComparisonDescriptor GetDescriptor<armnn::ComparisonDescriptor>()
69 {
71 }
72 
73 template<>
74 armnn::ConcatDescriptor GetDescriptor<armnn::ConcatDescriptor>()
75 {
76  armnn::ConcatDescriptor descriptor(2, 2);
77  for (unsigned int i = 0u; i < descriptor.GetNumViews(); ++i)
78  {
79  for (unsigned int j = 0u; j < descriptor.GetNumDimensions(); ++j)
80  {
81  descriptor.SetViewOriginCoord(i, j, i);
82  }
83  }
84 
85  return descriptor;
86 }
87 
88 template<>
89 armnn::ElementwiseUnaryDescriptor GetDescriptor<armnn::ElementwiseUnaryDescriptor>()
90 {
92 }
93 
94 template<>
95 armnn::FillDescriptor GetDescriptor<armnn::FillDescriptor>()
96 {
97  return armnn::FillDescriptor(1);
98 }
99 
100 template<>
101 armnn::GatherDescriptor GetDescriptor<armnn::GatherDescriptor>()
102 {
103  return armnn::GatherDescriptor();
104 }
105 
106 template<>
107 armnn::InstanceNormalizationDescriptor GetDescriptor<armnn::InstanceNormalizationDescriptor>()
108 {
110  descriptor.m_Gamma = 1.0f;
111  descriptor.m_Beta = 2.0f;
112  descriptor.m_Eps = 0.0001f;
114 
115  return descriptor;
116 }
117 
118 template<>
119 armnn::L2NormalizationDescriptor GetDescriptor<armnn::L2NormalizationDescriptor>()
120 {
122  descriptor.m_Eps = 0.0001f;
124 
125  return descriptor;
126 }
127 
128 template<>
129 armnn::MeanDescriptor GetDescriptor<armnn::MeanDescriptor>()
130 {
131  return armnn::MeanDescriptor({ 1, 2, }, true);
132 }
133 
134 template<>
135 armnn::NormalizationDescriptor GetDescriptor<armnn::NormalizationDescriptor>()
136 {
140  descriptor.m_NormSize = 1u;
141  descriptor.m_Alpha = 1.0f;
142  descriptor.m_Beta = 1.0f;
143  descriptor.m_K = 1.0f;
145 
146  return descriptor;
147 }
148 
149 template<>
150 armnn::PadDescriptor GetDescriptor<armnn::PadDescriptor>()
151 {
152  return armnn::PadDescriptor({{ 1, 2 }, { 3, 4 }});
153 }
154 
155 template<>
156 armnn::PermuteDescriptor GetDescriptor<armnn::PermuteDescriptor>()
157 {
158  return armnn::PermuteDescriptor({ 0, 1, 2, 3 });
159 }
160 
161 template<>
162 armnn::Pooling2dDescriptor GetDescriptor<armnn::Pooling2dDescriptor>()
163 {
164  armnn::Pooling2dDescriptor descriptor;
166  descriptor.m_PadLeft = 1u;
167  descriptor.m_PadRight = 1u;
168  descriptor.m_PadTop = 1u;
169  descriptor.m_PadBottom = 1u;
170  descriptor.m_PoolWidth = 1u;
171  descriptor.m_PoolHeight = 1u;
172  descriptor.m_StrideX = 1u;
173  descriptor.m_StrideY = 1u;
177 
178  return descriptor;
179 }
180 
181 template<>
182 armnn::ReshapeDescriptor GetDescriptor<armnn::ReshapeDescriptor>()
183 {
184  return armnn::ReshapeDescriptor({ 1, 2, 3, 4 });
185 }
186 
187 template<>
188 armnn::ResizeDescriptor GetDescriptor<armnn::ResizeDescriptor>()
189 {
190  armnn::ResizeDescriptor descriptor;
191  descriptor.m_TargetHeight = 1u;
192  descriptor.m_TargetWidth = 1u;
194 
195  return descriptor;
196 }
197 
198 template<>
199 armnn::SliceDescriptor GetDescriptor<armnn::SliceDescriptor>()
200 {
201  return armnn::SliceDescriptor({ 1, 1 }, { 2, 2 });
202 }
203 
204 template<>
205 armnn::SoftmaxDescriptor GetDescriptor<armnn::SoftmaxDescriptor>()
206 {
207  armnn::SoftmaxDescriptor descriptor;
208  descriptor.m_Beta = 2.0f;
209  descriptor.m_Axis = -1;
210 
211  return descriptor;
212 }
213 
214 template<>
215 armnn::SpaceToBatchNdDescriptor GetDescriptor<armnn::SpaceToBatchNdDescriptor>()
216 {
217  return armnn::SpaceToBatchNdDescriptor({ 2, 2 }, {{ 1, 1 } , { 1, 1 }});
218 }
219 
220 template<>
221 armnn::SpaceToDepthDescriptor GetDescriptor<armnn::SpaceToDepthDescriptor>()
222 {
224 }
225 
226 template<>
227 armnn::SplitterDescriptor GetDescriptor<armnn::SplitterDescriptor>()
228 {
229  armnn::SplitterDescriptor descriptor(2, 2);
230  for (unsigned int i = 0u; i < descriptor.GetNumViews(); ++i)
231  {
232  for (unsigned int j = 0u; j < descriptor.GetNumDimensions(); ++j)
233  {
234  descriptor.SetViewOriginCoord(i, j, i);
235  descriptor.SetViewSize(i, j, 1);
236  }
237  }
238 
239  return descriptor;
240 }
241 
242 template<>
243 armnn::StackDescriptor GetDescriptor<armnn::StackDescriptor>()
244 {
245  return armnn::StackDescriptor(1, 2, { 2, 2 });
246 }
247 
248 template<>
249 armnn::StridedSliceDescriptor GetDescriptor<armnn::StridedSliceDescriptor>()
250 {
251  armnn::StridedSliceDescriptor descriptor({ 1, 2 }, { 3, 4 }, { 3, 4 });
252  descriptor.m_BeginMask = 1;
253  descriptor.m_EndMask = 1;
254  descriptor.m_ShrinkAxisMask = 1;
255  descriptor.m_EllipsisMask = 1;
256  descriptor.m_NewAxisMask = 1;
257  descriptor.m_DataLayout = armnn::DataLayout::NHWC;
258 
259  return descriptor;
260 }
261 
262 template<>
263 armnn::TransposeDescriptor GetDescriptor<armnn::TransposeDescriptor>()
264 {
265  return armnn::TransposeDescriptor({ 0, 1, 2, 3 });
266 }
267 
268 } // anonymous namespace
269 
270 BOOST_AUTO_TEST_SUITE(TestNameAndDescriptorLayerVisitor)
271 
299 
BOOST_AUTO_TEST_SUITE(TensorflowLiteParser)
float m_Eps
Used to avoid dividing by zero.
A ViewsDescriptor for the SplitterLayer.
uint32_t m_PadBottom
Padding bottom value in the height dimension.
void Slice(const TensorInfo &inputInfo, const SliceDescriptor &descriptor, const void *inputData, void *outputData, unsigned int dataTypeSize)
Definition: Slice.cpp:16
float m_K
Kappa value used for the across channel normalization equation.
int m_Axis
Scalar, defaulted to the last index (-1), specifying the dimension the activation will be performed o...
uint32_t m_PadLeft
Padding left value in the width dimension.
A ReshapeDescriptor for the ReshapeLayer.
void ArgMinMax(Decoder< float > &in, int32_t *out, const TensorInfo &inputTensorInfo, const TensorInfo &outputTensorInfo, ArgMinMaxFunction function, int axis)
Definition: ArgMinMax.cpp:15
void Fill(Encoder< float > &output, const TensorShape &desiredOutputShape, const float value)
Creates a tensor and fills it with a scalar value.
Definition: Fill.cpp:13
A ComparisonDescriptor for the ComparisonLayer.
Definition: Descriptors.hpp:70
uint32_t m_PoolWidth
Pooling width value.
float m_Alpha
Alpha value for the normalization equation.
float m_Gamma
Gamma, the scale scalar value applied for the normalized tensor. Defaults to 1.0. ...
float m_Beta
Exponentiation value.
PaddingMethod m_PaddingMethod
The padding method to be used. (Exclude, IgnoreValue).
ArgMinMaxFunction m_Function
Specify if the function is to find Min or Max.
Definition: Descriptors.hpp:64
uint32_t m_PadTop
Padding top value in the height dimension.
void Transpose(const armnn::TensorShape &dstShape, const armnn::PermutationVector &mappings, const void *src, void *dst, size_t dataTypeSize)
Definition: Transpose.cpp:120
void DepthToSpace(const TensorInfo &inputInfo, const DepthToSpaceDescriptor &descriptor, const void *inputData, void *outputData, unsigned int dataTypeSize)
DataLayout m_DataLayout
The data layout to be used (NCHW, NHWC).
int32_t m_BeginMask
Begin mask value.
A SpaceToDepthDescriptor for the SpaceToDepthLayer.
A BatchToSpaceNdDescriptor for the BatchToSpaceNdLayer.
uint32_t m_StrideX
Stride value when proceeding through input for the width dimension.
void Stack(const StackQueueDescriptor &data, std::vector< std::unique_ptr< Decoder< float >>> &inputs, Encoder< float > &output)
Definition: Stack.cpp:12
NormalizationAlgorithmMethod m_NormMethodType
Normalization method algorithm to use (LocalBrightness, LocalContrast).
A ResizeDescriptor for the ResizeLayer.
DataLayout m_DataLayout
The data layout to be used (NCHW, NHWC).
A StackDescriptor for the StackLayer.
uint32_t m_PoolHeight
Pooling height value.
A PadDescriptor for the PadLayer.
void Permute(const armnn::TensorShape &dstShape, const armnn::PermutationVector &mappings, const void *src, void *dst, size_t dataTypeSize)
Definition: Permute.cpp:131
uint32_t m_PadRight
Padding right value in the width dimension.
float m_Eps
Epsilon, small scalar value added to variance to avoid dividing by zero. Defaults to 1e-12f...
A L2NormalizationDescriptor for the L2NormalizationLayer.
An ArgMinMaxDescriptor for ArgMinMaxLayer.
Definition: Descriptors.hpp:51
void Gather(const TensorInfo &paramsInfo, const TensorInfo &indicesInfo, const TensorInfo &outputInfo, Decoder< float > &params, const int32_t *indices, Encoder< float > &output, const int32_t axis)
Definition: Gather.cpp:18
An OriginsDescriptor for the ConcatLayer.
uint32_t m_TargetWidth
Target width value.
float Activation(float in, ActivationFunction function, float a, float b)
Definition: Activation.cpp:13
A GatherDescriptor for the GatherLayer.
void LogSoftmax(Decoder< float > &input, Encoder< float > &output, const TensorInfo &inputInfo, const LogSoftmaxDescriptor &descriptor)
Definition: LogSoftmax.cpp:30
An ActivationDescriptor for the ActivationLayer.
Definition: Descriptors.hpp:20
uint32_t m_TargetHeight
Target height value.
A SliceDescriptor for the SliceLayer.
void SpaceToBatchNd(const TensorInfo &inputInfo, const TensorInfo &outputInfo, const SpaceToBatchNdDescriptor &params, Decoder< float > &inputData, Encoder< float > &outputData)
DataLayout m_DataLayout
The data layout to be used (NCHW, NHWC).
DataLayout m_DataLayout
The data layout to be used (NCHW, NHWC).
float m_Beta
Beta, the offset scalar value applied for the normalized tensor. Defaults to 1.0. ...
A SpaceToBatchNdDescriptor for the SpaceToBatchNdLayer.
NormalizationAlgorithmChannel m_NormChannelType
Normalization channel algorithm to use (Across, Within).
float m_A
Alpha upper bound value used by the activation functions. (BoundedReLu, Linear, TanH, Elu).
Definition: Descriptors.hpp:45
BOOST_AUTO_TEST_SUITE_END()
void StridedSlice(const TensorInfo &inputInfo, const StridedSliceDescriptor &params, const void *inputData, void *outputData, unsigned int dataTypeSize)
A ElementwiseUnaryDescriptor for the ElementwiseUnaryLayer.
Definition: Descriptors.hpp:90
PoolingAlgorithm m_PoolType
The pooling algorithm to use (Max. Average, L2).
The padding fields count, but are ignored.
Jarret 2009: Local Contrast Normalization.
OutputShapeRounding m_OutputShapeRounding
The rounding method for the output shape. (Floor, Ceiling).
A MeanDescriptor for the MeanLayer.
void Mean(const armnn::TensorInfo &inputInfo, const armnn::TensorInfo &outputInfo, const std::vector< unsigned int > &axis, Decoder< float > &input, Encoder< float > &output)
Definition: Mean.cpp:71
A TransposeDescriptor for the TransposeLayer.
A StridedSliceDescriptor for the StridedSliceLayer.
int m_Axis
Axis to reduce across the input tensor.
Definition: Descriptors.hpp:66
void SpaceToDepth(const TensorInfo &inputInfo, const TensorInfo &outputInfo, const SpaceToDepthDescriptor &params, Decoder< float > &inputData, Encoder< float > &outputData)
void BatchToSpaceNd(const DataLayoutIndexed &dataLayout, const TensorInfo &inputTensorInfo, const TensorInfo &outputTensorInfo, const std::vector< unsigned int > &blockShape, const std::vector< std::pair< unsigned int, unsigned int >> &cropsData, Decoder< float > &inputDecoder, Encoder< float > &outputEncoder)
void Pad(const TensorInfo &inputInfo, const TensorInfo &outputInfo, const PadQueueDescriptor &data)
Definition: Pad.cpp:39
A Pooling2dDescriptor for the Pooling2dLayer.
A NormalizationDescriptor for the NormalizationLayer.
void Pooling2d(Decoder< float > &rInputDecoder, Encoder< float > &rOutputEncoder, const TensorInfo &inputInfo, const TensorInfo &outputInfo, const Pooling2dDescriptor &params)
Computes the Pooling2d operation.
Definition: Pooling2d.cpp:143
DataLayout m_DataLayout
The data layout to be used (NCHW, NHWC).
An InstanceNormalizationDescriptor for InstanceNormalizationLayer.
void Splitter(const SplitterQueueDescriptor &data)
Definition: Splitter.hpp:17
void Softmax(Decoder< float > &in, Encoder< float > &out, const TensorInfo &inputTensorInfo, float beta, int axis)
Computes the softmax function on some inputs, into outputs, with a shape given by tensorInfo...
Definition: Softmax.cpp:17
#define TEST_SUITE_NAME_AND_DESCRIPTOR_LAYER_VISITOR(name)
float m_B
Beta lower bound value used by the activation functions. (BoundedReLu, Linear, TanH).
Definition: Descriptors.hpp:47
A SoftmaxDescriptor for the SoftmaxLayer.
float m_Beta
Beta value for the normalization equation.
uint32_t m_NormSize
Depth radius value.
ActivationFunction m_Function
The activation function to use (Sigmoid, TanH, Linear, ReLu, BoundedReLu, SoftReLu, LeakyReLu, Abs, Sqrt, Square, Elu).
Definition: Descriptors.hpp:43
void Resize(Decoder< float > &in, const TensorInfo &inputInfo, Encoder< float > &out, const TensorInfo &outputInfo, DataLayoutIndexed dataLayout, armnn::ResizeMethod resizeMethod, bool alignCorners, bool halfPixelCenters)
Definition: Resize.cpp:65
uint32_t m_StrideY
Stride value when proceeding through input for the height dimension.
A FillDescriptor for the FillLayer.
A PermuteDescriptor for the PermuteLayer.