xref: /aosp_15_r20/external/armnn/src/backends/backendsCommon/test/layerTests/ResizeTestImpl.cpp (revision 89c4ff92f2867872bb9e2354d150bf0c8c502810)
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);