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