ArmNN
 21.05
RefEndToEndTests.cpp
Go to the documentation of this file.
1 //
2 // Copyright © 2017 Arm Ltd and Contributors. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5 
7 
30 
31 #include <boost/test/unit_test.hpp>
32 #include <boost/test/execution_monitor.hpp>
33 
34 BOOST_AUTO_TEST_SUITE(RefEndToEnd)
35 
37 
38 // Abs
39 BOOST_AUTO_TEST_CASE(RefAbsEndToEndTestFloat32)
40 {
41  std::vector<float> expectedOutput =
42  {
43  1.f, 1.f, 1.f, 1.f, 5.f, 5.f, 5.f, 5.f,
44  3.f, 3.f, 3.f, 3.f, 4.f, 4.f, 4.f, 4.f
45  };
46 
47  ElementwiseUnarySimpleEndToEnd<armnn::DataType::Float32>(defaultBackends,
48  UnaryOperation::Abs,
49  expectedOutput);
50 }
51 
52 BOOST_AUTO_TEST_CASE(RefAbsEndToEndTestUint8)
53 {
54  // Note the expected output will be implicitly quantized by the below test function
55  std::vector<float> expectedOutput =
56  {
57  1.f, 1.f, 1.f, 1.f, 5.f, 5.f, 5.f, 5.f,
58  3.f, 3.f, 3.f, 3.f, 4.f, 4.f, 4.f, 4.f
59  };
60 
61  ElementwiseUnarySimpleEndToEnd<armnn::DataType::QAsymmU8>(defaultBackends,
62  UnaryOperation::Abs,
63  expectedOutput);
64 }
65 
66 BOOST_AUTO_TEST_CASE(RefAbsEndToEndTestInt16)
67 {
68  // Note the expected output will be implicitly quantized by the below test function
69  std::vector<float> expectedOutput =
70  {
71  1.f, 1.f, 1.f, 1.f, 5.f, 5.f, 5.f, 5.f,
72  3.f, 3.f, 3.f, 3.f, 4.f, 4.f, 4.f, 4.f
73  };
74 
75  ElementwiseUnarySimpleEndToEnd<armnn::DataType::QSymmS16>(defaultBackends,
76  UnaryOperation::Abs,
77  expectedOutput);
78 }
79 
80 // Constant
81 BOOST_AUTO_TEST_CASE(ConstantUsage_Ref_Float32)
82 {
83  BOOST_TEST(ConstantUsageFloat32Test(defaultBackends));
84 }
85 
86 BOOST_AUTO_TEST_CASE(ConstantUsage_Ref_Uint8)
87 {
88  BOOST_TEST(ConstantUsageUint8Test(defaultBackends));
89 }
90 
92 {
93  using namespace armnn;
94 
95  // Create runtime in which test will run
98 
99  // Builds up the structure of the network.
101 
102  IConnectableLayer* input = net->AddInputLayer(0, "input");
103  IConnectableLayer* softmax = net->AddSoftmaxLayer(SoftmaxDescriptor(), "softmax");
104  IConnectableLayer* output = net->AddOutputLayer(0, "output");
105 
106  input->GetOutputSlot(0).Connect(softmax->GetInputSlot(0));
107  softmax->GetOutputSlot(0).Connect(output->GetInputSlot(0));
108 
109  // Sets the tensors in the network.
110  TensorInfo inputTensorInfo(TensorShape({1, 5}), DataType::QAsymmU8);
111  inputTensorInfo.SetQuantizationOffset(100);
112  inputTensorInfo.SetQuantizationScale(10000.0f);
113  input->GetOutputSlot(0).SetTensorInfo(inputTensorInfo);
114 
115  TensorInfo outputTensorInfo(TensorShape({1, 5}), DataType::QAsymmU8);
116  outputTensorInfo.SetQuantizationOffset(0);
117  outputTensorInfo.SetQuantizationScale(1.0f/255.0f);
118  softmax->GetOutputSlot(0).SetTensorInfo(outputTensorInfo);
119 
120  // optimize the network
121  IOptimizedNetworkPtr optNet = Optimize(*net, defaultBackends, runtime->GetDeviceSpec());
122 
123  // Loads it into the runtime.
124  NetworkId netId;
125  auto error = runtime->LoadNetwork(netId, std::move(optNet));
126  BOOST_TEST(error == Status::Success);
127 
128  // Creates structures for input & output.
129  std::vector<uint8_t> inputData
130  {
131  1, 10, 3, 200, 5 // Some inputs - one of which is sufficiently larger than the others to saturate softmax.
132  };
133  std::vector<uint8_t> outputData(5);
134 
135  armnn::InputTensors inputTensors
136  {
137  {0, armnn::ConstTensor(runtime->GetInputTensorInfo(netId, 0), inputData.data())}
138  };
139  armnn::OutputTensors outputTensors
140  {
141  {0, armnn::Tensor(runtime->GetOutputTensorInfo(netId, 0), outputData.data())}
142  };
143 
144  // Does the inference.
145  runtime->EnqueueWorkload(netId, inputTensors, outputTensors);
146 
147  // Checks the results.
148  BOOST_TEST(outputData[0] == 0);
149  BOOST_TEST(outputData[1] == 0);
150  BOOST_TEST(outputData[2] == 0);
151  BOOST_TEST(outputData[3] == 255); // softmax has been saturated.
152  BOOST_TEST(outputData[4] == 0);
153 }
154 
156 {
157  // This test was designed to match "AddTwo" in android nn/runtime/test/TestTrivialModel.cpp.
158 
159  using namespace armnn;
160 
161  // Create runtime in which test will run
164 
165  // Builds up the structure of the network.
167 
168  IConnectableLayer* input1 = net->AddInputLayer(0);
169  IConnectableLayer* input2 = net->AddInputLayer(1);
170  IConnectableLayer* add = net->AddAdditionLayer();
171  IConnectableLayer* output = net->AddOutputLayer(0);
172 
173  input1->GetOutputSlot(0).Connect(add->GetInputSlot(0));
174  input2->GetOutputSlot(0).Connect(add->GetInputSlot(1));
175  add->GetOutputSlot(0).Connect(output->GetInputSlot(0));
176 
177  // Sets the tensors in the network.
178  TensorInfo tensorInfo(TensorShape({3, 4}), DataType::Float32);
179  input1->GetOutputSlot(0).SetTensorInfo(tensorInfo);
180  input2->GetOutputSlot(0).SetTensorInfo(tensorInfo);
181  add->GetOutputSlot(0).SetTensorInfo(tensorInfo);
182 
183  // optimize the network
184  IOptimizedNetworkPtr optNet = Optimize(*net, defaultBackends, runtime->GetDeviceSpec());
185 
186  // Loads it into the runtime.
187  NetworkId netId;
188  runtime->LoadNetwork(netId, std::move(optNet));
189 
190  // Creates structures for input & output - matching android nn test.
191  std::vector<float> input1Data
192  {
193  1.f, 2.f, 3.f, 4.f, 5.f, 6.f, 7.f, 8.f, 9.f, 10.f, 11.f, 12.f
194  };
195  std::vector<float> input2Data
196  {
197  100.f, 200.f, 300.f, 400.f, 500.f, 600.f, 700.f, 800.f, 900.f, 1000.f, 1100.f, 1200.f
198  };
199  std::vector<float> outputData(12);
200 
201  InputTensors inputTensors
202  {
203  {0,armnn::ConstTensor(runtime->GetInputTensorInfo(netId, 0), input1Data.data())},
204  {1,armnn::ConstTensor(runtime->GetInputTensorInfo(netId, 0), input2Data.data())}
205  };
206  OutputTensors outputTensors
207  {
208  {0,armnn::Tensor(runtime->GetOutputTensorInfo(netId, 0), outputData.data())}
209  };
210 
211  // Does the inference.
212  runtime->EnqueueWorkload(netId, inputTensors, outputTensors);
213 
214  // Checks the results
215  BOOST_TEST(outputData[0] == 101);
216  BOOST_TEST(outputData[1] == 202);
217  BOOST_TEST(outputData[2] == 303);
218  BOOST_TEST(outputData[3] == 404);
219  BOOST_TEST(outputData[4] == 505);
220  BOOST_TEST(outputData[5] == 606);
221  BOOST_TEST(outputData[6] == 707);
222  BOOST_TEST(outputData[7] == 808);
223  BOOST_TEST(outputData[8] == 909);
224  BOOST_TEST(outputData[9] == 1010);
225  BOOST_TEST(outputData[10] == 1111);
226  BOOST_TEST(outputData[11] == 1212);
227 }
228 
229 BOOST_AUTO_TEST_CASE(MultipleOutputs)
230 {
231  using namespace armnn;
232 
233  // Create runtime in which test will run
236 
237  // Builds up the structure of the network.
239 
240  IConnectableLayer* input = net->AddInputLayer(0);
241 
242  // ReLu1
243  ActivationDescriptor activation1Descriptor;
244  activation1Descriptor.m_Function = ActivationFunction::BoundedReLu;
245  activation1Descriptor.m_A = 1.f;
246  activation1Descriptor.m_B = -1.f;
247  IConnectableLayer* activation1 = net->AddActivationLayer(activation1Descriptor);
248 
249  // ReLu6
250  ActivationDescriptor activation2Descriptor;
251  activation2Descriptor.m_Function = ActivationFunction::BoundedReLu;
252  activation2Descriptor.m_A = 6.0f;
253  IConnectableLayer* activation2 = net->AddActivationLayer(activation2Descriptor);
254 
255  // BoundedReLu(min=2, max=5)
256  ActivationDescriptor activation3Descriptor;
257  activation3Descriptor.m_Function = ActivationFunction::BoundedReLu;
258  activation3Descriptor.m_A = 5.0f;
259  activation3Descriptor.m_B = 2.0f;
260  IConnectableLayer* activation3 = net->AddActivationLayer(activation3Descriptor);
261 
262  IConnectableLayer* output1 = net->AddOutputLayer(0);
263  IConnectableLayer* output2 = net->AddOutputLayer(1);
264  IConnectableLayer* output3 = net->AddOutputLayer(2);
265 
266  input->GetOutputSlot(0).Connect(activation1->GetInputSlot(0));
267  input->GetOutputSlot(0).Connect(activation2->GetInputSlot(0));
268  input->GetOutputSlot(0).Connect(activation3->GetInputSlot(0));
269 
270  activation1->GetOutputSlot(0).Connect(output1->GetInputSlot(0));
271  activation2->GetOutputSlot(0).Connect(output2->GetInputSlot(0));
272  activation3->GetOutputSlot(0).Connect(output3->GetInputSlot(0));
273 
274  // Sets the tensors in the network.
275  TensorInfo tensorInfo(TensorShape({ 10 }), DataType::Float32);
276  input->GetOutputSlot(0).SetTensorInfo(tensorInfo);
277  activation1->GetOutputSlot(0).SetTensorInfo(tensorInfo);
278  activation2->GetOutputSlot(0).SetTensorInfo(tensorInfo);
279  activation3->GetOutputSlot(0).SetTensorInfo(tensorInfo);
280 
281  // optimize the network
282  IOptimizedNetworkPtr optNet = Optimize(*net, defaultBackends, runtime->GetDeviceSpec());
283 
284  // Loads it into the runtime.
285  NetworkId netId;
286  runtime->LoadNetwork(netId, std::move(optNet));
287 
288  // Creates structures for input & output.
289  const std::vector<float> inputData{ 3.f, 5.f, 2.f, 3.f, 7.f, 0.f, -2.f, -1.f, 3.f, 3.f };
290 
291  std::vector<float> output1Data(inputData.size());
292  std::vector<float> output2Data(inputData.size());
293  std::vector<float> output3Data(inputData.size());
294 
295  InputTensors inputTensors
296  {
297  {0,armnn::ConstTensor(runtime->GetInputTensorInfo(netId, 0), inputData.data())}
298  };
299  OutputTensors outputTensors
300  {
301  {0,armnn::Tensor(runtime->GetOutputTensorInfo(netId, 0), output1Data.data())},
302  {1,armnn::Tensor(runtime->GetOutputTensorInfo(netId, 1), output2Data.data())},
303  {2,armnn::Tensor(runtime->GetOutputTensorInfo(netId, 2), output3Data.data())}
304  };
305 
306  // Does the inference.
307  runtime->EnqueueWorkload(netId, inputTensors, outputTensors);
308 
309  // Checks the results.
310  BOOST_TEST(output1Data == std::vector<float>({ 1.f, 1.f, 1.f, 1.f, 1.f, 0.f, -1.f, -1.f, 1.f, 1.f })); // ReLu1
311  BOOST_TEST(output2Data == std::vector<float>({ 3.f, 5.f, 2.f, 3.f, 6.f, 0.f, 0.f, 0.f, 3.f, 3.f })); // ReLu6
312  BOOST_TEST(output3Data == std::vector<float>({ 3.f, 5.f, 2.f, 3.f, 5.f, 2.f, 2.f, 2.f, 3.f, 3.f })); // [2, 5]
313 }
314 
316 {
317  using namespace armnn;
318 
319  // Create runtime in which test will run
322 
323  // Builds up the structure of the network.
325 
326  IConnectableLayer* input1 = net->AddInputLayer(0);
327  IConnectableLayer* input2 = net->AddInputLayer(1);
328  IConnectableLayer* min = net->AddMinimumLayer();
329  IConnectableLayer* output = net->AddOutputLayer(0);
330 
331  input1->GetOutputSlot(0).Connect(min->GetInputSlot(0));
332  input2->GetOutputSlot(0).Connect(min->GetInputSlot(1));
333  min->GetOutputSlot(0).Connect(output->GetInputSlot(0));
334 
335  // Sets the tensors in the network.
336  TensorInfo tensorInfo(TensorShape({1, 1, 1, 4}), DataType::Float32);
337  input1->GetOutputSlot(0).SetTensorInfo(tensorInfo);
338  input2->GetOutputSlot(0).SetTensorInfo(tensorInfo);
339  min->GetOutputSlot(0).SetTensorInfo(tensorInfo);
340 
341  // optimize the network
342  IOptimizedNetworkPtr optNet = Optimize(*net, defaultBackends, runtime->GetDeviceSpec());
343 
344  // Loads it into the runtime.
345  NetworkId netId;
346  runtime->LoadNetwork(netId, std::move(optNet));
347 
348  // Creates structures for input & output - matching android nn test.
349  std::vector<float> input1Data
350  {
351  1.0f, 2.0f, 3.0f, 4.0f
352  };
353  std::vector<float> input2Data
354  {
355  2.0f, 1.0f, 5.0f, 2.0f
356  };
357  std::vector<float> outputData(4);
358 
359  InputTensors inputTensors
360  {
361  {0,armnn::ConstTensor(runtime->GetInputTensorInfo(netId, 0), input1Data.data())},
362  {1,armnn::ConstTensor(runtime->GetInputTensorInfo(netId, 0), input2Data.data())}
363  };
364  OutputTensors outputTensors
365  {
366  {0,armnn::Tensor(runtime->GetOutputTensorInfo(netId, 0), outputData.data())}
367  };
368 
369  // Does the inference.
370  runtime->EnqueueWorkload(netId, inputTensors, outputTensors);
371 
372  // Checks the results
373  BOOST_TEST(outputData[0] == 1);
374  BOOST_TEST(outputData[1] == 1);
375  BOOST_TEST(outputData[2] == 3);
376  BOOST_TEST(outputData[3] == 2);
377 }
378 
379 BOOST_AUTO_TEST_CASE(RefEqualSimpleEndToEndTest)
380 {
381  const std::vector<uint8_t> expectedOutput({ 1, 1, 1, 1, 0, 0, 0, 0,
382  0, 0, 0, 0, 1, 1, 1, 1 });
383 
384  ComparisonSimpleEndToEnd<armnn::DataType::Float32>(defaultBackends,
386  expectedOutput);
387 }
388 
389 BOOST_AUTO_TEST_CASE(RefGreaterSimpleEndToEndTest)
390 {
391  const std::vector<uint8_t> expectedOutput({ 0, 0, 0, 0, 1, 1, 1, 1,
392  0, 0, 0, 0, 0, 0, 0, 0 });
393 
394  ComparisonSimpleEndToEnd<armnn::DataType::Float32>(defaultBackends,
396  expectedOutput);
397 }
398 
399 BOOST_AUTO_TEST_CASE(RefEqualSimpleEndToEndUint8Test)
400 {
401  const std::vector<uint8_t> expectedOutput({ 1, 1, 1, 1, 0, 0, 0, 0,
402  0, 0, 0, 0, 1, 1, 1, 1 });
403 
404  ComparisonSimpleEndToEnd<armnn::DataType::QAsymmU8>(defaultBackends,
406  expectedOutput);
407 }
408 
409 BOOST_AUTO_TEST_CASE(RefGreaterSimpleEndToEndUint8Test)
410 {
411  const std::vector<uint8_t> expectedOutput({ 0, 0, 0, 0, 1, 1, 1, 1,
412  0, 0, 0, 0, 0, 0, 0, 0 });
413 
414  ComparisonSimpleEndToEnd<armnn::DataType::QAsymmU8>(defaultBackends,
416  expectedOutput);
417 }
418 
419 BOOST_AUTO_TEST_CASE(RefEqualBroadcastEndToEndTest)
420 {
421  const std::vector<uint8_t> expectedOutput({ 1, 0, 1, 1, 0, 0,
422  0, 0, 0, 0, 0, 0 });
423 
424  ComparisonBroadcastEndToEnd<armnn::DataType::Float32>(defaultBackends,
426  expectedOutput);
427 }
428 
429 BOOST_AUTO_TEST_CASE(RefGreaterBroadcastEndToEndTest)
430 {
431  const std::vector<uint8_t> expectedOutput({ 0, 1, 0, 0, 0, 1,
432  1, 1, 1, 1, 1, 1 });
433 
434  ComparisonBroadcastEndToEnd<armnn::DataType::Float32>(defaultBackends,
436  expectedOutput);
437 }
438 
439 BOOST_AUTO_TEST_CASE(RefEqualBroadcastEndToEndUint8Test)
440 {
441  const std::vector<uint8_t > expectedOutput({ 1, 0, 1, 1, 0, 0,
442  0, 0, 0, 0, 0, 0 });
443 
444  ComparisonBroadcastEndToEnd<armnn::DataType::QAsymmU8>(defaultBackends,
446  expectedOutput);
447 }
448 
449 BOOST_AUTO_TEST_CASE(RefGreaterBroadcastEndToEndUint8Test)
450 {
451  const std::vector<uint8_t> expectedOutput({ 0, 1, 0, 0, 0, 1,
452  1, 1, 1, 1, 1, 1 });
453 
454  ComparisonBroadcastEndToEnd<armnn::DataType::QAsymmU8>(defaultBackends,
456  expectedOutput);
457 }
458 
459 BOOST_AUTO_TEST_CASE(RefBatchToSpaceNdEndToEndFloat32NHWCTest)
460 {
461  BatchToSpaceNdEndToEnd<armnn::DataType::Float32>(defaultBackends, armnn::DataLayout::NHWC);
462 }
463 
464 BOOST_AUTO_TEST_CASE(RefBatchToSpaceNdEndToEndUint8NHWCTest)
465 {
466  BatchToSpaceNdEndToEnd<armnn::DataType::QAsymmU8>(defaultBackends, armnn::DataLayout::NHWC);
467 }
468 
469 BOOST_AUTO_TEST_CASE(RefBatchToSpaceNdEndToEndQSymm16NHWCTest)
470 {
471  BatchToSpaceNdEndToEnd<armnn::DataType::QSymmS16>(defaultBackends, armnn::DataLayout::NHWC);
472 }
473 
474 BOOST_AUTO_TEST_CASE(RefBatchToSpaceNdEndToEndFloat32NCHWTest)
475 {
476  BatchToSpaceNdEndToEnd<armnn::DataType::Float32>(defaultBackends, armnn::DataLayout::NCHW);
477 }
478 
479 BOOST_AUTO_TEST_CASE(RefBatchToSpaceNdEndToEndUint8NCHWTest)
480 {
481  BatchToSpaceNdEndToEnd<armnn::DataType::QAsymmU8>(defaultBackends, armnn::DataLayout::NCHW);
482 }
483 
484 BOOST_AUTO_TEST_CASE(RefBatchToSpaceNdEndToEndQSymm16NCHWTest)
485 {
486  BatchToSpaceNdEndToEnd<armnn::DataType::QSymmS16>(defaultBackends, armnn::DataLayout::NCHW);
487 }
488 
489 BOOST_AUTO_TEST_CASE(RefBatchToSpaceNdEndToEndComplexFloat32NHWCTest)
490 {
491  BatchToSpaceNdComplexEndToEnd<armnn::DataType::Float32>(defaultBackends, armnn::DataLayout::NHWC);
492 }
493 
494 BOOST_AUTO_TEST_CASE(RefBatchToSpaceNdEndToEndComplexUint8NHWCTest)
495 {
496  BatchToSpaceNdComplexEndToEnd<armnn::DataType::QAsymmU8>(defaultBackends, armnn::DataLayout::NHWC);
497 }
498 
499 BOOST_AUTO_TEST_CASE(RefBatchToSpaceNdEndToEndComplexQSymm16NHWCTest)
500 {
501  BatchToSpaceNdComplexEndToEnd<armnn::DataType::QSymmS16>(defaultBackends, armnn::DataLayout::NHWC);
502 }
503 
504 BOOST_AUTO_TEST_CASE(RefBatchToSpaceNdEndToEndComplexFloat32NCHWTest)
505 {
506  BatchToSpaceNdComplexEndToEnd<armnn::DataType::Float32>(defaultBackends, armnn::DataLayout::NCHW);
507 }
508 
509 BOOST_AUTO_TEST_CASE(RefBatchToSpaceNdEndToEndComplexUint8NCHWTest)
510 {
511  BatchToSpaceNdComplexEndToEnd<armnn::DataType::QAsymmU8>(defaultBackends, armnn::DataLayout::NCHW);
512 }
513 
514 BOOST_AUTO_TEST_CASE(RefBatchToSpaceNdEndToEndComplexQSymm16NCHWTest)
515 {
516  BatchToSpaceNdComplexEndToEnd<armnn::DataType::QSymmS16>(defaultBackends, armnn::DataLayout::NCHW);
517 }
518 
519 BOOST_AUTO_TEST_CASE(RefConcatEndToEndDim0Test)
520 {
521  ConcatDim0EndToEnd<armnn::DataType::Float32>(defaultBackends);
522 }
523 
524 BOOST_AUTO_TEST_CASE(RefConcatEndToEndDim0Uint8Test)
525 {
526  ConcatDim0EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
527 }
528 
529 BOOST_AUTO_TEST_CASE(RefConcatEndToEndDim1Test)
530 {
531  ConcatDim1EndToEnd<armnn::DataType::Float32>(defaultBackends);
532 }
533 
534 BOOST_AUTO_TEST_CASE(RefConcatEndToEndDim1Uint8Test)
535 {
536  ConcatDim1EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
537 }
538 
539 BOOST_AUTO_TEST_CASE(RefConcatEndToEndDim2Test)
540 {
541  ConcatDim2EndToEnd<armnn::DataType::Float32>(defaultBackends);
542 }
543 
544 BOOST_AUTO_TEST_CASE(RefConcatEndToEndDim2Uint8Test)
545 {
546  ConcatDim2EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
547 }
548 
549 BOOST_AUTO_TEST_CASE(RefConcatEndToEndDim3Test)
550 {
551  ConcatDim3EndToEnd<armnn::DataType::Float32>(defaultBackends);
552 }
553 
554 BOOST_AUTO_TEST_CASE(RefConcatEndToEndDim3Uint8Test)
555 {
556  ConcatDim3EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
557 }
558 
559 BOOST_AUTO_TEST_CASE(RefEluEndToEndTestFloat32)
560 {
561  EluEndToEndTest<armnn::DataType::Float32>(defaultBackends);
562 }
563 
564 BOOST_AUTO_TEST_CASE(RefEluEndToEndTestFloat16)
565 {
566  EluEndToEndTest<armnn::DataType::Float16>(defaultBackends);
567 }
568 
569 BOOST_AUTO_TEST_CASE(RefEluEndToEndTestBFloat16)
570 {
571  EluEndToEndTest<armnn::DataType::BFloat16>(defaultBackends);
572 }
573 
574 BOOST_AUTO_TEST_CASE(RefEluEndToEndTestQAsymmS8)
575 {
576  EluEndToEndTest<armnn::DataType::QAsymmS8>(defaultBackends);
577 }
578 
579 BOOST_AUTO_TEST_CASE(RefEluEndToEndTestQAsymmU8)
580 {
581  EluEndToEndTest<armnn::DataType::QAsymmU8>(defaultBackends);
582 }
583 
584 BOOST_AUTO_TEST_CASE(RefEluEndToEndTestQSymmS16)
585 {
586  EluEndToEndTest<armnn::DataType::QSymmS16>(defaultBackends);
587 }
588 
589 BOOST_AUTO_TEST_CASE(RefFillEndToEndTest)
590 {
591  FillEndToEnd<armnn::DataType::Float32>(defaultBackends);
592 }
593 
594 BOOST_AUTO_TEST_CASE(RefFillEndToEndTestFloat16)
595 {
596  FillEndToEnd<armnn::DataType::Float16>(defaultBackends);
597 }
598 
599 BOOST_AUTO_TEST_CASE(RefFillEndToEndTestInt32)
600 {
601  FillEndToEnd<armnn::DataType::Signed32>(defaultBackends);
602 }
603 
604 BOOST_AUTO_TEST_CASE(RefFullyConnectedEndToEndTestInt32)
605 {
606  FullyConnectedWithDynamicWeightsEndToEnd<armnn::DataType::Float32>(defaultBackends);
607 }
608 
609 BOOST_AUTO_TEST_CASE(RefGatherFloatTest)
610 {
611  GatherEndToEnd<armnn::DataType::Float32>(defaultBackends);
612 }
613 
614 BOOST_AUTO_TEST_CASE(RefGatherUint8Test)
615 {
616  GatherEndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
617 }
618 
619 BOOST_AUTO_TEST_CASE(RefGatherInt16Test)
620 {
621  GatherEndToEnd<armnn::DataType::QSymmS16>(defaultBackends);
622 }
623 
624 BOOST_AUTO_TEST_CASE(RefGatherMultiDimFloatTest)
625 {
626  GatherMultiDimEndToEnd<armnn::DataType::Float32>(defaultBackends);
627 }
628 
629 BOOST_AUTO_TEST_CASE(RefGatherMultiDimUint8Test)
630 {
631  GatherMultiDimEndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
632 }
633 
634 BOOST_AUTO_TEST_CASE(RefGatherMultiDimInt16Test)
635 {
636  GatherMultiDimEndToEnd<armnn::DataType::QSymmS16>(defaultBackends);
637 }
638 
639 // DepthToSpace
640 BOOST_AUTO_TEST_CASE(DephtToSpaceEndToEndNchwFloat32)
641 {
642  DepthToSpaceEndToEnd<armnn::DataType::Float32>(defaultBackends, armnn::DataLayout::NCHW);
643 }
644 
645 BOOST_AUTO_TEST_CASE(DephtToSpaceEndToEndNchwFloat16)
646 {
647  DepthToSpaceEndToEnd<armnn::DataType::Float16>(defaultBackends, armnn::DataLayout::NCHW);
648 }
649 
650 BOOST_AUTO_TEST_CASE(DephtToSpaceEndToEndNchwUint8)
651 {
652  DepthToSpaceEndToEnd<armnn::DataType::QAsymmU8>(defaultBackends, armnn::DataLayout::NCHW);
653 }
654 
655 BOOST_AUTO_TEST_CASE(DephtToSpaceEndToEndNchwInt16)
656 {
657  DepthToSpaceEndToEnd<armnn::DataType::QSymmS16>(defaultBackends, armnn::DataLayout::NCHW);
658 }
659 
660 BOOST_AUTO_TEST_CASE(DephtToSpaceEndToEndNhwcFloat32)
661 {
662  DepthToSpaceEndToEnd<armnn::DataType::Float32>(defaultBackends, armnn::DataLayout::NHWC);
663 }
664 
665 BOOST_AUTO_TEST_CASE(DephtToSpaceEndToEndNhwcFloat16)
666 {
667  DepthToSpaceEndToEnd<armnn::DataType::Float16>(defaultBackends, armnn::DataLayout::NHWC);
668 }
669 
670 BOOST_AUTO_TEST_CASE(DephtToSpaceEndToEndNhwcUint8)
671 {
672  DepthToSpaceEndToEnd<armnn::DataType::QAsymmU8>(defaultBackends, armnn::DataLayout::NHWC);
673 }
674 
675 BOOST_AUTO_TEST_CASE(DephtToSpaceEndToEndNhwcInt16)
676 {
677  DepthToSpaceEndToEnd<armnn::DataType::QSymmS16>(defaultBackends, armnn::DataLayout::NHWC);
678 }
679 
680 // Dequantize
681 BOOST_AUTO_TEST_CASE(DequantizeEndToEndSimpleTest)
682 {
683  DequantizeEndToEndSimple<armnn::DataType::QAsymmU8>(defaultBackends);
684 }
685 
686 BOOST_AUTO_TEST_CASE(DequantizeEndToEndOffsetTest)
687 {
688  DequantizeEndToEndOffset<armnn::DataType::QAsymmU8>(defaultBackends);
689 }
690 
691 BOOST_AUTO_TEST_CASE(DequantizeEndToEndSimpleInt16Test)
692 {
693  DequantizeEndToEndSimple<armnn::DataType::QSymmS16>(defaultBackends);
694 }
695 
696 BOOST_AUTO_TEST_CASE(DequantizeEndToEndOffsetInt16Test)
697 {
698  DequantizeEndToEndOffset<armnn::DataType::QSymmS16>(defaultBackends);
699 }
700 
701 BOOST_AUTO_TEST_CASE(RefDetectionPostProcessRegularNmsTest)
702 {
703  std::vector<float> boxEncodings({
704  0.0f, 0.0f, 0.0f, 0.0f,
705  0.0f, 1.0f, 0.0f, 0.0f,
706  0.0f, -1.0f, 0.0f, 0.0f,
707  0.0f, 0.0f, 0.0f, 0.0f,
708  0.0f, 1.0f, 0.0f, 0.0f,
709  0.0f, 0.0f, 0.0f, 0.0f
710  });
711  std::vector<float> scores({
712  0.0f, 0.9f, 0.8f,
713  0.0f, 0.75f, 0.72f,
714  0.0f, 0.6f, 0.5f,
715  0.0f, 0.93f, 0.95f,
716  0.0f, 0.5f, 0.4f,
717  0.0f, 0.3f, 0.2f
718  });
719  std::vector<float> anchors({
720  0.5f, 0.5f, 1.0f, 1.0f,
721  0.5f, 0.5f, 1.0f, 1.0f,
722  0.5f, 0.5f, 1.0f, 1.0f,
723  0.5f, 10.5f, 1.0f, 1.0f,
724  0.5f, 10.5f, 1.0f, 1.0f,
725  0.5f, 100.5f, 1.0f, 1.0f
726  });
727  DetectionPostProcessRegularNmsEndToEnd<armnn::DataType::Float32>(defaultBackends, boxEncodings, scores, anchors);
728 }
729 
730 inline void QuantizeData(uint8_t* quant, const float* dequant, const TensorInfo& info)
731 {
732  for (size_t i = 0; i < info.GetNumElements(); i++)
733  {
734  quant[i] = armnn::Quantize<uint8_t>(dequant[i], info.GetQuantizationScale(), info.GetQuantizationOffset());
735  }
736 }
737 
738 BOOST_AUTO_TEST_CASE(RefDetectionPostProcessRegularNmsUint8Test)
739 {
740  armnn::TensorInfo boxEncodingsInfo({ 1, 6, 4 }, armnn::DataType::Float32);
743 
744  boxEncodingsInfo.SetQuantizationScale(1.0f);
745  boxEncodingsInfo.SetQuantizationOffset(1);
750 
751  std::vector<float> boxEncodings({
752  0.0f, 0.0f, 0.0f, 0.0f,
753  0.0f, 1.0f, 0.0f, 0.0f,
754  0.0f, -1.0f, 0.0f, 0.0f,
755  0.0f, 0.0f, 0.0f, 0.0f,
756  0.0f, 1.0f, 0.0f, 0.0f,
757  0.0f, 0.0f, 0.0f, 0.0f
758  });
759  std::vector<float> scores({
760  0.0f, 0.9f, 0.8f,
761  0.0f, 0.75f, 0.72f,
762  0.0f, 0.6f, 0.5f,
763  0.0f, 0.93f, 0.95f,
764  0.0f, 0.5f, 0.4f,
765  0.0f, 0.3f, 0.2f
766  });
767  std::vector<float> anchors({
768  0.5f, 0.5f, 1.0f, 1.0f,
769  0.5f, 0.5f, 1.0f, 1.0f,
770  0.5f, 0.5f, 1.0f, 1.0f,
771  0.5f, 10.5f, 1.0f, 1.0f,
772  0.5f, 10.5f, 1.0f, 1.0f,
773  0.5f, 100.5f, 1.0f, 1.0f
774  });
775 
776  std::vector<uint8_t> qBoxEncodings(boxEncodings.size(), 0);
777  std::vector<uint8_t> qScores(scores.size(), 0);
778  std::vector<uint8_t> qAnchors(anchors.size(), 0);
779  QuantizeData(qBoxEncodings.data(), boxEncodings.data(), boxEncodingsInfo);
780  QuantizeData(qScores.data(), scores.data(), scoresInfo);
781  QuantizeData(qAnchors.data(), anchors.data(), anchorsInfo);
782  DetectionPostProcessRegularNmsEndToEnd<armnn::DataType::QAsymmU8>(defaultBackends, qBoxEncodings,
783  qScores, qAnchors,
784  1.0f, 1, 0.01f, 0, 0.5f, 0);
785 }
786 
787 BOOST_AUTO_TEST_CASE(RefDetectionPostProcessFastNmsTest)
788 {
789  std::vector<float> boxEncodings({
790  0.0f, 0.0f, 0.0f, 0.0f,
791  0.0f, 1.0f, 0.0f, 0.0f,
792  0.0f, -1.0f, 0.0f, 0.0f,
793  0.0f, 0.0f, 0.0f, 0.0f,
794  0.0f, 1.0f, 0.0f, 0.0f,
795  0.0f, 0.0f, 0.0f, 0.0f
796  });
797  std::vector<float> scores({
798  0.0f, 0.9f, 0.8f,
799  0.0f, 0.75f, 0.72f,
800  0.0f, 0.6f, 0.5f,
801  0.0f, 0.93f, 0.95f,
802  0.0f, 0.5f, 0.4f,
803  0.0f, 0.3f, 0.2f
804  });
805  std::vector<float> anchors({
806  0.5f, 0.5f, 1.0f, 1.0f,
807  0.5f, 0.5f, 1.0f, 1.0f,
808  0.5f, 0.5f, 1.0f, 1.0f,
809  0.5f, 10.5f, 1.0f, 1.0f,
810  0.5f, 10.5f, 1.0f, 1.0f,
811  0.5f, 100.5f, 1.0f, 1.0f
812  });
813  DetectionPostProcessFastNmsEndToEnd<armnn::DataType::Float32>(defaultBackends, boxEncodings, scores, anchors);
814 }
815 
816 BOOST_AUTO_TEST_CASE(RefDetectionPostProcessFastNmsUint8Test)
817 {
818  armnn::TensorInfo boxEncodingsInfo({ 1, 6, 4 }, armnn::DataType::Float32);
821 
822  boxEncodingsInfo.SetQuantizationScale(1.0f);
823  boxEncodingsInfo.SetQuantizationOffset(1);
828 
829  std::vector<float> boxEncodings({
830  0.0f, 0.0f, 0.0f, 0.0f,
831  0.0f, 1.0f, 0.0f, 0.0f,
832  0.0f, -1.0f, 0.0f, 0.0f,
833  0.0f, 0.0f, 0.0f, 0.0f,
834  0.0f, 1.0f, 0.0f, 0.0f,
835  0.0f, 0.0f, 0.0f, 0.0f
836  });
837  std::vector<float> scores({
838  0.0f, 0.9f, 0.8f,
839  0.0f, 0.75f, 0.72f,
840  0.0f, 0.6f, 0.5f,
841  0.0f, 0.93f, 0.95f,
842  0.0f, 0.5f, 0.4f,
843  0.0f, 0.3f, 0.2f
844  });
845  std::vector<float> anchors({
846  0.5f, 0.5f, 1.0f, 1.0f,
847  0.5f, 0.5f, 1.0f, 1.0f,
848  0.5f, 0.5f, 1.0f, 1.0f,
849  0.5f, 10.5f, 1.0f, 1.0f,
850  0.5f, 10.5f, 1.0f, 1.0f,
851  0.5f, 100.5f, 1.0f, 1.0f
852  });
853 
854  std::vector<uint8_t> qBoxEncodings(boxEncodings.size(), 0);
855  std::vector<uint8_t> qScores(scores.size(), 0);
856  std::vector<uint8_t> qAnchors(anchors.size(), 0);
857  QuantizeData(qBoxEncodings.data(), boxEncodings.data(), boxEncodingsInfo);
858  QuantizeData(qScores.data(), scores.data(), scoresInfo);
859  QuantizeData(qAnchors.data(), anchors.data(), anchorsInfo);
860  DetectionPostProcessFastNmsEndToEnd<armnn::DataType::QAsymmU8>(defaultBackends, qBoxEncodings,
861  qScores, qAnchors,
862  1.0f, 1, 0.01f, 0, 0.5f, 0);
863 }
864 
865 // HardSwish
866 BOOST_AUTO_TEST_CASE(RefHardSwishEndToEndTestFloat32)
867 {
868  HardSwishEndToEndTest<armnn::DataType::Float32>(defaultBackends);
869 }
870 
871 BOOST_AUTO_TEST_CASE(RefHardSwishEndToEndTestFloat16)
872 {
873  HardSwishEndToEndTest<armnn::DataType::Float16>(defaultBackends);
874 }
875 
876 BOOST_AUTO_TEST_CASE(RefHardSwishEndToEndTestBFloat16)
877 {
878 HardSwishEndToEndTest<armnn::DataType::BFloat16>(defaultBackends);
879 }
880 
881 BOOST_AUTO_TEST_CASE(RefHardSwishEndToEndTestQAsymmS8)
882 {
883  HardSwishEndToEndTest<armnn::DataType::QAsymmS8>(defaultBackends);
884 }
885 
886 BOOST_AUTO_TEST_CASE(RefHardSwishEndToEndTestQAsymmU8)
887 {
888  HardSwishEndToEndTest<armnn::DataType::QAsymmU8>(defaultBackends);
889 }
890 
891 BOOST_AUTO_TEST_CASE(RefHardSwishEndToEndTestQSymmS16)
892 {
893  HardSwishEndToEndTest<armnn::DataType::QSymmS16>(defaultBackends);
894 }
895 
896 // LogSoftmax
897 BOOST_AUTO_TEST_CASE(RefLogSoftmaxEndToEndTest)
898 {
900 }
901 
902 BOOST_AUTO_TEST_CASE(RefPreluEndToEndTestFloat32)
903 {
904  PreluEndToEndNegativeTest<armnn::DataType::Float32>(defaultBackends);
905 }
906 
907 BOOST_AUTO_TEST_CASE(RefPreluEndToEndTestUint8)
908 {
909  PreluEndToEndPositiveTest<armnn::DataType::QAsymmU8>(defaultBackends);
910 }
911 
912 BOOST_AUTO_TEST_CASE(RefPreluEndToEndTestQSymm16)
913 {
914  PreluEndToEndPositiveTest<armnn::DataType::QSymmS16>(defaultBackends);
915 }
916 
917 BOOST_AUTO_TEST_CASE(RefSpaceToDepthNhwcEndToEndTest1)
918 {
920 }
921 
922 BOOST_AUTO_TEST_CASE(RefSpaceToDepthNchwEndToEndTest1)
923 {
925 
926 }
927 
928 BOOST_AUTO_TEST_CASE(RefSpaceToDepthNhwcEndToEndTest2)
929 {
931 }
932 
933 BOOST_AUTO_TEST_CASE(RefSpaceToDepthNchwEndToEndTest2)
934 {
936 }
937 
938 BOOST_AUTO_TEST_CASE(RefSplitter1dEndToEndTest)
939 {
940  Splitter1dEndToEnd<armnn::DataType::Float32>(defaultBackends);
941 }
942 
943 BOOST_AUTO_TEST_CASE(RefSplitter1dEndToEndUint8Test)
944 {
945  Splitter1dEndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
946 }
947 
948 BOOST_AUTO_TEST_CASE(RefSplitter2dDim0EndToEndTest)
949 {
950  Splitter2dDim0EndToEnd<armnn::DataType::Float32>(defaultBackends);
951 }
952 
953 BOOST_AUTO_TEST_CASE(RefSplitter2dDim1EndToEndTest)
954 {
955  Splitter2dDim1EndToEnd<armnn::DataType::Float32>(defaultBackends);
956 }
957 
958 BOOST_AUTO_TEST_CASE(RefSplitter2dDim0EndToEndUint8Test)
959 {
960  Splitter2dDim0EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
961 }
962 
963 BOOST_AUTO_TEST_CASE(RefSplitter2dDim1EndToEndUint8Test)
964 {
965  Splitter2dDim1EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
966 }
967 
968 BOOST_AUTO_TEST_CASE(RefSplitter3dDim0EndToEndTest)
969 {
970  Splitter3dDim0EndToEnd<armnn::DataType::Float32>(defaultBackends);
971 }
972 
973 BOOST_AUTO_TEST_CASE(RefSplitter3dDim1EndToEndTest)
974 {
975  Splitter3dDim1EndToEnd<armnn::DataType::Float32>(defaultBackends);
976 }
977 
978 BOOST_AUTO_TEST_CASE(RefSplitter3dDim2EndToEndTest)
979 {
980  Splitter3dDim2EndToEnd<armnn::DataType::Float32>(defaultBackends);
981 }
982 
983 BOOST_AUTO_TEST_CASE(RefSplitter3dDim0EndToEndUint8Test)
984 {
985  Splitter3dDim0EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
986 }
987 
988 BOOST_AUTO_TEST_CASE(RefSplitter3dDim1EndToEndUint8Test)
989 {
990  Splitter3dDim1EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
991 }
992 
993 BOOST_AUTO_TEST_CASE(RefSplitter3dDim2EndToEndUint8Test)
994 {
995  Splitter3dDim2EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
996 }
997 
998 BOOST_AUTO_TEST_CASE(RefSplitter4dDim0EndToEndTest)
999 {
1000  Splitter4dDim0EndToEnd<armnn::DataType::Float32>(defaultBackends);
1001 }
1002 
1003 BOOST_AUTO_TEST_CASE(RefSplitter4dDim1EndToEndTest)
1004 {
1005  Splitter4dDim1EndToEnd<armnn::DataType::Float32>(defaultBackends);
1006 }
1007 
1008 BOOST_AUTO_TEST_CASE(RefSplitter4dDim2EndToEndTest)
1009 {
1010  Splitter4dDim2EndToEnd<armnn::DataType::Float32>(defaultBackends);
1011 }
1012 
1013 BOOST_AUTO_TEST_CASE(RefSplitter4dDim3EndToEndTest)
1014 {
1015  Splitter4dDim3EndToEnd<armnn::DataType::Float32>(defaultBackends);
1016 }
1017 
1018 BOOST_AUTO_TEST_CASE(RefSplitter4dDim0EndToEndUint8Test)
1019 {
1020  Splitter4dDim0EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
1021 }
1022 
1023 BOOST_AUTO_TEST_CASE(RefSplitter4dDim1EndToEndUint8Test)
1024 {
1025  Splitter4dDim1EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
1026 }
1027 
1028 BOOST_AUTO_TEST_CASE(RefSplitter4dDim2EndToEndUint8Test)
1029 {
1030  Splitter4dDim2EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
1031 }
1032 
1033 BOOST_AUTO_TEST_CASE(RefSplitter4dDim3EndToEndUint8Test)
1034 {
1035  Splitter4dDim3EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
1036 }
1037 
1038 // TransposeConvolution2d
1039 BOOST_AUTO_TEST_CASE(RefTransposeConvolution2dEndToEndFloatNchwTest)
1040 {
1041  TransposeConvolution2dEndToEnd<armnn::DataType::Float32, armnn::DataType::Float32>(
1043 }
1044 
1045 BOOST_AUTO_TEST_CASE(RefTransposeConvolution2dEndToEndUint8NchwTest)
1046 {
1047  TransposeConvolution2dEndToEnd<armnn::DataType::QAsymmU8, armnn::DataType::Signed32>(
1049 }
1050 
1051 BOOST_AUTO_TEST_CASE(RefTransposeConvolution2dEndToEndInt16NchwTest)
1052 {
1053  TransposeConvolution2dEndToEnd<armnn::DataType::QSymmS16, armnn::DataType::Signed32>(
1055 }
1056 
1057 BOOST_AUTO_TEST_CASE(RefTransposeConvolution2dEndToEndFloatNhwcTest)
1058 {
1059  TransposeConvolution2dEndToEnd<armnn::DataType::Float32, armnn::DataType::Float32>(
1061 }
1062 
1063 BOOST_AUTO_TEST_CASE(RefTransposeConvolution2dEndToEndUint8NhwcTest)
1064 {
1065  TransposeConvolution2dEndToEnd<armnn::DataType::QAsymmU8, armnn::DataType::Signed32>(
1067 }
1068 
1069 BOOST_AUTO_TEST_CASE(RefTransposeConvolution2dEndToEndInt16NhwcTest)
1070 {
1071  TransposeConvolution2dEndToEnd<armnn::DataType::QSymmS16, armnn::DataType::Signed32>(
1073 }
1074 
1075 // Resize Bilinear
1076 BOOST_AUTO_TEST_CASE(RefResizeBilinearEndToEndFloatNchwTest)
1077 {
1078  ResizeBilinearEndToEnd<armnn::DataType::Float32>(defaultBackends, armnn::DataLayout::NCHW);
1079 }
1080 
1081 BOOST_AUTO_TEST_CASE(RefResizeBilinearEndToEndUint8NchwTest)
1082 {
1083  ResizeBilinearEndToEnd<armnn::DataType::QAsymmU8>(defaultBackends, armnn::DataLayout::NCHW);
1084 }
1085 
1086 BOOST_AUTO_TEST_CASE(RefResizeBilinearEndToEndInt16NchwTest)
1087 {
1088  ResizeBilinearEndToEnd<armnn::DataType::QSymmS16>(defaultBackends, armnn::DataLayout::NCHW);
1089 }
1090 
1091 BOOST_AUTO_TEST_CASE(RefResizeBilinearEndToEndFloatNhwcTest)
1092 {
1093  ResizeBilinearEndToEnd<armnn::DataType::Float32>(defaultBackends, armnn::DataLayout::NHWC);
1094 }
1095 
1096 BOOST_AUTO_TEST_CASE(RefResizeBilinearEndToEndUint8NhwcTest)
1097 {
1098  ResizeBilinearEndToEnd<armnn::DataType::QAsymmU8>(defaultBackends, armnn::DataLayout::NHWC);
1099 }
1100 
1101 BOOST_AUTO_TEST_CASE(RefResizeBilinearEndToEndInt16NhwcTest)
1102 {
1103  ResizeBilinearEndToEnd<armnn::DataType::QSymmS16>(defaultBackends, armnn::DataLayout::NHWC);
1104 }
1105 
1106 // Resize NearestNeighbor
1107 BOOST_AUTO_TEST_CASE(RefResizeNearestNeighborEndToEndFloatNchwTest)
1108 {
1109  ResizeNearestNeighborEndToEnd<armnn::DataType::Float32>(defaultBackends, armnn::DataLayout::NCHW);
1110 }
1111 
1112 BOOST_AUTO_TEST_CASE(RefResizeNearestNeighborEndToEndUint8NchwTest)
1113 {
1114  ResizeNearestNeighborEndToEnd<armnn::DataType::QAsymmU8>(defaultBackends, armnn::DataLayout::NCHW);
1115 }
1116 
1117 BOOST_AUTO_TEST_CASE(RefResizeNearestNeighborEndToEndInt16NchwTest)
1118 {
1119  ResizeNearestNeighborEndToEnd<armnn::DataType::QSymmS16>(defaultBackends, armnn::DataLayout::NCHW);
1120 }
1121 
1122 BOOST_AUTO_TEST_CASE(RefResizeNearestNeighborEndToEndFloatNhwcTest)
1123 {
1124  ResizeNearestNeighborEndToEnd<armnn::DataType::Float32>(defaultBackends, armnn::DataLayout::NHWC);
1125 }
1126 
1127 BOOST_AUTO_TEST_CASE(RefResizeNearestNeighborEndToEndUint8NhwcTest)
1128 {
1129  ResizeNearestNeighborEndToEnd<armnn::DataType::QAsymmU8>(defaultBackends, armnn::DataLayout::NHWC);
1130 }
1131 
1132 BOOST_AUTO_TEST_CASE(RefResizeNearestNeighborEndToEndInt16NhwcTest)
1133 {
1134  ResizeNearestNeighborEndToEnd<armnn::DataType::QSymmS16>(defaultBackends, armnn::DataLayout::NHWC);
1135 }
1136 
1137 // InstanceNormalization
1138 BOOST_AUTO_TEST_CASE(RefInstanceNormalizationNhwcEndToEndTest1)
1139 {
1141 }
1142 
1143 BOOST_AUTO_TEST_CASE(RefInstanceNormalizationNchwEndToEndTest1)
1144 {
1146 }
1147 
1148 BOOST_AUTO_TEST_CASE(RefInstanceNormalizationNhwcEndToEndTest2)
1149 {
1151 }
1152 
1153 BOOST_AUTO_TEST_CASE(RefInstanceNormalizationNchwEndToEndTest2)
1154 {
1156 }
1157 
1158 // ArgMinMax
1159 BOOST_AUTO_TEST_CASE(RefArgMaxSimpleTest)
1160 {
1161  ArgMaxEndToEndSimple<armnn::DataType::Float32>(defaultBackends);
1162 }
1163 
1164 BOOST_AUTO_TEST_CASE(RefArgMaxSimpleUint8Test)
1165 {
1166  ArgMaxEndToEndSimple<armnn::DataType::QAsymmU8>(defaultBackends);
1167 }
1168 
1169 BOOST_AUTO_TEST_CASE(RefArgMinSimpleTest)
1170 {
1171  ArgMinEndToEndSimple<armnn::DataType::Float32>(defaultBackends);
1172 }
1173 
1174 BOOST_AUTO_TEST_CASE(RefArgMinSimpleUint8Test)
1175 {
1176  ArgMinEndToEndSimple<armnn::DataType::QAsymmU8>(defaultBackends);
1177 }
1178 
1179 BOOST_AUTO_TEST_CASE(RefArgMaxAxis0Test)
1180 {
1181  ArgMaxAxis0EndToEnd<armnn::DataType::Float32>(defaultBackends);
1182 }
1183 
1184 BOOST_AUTO_TEST_CASE(RefArgMaxAxis0Uint8Test)
1185 {
1186  ArgMaxAxis0EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
1187 }
1188 
1189 BOOST_AUTO_TEST_CASE(RefArgMinAxis0Test)
1190 {
1191  ArgMinAxis0EndToEnd<armnn::DataType::Float32>(defaultBackends);
1192 }
1193 
1194 BOOST_AUTO_TEST_CASE(RefArgMinAxis0Uint8Test)
1195 {
1196 
1197  ArgMinAxis0EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
1198 }
1199 
1200 BOOST_AUTO_TEST_CASE(RefArgMaxAxis1Test)
1201 {
1202  ArgMaxAxis1EndToEnd<armnn::DataType::Float32>(defaultBackends);
1203 }
1204 
1205 BOOST_AUTO_TEST_CASE(RefArgMaxAxis1Uint8Test)
1206 {
1207  ArgMaxAxis1EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
1208 }
1209 
1210 BOOST_AUTO_TEST_CASE(RefArgMinAxis1Test)
1211 {
1212  ArgMinAxis1EndToEnd<armnn::DataType::Float32>(defaultBackends);
1213 }
1214 
1215 BOOST_AUTO_TEST_CASE(RefArgMinAxis1Uint8Test)
1216 {
1217 
1218  ArgMinAxis1EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
1219 }
1220 
1221 BOOST_AUTO_TEST_CASE(RefArgMaxAxis2Test)
1222 {
1223  ArgMaxAxis2EndToEnd<armnn::DataType::Float32>(defaultBackends);
1224 }
1225 
1226 BOOST_AUTO_TEST_CASE(RefArgMaxAxis2Uint8Test)
1227 {
1228  ArgMaxAxis2EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
1229 }
1230 
1231 BOOST_AUTO_TEST_CASE(RefArgMinAxis2Test)
1232 {
1233  ArgMinAxis2EndToEnd<armnn::DataType::Float32>(defaultBackends);
1234 }
1235 
1236 BOOST_AUTO_TEST_CASE(RefArgMinAxis2Uint8Test)
1237 {
1238 
1239  ArgMinAxis2EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
1240 }
1241 
1242 BOOST_AUTO_TEST_CASE(RefArgMaxAxis3Test)
1243 {
1244  ArgMaxAxis3EndToEnd<armnn::DataType::Float32>(defaultBackends);
1245 }
1246 
1247 BOOST_AUTO_TEST_CASE(RefArgMaxAxis3Uint8Test)
1248 {
1249  ArgMaxAxis3EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
1250 }
1251 
1252 BOOST_AUTO_TEST_CASE(RefArgMinAxis3Test)
1253 {
1254  ArgMinAxis3EndToEnd<armnn::DataType::Float32>(defaultBackends);
1255 }
1256 
1257 BOOST_AUTO_TEST_CASE(RefArgMinAxis3Uint8Test)
1258 {
1259 
1260  ArgMinAxis3EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
1261 }
1262 
1263 BOOST_AUTO_TEST_CASE(RefQLstmEndToEndTest)
1264 {
1266 }
1267 
1268 BOOST_AUTO_TEST_CASE(RefRankEndToEndTest)
1269 {
1270  RankEndToEnd<armnn::DataType::Float32>(defaultBackends);
1271 }
1272 
1273 BOOST_AUTO_TEST_CASE(RefRankEndToEndTestFloat16)
1274 {
1275  RankEndToEnd<armnn::DataType::Float16>(defaultBackends);
1276 }
1277 
1278 BOOST_AUTO_TEST_CASE(RefRankEndToEndTestInt32)
1279 {
1280  RankEndToEnd<armnn::DataType::Signed32>(defaultBackends);
1281 }
1282 
1283 BOOST_AUTO_TEST_CASE(RefRankEndToEndTestQAsymmS8)
1284 {
1285  RankEndToEnd<armnn::DataType::QAsymmS8>(defaultBackends);
1286 }
1287 
1288 BOOST_AUTO_TEST_CASE(RefRankEndToEndTestQSymmS16)
1289 {
1290  RankEndToEnd<armnn::DataType::QSymmS16>(defaultBackends);
1291 }
1292 
1293 BOOST_AUTO_TEST_CASE(RefRankEndToEndTestQSymmS8)
1294 {
1295  RankEndToEnd<armnn::DataType::QSymmS8>(defaultBackends);
1296 }
1297 
1298 #if !defined(__ANDROID__)
1299 // Only run these tests on non Android platforms
1300 BOOST_AUTO_TEST_CASE(RefImportNonAlignedPointerTest)
1301 {
1302  ImportNonAlignedInputPointerTest(defaultBackends);
1303 }
1304 
1305 BOOST_AUTO_TEST_CASE(RefExportNonAlignedPointerTest)
1306 {
1307  ExportNonAlignedOutputPointerTest(defaultBackends);
1308 }
1309 
1310 BOOST_AUTO_TEST_CASE(RefImportAlignedPointerTest)
1311 {
1312  ImportAlignedPointerTest(defaultBackends);
1313 }
1314 
1315 BOOST_AUTO_TEST_CASE(RefImportOnlyWorkload)
1316 {
1317  ImportOnlyWorkload(defaultBackends);
1318 }
1319 
1320 BOOST_AUTO_TEST_CASE(RefExportOnlyWorkload)
1321 {
1322  ExportOnlyWorkload(defaultBackends);
1323 }
1324 
1325 BOOST_AUTO_TEST_CASE(RefImportAndExportWorkload)
1326 {
1327  ImportAndExportWorkload(defaultBackends);
1328 }
1329 
1330 BOOST_AUTO_TEST_CASE(RefExportOutputWithSeveralOutputSlotConnectionsTest)
1331 {
1332  ExportOutputWithSeveralOutputSlotConnectionsTest(defaultBackends);
1333 }
1334 
1335 BOOST_AUTO_TEST_CASE(RefStridedSliceInvalidSliceEndToEndTest)
1336 {
1337  StridedSliceInvalidSliceEndToEndTest(defaultBackends);
1338 }
1339 
1340 BOOST_AUTO_TEST_CASE(RefAsyncFP32StridedSlicedEndToEndTest)
1341 {
1342  armnn::experimental::StridedSlicedEndToEndTest<armnn::DataType::Float32>(defaultBackends);
1343 }
1344 
1345 BOOST_AUTO_TEST_CASE(RefAsyncFP32StridedSlicedMultiThreadedEndToEndTest)
1346 {
1347  armnn::experimental::StridedSlicedMultiThreadedEndToEndTest<armnn::DataType::Float32>(defaultBackends);
1348 }
1349 
1350 BOOST_AUTO_TEST_CASE(RefAsyncScheduledFP32StridedSlicedEndToEndTest)
1351 {
1352  armnn::experimental::AsyncScheduledStridedSlicedEndToEndTest<armnn::DataType::Float32>(defaultBackends);
1353 }
1354 
1355 BOOST_AUTO_TEST_CASE(RefAsyncScheduledStridedSlicedMultiThreadedEndToEndTest)
1356 {
1357  using namespace armnn::experimental;
1358  AsyncScheduledStridedSlicedMultiThreadedEndToEndTest<armnn::DataType::Float32>(defaultBackends);
1359 }
1360 #endif
1361 
BOOST_AUTO_TEST_SUITE(TensorflowLiteParser)
void SpaceToDepthNchwEndToEndTest1(const std::vector< armnn::BackendId > &defaultBackends)
static IRuntimePtr Create(const CreationOptions &options)
Definition: Runtime.cpp:37
Interface for a layer that is connectable to other layers via InputSlots and OutputSlots.
Definition: INetwork.hpp:62
CPU Execution: Reference C++ kernels.
void InstanceNormalizationNhwcEndToEndTest1(const std::vector< armnn::BackendId > &defaultBackends)
std::vector< armnn::BackendId > defaultBackends
void LogSoftmaxEndToEndTest(const std::vector< armnn::BackendId > &defaultBackends)
std::unique_ptr< IRuntime, void(*)(IRuntime *runtime)> IRuntimePtr
Definition: IRuntime.hpp:28
armnn::TensorInfo anchorsInfo({ 6, 4 }, armnn::DataType::Float32)
BOOST_AUTO_TEST_CASE(RefAbsEndToEndTestFloat32)
std::vector< std::pair< LayerBindingId, class ConstTensor > > InputTensors
Definition: Tensor.hpp:340
void InstanceNormalizationNchwEndToEndTest1(const std::vector< armnn::BackendId > &defaultBackends)
std::vector< float > boxEncodings({ 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f })
Copyright (c) 2021 ARM Limited and Contributors.
void QLstmEndToEnd(const std::vector< armnn::BackendId > &backends)
void SpaceToDepthNhwcEndToEndTest2(const std::vector< armnn::BackendId > &defaultBackends)
virtual void SetTensorInfo(const TensorInfo &tensorInfo)=0
void SpaceToDepthNhwcEndToEndTest1(const std::vector< armnn::BackendId > &defaultBackends)
A tensor defined by a TensorInfo (shape and data type) and a mutable backing store.
Definition: Tensor.hpp:306
void SpaceToDepthNchwEndToEndTest2(const std::vector< armnn::BackendId > &defaultBackends)
IOptimizedNetworkPtr Optimize(const INetwork &network, const std::vector< BackendId > &backendPreferences, const IDeviceSpec &deviceSpec, const OptimizerOptions &options=OptimizerOptions(), Optional< std::vector< std::string > &> messages=EmptyOptional())
Create an optimized version of the network.
Definition: Network.cpp:1568
std::vector< uint8_t > qBoxEncodings(boxEncodings.size(), 0)
int32_t GetQuantizationOffset() const
Definition: Tensor.cpp:469
float GetQuantizationScale() const
Definition: Tensor.cpp:452
int NetworkId
Definition: IRuntime.hpp:22
A tensor defined by a TensorInfo (shape and data type) and an immutable backing store.
Definition: Tensor.hpp:314
std::vector< std::pair< LayerBindingId, class Tensor > > OutputTensors
Definition: Tensor.hpp:341
std::unique_ptr< IOptimizedNetwork, void(*)(IOptimizedNetwork *network)> IOptimizedNetworkPtr
Definition: INetwork.hpp:174
void SetQuantizationScale(float scale)
Definition: Tensor.cpp:464
std::vector< uint8_t > qAnchors(anchors.size(), 0)
BOOST_AUTO_TEST_CASE(CheckConvolution2dLayer)
An ActivationDescriptor for the ActivationLayer.
Definition: Descriptors.hpp:25
min(a, max(b, input)) ReLu1 & ReLu6.
float m_A
Alpha upper bound value used by the activation functions. (BoundedReLu, Linear, TanH, Elu).
Definition: Descriptors.hpp:50
BOOST_AUTO_TEST_SUITE_END()
std::vector< float > scores({ 0.0f, 0.9f, 0.8f, 0.0f, 0.75f, 0.72f, 0.0f, 0.6f, 0.5f, 0.0f, 0.93f, 0.95f, 0.0f, 0.5f, 0.4f, 0.0f, 0.3f, 0.2f })
void QuantizeData(uint8_t *quant, const float *dequant, const TensorInfo &info)
std::vector< uint8_t > qScores(scores.size(), 0)
virtual const IInputSlot & GetInputSlot(unsigned int index) const =0
Get a const input slot handle by slot index.
armnn::TensorInfo scoresInfo({ 1, 6, 3 }, armnn::DataType::Float32)
virtual const IOutputSlot & GetOutputSlot(unsigned int index) const =0
Get the const output slot handle by slot index.
void InstanceNormalizationNhwcEndToEndTest2(const std::vector< armnn::BackendId > &defaultBackends)
void SetQuantizationOffset(int32_t offset)
Definition: Tensor.cpp:480
std::unique_ptr< INetwork, void(*)(INetwork *network)> INetworkPtr
Definition: INetwork.hpp:173
virtual int Connect(IInputSlot &destination)=0
static INetworkPtr Create(NetworkOptions networkOptions={})
Definition: Network.cpp:529
float m_B
Beta lower bound value used by the activation functions. (BoundedReLu, Linear, TanH).
Definition: Descriptors.hpp:52
A SoftmaxDescriptor for the SoftmaxLayer.
ActivationFunction m_Function
The activation function to use (Sigmoid, TanH, Linear, ReLu, BoundedReLu, SoftReLu, LeakyReLu, Abs, Sqrt, Square, Elu).
Definition: Descriptors.hpp:48
unsigned int GetNumElements() const
Definition: Tensor.hpp:192
void InstanceNormalizationNchwEndToEndTest2(const std::vector< armnn::BackendId > &defaultBackends)
std::vector< float > anchors({ 0.5f, 0.5f, 1.0f, 1.0f, 0.5f, 0.5f, 1.0f, 1.0f, 0.5f, 0.5f, 1.0f, 1.0f, 0.5f, 10.5f, 1.0f, 1.0f, 0.5f, 10.5f, 1.0f, 1.0f, 0.5f, 100.5f, 1.0f, 1.0f })