ArmNN
 22.08
ResizeTestImpl.cpp
Go to the documentation of this file.
1 //
2 // Copyright © 2019 Arm Ltd and Contributors. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5 
6 #include "ResizeTestImpl.hpp"
7 
9 
10 
13 #include <armnnUtils/Permute.hpp>
14 
18 
20 
21 namespace
22 {
23 
24 struct ResizeTestParams
25 {
26  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 
54  void SetInQuantParams(float quantScale, int32_t quantOffset)
55  {
56  m_InQuantScale = quantScale;
57  m_InQuantOffset = quantOffset;
58  }
59 
60  void SetOutQuantParams(float quantScale, int32_t quantOffset)
61  {
62  m_OutQuantScale = quantScale;
63  m_OutQuantOffset = quantOffset;
64  }
65 
66  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>>
76 LayerTestResult<T, NumDims> ResizeTestImpl(
77  armnn::IWorkloadFactory& workloadFactory,
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 
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>
153  armnn::IWorkloadFactory& workloadFactory,
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>
187  armnn::IWorkloadFactory& workloadFactory,
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>
227  armnn::IWorkloadFactory& workloadFactory,
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>
268  armnn::IWorkloadFactory& workloadFactory,
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>
307  armnn::IWorkloadFactory& workloadFactory,
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>
352  armnn::IWorkloadFactory& workloadFactory,
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>
386  armnn::IWorkloadFactory& workloadFactory,
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>
426  armnn::IWorkloadFactory& workloadFactory,
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>
467  armnn::IWorkloadFactory& workloadFactory,
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>
506  armnn::IWorkloadFactory& workloadFactory,
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>
552  armnn::IWorkloadFactory& workloadFactory,
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>
590  armnn::IWorkloadFactory& workloadFactory,
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>
619  armnn::IWorkloadFactory& workloadFactory,
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>
650  armnn::IWorkloadFactory& workloadFactory,
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
683 ResizeBilinearNopTest<armnn::DataType::Float32>(
684  armnn::IWorkloadFactory& workloadFactory,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
781  const armnn::ITensorHandleFactory& tensorHandleFactory,
782  const armnn::DataLayout dataLayout);
783 
784 // Float16
786 ResizeBilinearNopTest<armnn::DataType::Float16>(
787  armnn::IWorkloadFactory& workloadFactory,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
884  const armnn::ITensorHandleFactory& tensorHandleFactory,
885  const armnn::DataLayout dataLayout);
886 
887 // QAsymm8
889 ResizeBilinearNopTest<armnn::DataType::QAsymmU8>(
890  armnn::IWorkloadFactory& workloadFactory,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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 
963 HalfPixelCentersResizeBilinearTest<armnn::DataType::QAsymmS8>(
964  armnn::IWorkloadFactory& workloadFactory,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
1090  const armnn::ITensorHandleFactory& tensorHandleFactory,
1091  const armnn::DataLayout dataLayout);
1092 
1093 // QSymm16
1095 ResizeBilinearNopTest<armnn::DataType::QSymmS16>(
1096  armnn::IWorkloadFactory& workloadFactory,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
1193  const armnn::ITensorHandleFactory& tensorHandleFactory,
1194  const armnn::DataLayout dataLayout);
DataLayout
Definition: Types.hpp:62
LayerTestResult< T, 4 > ResizeNearestNeighborNopTest(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory, const armnn::DataLayout dataLayout)
ResizeMethod m_Method
The Interpolation method to use (Bilinear, NearestNeighbor).
typename ResolveTypeImpl< DT >::Type ResolveType
Definition: ResolveType.hpp:79
Copyright (c) 2021 ARM Limited and Contributors.
void IgnoreUnused(Ts &&...)
LayerTestResult< T, 4 > ResizeNearestNeighborSqMinTest(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory, const armnn::DataLayout dataLayout)
LayerTestResult< T, 4 > SimpleResizeNearestNeighborTest(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory, const armnn::DataLayout dataLayout)
LayerTestResult< T, 4 > 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)
LayerTestResult< T, 4 > SimpleResizeBilinearTest(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory, const armnn::DataLayout dataLayout)
LayerTestResult< T, 4 > ResizeBilinearNopTest(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory, const armnn::DataLayout dataLayout)
DataType
Definition: Types.hpp:48
LayerTestResult< T, 4 > AlignCornersResizeBilinearTest(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory, const armnn::DataLayout dataLayout)
std::shared_ptr< IMemoryManager > IMemoryManagerSharedPtr
Provides access to the appropriate indexes for Channels, Height and Width based on DataLayout...
uint32_t m_TargetWidth
Target width value.
void CopyDataFromITensorHandle(void *mem, const armnn::ITensorHandle *tensorHandle)
bool m_HalfPixelCenters
Half Pixel Centers.
void PermuteTensorNchwToNhwc(armnn::TensorInfo &tensorInfo, std::vector< T > &tensorData)
LayerTestResult< T, 4 > ResizeNearestNeighborMinTest(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory, const armnn::DataLayout dataLayout)
uint32_t m_TargetHeight
Target height value.
LayerTestResult< T, 4 > HalfPixelCentersResizeBilinearTest(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory, const armnn::DataLayout dataLayout)
bool m_AlignCorners
Aligned corners.
LayerTestResult< T, 4 > ResizeBilinearMinTest(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory, const armnn::DataLayout dataLayout)
void CopyDataToITensorHandle(armnn::ITensorHandle *tensorHandle, const void *memory)
LayerTestResult< T, 4 > ResizeBilinearSqMinTest(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory, const armnn::DataLayout dataLayout)
ResizeMethod
Definition: Types.hpp:152
Contains information about TensorInfos of a layer.
DataLayout m_DataLayout
The data layout to be used (NCHW, NHWC).
virtual std::unique_ptr< IWorkload > CreateWorkload(LayerType type, const QueueDescriptor &descriptor, const WorkloadInfo &info) const
LayerTestResult< T, 4 > HalfPixelCentersResizeNearestNeighbourTest(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory, const armnn::DataLayout dataLayout)
virtual std::unique_ptr< ITensorHandle > CreateTensorHandle(const TensorInfo &tensorInfo) const =0
LayerTestResult< T, 4 > ResizeBilinearMagTest(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory, const armnn::DataLayout dataLayout)
LayerTestResult< T, 4 > AlignCornersResizeNearestNeighbourTest(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory, const armnn::DataLayout dataLayout)