ArmNN
 20.11
NeonEndToEndTests.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 
24 
25 #include <boost/test/unit_test.hpp>
26 
27 BOOST_AUTO_TEST_SUITE(NeonEndToEnd)
28 
30 
31 // Abs
32 BOOST_AUTO_TEST_CASE(NeonAbsEndToEndTestFloat32)
33 {
34  std::vector<float> expectedOutput =
35  {
36  1.f, 1.f, 1.f, 1.f, 5.f, 5.f, 5.f, 5.f,
37  3.f, 3.f, 3.f, 3.f, 4.f, 4.f, 4.f, 4.f
38  };
39 
40  ElementwiseUnarySimpleEndToEnd<armnn::DataType::Float32>(defaultBackends,
41  UnaryOperation::Abs,
42  expectedOutput);
43 }
44 
45 // Constant
46 BOOST_AUTO_TEST_CASE(ConstantUsage_Neon_Float32)
47 {
48  BOOST_TEST(ConstantUsageFloat32Test(defaultBackends));
49 }
50 
51 #if defined(ARMNNREF_ENABLED)
52 
53 // This test unit needs the reference backend, it's not available if the reference backend is not built
54 
55 BOOST_AUTO_TEST_CASE(FallbackToCpuRef)
56 {
57  using namespace armnn;
58 
59  // Create runtime in which test will run and allow fallback to CpuRef.
61  IRuntimePtr runtime(IRuntime::Create(options));
62 
63  // Builds up the structure of the network.
65 
66  IConnectableLayer* input = net->AddInputLayer(0);
67 
68  // This layer configuration isn't supported by CpuAcc but we allow fallback to CpuRef so it shoud pass.
69  NormalizationDescriptor descriptor;
70  IConnectableLayer* pooling = net->AddNormalizationLayer(descriptor);
71 
72  IConnectableLayer* output = net->AddOutputLayer(0);
73 
74  input->GetOutputSlot(0).Connect(pooling->GetInputSlot(0));
75  pooling->GetOutputSlot(0).Connect(output->GetInputSlot(0));
76 
77  input->GetOutputSlot(0).SetTensorInfo(TensorInfo({ 1, 1, 4, 4 }, DataType::Float32));
78  pooling->GetOutputSlot(0).SetTensorInfo(TensorInfo({ 1, 1, 4, 4 }, DataType::Float32));
79 
80  // optimize the network
81  std::vector<BackendId> backends = {Compute::CpuAcc, Compute::CpuRef};
82  IOptimizedNetworkPtr optNet = Optimize(*net, backends, runtime->GetDeviceSpec());
83 
84  // Load it into the runtime. It should pass.
85  NetworkId netId;
86  BOOST_TEST(runtime->LoadNetwork(netId, std::move(optNet)) == Status::Success);
87 }
88 
89 #endif
90 
91 BOOST_AUTO_TEST_CASE(NeonGreaterSimpleEndToEndTest)
92 {
93  const std::vector<uint8_t> expectedOutput({ 0, 0, 0, 0, 1, 1, 1, 1,
94  0, 0, 0, 0, 0, 0, 0, 0 });
95 
96  ComparisonSimpleEndToEnd<armnn::DataType::Float32>(defaultBackends,
98  expectedOutput);
99 }
100 
101 BOOST_AUTO_TEST_CASE(NeonGreaterSimpleEndToEndUint8Test)
102 {
103  const std::vector<uint8_t> expectedOutput({ 0, 0, 0, 0, 1, 1, 1, 1,
104  0, 0, 0, 0, 0, 0, 0, 0 });
105 
106  ComparisonSimpleEndToEnd<armnn::DataType::QAsymmU8>(defaultBackends,
108  expectedOutput);
109 }
110 
111 BOOST_AUTO_TEST_CASE(NeonGreaterBroadcastEndToEndTest)
112 {
113  const std::vector<uint8_t> expectedOutput({ 0, 1, 0, 0, 0, 1,
114  1, 1, 1, 1, 1, 1 });
115 
116  ComparisonBroadcastEndToEnd<armnn::DataType::Float32>(defaultBackends,
118  expectedOutput);
119 }
120 
121 BOOST_AUTO_TEST_CASE(NeonGreaterBroadcastEndToEndUint8Test)
122 {
123  const std::vector<uint8_t> expectedOutput({ 0, 1, 0, 0, 0, 1,
124  1, 1, 1, 1, 1, 1 });
125 
126  ComparisonBroadcastEndToEnd<armnn::DataType::QAsymmU8>(defaultBackends,
128  expectedOutput);
129 }
130 
131 BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim0Test)
132 {
133  ConcatDim0EndToEnd<armnn::DataType::Float32>(defaultBackends);
134 }
135 
136 BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim0Uint8Test)
137 {
138  ConcatDim0EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
139 }
140 
141 BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim1Test)
142 {
143  ConcatDim1EndToEnd<armnn::DataType::Float32>(defaultBackends);
144 }
145 
146 BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim1Uint8Test)
147 {
148  ConcatDim1EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
149 }
150 
151 BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim3Test)
152 {
153  ConcatDim3EndToEnd<armnn::DataType::Float32>(defaultBackends);
154 }
155 
156 BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim3Uint8Test)
157 {
158  ConcatDim3EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
159 }
160 
161 // DepthToSpace
162 BOOST_AUTO_TEST_CASE(DephtToSpaceEndToEndNchwFloat32)
163 {
164  DepthToSpaceEndToEnd<armnn::DataType::Float32>(defaultBackends, armnn::DataLayout::NCHW);
165 }
166 
167 BOOST_AUTO_TEST_CASE(DephtToSpaceEndToEndNchwFloat16)
168 {
169  DepthToSpaceEndToEnd<armnn::DataType::Float16>(defaultBackends, armnn::DataLayout::NCHW);
170 }
171 
172 BOOST_AUTO_TEST_CASE(DephtToSpaceEndToEndNchwUint8)
173 {
174  DepthToSpaceEndToEnd<armnn::DataType::QAsymmU8>(defaultBackends, armnn::DataLayout::NCHW);
175 }
176 
177 BOOST_AUTO_TEST_CASE(DephtToSpaceEndToEndNchwInt16)
178 {
179  DepthToSpaceEndToEnd<armnn::DataType::QSymmS16>(defaultBackends, armnn::DataLayout::NCHW);
180 }
181 
182 BOOST_AUTO_TEST_CASE(DephtToSpaceEndToEndNhwcFloat32)
183 {
184  DepthToSpaceEndToEnd<armnn::DataType::Float32>(defaultBackends, armnn::DataLayout::NHWC);
185 }
186 
187 BOOST_AUTO_TEST_CASE(DephtToSpaceEndToEndNhwcFloat16)
188 {
189  DepthToSpaceEndToEnd<armnn::DataType::Float16>(defaultBackends, armnn::DataLayout::NHWC);
190 }
191 
192 BOOST_AUTO_TEST_CASE(DephtToSpaceEndToEndNhwcUint8)
193 {
194  DepthToSpaceEndToEnd<armnn::DataType::QAsymmU8>(defaultBackends, armnn::DataLayout::NHWC);
195 }
196 
197 BOOST_AUTO_TEST_CASE(DephtToSpaceEndToEndNhwcInt16)
198 {
199  DepthToSpaceEndToEnd<armnn::DataType::QSymmS16>(defaultBackends, armnn::DataLayout::NHWC);
200 }
201 
202 // Dequantize
203 BOOST_AUTO_TEST_CASE(DequantizeEndToEndSimpleTest)
204 {
205  DequantizeEndToEndSimple<armnn::DataType::QAsymmU8>(defaultBackends);
206 }
207 
208 BOOST_AUTO_TEST_CASE(DequantizeEndToEndOffsetTest)
209 {
210  DequantizeEndToEndOffset<armnn::DataType::QAsymmU8>(defaultBackends);
211 }
212 
213 BOOST_AUTO_TEST_CASE(NeonEluEndToEndTestFloat32)
214 {
215  EluEndToEndTest<armnn::DataType::Float32>(defaultBackends);
216 }
217 
218 BOOST_AUTO_TEST_CASE(NeonEluEndToEndTestFloat16)
219 {
220  EluEndToEndTest<armnn::DataType::Float16>(defaultBackends);
221 }
222 
223 // HardSwish
224 BOOST_AUTO_TEST_CASE(NeonHardSwishEndToEndTestFloat32)
225 {
226  HardSwishEndToEndTest<armnn::DataType::Float32>(defaultBackends);
227 }
228 
229 BOOST_AUTO_TEST_CASE(NeonHardSwishEndToEndTestFloat16)
230 {
231  HardSwishEndToEndTest<armnn::DataType::Float16>(defaultBackends);
232 }
233 
234 BOOST_AUTO_TEST_CASE(NeonHardSwishEndToEndTestQAsymmS8)
235 {
236  HardSwishEndToEndTest<armnn::DataType::QAsymmS8>(defaultBackends);
237 }
238 
239 BOOST_AUTO_TEST_CASE(NeonHardSwishEndToEndTestQAsymmU8)
240 {
241  HardSwishEndToEndTest<armnn::DataType::QAsymmU8>(defaultBackends);
242 }
243 
244 BOOST_AUTO_TEST_CASE(NeonPreluEndToEndFloat32Test)
245 {
246  PreluEndToEndNegativeTest<armnn::DataType::Float32>(defaultBackends);
247 }
248 
249 BOOST_AUTO_TEST_CASE(NeonPreluEndToEndTestUint8Test)
250 {
251  PreluEndToEndPositiveTest<armnn::DataType::QAsymmU8>(defaultBackends);
252 }
253 
254 BOOST_AUTO_TEST_CASE(NeonSpaceToDepthNhwcEndToEndTest1)
255 {
257 }
258 
259 BOOST_AUTO_TEST_CASE(NeonSpaceToDepthNchwEndToEndTest1)
260 {
262 }
263 
264 BOOST_AUTO_TEST_CASE(NeonSpaceToDepthNhwcEndToEndTest2)
265 {
267 }
268 
269 BOOST_AUTO_TEST_CASE(NeonSpaceToDepthNchwEndToEndTest2)
270 {
272 }
273 
274 BOOST_AUTO_TEST_CASE(NeonSplitter1dEndToEndTest)
275 {
276  Splitter1dEndToEnd<armnn::DataType::Float32>(defaultBackends);
277 }
278 
279 BOOST_AUTO_TEST_CASE(NeonSplitter1dEndToEndUint8Test)
280 {
281  Splitter1dEndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
282 }
283 
284 BOOST_AUTO_TEST_CASE(NeonSplitter2dDim0EndToEndTest)
285 {
286  Splitter2dDim0EndToEnd<armnn::DataType::Float32>(defaultBackends);
287 }
288 
289 BOOST_AUTO_TEST_CASE(NeonSplitter2dDim1EndToEndTest)
290 {
291  Splitter2dDim1EndToEnd<armnn::DataType::Float32>(defaultBackends);
292 }
293 
294 BOOST_AUTO_TEST_CASE(NeonSplitter2dDim0EndToEndUint8Test)
295 {
296  Splitter2dDim0EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
297 }
298 
299 BOOST_AUTO_TEST_CASE(NeonSplitter2dDim1EndToEndUint8Test)
300 {
301  Splitter2dDim1EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
302 }
303 
304 BOOST_AUTO_TEST_CASE(NeonSplitter3dDim0EndToEndTest)
305 {
306  Splitter3dDim0EndToEnd<armnn::DataType::Float32>(defaultBackends);
307 }
308 
309 BOOST_AUTO_TEST_CASE(NeonSplitter3dDim1EndToEndTest)
310 {
311  Splitter3dDim1EndToEnd<armnn::DataType::Float32>(defaultBackends);
312 }
313 
314 BOOST_AUTO_TEST_CASE(NeonSplitter3dDim2EndToEndTest)
315 {
316  Splitter3dDim2EndToEnd<armnn::DataType::Float32>(defaultBackends);
317 }
318 
319 BOOST_AUTO_TEST_CASE(NeonSplitter3dDim0EndToEndUint8Test)
320 {
321  Splitter3dDim0EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
322 }
323 
324 BOOST_AUTO_TEST_CASE(NeonSplitter3dDim1EndToEndUint8Test)
325 {
326  Splitter3dDim1EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
327 }
328 
329 BOOST_AUTO_TEST_CASE(NeonSplitter3dDim2EndToEndUint8Test)
330 {
331  Splitter3dDim2EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
332 }
333 
334 BOOST_AUTO_TEST_CASE(NeonSplitter4dDim0EndToEndTest)
335 {
336  Splitter4dDim0EndToEnd<armnn::DataType::Float32>(defaultBackends);
337 }
338 
339 BOOST_AUTO_TEST_CASE(NeonSplitter4dDim1EndToEndTest)
340 {
341  Splitter4dDim1EndToEnd<armnn::DataType::Float32>(defaultBackends);
342 }
343 
344 BOOST_AUTO_TEST_CASE(NeonSplitter4dDim2EndToEndTest)
345 {
346  Splitter4dDim2EndToEnd<armnn::DataType::Float32>(defaultBackends);
347 }
348 
349 BOOST_AUTO_TEST_CASE(NeonSplitter4dDim3EndToEndTest)
350 {
351  Splitter4dDim3EndToEnd<armnn::DataType::Float32>(defaultBackends);
352 }
353 
354 BOOST_AUTO_TEST_CASE(NeonSplitter4dDim0EndToEndUint8Test)
355 {
356  Splitter4dDim0EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
357 }
358 
359 BOOST_AUTO_TEST_CASE(NeonSplitter4dDim1EndToEndUint8Test)
360 {
361  Splitter4dDim1EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
362 }
363 
364 BOOST_AUTO_TEST_CASE(NeonSplitter4dDim2EndToEndUint8Test)
365 {
366  Splitter4dDim2EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
367 }
368 
369 BOOST_AUTO_TEST_CASE(NeonSplitter4dDim3EndToEndUint8Test)
370 {
371  Splitter4dDim3EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
372 }
373 
374 BOOST_AUTO_TEST_CASE(NeonQuantizedLstmEndToEndTest)
375 {
377 }
378 
379 BOOST_AUTO_TEST_CASE(NeonTransposeConvolution2dEndToEndFloatNchwTest)
380 {
381  TransposeConvolution2dEndToEnd<armnn::DataType::Float32, armnn::DataType::Float32>(
383 }
384 
385 BOOST_AUTO_TEST_CASE(NeonTransposeConvolution2dEndToEndUint8NchwTest)
386 {
387  TransposeConvolution2dEndToEnd<armnn::DataType::QAsymmU8, armnn::DataType::Signed32>(
389 }
390 
391 BOOST_AUTO_TEST_CASE(NeonTransposeConvolution2dEndToEndFloatNhwcTest)
392 {
393  TransposeConvolution2dEndToEnd<armnn::DataType::Float32, armnn::DataType::Float32>(
395 }
396 
397 BOOST_AUTO_TEST_CASE(NeonTransposeConvolution2dEndToEndUint8NhwcTest)
398 {
399  TransposeConvolution2dEndToEnd<armnn::DataType::QAsymmU8, armnn::DataType::Signed32>(
401 }
402 
403 BOOST_AUTO_TEST_CASE(NeonImportNonAlignedInputPointerTest)
404 {
405  ImportNonAlignedInputPointerTest(defaultBackends);
406 }
407 
408 BOOST_AUTO_TEST_CASE(NeonExportNonAlignedOutputPointerTest)
409 {
410  ExportNonAlignedOutputPointerTest(defaultBackends);
411 }
412 
413 BOOST_AUTO_TEST_CASE(NeonImportAlignedPointerTest)
414 {
415  ImportAlignedPointerTest(defaultBackends);
416 }
417 
418 BOOST_AUTO_TEST_CASE(NeonImportOnlyWorkload)
419 {
420  ImportOnlyWorkload(defaultBackends);
421 }
422 
423 BOOST_AUTO_TEST_CASE(NeonExportOnlyWorkload)
424 {
425  ExportOnlyWorkload(defaultBackends);
426 }
427 
428 BOOST_AUTO_TEST_CASE(NeonImportAndExportWorkload)
429 {
430  ImportAndExportWorkload(defaultBackends);
431 }
432 
433 BOOST_AUTO_TEST_CASE(NeonExportOutputWithSeveralOutputSlotConnectionsTest)
434 {
435  ExportOutputWithSeveralOutputSlotConnectionsTest(defaultBackends);
436 }
437 
438 // InstanceNormalization
439 BOOST_AUTO_TEST_CASE(NeonInstanceNormalizationNchwEndToEndTest1)
440 {
442 }
443 
444 BOOST_AUTO_TEST_CASE(NeonInstanceNormalizationNchwEndToEndTest2)
445 {
447 }
448 
449 // Fill
450 BOOST_AUTO_TEST_CASE(NeonFillEndToEndTest)
451 {
452  FillEndToEnd<armnn::DataType::Float32>(defaultBackends);
453 }
454 
455 BOOST_AUTO_TEST_CASE(RefFillEndToEndTestFloat16)
456 {
457  FillEndToEnd<armnn::DataType::Float16>(defaultBackends);
458 }
459 
460 BOOST_AUTO_TEST_CASE(NeonFillEndToEndTestInt32)
461 {
462  FillEndToEnd<armnn::DataType::Signed32>(defaultBackends);
463 }
464 
465 // ArgMinMax
466 BOOST_AUTO_TEST_CASE(NeonArgMaxSimpleTest)
467 {
468  ArgMaxEndToEndSimple<armnn::DataType::Float32>(defaultBackends);
469 }
470 
471 BOOST_AUTO_TEST_CASE(NeonArgMinSimpleTest)
472 {
473  ArgMinEndToEndSimple<armnn::DataType::Float32>(defaultBackends);
474 }
475 
476 BOOST_AUTO_TEST_CASE(NeonArgMaxAxis0Test)
477 {
478  ArgMaxAxis0EndToEnd<armnn::DataType::Float32>(defaultBackends);
479 }
480 
481 BOOST_AUTO_TEST_CASE(NeonArgMinAxis0Test)
482 {
483  ArgMinAxis0EndToEnd<armnn::DataType::Float32>(defaultBackends);
484 }
485 
486 BOOST_AUTO_TEST_CASE(NeonArgMaxAxis1Test)
487 {
488  ArgMaxAxis1EndToEnd<armnn::DataType::Float32>(defaultBackends);
489 }
490 
491 BOOST_AUTO_TEST_CASE(NeonArgMinAxis1Test)
492 {
493  ArgMinAxis1EndToEnd<armnn::DataType::Float32>(defaultBackends);
494 }
495 
496 BOOST_AUTO_TEST_CASE(NeonArgMaxAxis2Test)
497 {
498  ArgMaxAxis2EndToEnd<armnn::DataType::Float32>(defaultBackends);
499 }
500 
501 BOOST_AUTO_TEST_CASE(NeonArgMinAxis2Test)
502 {
503  ArgMinAxis2EndToEnd<armnn::DataType::Float32>(defaultBackends);
504 }
505 
506 BOOST_AUTO_TEST_CASE(NeonArgMaxAxis3Test)
507 {
508  ArgMaxAxis3EndToEnd<armnn::DataType::Float32>(defaultBackends);
509 }
510 
511 BOOST_AUTO_TEST_CASE(NeonArgMinAxis3Test)
512 {
513  ArgMinAxis3EndToEnd<armnn::DataType::Float32>(defaultBackends);
514 }
515 
516 BOOST_AUTO_TEST_CASE(NeonArgMaxSimpleTestQuantisedAsymm8)
517 {
518  ArgMaxEndToEndSimple<armnn::DataType::QAsymmU8>(defaultBackends);
519 }
520 
521 BOOST_AUTO_TEST_CASE(NeonArgMinSimpleTestQuantisedAsymm8)
522 {
523  ArgMinEndToEndSimple<armnn::DataType::QAsymmU8>(defaultBackends);
524 }
525 
526 BOOST_AUTO_TEST_CASE(NeonArgMaxAxis0TestQuantisedAsymm8)
527 {
528  ArgMaxAxis0EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
529 }
530 
531 BOOST_AUTO_TEST_CASE(NeonArgMinAxis0TestQuantisedAsymm8)
532 {
533  ArgMinAxis0EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
534 }
535 
536 BOOST_AUTO_TEST_CASE(NeonArgMaxAxis1TestQuantisedAsymm8)
537 {
538  ArgMaxAxis1EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
539 }
540 
541 BOOST_AUTO_TEST_CASE(NeonArgMinAxis1TestQuantisedAsymm8)
542 {
543  ArgMinAxis1EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
544 }
545 
546 BOOST_AUTO_TEST_CASE(NeonArgMaxAxis2TestQuantisedAsymm8)
547 {
548  ArgMaxAxis2EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
549 }
550 
551 BOOST_AUTO_TEST_CASE(NeonArgMinAxis2TestQuantisedAsymm8)
552 {
553  ArgMinAxis2EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
554 }
555 
556 BOOST_AUTO_TEST_CASE(NeonArgMaxAxis3TestQuantisedAsymm8)
557 {
558  ArgMaxAxis3EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
559 }
560 
561 BOOST_AUTO_TEST_CASE(NeonArgMinAxis3TestQuantisedAsymm8)
562 {
563  ArgMinAxis3EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
564 }
565 
566 BOOST_AUTO_TEST_CASE(NeonStridedSliceInvalidSliceEndToEndTest)
567 {
568  StridedSliceInvalidSliceEndToEndTest(defaultBackends);
569 }
570 
571 BOOST_AUTO_TEST_CASE(NeonDetectionPostProcessRegularNmsTest, * boost::unit_test::disabled())
572 {
573  std::vector<float> boxEncodings({
574  0.0f, 0.0f, 0.0f, 0.0f,
575  0.0f, 1.0f, 0.0f, 0.0f,
576  0.0f, -1.0f, 0.0f, 0.0f,
577  0.0f, 0.0f, 0.0f, 0.0f,
578  0.0f, 1.0f, 0.0f, 0.0f,
579  0.0f, 0.0f, 0.0f, 0.0f
580  });
581  std::vector<float> scores({
582  0.0f, 0.9f, 0.8f,
583  0.0f, 0.75f, 0.72f,
584  0.0f, 0.6f, 0.5f,
585  0.0f, 0.93f, 0.95f,
586  0.0f, 0.5f, 0.4f,
587  0.0f, 0.3f, 0.2f
588  });
589  std::vector<float> anchors({
590  0.5f, 0.5f, 1.0f, 1.0f,
591  0.5f, 0.5f, 1.0f, 1.0f,
592  0.5f, 0.5f, 1.0f, 1.0f,
593  0.5f, 10.5f, 1.0f, 1.0f,
594  0.5f, 10.5f, 1.0f, 1.0f,
595  0.5f, 100.5f, 1.0f, 1.0f
596  });
597  DetectionPostProcessRegularNmsEndToEnd<armnn::DataType::Float32>(defaultBackends, boxEncodings, scores, anchors);
598 }
599 
600 inline void QuantizeData(uint8_t* quant, const float* dequant, const TensorInfo& info)
601 {
602  for (size_t i = 0; i < info.GetNumElements(); i++)
603  {
604  quant[i] = armnn::Quantize<uint8_t>(dequant[i], info.GetQuantizationScale(), info.GetQuantizationOffset());
605  }
606 }
607 
608 BOOST_AUTO_TEST_CASE(NeonDetectionPostProcessRegularNmsUint8Test, * boost::unit_test::disabled())
609 {
610  armnn::TensorInfo boxEncodingsInfo({ 1, 6, 4 }, armnn::DataType::Float32);
613 
614  boxEncodingsInfo.SetQuantizationScale(1.0f);
615  boxEncodingsInfo.SetQuantizationOffset(1);
620 
621  std::vector<float> boxEncodings({
622  0.0f, 0.0f, 0.0f, 0.0f,
623  0.0f, 1.0f, 0.0f, 0.0f,
624  0.0f, -1.0f, 0.0f, 0.0f,
625  0.0f, 0.0f, 0.0f, 0.0f,
626  0.0f, 1.0f, 0.0f, 0.0f,
627  0.0f, 0.0f, 0.0f, 0.0f
628  });
629  std::vector<float> scores({
630  0.0f, 0.9f, 0.8f,
631  0.0f, 0.75f, 0.72f,
632  0.0f, 0.6f, 0.5f,
633  0.0f, 0.93f, 0.95f,
634  0.0f, 0.5f, 0.4f,
635  0.0f, 0.3f, 0.2f
636  });
637  std::vector<float> anchors({
638  0.5f, 0.5f, 1.0f, 1.0f,
639  0.5f, 0.5f, 1.0f, 1.0f,
640  0.5f, 0.5f, 1.0f, 1.0f,
641  0.5f, 10.5f, 1.0f, 1.0f,
642  0.5f, 10.5f, 1.0f, 1.0f,
643  0.5f, 100.5f, 1.0f, 1.0f
644  });
645 
646  std::vector<uint8_t> qBoxEncodings(boxEncodings.size(), 0);
647  std::vector<uint8_t> qScores(scores.size(), 0);
648  std::vector<uint8_t> qAnchors(anchors.size(), 0);
649  QuantizeData(qBoxEncodings.data(), boxEncodings.data(), boxEncodingsInfo);
650  QuantizeData(qScores.data(), scores.data(), scoresInfo);
651  QuantizeData(qAnchors.data(), anchors.data(), anchorsInfo);
652  DetectionPostProcessRegularNmsEndToEnd<armnn::DataType::QAsymmU8>(defaultBackends, qBoxEncodings,
653  qScores, qAnchors,
654  1.0f, 1, 0.01f, 0, 0.5f, 0);
655 }
656 
657 BOOST_AUTO_TEST_CASE(NeonDetectionPostProcessFastNmsTest, * boost::unit_test::disabled())
658 {
659  std::vector<float> boxEncodings({
660  0.0f, 0.0f, 0.0f, 0.0f,
661  0.0f, 1.0f, 0.0f, 0.0f,
662  0.0f, -1.0f, 0.0f, 0.0f,
663  0.0f, 0.0f, 0.0f, 0.0f,
664  0.0f, 1.0f, 0.0f, 0.0f,
665  0.0f, 0.0f, 0.0f, 0.0f
666  });
667  std::vector<float> scores({
668  0.0f, 0.9f, 0.8f,
669  0.0f, 0.75f, 0.72f,
670  0.0f, 0.6f, 0.5f,
671  0.0f, 0.93f, 0.95f,
672  0.0f, 0.5f, 0.4f,
673  0.0f, 0.3f, 0.2f
674  });
675  std::vector<float> anchors({
676  0.5f, 0.5f, 1.0f, 1.0f,
677  0.5f, 0.5f, 1.0f, 1.0f,
678  0.5f, 0.5f, 1.0f, 1.0f,
679  0.5f, 10.5f, 1.0f, 1.0f,
680  0.5f, 10.5f, 1.0f, 1.0f,
681  0.5f, 100.5f, 1.0f, 1.0f
682  });
683  DetectionPostProcessFastNmsEndToEnd<armnn::DataType::Float32>(defaultBackends, boxEncodings, scores, anchors);
684 }
685 
686 BOOST_AUTO_TEST_CASE(NeonDetectionPostProcessFastNmsUint8Test, * boost::unit_test::disabled())
687 {
688  armnn::TensorInfo boxEncodingsInfo({ 1, 6, 4 }, armnn::DataType::Float32);
691 
692  boxEncodingsInfo.SetQuantizationScale(1.0f);
693  boxEncodingsInfo.SetQuantizationOffset(1);
698 
699  std::vector<float> boxEncodings({
700  0.0f, 0.0f, 0.0f, 0.0f,
701  0.0f, 1.0f, 0.0f, 0.0f,
702  0.0f, -1.0f, 0.0f, 0.0f,
703  0.0f, 0.0f, 0.0f, 0.0f,
704  0.0f, 1.0f, 0.0f, 0.0f,
705  0.0f, 0.0f, 0.0f, 0.0f
706  });
707  std::vector<float> scores({
708  0.0f, 0.9f, 0.8f,
709  0.0f, 0.75f, 0.72f,
710  0.0f, 0.6f, 0.5f,
711  0.0f, 0.93f, 0.95f,
712  0.0f, 0.5f, 0.4f,
713  0.0f, 0.3f, 0.2f
714  });
715  std::vector<float> anchors({
716  0.5f, 0.5f, 1.0f, 1.0f,
717  0.5f, 0.5f, 1.0f, 1.0f,
718  0.5f, 0.5f, 1.0f, 1.0f,
719  0.5f, 10.5f, 1.0f, 1.0f,
720  0.5f, 10.5f, 1.0f, 1.0f,
721  0.5f, 100.5f, 1.0f, 1.0f
722  });
723 
724  std::vector<uint8_t> qBoxEncodings(boxEncodings.size(), 0);
725  std::vector<uint8_t> qScores(scores.size(), 0);
726  std::vector<uint8_t> qAnchors(anchors.size(), 0);
727  QuantizeData(qBoxEncodings.data(), boxEncodings.data(), boxEncodingsInfo);
728  QuantizeData(qScores.data(), scores.data(), scoresInfo);
729  QuantizeData(qAnchors.data(), anchors.data(), anchorsInfo);
730  DetectionPostProcessFastNmsEndToEnd<armnn::DataType::QAsymmU8>(defaultBackends, qBoxEncodings,
731  qScores, qAnchors,
732  1.0f, 1, 0.01f, 0, 0.5f, 0);
733 }
734 
735 BOOST_AUTO_TEST_CASE(NeonQLstmEndToEndTest)
736 {
738 }
739 
BOOST_AUTO_TEST_SUITE(TensorflowLiteParser)
void SpaceToDepthNchwEndToEndTest1(const std::vector< armnn::BackendId > &defaultBackends)
static IRuntimePtr Create(const CreationOptions &options)
Definition: Runtime.cpp:32
Interface for a layer that is connectable to other layers via InputSlots and OutputSlots.
Definition: INetwork.hpp:61
CPU Execution: Reference C++ kernels.
std::unique_ptr< IRuntime, void(*)(IRuntime *runtime)> IRuntimePtr
Definition: IRuntime.hpp:25
armnn::TensorInfo anchorsInfo({ 6, 4 }, armnn::DataType::Float32)
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) 2020 ARM Limited.
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)
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:1011
std::vector< uint8_t > qBoxEncodings(boxEncodings.size(), 0)
int32_t GetQuantizationOffset() const
Definition: Tensor.cpp:469
float GetQuantizationScale() const
Definition: Tensor.cpp:452
std::unique_ptr< IOptimizedNetwork, void(*)(IOptimizedNetwork *network)> IOptimizedNetworkPtr
Definition: INetwork.hpp:600
void SetQuantizationScale(float scale)
Definition: Tensor.cpp:464
std::vector< uint8_t > qAnchors(anchors.size(), 0)
BOOST_AUTO_TEST_CASE(CheckConvolution2dLayer)
BOOST_AUTO_TEST_SUITE_END()
void QuantizedLstmEndToEnd(const std::vector< armnn::BackendId > &backends)
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 })
std::vector< armnn::BackendId > defaultBackends
CPU Execution: NEON: ArmCompute.
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)
void QuantizeData(uint8_t *quant, const float *dequant, const TensorInfo &info)
virtual const IOutputSlot & GetOutputSlot(unsigned int index) const =0
Get the const output slot handle by slot index.
void SetQuantizationOffset(int32_t offset)
Definition: Tensor.cpp:480
std::unique_ptr< INetwork, void(*)(INetwork *network)> INetworkPtr
Definition: INetwork.hpp:101
virtual int Connect(IInputSlot &destination)=0
A NormalizationDescriptor for the NormalizationLayer.
BOOST_AUTO_TEST_CASE(NeonAbsEndToEndTestFloat32)
static INetworkPtr Create(NetworkOptions networkOptions={})
Definition: Network.cpp:46
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 })