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