ArmNN
 20.02
ResizeTestImpl.cpp
Go to the documentation of this file.
1 //
2 // Copyright © 2019 Arm Ltd. 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 
34  armnn::ResizeMethod m_ResizeMethod;
35  armnn::DataLayout m_DataLayout;
36 
37  armnn::TensorShape m_InputShape;
38  armnn::TensorShape m_OutputShape;
39 
40  std::vector<float> m_InputData;
41  std::vector<float> m_ExpectedOutputData;
42 
43  float m_InQuantScale;
44  int32_t m_InQuantOffset;
45 
46  float m_OutQuantScale;
47  int32_t m_OutQuantOffset;
48 
49  void SetInQuantParams(float quantScale, int32_t quantOffset)
50  {
51  m_InQuantScale = quantScale;
52  m_InQuantOffset = quantOffset;
53  }
54 
55  void SetOutQuantParams(float quantScale, int32_t quantOffset)
56  {
57  m_OutQuantScale = quantScale;
58  m_OutQuantOffset = quantOffset;
59  }
60 
61  void SetInOutQuantParams(float quantScale, int32_t quantOffset)
62  {
63  SetInQuantParams(quantScale, quantOffset);
64  SetOutQuantParams(quantScale, quantOffset);
65  }
66 };
67 
68 template<size_t NumDims,
69  armnn::DataType ArmnnType,
70  typename T = armnn::ResolveType<ArmnnType>>
71 LayerTestResult<T, NumDims> ResizeTestImpl(
72  armnn::IWorkloadFactory& workloadFactory,
74  const ResizeTestParams& params)
75 {
76  IgnoreUnused(memoryManager);
77  armnn::TensorInfo inputInfo(params.m_InputShape, ArmnnType);
78  armnn::TensorInfo outputInfo(params.m_OutputShape, ArmnnType);
79 
80  if (armnn::IsQuantizedType<T>())
81  {
82  inputInfo.SetQuantizationScale(params.m_InQuantScale);
83  inputInfo.SetQuantizationOffset(params.m_InQuantOffset);
84 
85  outputInfo.SetQuantizationScale(params.m_OutQuantScale);
86  outputInfo.SetQuantizationOffset(params.m_OutQuantOffset);
87  }
88 
89  std::vector<T> inputData =
90  armnnUtils::QuantizedVector<T>(params.m_InputData, params.m_InQuantScale, params.m_InQuantOffset);
91 
92  std::vector<T> expectedOutputData =
93  armnnUtils::QuantizedVector<T>(params.m_ExpectedOutputData,
94  params.m_OutQuantScale,
95  params.m_OutQuantOffset);
96 
97  if (params.m_DataLayout == armnn::DataLayout::NHWC)
98  {
99  PermuteTensorNchwToNhwc(inputInfo, inputData);
100  PermuteTensorNchwToNhwc(outputInfo, expectedOutputData);
101  }
102 
103  auto input = MakeTensor<T, NumDims>(inputInfo, inputData);
104 
105  LayerTestResult<T, NumDims> result(outputInfo);
106  result.outputExpected = MakeTensor<T, NumDims>(outputInfo, expectedOutputData);
107 
108  std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputInfo);
109  std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputInfo);
110 
111  armnn::ResizeQueueDescriptor descriptor;
112  descriptor.m_Parameters.m_Method = params.m_ResizeMethod;
113  descriptor.m_Parameters.m_DataLayout = params.m_DataLayout;
114 
115  armnnUtils::DataLayoutIndexed dataLayoutIndexed(params.m_DataLayout);
116  descriptor.m_Parameters.m_TargetWidth = params.m_OutputShape[dataLayoutIndexed.GetWidthIndex()];
117  descriptor.m_Parameters.m_TargetHeight = params.m_OutputShape[dataLayoutIndexed.GetHeightIndex()];
118 
120  AddInputToWorkload(descriptor, info, inputInfo, inputHandle.get());
121  AddOutputToWorkload(descriptor, info, outputInfo, outputHandle.get());
122 
123  std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateResize(descriptor, info);
124 
125  inputHandle->Allocate();
126  outputHandle->Allocate();
127  CopyDataToITensorHandle(inputHandle.get(), input.origin());
128 
129  workload->PostAllocationConfigure();
130  workload->Execute();
131 
132  CopyDataFromITensorHandle(result.output.origin(), outputHandle.get());
133  return result;
134 }
135 
136 } // anonymous namespace
137 
138 //
139 // Bilinear
140 //
141 
142 template<armnn::DataType ArmnnType, typename T>
144  armnn::IWorkloadFactory& workloadFactory,
146  const armnn::DataLayout dataLayout)
147 {
148  ResizeTestParams testParams;
149  testParams.m_ResizeMethod = armnn::ResizeMethod::Bilinear;
150  testParams.m_DataLayout = dataLayout;
151 
152  testParams.m_InputShape = { 1, 2, 4, 4 };
153  testParams.m_OutputShape = testParams.m_InputShape;
154 
155  testParams.m_InputData =
156  {
157  1.0f, 2.0f, 3.0f, 4.0f,
158  2.0f, 3.0f, 4.0f, 5.0f,
159  3.0f, 4.0f, 5.0f, 6.0f,
160  4.0f, 5.0f, 6.0f, 7.0f,
161 
162  1.0f, 2.0f, 3.0f, 4.0f,
163  2.0f, 3.0f, 4.0f, 5.0f,
164  3.0f, 4.0f, 5.0f, 6.0f,
165  4.0f, 5.0f, 6.0f, 7.0f
166  };
167 
168  testParams.m_ExpectedOutputData = testParams.m_InputData;
169 
170  testParams.SetInOutQuantParams(1.5f, 3);
171 
172  return ResizeTestImpl<4, ArmnnType>(workloadFactory, memoryManager, testParams);
173 }
174 
175 template<armnn::DataType ArmnnType, typename T>
177  armnn::IWorkloadFactory& workloadFactory,
179  const armnn::DataLayout dataLayout)
180 {
181  ResizeTestParams testParams;
182  testParams.m_ResizeMethod = armnn::ResizeMethod::Bilinear;
183  testParams.m_DataLayout = dataLayout;
184 
185  testParams.m_InputShape = { 1, 2, 2, 2 };
186  testParams.m_OutputShape = { 1, 2, 1, 1 };
187 
188  testParams.m_InputData =
189  {
190  1.0f, 255.0f,
191  200.0f, 250.0f,
192 
193  250.0f, 200.0f,
194  250.0f, 1.0f
195  };
196 
197  // The 'resize' operation projects the top-left corner of output texels into the input image,
198  // then figures out the interpolants and weights. Note this is different to projecting the centre of the
199  // output texel. Thus, for a input matrix of 2x2, we'll expect the output 1x1 matrix to contain, as
200  // its single element, the value that was at position (0,0) of the input matrix (rather than an average,
201  // which we would expect if projecting the centre).
202  testParams.m_ExpectedOutputData =
203  {
204  1.0f,
205 
206  250.0f
207  };
208 
209  testParams.SetInOutQuantParams(0.1567f, 1);
210 
211  return ResizeTestImpl<4, ArmnnType>(workloadFactory, memoryManager, testParams);
212 }
213 
214 template<armnn::DataType ArmnnType, typename T>
216  armnn::IWorkloadFactory& workloadFactory,
218  const armnn::DataLayout dataLayout)
219 {
220  ResizeTestParams testParams;
221  testParams.m_ResizeMethod = armnn::ResizeMethod::Bilinear;
222  testParams.m_DataLayout = dataLayout;
223 
224  testParams.m_InputShape = { 1, 2, 4, 4 };
225  testParams.m_OutputShape = { 1, 2, 2, 2 };
226 
227  testParams.m_InputData =
228  {
229  1.0f, 2.0f, 3.0f, 4.0f,
230  2.0f, 3.0f, 4.0f, 5.0f,
231  3.0f, 4.0f, 5.0f, 6.0f,
232  4.0f, 5.0f, 6.0f, 7.0f,
233 
234  7.0f, 6.0f, 5.0f, 4.0f,
235  6.0f, 5.0f, 4.0f, 3.0f,
236  5.0f, 4.0f, 3.0f, 2.0f,
237  4.0f, 3.0f, 2.0f, 1.0f
238  };
239 
240  testParams.m_ExpectedOutputData =
241  {
242  1.0f, 3.0f,
243  3.0f, 5.0f,
244 
245  7.0f, 5.0f,
246  5.0f, 3.0f
247  };
248 
249  testParams.SetInOutQuantParams(3.141592f, 3);
250 
251  return ResizeTestImpl<4, ArmnnType>(workloadFactory, memoryManager, testParams);
252 }
253 
254 template<armnn::DataType ArmnnType, typename T>
256  armnn::IWorkloadFactory& workloadFactory,
258  const armnn::DataLayout dataLayout)
259 {
260  ResizeTestParams testParams;
261  testParams.m_ResizeMethod = armnn::ResizeMethod::Bilinear;
262  testParams.m_DataLayout = dataLayout;
263 
264  testParams.m_InputShape = { 1, 2, 3, 5 };
265  testParams.m_OutputShape = { 1, 2, 2, 3 };
266 
267  testParams.m_InputData =
268  {
269  1.5f, 3.0f, 4.5f, 6.0f, 7.5f,
270  9.0f, 10.5f, 12.0f, 13.5f, 15.0f,
271  16.5f, 18.0f, 19.5f, 21.0f, 22.5f,
272 
273  16.5f, 18.0f, 19.5f, 21.0f, 22.5f,
274  9.0f, 10.5f, 12.0f, 13.5f, 15.0f,
275  1.5f, 3.0f, 4.5f, 6.0f, 7.5f
276  };
277 
278  testParams.m_ExpectedOutputData =
279  {
280  1.50f, 4.00f, 6.50f,
281  12.75f, 15.25f, 17.75f,
282 
283  16.50f, 19.00f, 21.50f,
284  5.25f, 7.75f, 10.25f
285  };
286 
287  testParams.SetInOutQuantParams(1.5f, -1);
288 
289  return ResizeTestImpl<4, ArmnnType>(workloadFactory, memoryManager, testParams);
290 }
291 
292 template<armnn::DataType ArmnnType, typename T>
294  armnn::IWorkloadFactory& workloadFactory,
296  const armnn::DataLayout dataLayout)
297 {
298  ResizeTestParams testParams;
299  testParams.m_ResizeMethod = armnn::ResizeMethod::Bilinear;
300  testParams.m_DataLayout = dataLayout;
301 
302  testParams.m_InputShape = { 1, 2, 3, 2 };
303  testParams.m_OutputShape = { 1, 2, 3, 5 };
304 
305  testParams.m_InputData =
306  {
307  1.0f, 2.0f,
308  13.0f, 21.0f,
309  144.0f, 233.0f,
310 
311  233.0f, 144.0f,
312  21.0f, 13.0f,
313  2.0f, 1.0f
314  };
315 
316  testParams.m_ExpectedOutputData =
317  {
318  1.0f, 1.4f, 1.8f, 2.0f, 2.0f,
319  13.0f, 16.2f, 19.4f, 21.0f, 21.0f,
320  144.0f, 179.6f, 215.2f, 233.0f, 233.0f,
321 
322  233.0f, 197.4f, 161.8f, 144.0f, 144.0f,
323  21.0f, 17.8f, 14.6f, 13.0f, 13.0f,
324  2.0f, 1.6f, 1.2f, 1.0f, 1.0f
325  };
326 
327  testParams.SetInQuantParams(1.0f, 0);
328 
329  return ResizeTestImpl<4, ArmnnType>(workloadFactory, memoryManager, testParams);
330 }
331 
332 //
333 // NearestNeighbor
334 //
335 
336 template<armnn::DataType ArmnnType, typename T>
338  armnn::IWorkloadFactory& workloadFactory,
340  const armnn::DataLayout dataLayout)
341 {
342  ResizeTestParams testParams;
343  testParams.m_ResizeMethod = armnn::ResizeMethod::NearestNeighbor;
344  testParams.m_DataLayout = dataLayout;
345 
346  testParams.m_InputShape = { 1, 2, 4, 4 };
347  testParams.m_OutputShape = testParams.m_InputShape;
348 
349  testParams.m_InputData =
350  {
351  1.0f, 2.0f, 3.0f, 4.0f,
352  2.0f, 3.0f, 4.0f, 5.0f,
353  3.0f, 4.0f, 5.0f, 6.0f,
354  4.0f, 5.0f, 6.0f, 7.0f,
355 
356  1.0f, 2.0f, 3.0f, 4.0f,
357  2.0f, 3.0f, 4.0f, 5.0f,
358  3.0f, 4.0f, 5.0f, 6.0f,
359  4.0f, 5.0f, 6.0f, 7.0f
360  };
361 
362  testParams.m_ExpectedOutputData = testParams.m_InputData;
363 
364  testParams.SetInOutQuantParams(1.5f, 3);
365 
366  return ResizeTestImpl<4, ArmnnType>(workloadFactory, memoryManager, testParams);
367 }
368 
369 template<armnn::DataType ArmnnType, typename T>
371  armnn::IWorkloadFactory& workloadFactory,
373  const armnn::DataLayout dataLayout)
374 {
375  ResizeTestParams testParams;
376  testParams.m_ResizeMethod = armnn::ResizeMethod::NearestNeighbor;
377  testParams.m_DataLayout = dataLayout;
378 
379  testParams.m_InputShape = { 1, 2, 2, 2 };
380  testParams.m_OutputShape = { 1, 2, 1, 1 };
381 
382  testParams.m_InputData =
383  {
384  1.0f, 255.0f,
385  200.0f, 250.0f,
386 
387  250.0f, 200.0f,
388  250.0f, 1.0f
389  };
390 
391  // The 'resize' operation projects the top-left corner of output texels into the input image,
392  // then figures out the interpolants and weights. Note this is different to projecting the centre of the
393  // output texel. Thus, for a input matrix of 2x2, we'll expect the output 1x1 matrix to contain, as
394  // its single element, the value that was at position (0,0) of the input matrix (rather than an average,
395  // which we would expect if projecting the centre).
396  testParams.m_ExpectedOutputData =
397  {
398  1.0f,
399 
400  250.0f
401  };
402 
403  testParams.SetInOutQuantParams(0.1567f, 1);
404 
405  return ResizeTestImpl<4, ArmnnType>(workloadFactory, memoryManager, testParams);
406 }
407 
408 template<armnn::DataType ArmnnType, typename T>
410  armnn::IWorkloadFactory& workloadFactory,
412  const armnn::DataLayout dataLayout)
413 {
414  ResizeTestParams testParams;
415  testParams.m_ResizeMethod = armnn::ResizeMethod::NearestNeighbor;
416  testParams.m_DataLayout = dataLayout;
417 
418  testParams.m_InputShape = { 1, 2, 4, 4 };
419  testParams.m_OutputShape = { 1, 2, 2, 2 };
420 
421  testParams.m_InputData =
422  {
423  1.0f, 2.0f, 3.0f, 4.0f,
424  2.0f, 3.0f, 4.0f, 5.0f,
425  3.0f, 4.0f, 5.0f, 6.0f,
426  4.0f, 5.0f, 6.0f, 7.0f,
427 
428  7.0f, 6.0f, 5.0f, 4.0f,
429  6.0f, 5.0f, 4.0f, 3.0f,
430  5.0f, 4.0f, 3.0f, 2.0f,
431  4.0f, 3.0f, 2.0f, 1.0f
432  };
433 
434  testParams.m_ExpectedOutputData =
435  {
436  1.0f, 3.0f,
437  3.0f, 5.0f,
438 
439  7.0f, 5.0f,
440  5.0f, 3.0f
441  };
442 
443  testParams.SetInOutQuantParams(3.141592f, 3);
444 
445  return ResizeTestImpl<4, ArmnnType>(workloadFactory, memoryManager, testParams);
446 }
447 
448 template<armnn::DataType ArmnnType, typename T>
450  armnn::IWorkloadFactory& workloadFactory,
452  const armnn::DataLayout dataLayout)
453 {
454  ResizeTestParams testParams;
455  testParams.m_ResizeMethod = armnn::ResizeMethod::NearestNeighbor;
456  testParams.m_DataLayout = dataLayout;
457 
458  testParams.m_InputShape = { 1, 2, 3, 5 };
459  testParams.m_OutputShape = { 1, 2, 2, 3 };
460 
461  testParams.m_InputData =
462  {
463  1.5f, 3.0f, 4.5f, 6.0f, 7.5f,
464  9.0f, 10.5f, 12.0f, 13.5f, 15.0f,
465  16.5f, 18.0f, 19.5f, 21.0f, 22.5f,
466 
467  16.5f, 18.0f, 19.5f, 21.0f, 22.5f,
468  9.0f, 10.5f, 12.0f, 13.5f, 15.0f,
469  1.5f, 3.0f, 4.5f, 6.0f, 7.5f
470  };
471 
472  testParams.m_ExpectedOutputData =
473  {
474  1.5f, 3.0f, 6.0f,
475  9.0f, 10.5f, 13.5f,
476 
477  16.5f, 18.0f, 21.0f,
478  9.0f, 10.5f, 13.5f
479  };
480 
481  testParams.SetInOutQuantParams(1.5f, -1);
482 
483  return ResizeTestImpl<4, ArmnnType>(workloadFactory, memoryManager, testParams);
484 }
485 
486 template<armnn::DataType ArmnnType, typename T>
488  armnn::IWorkloadFactory& workloadFactory,
490  const armnn::DataLayout dataLayout,
491  float inQuantScale,
492  int32_t inQuantOffset,
493  float outQuantScale,
494  int32_t outQuantOffset)
495 {
496  ResizeTestParams testParams;
497  testParams.m_ResizeMethod = armnn::ResizeMethod::NearestNeighbor;
498  testParams.m_DataLayout = dataLayout;
499 
500  testParams.m_InputShape = { 1, 2, 3, 2 };
501  testParams.m_OutputShape = { 1, 2, 3, 5 };
502 
503  testParams.m_InputData =
504  {
505  0.183005f, 2.379065f,
506  1.054970f, 1.302565f,
507  2.400595f, 0.688960f,
508 
509  2.400595f, 0.688960f,
510  1.054970f, 1.302565f,
511  0.183005f, 2.379065f,
512  };
513 
514  testParams.m_ExpectedOutputData =
515  {
516  0.183005f, 0.183005f, 0.183005f, 2.379065f, 2.379065f,
517  1.054970f, 1.054970f, 1.054970f, 1.302565f, 1.302565f,
518  2.400595f, 2.400595f, 2.400595f, 0.688960f, 0.688960f,
519 
520  2.400595f, 2.400595f, 2.400595f, 0.688960f, 0.688960f,
521  1.054970f, 1.054970f, 1.054970f, 1.302565f, 1.302565f,
522  0.183005f, 0.183005f, 0.183005f, 2.379065f, 2.379065f
523  };
524 
525  testParams.SetInQuantParams(inQuantScale, inQuantOffset);
526  testParams.SetOutQuantParams(outQuantScale, outQuantOffset);
527 
528  return ResizeTestImpl<4, ArmnnType>(workloadFactory, memoryManager, testParams);
529 }
530 
531 //
532 // Explicit template instantiations
533 //
534 
535 // Float32
537 ResizeBilinearNopTest<armnn::DataType::Float32>(
538  armnn::IWorkloadFactory& workloadFactory,
540  const armnn::DataLayout dataLayout);
541 
542 template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 4>
543 SimpleResizeBilinearTest<armnn::DataType::Float32>(
544  armnn::IWorkloadFactory& workloadFactory,
546  const armnn::DataLayout dataLayout);
547 
548 template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 4>
549 ResizeBilinearSqMinTest<armnn::DataType::Float32>(
550  armnn::IWorkloadFactory& workloadFactory,
552  const armnn::DataLayout dataLayout);
553 
554 template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 4>
555 ResizeBilinearMinTest<armnn::DataType::Float32>(
556  armnn::IWorkloadFactory& workloadFactory,
558  const armnn::DataLayout dataLayout);
559 
560 template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 4>
561 ResizeBilinearMagTest<armnn::DataType::Float32>(
562  armnn::IWorkloadFactory& workloadFactory,
564  const armnn::DataLayout dataLayout);
565 
566 template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 4>
567 ResizeNearestNeighborNopTest<armnn::DataType::Float32>(
568  armnn::IWorkloadFactory& workloadFactory,
570  const armnn::DataLayout dataLayout);
571 
572 template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 4>
573 SimpleResizeNearestNeighborTest<armnn::DataType::Float32>(
574  armnn::IWorkloadFactory& workloadFactory,
576  const armnn::DataLayout dataLayout);
577 
578 template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 4>
579 ResizeNearestNeighborSqMinTest<armnn::DataType::Float32>(
580  armnn::IWorkloadFactory& workloadFactory,
582  const armnn::DataLayout dataLayout);
583 
584 template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 4>
585 ResizeNearestNeighborMinTest<armnn::DataType::Float32>(
586  armnn::IWorkloadFactory& workloadFactory,
588  const armnn::DataLayout dataLayout);
589 
590 template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 4>
591 ResizeNearestNeighborMagTest<armnn::DataType::Float32>(
592  armnn::IWorkloadFactory& workloadFactory,
594  const armnn::DataLayout dataLayout,
595  float inQuantScale,
596  int32_t inQuantOffset,
597  float outQuantScale,
598  int32_t outQuantOffset);
599 
600 // Float16
602 ResizeBilinearNopTest<armnn::DataType::Float16>(
603  armnn::IWorkloadFactory& workloadFactory,
605  const armnn::DataLayout dataLayout);
606 
607 template LayerTestResult<armnn::ResolveType<armnn::DataType::Float16>, 4>
608 SimpleResizeBilinearTest<armnn::DataType::Float16>(
609  armnn::IWorkloadFactory& workloadFactory,
611  const armnn::DataLayout dataLayout);
612 
613 template LayerTestResult<armnn::ResolveType<armnn::DataType::Float16>, 4>
614 ResizeBilinearSqMinTest<armnn::DataType::Float16>(
615  armnn::IWorkloadFactory& workloadFactory,
617  const armnn::DataLayout dataLayout);
618 
619 template LayerTestResult<armnn::ResolveType<armnn::DataType::Float16>, 4>
620 ResizeBilinearMinTest<armnn::DataType::Float16>(
621  armnn::IWorkloadFactory& workloadFactory,
623  const armnn::DataLayout dataLayout);
624 
625 template LayerTestResult<armnn::ResolveType<armnn::DataType::Float16>, 4>
626 ResizeBilinearMagTest<armnn::DataType::Float16>(
627  armnn::IWorkloadFactory& workloadFactory,
629  const armnn::DataLayout dataLayout);
630 
631 template LayerTestResult<armnn::ResolveType<armnn::DataType::Float16>, 4>
632 ResizeNearestNeighborNopTest<armnn::DataType::Float16>(
633  armnn::IWorkloadFactory& workloadFactory,
635  const armnn::DataLayout dataLayout);
636 
637 template LayerTestResult<armnn::ResolveType<armnn::DataType::Float16>, 4>
638 SimpleResizeNearestNeighborTest<armnn::DataType::Float16>(
639  armnn::IWorkloadFactory& workloadFactory,
641  const armnn::DataLayout dataLayout);
642 
643 template LayerTestResult<armnn::ResolveType<armnn::DataType::Float16>, 4>
644 ResizeNearestNeighborSqMinTest<armnn::DataType::Float16>(
645  armnn::IWorkloadFactory& workloadFactory,
647  const armnn::DataLayout dataLayout);
648 
649 template LayerTestResult<armnn::ResolveType<armnn::DataType::Float16>, 4>
650 ResizeNearestNeighborMinTest<armnn::DataType::Float16>(
651  armnn::IWorkloadFactory& workloadFactory,
653  const armnn::DataLayout dataLayout);
654 
655 template LayerTestResult<armnn::ResolveType<armnn::DataType::Float16>, 4>
656 ResizeNearestNeighborMagTest<armnn::DataType::Float16>(
657  armnn::IWorkloadFactory& workloadFactory,
659  const armnn::DataLayout dataLayout,
660  float inQuantScale,
661  int32_t inQuantOffset,
662  float outQuantScale,
663  int32_t outQuantOffset);
664 
665 // QAsymm8
667 ResizeBilinearNopTest<armnn::DataType::QAsymmU8>(
668  armnn::IWorkloadFactory& workloadFactory,
670  const armnn::DataLayout dataLayout);
671 
672 template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmU8>, 4>
673 SimpleResizeBilinearTest<armnn::DataType::QAsymmU8>(
674  armnn::IWorkloadFactory& workloadFactory,
676  const armnn::DataLayout dataLayout);
677 
678 template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmU8>, 4>
679 ResizeBilinearSqMinTest<armnn::DataType::QAsymmU8>(
680  armnn::IWorkloadFactory& workloadFactory,
682  const armnn::DataLayout dataLayout);
683 
684 template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmU8>, 4>
685 ResizeBilinearMinTest<armnn::DataType::QAsymmU8>(
686  armnn::IWorkloadFactory& workloadFactory,
688  const armnn::DataLayout dataLayout);
689 
690 template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmU8>, 4>
691 ResizeBilinearMagTest<armnn::DataType::QAsymmU8>(
692  armnn::IWorkloadFactory& workloadFactory,
694  const armnn::DataLayout dataLayout);
695 
696 template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmU8>, 4>
697 ResizeNearestNeighborNopTest<armnn::DataType::QAsymmU8>(
698  armnn::IWorkloadFactory& workloadFactory,
700  const armnn::DataLayout dataLayout);
701 
702 template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmU8>, 4>
703 SimpleResizeNearestNeighborTest<armnn::DataType::QAsymmU8>(
704  armnn::IWorkloadFactory& workloadFactory,
706  const armnn::DataLayout dataLayout);
707 
708 template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmU8>, 4>
709 ResizeNearestNeighborSqMinTest<armnn::DataType::QAsymmU8>(
710  armnn::IWorkloadFactory& workloadFactory,
712  const armnn::DataLayout dataLayout);
713 
714 template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmU8>, 4>
715 ResizeNearestNeighborMinTest<armnn::DataType::QAsymmU8>(
716  armnn::IWorkloadFactory& workloadFactory,
718  const armnn::DataLayout dataLayout);
719 
720 template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmU8>, 4>
721 ResizeNearestNeighborMagTest<armnn::DataType::QAsymmU8>(
722  armnn::IWorkloadFactory& workloadFactory,
724  const armnn::DataLayout dataLayout,
725  float inQuantScale,
726  int32_t inQuantOffset,
727  float outQuantScale,
728  int32_t outQuantOffset);
729 
730 // QSymm16
732 ResizeBilinearNopTest<armnn::DataType::QSymmS16>(
733  armnn::IWorkloadFactory& workloadFactory,
735  const armnn::DataLayout dataLayout);
736 
737 template LayerTestResult<armnn::ResolveType<armnn::DataType::QSymmS16>, 4>
738 SimpleResizeBilinearTest<armnn::DataType::QSymmS16>(
739  armnn::IWorkloadFactory& workloadFactory,
741  const armnn::DataLayout dataLayout);
742 
743 template LayerTestResult<armnn::ResolveType<armnn::DataType::QSymmS16>, 4>
744 ResizeBilinearSqMinTest<armnn::DataType::QSymmS16>(
745  armnn::IWorkloadFactory& workloadFactory,
747  const armnn::DataLayout dataLayout);
748 
749 template LayerTestResult<armnn::ResolveType<armnn::DataType::QSymmS16>, 4>
750 ResizeBilinearMinTest<armnn::DataType::QSymmS16>(
751  armnn::IWorkloadFactory& workloadFactory,
753  const armnn::DataLayout dataLayout);
754 
755 template LayerTestResult<armnn::ResolveType<armnn::DataType::QSymmS16>, 4>
756 ResizeBilinearMagTest<armnn::DataType::QSymmS16>(
757  armnn::IWorkloadFactory& workloadFactory,
759  const armnn::DataLayout dataLayout);
760 
761 template LayerTestResult<armnn::ResolveType<armnn::DataType::QSymmS16>, 4>
762 ResizeNearestNeighborNopTest<armnn::DataType::QSymmS16>(
763  armnn::IWorkloadFactory& workloadFactory,
765  const armnn::DataLayout dataLayout);
766 
767 template LayerTestResult<armnn::ResolveType<armnn::DataType::QSymmS16>, 4>
768 SimpleResizeNearestNeighborTest<armnn::DataType::QSymmS16>(
769  armnn::IWorkloadFactory& workloadFactory,
771  const armnn::DataLayout dataLayout);
772 
773 template LayerTestResult<armnn::ResolveType<armnn::DataType::QSymmS16>, 4>
774 ResizeNearestNeighborSqMinTest<armnn::DataType::QSymmS16>(
775  armnn::IWorkloadFactory& workloadFactory,
777  const armnn::DataLayout dataLayout);
778 
779 template LayerTestResult<armnn::ResolveType<armnn::DataType::QSymmS16>, 4>
780 ResizeNearestNeighborMinTest<armnn::DataType::QSymmS16>(
781  armnn::IWorkloadFactory& workloadFactory,
783  const armnn::DataLayout dataLayout);
784 
785 template LayerTestResult<armnn::ResolveType<armnn::DataType::QSymmS16>, 4>
786 ResizeNearestNeighborMagTest<armnn::DataType::QSymmS16>(
787  armnn::IWorkloadFactory& workloadFactory,
789  const armnn::DataLayout dataLayout,
790  float inQuantScale,
791  int32_t inQuantOffset,
792  float outQuantScale,
793  int32_t outQuantOffset);
LayerTestResult< T, 4 > ResizeNearestNeighborMinTest(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::DataLayout dataLayout)
DataLayout
Definition: Types.hpp:49
ResizeMethod m_Method
The Interpolation method to use (Bilinear, NearestNeighbor).
typename ResolveTypeImpl< DT >::Type ResolveType
Definition: ResolveType.hpp:73
LayerTestResult< T, 4 > ResizeBilinearMinTest(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::DataLayout dataLayout)
Copyright (c) 2020 ARM Limited.
void IgnoreUnused(Ts &&...)
LayerTestResult< T, 4 > ResizeNearestNeighborNopTest(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::DataLayout dataLayout)
void PermuteTensorNchwToNhwc(armnn::TensorInfo &tensorInfo, std::vector< T > &tensorData)
DataType
Definition: Types.hpp:32
virtual std::unique_ptr< IWorkload > CreateResize(const ResizeQueueDescriptor &descriptor, const WorkloadInfo &info) const
LayerTestResult< T, 4 > ResizeBilinearNopTest(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::DataLayout dataLayout)
LayerTestResult< T, 4 > ResizeBilinearMagTest(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::DataLayout dataLayout)
std::shared_ptr< IMemoryManager > IMemoryManagerSharedPtr
Provides access to the appropriate indexes for Channels, Height and Width based on DataLayout...
LayerTestResult< T, 4 > ResizeNearestNeighborMagTest(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, 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::DataLayout dataLayout)
uint32_t m_TargetWidth
Target width value.
void CopyDataFromITensorHandle(void *memory, const armnn::ITensorHandle *tensorHandle)
uint32_t m_TargetHeight
Target height value.
virtual std::unique_ptr< ITensorHandle > CreateTensorHandle(const TensorInfo &tensorInfo, const bool IsMemoryManaged=true) const =0
LayerTestResult< T, 4 > ResizeNearestNeighborSqMinTest(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::DataLayout dataLayout)
LayerTestResult< T, 4 > ResizeBilinearSqMinTest(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::DataLayout dataLayout)
ResizeMethod
Definition: Types.hpp:103
Contains information about inputs and outputs to a layer.
DataLayout m_DataLayout
The data layout to be used (NCHW, NHWC).
LayerTestResult< T, 4 > SimpleResizeNearestNeighborTest(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager, const armnn::DataLayout dataLayout)
void CopyDataToITensorHandle(armnn::ITensorHandle *tensorHandle, const void *memory)