1 //
2 // Copyright © 2019 Arm Ltd and Contributors. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5
6 #include "ResizeTestImpl.hpp"
7
8 #include <QuantizeHelper.hpp>
9
10
11 #include <armnnUtils/TensorUtils.hpp>
12 #include <armnnUtils/DataLayoutIndexed.hpp>
13 #include <armnnUtils/Permute.hpp>
14
15 #include <backendsCommon/test/DataLayoutUtils.hpp>
16 #include <backendsCommon/test/TensorCopyUtils.hpp>
17 #include <backendsCommon/test/WorkloadTestUtils.hpp>
18
19 #include <test/TensorHelpers.hpp>
20
21 namespace
22 {
23
24 struct ResizeTestParams
25 {
ResizeTestParams__anonc53cc8ff0111::ResizeTestParams26 ResizeTestParams()
27 : m_ResizeMethod(armnn::ResizeMethod::Bilinear)
28 , m_DataLayout(armnn::DataLayout::NCHW)
29 , m_InQuantScale(1.0f)
30 , m_InQuantOffset(0)
31 , m_OutQuantScale(1.0f)
32 , m_OutQuantOffset(0)
33 , m_AlignCorners(false)
34 , m_HalfPixelCenters(false) {}
35
36 armnn::ResizeMethod m_ResizeMethod;
37 armnn::DataLayout m_DataLayout;
38
39 armnn::TensorShape m_InputShape;
40 armnn::TensorShape m_OutputShape;
41
42 std::vector<float> m_InputData;
43 std::vector<float> m_ExpectedOutputData;
44
45 float m_InQuantScale;
46 int32_t m_InQuantOffset;
47
48 float m_OutQuantScale;
49 int32_t m_OutQuantOffset;
50
51 bool m_AlignCorners;
52 bool m_HalfPixelCenters;
53
SetInQuantParams__anonc53cc8ff0111::ResizeTestParams54 void SetInQuantParams(float quantScale, int32_t quantOffset)
55 {
56 m_InQuantScale = quantScale;
57 m_InQuantOffset = quantOffset;
58 }
59
SetOutQuantParams__anonc53cc8ff0111::ResizeTestParams60 void SetOutQuantParams(float quantScale, int32_t quantOffset)
61 {
62 m_OutQuantScale = quantScale;
63 m_OutQuantOffset = quantOffset;
64 }
65
SetInOutQuantParams__anonc53cc8ff0111::ResizeTestParams66 void SetInOutQuantParams(float quantScale, int32_t quantOffset)
67 {
68 SetInQuantParams(quantScale, quantOffset);
69 SetOutQuantParams(quantScale, quantOffset);
70 }
71 };
72
73 template<size_t NumDims,
74 armnn::DataType ArmnnType,
75 typename T = armnn::ResolveType<ArmnnType>>
ResizeTestImpl(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory,const ResizeTestParams & params)76 LayerTestResult<T, NumDims> ResizeTestImpl(
77 armnn::IWorkloadFactory& workloadFactory,
78 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
79 const armnn::ITensorHandleFactory& tensorHandleFactory,
80 const ResizeTestParams& params)
81 {
82 IgnoreUnused(memoryManager);
83 armnn::TensorInfo inputInfo(params.m_InputShape, ArmnnType);
84 armnn::TensorInfo outputInfo(params.m_OutputShape, ArmnnType);
85
86 if (armnn::IsQuantizedType<T>())
87 {
88 inputInfo.SetQuantizationScale(params.m_InQuantScale);
89 inputInfo.SetQuantizationOffset(params.m_InQuantOffset);
90
91 outputInfo.SetQuantizationScale(params.m_OutQuantScale);
92 outputInfo.SetQuantizationOffset(params.m_OutQuantOffset);
93 }
94
95 std::vector<T> inputData =
96 armnnUtils::QuantizedVector<T>(params.m_InputData, params.m_InQuantScale, params.m_InQuantOffset);
97
98 std::vector<T> expectedOutputData =
99 armnnUtils::QuantizedVector<T>(params.m_ExpectedOutputData,
100 params.m_OutQuantScale,
101 params.m_OutQuantOffset);
102
103 if (params.m_DataLayout == armnn::DataLayout::NHWC)
104 {
105 PermuteTensorNchwToNhwc(inputInfo, inputData);
106 PermuteTensorNchwToNhwc(outputInfo, expectedOutputData);
107 }
108
109 auto input = MakeTensor<T, NumDims>(inputInfo, inputData);
110
111 LayerTestResult<T, NumDims> result(outputInfo);
112 result.outputExpected = MakeTensor<T, NumDims>(outputInfo, expectedOutputData);
113
114 std::unique_ptr<armnn::ITensorHandle> inputHandle = tensorHandleFactory.CreateTensorHandle(inputInfo);
115 std::unique_ptr<armnn::ITensorHandle> outputHandle = tensorHandleFactory.CreateTensorHandle(outputInfo);
116
117 armnn::ResizeQueueDescriptor descriptor;
118 descriptor.m_Parameters.m_Method = params.m_ResizeMethod;
119 descriptor.m_Parameters.m_DataLayout = params.m_DataLayout;
120 descriptor.m_Parameters.m_AlignCorners = params.m_AlignCorners;
121 descriptor.m_Parameters.m_HalfPixelCenters = params.m_HalfPixelCenters;
122
123 armnnUtils::DataLayoutIndexed dataLayoutIndexed(params.m_DataLayout);
124 descriptor.m_Parameters.m_TargetWidth = params.m_OutputShape[dataLayoutIndexed.GetWidthIndex()];
125 descriptor.m_Parameters.m_TargetHeight = params.m_OutputShape[dataLayoutIndexed.GetHeightIndex()];
126
127 armnn::WorkloadInfo info;
128 AddInputToWorkload(descriptor, info, inputInfo, inputHandle.get());
129 AddOutputToWorkload(descriptor, info, outputInfo, outputHandle.get());
130
131 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateResize(descriptor, info);
132
133 inputHandle->Allocate();
134 outputHandle->Allocate();
135 CopyDataToITensorHandle(inputHandle.get(), input.origin());
136
137 workload->PostAllocationConfigure();
138 workload->Execute();
139
140 CopyDataFromITensorHandle(result.output.origin(), outputHandle.get());
141 return result;
142 }
143
144 } // anonymous namespace
145
146 //
147 // Bilinear
148 //
149
150 template<armnn::DataType ArmnnType, typename T>
ResizeBilinearNopTest(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory,const armnn::DataLayout dataLayout)151 LayerTestResult<T, 4> ResizeBilinearNopTest(
152 armnn::IWorkloadFactory& workloadFactory,
153 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
154 const armnn::ITensorHandleFactory& tensorHandleFactory,
155 const armnn::DataLayout dataLayout)
156 {
157 ResizeTestParams testParams;
158 testParams.m_ResizeMethod = armnn::ResizeMethod::Bilinear;
159 testParams.m_DataLayout = dataLayout;
160
161 testParams.m_InputShape = { 1, 2, 4, 4 };
162 testParams.m_OutputShape = testParams.m_InputShape;
163
164 testParams.m_InputData =
165 {
166 1.0f, 2.0f, 3.0f, 4.0f,
167 2.0f, 3.0f, 4.0f, 5.0f,
168 3.0f, 4.0f, 5.0f, 6.0f,
169 4.0f, 5.0f, 6.0f, 7.0f,
170
171 1.0f, 2.0f, 3.0f, 4.0f,
172 2.0f, 3.0f, 4.0f, 5.0f,
173 3.0f, 4.0f, 5.0f, 6.0f,
174 4.0f, 5.0f, 6.0f, 7.0f
175 };
176
177 testParams.m_ExpectedOutputData = testParams.m_InputData;
178
179 testParams.SetInOutQuantParams(1.5f, 3);
180
181 return ResizeTestImpl<4, ArmnnType>(workloadFactory, memoryManager, tensorHandleFactory, testParams);
182 }
183
184 template<armnn::DataType ArmnnType, typename T>
SimpleResizeBilinearTest(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory,const armnn::DataLayout dataLayout)185 LayerTestResult<T, 4> SimpleResizeBilinearTest(
186 armnn::IWorkloadFactory& workloadFactory,
187 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
188 const armnn::ITensorHandleFactory& tensorHandleFactory,
189 const armnn::DataLayout dataLayout)
190 {
191 ResizeTestParams testParams;
192 testParams.m_ResizeMethod = armnn::ResizeMethod::Bilinear;
193 testParams.m_DataLayout = dataLayout;
194
195 testParams.m_InputShape = { 1, 2, 2, 2 };
196 testParams.m_OutputShape = { 1, 2, 1, 1 };
197
198 testParams.m_InputData =
199 {
200 1.0f, 255.0f,
201 200.0f, 250.0f,
202
203 250.0f, 200.0f,
204 250.0f, 1.0f
205 };
206
207 // The 'resize' operation projects the top-left corner of output texels into the input image,
208 // then figures out the interpolants and weights. Note this is different to projecting the centre of the
209 // output texel. Thus, for a input matrix of 2x2, we'll expect the output 1x1 matrix to contain, as
210 // its single element, the value that was at position (0,0) of the input matrix (rather than an average,
211 // which we would expect if projecting the centre).
212 testParams.m_ExpectedOutputData =
213 {
214 1.0f,
215
216 250.0f
217 };
218
219 testParams.SetInOutQuantParams(0.1567f, 1);
220
221 return ResizeTestImpl<4, ArmnnType>(workloadFactory, memoryManager, tensorHandleFactory, testParams);
222 }
223
224 template<armnn::DataType ArmnnType, typename T>
ResizeBilinearSqMinTest(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory,const armnn::DataLayout dataLayout)225 LayerTestResult<T, 4> ResizeBilinearSqMinTest(
226 armnn::IWorkloadFactory& workloadFactory,
227 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
228 const armnn::ITensorHandleFactory& tensorHandleFactory,
229 const armnn::DataLayout dataLayout)
230 {
231 ResizeTestParams testParams;
232 testParams.m_ResizeMethod = armnn::ResizeMethod::Bilinear;
233 testParams.m_DataLayout = dataLayout;
234
235 testParams.m_InputShape = { 1, 2, 4, 4 };
236 testParams.m_OutputShape = { 1, 2, 2, 2 };
237
238 testParams.m_InputData =
239 {
240 1.0f, 2.0f, 3.0f, 4.0f,
241 2.0f, 3.0f, 4.0f, 5.0f,
242 3.0f, 4.0f, 5.0f, 6.0f,
243 4.0f, 5.0f, 6.0f, 7.0f,
244
245 7.0f, 6.0f, 5.0f, 4.0f,
246 6.0f, 5.0f, 4.0f, 3.0f,
247 5.0f, 4.0f, 3.0f, 2.0f,
248 4.0f, 3.0f, 2.0f, 1.0f
249 };
250
251 testParams.m_ExpectedOutputData =
252 {
253 1.0f, 3.0f,
254 3.0f, 5.0f,
255
256 7.0f, 5.0f,
257 5.0f, 3.0f
258 };
259
260 testParams.SetInOutQuantParams(3.141592f, 3);
261
262 return ResizeTestImpl<4, ArmnnType>(workloadFactory, memoryManager, tensorHandleFactory, testParams);
263 }
264
265 template<armnn::DataType ArmnnType, typename T>
ResizeBilinearMinTest(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory,const armnn::DataLayout dataLayout)266 LayerTestResult<T, 4> ResizeBilinearMinTest(
267 armnn::IWorkloadFactory& workloadFactory,
268 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
269 const armnn::ITensorHandleFactory& tensorHandleFactory,
270 const armnn::DataLayout dataLayout)
271 {
272 ResizeTestParams testParams;
273 testParams.m_ResizeMethod = armnn::ResizeMethod::Bilinear;
274 testParams.m_DataLayout = dataLayout;
275
276 testParams.m_InputShape = { 1, 2, 3, 5 };
277 testParams.m_OutputShape = { 1, 2, 2, 3 };
278
279 testParams.m_InputData =
280 {
281 1.5f, 3.0f, 4.5f, 6.0f, 7.5f,
282 9.0f, 10.5f, 12.0f, 13.5f, 15.0f,
283 16.5f, 18.0f, 19.5f, 21.0f, 22.5f,
284
285 16.5f, 18.0f, 19.5f, 21.0f, 22.5f,
286 9.0f, 10.5f, 12.0f, 13.5f, 15.0f,
287 1.5f, 3.0f, 4.5f, 6.0f, 7.5f
288 };
289
290 testParams.m_ExpectedOutputData =
291 {
292 1.50f, 4.00f, 6.50f,
293 12.75f, 15.25f, 17.75f,
294
295 16.50f, 19.00f, 21.50f,
296 5.25f, 7.75f, 10.25f
297 };
298
299 testParams.SetInOutQuantParams(1.5f, -1);
300
301 return ResizeTestImpl<4, ArmnnType>(workloadFactory, memoryManager, tensorHandleFactory, testParams);
302 }
303
304 template<armnn::DataType ArmnnType, typename T>
ResizeBilinearMagTest(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory,const armnn::DataLayout dataLayout)305 LayerTestResult<T, 4> ResizeBilinearMagTest(
306 armnn::IWorkloadFactory& workloadFactory,
307 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
308 const armnn::ITensorHandleFactory& tensorHandleFactory,
309 const armnn::DataLayout dataLayout)
310 {
311 ResizeTestParams testParams;
312 testParams.m_ResizeMethod = armnn::ResizeMethod::Bilinear;
313 testParams.m_DataLayout = dataLayout;
314
315 testParams.m_InputShape = { 1, 2, 3, 2 };
316 testParams.m_OutputShape = { 1, 2, 3, 5 };
317
318 testParams.m_InputData =
319 {
320 1.0f, 2.0f,
321 13.0f, 21.0f,
322 144.0f, 233.0f,
323
324 233.0f, 144.0f,
325 21.0f, 13.0f,
326 2.0f, 1.0f
327 };
328
329 testParams.m_ExpectedOutputData =
330 {
331 1.0f, 1.4f, 1.8f, 2.0f, 2.0f,
332 13.0f, 16.2f, 19.4f, 21.0f, 21.0f,
333 144.0f, 179.6f, 215.2f, 233.0f, 233.0f,
334
335 233.0f, 197.4f, 161.8f, 144.0f, 144.0f,
336 21.0f, 17.8f, 14.6f, 13.0f, 13.0f,
337 2.0f, 1.6f, 1.2f, 1.0f, 1.0f
338 };
339
340 testParams.SetInQuantParams(1.0f, 0);
341
342 return ResizeTestImpl<4, ArmnnType>(workloadFactory, memoryManager, tensorHandleFactory, testParams);
343 }
344
345 //
346 // NearestNeighbor
347 //
348
349 template<armnn::DataType ArmnnType, typename T>
ResizeNearestNeighborNopTest(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory,const armnn::DataLayout dataLayout)350 LayerTestResult<T, 4> ResizeNearestNeighborNopTest(
351 armnn::IWorkloadFactory& workloadFactory,
352 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
353 const armnn::ITensorHandleFactory& tensorHandleFactory,
354 const armnn::DataLayout dataLayout)
355 {
356 ResizeTestParams testParams;
357 testParams.m_ResizeMethod = armnn::ResizeMethod::NearestNeighbor;
358 testParams.m_DataLayout = dataLayout;
359
360 testParams.m_InputShape = { 1, 2, 4, 4 };
361 testParams.m_OutputShape = testParams.m_InputShape;
362
363 testParams.m_InputData =
364 {
365 1.0f, 2.0f, 3.0f, 4.0f,
366 2.0f, 3.0f, 4.0f, 5.0f,
367 3.0f, 4.0f, 5.0f, 6.0f,
368 4.0f, 5.0f, 6.0f, 7.0f,
369
370 1.0f, 2.0f, 3.0f, 4.0f,
371 2.0f, 3.0f, 4.0f, 5.0f,
372 3.0f, 4.0f, 5.0f, 6.0f,
373 4.0f, 5.0f, 6.0f, 7.0f
374 };
375
376 testParams.m_ExpectedOutputData = testParams.m_InputData;
377
378 testParams.SetInOutQuantParams(1.5f, 3);
379
380 return ResizeTestImpl<4, ArmnnType>(workloadFactory, memoryManager, tensorHandleFactory, testParams);
381 }
382
383 template<armnn::DataType ArmnnType, typename T>
SimpleResizeNearestNeighborTest(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory,const armnn::DataLayout dataLayout)384 LayerTestResult<T, 4> SimpleResizeNearestNeighborTest(
385 armnn::IWorkloadFactory& workloadFactory,
386 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
387 const armnn::ITensorHandleFactory& tensorHandleFactory,
388 const armnn::DataLayout dataLayout)
389 {
390 ResizeTestParams testParams;
391 testParams.m_ResizeMethod = armnn::ResizeMethod::NearestNeighbor;
392 testParams.m_DataLayout = dataLayout;
393
394 testParams.m_InputShape = { 1, 2, 2, 2 };
395 testParams.m_OutputShape = { 1, 2, 1, 1 };
396
397 testParams.m_InputData =
398 {
399 1.0f, 255.0f,
400 200.0f, 250.0f,
401
402 250.0f, 200.0f,
403 250.0f, 1.0f
404 };
405
406 // The 'resize' operation projects the top-left corner of output texels into the input image,
407 // then figures out the interpolants and weights. Note this is different to projecting the centre of the
408 // output texel. Thus, for a input matrix of 2x2, we'll expect the output 1x1 matrix to contain, as
409 // its single element, the value that was at position (0,0) of the input matrix (rather than an average,
410 // which we would expect if projecting the centre).
411 testParams.m_ExpectedOutputData =
412 {
413 1.0f,
414
415 250.0f
416 };
417
418 testParams.SetInOutQuantParams(0.1567f, 1);
419
420 return ResizeTestImpl<4, ArmnnType>(workloadFactory, memoryManager, tensorHandleFactory, testParams);
421 }
422
423 template<armnn::DataType ArmnnType, typename T>
ResizeNearestNeighborSqMinTest(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory,const armnn::DataLayout dataLayout)424 LayerTestResult<T, 4> ResizeNearestNeighborSqMinTest(
425 armnn::IWorkloadFactory& workloadFactory,
426 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
427 const armnn::ITensorHandleFactory& tensorHandleFactory,
428 const armnn::DataLayout dataLayout)
429 {
430 ResizeTestParams testParams;
431 testParams.m_ResizeMethod = armnn::ResizeMethod::NearestNeighbor;
432 testParams.m_DataLayout = dataLayout;
433
434 testParams.m_InputShape = { 1, 2, 4, 4 };
435 testParams.m_OutputShape = { 1, 2, 2, 2 };
436
437 testParams.m_InputData =
438 {
439 1.0f, 2.0f, 3.0f, 4.0f,
440 2.0f, 3.0f, 4.0f, 5.0f,
441 3.0f, 4.0f, 5.0f, 6.0f,
442 4.0f, 5.0f, 6.0f, 7.0f,
443
444 7.0f, 6.0f, 5.0f, 4.0f,
445 6.0f, 5.0f, 4.0f, 3.0f,
446 5.0f, 4.0f, 3.0f, 2.0f,
447 4.0f, 3.0f, 2.0f, 1.0f
448 };
449
450 testParams.m_ExpectedOutputData =
451 {
452 1.0f, 3.0f,
453 3.0f, 5.0f,
454
455 7.0f, 5.0f,
456 5.0f, 3.0f
457 };
458
459 testParams.SetInOutQuantParams(3.141592f, 3);
460
461 return ResizeTestImpl<4, ArmnnType>(workloadFactory, memoryManager, tensorHandleFactory, testParams);
462 }
463
464 template<armnn::DataType ArmnnType, typename T>
ResizeNearestNeighborMinTest(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory,const armnn::DataLayout dataLayout)465 LayerTestResult<T, 4> ResizeNearestNeighborMinTest(
466 armnn::IWorkloadFactory& workloadFactory,
467 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
468 const armnn::ITensorHandleFactory& tensorHandleFactory,
469 const armnn::DataLayout dataLayout)
470 {
471 ResizeTestParams testParams;
472 testParams.m_ResizeMethod = armnn::ResizeMethod::NearestNeighbor;
473 testParams.m_DataLayout = dataLayout;
474
475 testParams.m_InputShape = { 1, 2, 3, 5 };
476 testParams.m_OutputShape = { 1, 2, 2, 3 };
477
478 testParams.m_InputData =
479 {
480 1.5f, 3.0f, 4.5f, 6.0f, 7.5f,
481 9.0f, 10.5f, 12.0f, 13.5f, 15.0f,
482 16.5f, 18.0f, 19.5f, 21.0f, 22.5f,
483
484 16.5f, 18.0f, 19.5f, 21.0f, 22.5f,
485 9.0f, 10.5f, 12.0f, 13.5f, 15.0f,
486 1.5f, 3.0f, 4.5f, 6.0f, 7.5f
487 };
488
489 testParams.m_ExpectedOutputData =
490 {
491 1.5f, 3.0f, 6.0f,
492 9.0f, 10.5f, 13.5f,
493
494 16.5f, 18.0f, 21.0f,
495 9.0f, 10.5f, 13.5f
496 };
497
498 testParams.SetInOutQuantParams(1.5f, -1);
499
500 return ResizeTestImpl<4, ArmnnType>(workloadFactory, memoryManager, tensorHandleFactory, testParams);
501 }
502
503 template<armnn::DataType ArmnnType, typename T>
ResizeNearestNeighborMagTest(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory,const armnn::DataLayout dataLayout,float inQuantScale,int32_t inQuantOffset,float outQuantScale,int32_t outQuantOffset)504 LayerTestResult<T, 4> ResizeNearestNeighborMagTest(
505 armnn::IWorkloadFactory& workloadFactory,
506 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
507 const armnn::ITensorHandleFactory& tensorHandleFactory,
508 const armnn::DataLayout dataLayout,
509 float inQuantScale,
510 int32_t inQuantOffset,
511 float outQuantScale,
512 int32_t outQuantOffset)
513 {
514 ResizeTestParams testParams;
515 testParams.m_ResizeMethod = armnn::ResizeMethod::NearestNeighbor;
516 testParams.m_DataLayout = dataLayout;
517
518 testParams.m_InputShape = { 1, 2, 3, 2 };
519 testParams.m_OutputShape = { 1, 2, 3, 5 };
520
521 testParams.m_InputData =
522 {
523 0.183005f, 2.379065f,
524 1.054970f, 1.302565f,
525 2.400595f, 0.688960f,
526
527 2.400595f, 0.688960f,
528 1.054970f, 1.302565f,
529 0.183005f, 2.379065f,
530 };
531
532 testParams.m_ExpectedOutputData =
533 {
534 0.183005f, 0.183005f, 0.183005f, 2.379065f, 2.379065f,
535 1.054970f, 1.054970f, 1.054970f, 1.302565f, 1.302565f,
536 2.400595f, 2.400595f, 2.400595f, 0.688960f, 0.688960f,
537
538 2.400595f, 2.400595f, 2.400595f, 0.688960f, 0.688960f,
539 1.054970f, 1.054970f, 1.054970f, 1.302565f, 1.302565f,
540 0.183005f, 0.183005f, 0.183005f, 2.379065f, 2.379065f
541 };
542
543 testParams.SetInQuantParams(inQuantScale, inQuantOffset);
544 testParams.SetOutQuantParams(outQuantScale, outQuantOffset);
545
546 return ResizeTestImpl<4, ArmnnType>(workloadFactory, memoryManager, tensorHandleFactory, testParams);
547 }
548
549 template<armnn::DataType ArmnnType, typename T>
HalfPixelCentersResizeBilinearTest(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory,const armnn::DataLayout dataLayout)550 LayerTestResult<T, 4> HalfPixelCentersResizeBilinearTest(
551 armnn::IWorkloadFactory& workloadFactory,
552 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
553 const armnn::ITensorHandleFactory& tensorHandleFactory,
554 const armnn::DataLayout dataLayout)
555 {
556 ResizeTestParams testParams;
557 testParams.m_ResizeMethod = armnn::ResizeMethod::Bilinear;
558 testParams.m_DataLayout = dataLayout;
559 testParams.m_HalfPixelCenters = true;
560
561 testParams.m_InputShape = { 2, 1, 2, 2 };
562 testParams.m_OutputShape = { 2, 1, 3, 3 };
563
564 testParams.m_InputData =
565 {
566 1.0f, 2.0f,
567 3.0f, 4.0f,
568
569 1.0f, 2.0f,
570 3.0f, 4.0f
571 };
572
573 testParams.m_ExpectedOutputData =
574 {
575 1.0f, 1.5f, 2.0f,
576 2.0f, 2.5f, 3.0f,
577 3.0f, 3.5f, 4.0f,
578
579 1.0f, 1.5f, 2.0f,
580 2.0f, 2.5f, 3.0f,
581 3.0f, 3.5f, 4.0f,
582 };
583
584 return ResizeTestImpl<4, ArmnnType>(workloadFactory, memoryManager, tensorHandleFactory, testParams);
585 }
586
587 template<armnn::DataType ArmnnType, typename T>
AlignCornersResizeBilinearTest(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory,const armnn::DataLayout dataLayout)588 LayerTestResult<T, 4> AlignCornersResizeBilinearTest(
589 armnn::IWorkloadFactory& workloadFactory,
590 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
591 const armnn::ITensorHandleFactory& tensorHandleFactory,
592 const armnn::DataLayout dataLayout)
593 {
594 ResizeTestParams testParams;
595 testParams.m_ResizeMethod = armnn::ResizeMethod::Bilinear;
596 testParams.m_DataLayout = dataLayout;
597 testParams.m_AlignCorners = true;
598
599 testParams.m_InputShape = { 1, 1, 2, 2 };
600 testParams.m_OutputShape = { 1, 1, 1, 1 };
601
602 testParams.m_InputData =
603 {
604 1.0f, 2.0f,
605 3.0f, 4.0f,
606 };
607
608 testParams.m_ExpectedOutputData =
609 {
610 1.0f
611 };
612
613 return ResizeTestImpl<4, ArmnnType>(workloadFactory, memoryManager, tensorHandleFactory, testParams);
614 }
615
616 template<armnn::DataType ArmnnType, typename T>
HalfPixelCentersResizeNearestNeighbourTest(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory,const armnn::DataLayout dataLayout)617 LayerTestResult<T, 4> HalfPixelCentersResizeNearestNeighbourTest(
618 armnn::IWorkloadFactory& workloadFactory,
619 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
620 const armnn::ITensorHandleFactory& tensorHandleFactory,
621 const armnn::DataLayout dataLayout)
622 {
623 ResizeTestParams testParams;
624 testParams.m_ResizeMethod = armnn::ResizeMethod::NearestNeighbor;
625 testParams.m_DataLayout = dataLayout;
626 testParams.m_HalfPixelCenters = true;
627
628 testParams.m_InputShape = { 1, 1, 2, 5 };
629 testParams.m_OutputShape = { 1, 1, 2, 2 };
630
631 testParams.m_InputData =
632 {
633 1.0f, 2.0f, 3.0f, 4.0f, 5.0f,
634
635 1.0f, 2.0f, 3.0f, 4.0f, 5.0f
636 };
637
638 testParams.m_ExpectedOutputData =
639 {
640 2.0f, 4.0f,
641 2.0f, 4.0f
642 };
643
644 return ResizeTestImpl<4, ArmnnType>(workloadFactory, memoryManager, tensorHandleFactory, testParams);
645 }
646
647 template<armnn::DataType ArmnnType, typename T>
AlignCornersResizeNearestNeighbourTest(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory,const armnn::DataLayout dataLayout)648 LayerTestResult<T, 4> AlignCornersResizeNearestNeighbourTest(
649 armnn::IWorkloadFactory& workloadFactory,
650 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
651 const armnn::ITensorHandleFactory& tensorHandleFactory,
652 const armnn::DataLayout dataLayout)
653 {
654 ResizeTestParams testParams;
655 testParams.m_ResizeMethod = armnn::ResizeMethod::NearestNeighbor;
656 testParams.m_DataLayout = dataLayout;
657 testParams.m_AlignCorners = true;
658
659 testParams.m_InputShape = { 1, 1, 2, 2 };
660 testParams.m_OutputShape = { 1, 1, 1, 1 };
661
662 testParams.m_InputData =
663 {
664 1.0f, 2.0f,
665 3.0f, 4.0f,
666 };
667
668 testParams.m_ExpectedOutputData =
669 {
670 1.0f
671 };
672
673 return ResizeTestImpl<4, ArmnnType>(workloadFactory, memoryManager, tensorHandleFactory, testParams);
674 }
675
676 //
677 // Explicit template instantiations
678 //
679
680 // Float32
681 template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 4>
682 ResizeBilinearNopTest<armnn::DataType::Float32>(
683 armnn::IWorkloadFactory& workloadFactory,
684 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
685 const armnn::ITensorHandleFactory& tensorHandleFactory,
686 const armnn::DataLayout dataLayout);
687
688 template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 4>
689 SimpleResizeBilinearTest<armnn::DataType::Float32>(
690 armnn::IWorkloadFactory& workloadFactory,
691 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
692 const armnn::ITensorHandleFactory& tensorHandleFactory,
693 const armnn::DataLayout dataLayout);
694
695 template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 4>
696 ResizeBilinearSqMinTest<armnn::DataType::Float32>(
697 armnn::IWorkloadFactory& workloadFactory,
698 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
699 const armnn::ITensorHandleFactory& tensorHandleFactory,
700 const armnn::DataLayout dataLayout);
701
702 template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 4>
703 ResizeBilinearMinTest<armnn::DataType::Float32>(
704 armnn::IWorkloadFactory& workloadFactory,
705 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
706 const armnn::ITensorHandleFactory& tensorHandleFactory,
707 const armnn::DataLayout dataLayout);
708
709 template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 4>
710 ResizeBilinearMagTest<armnn::DataType::Float32>(
711 armnn::IWorkloadFactory& workloadFactory,
712 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
713 const armnn::ITensorHandleFactory& tensorHandleFactory,
714 const armnn::DataLayout dataLayout);
715
716 template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 4>
717 ResizeNearestNeighborNopTest<armnn::DataType::Float32>(
718 armnn::IWorkloadFactory& workloadFactory,
719 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
720 const armnn::ITensorHandleFactory& tensorHandleFactory,
721 const armnn::DataLayout dataLayout);
722
723 template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 4>
724 SimpleResizeNearestNeighborTest<armnn::DataType::Float32>(
725 armnn::IWorkloadFactory& workloadFactory,
726 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
727 const armnn::ITensorHandleFactory& tensorHandleFactory,
728 const armnn::DataLayout dataLayout);
729
730 template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 4>
731 ResizeNearestNeighborSqMinTest<armnn::DataType::Float32>(
732 armnn::IWorkloadFactory& workloadFactory,
733 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
734 const armnn::ITensorHandleFactory& tensorHandleFactory,
735 const armnn::DataLayout dataLayout);
736
737 template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 4>
738 ResizeNearestNeighborMinTest<armnn::DataType::Float32>(
739 armnn::IWorkloadFactory& workloadFactory,
740 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
741 const armnn::ITensorHandleFactory& tensorHandleFactory,
742 const armnn::DataLayout dataLayout);
743
744 template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 4>
745 ResizeNearestNeighborMagTest<armnn::DataType::Float32>(
746 armnn::IWorkloadFactory& workloadFactory,
747 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
748 const armnn::ITensorHandleFactory& tensorHandleFactory,
749 const armnn::DataLayout dataLayout,
750 float inQuantScale,
751 int32_t inQuantOffset,
752 float outQuantScale,
753 int32_t outQuantOffset);
754
755 template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 4>
756 HalfPixelCentersResizeBilinearTest<armnn::DataType::Float32>(
757 armnn::IWorkloadFactory& workloadFactory,
758 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
759 const armnn::ITensorHandleFactory& tensorHandleFactory,
760 const armnn::DataLayout dataLayout);
761
762 template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 4>
763 AlignCornersResizeBilinearTest<armnn::DataType::Float32>(
764 armnn::IWorkloadFactory& workloadFactory,
765 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
766 const armnn::ITensorHandleFactory& tensorHandleFactory,
767 const armnn::DataLayout dataLayout);
768
769 template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 4>
770 HalfPixelCentersResizeNearestNeighbourTest<armnn::DataType::Float32>(
771 armnn::IWorkloadFactory& workloadFactory,
772 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
773 const armnn::ITensorHandleFactory& tensorHandleFactory,
774 const armnn::DataLayout dataLayout);
775
776 template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 4>
777 AlignCornersResizeNearestNeighbourTest<armnn::DataType::Float32>(
778 armnn::IWorkloadFactory& workloadFactory,
779 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
780 const armnn::ITensorHandleFactory& tensorHandleFactory,
781 const armnn::DataLayout dataLayout);
782
783 // Float16
784 template LayerTestResult<armnn::ResolveType<armnn::DataType::Float16>, 4>
785 ResizeBilinearNopTest<armnn::DataType::Float16>(
786 armnn::IWorkloadFactory& workloadFactory,
787 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
788 const armnn::ITensorHandleFactory& tensorHandleFactory,
789 const armnn::DataLayout dataLayout);
790
791 template LayerTestResult<armnn::ResolveType<armnn::DataType::Float16>, 4>
792 SimpleResizeBilinearTest<armnn::DataType::Float16>(
793 armnn::IWorkloadFactory& workloadFactory,
794 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
795 const armnn::ITensorHandleFactory& tensorHandleFactory,
796 const armnn::DataLayout dataLayout);
797
798 template LayerTestResult<armnn::ResolveType<armnn::DataType::Float16>, 4>
799 ResizeBilinearSqMinTest<armnn::DataType::Float16>(
800 armnn::IWorkloadFactory& workloadFactory,
801 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
802 const armnn::ITensorHandleFactory& tensorHandleFactory,
803 const armnn::DataLayout dataLayout);
804
805 template LayerTestResult<armnn::ResolveType<armnn::DataType::Float16>, 4>
806 ResizeBilinearMinTest<armnn::DataType::Float16>(
807 armnn::IWorkloadFactory& workloadFactory,
808 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
809 const armnn::ITensorHandleFactory& tensorHandleFactory,
810 const armnn::DataLayout dataLayout);
811
812 template LayerTestResult<armnn::ResolveType<armnn::DataType::Float16>, 4>
813 ResizeBilinearMagTest<armnn::DataType::Float16>(
814 armnn::IWorkloadFactory& workloadFactory,
815 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
816 const armnn::ITensorHandleFactory& tensorHandleFactory,
817 const armnn::DataLayout dataLayout);
818
819 template LayerTestResult<armnn::ResolveType<armnn::DataType::Float16>, 4>
820 ResizeNearestNeighborNopTest<armnn::DataType::Float16>(
821 armnn::IWorkloadFactory& workloadFactory,
822 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
823 const armnn::ITensorHandleFactory& tensorHandleFactory,
824 const armnn::DataLayout dataLayout);
825
826 template LayerTestResult<armnn::ResolveType<armnn::DataType::Float16>, 4>
827 SimpleResizeNearestNeighborTest<armnn::DataType::Float16>(
828 armnn::IWorkloadFactory& workloadFactory,
829 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
830 const armnn::ITensorHandleFactory& tensorHandleFactory,
831 const armnn::DataLayout dataLayout);
832
833 template LayerTestResult<armnn::ResolveType<armnn::DataType::Float16>, 4>
834 ResizeNearestNeighborSqMinTest<armnn::DataType::Float16>(
835 armnn::IWorkloadFactory& workloadFactory,
836 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
837 const armnn::ITensorHandleFactory& tensorHandleFactory,
838 const armnn::DataLayout dataLayout);
839
840 template LayerTestResult<armnn::ResolveType<armnn::DataType::Float16>, 4>
841 ResizeNearestNeighborMinTest<armnn::DataType::Float16>(
842 armnn::IWorkloadFactory& workloadFactory,
843 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
844 const armnn::ITensorHandleFactory& tensorHandleFactory,
845 const armnn::DataLayout dataLayout);
846
847 template LayerTestResult<armnn::ResolveType<armnn::DataType::Float16>, 4>
848 ResizeNearestNeighborMagTest<armnn::DataType::Float16>(
849 armnn::IWorkloadFactory& workloadFactory,
850 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
851 const armnn::ITensorHandleFactory& tensorHandleFactory,
852 const armnn::DataLayout dataLayout,
853 float inQuantScale,
854 int32_t inQuantOffset,
855 float outQuantScale,
856 int32_t outQuantOffset);
857
858 template LayerTestResult<armnn::ResolveType<armnn::DataType::Float16>, 4>
859 HalfPixelCentersResizeBilinearTest<armnn::DataType::Float16>(
860 armnn::IWorkloadFactory& workloadFactory,
861 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
862 const armnn::ITensorHandleFactory& tensorHandleFactory,
863 const armnn::DataLayout dataLayout);
864
865 template LayerTestResult<armnn::ResolveType<armnn::DataType::Float16>, 4>
866 AlignCornersResizeBilinearTest<armnn::DataType::Float16>(
867 armnn::IWorkloadFactory& workloadFactory,
868 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
869 const armnn::ITensorHandleFactory& tensorHandleFactory,
870 const armnn::DataLayout dataLayout);
871
872 template LayerTestResult<armnn::ResolveType<armnn::DataType::Float16>, 4>
873 HalfPixelCentersResizeNearestNeighbourTest<armnn::DataType::Float16>(
874 armnn::IWorkloadFactory& workloadFactory,
875 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
876 const armnn::ITensorHandleFactory& tensorHandleFactory,
877 const armnn::DataLayout dataLayout);
878
879 template LayerTestResult<armnn::ResolveType<armnn::DataType::Float16>, 4>
880 AlignCornersResizeNearestNeighbourTest<armnn::DataType::Float16>(
881 armnn::IWorkloadFactory& workloadFactory,
882 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
883 const armnn::ITensorHandleFactory& tensorHandleFactory,
884 const armnn::DataLayout dataLayout);
885
886 // QAsymm8
887 template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmU8>, 4>
888 ResizeBilinearNopTest<armnn::DataType::QAsymmU8>(
889 armnn::IWorkloadFactory& workloadFactory,
890 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
891 const armnn::ITensorHandleFactory& tensorHandleFactory,
892 const armnn::DataLayout dataLayout);
893
894 template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmU8>, 4>
895 SimpleResizeBilinearTest<armnn::DataType::QAsymmU8>(
896 armnn::IWorkloadFactory& workloadFactory,
897 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
898 const armnn::ITensorHandleFactory& tensorHandleFactory,
899 const armnn::DataLayout dataLayout);
900
901 template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmU8>, 4>
902 ResizeBilinearSqMinTest<armnn::DataType::QAsymmU8>(
903 armnn::IWorkloadFactory& workloadFactory,
904 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
905 const armnn::ITensorHandleFactory& tensorHandleFactory,
906 const armnn::DataLayout dataLayout);
907
908 template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmU8>, 4>
909 ResizeBilinearMinTest<armnn::DataType::QAsymmU8>(
910 armnn::IWorkloadFactory& workloadFactory,
911 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
912 const armnn::ITensorHandleFactory& tensorHandleFactory,
913 const armnn::DataLayout dataLayout);
914
915 template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmU8>, 4>
916 ResizeBilinearMagTest<armnn::DataType::QAsymmU8>(
917 armnn::IWorkloadFactory& workloadFactory,
918 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
919 const armnn::ITensorHandleFactory& tensorHandleFactory,
920 const armnn::DataLayout dataLayout);
921
922 template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmU8>, 4>
923 ResizeNearestNeighborNopTest<armnn::DataType::QAsymmU8>(
924 armnn::IWorkloadFactory& workloadFactory,
925 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
926 const armnn::ITensorHandleFactory& tensorHandleFactory,
927 const armnn::DataLayout dataLayout);
928
929 template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmU8>, 4>
930 SimpleResizeNearestNeighborTest<armnn::DataType::QAsymmU8>(
931 armnn::IWorkloadFactory& workloadFactory,
932 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
933 const armnn::ITensorHandleFactory& tensorHandleFactory,
934 const armnn::DataLayout dataLayout);
935
936 template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmU8>, 4>
937 ResizeNearestNeighborSqMinTest<armnn::DataType::QAsymmU8>(
938 armnn::IWorkloadFactory& workloadFactory,
939 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
940 const armnn::ITensorHandleFactory& tensorHandleFactory,
941 const armnn::DataLayout dataLayout);
942
943 template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmU8>, 4>
944 ResizeNearestNeighborMinTest<armnn::DataType::QAsymmU8>(
945 armnn::IWorkloadFactory& workloadFactory,
946 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
947 const armnn::ITensorHandleFactory& tensorHandleFactory,
948 const armnn::DataLayout dataLayout);
949
950 template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmU8>, 4>
951 ResizeNearestNeighborMagTest<armnn::DataType::QAsymmU8>(
952 armnn::IWorkloadFactory& workloadFactory,
953 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
954 const armnn::ITensorHandleFactory& tensorHandleFactory,
955 const armnn::DataLayout dataLayout,
956 float inQuantScale,
957 int32_t inQuantOffset,
958 float outQuantScale,
959 int32_t outQuantOffset);
960
961 template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmS8>, 4>
962 HalfPixelCentersResizeBilinearTest<armnn::DataType::QAsymmS8>(
963 armnn::IWorkloadFactory& workloadFactory,
964 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
965 const armnn::ITensorHandleFactory& tensorHandleFactory,
966 const armnn::DataLayout dataLayout);
967
968 template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmS8>, 4>
969 AlignCornersResizeBilinearTest<armnn::DataType::QAsymmS8>(
970 armnn::IWorkloadFactory& workloadFactory,
971 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
972 const armnn::ITensorHandleFactory& tensorHandleFactory,
973 const armnn::DataLayout dataLayout);
974
975 template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmS8>, 4>
976 HalfPixelCentersResizeNearestNeighbourTest<armnn::DataType::QAsymmS8>(
977 armnn::IWorkloadFactory& workloadFactory,
978 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
979 const armnn::ITensorHandleFactory& tensorHandleFactory,
980 const armnn::DataLayout dataLayout);
981
982 template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmS8>, 4>
983 AlignCornersResizeNearestNeighbourTest<armnn::DataType::QAsymmS8>(
984 armnn::IWorkloadFactory& workloadFactory,
985 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
986 const armnn::ITensorHandleFactory& tensorHandleFactory,
987 const armnn::DataLayout dataLayout);
988
989 // QAsymmS8
990 template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmS8>, 4>
991 ResizeBilinearNopTest<armnn::DataType::QAsymmS8>(
992 armnn::IWorkloadFactory& workloadFactory,
993 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
994 const armnn::ITensorHandleFactory& tensorHandleFactory,
995 const armnn::DataLayout dataLayout);
996
997 template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmS8>, 4>
998 SimpleResizeBilinearTest<armnn::DataType::QAsymmS8>(
999 armnn::IWorkloadFactory& workloadFactory,
1000 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1001 const armnn::ITensorHandleFactory& tensorHandleFactory,
1002 const armnn::DataLayout dataLayout);
1003
1004 template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmS8>, 4>
1005 ResizeBilinearSqMinTest<armnn::DataType::QAsymmS8>(
1006 armnn::IWorkloadFactory& workloadFactory,
1007 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1008 const armnn::ITensorHandleFactory& tensorHandleFactory,
1009 const armnn::DataLayout dataLayout);
1010
1011 template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmS8>, 4>
1012 ResizeBilinearMinTest<armnn::DataType::QAsymmS8>(
1013 armnn::IWorkloadFactory& workloadFactory,
1014 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1015 const armnn::ITensorHandleFactory& tensorHandleFactory,
1016 const armnn::DataLayout dataLayout);
1017
1018 template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmS8>, 4>
1019 ResizeBilinearMagTest<armnn::DataType::QAsymmS8>(
1020 armnn::IWorkloadFactory& workloadFactory,
1021 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1022 const armnn::ITensorHandleFactory& tensorHandleFactory,
1023 const armnn::DataLayout dataLayout);
1024
1025 template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmS8>, 4>
1026 ResizeNearestNeighborNopTest<armnn::DataType::QAsymmS8>(
1027 armnn::IWorkloadFactory& workloadFactory,
1028 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1029 const armnn::ITensorHandleFactory& tensorHandleFactory,
1030 const armnn::DataLayout dataLayout);
1031
1032 template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmS8>, 4>
1033 SimpleResizeNearestNeighborTest<armnn::DataType::QAsymmS8>(
1034 armnn::IWorkloadFactory& workloadFactory,
1035 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1036 const armnn::ITensorHandleFactory& tensorHandleFactory,
1037 const armnn::DataLayout dataLayout);
1038
1039 template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmS8>, 4>
1040 ResizeNearestNeighborSqMinTest<armnn::DataType::QAsymmS8>(
1041 armnn::IWorkloadFactory& workloadFactory,
1042 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1043 const armnn::ITensorHandleFactory& tensorHandleFactory,
1044 const armnn::DataLayout dataLayout);
1045
1046 template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmS8>, 4>
1047 ResizeNearestNeighborMinTest<armnn::DataType::QAsymmS8>(
1048 armnn::IWorkloadFactory& workloadFactory,
1049 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1050 const armnn::ITensorHandleFactory& tensorHandleFactory,
1051 const armnn::DataLayout dataLayout);
1052
1053 template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmS8>, 4>
1054 ResizeNearestNeighborMagTest<armnn::DataType::QAsymmS8>(
1055 armnn::IWorkloadFactory& workloadFactory,
1056 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1057 const armnn::ITensorHandleFactory& tensorHandleFactory,
1058 const armnn::DataLayout dataLayout,
1059 float inQuantScale,
1060 int32_t inQuantOffset,
1061 float outQuantScale,
1062 int32_t outQuantOffset);
1063
1064 template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmU8>, 4>
1065 HalfPixelCentersResizeBilinearTest<armnn::DataType::QAsymmU8>(
1066 armnn::IWorkloadFactory& workloadFactory,
1067 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1068 const armnn::ITensorHandleFactory& tensorHandleFactory,
1069 const armnn::DataLayout dataLayout);
1070
1071 template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmU8>, 4>
1072 AlignCornersResizeBilinearTest<armnn::DataType::QAsymmU8>(
1073 armnn::IWorkloadFactory& workloadFactory,
1074 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1075 const armnn::ITensorHandleFactory& tensorHandleFactory,
1076 const armnn::DataLayout dataLayout);
1077
1078 template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmU8>, 4>
1079 HalfPixelCentersResizeNearestNeighbourTest<armnn::DataType::QAsymmU8>(
1080 armnn::IWorkloadFactory& workloadFactory,
1081 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1082 const armnn::ITensorHandleFactory& tensorHandleFactory,
1083 const armnn::DataLayout dataLayout);
1084
1085 template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmU8>, 4>
1086 AlignCornersResizeNearestNeighbourTest<armnn::DataType::QAsymmU8>(
1087 armnn::IWorkloadFactory& workloadFactory,
1088 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1089 const armnn::ITensorHandleFactory& tensorHandleFactory,
1090 const armnn::DataLayout dataLayout);
1091
1092 // QSymm16
1093 template LayerTestResult<armnn::ResolveType<armnn::DataType::QSymmS16>, 4>
1094 ResizeBilinearNopTest<armnn::DataType::QSymmS16>(
1095 armnn::IWorkloadFactory& workloadFactory,
1096 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1097 const armnn::ITensorHandleFactory& tensorHandleFactory,
1098 const armnn::DataLayout dataLayout);
1099
1100 template LayerTestResult<armnn::ResolveType<armnn::DataType::QSymmS16>, 4>
1101 SimpleResizeBilinearTest<armnn::DataType::QSymmS16>(
1102 armnn::IWorkloadFactory& workloadFactory,
1103 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1104 const armnn::ITensorHandleFactory& tensorHandleFactory,
1105 const armnn::DataLayout dataLayout);
1106
1107 template LayerTestResult<armnn::ResolveType<armnn::DataType::QSymmS16>, 4>
1108 ResizeBilinearSqMinTest<armnn::DataType::QSymmS16>(
1109 armnn::IWorkloadFactory& workloadFactory,
1110 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1111 const armnn::ITensorHandleFactory& tensorHandleFactory,
1112 const armnn::DataLayout dataLayout);
1113
1114 template LayerTestResult<armnn::ResolveType<armnn::DataType::QSymmS16>, 4>
1115 ResizeBilinearMinTest<armnn::DataType::QSymmS16>(
1116 armnn::IWorkloadFactory& workloadFactory,
1117 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1118 const armnn::ITensorHandleFactory& tensorHandleFactory,
1119 const armnn::DataLayout dataLayout);
1120
1121 template LayerTestResult<armnn::ResolveType<armnn::DataType::QSymmS16>, 4>
1122 ResizeBilinearMagTest<armnn::DataType::QSymmS16>(
1123 armnn::IWorkloadFactory& workloadFactory,
1124 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1125 const armnn::ITensorHandleFactory& tensorHandleFactory,
1126 const armnn::DataLayout dataLayout);
1127
1128 template LayerTestResult<armnn::ResolveType<armnn::DataType::QSymmS16>, 4>
1129 ResizeNearestNeighborNopTest<armnn::DataType::QSymmS16>(
1130 armnn::IWorkloadFactory& workloadFactory,
1131 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1132 const armnn::ITensorHandleFactory& tensorHandleFactory,
1133 const armnn::DataLayout dataLayout);
1134
1135 template LayerTestResult<armnn::ResolveType<armnn::DataType::QSymmS16>, 4>
1136 SimpleResizeNearestNeighborTest<armnn::DataType::QSymmS16>(
1137 armnn::IWorkloadFactory& workloadFactory,
1138 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1139 const armnn::ITensorHandleFactory& tensorHandleFactory,
1140 const armnn::DataLayout dataLayout);
1141
1142 template LayerTestResult<armnn::ResolveType<armnn::DataType::QSymmS16>, 4>
1143 ResizeNearestNeighborSqMinTest<armnn::DataType::QSymmS16>(
1144 armnn::IWorkloadFactory& workloadFactory,
1145 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1146 const armnn::ITensorHandleFactory& tensorHandleFactory,
1147 const armnn::DataLayout dataLayout);
1148
1149 template LayerTestResult<armnn::ResolveType<armnn::DataType::QSymmS16>, 4>
1150 ResizeNearestNeighborMinTest<armnn::DataType::QSymmS16>(
1151 armnn::IWorkloadFactory& workloadFactory,
1152 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1153 const armnn::ITensorHandleFactory& tensorHandleFactory,
1154 const armnn::DataLayout dataLayout);
1155
1156 template LayerTestResult<armnn::ResolveType<armnn::DataType::QSymmS16>, 4>
1157 ResizeNearestNeighborMagTest<armnn::DataType::QSymmS16>(
1158 armnn::IWorkloadFactory& workloadFactory,
1159 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1160 const armnn::ITensorHandleFactory& tensorHandleFactory,
1161 const armnn::DataLayout dataLayout,
1162 float inQuantScale,
1163 int32_t inQuantOffset,
1164 float outQuantScale,
1165 int32_t outQuantOffset);
1166
1167 template LayerTestResult<armnn::ResolveType<armnn::DataType::QSymmS16>, 4>
1168 HalfPixelCentersResizeBilinearTest<armnn::DataType::QSymmS16>(
1169 armnn::IWorkloadFactory& workloadFactory,
1170 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1171 const armnn::ITensorHandleFactory& tensorHandleFactory,
1172 const armnn::DataLayout dataLayout);
1173
1174 template LayerTestResult<armnn::ResolveType<armnn::DataType::QSymmS16>, 4>
1175 AlignCornersResizeBilinearTest<armnn::DataType::QSymmS16>(
1176 armnn::IWorkloadFactory& workloadFactory,
1177 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1178 const armnn::ITensorHandleFactory& tensorHandleFactory,
1179 const armnn::DataLayout dataLayout);
1180
1181 template LayerTestResult<armnn::ResolveType<armnn::DataType::QSymmS16>, 4>
1182 HalfPixelCentersResizeNearestNeighbourTest<armnn::DataType::QSymmS16>(
1183 armnn::IWorkloadFactory& workloadFactory,
1184 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1185 const armnn::ITensorHandleFactory& tensorHandleFactory,
1186 const armnn::DataLayout dataLayout);
1187
1188 template LayerTestResult<armnn::ResolveType<armnn::DataType::QSymmS16>, 4>
1189 AlignCornersResizeNearestNeighbourTest<armnn::DataType::QSymmS16>(
1190 armnn::IWorkloadFactory& workloadFactory,
1191 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1192 const armnn::ITensorHandleFactory& tensorHandleFactory,
1193 const armnn::DataLayout dataLayout);