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