2 // Copyright © 2017 Arm Ltd. All rights reserved.
3 // SPDX-License-Identifier: MIT
7 #include <armnn/ArmNN.hpp>
8 #include <armnn/Tensor.hpp>
11 #include "TensorCopyUtils.hpp"
12 #include "WorkloadTestUtils.hpp"
13 #include "TensorUtils.hpp"
14 #include "Permute.hpp"
16 #include <backendsCommon/CpuTensorHandle.hpp>
17 #include <backendsCommon/IBackendInternal.hpp>
18 #include <backendsCommon/IMemoryManager.hpp>
19 #include <reference/workloads/Decoders.hpp>
20 #include <reference/workloads/Encoders.hpp>
21 #include <test/TensorHelpers.hpp>
23 #include <boost/multi_array.hpp>
24 #include <boost/assert.hpp>
32 class IWorkloadFactory;
35 template <std::size_t n>
36 boost::array<unsigned int, n> GetTensorShapeAsArray(const armnn::TensorInfo& tensorInfo)
38 BOOST_ASSERT_MSG(n == tensorInfo.GetNumDimensions(),
39 "Attempting to construct a shape array of mismatching size");
41 boost::array<unsigned int, n> shape;
42 for (unsigned int i = 0; i < n; i++)
44 shape[i] = tensorInfo.GetShape()[i];
49 template <typename T, std::size_t n>
50 struct LayerTestResult
52 LayerTestResult(const armnn::TensorInfo& outputInfo)
54 auto shape( GetTensorShapeAsArray<n>(outputInfo) );
56 outputExpected.resize(shape);
58 compareBoolean = false;
61 boost::multi_array<T, n> output;
62 boost::multi_array<T, n> outputExpected;
67 LayerTestResult<float, 4> SimpleConvolution2d3x5Test(
68 armnn::IWorkloadFactory& workloadFactory,
69 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
71 const armnn::DataLayout layout);
73 LayerTestResult<float, 4> SimpleConvolution2d3x3Test(
74 armnn::IWorkloadFactory& workloadFactory,
75 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
77 const armnn::DataLayout layout);
79 LayerTestResult<float, 4> SimpleConvolution2d3x3Stride2x2Test(
80 armnn::IWorkloadFactory& workloadFactory,
81 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
83 const armnn::DataLayout layout);
85 LayerTestResult<float, 4> SimpleConvolution2d3x3NhwcTest(
86 armnn::IWorkloadFactory& workloadFactory,
87 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
90 LayerTestResult<float, 4> Convolution2dAsymmetricPaddingLargerThanHalfKernelSizeTest(
91 armnn::IWorkloadFactory& workloadFactory,
92 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
93 armnn::DataLayout layout);
95 LayerTestResult<float, 4> Convolution2dAsymmetricPaddingTest(
96 armnn::IWorkloadFactory& workloadFactory,
97 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
98 armnn::DataLayout layout);
100 LayerTestResult<float, 4> Convolution1dTest(
101 armnn::IWorkloadFactory& workloadFactory,
102 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
105 LayerTestResult<uint8_t, 4> Convolution1dUint8Test(
106 armnn::IWorkloadFactory& workloadFactory,
107 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
110 LayerTestResult<float, 4> DepthwiseConvolution2dTest(
111 armnn::IWorkloadFactory& workloadFactory,
112 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
114 const armnn::DataLayout layout);
116 template<armnn::DataType ArmnnType, armnn::DataType ArmnnBType, typename T = armnn::ResolveType<ArmnnType>>
117 LayerTestResult<T, 4> Convolution2d3x3Dilation3x3Test(
118 armnn::IWorkloadFactory& workloadFactory,
119 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
121 const armnn::DataLayout layout);
123 template<armnn::DataType ArmnnType, armnn::DataType ArmnnBType, typename T = armnn::ResolveType<ArmnnType>>
124 LayerTestResult<T, 4> Convolution2d2x3x3Dilation3x3Test(
125 armnn::IWorkloadFactory& workloadFactory,
126 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
128 const armnn::DataLayout layout);
130 template<armnn::DataType ArmnnType, armnn::DataType ArmnnBType, typename T = armnn::ResolveType<ArmnnType>>
131 LayerTestResult<T, 4> Convolution2d2x2Dilation2x2Padding2x2Stride3x3Test(
132 armnn::IWorkloadFactory &workloadFactory,
133 const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager,
135 const armnn::DataLayout layout);
137 template<armnn::DataType ArmnnType, armnn::DataType ArmnnBType, typename T = armnn::ResolveType<ArmnnType>>
138 LayerTestResult<T, 4> DepthwiseConvolution2d3x3Dilation3x3Test(
139 armnn::IWorkloadFactory& workloadFactory,
140 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
142 const armnn::DataLayout layout);
144 template<armnn::DataType ArmnnType, armnn::DataType ArmnnBType, typename T = armnn::ResolveType<ArmnnType>>
145 LayerTestResult<T, 4> DepthwiseConvolution2d2x3x3Dilation3x3Test(
146 armnn::IWorkloadFactory& workloadFactory,
147 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
149 const armnn::DataLayout layout);
151 LayerTestResult<float, 4> DepthwiseConvolution2dDepthNhwcTest(
152 armnn::IWorkloadFactory& workloadFactory,
153 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
156 LayerTestResult<float, 4> DepthwiseConvolution2dDepthMul1Test(
157 armnn::IWorkloadFactory& workloadFactory,
158 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
160 const armnn::DataLayout layout);
162 LayerTestResult<float, 4> DepthwiseConvolution2dAsymmetricTest(
163 armnn::IWorkloadFactory& workloadFactory,
164 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
166 const armnn::DataLayout layout);
168 LayerTestResult<float, 4> SimpleDepthwiseConvolution2d3x3Dilation3x3NhwcTest(
169 armnn::IWorkloadFactory& workloadFactory,
170 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
172 LayerTestResult<float, 4> CompareDepthwiseConvolution2dFloatTest(
173 armnn::IWorkloadFactory& workloadFactory,
174 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
175 armnn::IWorkloadFactory& refWorkloadFactory,
176 const armnn::DataLayout layout);
178 LayerTestResult<uint8_t, 4> CompareDepthwiseConvolution2dUint8Test(
179 armnn::IWorkloadFactory& workloadFactory,
180 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
181 armnn::IWorkloadFactory& refWorkloadFactory,
182 const armnn::DataLayout layout);
184 LayerTestResult<float, 4> SimpleMaxPooling2dSize2x2Stride2x2Test(
185 armnn::IWorkloadFactory& workloadFactory,
186 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
187 bool forceNoPadding);
189 LayerTestResult<uint8_t, 4> SimpleMaxPooling2dSize2x2Stride2x2Uint8Test(
190 armnn::IWorkloadFactory& workloadFactory,
191 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
192 bool forceNoPadding);
194 LayerTestResult<int16_t, 4> SimpleMaxPooling2dSize2x2Stride2x2Int16Test(
195 armnn::IWorkloadFactory& workloadFactory,
196 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
197 bool forceNoPadding);
199 LayerTestResult<float, 4> SimpleMaxPooling2dSize3x3Stride2x4Test(
200 armnn::IWorkloadFactory& workloadFactory,
201 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
202 bool forceNoPadding);
204 LayerTestResult<uint8_t, 4> SimpleMaxPooling2dSize3x3Stride2x4Uint8Test(
205 armnn::IWorkloadFactory& workloadFactory,
206 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
207 bool forceNoPadding );
209 LayerTestResult<int16_t, 4> SimpleMaxPooling2dSize3x3Stride2x4Int16Test(
210 armnn::IWorkloadFactory& workloadFactory,
211 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
212 bool forceNoPadding );
214 LayerTestResult<float, 4> SimpleMaxPooling2dTest(
215 armnn::IWorkloadFactory& workloadFactory,
216 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
217 const armnn::DataLayout dataLayout);
219 LayerTestResult<uint8_t, 4> SimpleMaxPooling2dUint8Test(
220 armnn::IWorkloadFactory& workloadFactory,
221 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
222 const armnn::DataLayout dataLayout);
224 LayerTestResult<int16_t, 4> SimpleMaxPooling2dInt16Test(
225 armnn::IWorkloadFactory& workloadFactory,
226 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
227 const armnn::DataLayout dataLayout);
229 LayerTestResult<float, 4> IgnorePaddingSimpleMaxPooling2dTest(
230 armnn::IWorkloadFactory& workloadFactory,
231 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
233 LayerTestResult<uint8_t, 4> IgnorePaddingSimpleMaxPooling2dUint8Test(
234 armnn::IWorkloadFactory& workloadFactory,
235 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
237 LayerTestResult<int16_t, 4> IgnorePaddingSimpleMaxPooling2dInt16Test(
238 armnn::IWorkloadFactory& workloadFactory,
239 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
241 LayerTestResult<float, 4> IgnorePaddingMaxPooling2dSize3Test(
242 armnn::IWorkloadFactory& workloadFactory,
243 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
245 LayerTestResult<uint8_t, 4> IgnorePaddingMaxPooling2dSize3Uint8Test(
246 armnn::IWorkloadFactory& workloadFactory,
247 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
249 LayerTestResult<int16_t, 4> IgnorePaddingMaxPooling2dSize3Int16Test(
250 armnn::IWorkloadFactory& workloadFactory,
251 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
253 LayerTestResult<float, 4> SimpleAveragePooling2dTest(
254 armnn::IWorkloadFactory& workloadFactory,
255 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
256 const armnn::DataLayout dataLayout);
258 LayerTestResult<uint8_t, 4> SimpleAveragePooling2dUint8Test(
259 armnn::IWorkloadFactory& workloadFactory,
260 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
261 const armnn::DataLayout dataLayout);
263 LayerTestResult<int16_t, 4> SimpleAveragePooling2dInt16Test(
264 armnn::IWorkloadFactory& workloadFactory,
265 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
266 const armnn::DataLayout dataLayout);
268 LayerTestResult<float, 4> LargeTensorsAveragePooling2dTest(
269 armnn::IWorkloadFactory& workloadFactory,
270 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
272 LayerTestResult<uint8_t, 4> LargeTensorsAveragePooling2dUint8Test(
273 armnn::IWorkloadFactory& workloadFactory,
274 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
276 LayerTestResult<int16_t, 4> LargeTensorsAveragePooling2dInt16Test(
277 armnn::IWorkloadFactory& workloadFactory,
278 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
280 LayerTestResult<float, 4> IgnorePaddingAveragePooling2dSize3x2Stride2x2Test(
281 armnn::IWorkloadFactory& workloadFactory,
282 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
283 bool forceNoPadding);
285 LayerTestResult<float, 4> IgnorePaddingSimpleAveragePooling2dTest(
286 armnn::IWorkloadFactory& workloadFactory,
287 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
289 LayerTestResult<uint8_t, 4> IgnorePaddingSimpleAveragePooling2dUint8Test(
290 armnn::IWorkloadFactory& workloadFactory,
291 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
293 LayerTestResult<int16_t, 4> IgnorePaddingSimpleAveragePooling2dInt16Test(
294 armnn::IWorkloadFactory& workloadFactory,
295 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
297 LayerTestResult<float, 4> IgnorePaddingSimpleAveragePooling2dNoPaddingTest(
298 armnn::IWorkloadFactory& workloadFactory,
299 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
301 LayerTestResult<uint8_t, 4> IgnorePaddingSimpleAveragePooling2dNoPaddingUint8Test(
302 armnn::IWorkloadFactory& workloadFactory,
303 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
305 LayerTestResult<int16_t, 4> IgnorePaddingSimpleAveragePooling2dNoPaddingInt16Test(
306 armnn::IWorkloadFactory& workloadFactory,
307 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
309 LayerTestResult<float, 4> IgnorePaddingAveragePooling2dSize3Test(
310 armnn::IWorkloadFactory& workloadFactory,
311 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
313 LayerTestResult<uint8_t, 4> IgnorePaddingAveragePooling2dSize3Uint8Test(
314 armnn::IWorkloadFactory& workloadFactory,
315 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
317 LayerTestResult<int16_t, 4> IgnorePaddingAveragePooling2dSize3Int16Test(
318 armnn::IWorkloadFactory& workloadFactory,
319 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
321 LayerTestResult<float, 4> SimpleL2Pooling2dTest(
322 armnn::IWorkloadFactory& workloadFactory,
323 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
324 const armnn::DataLayout dataLayout);
326 LayerTestResult<uint8_t, 4> SimpleL2Pooling2dUint8Test(
327 armnn::IWorkloadFactory& workloadFactory,
328 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
329 const armnn::DataLayout dataLayout);
331 LayerTestResult<int16_t, 4> SimpleL2Pooling2dInt16Test(
332 armnn::IWorkloadFactory& workloadFactory,
333 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
334 const armnn::DataLayout dataLayout);
336 LayerTestResult<float, 4> L2Pooling2dSize3Stride1Test(
337 armnn::IWorkloadFactory& workloadFactory,
338 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
340 LayerTestResult<uint8_t, 4> L2Pooling2dSize3Stride1Uint8Test(
341 armnn::IWorkloadFactory& workloadFactory,
342 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
344 LayerTestResult<int16_t, 4> L2Pooling2dSize3Stride1Int16Test(
345 armnn::IWorkloadFactory& workloadFactory,
346 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
348 LayerTestResult<float, 4> L2Pooling2dSize3Stride3Test(
349 armnn::IWorkloadFactory& workloadFactory,
350 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
352 LayerTestResult<uint8_t, 4> L2Pooling2dSize3Stride3Uint8Test(
353 armnn::IWorkloadFactory& workloadFactory,
354 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
356 LayerTestResult<int16_t, 4> L2Pooling2dSize3Stride3Int16Test(
357 armnn::IWorkloadFactory& workloadFactory,
358 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
360 LayerTestResult<float, 4> L2Pooling2dSize3Stride4Test(
361 armnn::IWorkloadFactory& workloadFactory,
362 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
364 LayerTestResult<uint8_t, 4> L2Pooling2dSize3Stride4Uint8Test(
365 armnn::IWorkloadFactory& workloadFactory,
366 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
368 LayerTestResult<int16_t, 4> L2Pooling2dSize3Stride4Int16Test(
369 armnn::IWorkloadFactory& workloadFactory,
370 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
372 LayerTestResult<float, 4> L2Pooling2dSize7Test(
373 armnn::IWorkloadFactory& workloadFactory,
374 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
376 LayerTestResult<uint8_t, 4> L2Pooling2dSize7Uint8Test(
377 armnn::IWorkloadFactory& workloadFactory,
378 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
380 LayerTestResult<int16_t, 4> L2Pooling2dSize7Int16Test(
381 armnn::IWorkloadFactory& workloadFactory,
382 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
384 LayerTestResult<float, 4> L2Pooling2dSize9Test(
385 armnn::IWorkloadFactory& workloadFactory,
386 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
388 LayerTestResult<uint8_t, 4> L2Pooling2dSize9Uint8Test(
389 armnn::IWorkloadFactory& workloadFactory,
390 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
392 LayerTestResult<int16_t, 4> L2Pooling2dSize9Int16Test(
393 armnn::IWorkloadFactory& workloadFactory,
394 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
396 LayerTestResult<float, 4> IgnorePaddingSimpleL2Pooling2dTest(
397 armnn::IWorkloadFactory& workloadFactory,
398 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
400 LayerTestResult<uint8_t, 4> IgnorePaddingSimpleL2Pooling2dUint8Test(
401 armnn::IWorkloadFactory& workloadFactory,
402 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
404 LayerTestResult<int16_t, 4> IgnorePaddingSimpleL2Pooling2dInt16Test(
405 armnn::IWorkloadFactory& workloadFactory,
406 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
408 LayerTestResult<float, 4> IgnorePaddingL2Pooling2dSize3Test(
409 armnn::IWorkloadFactory& workloadFactory,
410 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
412 LayerTestResult<uint8_t, 4> IgnorePaddingL2Pooling2dSize3Uint8Test(
413 armnn::IWorkloadFactory& workloadFactory,
414 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
416 LayerTestResult<int16_t, 4> IgnorePaddingL2Pooling2dSize3Int16Test(
417 armnn::IWorkloadFactory& workloadFactory,
418 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
420 LayerTestResult<float, 4> AsymmetricNonSquarePooling2dTest(
421 armnn::IWorkloadFactory& workloadFactory,
422 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
424 LayerTestResult<uint8_t, 4> AsymmetricNonSquarePooling2dUint8Test(
425 armnn::IWorkloadFactory& workloadFactory,
426 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
428 LayerTestResult<int16_t, 4> AsymmetricNonSquarePooling2dInt16Test(
429 armnn::IWorkloadFactory& workloadFactory,
430 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
432 LayerTestResult<float, 4> ComparePooling2dTest(
433 armnn::IWorkloadFactory& workloadFactory,
434 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
435 armnn::IWorkloadFactory& refWorkloadFactory,
436 armnn::PoolingAlgorithm poolingType);
438 LayerTestResult<uint8_t, 4> ComparePooling2dUint8Test(
439 armnn::IWorkloadFactory& workloadFactory,
440 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
441 armnn::IWorkloadFactory& refWorkloadFactory,
442 armnn::PoolingAlgorithm poolingType);
444 LayerTestResult<int16_t, 4> ComparePooling2dInt16Test(
445 armnn::IWorkloadFactory& workloadFactory,
446 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
447 armnn::IWorkloadFactory& refWorkloadFactory,
448 armnn::PoolingAlgorithm poolingType);
450 LayerTestResult<float, 4> ConstantLinearActivationTest(
451 armnn::IWorkloadFactory& workloadFactory,
452 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
454 LayerTestResult<float, 4> SimpleNormalizationAcrossTest(
455 armnn::IWorkloadFactory& workloadFactory,
456 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
458 LayerTestResult<float, 4> SimpleNormalizationWithinTest(
459 armnn::IWorkloadFactory& workloadFactory,
460 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
462 LayerTestResult<float,4> SimpleNormalizationAcrossNhwcTest(
463 armnn::IWorkloadFactory& workloadFactory,
464 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
466 LayerTestResult<float, 2> SimpleSoftmaxTest(
467 armnn::IWorkloadFactory& workloadFactory,
468 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
471 LayerTestResult<float, 3> Simple3dSoftmaxTest(
472 armnn::IWorkloadFactory& workloadFactory,
473 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
476 LayerTestResult<float, 4> Simple4dSoftmaxTest(
477 armnn::IWorkloadFactory& workloadFactory,
478 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
481 LayerTestResult<uint8_t, 2> SimpleSoftmaxUint8Test(
482 armnn::IWorkloadFactory& workloadFactory,
483 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
486 LayerTestResult<uint8_t,3> Simple3dSoftmaxUint8Test(
487 armnn::IWorkloadFactory& workloadFactory,
488 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
491 LayerTestResult<uint8_t,4> Simple4dSoftmaxUint8Test(
492 armnn::IWorkloadFactory& workloadFactory,
493 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
496 LayerTestResult<int16_t,2> SimpleSoftmaxUint16Test(
497 armnn::IWorkloadFactory& workloadFactory,
498 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
501 LayerTestResult<int16_t,3> Simple3dSoftmaxUint16Test(
502 armnn::IWorkloadFactory& workloadFactory,
503 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
506 LayerTestResult<int16_t,4> Simple4dSoftmaxUint16Test(
507 armnn::IWorkloadFactory& workloadFactory,
508 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
511 LayerTestResult<float, 4> SimpleSigmoidTest(
512 armnn::IWorkloadFactory& workloadFactory,
513 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
515 template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
516 LayerTestResult<T, 4> SimpleReshapeTest(
517 armnn::IWorkloadFactory& workloadFactory,
518 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
520 LayerTestResult<float, 4> SimpleFloorTest(
521 armnn::IWorkloadFactory& workloadFactory,
522 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
524 LayerTestResult<float, 1> Concatenation1dTest(
525 armnn::IWorkloadFactory& workloadFactory,
526 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
528 LayerTestResult<float, 2> Concatenation2dDim0Test(
529 armnn::IWorkloadFactory& workloadFactory,
530 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
532 LayerTestResult<float, 2> Concatenation2dDim1Test(
533 armnn::IWorkloadFactory& workloadFactory,
534 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
536 LayerTestResult<float, 2> Concatenation2dDim0DiffInputDimsTest(
537 armnn::IWorkloadFactory& workloadFactory,
538 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
540 LayerTestResult<float, 2> Concatenation2dDim1DiffInputDimsTest(
541 armnn::IWorkloadFactory& workloadFactory,
542 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
544 LayerTestResult<float, 3> Concatenation3dDim0Test(
545 armnn::IWorkloadFactory& workloadFactory,
546 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
548 LayerTestResult<float, 3> Concatenation3dDim1Test(
549 armnn::IWorkloadFactory& workloadFactory,
550 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
552 LayerTestResult<float, 3> Concatenation3dDim2Test(
553 armnn::IWorkloadFactory& workloadFactory,
554 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
557 LayerTestResult<float, 3> Concatenation3dDim0DiffInputDimsTest(
558 armnn::IWorkloadFactory& workloadFactory,
559 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
561 LayerTestResult<float, 3> Concatenation3dDim1DiffInputDimsTest(
562 armnn::IWorkloadFactory& workloadFactory,
563 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
565 LayerTestResult<float, 3> Concatenation3dDim2DiffInputDimsTest(
566 armnn::IWorkloadFactory& workloadFactory,
567 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
570 LayerTestResult<float, 4> Concatenation4dDim0Test(
571 armnn::IWorkloadFactory& workloadFactory,
572 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
574 LayerTestResult<float, 4> Concatenation4dDim1Test(
575 armnn::IWorkloadFactory& workloadFactory,
576 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
578 LayerTestResult<float, 4> Concatenation4dDim2Test(
579 armnn::IWorkloadFactory& workloadFactory,
580 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
582 LayerTestResult<float, 4> Concatenation4dDim3Test(
583 armnn::IWorkloadFactory& workloadFactory,
584 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
587 LayerTestResult<float, 4> Concatenation4dDiffShapeDim0Test(
588 armnn::IWorkloadFactory& workloadFactory,
589 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
591 LayerTestResult<float, 4> Concatenation4dDiffShapeDim1Test(
592 armnn::IWorkloadFactory& workloadFactory,
593 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
595 LayerTestResult<float, 4> Concatenation4dDiffShapeDim2Test(
596 armnn::IWorkloadFactory& workloadFactory,
597 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
599 LayerTestResult<float, 4> Concatenation4dDiffShapeDim3Test(
600 armnn::IWorkloadFactory& workloadFactory,
601 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
604 LayerTestResult<uint8_t, 4> Concatenation4dDim0Uint8Test(
605 armnn::IWorkloadFactory& workloadFactory,
606 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
608 LayerTestResult<uint8_t, 4> Concatenation4dDim1Uint8Test(
609 armnn::IWorkloadFactory& workloadFactory,
610 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
612 LayerTestResult<uint8_t, 4> Concatenation4dDim2Uint8Test(
613 armnn::IWorkloadFactory& workloadFactory,
614 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
616 LayerTestResult<uint8_t, 4> Concatenation4dDim3Uint8Test(
617 armnn::IWorkloadFactory& workloadFactory,
618 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
621 LayerTestResult<uint8_t, 4> Concatenation4dDiffShapeDim0Uint8Test(
622 armnn::IWorkloadFactory& workloadFactory,
623 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
625 LayerTestResult<uint8_t, 4> Concatenation4dDiffShapeDim1Uint8Test(
626 armnn::IWorkloadFactory& workloadFactory,
627 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
629 LayerTestResult<uint8_t, 4> Concatenation4dDiffShapeDim2Uint8Test(
630 armnn::IWorkloadFactory& workloadFactory,
631 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
633 LayerTestResult<uint8_t, 4> Concatenation4dDiffShapeDim3Uint8Test(
634 armnn::IWorkloadFactory& workloadFactory,
635 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
638 LayerTestResult<uint8_t, 4> SimpleSigmoidUint8Test(
639 armnn::IWorkloadFactory& workloadFactory,
640 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
642 LayerTestResult<int16_t, 4> SimpleSigmoidInt16Test(
643 armnn::IWorkloadFactory& workloadFactory,
644 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
646 LayerTestResult<float, 4> CompareConvolution2dTest(
647 armnn::IWorkloadFactory& workloadFactory,
648 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
649 armnn::IWorkloadFactory& refWorkloadFactory);
652 LayerTestResult<T, 4> CompareDepthwiseConvolution2dTest(
653 armnn::IWorkloadFactory& workloadFactory,
654 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
655 armnn::IWorkloadFactory& refWorkloadFactory,
656 const armnn::DataLayout layout);
658 LayerTestResult<float, 4> CompareNormalizationTest(
659 armnn::IWorkloadFactory& workloadFactory,
660 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
661 armnn::IWorkloadFactory& refWorkloadFactory,
662 armnn::NormalizationAlgorithmChannel normChannel,
663 armnn::NormalizationAlgorithmMethod normMethod);
665 LayerTestResult<float, 2> CompareSoftmaxTest(
666 armnn::IWorkloadFactory& workloadFactory,
667 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
668 armnn::IWorkloadFactory& refWorkloadFactory,
671 LayerTestResult<float, 2> FullyConnectedFloat32Test(
672 armnn::IWorkloadFactory& workloadFactory,
673 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
675 bool transposeWeights);
677 std::vector<LayerTestResult<float, 3>> SplitterTest(
678 armnn::IWorkloadFactory& workloadFactory,
679 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
681 LayerTestResult<float, 3> CopyViaSplitterTest(
682 armnn::IWorkloadFactory& workloadFactory,
683 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
685 LayerTestResult<float, 3> ConcatTest(
686 armnn::IWorkloadFactory& workloadFactory,
687 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
689 LayerTestResult<float, 4> AdditionTest(
690 armnn::IWorkloadFactory& workloadFactory,
691 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
693 LayerTestResult<float, 4> AdditionBroadcast1ElementTest(
694 armnn::IWorkloadFactory& workloadFactory,
695 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
697 LayerTestResult<float, 4> AdditionBroadcastTest(
698 armnn::IWorkloadFactory& workloadFactory,
699 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
701 LayerTestResult<float, 4> CompareAdditionTest(
702 armnn::IWorkloadFactory& workloadFactory,
703 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
704 armnn::IWorkloadFactory& refWorkloadFactory);
706 LayerTestResult<float, 4> SubtractionTest(
707 armnn::IWorkloadFactory& workloadFactory,
708 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
710 LayerTestResult<float, 4> SubtractionBroadcast1ElementTest(
711 armnn::IWorkloadFactory& workloadFactory,
712 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
714 LayerTestResult<float, 4> SubtractionBroadcastTest(
715 armnn::IWorkloadFactory& workloadFactory,
716 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
718 LayerTestResult<float, 4> CompareActivationTest(
719 armnn::IWorkloadFactory& workloadFactory,
720 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
721 armnn::IWorkloadFactory& refWorkloadFactory,
722 armnn::ActivationFunction f,
723 unsigned int batchSize);
725 LayerTestResult<float, 4> DivisionTest(
726 armnn::IWorkloadFactory& workloadFactory,
727 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
729 LayerTestResult<float, 4> DivisionByZeroTest(
730 armnn::IWorkloadFactory& workloadFactory,
731 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
733 LayerTestResult<float, 4> DivisionBroadcast1ElementTest(
734 armnn::IWorkloadFactory& workloadFactory,
735 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
737 LayerTestResult<float, 4> DivisionBroadcast1DVectorTest(
738 armnn::IWorkloadFactory& workloadFactory,
739 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
741 LayerTestResult<float, 4> MultiplicationTest(
742 armnn::IWorkloadFactory& workloadFactory,
743 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
745 LayerTestResult<float, 4> MultiplicationBroadcast1ElementTest(
746 armnn::IWorkloadFactory& workloadFactory,
747 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
749 LayerTestResult<float, 4> MultiplicationBroadcast1DVectorTest(
750 armnn::IWorkloadFactory& workloadFactory,
751 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
753 LayerTestResult<float, 4> CompareMultiplicationTest(
754 armnn::IWorkloadFactory& workloadFactory,
755 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
756 armnn::IWorkloadFactory& refWorkloadFactory);
758 LayerTestResult<float, 4> BatchNormTest(
759 armnn::IWorkloadFactory& workloadFactory,
760 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
762 LayerTestResult<float, 4> BatchNormNhwcTest(
763 armnn::IWorkloadFactory& workloadFactory,
764 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
766 LayerTestResult<float, 4> CompareBatchNormTest(
767 armnn::IWorkloadFactory& workloadFactory,
768 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
769 armnn::IWorkloadFactory& refWorkloadFactory);
771 LayerTestResult<float, 4> BoundedReLuUpperAndLowerBoundTest(
772 armnn::IWorkloadFactory& workloadFactory,
773 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
775 LayerTestResult<uint8_t, 4> BoundedReLuUint8UpperAndLowerBoundTest(
776 armnn::IWorkloadFactory& workloadFactor,
777 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManagery);
779 LayerTestResult<float, 4> BoundedReLuUpperBoundOnlyTest(
780 armnn::IWorkloadFactory& workloadFactory,
781 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
783 LayerTestResult<uint8_t, 4> BoundedReLuUint8UpperBoundOnlyTest(
784 armnn::IWorkloadFactory& workloadFactory,
785 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
787 LayerTestResult<float, 4> CompareBoundedReLuTest(
788 armnn::IWorkloadFactory& workloadFactory,
789 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
790 armnn::IWorkloadFactory& refWorkloadFactory,
794 LayerTestResult<float, 4> ReLuTest(
795 armnn::IWorkloadFactory& workloadFactory,
796 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
798 LayerTestResult<uint8_t, 4> ReLuUint8Test(
799 armnn::IWorkloadFactory& workloadFactory,
800 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
802 LayerTestResult<int16_t, 4> ReLuInt16Test(
803 armnn::IWorkloadFactory& workloadFactory,
804 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
806 LayerTestResult<int16_t, 4> BoundedReLuInt16Test(
807 armnn::IWorkloadFactory& workloadFactory,
808 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
810 LayerTestResult<float, 4> SoftReLuTest(
811 armnn::IWorkloadFactory& workloadFactory,
812 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
814 LayerTestResult<uint8_t, 4> SoftReLuUint8Test(
815 armnn::IWorkloadFactory& workloadFactory,
816 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
818 LayerTestResult<int16_t, 4> SoftReLuInt16Test(
819 armnn::IWorkloadFactory& workloadFactory,
820 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
822 LayerTestResult<float, 4> LeakyReLuTest(
823 armnn::IWorkloadFactory& workloadFactory,
824 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
826 LayerTestResult<uint8_t, 4> LeakyReLuUint8Test(
827 armnn::IWorkloadFactory& workloadFactory,
828 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
830 LayerTestResult<int16_t, 4> LeakyReLuInt16Test(
831 armnn::IWorkloadFactory& workloadFactory,
832 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
834 LayerTestResult<float, 4> AbsTest(
835 armnn::IWorkloadFactory& workloadFactory,
836 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
838 LayerTestResult<uint8_t, 4> AbsUint8Test(
839 armnn::IWorkloadFactory& workloadFactory,
840 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
842 LayerTestResult<int16_t, 4> AbsInt16Test(
843 armnn::IWorkloadFactory& workloadFactory,
844 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
846 LayerTestResult<float, 4> SqrtTest(
847 armnn::IWorkloadFactory& workloadFactory,
848 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
850 LayerTestResult<uint8_t, 4> SqrtUint8Test(
851 armnn::IWorkloadFactory& workloadFactory,
852 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
854 LayerTestResult<int16_t, 4> SqrtInt16Test(
855 armnn::IWorkloadFactory& workloadFactory,
856 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
858 LayerTestResult<float, 4> SquareTest(
859 armnn::IWorkloadFactory& workloadFactory,
860 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
862 LayerTestResult<uint8_t, 4> SquareUint8Test(
863 armnn::IWorkloadFactory& workloadFactory,
864 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
866 LayerTestResult<int16_t, 4> SquareInt16Test(
867 armnn::IWorkloadFactory& workloadFactory,
868 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
870 LayerTestResult<float, 4> TanhTest(
871 armnn::IWorkloadFactory& workloadFactory,
872 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
874 LayerTestResult<uint8_t, 4> TanhUint8Test(
875 armnn::IWorkloadFactory& workloadFactory,
876 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
878 LayerTestResult<int16_t, 4> TanhInt16Test(
879 armnn::IWorkloadFactory& workloadFactory,
880 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
883 // Tests that the output should be identical to the input when the output dimensions match the input ones.
884 template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
885 LayerTestResult<T, 4> ResizeBilinearNopTest(
886 armnn::IWorkloadFactory& workloadFactory,
887 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
888 const armnn::DataLayout dataLayout);
890 // Tests the behaviour of the resize bilinear operation when rescaling a 2x2 image into a 1x1 image.
891 template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
892 LayerTestResult<T, 4> SimpleResizeBilinearTest(
893 armnn::IWorkloadFactory& workloadFactory,
894 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
895 const armnn::DataLayout dataLayout);
897 // Tests the resize bilinear for minification of a square input matrix (also: input dimensions are a
898 // multiple of output dimensions).
899 template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
900 LayerTestResult<T, 4> ResizeBilinearSqMinTest(
901 armnn::IWorkloadFactory& workloadFactory,
902 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
903 const armnn::DataLayout dataLayout);
905 // Tests the resize bilinear for minification (output dimensions smaller than input dimensions).
906 template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
907 LayerTestResult<T, 4> ResizeBilinearMinTest(
908 armnn::IWorkloadFactory& workloadFactory,
909 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
910 const armnn::DataLayout dataLayout);
912 // Tests the resize bilinear for magnification (output dimensions bigger than input dimensions).
913 template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
914 LayerTestResult<T, 4> ResizeBilinearMagTest(
915 armnn::IWorkloadFactory& workloadFactory,
916 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
917 const armnn::DataLayout dataLayout);
919 // Tests that the output should be identical to the input when the output dimensions match the input ones.
920 template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
921 LayerTestResult<T, 4> ResizeNearestNeighborNopTest(
922 armnn::IWorkloadFactory& workloadFactory,
923 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
924 const armnn::DataLayout dataLayout);
926 // Tests the behaviour of the resize NearestNeighbor operation when rescaling a 2x2 image into a 1x1 image.
927 template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
928 LayerTestResult<T, 4> SimpleResizeNearestNeighborTest(
929 armnn::IWorkloadFactory& workloadFactory,
930 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
931 const armnn::DataLayout dataLayout);
933 // Tests the resize NearestNeighbor for minification of a square input matrix (also: input dimensions are a
934 // multiple of output dimensions).
935 template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
936 LayerTestResult<T, 4> ResizeNearestNeighborSqMinTest(
937 armnn::IWorkloadFactory& workloadFactory,
938 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
939 const armnn::DataLayout dataLayout);
941 // Tests the resize NearestNeighbor for minification (output dimensions smaller than input dimensions).
942 template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
943 LayerTestResult<T, 4> ResizeNearestNeighborMinTest(
944 armnn::IWorkloadFactory& workloadFactory,
945 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
946 const armnn::DataLayout dataLayout);
948 // Tests the resize NearestNeighbor for magnification (output dimensions bigger than input dimensions).
949 template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
950 LayerTestResult<T, 4> ResizeNearestNeighborMagTest(
951 armnn::IWorkloadFactory& workloadFactory,
952 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
953 const armnn::DataLayout dataLayout,
955 int32_t inQuantOffset,
957 int32_t outQuantOffset);
959 template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
960 LayerTestResult<T, 2> Rsqrt2dTestCommon(
961 armnn::IWorkloadFactory& workloadFactory,
962 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
963 const armnn::TensorInfo inputTensorInfo,
964 const armnn::TensorInfo outputTensorInfo,
965 const std::vector<float>& inputValues,
966 const std::vector<float>& expectedOutputValues);
968 template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
969 LayerTestResult<T, 2> Rsqrt2dTest(
970 armnn::IWorkloadFactory& workloadFactory,
971 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
973 template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
974 LayerTestResult<T, 3> Rsqrt3dTest(
975 armnn::IWorkloadFactory& workloadFactory,
976 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
978 template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
979 LayerTestResult<T, 2> RsqrtZeroTest(
980 armnn::IWorkloadFactory& workloadFactory,
981 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
983 template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
984 LayerTestResult<T, 2> RsqrtNegativeTest(
985 armnn::IWorkloadFactory& workloadFactory,
986 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
988 LayerTestResult<float, 4> BatchNormTest(
989 armnn::IWorkloadFactory& workloadFactory,
990 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
992 LayerTestResult<float, 4> BatchNormNhwcTest(
993 armnn::IWorkloadFactory& workloadFactory,
994 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
996 LayerTestResult<float, 2> FakeQuantizationTest(
997 armnn::IWorkloadFactory& workloadFactory,
998 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1000 LayerTestResult<float, 4> L2NormalizationDefaultEpsilonTest(
1001 armnn::IWorkloadFactory& workloadFactory,
1002 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1003 const armnn::DataLayout layout);
1005 LayerTestResult<float, 4> L2NormalizationNonDefaultEpsilonTest(
1006 armnn::IWorkloadFactory& workloadFactory,
1007 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1008 const armnn::DataLayout layout);
1010 LayerTestResult<float, 4> L2Normalization1dTest(
1011 armnn::IWorkloadFactory& workloadFactory,
1012 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1013 const armnn::DataLayout layout);
1015 LayerTestResult<int16_t, 4> L2Normalization1dInt16Test(
1016 armnn::IWorkloadFactory& workloadFactory,
1017 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1018 const armnn::DataLayout layout);
1020 LayerTestResult<uint8_t, 4> L2Normalization1dUint8Test(
1021 armnn::IWorkloadFactory& workloadFactory,
1022 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1023 const armnn::DataLayout layout);
1025 LayerTestResult<float, 4> L2Normalization2dTest(
1026 armnn::IWorkloadFactory& workloadFactory,
1027 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1028 const armnn::DataLayout layout);
1030 LayerTestResult<int16_t, 4> L2Normalization2dInt16Test(
1031 armnn::IWorkloadFactory& workloadFactory,
1032 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1033 const armnn::DataLayout layout);
1035 LayerTestResult<uint8_t, 4> L2Normalization2dUint8Test(
1036 armnn::IWorkloadFactory& workloadFactory,
1037 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1038 const armnn::DataLayout layout);
1040 LayerTestResult<float, 4> L2Normalization3dTest(
1041 armnn::IWorkloadFactory& workloadFactory,
1042 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1043 const armnn::DataLayout layout);
1045 LayerTestResult<int16_t, 4> L2Normalization3dInt16Test(
1046 armnn::IWorkloadFactory& workloadFactory,
1047 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1048 const armnn::DataLayout layout);
1050 LayerTestResult<uint8_t, 4> L2Normalization3dUint8Test(
1051 armnn::IWorkloadFactory& workloadFactory,
1052 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1053 const armnn::DataLayout layout);
1055 LayerTestResult<float, 4> L2Normalization4dTest(
1056 armnn::IWorkloadFactory& workloadFactory,
1057 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1058 const armnn::DataLayout layout);
1060 LayerTestResult<int16_t, 4> L2Normalization4dInt16Test(
1061 armnn::IWorkloadFactory& workloadFactory,
1062 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1063 const armnn::DataLayout layout);
1065 LayerTestResult<uint8_t, 4> L2Normalization4dUint8Test(
1066 armnn::IWorkloadFactory& workloadFactory,
1067 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1068 const armnn::DataLayout layout);
1070 LayerTestResult<float, 4> ConstantTest(
1071 armnn::IWorkloadFactory& workloadFactory,
1072 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1074 LayerTestResult<uint8_t, 4> ConstantUint8SimpleQuantizationScaleNoOffsetTest(
1075 armnn::IWorkloadFactory& workloadFactory,
1076 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1078 LayerTestResult<int16_t, 4> ConstantInt16SimpleQuantizationScaleNoOffsetTest(
1079 armnn::IWorkloadFactory& workloadFactory,
1080 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1082 LayerTestResult<uint8_t, 4> BoundedReLuUint8Test(
1083 armnn::IWorkloadFactory& workloadFactory,
1084 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1087 LayerTestResult<uint8_t, 4> BoundedReLuUint8Test(
1088 armnn::IWorkloadFactory& workloadFactory,
1089 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1093 template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1094 LayerTestResult<T, 2> FullyConnectedTest(
1095 armnn::IWorkloadFactory& workloadFactory,
1096 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1099 std::vector<LayerTestResult<uint8_t, 3>> SplitterUint8Test(
1100 armnn::IWorkloadFactory& workloadFactory,
1101 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1103 std::vector<LayerTestResult<int16_t, 3>> SplitterInt16Test(
1104 armnn::IWorkloadFactory& workloadFactory,
1105 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1107 LayerTestResult<uint8_t, 3> CopyViaSplitterUint8Test(
1108 armnn::IWorkloadFactory& workloadFactory,
1109 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1111 LayerTestResult<int16_t, 3> CopyViaSplitterInt16Test(
1112 armnn::IWorkloadFactory& workloadFactory,
1113 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1115 LayerTestResult<uint8_t, 3> ConcatUint8Test(
1116 armnn::IWorkloadFactory& workloadFactory,
1117 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1119 LayerTestResult<uint16_t, 3> ConcatUint16Test(
1120 armnn::IWorkloadFactory& workloadFactory,
1121 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1123 LayerTestResult<uint8_t, 3> ConcatUint8DifferentQParamsTest(
1124 armnn::IWorkloadFactory& workloadFactory,
1125 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1127 LayerTestResult<uint8_t, 4> AdditionUint8Test(
1128 armnn::IWorkloadFactory& workloadFactory,
1129 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1131 LayerTestResult<uint8_t, 4> AdditionBroadcast1ElementUint8Test(
1132 armnn::IWorkloadFactory& workloadFactory,
1133 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1135 LayerTestResult<uint8_t, 4> AdditionBroadcastUint8Test(
1136 armnn::IWorkloadFactory& workloadFactory,
1137 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1139 LayerTestResult<int16_t, 4> AdditionInt16Test(
1140 armnn::IWorkloadFactory& workloadFactory,
1141 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1143 LayerTestResult<int16_t, 4> AdditionBroadcastInt16Test(
1144 armnn::IWorkloadFactory& workloadFactory,
1145 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1147 LayerTestResult<int16_t, 4> AdditionBroadcast1ElementInt16Test(
1148 armnn::IWorkloadFactory& workloadFactory,
1149 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1151 LayerTestResult<uint8_t, 4> SubtractionUint8Test(
1152 armnn::IWorkloadFactory& workloadFactory,
1153 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1155 LayerTestResult<uint8_t, 4> SubtractionBroadcast1ElementUint8Test(
1156 armnn::IWorkloadFactory& workloadFactory,
1157 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1159 LayerTestResult<uint8_t, 4> SubtractionBroadcastUint8Test(
1160 armnn::IWorkloadFactory& workloadFactory,
1161 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1163 LayerTestResult<int16_t, 4> SubtractionInt16Test(
1164 armnn::IWorkloadFactory& workloadFactory,
1165 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1167 LayerTestResult<int16_t, 4> SubtractionBroadcast1ElementInt16Test(
1168 armnn::IWorkloadFactory& workloadFactory,
1169 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1171 LayerTestResult<int16_t, 4> SubtractionBroadcastInt16Test(
1172 armnn::IWorkloadFactory& workloadFactory,
1173 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1175 LayerTestResult<uint8_t, 4> CompareActivationUint8Test(
1176 armnn::IWorkloadFactory& workloadFactory,
1177 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1178 armnn::IWorkloadFactory& refWorkloadFactory,
1179 armnn::ActivationFunction f);
1181 LayerTestResult<int16_t, 4> CompareActivationInt16Test(
1182 armnn::IWorkloadFactory& workloadFactory,
1183 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1184 armnn::IWorkloadFactory& refWorkloadFactory,
1185 armnn::ActivationFunction f);
1187 LayerTestResult<uint8_t, 2> CompareSoftmaxUint8Test(
1188 armnn::IWorkloadFactory& workloadFactory,
1189 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1190 armnn::IWorkloadFactory& refWorkloadFactory,
1193 LayerTestResult<uint8_t, 4> MultiplicationUint8Test(
1194 armnn::IWorkloadFactory& workloadFactory,
1195 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1197 LayerTestResult<uint8_t, 4> MultiplicationBroadcast1ElementUint8Test(
1198 armnn::IWorkloadFactory& workloadFactory,
1199 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1201 LayerTestResult<uint8_t, 4> MultiplicationBroadcast1DVectorUint8Test(
1202 armnn::IWorkloadFactory& workloadFactory,
1203 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1205 LayerTestResult<int16_t, 4> MultiplicationInt16Test(
1206 armnn::IWorkloadFactory& workloadFactory,
1207 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1209 LayerTestResult<int16_t, 4> MultiplicationBroadcast1ElementInt16Test(
1210 armnn::IWorkloadFactory& workloadFactory,
1211 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1213 LayerTestResult<int16_t, 4> MultiplicationBroadcast1DVectorInt16Test(
1214 armnn::IWorkloadFactory& workloadFactory,
1215 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1217 LayerTestResult<uint8_t, 4> DivisionUint8Test(
1218 armnn::IWorkloadFactory& workloadFactory,
1219 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1221 LayerTestResult<uint8_t, 4> DivisionBroadcast1ElementUint8Test(
1222 armnn::IWorkloadFactory& workloadFactory,
1223 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1225 LayerTestResult<uint8_t, 4> DivisionBroadcast1DVectorUint8Test(
1226 armnn::IWorkloadFactory& workloadFactory,
1227 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1229 LayerTestResult<int16_t, 4> DivisionInt16Test(
1230 armnn::IWorkloadFactory& workloadFactory,
1231 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1233 LayerTestResult<int16_t, 4> DivisionBroadcast1ElementInt16Test(
1234 armnn::IWorkloadFactory& workloadFactory,
1235 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1237 LayerTestResult<int16_t, 4> DivisionBroadcast1DVectorInt16Test(
1238 armnn::IWorkloadFactory& workloadFactory,
1239 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1241 LayerTestResult<uint8_t, 4> SimpleConvolution2d3x5Uint8Test(
1242 armnn::IWorkloadFactory& workloadFactory,
1243 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1245 const armnn::DataLayout layout);
1247 LayerTestResult<uint8_t, 4> SimpleConvolution2d3x3Uint8Test(
1248 armnn::IWorkloadFactory& workloadFactory,
1249 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1251 const armnn::DataLayout layout);
1253 LayerTestResult<int16_t, 4> SimpleConvolution2d3x5QSymm16Test(
1254 armnn::IWorkloadFactory& workloadFactory,
1255 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1257 const armnn::DataLayout layout);
1259 LayerTestResult<int16_t, 4> SimpleConvolution2d3x3QSymm16Test(
1260 armnn::IWorkloadFactory& workloadFactory,
1261 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1263 const armnn::DataLayout layout);
1265 LayerTestResult<uint8_t, 4> DepthwiseConvolution2dUint8Test(
1266 armnn::IWorkloadFactory& workloadFactory,
1267 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1269 const armnn::DataLayout layout);
1271 LayerTestResult<uint8_t, 4> DepthwiseConvolution2dDepthMul1Uint8Test(
1272 armnn::IWorkloadFactory& workloadFactory,
1273 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1275 const armnn::DataLayout layout);
1277 LayerTestResult<int16_t, 4> DepthwiseConvolution2dInt16Test(
1278 armnn::IWorkloadFactory& workloadFactory,
1279 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1281 const armnn::DataLayout layout);
1283 LayerTestResult<int16_t, 4> DepthwiseConvolution2dDepthMul1Int16Test(
1284 armnn::IWorkloadFactory& workloadFactory,
1285 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1287 const armnn::DataLayout layout);
1289 LayerTestResult<uint8_t, 4> ConstantLinearActivationUint8Test(
1290 armnn::IWorkloadFactory& workloadFactory,
1291 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1293 LayerTestResult<int16_t, 4> ConstantLinearActivationInt16Test(
1294 armnn::IWorkloadFactory& workloadFactory,
1295 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1297 LayerTestResult<uint8_t, 4> BatchNormUint8Test(
1298 armnn::IWorkloadFactory& workloadFactory,
1299 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1301 LayerTestResult<uint8_t, 4> BatchNormUint8NhwcTest(
1302 armnn::IWorkloadFactory& workloadFactory,
1303 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1305 LayerTestResult<int16_t, 4> BatchNormInt16Test(
1306 armnn::IWorkloadFactory& workloadFactory,
1307 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1309 LayerTestResult<int16_t, 4> BatchNormInt16NhwcTest(
1310 armnn::IWorkloadFactory& workloadFactory,
1311 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1313 LayerTestResult<uint8_t, 4> ConstantUint8CustomQuantizationScaleAndOffsetTest(
1314 armnn::IWorkloadFactory& workloadFactory,
1315 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1317 LayerTestResult<int16_t, 4> ConstantInt16CustomQuantizationScaleAndOffsetTest(
1318 armnn::IWorkloadFactory& workloadFactory,
1319 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1321 LayerTestResult<uint8_t, 1> Concatenation1dUint8Test(
1322 armnn::IWorkloadFactory& workloadFactory,
1323 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1325 LayerTestResult<uint8_t, 2> Concatenation2dDim0Uint8Test(
1326 armnn::IWorkloadFactory& workloadFactory,
1327 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1329 LayerTestResult<uint8_t, 2> Concatenation2dDim1Uint8Test(
1330 armnn::IWorkloadFactory& workloadFactory,
1331 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1333 LayerTestResult<uint8_t, 2> Concatenation2dDim0DiffInputDimsUint8Test(
1334 armnn::IWorkloadFactory& workloadFactory,
1335 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1337 LayerTestResult<uint8_t, 2> Concatenation2dDim1DiffInputDimsUint8Test(
1338 armnn::IWorkloadFactory& workloadFactory,
1339 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1341 LayerTestResult<uint8_t, 3> Concatenation3dDim0Uint8Test(
1342 armnn::IWorkloadFactory& workloadFactory,
1343 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1345 LayerTestResult<uint8_t, 3> Concatenation3dDim1Uint8Test(
1346 armnn::IWorkloadFactory& workloadFactory,
1347 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1349 LayerTestResult<uint8_t, 3> Concatenation3dDim2Uint8Test(
1350 armnn::IWorkloadFactory& workloadFactory,
1351 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1354 LayerTestResult<uint8_t, 3> Concatenation3dDim0DiffInputDimsUint8Test(
1355 armnn::IWorkloadFactory& workloadFactory,
1356 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1358 LayerTestResult<uint8_t, 3> Concatenation3dDim1DiffInputDimsUint8Test(
1359 armnn::IWorkloadFactory& workloadFactory,
1360 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1362 LayerTestResult<uint8_t, 3> Concatenation3dDim2DiffInputDimsUint8Test(
1363 armnn::IWorkloadFactory& workloadFactory,
1364 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1367 LayerTestResult<uint8_t, 4> EqualSimpleTest(
1368 armnn::IWorkloadFactory& workloadFactory,
1369 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1371 LayerTestResult<uint8_t, 4> EqualBroadcast1ElementTest(
1372 armnn::IWorkloadFactory& workloadFactory,
1373 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1375 LayerTestResult<uint8_t, 4> EqualBroadcast1DVectorTest(
1376 armnn::IWorkloadFactory& workloadFactory,
1377 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1379 LayerTestResult<uint8_t, 4> EqualUint8Test(
1380 armnn::IWorkloadFactory& workloadFactory,
1381 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1383 LayerTestResult<uint8_t, 4> EqualBroadcast1ElementUint8Test(
1384 armnn::IWorkloadFactory& workloadFactory,
1385 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1387 LayerTestResult<uint8_t, 4> EqualBroadcast1DVectorUint8Test(
1388 armnn::IWorkloadFactory& workloadFactory,
1389 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1391 LayerTestResult<uint8_t, 4> GreaterSimpleTest(
1392 armnn::IWorkloadFactory& workloadFactory,
1393 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1395 LayerTestResult<uint8_t, 4> GreaterBroadcast1ElementTest(
1396 armnn::IWorkloadFactory& workloadFactory,
1397 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1399 LayerTestResult<uint8_t, 4> GreaterBroadcast1DVectorTest(
1400 armnn::IWorkloadFactory& workloadFactory,
1401 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1403 LayerTestResult<uint8_t, 4> GreaterUint8Test(
1404 armnn::IWorkloadFactory& workloadFactory,
1405 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1407 LayerTestResult<uint8_t, 4> GreaterBroadcast1ElementUint8Test(
1408 armnn::IWorkloadFactory& workloadFactory,
1409 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1411 LayerTestResult<uint8_t, 4> GreaterBroadcast1DVectorUint8Test(
1412 armnn::IWorkloadFactory& workloadFactory,
1413 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1415 LayerTestResult<float, 2> FullyConnectedLargeTest(
1416 armnn::IWorkloadFactory& workloadFactory,
1417 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1418 bool transposeWeights);
1420 LayerTestResult<uint8_t, 2> PadUint82dTest(
1421 armnn::IWorkloadFactory& workloadFactory,
1422 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1424 LayerTestResult<uint8_t, 2> PadUint82dCustomPaddingTest(
1425 armnn::IWorkloadFactory& workloadFactory,
1426 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1428 LayerTestResult<uint8_t, 3> PadUint83dTest(
1429 armnn::IWorkloadFactory& workloadFactory,
1430 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1432 LayerTestResult<uint8_t, 4> PadUint84dTest(
1433 armnn::IWorkloadFactory& workloadFactory,
1434 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1436 LayerTestResult<float, 2> PadFloat322dTest(
1437 armnn::IWorkloadFactory& workloadFactory,
1438 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1440 LayerTestResult<float, 2> PadFloat322dCustomPaddingTest(
1441 armnn::IWorkloadFactory& workloadFactory,
1442 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1444 LayerTestResult<float, 3> PadFloat323dTest(
1445 armnn::IWorkloadFactory& workloadFactory,
1446 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1448 LayerTestResult<float, 4> PadFloat324dTest(
1449 armnn::IWorkloadFactory& workloadFactory,
1450 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1452 template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1453 LayerTestResult<T, 2> Pad2dTestCommon(
1454 armnn::IWorkloadFactory& workloadFactory,
1455 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1458 const float customPaddingValue = 0.0f);
1460 template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1461 LayerTestResult<T, 3> Pad3dTestCommon(
1462 armnn::IWorkloadFactory& workloadFactory,
1463 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1467 template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1468 LayerTestResult<T, 4> Pad4dTestCommon(
1469 armnn::IWorkloadFactory& workloadFactory,
1470 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1474 void LstmUtilsZeroVectorTest();
1475 void LstmUtilsMeanStddevNormalizationNoneZeroInputTest();
1476 void LstmUtilsMeanStddevNormalizationAllZeroInputTest();
1477 void LstmUtilsMeanStddevNormalizationMixedZeroInputTest();
1478 void LstmUtilsVectorBatchVectorCwiseProductTest();
1479 void LstmUtilsVectorBatchVectorAddTest();
1481 LayerTestResult<float, 2> LstmLayerFloat32WithCifgWithPeepholeNoProjectionTest(
1482 armnn::IWorkloadFactory& workloadFactory,
1483 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1485 LayerTestResult<float, 2> LstmLayerFloat32NoCifgNoPeepholeNoProjectionTest(
1486 armnn::IWorkloadFactory& workloadFactory,
1487 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1489 LayerTestResult<float, 2> LstmLayerFloat32NoCifgWithPeepholeWithProjectionTest(
1490 armnn::IWorkloadFactory& workloadFactory,
1491 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1493 LayerTestResult<float, 2> LstmLayerFloat32NoCifgWithPeepholeWithProjectionWithLayerNormTest(
1494 armnn::IWorkloadFactory& workloadFactory,
1495 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1497 LayerTestResult<int16_t, 2> LstmLayerInt16NoCifgNoPeepholeNoProjectionTest(
1498 armnn::IWorkloadFactory& workloadFactory,
1499 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1501 LayerTestResult<int16_t, 2> LstmLayerInt16WithCifgWithPeepholeNoProjectionTest(
1502 armnn::IWorkloadFactory& workloadFactory,
1503 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1505 LayerTestResult<int16_t, 2> LstmLayerInt16NoCifgWithPeepholeWithProjectionTest(
1506 armnn::IWorkloadFactory& workloadFactory,
1507 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1509 LayerTestResult<int16_t, 2> LstmLayerInt16NoCifgNoPeepholeNoProjectionInt16ConstantTest(
1510 armnn::IWorkloadFactory& workloadFactory,
1511 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1513 LayerTestResult<float, 4> SimpleConvertFp16ToFp32Test(
1514 armnn::IWorkloadFactory& workloadFactory,
1515 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1517 LayerTestResult<armnn::Half, 4> SimpleConvertFp32ToFp16Test(
1518 armnn::IWorkloadFactory& workloadFactory,
1519 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1521 LayerTestResult<float, 4> MaximumSimpleTest(
1522 armnn::IWorkloadFactory& workloadFactory,
1523 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1525 LayerTestResult<float, 4> MaximumBroadcast1ElementTest(
1526 armnn::IWorkloadFactory& workloadFactory,
1527 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1529 LayerTestResult<float, 4> MaximumBroadcast1DVectorTest(
1530 armnn::IWorkloadFactory& workloadFactory,
1531 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1533 LayerTestResult<uint8_t , 4> MaximumUint8Test(
1534 armnn::IWorkloadFactory& workloadFactory,
1535 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1537 LayerTestResult<uint8_t, 4> MaximumBroadcast1ElementUint8Test(
1538 armnn::IWorkloadFactory& workloadFactory,
1539 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1541 LayerTestResult<uint8_t, 4> MaximumBroadcast1DVectorUint8Test(
1542 armnn::IWorkloadFactory& workloadFactory,
1543 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1545 LayerTestResult<int16_t , 4> MaximumInt16Test(
1546 armnn::IWorkloadFactory& workloadFactory,
1547 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1549 LayerTestResult<int16_t, 4> MaximumBroadcast1ElementInt16Test(
1550 armnn::IWorkloadFactory& workloadFactory,
1551 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1553 LayerTestResult<int16_t, 4> MaximumBroadcast1DVectorInt16Test(
1554 armnn::IWorkloadFactory& workloadFactory,
1555 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1557 template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1558 LayerTestResult<T, 1> MeanSimpleTest(
1559 armnn::IWorkloadFactory& workloadFactory,
1560 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1562 template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1563 LayerTestResult<T, 3> MeanSimpleAxisTest(
1564 armnn::IWorkloadFactory& workloadFactory,
1565 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1567 template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1568 LayerTestResult<T, 4> MeanKeepDimsTest(
1569 armnn::IWorkloadFactory& workloadFactory,
1570 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1572 template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1573 LayerTestResult<T, 4> MeanMultipleDimsTest(
1574 armnn::IWorkloadFactory& workloadFactory,
1575 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1577 template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1578 LayerTestResult<T, 1> MeanVts1Test(
1579 armnn::IWorkloadFactory& workloadFactory,
1580 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1582 template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1583 LayerTestResult<T, 3> MeanVts2Test(
1584 armnn::IWorkloadFactory& workloadFactory,
1585 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1587 template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1588 LayerTestResult<T, 3> MeanVts3Test(
1589 armnn::IWorkloadFactory& workloadFactory,
1590 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1592 LayerTestResult<float, 4> MinimumBroadcast1ElementTest1(
1593 armnn::IWorkloadFactory& workloadFactory,
1594 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1596 LayerTestResult<float, 4> MinimumBroadcast1ElementTest2(
1597 armnn::IWorkloadFactory& workloadFactory,
1598 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1600 LayerTestResult<uint8_t, 4> MinimumBroadcast1DVectorUint8Test(
1601 armnn::IWorkloadFactory & workloadFactory,
1602 const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager);
1604 LayerTestResult<int16_t , 4> MinimumInt16Test(
1605 armnn::IWorkloadFactory& workloadFactory,
1606 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1608 LayerTestResult<int16_t, 4> MinimumBroadcast1ElementInt16Test(
1609 armnn::IWorkloadFactory& workloadFactory,
1610 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1612 LayerTestResult<int16_t, 4> MinimumBroadcast1DVectorInt16Test(
1613 armnn::IWorkloadFactory& workloadFactory,
1614 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1616 LayerTestResult<float, 4> AdditionAfterMaxPoolTest(
1617 armnn::IWorkloadFactory& workloadFactory,
1618 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1620 LayerTestResult<float, 4> SpaceToBatchNdSimpleFloat32Test(
1621 armnn::IWorkloadFactory& workloadFactory,
1622 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1624 LayerTestResult<float, 4> SpaceToBatchNdMultiChannelsFloat32Test(
1625 armnn::IWorkloadFactory& workloadFactory,
1626 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1628 LayerTestResult<float, 4> SpaceToBatchNdMultiBlockFloat32Test(
1629 armnn::IWorkloadFactory& workloadFactory,
1630 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1632 LayerTestResult<float, 4> SpaceToBatchNdPaddingFloat32Test(
1633 armnn::IWorkloadFactory& workloadFactory,
1634 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1636 LayerTestResult<uint8_t, 4> SpaceToBatchNdSimpleUint8Test(
1637 armnn::IWorkloadFactory& workloadFactory,
1638 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1640 LayerTestResult<uint8_t, 4> SpaceToBatchNdMultiChannelsUint8Test(
1641 armnn::IWorkloadFactory& workloadFactory,
1642 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1644 LayerTestResult<uint8_t, 4> SpaceToBatchNdMultiBlockUint8Test(
1645 armnn::IWorkloadFactory& workloadFactory,
1646 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1648 LayerTestResult<uint8_t, 4> SpaceToBatchNdPaddingUint8Test(
1649 armnn::IWorkloadFactory& workloadFactory,
1650 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1652 LayerTestResult<float, 4> SpaceToBatchNdSimpleNHWCFloat32Test(
1653 armnn::IWorkloadFactory& workloadFactory,
1654 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1656 LayerTestResult<float, 4> SpaceToBatchNdMultiChannelsNHWCFloat32Test(
1657 armnn::IWorkloadFactory& workloadFactory,
1658 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1660 LayerTestResult<float, 4> SpaceToBatchNdMultiBlockNHWCFloat32Test(
1661 armnn::IWorkloadFactory& workloadFactory,
1662 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1664 LayerTestResult<float, 4> SpaceToBatchNdPaddingNHWCFloat32Test(
1665 armnn::IWorkloadFactory& workloadFactory,
1666 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1668 LayerTestResult<uint8_t, 4> SpaceToBatchNdSimpleNHWCUint8Test(
1669 armnn::IWorkloadFactory& workloadFactory,
1670 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1672 LayerTestResult<uint8_t, 4> SpaceToBatchNdMultiChannelsNHWCUint8Test(
1673 armnn::IWorkloadFactory& workloadFactory,
1674 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1676 LayerTestResult<uint8_t, 4> SpaceToBatchNdMultiBlockNHWCUint8Test(
1677 armnn::IWorkloadFactory& workloadFactory,
1678 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1680 LayerTestResult<uint8_t, 4> SpaceToBatchNdPaddingNHWCUint8Test(
1681 armnn::IWorkloadFactory& workloadFactory,
1682 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1684 LayerTestResult<int16_t, 4> SpaceToBatchNdSimpleUint16Test(
1685 armnn::IWorkloadFactory& workloadFactory,
1686 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1688 LayerTestResult<int16_t, 4> SpaceToBatchNdMultiChannelsUint16Test(
1689 armnn::IWorkloadFactory& workloadFactory,
1690 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1692 LayerTestResult<int16_t, 4> SpaceToBatchNdMultiBlockUint16Test(
1693 armnn::IWorkloadFactory& workloadFactory,
1694 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1696 LayerTestResult<int16_t, 4> SpaceToBatchNdPaddingUint16Test(
1697 armnn::IWorkloadFactory& workloadFactory,
1698 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1700 LayerTestResult<int16_t, 4> SpaceToBatchNdSimpleNHWCUint16Test(
1701 armnn::IWorkloadFactory& workloadFactory,
1702 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1704 LayerTestResult<int16_t, 4> SpaceToBatchNdMultiChannelsNHWCUint16Test(
1705 armnn::IWorkloadFactory& workloadFactory,
1706 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1708 LayerTestResult<int16_t, 4> SpaceToBatchNdMultiBlockNHWCUint16Test(
1709 armnn::IWorkloadFactory& workloadFactory,
1710 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1712 LayerTestResult<int16_t, 4> SpaceToBatchNdPaddingNHWCUint16Test(
1713 armnn::IWorkloadFactory& workloadFactory,
1714 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1716 LayerTestResult<float, 4> BatchToSpaceNdNhwcTest1(
1717 armnn::IWorkloadFactory& workloadFactory,
1718 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1720 LayerTestResult<float, 4> BatchToSpaceNdNhwcTest2(
1721 armnn::IWorkloadFactory& workloadFactory,
1722 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1724 LayerTestResult<float, 4> BatchToSpaceNdNhwcTest3(
1725 armnn::IWorkloadFactory& workloadFactory,
1726 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1728 LayerTestResult<float, 4> BatchToSpaceNdNhwcTest4(
1729 armnn::IWorkloadFactory& workloadFactory,
1730 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1732 LayerTestResult<float, 4> BatchToSpaceNdNchwTest1(
1733 armnn::IWorkloadFactory &workloadFactory,
1734 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1736 LayerTestResult<float, 4> BatchToSpaceNdNchwTest2(
1737 armnn::IWorkloadFactory &workloadFactory,
1738 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1740 LayerTestResult<float, 4> BatchToSpaceNdNchwTest3(
1741 armnn::IWorkloadFactory &workloadFactory,
1742 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1744 LayerTestResult<uint8_t, 4> BatchToSpaceNdNhwcTest5(
1745 armnn::IWorkloadFactory &workloadFactory,
1746 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1748 LayerTestResult<uint8_t, 4> BatchToSpaceNdNhwcTest6(
1749 armnn::IWorkloadFactory &workloadFactory,
1750 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1752 LayerTestResult<uint8_t, 4> BatchToSpaceNdNhwcTest7(
1753 armnn::IWorkloadFactory &workloadFactory,
1754 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1756 LayerTestResult<uint8_t, 4> BatchToSpaceNdNchwTest4(
1757 armnn::IWorkloadFactory &workloadFactory,
1758 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1760 LayerTestResult<uint8_t, 4> BatchToSpaceNdNchwTest5(
1761 armnn::IWorkloadFactory &workloadFactory,
1762 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1764 LayerTestResult<uint8_t, 4> BatchToSpaceNdNchwTest6(
1765 armnn::IWorkloadFactory &workloadFactory,
1766 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1768 LayerTestResult<uint8_t, 4> BatchToSpaceNdNchwTest7(
1769 armnn::IWorkloadFactory &workloadFactory,
1770 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1772 LayerTestResult<float, 4> StridedSlice4DFloat32Test(
1773 armnn::IWorkloadFactory& workloadFactory,
1774 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1776 LayerTestResult<float, 4> StridedSlice4DReverseFloat32Test(
1777 armnn::IWorkloadFactory& workloadFactory,
1778 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1780 LayerTestResult<float, 4> StridedSliceSimpleStrideFloat32Test(
1781 armnn::IWorkloadFactory& workloadFactory,
1782 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1784 LayerTestResult<float, 4> StridedSliceSimpleRangeMaskFloat32Test(
1785 armnn::IWorkloadFactory& workloadFactory,
1786 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1788 LayerTestResult<float, 2> StridedSliceShrinkAxisMaskFloat32Test(
1789 armnn::IWorkloadFactory& workloadFactory,
1790 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1792 LayerTestResult<float, 3> StridedSlice3DFloat32Test(
1793 armnn::IWorkloadFactory& workloadFactory,
1794 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1796 LayerTestResult<float, 3> StridedSlice3DReverseFloat32Test(
1797 armnn::IWorkloadFactory& workloadFactory,
1798 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1800 LayerTestResult<float, 2> StridedSlice2DFloat32Test(
1801 armnn::IWorkloadFactory& workloadFactory,
1802 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1804 LayerTestResult<float, 2> StridedSlice2DReverseFloat32Test(
1805 armnn::IWorkloadFactory& workloadFactory,
1806 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1808 LayerTestResult<uint8_t, 4> StridedSlice4DUint8Test(
1809 armnn::IWorkloadFactory& workloadFactory,
1810 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1812 LayerTestResult<uint8_t, 4> StridedSlice4DReverseUint8Test(
1813 armnn::IWorkloadFactory& workloadFactory,
1814 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1816 LayerTestResult<uint8_t, 4> StridedSliceSimpleStrideUint8Test(
1817 armnn::IWorkloadFactory& workloadFactory,
1818 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1820 LayerTestResult<uint8_t, 4> StridedSliceSimpleRangeMaskUint8Test(
1821 armnn::IWorkloadFactory& workloadFactory,
1822 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1824 LayerTestResult<uint8_t, 2> StridedSliceShrinkAxisMaskUint8Test(
1825 armnn::IWorkloadFactory& workloadFactory,
1826 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1828 LayerTestResult<uint8_t, 3> StridedSlice3DUint8Test(
1829 armnn::IWorkloadFactory& workloadFactory,
1830 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1832 LayerTestResult<uint8_t, 3> StridedSlice3DReverseUint8Test(
1833 armnn::IWorkloadFactory& workloadFactory,
1834 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1836 LayerTestResult<uint8_t, 2> StridedSlice2DUint8Test(
1837 armnn::IWorkloadFactory& workloadFactory,
1838 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1840 LayerTestResult<uint8_t, 2> StridedSlice2DReverseUint8Test(
1841 armnn::IWorkloadFactory& workloadFactory,
1842 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1844 LayerTestResult<int16_t, 4> StridedSlice4DInt16Test(
1845 armnn::IWorkloadFactory& workloadFactory,
1846 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1848 LayerTestResult<int16_t, 4> StridedSlice4DReverseInt16Test(
1849 armnn::IWorkloadFactory& workloadFactory,
1850 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1852 LayerTestResult<int16_t, 4> StridedSliceSimpleStrideInt16Test(
1853 armnn::IWorkloadFactory& workloadFactory,
1854 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1856 LayerTestResult<int16_t, 4> StridedSliceSimpleRangeMaskInt16Test(
1857 armnn::IWorkloadFactory& workloadFactory,
1858 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1860 LayerTestResult<int16_t, 2> StridedSliceShrinkAxisMaskInt16Test(
1861 armnn::IWorkloadFactory& workloadFactory,
1862 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1864 LayerTestResult<int16_t, 3> StridedSlice3DInt16Test(
1865 armnn::IWorkloadFactory& workloadFactory,
1866 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1868 LayerTestResult<int16_t, 3> StridedSlice3DReverseInt16Test(
1869 armnn::IWorkloadFactory& workloadFactory,
1870 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1872 LayerTestResult<int16_t, 2> StridedSlice2DInt16Test(
1873 armnn::IWorkloadFactory& workloadFactory,
1874 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1876 LayerTestResult<int16_t, 2> StridedSlice2DReverseInt16Test(
1877 armnn::IWorkloadFactory& workloadFactory,
1878 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1880 LayerTestResult<float, 4> Debug4DFloat32Test(
1881 armnn::IWorkloadFactory& workloadFactory,
1882 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1884 LayerTestResult<float, 3> Debug3DFloat32Test(
1885 armnn::IWorkloadFactory& workloadFactory,
1886 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1888 LayerTestResult<float, 2> Debug2DFloat32Test(
1889 armnn::IWorkloadFactory& workloadFactory,
1890 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1892 LayerTestResult<float, 1> Debug1DFloat32Test(
1893 armnn::IWorkloadFactory& workloadFactory,
1894 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1896 LayerTestResult<uint8_t, 4> Debug4DUint8Test(
1897 armnn::IWorkloadFactory& workloadFactory,
1898 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1900 LayerTestResult<uint8_t, 3> Debug3DUint8Test(
1901 armnn::IWorkloadFactory& workloadFactory,
1902 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1904 LayerTestResult<uint8_t, 2> Debug2DUint8Test(
1905 armnn::IWorkloadFactory& workloadFactory,
1906 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1908 LayerTestResult<uint8_t, 1> Debug1DUint8Test(
1909 armnn::IWorkloadFactory& workloadFactory,
1910 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1912 LayerTestResult<uint8_t, 4> PreCompiledConvolution2dTest(
1913 armnn::IWorkloadFactory& workloadFactory,
1914 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1916 LayerTestResult<uint8_t, 4> PreCompiledConvolution2dStride2x2Test(
1917 armnn::IWorkloadFactory& workloadFactory,
1918 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1920 LayerTestResult<uint8_t, 4> PreCompiledDepthwiseConvolution2dTest(
1921 armnn::IWorkloadFactory & workloadFactory,
1922 const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager);
1924 LayerTestResult<uint8_t, 4> PreCompiledDepthwiseConvolution2dStride2x2Test(
1925 armnn::IWorkloadFactory & workloadFactory,
1926 const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager);
1928 LayerTestResult<uint8_t, 4> PreCompiledMaxPooling2dTest(
1929 armnn::IWorkloadFactory& workloadFactory,
1930 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1932 LayerTestResult<float, 4> Debug4DFloat32Test(
1933 armnn::IWorkloadFactory& workloadFactory,
1934 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1936 LayerTestResult<float, 3> Debug3DFloat32Test(
1937 armnn::IWorkloadFactory& workloadFactory,
1938 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1940 LayerTestResult<float, 2> Debug2DFloat32Test(
1941 armnn::IWorkloadFactory& workloadFactory,
1942 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1944 LayerTestResult<float, 1> Debug1DFloat32Test(
1945 armnn::IWorkloadFactory& workloadFactory,
1946 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1948 LayerTestResult<uint8_t, 4> Debug4DUint8Test(
1949 armnn::IWorkloadFactory& workloadFactory,
1950 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1952 LayerTestResult<uint8_t, 3> Debug3DUint8Test(
1953 armnn::IWorkloadFactory& workloadFactory,
1954 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1956 LayerTestResult<uint8_t, 2> Debug2DUint8Test(
1957 armnn::IWorkloadFactory& workloadFactory,
1958 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1960 LayerTestResult<uint8_t, 1> Debug1DUint8Test(
1961 armnn::IWorkloadFactory& workloadFactory,
1962 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1964 LayerTestResult<float, 1> Gather1DParamsFloatTest(
1965 armnn::IWorkloadFactory& workloadFactory,
1966 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1968 LayerTestResult<uint8_t, 1> Gather1DParamsUint8Test(
1969 armnn::IWorkloadFactory& workloadFactory,
1970 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1972 LayerTestResult<int16_t, 1> Gather1DParamsInt16Test(
1973 armnn::IWorkloadFactory& workloadFactory,
1974 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1976 LayerTestResult<float, 2> GatherMultiDimParamsFloatTest(
1977 armnn::IWorkloadFactory& workloadFactory,
1978 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1980 LayerTestResult<uint8_t, 2> GatherMultiDimParamsUint8Test(
1981 armnn::IWorkloadFactory& workloadFactory,
1982 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1984 LayerTestResult<int16_t, 2> GatherMultiDimParamsInt16Test(
1985 armnn::IWorkloadFactory& workloadFactory,
1986 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1988 LayerTestResult<float, 4> GatherMultiDimParamsMultiDimIndicesFloatTest(
1989 armnn::IWorkloadFactory& workloadFactory,
1990 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1992 LayerTestResult<uint8_t, 4> GatherMultiDimParamsMultiDimIndicesUint8Test(
1993 armnn::IWorkloadFactory& workloadFactory,
1994 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1996 LayerTestResult<int16_t, 4> GatherMultiDimParamsMultiDimIndicesInt16Test(
1997 armnn::IWorkloadFactory& workloadFactory,
1998 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
2000 LayerTestResult<float, 4> DequantizeSimpleUint8Test(
2001 armnn::IWorkloadFactory& workloadFactory,
2002 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
2004 LayerTestResult<float, 4> DequantizeOffsetUint8Test(
2005 armnn::IWorkloadFactory& workloadFactory,
2006 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
2008 LayerTestResult<float, 4> DequantizeSimpleInt16Test(
2009 armnn::IWorkloadFactory& workloadFactory,
2010 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
2012 LayerTestResult<uint8_t, 4> SpaceToDepthNCHWAsymmQ8Test(
2013 armnn::IWorkloadFactory& workloadFactory,
2014 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
2016 LayerTestResult<uint8_t, 4> SpaceToDepthNHWCAsymmQ8Test(
2017 armnn::IWorkloadFactory& workloadFactory,
2018 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
2020 LayerTestResult<float, 4> SpaceToDepthNHWCFloat32Test1(
2021 armnn::IWorkloadFactory& workloadFactory,
2022 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
2024 LayerTestResult<float, 4> SpaceToDepthNCHWFloat32Test1(
2025 armnn::IWorkloadFactory& workloadFactory,
2026 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
2028 LayerTestResult<float, 4> SpaceToDepthNHWCFloat32Test2(
2029 armnn::IWorkloadFactory& workloadFactory,
2030 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
2032 LayerTestResult<float, 4> SpaceToDepthNCHWFloat32Test2(
2033 armnn::IWorkloadFactory& workloadFactory,
2034 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
2036 LayerTestResult<int16_t, 4> SpaceToDepthNHWCQSymm16Test(
2037 armnn::IWorkloadFactory& workloadFactory,
2038 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
2040 LayerTestResult<int16_t, 4> SpaceToDepthNCHWQSymm16Test(
2041 armnn::IWorkloadFactory& workloadFactory,
2042 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
2044 LayerTestResult<uint8_t, 4> QuantizeSimpleUint8Test(
2045 armnn::IWorkloadFactory& workloadFactory,
2046 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
2048 LayerTestResult<uint8_t, 4> QuantizeClampUint8Test(
2049 armnn::IWorkloadFactory& workloadFactory,
2050 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
2052 LayerTestResult<int16_t, 4> QuantizeClampInt16Test(
2053 armnn::IWorkloadFactory& workloadFactory,
2054 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
2056 template<typename T, typename B>
2057 LayerTestResult<T, 2> SimpleFullyConnectedTestImpl(
2058 armnn::IWorkloadFactory& workloadFactory,
2059 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
2060 armnn::TensorInfo inputTensorInfo,
2061 armnn::TensorInfo outputTensorInfo,
2062 armnn::TensorInfo weightsDesc,
2063 armnn::TensorInfo biasesDesc,
2064 boost::multi_array<T, 2>& weights,
2065 boost::multi_array<B, 1>& bias,
2066 boost::multi_array<T, 4>& input,
2068 bool transposeWeights)
2070 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2071 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2073 armnn::FullyConnectedQueueDescriptor data;
2074 armnn::WorkloadInfo info;
2075 armnn::ScopedCpuTensorHandle weightsTensor(weightsDesc);
2076 armnn::ScopedCpuTensorHandle biasTensor(biasesDesc);
2078 AllocateAndCopyDataToITensorHandle(&weightsTensor, &weights[0][0]);
2079 AllocateAndCopyDataToITensorHandle(&biasTensor, &bias[0]);
2081 AddInputToWorkload(data, info, inputTensorInfo, inputHandle.get());
2082 AddOutputToWorkload(data, info, outputTensorInfo, outputHandle.get());
2083 data.m_Weight = &weightsTensor;
2084 data.m_Bias = &biasTensor;
2085 data.m_Parameters.m_BiasEnabled = biasEnabled;
2086 data.m_Parameters.m_TransposeWeightMatrix = transposeWeights;
2088 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateFullyConnected(data, info);
2089 LayerTestResult<T, 2> result(outputTensorInfo);
2091 inputHandle->Allocate();
2092 outputHandle->Allocate();
2093 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
2095 ExecuteWorkload(*workload, memoryManager);
2097 CopyDataFromITensorHandle(&result.output[0][0], outputHandle.get());
2102 template <armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
2103 std::vector<T> ConvertToDataType(const std::vector<float>& input,
2104 const armnn::TensorInfo& inputTensorInfo)
2106 std::vector<T> output(input.size());
2107 auto outputTensorInfo = inputTensorInfo;
2108 outputTensorInfo.SetDataType(ArmnnType);
2110 std::unique_ptr<armnn::Encoder<float>> pOutputEncoder = armnn::MakeEncoder<float>(outputTensorInfo, output.data());
2111 armnn::Encoder<float>& rOutputEncoder = *pOutputEncoder;
2113 for (auto it = input.begin(); it != input.end(); ++it)
2115 rOutputEncoder.Set(*it);
2121 // Utility method to convert a single value to the correct type
2122 template <typename T>
2123 T ConvertToDataType(const float& value,
2124 const armnn::TensorInfo& tensorInfo)
2126 std::vector<T> output(1);
2127 std::unique_ptr<armnn::Encoder<float>> pEncoder = armnn::MakeEncoder<float>(tensorInfo, output.data());
2128 armnn::Encoder<float>& rEncoder = *pEncoder;
2129 rEncoder.Set(value);
2133 template<armnn::DataType ArmnnType, typename T>
2134 LayerTestResult<T, 2> Rsqrt2dTestCommon(
2135 armnn::IWorkloadFactory& workloadFactory,
2136 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
2137 const armnn::TensorInfo inputTensorInfo,
2138 const armnn::TensorInfo outputTensorInfo,
2139 const std::vector<float>& inputValues,
2140 const std::vector<float>& expectedOutputValues)
2142 auto inputTensor = MakeTensor<T, 2>(inputTensorInfo, ConvertToDataType<ArmnnType>(inputValues,inputTensorInfo));
2144 LayerTestResult<T, 2> result(outputTensorInfo);
2146 result.outputExpected = MakeTensor<T, 2>(outputTensorInfo,
2147 ConvertToDataType<ArmnnType>(expectedOutputValues,outputTensorInfo));
2149 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2150 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2152 armnn::RsqrtQueueDescriptor descriptor;
2154 armnn::WorkloadInfo info;
2156 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
2157 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
2159 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateRsqrt(descriptor, info);
2161 inputHandle->Allocate();
2162 outputHandle->Allocate();
2164 CopyDataToITensorHandle(inputHandle.get(), &inputTensor[0][0]);
2166 workload->PostAllocationConfigure();
2167 workload->Execute();
2169 CopyDataFromITensorHandle(&result.output[0][0], outputHandle.get());
2174 template<armnn::DataType ArmnnType, typename T>
2175 LayerTestResult<T, 2> Rsqrt2dTest(
2176 armnn::IWorkloadFactory& workloadFactory,
2177 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
2179 const armnn::TensorShape inputShape{ 2, 2 };
2180 const armnn::TensorShape outputShape{ 2, 2 };
2182 armnn::TensorInfo inputTensorInfo(inputShape, ArmnnType);
2183 inputTensorInfo.SetQuantizationScale(0.1f);
2184 inputTensorInfo.SetQuantizationOffset(0);
2186 armnn::TensorInfo outputTensorInfo(outputShape, ArmnnType);
2187 outputTensorInfo.SetQuantizationScale(0.1f);
2188 outputTensorInfo.SetQuantizationOffset(0);
2190 std::vector<float> inputValues
2196 std::vector<float> expectedOutputValues
2202 return Rsqrt2dTestCommon<ArmnnType>(workloadFactory, memoryManager,
2203 inputTensorInfo, outputTensorInfo,
2204 inputValues, expectedOutputValues);
2207 template<armnn::DataType ArmnnType, typename T>
2208 LayerTestResult<T, 3> Rsqrt3dTest(
2209 armnn::IWorkloadFactory& workloadFactory,
2210 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
2212 const armnn::TensorShape inputShape{ 3, 1, 2 };
2213 const armnn::TensorShape outputShape{ 3, 1, 2 };
2215 armnn::TensorInfo inputTensorInfo(inputShape, ArmnnType);
2216 inputTensorInfo.SetQuantizationScale(0.1f);
2217 inputTensorInfo.SetQuantizationOffset(0);
2219 armnn::TensorInfo outputTensorInfo(outputShape, ArmnnType);
2220 outputTensorInfo.SetQuantizationScale(0.1f);
2221 outputTensorInfo.SetQuantizationOffset(0);
2223 std::vector<float> inputValues
2229 std::vector<float> expectedOutputValues
2235 auto inputTensor = MakeTensor<T, 3>(inputTensorInfo, ConvertToDataType<ArmnnType>(inputValues,inputTensorInfo));
2237 LayerTestResult<T, 3> result(outputTensorInfo);
2238 result.outputExpected = MakeTensor<T, 3>(outputTensorInfo,
2239 ConvertToDataType<ArmnnType>(expectedOutputValues,outputTensorInfo));
2241 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2242 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2244 armnn::RsqrtQueueDescriptor descriptor;
2246 armnn::WorkloadInfo info;
2248 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
2249 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
2251 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateRsqrt(descriptor, info);
2253 inputHandle->Allocate();
2254 outputHandle->Allocate();
2256 CopyDataToITensorHandle(inputHandle.get(), &inputTensor[0][0][0]);
2258 workload->PostAllocationConfigure();
2259 workload->Execute();
2261 CopyDataFromITensorHandle(&result.output[0][0][0], outputHandle.get());
2266 template<armnn::DataType ArmnnType, typename T>
2267 LayerTestResult<T, 2> RsqrtZeroTest(
2268 armnn::IWorkloadFactory& workloadFactory,
2269 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
2271 const armnn::TensorShape inputShape{ 1, 2 };
2272 const armnn::TensorShape outputShape{ 1, 2 };
2274 armnn::TensorInfo inputTensorInfo(inputShape, ArmnnType);
2275 inputTensorInfo.SetQuantizationScale(0.1f);
2277 armnn::TensorInfo outputTensorInfo(outputShape, ArmnnType);
2278 outputTensorInfo.SetQuantizationScale(0.1f);
2280 std::vector<float> inputValues
2285 std::vector<float> expectedOutputValues
2290 return Rsqrt2dTestCommon<ArmnnType>(workloadFactory, memoryManager,
2291 inputTensorInfo, outputTensorInfo,
2292 inputValues, expectedOutputValues);
2295 template<armnn::DataType ArmnnType, typename T>
2296 LayerTestResult<T, 2> RsqrtNegativeTest(
2297 armnn::IWorkloadFactory& workloadFactory,
2298 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
2300 const armnn::TensorShape inputShape{ 1, 2 };
2301 const armnn::TensorShape outputShape{ 1, 2 };
2303 armnn::TensorInfo inputTensorInfo(inputShape, ArmnnType);
2304 inputTensorInfo.SetQuantizationScale(0.1f);
2305 inputTensorInfo.SetQuantizationOffset(0);
2307 armnn::TensorInfo outputTensorInfo(outputShape, ArmnnType);
2308 outputTensorInfo.SetQuantizationScale(0.1f);
2309 outputTensorInfo.SetQuantizationOffset(0);
2311 std::vector<float> inputValues
2316 std::vector<float> expectedOutputValues
2321 return Rsqrt2dTestCommon<ArmnnType>(workloadFactory, memoryManager,
2322 inputTensorInfo, outputTensorInfo,
2323 inputValues, expectedOutputValues);
2326 template<typename T>
2327 LayerTestResult<T, 4> SimpleReshapeTestImpl(
2328 armnn::IWorkloadFactory& workloadFactory,
2329 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
2330 armnn::TensorInfo inputTensorInfo,
2331 armnn::TensorInfo outputTensorInfo,
2332 const std::vector<T>& inputData,
2333 const std::vector<T>& outputExpectedData)
2335 auto input = MakeTensor<T, 4>(inputTensorInfo, inputData);
2337 LayerTestResult<T, 4> ret(outputTensorInfo);
2338 ret.outputExpected = MakeTensor<T, 4>(outputTensorInfo, outputExpectedData);
2340 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2341 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2343 armnn::ReshapeQueueDescriptor data;
2344 armnn::WorkloadInfo info;
2345 AddInputToWorkload(data, info, inputTensorInfo, inputHandle.get());
2346 AddOutputToWorkload(data, info, outputTensorInfo, outputHandle.get());
2348 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateReshape(data, info);
2350 inputHandle->Allocate();
2351 outputHandle->Allocate();
2353 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
2355 workload->Execute();
2357 CopyDataFromITensorHandle(&ret.output[0][0][0][0], outputHandle.get());
2362 template<armnn::DataType ArmnnType, typename T>
2363 LayerTestResult<T, 2> FullyConnectedTest(
2364 armnn::IWorkloadFactory& workloadFactory,
2365 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
2368 constexpr static unsigned int inputWidth = 3u;
2369 constexpr static unsigned int inputHeight = 2u;
2370 constexpr static unsigned int inputChannels = 1u;
2372 constexpr static unsigned int inputSize = inputWidth * inputHeight * inputChannels;
2374 constexpr static unsigned int outputChannels = 2u;
2376 armnn::TensorInfo inputTensorInfo({ 1, inputChannels, inputHeight, inputWidth }, ArmnnType);
2377 inputTensorInfo.SetQuantizationScale(0.1f);
2378 inputTensorInfo.SetQuantizationOffset(63);
2380 armnn::TensorInfo outputTensorInfo({ 1, outputChannels }, ArmnnType);
2381 outputTensorInfo.SetQuantizationScale(5.f);
2382 outputTensorInfo.SetQuantizationOffset(biasEnabled ? -50 : 10);
2384 armnn::TensorInfo weightsDesc({ outputChannels, inputSize }, ArmnnType);
2385 weightsDesc.SetQuantizationScale(0.2f);
2386 weightsDesc.SetQuantizationOffset(93);
2388 armnn::TensorInfo biasesDesc({ outputChannels }, GetBiasTypeFromWeightsType(weightsDesc.GetDataType()).value());
2389 biasesDesc.SetQuantizationScale(inputTensorInfo.GetQuantizationScale() * weightsDesc.GetQuantizationScale());
2390 biasesDesc.SetQuantizationOffset(0);
2392 LayerTestResult<T, 2> result(outputTensorInfo);
2394 auto input = MakeTensor<T, 4>(inputTensorInfo, ConvertToDataType<ArmnnType>(
2401 auto weights = MakeTensor<T, 2>(weightsDesc, ConvertToDataType<ArmnnType>(
2403 -8.4f, 20.0f, -10.4f, -8, 16.4f, -11.8f,
2404 23.4f, 10.4f, -14.0f, -3.8f, -11.8f, 11.4f
2408 auto bias = MakeTensor<int32_t, 1>(biasesDesc, std::vector<int32_t>{9250, 67500});
2410 result = SimpleFullyConnectedTestImpl<T>(
2413 inputTensorInfo, outputTensorInfo,
2414 weightsDesc, biasesDesc,
2415 weights, bias, input,
2421 result.outputExpected = MakeTensor<T, 2>(outputTensorInfo,
2422 ConvertToDataType<ArmnnType>({80.f, 1460.f}, outputTensorInfo));
2426 result.outputExpected = MakeTensor<T, 2>(outputTensorInfo,
2427 ConvertToDataType<ArmnnType>({-107.04f, 110.f}, outputTensorInfo));
2433 template<armnn::DataType ArmnnType, typename T>
2434 LayerTestResult<T, 4> SimpleReshapeTest(
2435 armnn::IWorkloadFactory& workloadFactory,
2436 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
2438 armnn::TensorInfo inputTensorInfo;
2439 armnn::TensorInfo outputTensorInfo;
2441 unsigned int inputShape[] = { 2, 2, 3, 3 };
2442 unsigned int outputShape[] = { 2, 2, 9, 1 };
2444 inputTensorInfo = armnn::TensorInfo(4, inputShape, ArmnnType);
2445 inputTensorInfo.SetQuantizationScale(1.0f);
2446 outputTensorInfo = armnn::TensorInfo(4, outputShape, ArmnnType);
2447 outputTensorInfo.SetQuantizationScale(1.0f);
2449 auto input = ConvertToDataType<ArmnnType>(
2456 12.0f, 13.0f, 14.0f,
2457 15.0f, 16.0f, 17.0f,
2459 18.0f, 19.0f, 20.0f,
2460 21.0f, 22.0f, 23.0f,
2461 24.0f, 25.0f, 26.0f,
2463 27.0f, 28.0f, 29.0f,
2464 30.0f, 31.0f, 32.0f,
2465 33.0f, 34.0f, 35.0f,
2469 auto outputExpected = ConvertToDataType<ArmnnType>(
2471 0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f,
2473 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f, 16.0f, 17.0f,
2475 18.0f, 19.0f, 20.0f, 21.0f, 22.0f, 23.0f, 24.0f, 25.0f, 26.0f,
2477 27.0f, 28.0f, 29.0f, 30.0f, 31.0f, 32.0f, 33.0f, 34.0f, 35.0f,
2481 return SimpleReshapeTestImpl<T>(
2482 workloadFactory, memoryManager, inputTensorInfo, outputTensorInfo, input, outputExpected);
2485 template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
2486 LayerTestResult<T, 4> SimpleFloorTest(
2487 armnn::IWorkloadFactory& workloadFactory,
2488 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
2490 armnn::TensorInfo inputTensorInfo({1, 3, 2, 3}, ArmnnType);
2491 inputTensorInfo.SetQuantizationScale(0.1f);
2493 armnn::TensorInfo outputTensorInfo(inputTensorInfo);
2494 outputTensorInfo.SetQuantizationScale(0.1f);
2496 auto input = MakeTensor<T, 4>(inputTensorInfo, ConvertToDataType<ArmnnType>(
2497 { -37.5f, -15.2f, -8.76f, -2.0f, -1.5f, -1.3f, -0.5f, -0.4f, 0.0f,
2498 1.0f, 0.4f, 0.5f, 1.3f, 1.5f, 2.0f, 8.76f, 15.2f, 37.5f },
2501 LayerTestResult<T, 4> ret(outputTensorInfo);
2502 ret.outputExpected = MakeTensor<T, 4>(outputTensorInfo, ConvertToDataType<ArmnnType>(
2503 { -38.0f, -16.0f, -9.0f, -2.0f, -2.0f, -2.0f, -1.0f, -1.0f, 0.0f,
2504 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 2.0f, 8.0f, 15.0f, 37.0f },
2507 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2508 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2510 armnn::FloorQueueDescriptor data;
2511 armnn::WorkloadInfo info;
2512 AddInputToWorkload(data, info, inputTensorInfo, inputHandle.get());
2513 AddOutputToWorkload(data, info, outputTensorInfo, outputHandle.get());
2515 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateFloor(data, info);
2517 inputHandle->Allocate();
2518 outputHandle->Allocate();
2520 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
2522 workload->Execute();
2524 CopyDataFromITensorHandle(&ret.output[0][0][0][0], outputHandle.get());
2530 template<armnn::DataType ArmnnType, typename T>
2531 LayerTestResult<T, 4> ResizeBilinearNopTest(
2532 armnn::IWorkloadFactory& workloadFactory,
2533 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
2534 const armnn::DataLayout dataLayout)
2536 armnn::TensorInfo inputTensorInfo = armnn::IsQuantizedType<T>()
2537 ? armnnUtils::GetTensorInfo(1, 1, 4, 4, dataLayout, ArmnnType)
2538 : armnnUtils::GetTensorInfo(1, 2, 4, 4, dataLayout, ArmnnType);
2539 armnn::TensorInfo outputTensorInfo = armnn::IsQuantizedType<T>()
2540 ? armnnUtils::GetTensorInfo(1, 1, 4, 4, dataLayout, ArmnnType)
2541 : armnnUtils::GetTensorInfo(1, 2, 4, 4, dataLayout, ArmnnType);
2542 if (armnn::IsQuantizedType<T>())
2544 inputTensorInfo.SetQuantizationScale(1.5f);
2545 inputTensorInfo.SetQuantizationOffset(-3);
2546 outputTensorInfo.SetQuantizationScale(1.5f);
2547 outputTensorInfo.SetQuantizationOffset(-3);
2550 std::vector<float> inputData = armnn::IsQuantizedType<T>()
2551 ? std::initializer_list<float>
2558 : std::initializer_list<float>
2560 1.0f, 2.0f, 3.0f, 4.0f,
2561 2.0f, 3.0f, 4.0f, 5.0f,
2562 3.0f, 4.0f, 5.0f, 6.0f,
2563 4.0f, 5.0f, 6.0f, 7.0f,
2565 1.0f, 2.0f, 3.0f, 4.0f,
2566 2.0f, 3.0f, 4.0f, 5.0f,
2567 3.0f, 4.0f, 5.0f, 6.0f,
2568 4.0f, 5.0f, 6.0f, 7.0f
2571 const armnn::PermutationVector NCHWToNHWC = { 0, 3, 1, 2 };
2572 if (dataLayout == armnn::DataLayout::NHWC)
2574 std::vector<float> tmp(inputData.size());
2575 armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(float));
2579 auto input = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(),
2580 inputTensorInfo.GetQuantizationOffset(),
2583 LayerTestResult<T, 4> result(outputTensorInfo);
2584 result.outputExpected = input;
2586 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2587 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2589 armnn::ResizeQueueDescriptor descriptor;
2590 descriptor.m_Parameters.m_Method = armnn::ResizeMethod::Bilinear;
2591 descriptor.m_Parameters.m_DataLayout = dataLayout;
2593 armnn::WorkloadInfo info;
2594 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
2595 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
2597 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateResize(descriptor, info);
2599 inputHandle->Allocate();
2600 outputHandle->Allocate();
2601 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
2603 workload->PostAllocationConfigure();
2604 workload->Execute();
2606 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
2610 template<armnn::DataType ArmnnType, typename T>
2611 LayerTestResult<T, 4> SimpleResizeBilinearTest(
2612 armnn::IWorkloadFactory& workloadFactory,
2613 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
2614 const armnn::DataLayout dataLayout)
2616 armnn::TensorInfo inputTensorInfo = armnn::IsQuantizedType<T>()
2617 ? armnnUtils::GetTensorInfo(1, 1, 2, 2, dataLayout, ArmnnType)
2618 : armnnUtils::GetTensorInfo(1, 2, 2, 2, dataLayout, ArmnnType);
2619 armnn::TensorInfo outputTensorInfo = armnn::IsQuantizedType<T>()
2620 ? armnnUtils::GetTensorInfo(1, 1, 1, 1, dataLayout, ArmnnType)
2621 : armnnUtils::GetTensorInfo(1, 2, 1, 1, dataLayout, ArmnnType);
2623 if (armnn::IsQuantizedType<T>())
2625 inputTensorInfo.SetQuantizationScale(0.1567f);
2626 inputTensorInfo.SetQuantizationOffset(1);
2627 outputTensorInfo.SetQuantizationScale(0.1567f);
2628 outputTensorInfo.SetQuantizationOffset(1);
2631 std::vector<float> inputData = armnn::IsQuantizedType<T>()
2632 ? std::initializer_list<float>
2637 : std::initializer_list<float>
2646 // The 'resize bilinear' operation projects the top-left corner of output texels into the input image,
2647 // then figures out the interpolants and weights. Note this is different to projecting the centre of the
2648 // output texel. Thus, for a input matrix of 2x2, we'll expect the output 1x1 matrix to contain, as
2649 // its single element, the value that was at position (0,0) of the input matrix (rather than an average,
2650 // which we would expect if projecting the centre).
2652 std::vector<float> outputData = armnn::IsQuantizedType<T>()
2653 ? std::initializer_list<float>
2657 : std::initializer_list<float>
2664 const armnn::PermutationVector NCHWToNHWC = { 0, 3, 1, 2 };
2665 if (dataLayout == armnn::DataLayout::NHWC)
2667 std::vector<float> tmp(inputData.size());
2668 armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(float));
2671 std::vector<float> tmp1(outputData.size());
2672 armnnUtils::Permute(outputTensorInfo.GetShape(), NCHWToNHWC, outputData.data(), tmp1.data(), sizeof(float));
2676 auto input = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(),
2677 inputTensorInfo.GetQuantizationOffset(),
2680 LayerTestResult<T, 4> result(outputTensorInfo);
2681 result.outputExpected = MakeTensor<T, 4>(outputTensorInfo,
2682 QuantizedVector<T>(outputTensorInfo.GetQuantizationScale(),
2683 outputTensorInfo.GetQuantizationOffset(),
2686 std::unique_ptr <armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2687 std::unique_ptr <armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2689 armnn::ResizeQueueDescriptor descriptor;
2690 descriptor.m_Parameters.m_Method = armnn::ResizeMethod::Bilinear;
2691 descriptor.m_Parameters.m_DataLayout = dataLayout;
2693 armnn::WorkloadInfo info;
2694 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
2695 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
2697 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateResize(descriptor, info);
2699 inputHandle->Allocate();
2700 outputHandle->Allocate();
2701 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
2703 workload->PostAllocationConfigure();
2704 workload->Execute();
2706 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
2710 template<armnn::DataType ArmnnType, typename T>
2711 LayerTestResult<T, 4> ResizeBilinearSqMinTest(
2712 armnn::IWorkloadFactory& workloadFactory,
2713 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
2714 const armnn::DataLayout dataLayout)
2716 armnn::TensorInfo inputTensorInfo = armnn::IsQuantizedType<T>()
2717 ? armnnUtils::GetTensorInfo(1, 1, 4, 4, dataLayout, ArmnnType)
2718 : armnnUtils::GetTensorInfo(1, 2, 4, 4, dataLayout, ArmnnType);
2719 armnn::TensorInfo outputTensorInfo = armnn::IsQuantizedType<T>()
2720 ? armnnUtils::GetTensorInfo(1, 1, 2, 2, dataLayout, ArmnnType)
2721 : armnnUtils::GetTensorInfo(1, 2, 2, 2, dataLayout, ArmnnType);
2723 if (armnn::IsQuantizedType<T>())
2725 inputTensorInfo.SetQuantizationScale(3.141592f);
2726 inputTensorInfo.SetQuantizationOffset(3);
2727 outputTensorInfo.SetQuantizationScale(3.141592f);
2728 outputTensorInfo.SetQuantizationOffset(3);
2731 std::vector<float> inputData = armnn::IsQuantizedType<T>()
2732 ? std::initializer_list<float>
2739 : std::initializer_list<float>
2741 1.0f, 2.0f, 3.0f, 4.0f,
2742 2.0f, 3.0f, 4.0f, 5.0f,
2743 3.0f, 4.0f, 5.0f, 6.0f,
2744 4.0f, 5.0f, 6.0f, 7.0f,
2746 7.0f, 6.0f, 5.0f, 4.0f,
2747 6.0f, 5.0f, 4.0f, 3.0f,
2748 5.0f, 4.0f, 3.0f, 2.0f,
2749 4.0f, 3.0f, 2.0f, 1.0f
2752 std::vector<float> outputData = armnn::IsQuantizedType<T>()
2753 ? std::initializer_list<float>
2758 : std::initializer_list<float>
2767 const armnn::PermutationVector NCHWToNHWC = { 0, 3, 1, 2 };
2768 if (dataLayout == armnn::DataLayout::NHWC)
2770 std::vector<float> tmp(inputData.size());
2771 armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(float));
2774 std::vector<float> tmp1(outputData.size());
2775 armnnUtils::Permute(outputTensorInfo.GetShape(), NCHWToNHWC, outputData.data(), tmp1.data(), sizeof(float));
2779 auto input = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(),
2780 inputTensorInfo.GetQuantizationOffset(),
2783 LayerTestResult<T, 4> result(outputTensorInfo);
2784 result.outputExpected = MakeTensor<T, 4>(outputTensorInfo,
2785 QuantizedVector<T>(outputTensorInfo.GetQuantizationScale(),
2786 outputTensorInfo.GetQuantizationOffset(),
2789 std::unique_ptr <armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2790 std::unique_ptr <armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2792 armnn::ResizeQueueDescriptor descriptor;
2793 descriptor.m_Parameters.m_Method = armnn::ResizeMethod::Bilinear;
2794 descriptor.m_Parameters.m_DataLayout = dataLayout;
2796 armnn::WorkloadInfo info;
2797 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
2798 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
2800 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateResize(descriptor, info);
2802 inputHandle->Allocate();
2803 outputHandle->Allocate();
2804 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
2806 workload->PostAllocationConfigure();
2807 workload->Execute();
2809 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
2813 template<armnn::DataType ArmnnType, typename T>
2814 LayerTestResult<T, 4> ResizeBilinearMinTest(
2815 armnn::IWorkloadFactory& workloadFactory,
2816 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
2817 const armnn::DataLayout dataLayout)
2819 armnn::TensorInfo inputTensorInfo = armnn::IsQuantizedType<T>()
2820 ? armnnUtils::GetTensorInfo(1, 1, 2, 3, dataLayout, ArmnnType)
2821 : armnnUtils::GetTensorInfo(1, 2, 3, 5, dataLayout, ArmnnType);
2822 armnn::TensorInfo outputTensorInfo = armnn::IsQuantizedType<T>()
2823 ? armnnUtils::GetTensorInfo(1, 1, 1, 2, dataLayout, ArmnnType)
2824 : armnnUtils::GetTensorInfo(1, 2, 2, 3, dataLayout, ArmnnType);
2826 if (armnn::IsQuantizedType<T>())
2828 inputTensorInfo.SetQuantizationScale(1.5f);
2829 inputTensorInfo.SetQuantizationOffset(-1);
2830 outputTensorInfo.SetQuantizationScale(1.5f);
2831 outputTensorInfo.SetQuantizationOffset(-1);
2834 std::vector<float> inputData = armnn::IsQuantizedType<T>()
2835 ? std::initializer_list<float>
2837 3.0f, 4.5f, 6.0f, // 1, 2, 3, : Expected quantised values
2838 9.0f, 13.5f, 21.0f // 5, 8, 13
2840 : std::initializer_list<float>
2842 1.0f, 2.0f, 3.0f, 5.0f, 8.0f,
2843 13.0f, 21.0f, 34.0f, 55.0f, 89.0f,
2844 144.0f, 233.0f, 377.0f, 610.0f, 987.0f,
2846 987.0f, 610.0f, 377.0f, 233.0f, 144.0f,
2847 89.0f, 55.0f, 34.0f, 21.0f, 13.0f,
2848 8.0f, 5.0f, 3.0f, 2.0f, 1.0f
2851 std::vector<float> outputData = armnn::IsQuantizedType<T>()
2852 ? std::initializer_list<float>
2856 : std::initializer_list<float>
2858 1.0f, 2.6666f, 6.00f,
2859 78.5f, 179.3333f, 401.00f,
2861 987.0f, 454.6670f, 203.33f,
2862 48.5f, 22.3333f, 10.00f
2865 const armnn::PermutationVector NCHWToNHWC = { 0, 3, 1, 2 };
2866 if (dataLayout == armnn::DataLayout::NHWC)
2868 std::vector<float> tmp(inputData.size());
2869 armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(float));
2872 std::vector<float> tmp1(outputData.size());
2873 armnnUtils::Permute(outputTensorInfo.GetShape(), NCHWToNHWC, outputData.data(), tmp1.data(), sizeof(float));
2877 auto input = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(),
2878 inputTensorInfo.GetQuantizationOffset(),
2881 LayerTestResult<T, 4> result(outputTensorInfo);
2882 result.outputExpected = MakeTensor<T, 4>(outputTensorInfo,
2883 QuantizedVector<T>(outputTensorInfo.GetQuantizationScale(),
2884 outputTensorInfo.GetQuantizationOffset(),
2887 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2888 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2890 armnn::ResizeQueueDescriptor descriptor;
2891 descriptor.m_Parameters.m_Method = armnn::ResizeMethod::Bilinear;
2892 descriptor.m_Parameters.m_DataLayout = dataLayout;
2894 armnn::WorkloadInfo info;
2895 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
2896 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
2898 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateResize(descriptor, info);
2900 inputHandle->Allocate();
2901 outputHandle->Allocate();
2902 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
2904 workload->PostAllocationConfigure();
2905 workload->Execute();
2907 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
2911 template<armnn::DataType ArmnnType, typename T>
2912 LayerTestResult<T, 4> ResizeBilinearMagTest(
2913 armnn::IWorkloadFactory& workloadFactory,
2914 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
2915 const armnn::DataLayout dataLayout)
2917 armnn::TensorInfo inputTensorInfo = armnn::IsQuantizedType<T>()
2918 ? armnnUtils::GetTensorInfo(1, 1, 3, 2, dataLayout, ArmnnType)
2919 : armnnUtils::GetTensorInfo(1, 2, 3, 2, dataLayout, ArmnnType);
2920 armnn::TensorInfo outputTensorInfo = armnn::IsQuantizedType<T>()
2921 ? armnnUtils::GetTensorInfo(1, 1, 3, 5, dataLayout, ArmnnType)
2922 : armnnUtils::GetTensorInfo(1, 2, 3, 5, dataLayout, ArmnnType);
2924 if (armnn::IsQuantizedType<T>())
2926 inputTensorInfo.SetQuantizationScale(0.010765f);
2927 inputTensorInfo.SetQuantizationOffset(7);
2928 outputTensorInfo.SetQuantizationScale(0.010132f);
2929 outputTensorInfo.SetQuantizationOffset(-18);
2932 std::vector<float> inputData = armnn::IsQuantizedType<T>()
2933 ? std::initializer_list<float>
2935 0.183005f, 2.379065f, // 24, 228, : Expected quantised values
2936 1.05497f, 1.302565f, // 105, 128,
2937 2.400595f, 0.68896f // 230, 71
2939 : std::initializer_list<float>
2949 std::vector<float> outputData = armnn::IsQuantizedType<T>()
2950 ? std::initializer_list<float>
2952 0.18300501f, 1.06142902f, 1.93985295f, 2.37906504f, 2.37906504f,
2953 1.05497003f, 1.15400803f, 1.25304604f, 1.30256498f, 1.30256498f,
2954 2.40059495f, 1.71594095f, 1.03128707f, 0.68896002f, 0.68896002f
2955 // 0, 87, 173, 217, 217, : Expected quantised values
2956 // 86, 96, 106, 111, 111,
2957 // 219, 151, 84, 50, 50
2959 : std::initializer_list<float>
2961 1.0f, 1.4f, 1.8f, 2.0f, 2.0f,
2962 13.0f, 16.2f, 19.4f, 21.0f, 21.0f,
2963 144.0f, 179.6f, 215.2f, 233.0f, 233.0f,
2965 233.0f, 197.4f, 161.8f, 144.0f, 144.0f,
2966 21.0f, 17.8f, 14.6f, 13.0f, 13.0f,
2967 2.0f, 1.6f, 1.2f, 1.0f, 1.0f
2970 const armnn::PermutationVector NCHWToNHWC = { 0, 3, 1, 2 };
2971 if (dataLayout == armnn::DataLayout::NHWC)
2973 std::vector<float> tmp(inputData.size());
2974 armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(float));
2977 std::vector<float> tmp1(outputData.size());
2978 armnnUtils::Permute(outputTensorInfo.GetShape(), NCHWToNHWC, outputData.data(), tmp1.data(), sizeof(float));
2982 auto input = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(),
2983 inputTensorInfo.GetQuantizationOffset(),
2986 LayerTestResult<T, 4> result(outputTensorInfo);
2987 result.outputExpected = MakeTensor<T, 4>(outputTensorInfo,
2988 QuantizedVector<T>(outputTensorInfo.GetQuantizationScale(),
2989 outputTensorInfo.GetQuantizationOffset(),
2992 std::unique_ptr <armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2993 std::unique_ptr <armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2995 armnn::ResizeQueueDescriptor descriptor;
2996 descriptor.m_Parameters.m_Method = armnn::ResizeMethod::Bilinear;
2997 descriptor.m_Parameters.m_DataLayout = dataLayout;
2999 armnn::WorkloadInfo info;
3000 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
3001 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
3003 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateResize(descriptor, info);
3005 inputHandle->Allocate();
3006 outputHandle->Allocate();
3007 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
3009 workload->PostAllocationConfigure();
3010 workload->Execute();
3012 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
3017 template<armnn::DataType ArmnnType, typename T>
3018 LayerTestResult<T, 4> ResizeNearestNeighborNopTest(
3019 armnn::IWorkloadFactory& workloadFactory,
3020 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
3021 const armnn::DataLayout dataLayout)
3023 armnn::TensorInfo inputTensorInfo = armnn::IsQuantizedType<T>()
3024 ? armnnUtils::GetTensorInfo(1, 1, 4, 4, dataLayout, ArmnnType)
3025 : armnnUtils::GetTensorInfo(1, 2, 4, 4, dataLayout, ArmnnType);
3026 armnn::TensorInfo outputTensorInfo = armnn::IsQuantizedType<T>()
3027 ? armnnUtils::GetTensorInfo(1, 1, 4, 4, dataLayout, ArmnnType)
3028 : armnnUtils::GetTensorInfo(1, 2, 4, 4, dataLayout, ArmnnType);
3029 if (armnn::IsQuantizedType<T>())
3031 inputTensorInfo.SetQuantizationScale(1.5f);
3032 inputTensorInfo.SetQuantizationOffset(-3);
3033 outputTensorInfo.SetQuantizationScale(1.5f);
3034 outputTensorInfo.SetQuantizationOffset(-3);
3037 std::vector<float> inputData = armnn::IsQuantizedType<T>()
3038 ? std::initializer_list<float>
3045 : std::initializer_list<float>
3047 1.0f, 2.0f, 3.0f, 4.0f,
3048 2.0f, 3.0f, 4.0f, 5.0f,
3049 3.0f, 4.0f, 5.0f, 6.0f,
3050 4.0f, 5.0f, 6.0f, 7.0f,
3052 1.0f, 2.0f, 3.0f, 4.0f,
3053 2.0f, 3.0f, 4.0f, 5.0f,
3054 3.0f, 4.0f, 5.0f, 6.0f,
3055 4.0f, 5.0f, 6.0f, 7.0f
3058 const armnn::PermutationVector NCHWToNHWC = { 0, 3, 1, 2 };
3059 if (dataLayout == armnn::DataLayout::NHWC)
3061 std::vector<float> tmp(inputData.size());
3062 armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(float));
3066 auto input = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(),
3067 inputTensorInfo.GetQuantizationOffset(),
3070 LayerTestResult<T, 4> result(outputTensorInfo);
3071 result.outputExpected = input;
3073 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
3074 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
3076 armnn::ResizeQueueDescriptor descriptor;
3077 descriptor.m_Parameters.m_Method = armnn::ResizeMethod::NearestNeighbor;
3078 descriptor.m_Parameters.m_DataLayout = dataLayout;
3079 armnn::WorkloadInfo info;
3080 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
3081 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
3083 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateResize(descriptor, info);
3085 inputHandle->Allocate();
3086 outputHandle->Allocate();
3087 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
3089 workload->PostAllocationConfigure();
3090 workload->Execute();
3092 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
3096 template<armnn::DataType ArmnnType, typename T>
3097 LayerTestResult<T, 4> SimpleResizeNearestNeighborTest(
3098 armnn::IWorkloadFactory& workloadFactory,
3099 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
3100 const armnn::DataLayout dataLayout)
3102 armnn::TensorInfo inputTensorInfo = armnn::IsQuantizedType<T>()
3103 ? armnnUtils::GetTensorInfo(1, 1, 2, 2, dataLayout, ArmnnType)
3104 : armnnUtils::GetTensorInfo(1, 2, 2, 2, dataLayout, ArmnnType);
3105 armnn::TensorInfo outputTensorInfo = armnn::IsQuantizedType<T>()
3106 ? armnnUtils::GetTensorInfo(1, 1, 1, 1, dataLayout, ArmnnType)
3107 : armnnUtils::GetTensorInfo(1, 2, 1, 1, dataLayout, ArmnnType);
3109 if (armnn::IsQuantizedType<T>())
3111 inputTensorInfo.SetQuantizationScale(0.1567f);
3112 inputTensorInfo.SetQuantizationOffset(1);
3113 outputTensorInfo.SetQuantizationScale(0.1567f);
3114 outputTensorInfo.SetQuantizationOffset(1);
3117 std::vector<float> inputData = armnn::IsQuantizedType<T>()
3118 ? std::initializer_list<float>
3123 : std::initializer_list<float>
3132 // The 'resize' operation projects the top-left corner of output texels into the input image,
3133 // then figures out the interpolants and weights. Note this is different to projecting the centre of the
3134 // output texel. Thus, for a input matrix of 2x2, we'll expect the output 1x1 matrix to contain, as
3135 // its single element, the value that was at position (0,0) of the input matrix (rather than an average,
3136 // which we would expect if projecting the centre).
3138 std::vector<float> outputData = armnn::IsQuantizedType<T>()
3139 ? std::initializer_list<float>
3143 : std::initializer_list<float>
3150 const armnn::PermutationVector NCHWToNHWC = { 0, 3, 1, 2 };
3151 if (dataLayout == armnn::DataLayout::NHWC)
3153 std::vector<float> tmp(inputData.size());
3154 armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(float));
3157 std::vector<float> tmp1(outputData.size());
3158 armnnUtils::Permute(outputTensorInfo.GetShape(), NCHWToNHWC, outputData.data(), tmp1.data(), sizeof(float));
3162 auto input = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(),
3163 inputTensorInfo.GetQuantizationOffset(),
3166 LayerTestResult<T, 4> result(outputTensorInfo);
3167 result.outputExpected = MakeTensor<T, 4>(outputTensorInfo,
3168 QuantizedVector<T>(outputTensorInfo.GetQuantizationScale(),
3169 outputTensorInfo.GetQuantizationOffset(),
3172 std::unique_ptr <armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
3173 std::unique_ptr <armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
3175 armnn::ResizeQueueDescriptor descriptor;
3176 descriptor.m_Parameters.m_DataLayout = dataLayout;
3177 descriptor.m_Parameters.m_Method = armnn::ResizeMethod::NearestNeighbor;
3178 armnn::WorkloadInfo info;
3179 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
3180 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
3182 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateResize(descriptor, info);
3184 inputHandle->Allocate();
3185 outputHandle->Allocate();
3186 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
3188 workload->PostAllocationConfigure();
3189 workload->Execute();
3191 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
3195 template<armnn::DataType ArmnnType, typename T>
3196 LayerTestResult<T, 4> ResizeNearestNeighborSqMinTest(
3197 armnn::IWorkloadFactory& workloadFactory,
3198 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
3199 const armnn::DataLayout dataLayout)
3201 armnn::TensorInfo inputTensorInfo = armnn::IsQuantizedType<T>()
3202 ? armnnUtils::GetTensorInfo(1, 1, 4, 4, dataLayout, ArmnnType)
3203 : armnnUtils::GetTensorInfo(1, 2, 4, 4, dataLayout, ArmnnType);
3204 armnn::TensorInfo outputTensorInfo = armnn::IsQuantizedType<T>()
3205 ? armnnUtils::GetTensorInfo(1, 1, 2, 2, dataLayout, ArmnnType)
3206 : armnnUtils::GetTensorInfo(1, 2, 2, 2, dataLayout, ArmnnType);
3208 if (armnn::IsQuantizedType<T>())
3210 inputTensorInfo.SetQuantizationScale(3.141592f);
3211 inputTensorInfo.SetQuantizationOffset(3);
3212 outputTensorInfo.SetQuantizationScale(3.141592f);
3213 outputTensorInfo.SetQuantizationOffset(3);
3216 std::vector<float> inputData = armnn::IsQuantizedType<T>()
3217 ? std::initializer_list<float>
3224 : std::initializer_list<float>
3226 1.0f, 2.0f, 3.0f, 4.0f,
3227 2.0f, 3.0f, 4.0f, 5.0f,
3228 3.0f, 4.0f, 5.0f, 6.0f,
3229 4.0f, 5.0f, 6.0f, 7.0f,
3231 7.0f, 6.0f, 5.0f, 4.0f,
3232 6.0f, 5.0f, 4.0f, 3.0f,
3233 5.0f, 4.0f, 3.0f, 2.0f,
3234 4.0f, 3.0f, 2.0f, 1.0f
3237 std::vector<float> outputData = armnn::IsQuantizedType<T>()
3238 ? std::initializer_list<float>
3243 : std::initializer_list<float>
3252 const armnn::PermutationVector NCHWToNHWC = { 0, 3, 1, 2 };
3253 if (dataLayout == armnn::DataLayout::NHWC)
3255 std::vector<float> tmp(inputData.size());
3256 armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(float));
3259 std::vector<float> tmp1(outputData.size());
3260 armnnUtils::Permute(outputTensorInfo.GetShape(), NCHWToNHWC, outputData.data(), tmp1.data(), sizeof(float));
3264 auto input = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(),
3265 inputTensorInfo.GetQuantizationOffset(),
3268 LayerTestResult<T, 4> result(outputTensorInfo);
3269 result.outputExpected = MakeTensor<T, 4>(outputTensorInfo,
3270 QuantizedVector<T>(outputTensorInfo.GetQuantizationScale(),
3271 outputTensorInfo.GetQuantizationOffset(),
3274 std::unique_ptr <armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
3275 std::unique_ptr <armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
3277 armnn::ResizeQueueDescriptor descriptor;
3278 descriptor.m_Parameters.m_DataLayout = dataLayout;
3279 descriptor.m_Parameters.m_Method = armnn::ResizeMethod::NearestNeighbor;
3280 armnn::WorkloadInfo info;
3281 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
3282 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
3284 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateResize(descriptor, info);
3286 inputHandle->Allocate();
3287 outputHandle->Allocate();
3288 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
3290 workload->PostAllocationConfigure();
3291 workload->Execute();
3293 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
3297 template<armnn::DataType ArmnnType, typename T>
3298 LayerTestResult<T, 4> ResizeNearestNeighborMinTest(
3299 armnn::IWorkloadFactory& workloadFactory,
3300 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
3301 const armnn::DataLayout dataLayout)
3303 armnn::TensorInfo inputTensorInfo = armnn::IsQuantizedType<T>()
3304 ? armnnUtils::GetTensorInfo(1, 1, 2, 3, dataLayout, ArmnnType)
3305 : armnnUtils::GetTensorInfo(1, 2, 3, 5, dataLayout, ArmnnType);
3306 armnn::TensorInfo outputTensorInfo = armnn::IsQuantizedType<T>()
3307 ? armnnUtils::GetTensorInfo(1, 1, 1, 2, dataLayout, ArmnnType)
3308 : armnnUtils::GetTensorInfo(1, 2, 2, 3, dataLayout, ArmnnType);
3310 if (armnn::IsQuantizedType<T>())
3312 inputTensorInfo.SetQuantizationScale(1.5f);
3313 inputTensorInfo.SetQuantizationOffset(-1);
3314 outputTensorInfo.SetQuantizationScale(1.5f);
3315 outputTensorInfo.SetQuantizationOffset(-1);
3318 std::vector<float> inputData = armnn::IsQuantizedType<T>()
3319 ? std::initializer_list<float>
3321 3.0f, 4.5f, 6.0f, // 1, 2, 3, : Expected quantised values
3322 9.0f, 13.5f, 21.0f // 5, 8, 13
3324 : std::initializer_list<float>
3326 1.0f, 2.0f, 3.0f, 5.0f, 8.0f,
3327 13.0f, 21.0f, 34.0f, 55.0f, 89.0f,
3328 144.0f, 233.0f, 377.0f, 610.0f, 987.0f,
3330 987.0f, 610.0f, 377.0f, 233.0f, 144.0f,
3331 89.0f, 55.0f, 34.0f, 21.0f, 13.0f,
3332 8.0f, 5.0f, 3.0f, 2.0f, 1.0f
3335 std::vector<float> outputData = armnn::IsQuantizedType<T>()
3336 ? std::initializer_list<float>
3340 : std::initializer_list<float>
3345 987.f, 610.f, 233.f,
3349 const armnn::PermutationVector NCHWToNHWC = { 0, 3, 1, 2 };
3350 if (dataLayout == armnn::DataLayout::NHWC)
3352 std::vector<float> tmp(inputData.size());
3353 armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(float));
3356 std::vector<float> tmp1(outputData.size());
3357 armnnUtils::Permute(outputTensorInfo.GetShape(), NCHWToNHWC, outputData.data(), tmp1.data(), sizeof(float));
3361 auto input = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(),
3362 inputTensorInfo.GetQuantizationOffset(),
3365 LayerTestResult<T, 4> result(outputTensorInfo);
3366 result.outputExpected = MakeTensor<T, 4>(outputTensorInfo,
3367 QuantizedVector<T>(outputTensorInfo.GetQuantizationScale(),
3368 outputTensorInfo.GetQuantizationOffset(),
3371 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
3372 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
3374 armnn::ResizeQueueDescriptor descriptor;
3375 descriptor.m_Parameters.m_DataLayout = dataLayout;
3376 descriptor.m_Parameters.m_Method = armnn::ResizeMethod::NearestNeighbor;
3377 armnn::WorkloadInfo info;
3378 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
3379 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
3381 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateResize(descriptor, info);
3383 inputHandle->Allocate();
3384 outputHandle->Allocate();
3385 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
3387 workload->PostAllocationConfigure();
3388 workload->Execute();
3390 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
3394 template<armnn::DataType ArmnnType, typename T>
3395 LayerTestResult<T, 4> ResizeNearestNeighborMagTest(
3396 armnn::IWorkloadFactory& workloadFactory,
3397 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
3398 const armnn::DataLayout dataLayout,
3400 int32_t inQuantOffset,
3401 float outQuantScale,
3402 int32_t outQuantOffset)
3404 armnn::TensorInfo inputTensorInfo = armnn::IsQuantizedType<T>()
3405 ? armnnUtils::GetTensorInfo(1, 1, 3, 2, dataLayout, ArmnnType)
3406 : armnnUtils::GetTensorInfo(1, 2, 3, 2, dataLayout, ArmnnType);
3407 armnn::TensorInfo outputTensorInfo = armnn::IsQuantizedType<T>()
3408 ? armnnUtils::GetTensorInfo(1, 1, 3, 5, dataLayout, ArmnnType)
3409 : armnnUtils::GetTensorInfo(1, 2, 3, 5, dataLayout, ArmnnType);
3411 if (armnn::IsQuantizedType<T>())
3413 inputTensorInfo.SetQuantizationScale(inQuantScale);
3414 inputTensorInfo.SetQuantizationOffset(inQuantOffset);
3415 outputTensorInfo.SetQuantizationScale(outQuantScale);
3416 outputTensorInfo.SetQuantizationOffset(outQuantOffset);
3419 std::vector<float> inputData = armnn::IsQuantizedType<T>()
3420 ? std::initializer_list<float>
3422 0.183005f, 2.379065f, // 24, 228, : expected quantised values
3423 1.054970f, 1.302565f, // 105, 128,
3424 2.400595f, 0.688960f // 230, 71
3426 : std::initializer_list<float>
3436 std::vector<float> outputData = armnn::IsQuantizedType<T>()
3437 ? std::initializer_list<float>
3439 0.183005f, 0.183005f, 0.183005f, 2.379065f, 2.379065f,
3440 1.054970f, 1.054970f, 1.054970f, 1.302565f, 1.302565f,
3441 2.400595f, 2.400595f, 2.400595f, 0.688960f, 0.688960f
3443 : std::initializer_list<float>
3445 1.f, 1.f, 1.f, 2.f, 2.f,
3446 13.f, 13.f, 13.f, 21.f, 21.f,
3447 144.f, 144.f, 144.f, 233.f, 233.f,
3449 233.f, 233.f, 233.f, 144.f, 144.f,
3450 21.f, 21.f, 21.f, 13.f, 13.f,
3451 2.f, 2.f, 2.f, 1.f, 1.f
3454 const armnn::PermutationVector NCHWToNHWC = { 0, 3, 1, 2 };
3455 if (dataLayout == armnn::DataLayout::NHWC)
3457 std::vector<float> tmp(inputData.size());
3458 armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(float));
3461 std::vector<float> tmp1(outputData.size());
3462 armnnUtils::Permute(outputTensorInfo.GetShape(), NCHWToNHWC, outputData.data(), tmp1.data(), sizeof(float));
3466 auto input = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(),
3467 inputTensorInfo.GetQuantizationOffset(),
3470 LayerTestResult<T, 4> result(outputTensorInfo);
3471 result.outputExpected = MakeTensor<T, 4>(outputTensorInfo,
3472 QuantizedVector<T>(outputTensorInfo.GetQuantizationScale(),
3473 outputTensorInfo.GetQuantizationOffset(),
3476 std::unique_ptr <armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
3477 std::unique_ptr <armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
3479 armnn::ResizeQueueDescriptor descriptor;
3480 descriptor.m_Parameters.m_DataLayout = dataLayout;
3481 descriptor.m_Parameters.m_Method = armnn::ResizeMethod::NearestNeighbor;
3482 armnn::WorkloadInfo info;
3483 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
3484 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
3486 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateResize(descriptor, info);
3488 inputHandle->Allocate();
3489 outputHandle->Allocate();
3490 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
3492 workload->PostAllocationConfigure();
3493 workload->Execute();
3495 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
3499 template<armnn::DataType ArmnnType, typename T, std::size_t InputDim, std::size_t OutputDim>
3500 LayerTestResult<T, OutputDim> MeanTestHelper(
3501 armnn::IWorkloadFactory& workloadFactory,
3502 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
3503 const unsigned int* inputShape,
3504 const std::vector<float>& inputData,
3505 const std::vector<unsigned int>& axis,
3507 const unsigned int* outputShape,
3508 const std::vector<float>& outputData,
3512 armnn::TensorInfo inputTensorInfo(InputDim, inputShape, ArmnnType);
3513 armnn::TensorInfo outputTensorInfo(OutputDim, outputShape, ArmnnType);
3515 inputTensorInfo.SetQuantizationScale(scale);
3516 inputTensorInfo.SetQuantizationOffset(offset);
3518 outputTensorInfo.SetQuantizationScale(scale);
3519 outputTensorInfo.SetQuantizationOffset(offset);
3521 auto input = MakeTensor<T, InputDim>(inputTensorInfo, ConvertToDataType<ArmnnType>(inputData, inputTensorInfo));
3523 LayerTestResult<T, OutputDim> result(outputTensorInfo);
3524 result.outputExpected = MakeTensor<T, OutputDim>(
3525 outputTensorInfo, ConvertToDataType<ArmnnType>(outputData, outputTensorInfo));
3527 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
3528 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
3530 armnn::MeanQueueDescriptor data;
3531 data.m_Parameters.m_Axis = axis;
3532 data.m_Parameters.m_KeepDims = keepDims;
3533 armnn::WorkloadInfo info;
3534 AddInputToWorkload(data, info, inputTensorInfo, inputHandle.get());
3535 AddOutputToWorkload(data, info, outputTensorInfo, outputHandle.get());
3537 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateMean(data, info);
3539 inputHandle->Allocate();
3540 outputHandle->Allocate();
3542 CopyDataToITensorHandle(inputHandle.get(), input.origin());
3544 workload->PostAllocationConfigure();
3545 workload->Execute();
3547 CopyDataFromITensorHandle(result.output.origin(), outputHandle.get());
3552 template<armnn::DataType ArmnnType, typename T>
3553 LayerTestResult<T, 1> MeanSimpleTest(
3554 armnn::IWorkloadFactory& workloadFactory,
3555 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3557 const unsigned int inputShape[] = { 3, 2 };
3558 const unsigned int outputShape[] = { 1 };
3560 std::vector<float> input({ 1.5f, 1.5f, 2.5f, 2.5f, 3.5f, 3.5f });
3561 std::vector<float> output({ 2.5f });
3563 return MeanTestHelper<ArmnnType, T, 2, 1>(
3564 workloadFactory, memoryManager, inputShape, input, {}, false, outputShape, output);
3567 template<armnn::DataType ArmnnType, typename T>
3568 LayerTestResult<T, 3> MeanSimpleAxisTest(
3569 armnn::IWorkloadFactory& workloadFactory,
3570 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3572 const unsigned int inputShape[] = { 2, 3, 1, 2 };
3573 const unsigned int outputShape[] = { 3, 1, 2 };
3575 std::vector<float> input({ 1.5f, 2.5f, 3.5f, 4.5f, 5.5f, 6.5f, 1.5f, 2.5f, 3.5f, 4.5f, 5.5f, 6.5f });
3576 std::vector<float> output({ 1.5f, 2.5f, 3.5f, 4.5f, 5.5f, 6.5f });
3578 return MeanTestHelper<ArmnnType, T, 4, 3>(
3579 workloadFactory, memoryManager, inputShape, input, { 0 }, false, outputShape, output);
3582 template<armnn::DataType ArmnnType, typename T>
3583 LayerTestResult<T, 4> MeanKeepDimsTest(
3584 armnn::IWorkloadFactory& workloadFactory,
3585 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3587 const unsigned int inputShape[] = { 1, 1, 3, 2 };
3588 const unsigned int outputShape[] = { 1, 1, 1, 2 };
3590 std::vector<float> input({ 1.5f, 1.5f, 2.5f, 2.5f, 3.5f, 3.5f });
3591 std::vector<float> output({ 2.5f, 2.5f });
3593 return MeanTestHelper<ArmnnType, T, 4, 4>(
3594 workloadFactory, memoryManager, inputShape, input, { 2 }, true, outputShape, output);
3597 template<armnn::DataType ArmnnType, typename T>
3598 LayerTestResult<T, 4> MeanMultipleDimsTest(
3599 armnn::IWorkloadFactory& workloadFactory,
3600 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3602 const unsigned int inputShape[] = { 2, 3, 1, 2 };
3603 const unsigned int outputShape[] = { 1, 3, 1, 1 };
3605 std::vector<float> input({ 1.5f, 2.5f, 3.5f, 4.5f, 5.5f, 6.5f, 1.5f, 2.5f, 3.5f, 4.5f, 5.5f, 6.5 });
3606 std::vector<float> output({ 2.0f, 4.0f, 6.0f });
3608 return MeanTestHelper<ArmnnType, T, 4, 4>(
3609 workloadFactory, memoryManager, inputShape, input, { 0, 3 }, true, outputShape, output);
3612 template<armnn::DataType ArmnnType, typename T>
3613 LayerTestResult<T, 1> MeanVts1Test(
3614 armnn::IWorkloadFactory& workloadFactory,
3615 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3617 const unsigned int inputShape[] = { 4, 3, 2 };
3618 const unsigned int outputShape[] = { 2 };
3620 std::vector<float> input({ 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f,
3621 15.0f, 16.0f, 17.0f, 18.0f, 19.0f, 20.0f, 21.0f, 22.0f, 23.0f, 24.0f });
3622 std::vector<float> output({ 12.0f, 13.0f });
3624 return MeanTestHelper<ArmnnType, T, 3, 1>(
3625 workloadFactory, memoryManager, inputShape, input, { 0, 1 }, false, outputShape, output);
3628 template<armnn::DataType ArmnnType, typename T>
3629 LayerTestResult<T, 3> MeanVts2Test(
3630 armnn::IWorkloadFactory& workloadFactory,
3631 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3633 const unsigned int inputShape[] = { 4, 3, 2 };
3634 const unsigned int outputShape[] = { 1, 3, 1 };
3636 std::vector<float> input({ 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f,
3637 15.0f, 16.0f, 17.0f, 18.0f, 19.0f, 20.0f, 21.0f, 22.0f, 23.0f, 24.0f });
3638 std::vector<float> output({ 10.5f, 12.5f, 14.5f });
3640 return MeanTestHelper<ArmnnType, T, 3, 3>(
3641 workloadFactory, memoryManager, inputShape, input, { 0, 2 }, true, outputShape, output);
3644 template<armnn::DataType ArmnnType, typename T>
3645 LayerTestResult<T, 3> MeanVts3Test(
3646 armnn::IWorkloadFactory& workloadFactory,
3647 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3649 const unsigned int inputShape[] = { 1, 2, 2, 1 };
3650 const unsigned int outputShape[] = { 1, 2, 1 };
3652 std::vector<float> input({ 1.0f, 2.0f, 3.0f, 4.0f });
3653 std::vector<float> output({ 1.5f, 3.5f });
3655 return MeanTestHelper<ArmnnType, T, 4, 3>(
3656 workloadFactory, memoryManager, inputShape, input, { 2 }, false, outputShape, output);
3659 template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
3660 LayerTestResult<T, 3> ConcatDifferentInputOutputQParamTest(
3661 armnn::IWorkloadFactory& workloadFactory,
3662 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
3665 // Defines the tensor descriptors.
3666 armnn::TensorInfo outputTensorInfo({ 3, 6, 3 }, ArmnnType);
3667 armnn::TensorInfo inputTensorInfo1({ 3, 6, 2 }, ArmnnType);
3668 armnn::TensorInfo inputTensorInfo2({ 3, 6, 1 }, ArmnnType);
3670 std::vector<armnn::TensorShape> inputTensorShapes({inputTensorInfo1.GetShape(), inputTensorInfo2.GetShape()});
3672 // Quantized input1 tensor.
3673 const float inputScale1 = 0.5f;
3674 const int32_t inputOffset1 = 5;
3676 auto input1 = MakeTensor<T, 3>(inputTensorInfo1, std::vector<T>(
3693 // Quatized input2 tensor.
3694 const float inputScale2 = 0.2f;
3695 const int32_t inputOffset2 = 10;
3697 auto input2 = MakeTensor<T, 3>(inputTensorInfo2, std::vector<T>(
3707 // Quantized output tensor.
3708 const float outputScale = 0.1f;
3709 const int32_t outputOffset = 20;
3711 LayerTestResult<T, 3> ret(outputTensorInfo);
3713 ret.outputExpected = MakeTensor<T, 3>(outputTensorInfo, std::vector<T>(
3737 outputTensorInfo.SetQuantizationScale(outputScale);
3738 outputTensorInfo.SetQuantizationOffset(outputOffset);
3739 inputTensorInfo1.SetQuantizationScale(inputScale1);
3740 inputTensorInfo1.SetQuantizationOffset(inputOffset1);
3741 inputTensorInfo2.SetQuantizationScale(inputScale2);
3742 inputTensorInfo2.SetQuantizationOffset(inputOffset2);
3744 std::vector<unsigned int> wOrigin1 = { 0, 0, 0 }; //Extent of the window is defined by size of input[0].
3745 armnn::ConcatQueueDescriptor::ViewOrigin window1(wOrigin1);
3747 std::vector<unsigned int> wOrigin2 = { 0, 0, 2 }; //Extent of the window is defined by size of input[1].
3748 armnn::ConcatQueueDescriptor::ViewOrigin window2(wOrigin2);
3750 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
3752 bool subTensorsSupported = useSubtensor && workloadFactory.SupportsSubTensors();
3754 std::unique_ptr<armnn::ITensorHandle> inputHandle1 =
3755 subTensorsSupported ?
3756 workloadFactory.CreateSubTensorHandle(*outputHandle, inputTensorInfo1.GetShape(), wOrigin1.data()) :
3757 workloadFactory.CreateTensorHandle(inputTensorInfo1);
3759 std::unique_ptr<armnn::ITensorHandle> inputHandle2 =
3760 subTensorsSupported ?
3761 workloadFactory.CreateSubTensorHandle(*outputHandle, inputTensorInfo2.GetShape(), wOrigin2.data()) :
3762 workloadFactory.CreateTensorHandle(inputTensorInfo2);
3764 armnn::ConcatQueueDescriptor data;
3765 armnn::OriginsDescriptor desc = armnn::CreateDescriptorForConcatenation(
3766 inputTensorShapes.begin(),inputTensorShapes.end(), 2);
3767 data.m_Parameters = desc;
3769 armnn::WorkloadInfo info;
3770 AddInputToWorkload(data, info, inputTensorInfo1, inputHandle1.get());
3771 AddInputToWorkload(data, info, inputTensorInfo2, inputHandle2.get());
3772 AddOutputToWorkload(data, info, outputTensorInfo, outputHandle.get());
3774 data.m_ViewOrigins.push_back(window1);
3775 data.m_ViewOrigins.push_back(window2);
3777 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateConcat(data, info);
3779 inputHandle1->Allocate();
3780 inputHandle2->Allocate();
3781 outputHandle->Allocate();
3783 CopyDataToITensorHandle(inputHandle1.get(), &input1[0][0][0]);
3784 CopyDataToITensorHandle(inputHandle2.get(), &input2[0][0][0]);
3786 workload->PostAllocationConfigure();
3787 workload->Execute();
3789 CopyDataFromITensorHandle(&ret.output[0][0][0], outputHandle.get());
3794 template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
3795 LayerTestResult<T, 4> PreluTest(
3796 armnn::IWorkloadFactory& workloadFactory,
3797 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3799 armnn::TensorInfo inputTensorInfo ({ 1, 2, 2, 3 }, ArmnnType);
3800 armnn::TensorInfo alphaTensorInfo ({ 1, 1, 1, 3 }, ArmnnType);
3801 armnn::TensorInfo outputTensorInfo({ 1, 2, 2, 3 }, ArmnnType);
3803 if (armnn::IsQuantizedType<T>())
3805 inputTensorInfo.SetQuantizationScale(0.25f);
3806 inputTensorInfo.SetQuantizationOffset(128);
3807 alphaTensorInfo.SetQuantizationScale(0.25f);
3808 alphaTensorInfo.SetQuantizationOffset(50);
3809 outputTensorInfo.SetQuantizationScale(0.5f);
3810 outputTensorInfo.SetQuantizationOffset(120);
3813 std::vector<float> inputData
3815 // Expected quantized values:
3816 // 128, 128, 128, 132, 132, 132, 124, 124, 124, 120, 120, 120
3817 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, -1.0f, -1.0f, -1.0f, -2.0f, -2.0f, -2.0f
3819 std::vector<float> alphaData
3821 // Expected quantized values:
3825 std::vector<float> outputExpectedData =
3827 // Expected quantized values:
3828 // 20, 120, 120, 122, 122, 122, 120, 118, 116, 120, 116, 112
3829 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, 0.0f, -1.0f, -2.0f, 0.0f, -2.0f, -4.0f
3832 auto input = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(),
3833 inputTensorInfo.GetQuantizationOffset(),
3835 auto alpha = MakeTensor<T, 4>(alphaTensorInfo, QuantizedVector<T>(alphaTensorInfo.GetQuantizationScale(),
3836 alphaTensorInfo.GetQuantizationOffset(),
3839 LayerTestResult<T, 4> result(outputTensorInfo);
3840 result.outputExpected = MakeTensor<T, 4>(outputTensorInfo,
3841 QuantizedVector<T>(outputTensorInfo.GetQuantizationScale(),
3842 outputTensorInfo.GetQuantizationOffset(),
3843 outputExpectedData));
3845 std::unique_ptr <armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
3846 std::unique_ptr <armnn::ITensorHandle> alphaHandle = workloadFactory.CreateTensorHandle(alphaTensorInfo);
3847 std::unique_ptr <armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
3849 armnn::PreluQueueDescriptor descriptor;
3850 armnn::WorkloadInfo info;
3851 AddInputToWorkload (descriptor, info, inputTensorInfo, inputHandle.get());
3852 AddInputToWorkload (descriptor, info, alphaTensorInfo, alphaHandle.get());
3853 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
3855 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreatePrelu(descriptor, info);
3857 inputHandle->Allocate();
3858 alphaHandle->Allocate();
3859 outputHandle->Allocate();
3861 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
3862 CopyDataToITensorHandle(alphaHandle.get(), &alpha[0][0][0][0]);
3864 workload->Execute();
3866 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
3871 template<armnn::DataType ArmnnType,
3872 std::size_t InputDim,
3873 std::size_t OutputDim,
3874 typename T = armnn::ResolveType<ArmnnType>>
3875 LayerTestResult<T, OutputDim> BatchToSpaceNdHelper(
3876 armnn::IWorkloadFactory &workloadFactory,
3877 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
3878 const armnn::DataLayout& dataLayout,
3879 const unsigned int *inputShape,
3880 const std::vector<float> &inputData,
3881 const std::vector<unsigned int> &blockShape,
3882 const std::vector<std::pair<unsigned int, unsigned int>> &crops,
3883 const unsigned int *outputShape,
3884 const std::vector<float> &outputData,
3888 armnn::TensorInfo inputTensorInfo(InputDim, inputShape, ArmnnType);
3889 armnn::TensorInfo outputTensorInfo(OutputDim, outputShape, ArmnnType);
3891 inputTensorInfo.SetQuantizationScale(scale);
3892 inputTensorInfo.SetQuantizationOffset(offset);
3894 outputTensorInfo.SetQuantizationScale(scale);
3895 outputTensorInfo.SetQuantizationOffset(offset);
3897 auto input = MakeTensor<T, InputDim>(inputTensorInfo, ConvertToDataType<ArmnnType>(inputData, inputTensorInfo));
3899 LayerTestResult<T, OutputDim> result(outputTensorInfo);
3900 result.outputExpected = MakeTensor<T, OutputDim>(outputTensorInfo,
3901 ConvertToDataType<ArmnnType>(outputData, outputTensorInfo));
3903 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
3904 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
3906 armnn::BatchToSpaceNdQueueDescriptor data;
3907 data.m_Parameters.m_DataLayout = dataLayout;
3908 data.m_Parameters.m_BlockShape = blockShape;
3909 data.m_Parameters.m_Crops = crops;
3910 armnn::WorkloadInfo info;
3911 AddInputToWorkload(data, info, inputTensorInfo, inputHandle.get());
3912 AddOutputToWorkload(data, info, outputTensorInfo, outputHandle.get());
3914 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateBatchToSpaceNd(data, info);
3916 inputHandle->Allocate();
3917 outputHandle->Allocate();
3919 CopyDataToITensorHandle(inputHandle.get(), input.origin());
3921 workload->PostAllocationConfigure();
3922 workload->Execute();
3924 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
3929 template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
3930 LayerTestResult<T, 4> BatchToSpaceNdNhwcTest1(
3931 armnn::IWorkloadFactory& workloadFactory,
3932 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3934 const unsigned int inputShape[] = {4, 2, 2, 1};
3935 const unsigned int outputShape[] = {1, 4, 4, 1};
3937 std::vector<float> input({
3938 // Batch 0, Height 0, Width (2) x Channel (1)
3940 // Batch 0, Height 1, Width (2) x Channel (1)
3944 // Batch 1, Height 0, Width (2) x Channel (1)
3946 // Batch 1, Height 1, Width (2) x Channel (1)
3950 // Batch 2, Height 0, Width (2) x Channel (1)
3952 // Batch 2, Height 1, Width (2) x Channel (1)
3955 // Batch 3, Height 0, Width (2) x Channel (3)
3957 // Batch 3, Height 1, Width (2) x Channel (1)
3961 std::vector<float> expectedOutput({
3962 1.0f, 2.0f, 3.0f, 4.0f,
3963 5.0f, 6.0f, 7.0f, 8.0f,
3964 9.0f, 10.0f, 11.0f, 12.0f,
3965 13.0f, 14.0f, 15.0f, 16.0f
3968 std::vector<unsigned int> blockShape {2, 2};
3969 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
3971 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
3972 armnn::DataLayout::NHWC, inputShape, input, blockShape,
3973 crops, outputShape, expectedOutput);
3976 template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
3977 LayerTestResult<T, 4> BatchToSpaceNdNhwcTest2(
3978 armnn::IWorkloadFactory& workloadFactory,
3979 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3981 const unsigned int inputShape[] = {4, 1, 1, 1};
3982 const unsigned int outputShape[] = {1, 2, 2, 1};
3984 std::vector<float> input({
3985 // Batch 0, Height 0, Width (2) x Channel (1)
3986 1.0f, 2.0f, 3.0f, 4.0f
3989 std::vector<float> expectedOutput({1.0f, 2.0f, 3.0f, 4.0f});
3991 std::vector<unsigned int> blockShape({2, 2});
3992 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
3994 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
3995 armnn::DataLayout::NHWC, inputShape, input, blockShape,
3996 crops, outputShape, expectedOutput);
3999 template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
4000 LayerTestResult<T, 4> BatchToSpaceNdNhwcTest3(
4001 armnn::IWorkloadFactory& workloadFactory,
4002 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
4004 const unsigned int inputShape[] = {4, 1, 1, 3};
4005 const unsigned int outputShape[] = {1, 2, 2, 3};
4007 std::vector<float> input({1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f});
4009 std::vector<float> expectedOutput({1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f});
4011 std::vector<unsigned int> blockShape({2, 2});
4012 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
4014 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
4015 armnn::DataLayout::NHWC, inputShape, input, blockShape,
4016 crops, outputShape, expectedOutput);
4019 template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
4020 LayerTestResult<T, 4> BatchToSpaceNdNhwcTest4(
4021 armnn::IWorkloadFactory& workloadFactory,
4022 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
4024 const unsigned int inputShape[] = {8, 1, 3, 1};
4025 const unsigned int outputShape[] = {2, 2, 4, 1};
4027 std::vector<float> input({
4038 std::vector<float> expectedOutput({
4039 1.0f, 2.0f, 3.0f, 4.0f,
4040 5.0f, 6.0f, 7.0f, 8.0f,
4041 9.0f, 10.0f, 11.0f, 12.0f,
4042 13.0f, 14.0f, 15.0f, 16.0f
4045 std::vector<unsigned int> blockShape({2, 2});
4046 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {2, 0}};
4048 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
4049 armnn::DataLayout::NHWC, inputShape, input, blockShape,
4050 crops, outputShape, expectedOutput);
4053 template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
4054 LayerTestResult<T, 4> BatchToSpaceNdNhwcTest5(
4055 armnn::IWorkloadFactory& workloadFactory,
4056 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
4058 const unsigned int inputShape[] = {4, 2, 2, 1};
4059 const unsigned int outputShape[] = {1, 4, 4, 1};
4061 std::vector<float> input({1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16});
4062 std::vector<float> expectedOutput({1, 5, 2, 6, 9, 13, 10, 14, 3, 7, 4, 8, 11, 15, 12, 16});
4064 std::vector<unsigned int> blockShape({2, 2});
4065 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
4067 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager, armnn::DataLayout::NHWC, inputShape,
4068 input, blockShape, crops, outputShape, expectedOutput);
4071 template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
4072 LayerTestResult<T, 4> BatchToSpaceNdNhwcTest6(
4073 armnn::IWorkloadFactory& workloadFactory,
4074 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
4076 const unsigned int inputShape[] = {4, 1, 1, 1};
4077 const unsigned int outputShape[] = {1, 2, 2, 1};
4079 std::vector<float> input({
4080 // Batch 0, Height 0, Width (2) x Channel (1)
4084 std::vector<float> expectedOutput({1, 2, 3, 4});
4086 std::vector<unsigned int> blockShape({2, 2});
4087 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
4089 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
4090 armnn::DataLayout::NHWC, inputShape, input, blockShape,
4091 crops, outputShape, expectedOutput);
4094 template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
4095 LayerTestResult<T, 4> BatchToSpaceNdNhwcTest7(
4096 armnn::IWorkloadFactory& workloadFactory,
4097 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
4099 const unsigned int inputShape[] = {4, 1, 1, 3};
4100 const unsigned int outputShape[] = {1, 2, 2, 3};
4102 std::vector<float> input({1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12});
4104 std::vector<float> expectedOutput({1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12});
4106 std::vector<unsigned int> blockShape({2, 2});
4107 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
4109 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
4110 armnn::DataLayout::NHWC, inputShape, input, blockShape,
4111 crops, outputShape, expectedOutput);
4114 template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
4115 LayerTestResult<T, 4> BatchToSpaceNdNchwTest1(
4116 armnn::IWorkloadFactory &workloadFactory,
4117 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
4119 const unsigned int inputShape[] = {4, 3, 1, 1};
4120 const unsigned int outputShape[] = {1, 3, 2, 2};
4122 std::vector<float> input({1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f});
4124 std::vector<float> expectedOutput({
4125 // Batch 0, Channel 0, Height (2) x Width (2)
4129 // Batch 0, Channel 1, Height (2) x Width (2)
4133 // Batch 0, Channel 2, Height (2) x Width (2)
4138 std::vector<unsigned int> blockShape({2, 2});
4139 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
4141 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
4142 armnn::DataLayout::NCHW, inputShape, input, blockShape,
4143 crops, outputShape, expectedOutput);
4146 template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
4147 LayerTestResult<T, 4> BatchToSpaceNdNchwTest2(
4148 armnn::IWorkloadFactory& workloadFactory,
4149 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
4151 const unsigned int inputShape[] = {4, 1, 1, 1};
4152 const unsigned int outputShape[] = {1, 1, 2, 2};
4154 std::vector<float> input({
4155 // Batch 0, Height 0, Width (2) x Channel (1)
4156 1.0f, 2.0f, 3.0f, 4.0f
4159 std::vector<float> expectedOutput({1.0f, 2.0f, 3.0f, 4.0f});
4161 std::vector<unsigned int> blockShape({2, 2});
4162 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
4164 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
4165 armnn::DataLayout::NCHW, inputShape, input, blockShape,
4166 crops, outputShape, expectedOutput);
4169 template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
4170 LayerTestResult<T, 4> BatchToSpaceNdNchwTest3(
4171 armnn::IWorkloadFactory& workloadFactory,
4172 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
4174 const unsigned int inputShape[] = {4, 3, 1, 1};
4175 const unsigned int outputShape[] = {1, 3, 2, 2};
4177 std::vector<float> input({1.0f, 3.0f, 5.0f, 7.0f, 9.0f, 11.0f, 2.0f, 4.0f, 6.0f, 8.0f, 10.0f, 12.0f});
4179 std::vector<float> expectedOutput({
4180 // Batch 0, Channel 0, Height (2) x Width (2)
4184 // Batch 0, Channel 1, Height (2) x Width (2)
4188 // Batch 0, Channel 2, Height (2) x Width (2)
4193 std::vector<unsigned int> blockShape({2, 2});
4194 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
4196 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
4197 armnn::DataLayout::NCHW, inputShape, input, blockShape,
4198 crops, outputShape, expectedOutput);
4201 template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
4202 LayerTestResult<T, 4> BatchToSpaceNdNchwTest4(
4203 armnn::IWorkloadFactory &workloadFactory,
4204 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
4206 const unsigned int inputShape[] = {4, 3, 1, 1};
4207 const unsigned int outputShape[] = {1, 3, 2, 2};
4209 std::vector<float> input({1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12});
4211 std::vector<float> expectedOutput({
4212 // Batch 0, Channel 0, Height (2) x Width (2)
4216 // Batch 0, Channel 1, Height (2) x Width (2)
4220 // Batch 0, Channel 2, Height (2) x Width (2)
4225 std::vector<unsigned int> blockShape({2, 2});
4226 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
4228 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
4229 armnn::DataLayout::NCHW, inputShape, input, blockShape,
4230 crops, outputShape, expectedOutput);
4233 template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
4234 LayerTestResult<T, 4> BatchToSpaceNdNchwTest5(
4235 armnn::IWorkloadFactory& workloadFactory,
4236 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
4238 const unsigned int inputShape[] = {4, 1, 1, 1};
4239 const unsigned int outputShape[] = {1, 1, 2, 2};
4241 std::vector<float> input({
4242 // Batch 0, Height 0, Width (2) x Channel (1)
4246 std::vector<float> expectedOutput({1, 2, 3, 4});
4248 std::vector<unsigned int> blockShape({2, 2});
4249 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
4251 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
4252 armnn::DataLayout::NCHW, inputShape, input, blockShape,
4253 crops, outputShape, expectedOutput);
4256 template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
4257 LayerTestResult<T, 4> BatchToSpaceNdNchwTest6(
4258 armnn::IWorkloadFactory& workloadFactory,
4259 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
4261 const unsigned int inputShape[] = {4, 3, 1, 1};
4262 const unsigned int outputShape[] = {1, 3, 2, 2};
4264 std::vector<float> input({1, 3, 5, 7, 9, 11, 2, 4, 6, 8, 10, 12});
4266 std::vector<float> expectedOutput({
4267 // Batch 0, Channel 0, Height (2) x Width (2)
4271 // Batch 0, Channel 1, Height (2) x Width (2)
4275 // Batch 0, Channel 2, Height (2) x Width (2)
4280 std::vector<unsigned int> blockShape({2, 2});
4281 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
4283 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
4284 armnn::DataLayout::NCHW, inputShape, input, blockShape,
4285 crops, outputShape, expectedOutput);
4288 template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
4289 LayerTestResult<T, 4> BatchToSpaceNdNchwTest7(
4290 armnn::IWorkloadFactory& workloadFactory,
4291 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
4293 const unsigned int inputShape[] = {8, 1, 1, 3};
4294 const unsigned int outputShape[] = {2, 1, 2, 4};
4296 std::vector<float> input({
4303 std::vector<float> expectedOutput({
4310 std::vector<unsigned int> blockShape({2, 2});
4311 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {2, 0}};
4313 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
4314 armnn::DataLayout::NCHW, inputShape, input, blockShape,
4315 crops, outputShape, expectedOutput);
4318 template LayerTestResult<typename armnn::ResolveType<armnn::DataType::Float32>, 4>
4319 PreluTest<armnn::DataType::Float32>(
4320 armnn::IWorkloadFactory& workloadFactory,
4321 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4323 template LayerTestResult<typename armnn::ResolveType<armnn::DataType::QuantisedAsymm8>, 4>
4324 PreluTest<armnn::DataType::QuantisedAsymm8>(
4325 armnn::IWorkloadFactory& workloadFactory,
4326 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4328 template LayerTestResult<typename armnn::ResolveType<armnn::DataType::QuantisedSymm16>, 4>
4329 PreluTest<armnn::DataType::QuantisedSymm16>(
4330 armnn::IWorkloadFactory& workloadFactory,
4331 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4334 // TransposeConvolution2d
4338 LayerTestResult<float, 4> SimpleTransposeConvolution2dFloatNchwTest(
4339 armnn::IWorkloadFactory& workloadFactory,
4340 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4342 LayerTestResult<float, 4> SimpleTransposeConvolution2dFloatNhwcTest(
4343 armnn::IWorkloadFactory& workloadFactory,
4344 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4346 LayerTestResult<uint8_t, 4> SimpleTransposeConvolution2dUint8NchwTest(
4347 armnn::IWorkloadFactory& workloadFactory,
4348 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4350 LayerTestResult<uint8_t, 4> SimpleTransposeConvolution2dUint8NhwcTest(
4351 armnn::IWorkloadFactory& workloadFactory,
4352 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4354 LayerTestResult<int16_t, 4> SimpleTransposeConvolution2dInt16NchwTest(
4355 armnn::IWorkloadFactory& workloadFactory,
4356 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4358 LayerTestResult<int16_t, 4> SimpleTransposeConvolution2dInt16NhwcTest(
4359 armnn::IWorkloadFactory& workloadFactory,
4360 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4363 LayerTestResult<float, 4> UnbiasedSimpleTransposeConvolution2dFloatNchwTest(
4364 armnn::IWorkloadFactory& workloadFactory,
4365 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4367 LayerTestResult<float, 4> UnbiasedSimpleTransposeConvolution2dFloatNhwcTest(
4368 armnn::IWorkloadFactory& workloadFactory,
4369 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4371 LayerTestResult<uint8_t, 4> UnbiasedSimpleTransposeConvolution2dUint8NchwTest(
4372 armnn::IWorkloadFactory& workloadFactory,
4373 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4375 LayerTestResult<uint8_t, 4> UnbiasedSimpleTransposeConvolution2dUint8NhwcTest(
4376 armnn::IWorkloadFactory& workloadFactory,
4377 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4379 LayerTestResult<int16_t, 4> UnbiasedSimpleTransposeConvolution2dInt16NchwTest(
4380 armnn::IWorkloadFactory& workloadFactory,
4381 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4383 LayerTestResult<int16_t, 4> UnbiasedSimpleTransposeConvolution2dInt16NhwcTest(
4384 armnn::IWorkloadFactory& workloadFactory,
4385 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4388 LayerTestResult<float, 4> PaddedTransposeConvolution2dFloatNchwTest(
4389 armnn::IWorkloadFactory& workloadFactory,
4390 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4392 LayerTestResult<float, 4> PaddedTransposeConvolution2dFloatNhwcTest(
4393 armnn::IWorkloadFactory& workloadFactory,
4394 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4396 LayerTestResult<uint8_t, 4> PaddedTransposeConvolution2dUint8NchwTest(
4397 armnn::IWorkloadFactory& workloadFactory,
4398 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4400 LayerTestResult<uint8_t, 4> PaddedTransposeConvolution2dUint8NhwcTest(
4401 armnn::IWorkloadFactory& workloadFactory,
4402 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4404 LayerTestResult<int16_t, 4> PaddedTransposeConvolution2dInt16NchwTest(
4405 armnn::IWorkloadFactory& workloadFactory,
4406 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4408 LayerTestResult<int16_t, 4> PaddedTransposeConvolution2dInt16NhwcTest(
4409 armnn::IWorkloadFactory& workloadFactory,
4410 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4413 LayerTestResult<float, 4> UnbiasedPaddedTransposeConvolution2dFloatNchwTest(
4414 armnn::IWorkloadFactory& workloadFactory,
4415 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4417 LayerTestResult<float, 4> UnbiasedPaddedTransposeConvolution2dFloatNhwcTest(
4418 armnn::IWorkloadFactory& workloadFactory,
4419 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4421 LayerTestResult<uint8_t, 4> UnbiasedPaddedTransposeConvolution2dUint8NchwTest(
4422 armnn::IWorkloadFactory& workloadFactory,
4423 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4425 LayerTestResult<uint8_t, 4> UnbiasedPaddedTransposeConvolution2dUint8NhwcTest(
4426 armnn::IWorkloadFactory& workloadFactory,
4427 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4429 LayerTestResult<int16_t, 4> UnbiasedPaddedTransposeConvolution2dInt16NchwTest(
4430 armnn::IWorkloadFactory& workloadFactory,
4431 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4433 LayerTestResult<int16_t, 4> UnbiasedPaddedTransposeConvolution2dInt16NhwcTest(
4434 armnn::IWorkloadFactory& workloadFactory,
4435 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4438 LayerTestResult<float, 4> StridedTransposeConvolution2dFloatNchwTest(
4439 armnn::IWorkloadFactory& workloadFactory,
4440 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4442 LayerTestResult<float, 4> StridedTransposeConvolution2dFloatNhwcTest(
4443 armnn::IWorkloadFactory& workloadFactory,
4444 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4446 LayerTestResult<uint8_t, 4> StridedTransposeConvolution2dUint8NchwTest(
4447 armnn::IWorkloadFactory& workloadFactory,
4448 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4450 LayerTestResult<uint8_t, 4> StridedTransposeConvolution2dUint8NhwcTest(
4451 armnn::IWorkloadFactory& workloadFactory,
4452 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4454 LayerTestResult<int16_t, 4> StridedTransposeConvolution2dInt16NchwTest(
4455 armnn::IWorkloadFactory& workloadFactory,
4456 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4458 LayerTestResult<int16_t, 4> StridedTransposeConvolution2dInt16NhwcTest(
4459 armnn::IWorkloadFactory& workloadFactory,
4460 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4463 LayerTestResult<float, 4> UnbiasedStridedTransposeConvolution2dFloatNchwTest(
4464 armnn::IWorkloadFactory& workloadFactory,
4465 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4467 LayerTestResult<float, 4> UnbiasedStridedTransposeConvolution2dFloatNhwcTest(
4468 armnn::IWorkloadFactory& workloadFactory,
4469 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4471 LayerTestResult<uint8_t, 4> UnbiasedStridedTransposeConvolution2dUint8NchwTest(
4472 armnn::IWorkloadFactory& workloadFactory,
4473 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4475 LayerTestResult<uint8_t, 4> UnbiasedStridedTransposeConvolution2dUint8NhwcTest(
4476 armnn::IWorkloadFactory& workloadFactory,
4477 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4479 LayerTestResult<int16_t, 4> UnbiasedStridedTransposeConvolution2dInt16NchwTest(
4480 armnn::IWorkloadFactory& workloadFactory,
4481 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4483 LayerTestResult<int16_t, 4> UnbiasedStridedTransposeConvolution2dInt16NhwcTest(
4484 armnn::IWorkloadFactory& workloadFactory,
4485 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);