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