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