ArmNN
 21.05
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> 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 
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>
152  armnn::IWorkloadFactory& workloadFactory,
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>
186  armnn::IWorkloadFactory& workloadFactory,
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>
226  armnn::IWorkloadFactory& workloadFactory,
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>
267  armnn::IWorkloadFactory& workloadFactory,
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>
306  armnn::IWorkloadFactory& workloadFactory,
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>
351  armnn::IWorkloadFactory& workloadFactory,
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>
385  armnn::IWorkloadFactory& workloadFactory,
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>
425  armnn::IWorkloadFactory& workloadFactory,
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>
466  armnn::IWorkloadFactory& workloadFactory,
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>
505  armnn::IWorkloadFactory& workloadFactory,
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>
551  armnn::IWorkloadFactory& workloadFactory,
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>
589  armnn::IWorkloadFactory& workloadFactory,
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>
618  armnn::IWorkloadFactory& workloadFactory,
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>
649  armnn::IWorkloadFactory& workloadFactory,
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
682 ResizeBilinearNopTest<armnn::DataType::Float32>(
683  armnn::IWorkloadFactory& workloadFactory,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
780  const armnn::ITensorHandleFactory& tensorHandleFactory,
781  const armnn::DataLayout dataLayout);
782 
783 // Float16
785 ResizeBilinearNopTest<armnn::DataType::Float16>(
786  armnn::IWorkloadFactory& workloadFactory,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
883  const armnn::ITensorHandleFactory& tensorHandleFactory,
884  const armnn::DataLayout dataLayout);
885 
886 // QAsymm8
888 ResizeBilinearNopTest<armnn::DataType::QAsymmU8>(
889  armnn::IWorkloadFactory& workloadFactory,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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 
962 HalfPixelCentersResizeBilinearTest<armnn::DataType::QAsymmS8>(
963  armnn::IWorkloadFactory& workloadFactory,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
1089  const armnn::ITensorHandleFactory& tensorHandleFactory,
1090  const armnn::DataLayout dataLayout);
1091 
1092 // QSymm16
1094 ResizeBilinearNopTest<armnn::DataType::QSymmS16>(
1095  armnn::IWorkloadFactory& workloadFactory,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
1192  const armnn::ITensorHandleFactory& tensorHandleFactory,
1193  const armnn::DataLayout dataLayout);
DataLayout
Definition: Types.hpp:54
LayerTestResult< T, 4 > ResizeNearestNeighborNopTest(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::ITensorHandleFactory &tensorHandleFactory, const armnn::DataLayout dataLayout)
DataLayout::NCHW false
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:36
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:130
Contains information about inputs and outputs to 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)