2 // Copyright © 2017 Arm Ltd. All rights reserved.
3 // SPDX-License-Identifier: MIT
6 #include <backendsCommon/test/EndToEndTestImpl.hpp>
8 #include <backendsCommon/test/ActivationEndToEndTestImpl.hpp>
9 #include <backendsCommon/test/ArgMinMaxEndToEndTestImpl.hpp>
10 #include <backendsCommon/test/ComparisonEndToEndTestImpl.hpp>
11 #include <backendsCommon/test/ConcatEndToEndTestImpl.hpp>
12 #include <backendsCommon/test/DepthToSpaceEndToEndTestImpl.hpp>
13 #include <backendsCommon/test/DequantizeEndToEndTestImpl.hpp>
14 #include <backendsCommon/test/DetectionPostProcessEndToEndTestImpl.hpp>
15 #include <backendsCommon/test/ElementwiseUnaryEndToEndTestImpl.hpp>
16 #include <backendsCommon/test/InstanceNormalizationEndToEndTestImpl.hpp>
17 #include <backendsCommon/test/PreluEndToEndTestImpl.hpp>
18 #include <backendsCommon/test/QLstmEndToEndTestImpl.hpp>
19 #include <backendsCommon/test/QuantizedLstmEndToEndTestImpl.hpp>
20 #include <backendsCommon/test/SpaceToDepthEndToEndTestImpl.hpp>
21 #include <backendsCommon/test/SplitterEndToEndTestImpl.hpp>
22 #include <backendsCommon/test/TransposeConvolution2dEndToEndTestImpl.hpp>
24 #include <boost/test/unit_test.hpp>
26 BOOST_AUTO_TEST_SUITE(NeonEndToEnd)
28 std::vector<armnn::BackendId> defaultBackends = {armnn::Compute::CpuAcc};
31 BOOST_AUTO_TEST_CASE(NeonAbsEndToEndTestFloat32)
33 std::vector<float> expectedOutput =
35 1.f, 1.f, 1.f, 1.f, 5.f, 5.f, 5.f, 5.f,
36 3.f, 3.f, 3.f, 3.f, 4.f, 4.f, 4.f, 4.f
39 ElementwiseUnarySimpleEndToEnd<armnn::DataType::Float32>(defaultBackends,
45 BOOST_AUTO_TEST_CASE(ConstantUsage_Neon_Float32)
47 BOOST_TEST(ConstantUsageFloat32Test(defaultBackends));
50 #if defined(ARMNNREF_ENABLED)
52 // This test unit needs the reference backend, it's not available if the reference backend is not built
54 BOOST_AUTO_TEST_CASE(FallbackToCpuRef)
56 using namespace armnn;
58 // Create runtime in which test will run and allow fallback to CpuRef.
59 IRuntime::CreationOptions options;
60 IRuntimePtr runtime(IRuntime::Create(options));
62 // Builds up the structure of the network.
63 INetworkPtr net(INetwork::Create());
65 IConnectableLayer* input = net->AddInputLayer(0);
67 // This layer configuration isn't supported by CpuAcc but we allow fallback to CpuRef so it shoud pass.
68 NormalizationDescriptor descriptor;
69 IConnectableLayer* pooling = net->AddNormalizationLayer(descriptor);
71 IConnectableLayer* output = net->AddOutputLayer(0);
73 input->GetOutputSlot(0).Connect(pooling->GetInputSlot(0));
74 pooling->GetOutputSlot(0).Connect(output->GetInputSlot(0));
76 input->GetOutputSlot(0).SetTensorInfo(TensorInfo({ 1, 1, 4, 4 }, DataType::Float32));
77 pooling->GetOutputSlot(0).SetTensorInfo(TensorInfo({ 1, 1, 4, 4 }, DataType::Float32));
79 // optimize the network
80 std::vector<BackendId> backends = {Compute::CpuAcc, Compute::CpuRef};
81 IOptimizedNetworkPtr optNet = Optimize(*net, backends, runtime->GetDeviceSpec());
83 // Load it into the runtime. It should pass.
85 BOOST_TEST(runtime->LoadNetwork(netId, std::move(optNet)) == Status::Success);
90 BOOST_AUTO_TEST_CASE(NeonGreaterSimpleEndToEndTest)
92 const std::vector<uint8_t> expectedOutput({ 0, 0, 0, 0, 1, 1, 1, 1,
93 0, 0, 0, 0, 0, 0, 0, 0 });
95 ComparisonSimpleEndToEnd<armnn::DataType::Float32>(defaultBackends,
96 ComparisonOperation::Greater,
100 BOOST_AUTO_TEST_CASE(NeonGreaterSimpleEndToEndUint8Test)
102 const std::vector<uint8_t> expectedOutput({ 0, 0, 0, 0, 1, 1, 1, 1,
103 0, 0, 0, 0, 0, 0, 0, 0 });
105 ComparisonSimpleEndToEnd<armnn::DataType::QAsymmU8>(defaultBackends,
106 ComparisonOperation::Greater,
110 BOOST_AUTO_TEST_CASE(NeonGreaterBroadcastEndToEndTest)
112 const std::vector<uint8_t> expectedOutput({ 0, 1, 0, 0, 0, 1,
115 ComparisonBroadcastEndToEnd<armnn::DataType::Float32>(defaultBackends,
116 ComparisonOperation::Greater,
120 BOOST_AUTO_TEST_CASE(NeonGreaterBroadcastEndToEndUint8Test)
122 const std::vector<uint8_t> expectedOutput({ 0, 1, 0, 0, 0, 1,
125 ComparisonBroadcastEndToEnd<armnn::DataType::QAsymmU8>(defaultBackends,
126 ComparisonOperation::Greater,
130 BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim0Test)
132 ConcatDim0EndToEnd<armnn::DataType::Float32>(defaultBackends);
135 BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim0Uint8Test)
137 ConcatDim0EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
140 BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim1Test)
142 ConcatDim1EndToEnd<armnn::DataType::Float32>(defaultBackends);
145 BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim1Uint8Test)
147 ConcatDim1EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
150 BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim3Test)
152 ConcatDim3EndToEnd<armnn::DataType::Float32>(defaultBackends);
155 BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim3Uint8Test)
157 ConcatDim3EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
161 BOOST_AUTO_TEST_CASE(DephtToSpaceEndToEndNchwFloat32)
163 DepthToSpaceEndToEnd<armnn::DataType::Float32>(defaultBackends, armnn::DataLayout::NCHW);
166 BOOST_AUTO_TEST_CASE(DephtToSpaceEndToEndNchwFloat16)
168 DepthToSpaceEndToEnd<armnn::DataType::Float16>(defaultBackends, armnn::DataLayout::NCHW);
171 BOOST_AUTO_TEST_CASE(DephtToSpaceEndToEndNchwUint8)
173 DepthToSpaceEndToEnd<armnn::DataType::QAsymmU8>(defaultBackends, armnn::DataLayout::NCHW);
176 BOOST_AUTO_TEST_CASE(DephtToSpaceEndToEndNchwInt16)
178 DepthToSpaceEndToEnd<armnn::DataType::QSymmS16>(defaultBackends, armnn::DataLayout::NCHW);
181 BOOST_AUTO_TEST_CASE(DephtToSpaceEndToEndNhwcFloat32)
183 DepthToSpaceEndToEnd<armnn::DataType::Float32>(defaultBackends, armnn::DataLayout::NHWC);
186 BOOST_AUTO_TEST_CASE(DephtToSpaceEndToEndNhwcFloat16)
188 DepthToSpaceEndToEnd<armnn::DataType::Float16>(defaultBackends, armnn::DataLayout::NHWC);
191 BOOST_AUTO_TEST_CASE(DephtToSpaceEndToEndNhwcUint8)
193 DepthToSpaceEndToEnd<armnn::DataType::QAsymmU8>(defaultBackends, armnn::DataLayout::NHWC);
196 BOOST_AUTO_TEST_CASE(DephtToSpaceEndToEndNhwcInt16)
198 DepthToSpaceEndToEnd<armnn::DataType::QSymmS16>(defaultBackends, armnn::DataLayout::NHWC);
202 BOOST_AUTO_TEST_CASE(DequantizeEndToEndSimpleTest)
204 DequantizeEndToEndSimple<armnn::DataType::QAsymmU8>(defaultBackends);
207 BOOST_AUTO_TEST_CASE(DequantizeEndToEndOffsetTest)
209 DequantizeEndToEndOffset<armnn::DataType::QAsymmU8>(defaultBackends);
212 BOOST_AUTO_TEST_CASE(NeonEluEndToEndTestFloat32)
214 EluEndToEndTest<armnn::DataType::Float32>(defaultBackends);
217 BOOST_AUTO_TEST_CASE(NeonEluEndToEndTestFloat16)
219 EluEndToEndTest<armnn::DataType::Float16>(defaultBackends);
223 BOOST_AUTO_TEST_CASE(NeonHardSwishEndToEndTestFloat32)
225 HardSwishEndToEndTest<armnn::DataType::Float32>(defaultBackends);
228 BOOST_AUTO_TEST_CASE(NeonHardSwishEndToEndTestFloat16)
230 HardSwishEndToEndTest<armnn::DataType::Float16>(defaultBackends);
233 BOOST_AUTO_TEST_CASE(NeonHardSwishEndToEndTestQAsymmS8)
235 HardSwishEndToEndTest<armnn::DataType::QAsymmS8>(defaultBackends);
238 BOOST_AUTO_TEST_CASE(NeonHardSwishEndToEndTestQAsymmU8)
240 HardSwishEndToEndTest<armnn::DataType::QAsymmU8>(defaultBackends);
243 BOOST_AUTO_TEST_CASE(NeonPreluEndToEndFloat32Test)
245 PreluEndToEndNegativeTest<armnn::DataType::Float32>(defaultBackends);
248 BOOST_AUTO_TEST_CASE(NeonPreluEndToEndTestUint8Test)
250 PreluEndToEndPositiveTest<armnn::DataType::QAsymmU8>(defaultBackends);
253 BOOST_AUTO_TEST_CASE(NeonSpaceToDepthNhwcEndToEndTest1)
255 SpaceToDepthNhwcEndToEndTest1(defaultBackends);
258 BOOST_AUTO_TEST_CASE(NeonSpaceToDepthNchwEndToEndTest1)
260 SpaceToDepthNchwEndToEndTest1(defaultBackends);
263 BOOST_AUTO_TEST_CASE(NeonSpaceToDepthNhwcEndToEndTest2)
265 SpaceToDepthNhwcEndToEndTest2(defaultBackends);
268 BOOST_AUTO_TEST_CASE(NeonSpaceToDepthNchwEndToEndTest2)
270 SpaceToDepthNchwEndToEndTest2(defaultBackends);
273 BOOST_AUTO_TEST_CASE(NeonSplitter1dEndToEndTest)
275 Splitter1dEndToEnd<armnn::DataType::Float32>(defaultBackends);
278 BOOST_AUTO_TEST_CASE(NeonSplitter1dEndToEndUint8Test)
280 Splitter1dEndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
283 BOOST_AUTO_TEST_CASE(NeonSplitter2dDim0EndToEndTest)
285 Splitter2dDim0EndToEnd<armnn::DataType::Float32>(defaultBackends);
288 BOOST_AUTO_TEST_CASE(NeonSplitter2dDim1EndToEndTest)
290 Splitter2dDim1EndToEnd<armnn::DataType::Float32>(defaultBackends);
293 BOOST_AUTO_TEST_CASE(NeonSplitter2dDim0EndToEndUint8Test)
295 Splitter2dDim0EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
298 BOOST_AUTO_TEST_CASE(NeonSplitter2dDim1EndToEndUint8Test)
300 Splitter2dDim1EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
303 BOOST_AUTO_TEST_CASE(NeonSplitter3dDim0EndToEndTest)
305 Splitter3dDim0EndToEnd<armnn::DataType::Float32>(defaultBackends);
308 BOOST_AUTO_TEST_CASE(NeonSplitter3dDim1EndToEndTest)
310 Splitter3dDim1EndToEnd<armnn::DataType::Float32>(defaultBackends);
313 BOOST_AUTO_TEST_CASE(NeonSplitter3dDim2EndToEndTest)
315 Splitter3dDim2EndToEnd<armnn::DataType::Float32>(defaultBackends);
318 BOOST_AUTO_TEST_CASE(NeonSplitter3dDim0EndToEndUint8Test)
320 Splitter3dDim0EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
323 BOOST_AUTO_TEST_CASE(NeonSplitter3dDim1EndToEndUint8Test)
325 Splitter3dDim1EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
328 BOOST_AUTO_TEST_CASE(NeonSplitter3dDim2EndToEndUint8Test)
330 Splitter3dDim2EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
333 BOOST_AUTO_TEST_CASE(NeonSplitter4dDim0EndToEndTest)
335 Splitter4dDim0EndToEnd<armnn::DataType::Float32>(defaultBackends);
338 BOOST_AUTO_TEST_CASE(NeonSplitter4dDim1EndToEndTest)
340 Splitter4dDim1EndToEnd<armnn::DataType::Float32>(defaultBackends);
343 BOOST_AUTO_TEST_CASE(NeonSplitter4dDim2EndToEndTest)
345 Splitter4dDim2EndToEnd<armnn::DataType::Float32>(defaultBackends);
348 BOOST_AUTO_TEST_CASE(NeonSplitter4dDim3EndToEndTest)
350 Splitter4dDim3EndToEnd<armnn::DataType::Float32>(defaultBackends);
353 BOOST_AUTO_TEST_CASE(NeonSplitter4dDim0EndToEndUint8Test)
355 Splitter4dDim0EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
358 BOOST_AUTO_TEST_CASE(NeonSplitter4dDim1EndToEndUint8Test)
360 Splitter4dDim1EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
363 BOOST_AUTO_TEST_CASE(NeonSplitter4dDim2EndToEndUint8Test)
365 Splitter4dDim2EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
368 BOOST_AUTO_TEST_CASE(NeonSplitter4dDim3EndToEndUint8Test)
370 Splitter4dDim3EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
373 BOOST_AUTO_TEST_CASE(NeonQuantizedLstmEndToEndTest)
375 QuantizedLstmEndToEnd(defaultBackends);
378 BOOST_AUTO_TEST_CASE(NeonTransposeConvolution2dEndToEndFloatNchwTest)
380 TransposeConvolution2dEndToEnd<armnn::DataType::Float32, armnn::DataType::Float32>(
381 defaultBackends, armnn::DataLayout::NCHW);
384 BOOST_AUTO_TEST_CASE(NeonTransposeConvolution2dEndToEndUint8NchwTest)
386 TransposeConvolution2dEndToEnd<armnn::DataType::QAsymmU8, armnn::DataType::Signed32>(
387 defaultBackends, armnn::DataLayout::NCHW);
390 BOOST_AUTO_TEST_CASE(NeonTransposeConvolution2dEndToEndFloatNhwcTest)
392 TransposeConvolution2dEndToEnd<armnn::DataType::Float32, armnn::DataType::Float32>(
393 defaultBackends, armnn::DataLayout::NHWC);
396 BOOST_AUTO_TEST_CASE(NeonTransposeConvolution2dEndToEndUint8NhwcTest)
398 TransposeConvolution2dEndToEnd<armnn::DataType::QAsymmU8, armnn::DataType::Signed32>(
399 defaultBackends, armnn::DataLayout::NHWC);
402 BOOST_AUTO_TEST_CASE(NeonImportNonAlignedInputPointerTest)
404 ImportNonAlignedInputPointerTest(defaultBackends);
407 BOOST_AUTO_TEST_CASE(NeonExportNonAlignedOutputPointerTest)
409 ExportNonAlignedOutputPointerTest(defaultBackends);
412 BOOST_AUTO_TEST_CASE(NeonImportAlignedPointerTest, * boost::unit_test::disabled())
414 ImportAlignedPointerTest(defaultBackends);
417 BOOST_AUTO_TEST_CASE(NeonImportOnlyWorkload, * boost::unit_test::disabled())
419 ImportOnlyWorkload(defaultBackends);
422 BOOST_AUTO_TEST_CASE(NeonExportOnlyWorkload, * boost::unit_test::disabled())
424 ExportOnlyWorkload(defaultBackends);
427 BOOST_AUTO_TEST_CASE(NeonImportAndExportWorkload, * boost::unit_test::disabled())
429 ImportAndExportWorkload(defaultBackends);
432 BOOST_AUTO_TEST_CASE(NeonExportOutputWithSeveralOutputSlotConnectionsTest, * boost::unit_test::disabled())
434 ExportOutputWithSeveralOutputSlotConnectionsTest(defaultBackends);
437 // InstanceNormalization
438 BOOST_AUTO_TEST_CASE(NeonInstanceNormalizationNchwEndToEndTest1)
440 InstanceNormalizationNchwEndToEndTest1(defaultBackends);
443 BOOST_AUTO_TEST_CASE(NeonInstanceNormalizationNchwEndToEndTest2)
445 InstanceNormalizationNchwEndToEndTest2(defaultBackends);
449 BOOST_AUTO_TEST_CASE(NeonArgMaxSimpleTest)
451 ArgMaxEndToEndSimple<armnn::DataType::Float32>(defaultBackends);
454 BOOST_AUTO_TEST_CASE(NeonArgMinSimpleTest)
456 ArgMinEndToEndSimple<armnn::DataType::Float32>(defaultBackends);
459 BOOST_AUTO_TEST_CASE(NeonArgMaxAxis0Test)
461 ArgMaxAxis0EndToEnd<armnn::DataType::Float32>(defaultBackends);
464 BOOST_AUTO_TEST_CASE(NeonArgMinAxis0Test)
466 ArgMinAxis0EndToEnd<armnn::DataType::Float32>(defaultBackends);
469 BOOST_AUTO_TEST_CASE(NeonArgMaxAxis1Test)
471 ArgMaxAxis1EndToEnd<armnn::DataType::Float32>(defaultBackends);
474 BOOST_AUTO_TEST_CASE(NeonArgMinAxis1Test)
476 ArgMinAxis1EndToEnd<armnn::DataType::Float32>(defaultBackends);
479 BOOST_AUTO_TEST_CASE(NeonArgMaxAxis2Test)
481 ArgMaxAxis2EndToEnd<armnn::DataType::Float32>(defaultBackends);
484 BOOST_AUTO_TEST_CASE(NeonArgMinAxis2Test)
486 ArgMinAxis2EndToEnd<armnn::DataType::Float32>(defaultBackends);
489 BOOST_AUTO_TEST_CASE(NeonArgMaxAxis3Test)
491 ArgMaxAxis3EndToEnd<armnn::DataType::Float32>(defaultBackends);
494 BOOST_AUTO_TEST_CASE(NeonArgMinAxis3Test)
496 ArgMinAxis3EndToEnd<armnn::DataType::Float32>(defaultBackends);
499 BOOST_AUTO_TEST_CASE(NeonArgMaxSimpleTestQuantisedAsymm8)
501 ArgMaxEndToEndSimple<armnn::DataType::QAsymmU8>(defaultBackends);
504 BOOST_AUTO_TEST_CASE(NeonArgMinSimpleTestQuantisedAsymm8)
506 ArgMinEndToEndSimple<armnn::DataType::QAsymmU8>(defaultBackends);
509 BOOST_AUTO_TEST_CASE(NeonArgMaxAxis0TestQuantisedAsymm8)
511 ArgMaxAxis0EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
514 BOOST_AUTO_TEST_CASE(NeonArgMinAxis0TestQuantisedAsymm8)
516 ArgMinAxis0EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
519 BOOST_AUTO_TEST_CASE(NeonArgMaxAxis1TestQuantisedAsymm8)
521 ArgMaxAxis1EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
524 BOOST_AUTO_TEST_CASE(NeonArgMinAxis1TestQuantisedAsymm8)
526 ArgMinAxis1EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
529 BOOST_AUTO_TEST_CASE(NeonArgMaxAxis2TestQuantisedAsymm8)
531 ArgMaxAxis2EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
534 BOOST_AUTO_TEST_CASE(NeonArgMinAxis2TestQuantisedAsymm8)
536 ArgMinAxis2EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
539 BOOST_AUTO_TEST_CASE(NeonArgMaxAxis3TestQuantisedAsymm8)
541 ArgMaxAxis3EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
544 BOOST_AUTO_TEST_CASE(NeonArgMinAxis3TestQuantisedAsymm8)
546 ArgMinAxis3EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
549 BOOST_AUTO_TEST_CASE(NeonStridedSliceInvalidSliceEndToEndTest)
551 StridedSliceInvalidSliceEndToEndTest(defaultBackends);
554 BOOST_AUTO_TEST_CASE(NeonDetectionPostProcessRegularNmsTest, * boost::unit_test::disabled())
556 std::vector<float> boxEncodings({
557 0.0f, 0.0f, 0.0f, 0.0f,
558 0.0f, 1.0f, 0.0f, 0.0f,
559 0.0f, -1.0f, 0.0f, 0.0f,
560 0.0f, 0.0f, 0.0f, 0.0f,
561 0.0f, 1.0f, 0.0f, 0.0f,
562 0.0f, 0.0f, 0.0f, 0.0f
564 std::vector<float> scores({
572 std::vector<float> anchors({
573 0.5f, 0.5f, 1.0f, 1.0f,
574 0.5f, 0.5f, 1.0f, 1.0f,
575 0.5f, 0.5f, 1.0f, 1.0f,
576 0.5f, 10.5f, 1.0f, 1.0f,
577 0.5f, 10.5f, 1.0f, 1.0f,
578 0.5f, 100.5f, 1.0f, 1.0f
580 DetectionPostProcessRegularNmsEndToEnd<armnn::DataType::Float32>(defaultBackends, boxEncodings, scores, anchors);
583 inline void QuantizeData(uint8_t* quant, const float* dequant, const TensorInfo& info)
585 for (size_t i = 0; i < info.GetNumElements(); i++)
587 quant[i] = armnn::Quantize<uint8_t>(dequant[i], info.GetQuantizationScale(), info.GetQuantizationOffset());
591 BOOST_AUTO_TEST_CASE(NeonDetectionPostProcessRegularNmsUint8Test, * boost::unit_test::disabled())
593 armnn::TensorInfo boxEncodingsInfo({ 1, 6, 4 }, armnn::DataType::Float32);
594 armnn::TensorInfo scoresInfo({ 1, 6, 3 }, armnn::DataType::Float32);
595 armnn::TensorInfo anchorsInfo({ 6, 4 }, armnn::DataType::Float32);
597 boxEncodingsInfo.SetQuantizationScale(1.0f);
598 boxEncodingsInfo.SetQuantizationOffset(1);
599 scoresInfo.SetQuantizationScale(0.01f);
600 scoresInfo.SetQuantizationOffset(0);
601 anchorsInfo.SetQuantizationScale(0.5f);
602 anchorsInfo.SetQuantizationOffset(0);
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
612 std::vector<float> scores({
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
629 std::vector<uint8_t> qBoxEncodings(boxEncodings.size(), 0);
630 std::vector<uint8_t> qScores(scores.size(), 0);
631 std::vector<uint8_t> qAnchors(anchors.size(), 0);
632 QuantizeData(qBoxEncodings.data(), boxEncodings.data(), boxEncodingsInfo);
633 QuantizeData(qScores.data(), scores.data(), scoresInfo);
634 QuantizeData(qAnchors.data(), anchors.data(), anchorsInfo);
635 DetectionPostProcessRegularNmsEndToEnd<armnn::DataType::QAsymmU8>(defaultBackends, qBoxEncodings,
637 1.0f, 1, 0.01f, 0, 0.5f, 0);
640 BOOST_AUTO_TEST_CASE(NeonDetectionPostProcessFastNmsTest, * boost::unit_test::disabled())
642 std::vector<float> boxEncodings({
643 0.0f, 0.0f, 0.0f, 0.0f,
644 0.0f, 1.0f, 0.0f, 0.0f,
645 0.0f, -1.0f, 0.0f, 0.0f,
646 0.0f, 0.0f, 0.0f, 0.0f,
647 0.0f, 1.0f, 0.0f, 0.0f,
648 0.0f, 0.0f, 0.0f, 0.0f
650 std::vector<float> scores({
658 std::vector<float> anchors({
659 0.5f, 0.5f, 1.0f, 1.0f,
660 0.5f, 0.5f, 1.0f, 1.0f,
661 0.5f, 0.5f, 1.0f, 1.0f,
662 0.5f, 10.5f, 1.0f, 1.0f,
663 0.5f, 10.5f, 1.0f, 1.0f,
664 0.5f, 100.5f, 1.0f, 1.0f
666 DetectionPostProcessFastNmsEndToEnd<armnn::DataType::Float32>(defaultBackends, boxEncodings, scores, anchors);
669 BOOST_AUTO_TEST_CASE(NeonDetectionPostProcessFastNmsUint8Test, * boost::unit_test::disabled())
671 armnn::TensorInfo boxEncodingsInfo({ 1, 6, 4 }, armnn::DataType::Float32);
672 armnn::TensorInfo scoresInfo({ 1, 6, 3 }, armnn::DataType::Float32);
673 armnn::TensorInfo anchorsInfo({ 6, 4 }, armnn::DataType::Float32);
675 boxEncodingsInfo.SetQuantizationScale(1.0f);
676 boxEncodingsInfo.SetQuantizationOffset(1);
677 scoresInfo.SetQuantizationScale(0.01f);
678 scoresInfo.SetQuantizationOffset(0);
679 anchorsInfo.SetQuantizationScale(0.5f);
680 anchorsInfo.SetQuantizationOffset(0);
682 std::vector<float> boxEncodings({
683 0.0f, 0.0f, 0.0f, 0.0f,
684 0.0f, 1.0f, 0.0f, 0.0f,
685 0.0f, -1.0f, 0.0f, 0.0f,
686 0.0f, 0.0f, 0.0f, 0.0f,
687 0.0f, 1.0f, 0.0f, 0.0f,
688 0.0f, 0.0f, 0.0f, 0.0f
690 std::vector<float> scores({
698 std::vector<float> anchors({
699 0.5f, 0.5f, 1.0f, 1.0f,
700 0.5f, 0.5f, 1.0f, 1.0f,
701 0.5f, 0.5f, 1.0f, 1.0f,
702 0.5f, 10.5f, 1.0f, 1.0f,
703 0.5f, 10.5f, 1.0f, 1.0f,
704 0.5f, 100.5f, 1.0f, 1.0f
707 std::vector<uint8_t> qBoxEncodings(boxEncodings.size(), 0);
708 std::vector<uint8_t> qScores(scores.size(), 0);
709 std::vector<uint8_t> qAnchors(anchors.size(), 0);
710 QuantizeData(qBoxEncodings.data(), boxEncodings.data(), boxEncodingsInfo);
711 QuantizeData(qScores.data(), scores.data(), scoresInfo);
712 QuantizeData(qAnchors.data(), anchors.data(), anchorsInfo);
713 DetectionPostProcessFastNmsEndToEnd<armnn::DataType::QAsymmU8>(defaultBackends, qBoxEncodings,
715 1.0f, 1, 0.01f, 0, 0.5f, 0);
718 BOOST_AUTO_TEST_CASE(NeonQLstmEndToEndTest)
720 QLstmEndToEnd(defaultBackends);
723 BOOST_AUTO_TEST_SUITE_END()