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