blob: f12f53c7946d2d516ba8810287991d1905c0aef1 [file] [log] [blame]
Aron Virginas-Tarb3670b12019-10-28 16:06:50 +00001//
2// Copyright © 2019 Arm Ltd. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5
6#include "ResizeTestImpl.hpp"
7
Aron Virginas-Tarb3670b12019-10-28 16:06:50 +00008#include <QuantizeHelper.hpp>
Aron Virginas-Tarb3670b12019-10-28 16:06:50 +00009
Aron Virginas-Tarb3670b12019-10-28 16:06:50 +000010
Matteo Martincighe011d202019-11-28 11:35:47 +000011#include <armnnUtils/TensorUtils.hpp>
12#include <armnnUtils/DataLayoutIndexed.hpp>
13#include <armnnUtils/Permute.hpp>
14
Aron Virginas-Tarb3670b12019-10-28 16:06:50 +000015#include <backendsCommon/test/DataLayoutUtils.hpp>
16#include <backendsCommon/test/TensorCopyUtils.hpp>
17#include <backendsCommon/test/WorkloadTestUtils.hpp>
18
19#include <test/TensorHelpers.hpp>
20
21namespace
22{
23
24struct 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
68template<size_t NumDims,
69 armnn::DataType ArmnnType,
70 typename T = armnn::ResolveType<ArmnnType>>
71LayerTestResult<T, NumDims> ResizeTestImpl(
72 armnn::IWorkloadFactory& workloadFactory,
73 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
74 const ResizeTestParams& params)
75{
Jan Eilers8eb25602020-03-09 12:13:48 +000076 IgnoreUnused(memoryManager);
Aron Virginas-Tarb3670b12019-10-28 16:06:50 +000077 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
119 armnn::WorkloadInfo info;
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
142template<armnn::DataType ArmnnType, typename T>
143LayerTestResult<T, 4> ResizeBilinearNopTest(
144 armnn::IWorkloadFactory& workloadFactory,
145 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
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
175template<armnn::DataType ArmnnType, typename T>
176LayerTestResult<T, 4> SimpleResizeBilinearTest(
177 armnn::IWorkloadFactory& workloadFactory,
178 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
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
214template<armnn::DataType ArmnnType, typename T>
215LayerTestResult<T, 4> ResizeBilinearSqMinTest(
216 armnn::IWorkloadFactory& workloadFactory,
217 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
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
254template<armnn::DataType ArmnnType, typename T>
255LayerTestResult<T, 4> ResizeBilinearMinTest(
256 armnn::IWorkloadFactory& workloadFactory,
257 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
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
292template<armnn::DataType ArmnnType, typename T>
293LayerTestResult<T, 4> ResizeBilinearMagTest(
294 armnn::IWorkloadFactory& workloadFactory,
295 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
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
336template<armnn::DataType ArmnnType, typename T>
337LayerTestResult<T, 4> ResizeNearestNeighborNopTest(
338 armnn::IWorkloadFactory& workloadFactory,
339 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
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
369template<armnn::DataType ArmnnType, typename T>
370LayerTestResult<T, 4> SimpleResizeNearestNeighborTest(
371 armnn::IWorkloadFactory& workloadFactory,
372 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
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
408template<armnn::DataType ArmnnType, typename T>
409LayerTestResult<T, 4> ResizeNearestNeighborSqMinTest(
410 armnn::IWorkloadFactory& workloadFactory,
411 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
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
448template<armnn::DataType ArmnnType, typename T>
449LayerTestResult<T, 4> ResizeNearestNeighborMinTest(
450 armnn::IWorkloadFactory& workloadFactory,
451 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
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
486template<armnn::DataType ArmnnType, typename T>
487LayerTestResult<T, 4> ResizeNearestNeighborMagTest(
488 armnn::IWorkloadFactory& workloadFactory,
489 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
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
536template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 4>
537ResizeBilinearNopTest<armnn::DataType::Float32>(
538 armnn::IWorkloadFactory& workloadFactory,
539 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
540 const armnn::DataLayout dataLayout);
541
542template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 4>
543SimpleResizeBilinearTest<armnn::DataType::Float32>(
544 armnn::IWorkloadFactory& workloadFactory,
545 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
546 const armnn::DataLayout dataLayout);
547
548template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 4>
549ResizeBilinearSqMinTest<armnn::DataType::Float32>(
550 armnn::IWorkloadFactory& workloadFactory,
551 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
552 const armnn::DataLayout dataLayout);
553
554template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 4>
555ResizeBilinearMinTest<armnn::DataType::Float32>(
556 armnn::IWorkloadFactory& workloadFactory,
557 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
558 const armnn::DataLayout dataLayout);
559
560template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 4>
561ResizeBilinearMagTest<armnn::DataType::Float32>(
562 armnn::IWorkloadFactory& workloadFactory,
563 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
564 const armnn::DataLayout dataLayout);
565
566template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 4>
567ResizeNearestNeighborNopTest<armnn::DataType::Float32>(
568 armnn::IWorkloadFactory& workloadFactory,
569 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
570 const armnn::DataLayout dataLayout);
571
572template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 4>
573SimpleResizeNearestNeighborTest<armnn::DataType::Float32>(
574 armnn::IWorkloadFactory& workloadFactory,
575 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
576 const armnn::DataLayout dataLayout);
577
578template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 4>
579ResizeNearestNeighborSqMinTest<armnn::DataType::Float32>(
580 armnn::IWorkloadFactory& workloadFactory,
581 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
582 const armnn::DataLayout dataLayout);
583
584template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 4>
585ResizeNearestNeighborMinTest<armnn::DataType::Float32>(
586 armnn::IWorkloadFactory& workloadFactory,
587 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
588 const armnn::DataLayout dataLayout);
589
590template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 4>
591ResizeNearestNeighborMagTest<armnn::DataType::Float32>(
592 armnn::IWorkloadFactory& workloadFactory,
593 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
594 const armnn::DataLayout dataLayout,
595 float inQuantScale,
596 int32_t inQuantOffset,
597 float outQuantScale,
598 int32_t outQuantOffset);
599
600// Float16
601template LayerTestResult<armnn::ResolveType<armnn::DataType::Float16>, 4>
602ResizeBilinearNopTest<armnn::DataType::Float16>(
603 armnn::IWorkloadFactory& workloadFactory,
604 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
605 const armnn::DataLayout dataLayout);
606
607template LayerTestResult<armnn::ResolveType<armnn::DataType::Float16>, 4>
608SimpleResizeBilinearTest<armnn::DataType::Float16>(
609 armnn::IWorkloadFactory& workloadFactory,
610 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
611 const armnn::DataLayout dataLayout);
612
613template LayerTestResult<armnn::ResolveType<armnn::DataType::Float16>, 4>
614ResizeBilinearSqMinTest<armnn::DataType::Float16>(
615 armnn::IWorkloadFactory& workloadFactory,
616 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
617 const armnn::DataLayout dataLayout);
618
619template LayerTestResult<armnn::ResolveType<armnn::DataType::Float16>, 4>
620ResizeBilinearMinTest<armnn::DataType::Float16>(
621 armnn::IWorkloadFactory& workloadFactory,
622 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
623 const armnn::DataLayout dataLayout);
624
625template LayerTestResult<armnn::ResolveType<armnn::DataType::Float16>, 4>
626ResizeBilinearMagTest<armnn::DataType::Float16>(
627 armnn::IWorkloadFactory& workloadFactory,
628 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
629 const armnn::DataLayout dataLayout);
630
631template LayerTestResult<armnn::ResolveType<armnn::DataType::Float16>, 4>
632ResizeNearestNeighborNopTest<armnn::DataType::Float16>(
633 armnn::IWorkloadFactory& workloadFactory,
634 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
635 const armnn::DataLayout dataLayout);
636
637template LayerTestResult<armnn::ResolveType<armnn::DataType::Float16>, 4>
638SimpleResizeNearestNeighborTest<armnn::DataType::Float16>(
639 armnn::IWorkloadFactory& workloadFactory,
640 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
641 const armnn::DataLayout dataLayout);
642
643template LayerTestResult<armnn::ResolveType<armnn::DataType::Float16>, 4>
644ResizeNearestNeighborSqMinTest<armnn::DataType::Float16>(
645 armnn::IWorkloadFactory& workloadFactory,
646 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
647 const armnn::DataLayout dataLayout);
648
649template LayerTestResult<armnn::ResolveType<armnn::DataType::Float16>, 4>
650ResizeNearestNeighborMinTest<armnn::DataType::Float16>(
651 armnn::IWorkloadFactory& workloadFactory,
652 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
653 const armnn::DataLayout dataLayout);
654
655template LayerTestResult<armnn::ResolveType<armnn::DataType::Float16>, 4>
656ResizeNearestNeighborMagTest<armnn::DataType::Float16>(
657 armnn::IWorkloadFactory& workloadFactory,
658 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
659 const armnn::DataLayout dataLayout,
660 float inQuantScale,
661 int32_t inQuantOffset,
662 float outQuantScale,
663 int32_t outQuantOffset);
664
665// QAsymm8
Derek Lambertif90c56d2020-01-10 17:14:08 +0000666template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmU8>, 4>
667ResizeBilinearNopTest<armnn::DataType::QAsymmU8>(
Aron Virginas-Tarb3670b12019-10-28 16:06:50 +0000668 armnn::IWorkloadFactory& workloadFactory,
669 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
670 const armnn::DataLayout dataLayout);
671
Derek Lambertif90c56d2020-01-10 17:14:08 +0000672template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmU8>, 4>
673SimpleResizeBilinearTest<armnn::DataType::QAsymmU8>(
Aron Virginas-Tarb3670b12019-10-28 16:06:50 +0000674 armnn::IWorkloadFactory& workloadFactory,
675 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
676 const armnn::DataLayout dataLayout);
677
Derek Lambertif90c56d2020-01-10 17:14:08 +0000678template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmU8>, 4>
679ResizeBilinearSqMinTest<armnn::DataType::QAsymmU8>(
Aron Virginas-Tarb3670b12019-10-28 16:06:50 +0000680 armnn::IWorkloadFactory& workloadFactory,
681 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
682 const armnn::DataLayout dataLayout);
683
Derek Lambertif90c56d2020-01-10 17:14:08 +0000684template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmU8>, 4>
685ResizeBilinearMinTest<armnn::DataType::QAsymmU8>(
Aron Virginas-Tarb3670b12019-10-28 16:06:50 +0000686 armnn::IWorkloadFactory& workloadFactory,
687 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
688 const armnn::DataLayout dataLayout);
689
Derek Lambertif90c56d2020-01-10 17:14:08 +0000690template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmU8>, 4>
691ResizeBilinearMagTest<armnn::DataType::QAsymmU8>(
Aron Virginas-Tarb3670b12019-10-28 16:06:50 +0000692 armnn::IWorkloadFactory& workloadFactory,
693 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
694 const armnn::DataLayout dataLayout);
695
Derek Lambertif90c56d2020-01-10 17:14:08 +0000696template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmU8>, 4>
697ResizeNearestNeighborNopTest<armnn::DataType::QAsymmU8>(
Aron Virginas-Tarb3670b12019-10-28 16:06:50 +0000698 armnn::IWorkloadFactory& workloadFactory,
699 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
700 const armnn::DataLayout dataLayout);
701
Derek Lambertif90c56d2020-01-10 17:14:08 +0000702template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmU8>, 4>
703SimpleResizeNearestNeighborTest<armnn::DataType::QAsymmU8>(
Aron Virginas-Tarb3670b12019-10-28 16:06:50 +0000704 armnn::IWorkloadFactory& workloadFactory,
705 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
706 const armnn::DataLayout dataLayout);
707
Derek Lambertif90c56d2020-01-10 17:14:08 +0000708template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmU8>, 4>
709ResizeNearestNeighborSqMinTest<armnn::DataType::QAsymmU8>(
Aron Virginas-Tarb3670b12019-10-28 16:06:50 +0000710 armnn::IWorkloadFactory& workloadFactory,
711 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
712 const armnn::DataLayout dataLayout);
713
Derek Lambertif90c56d2020-01-10 17:14:08 +0000714template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmU8>, 4>
715ResizeNearestNeighborMinTest<armnn::DataType::QAsymmU8>(
Aron Virginas-Tarb3670b12019-10-28 16:06:50 +0000716 armnn::IWorkloadFactory& workloadFactory,
717 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
718 const armnn::DataLayout dataLayout);
719
Derek Lambertif90c56d2020-01-10 17:14:08 +0000720template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmU8>, 4>
721ResizeNearestNeighborMagTest<armnn::DataType::QAsymmU8>(
Aron Virginas-Tarb3670b12019-10-28 16:06:50 +0000722 armnn::IWorkloadFactory& workloadFactory,
723 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
724 const armnn::DataLayout dataLayout,
725 float inQuantScale,
726 int32_t inQuantOffset,
727 float outQuantScale,
728 int32_t outQuantOffset);
729
Sadik Armagan303980c2020-04-17 12:45:14 +0100730// QAsymmS8
731template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmS8>, 4>
732ResizeBilinearNopTest<armnn::DataType::QAsymmS8>(
733 armnn::IWorkloadFactory& workloadFactory,
734 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
735 const armnn::DataLayout dataLayout);
736
737template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmS8>, 4>
738SimpleResizeBilinearTest<armnn::DataType::QAsymmS8>(
739 armnn::IWorkloadFactory& workloadFactory,
740 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
741 const armnn::DataLayout dataLayout);
742
743template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmS8>, 4>
744ResizeBilinearSqMinTest<armnn::DataType::QAsymmS8>(
745 armnn::IWorkloadFactory& workloadFactory,
746 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
747 const armnn::DataLayout dataLayout);
748
749template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmS8>, 4>
750ResizeBilinearMinTest<armnn::DataType::QAsymmS8>(
751 armnn::IWorkloadFactory& workloadFactory,
752 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
753 const armnn::DataLayout dataLayout);
754
755template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmS8>, 4>
756ResizeBilinearMagTest<armnn::DataType::QAsymmS8>(
757 armnn::IWorkloadFactory& workloadFactory,
758 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
759 const armnn::DataLayout dataLayout);
760
761template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmS8>, 4>
762ResizeNearestNeighborNopTest<armnn::DataType::QAsymmS8>(
763 armnn::IWorkloadFactory& workloadFactory,
764 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
765 const armnn::DataLayout dataLayout);
766
767template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmS8>, 4>
768SimpleResizeNearestNeighborTest<armnn::DataType::QAsymmS8>(
769 armnn::IWorkloadFactory& workloadFactory,
770 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
771 const armnn::DataLayout dataLayout);
772
773template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmS8>, 4>
774ResizeNearestNeighborSqMinTest<armnn::DataType::QAsymmS8>(
775 armnn::IWorkloadFactory& workloadFactory,
776 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
777 const armnn::DataLayout dataLayout);
778
779template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmS8>, 4>
780ResizeNearestNeighborMinTest<armnn::DataType::QAsymmS8>(
781 armnn::IWorkloadFactory& workloadFactory,
782 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
783 const armnn::DataLayout dataLayout);
784
785template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmS8>, 4>
786ResizeNearestNeighborMagTest<armnn::DataType::QAsymmS8>(
787 armnn::IWorkloadFactory& workloadFactory,
788 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
789 const armnn::DataLayout dataLayout,
790 float inQuantScale,
791 int32_t inQuantOffset,
792 float outQuantScale,
793 int32_t outQuantOffset);
794
Aron Virginas-Tarb3670b12019-10-28 16:06:50 +0000795// QSymm16
Derek Lambertif90c56d2020-01-10 17:14:08 +0000796template LayerTestResult<armnn::ResolveType<armnn::DataType::QSymmS16>, 4>
797ResizeBilinearNopTest<armnn::DataType::QSymmS16>(
Aron Virginas-Tarb3670b12019-10-28 16:06:50 +0000798 armnn::IWorkloadFactory& workloadFactory,
799 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
800 const armnn::DataLayout dataLayout);
801
Derek Lambertif90c56d2020-01-10 17:14:08 +0000802template LayerTestResult<armnn::ResolveType<armnn::DataType::QSymmS16>, 4>
803SimpleResizeBilinearTest<armnn::DataType::QSymmS16>(
Aron Virginas-Tarb3670b12019-10-28 16:06:50 +0000804 armnn::IWorkloadFactory& workloadFactory,
805 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
806 const armnn::DataLayout dataLayout);
807
Derek Lambertif90c56d2020-01-10 17:14:08 +0000808template LayerTestResult<armnn::ResolveType<armnn::DataType::QSymmS16>, 4>
809ResizeBilinearSqMinTest<armnn::DataType::QSymmS16>(
Aron Virginas-Tarb3670b12019-10-28 16:06:50 +0000810 armnn::IWorkloadFactory& workloadFactory,
811 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
812 const armnn::DataLayout dataLayout);
813
Derek Lambertif90c56d2020-01-10 17:14:08 +0000814template LayerTestResult<armnn::ResolveType<armnn::DataType::QSymmS16>, 4>
815ResizeBilinearMinTest<armnn::DataType::QSymmS16>(
Aron Virginas-Tarb3670b12019-10-28 16:06:50 +0000816 armnn::IWorkloadFactory& workloadFactory,
817 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
818 const armnn::DataLayout dataLayout);
819
Derek Lambertif90c56d2020-01-10 17:14:08 +0000820template LayerTestResult<armnn::ResolveType<armnn::DataType::QSymmS16>, 4>
821ResizeBilinearMagTest<armnn::DataType::QSymmS16>(
Aron Virginas-Tarb3670b12019-10-28 16:06:50 +0000822 armnn::IWorkloadFactory& workloadFactory,
823 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
824 const armnn::DataLayout dataLayout);
825
Derek Lambertif90c56d2020-01-10 17:14:08 +0000826template LayerTestResult<armnn::ResolveType<armnn::DataType::QSymmS16>, 4>
827ResizeNearestNeighborNopTest<armnn::DataType::QSymmS16>(
Aron Virginas-Tarb3670b12019-10-28 16:06:50 +0000828 armnn::IWorkloadFactory& workloadFactory,
829 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
830 const armnn::DataLayout dataLayout);
831
Derek Lambertif90c56d2020-01-10 17:14:08 +0000832template LayerTestResult<armnn::ResolveType<armnn::DataType::QSymmS16>, 4>
833SimpleResizeNearestNeighborTest<armnn::DataType::QSymmS16>(
Aron Virginas-Tarb3670b12019-10-28 16:06:50 +0000834 armnn::IWorkloadFactory& workloadFactory,
835 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
836 const armnn::DataLayout dataLayout);
837
Derek Lambertif90c56d2020-01-10 17:14:08 +0000838template LayerTestResult<armnn::ResolveType<armnn::DataType::QSymmS16>, 4>
839ResizeNearestNeighborSqMinTest<armnn::DataType::QSymmS16>(
Aron Virginas-Tarb3670b12019-10-28 16:06:50 +0000840 armnn::IWorkloadFactory& workloadFactory,
841 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
842 const armnn::DataLayout dataLayout);
843
Derek Lambertif90c56d2020-01-10 17:14:08 +0000844template LayerTestResult<armnn::ResolveType<armnn::DataType::QSymmS16>, 4>
845ResizeNearestNeighborMinTest<armnn::DataType::QSymmS16>(
Aron Virginas-Tarb3670b12019-10-28 16:06:50 +0000846 armnn::IWorkloadFactory& workloadFactory,
847 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
848 const armnn::DataLayout dataLayout);
849
Derek Lambertif90c56d2020-01-10 17:14:08 +0000850template LayerTestResult<armnn::ResolveType<armnn::DataType::QSymmS16>, 4>
851ResizeNearestNeighborMagTest<armnn::DataType::QSymmS16>(
Aron Virginas-Tarb3670b12019-10-28 16:06:50 +0000852 armnn::IWorkloadFactory& workloadFactory,
853 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
854 const armnn::DataLayout dataLayout,
855 float inQuantScale,
856 int32_t inQuantOffset,
857 float outQuantScale,
858 int32_t outQuantOffset);