ArmNN
 20.02
TestNameAndDescriptorLayerVisitor.cpp
Go to the documentation of this file.
1 //
2 // Copyright © 2017 Arm Ltd. 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::InstanceNormalizationDescriptor GetDescriptor<armnn::InstanceNormalizationDescriptor>()
96 {
98  descriptor.m_Gamma = 1.0f;
99  descriptor.m_Beta = 2.0f;
100  descriptor.m_Eps = 0.0001f;
102 
103  return descriptor;
104 }
105 
106 template<>
107 armnn::L2NormalizationDescriptor GetDescriptor<armnn::L2NormalizationDescriptor>()
108 {
110  descriptor.m_Eps = 0.0001f;
112 
113  return descriptor;
114 }
115 
116 template<>
117 armnn::MeanDescriptor GetDescriptor<armnn::MeanDescriptor>()
118 {
119  return armnn::MeanDescriptor({ 1, 2, }, true);
120 }
121 
122 template<>
123 armnn::NormalizationDescriptor GetDescriptor<armnn::NormalizationDescriptor>()
124 {
128  descriptor.m_NormSize = 1u;
129  descriptor.m_Alpha = 1.0f;
130  descriptor.m_Beta = 1.0f;
131  descriptor.m_K = 1.0f;
133 
134  return descriptor;
135 }
136 
137 template<>
138 armnn::PadDescriptor GetDescriptor<armnn::PadDescriptor>()
139 {
140  return armnn::PadDescriptor({{ 1, 2 }, { 3, 4 }});
141 }
142 
143 template<>
144 armnn::PermuteDescriptor GetDescriptor<armnn::PermuteDescriptor>()
145 {
146  return armnn::PermuteDescriptor({ 0, 1, 2, 3 });
147 }
148 
149 template<>
150 armnn::Pooling2dDescriptor GetDescriptor<armnn::Pooling2dDescriptor>()
151 {
152  armnn::Pooling2dDescriptor descriptor;
154  descriptor.m_PadLeft = 1u;
155  descriptor.m_PadRight = 1u;
156  descriptor.m_PadTop = 1u;
157  descriptor.m_PadBottom = 1u;
158  descriptor.m_PoolWidth = 1u;
159  descriptor.m_PoolHeight = 1u;
160  descriptor.m_StrideX = 1u;
161  descriptor.m_StrideY = 1u;
165 
166  return descriptor;
167 }
168 
169 template<>
170 armnn::ReshapeDescriptor GetDescriptor<armnn::ReshapeDescriptor>()
171 {
172  return armnn::ReshapeDescriptor({ 1, 2, 3, 4 });
173 }
174 
175 template<>
176 armnn::ResizeDescriptor GetDescriptor<armnn::ResizeDescriptor>()
177 {
178  armnn::ResizeDescriptor descriptor;
179  descriptor.m_TargetHeight = 1u;
180  descriptor.m_TargetWidth = 1u;
182 
183  return descriptor;
184 }
185 
186 template<>
187 armnn::SliceDescriptor GetDescriptor<armnn::SliceDescriptor>()
188 {
189  return armnn::SliceDescriptor({ 1, 1 }, { 2, 2 });
190 }
191 
192 template<>
193 armnn::SoftmaxDescriptor GetDescriptor<armnn::SoftmaxDescriptor>()
194 {
195  armnn::SoftmaxDescriptor descriptor;
196  descriptor.m_Beta = 2.0f;
197  descriptor.m_Axis = -1;
198 
199  return descriptor;
200 }
201 
202 template<>
203 armnn::SpaceToBatchNdDescriptor GetDescriptor<armnn::SpaceToBatchNdDescriptor>()
204 {
205  return armnn::SpaceToBatchNdDescriptor({ 2, 2 }, {{ 1, 1 } , { 1, 1 }});
206 }
207 
208 template<>
209 armnn::SpaceToDepthDescriptor GetDescriptor<armnn::SpaceToDepthDescriptor>()
210 {
212 }
213 
214 template<>
215 armnn::SplitterDescriptor GetDescriptor<armnn::SplitterDescriptor>()
216 {
217  armnn::SplitterDescriptor descriptor(2, 2);
218  for (unsigned int i = 0u; i < descriptor.GetNumViews(); ++i)
219  {
220  for (unsigned int j = 0u; j < descriptor.GetNumDimensions(); ++j)
221  {
222  descriptor.SetViewOriginCoord(i, j, i);
223  descriptor.SetViewSize(i, j, 1);
224  }
225  }
226 
227  return descriptor;
228 }
229 
230 template<>
231 armnn::StackDescriptor GetDescriptor<armnn::StackDescriptor>()
232 {
233  return armnn::StackDescriptor(1, 2, { 2, 2 });
234 }
235 
236 template<>
237 armnn::StridedSliceDescriptor GetDescriptor<armnn::StridedSliceDescriptor>()
238 {
239  armnn::StridedSliceDescriptor descriptor({ 1, 2 }, { 3, 4 }, { 3, 4 });
240  descriptor.m_BeginMask = 1;
241  descriptor.m_EndMask = 1;
242  descriptor.m_ShrinkAxisMask = 1;
243  descriptor.m_EllipsisMask = 1;
244  descriptor.m_NewAxisMask = 1;
245  descriptor.m_DataLayout = armnn::DataLayout::NHWC;
246 
247  return descriptor;
248 }
249 
250 template<>
251 armnn::TransposeDescriptor GetDescriptor<armnn::TransposeDescriptor>()
252 {
253  return armnn::TransposeDescriptor({ 0, 1, 2, 3 });
254 }
255 
256 } // anonymous namespace
257 
258 BOOST_AUTO_TEST_SUITE(TestNameAndDescriptorLayerVisitor)
259 
285 
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
A ComparisonDescriptor for the ComparisonLayer.
Definition: Descriptors.hpp:62
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:56
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.
void Pad(const TensorInfo &inputInfo, const TensorInfo &outputInfo, std::vector< std::pair< unsigned int, unsigned int >> m_padList, const T *inputData, T *outData, const float padValue)
Definition: Pad.cpp:22
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:121
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:43
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
void Resize(Decoder< float > &in, const TensorInfo &inputInfo, Encoder< float > &out, const TensorInfo &outputInfo, DataLayoutIndexed dataLayout, armnn::ResizeMethod resizeMethod, bool alignCorners)
Definition: Resize.cpp:35
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).
Definition: Descriptors.hpp:37
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:82
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:58
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)
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:39
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).
Definition: Descriptors.hpp:35
uint32_t m_StrideY
Stride value when proceeding through input for the height dimension.
A PermuteDescriptor for the PermuteLayer.