blob: 4e9fe0f3c358a904f60a584f5b2a487599873ffb [file] [log] [blame]
Aron Virginas-Tar70104002018-10-24 15:33:28 +01001//
2// Copyright © 2017 Arm Ltd. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5
Aron Virginas-Tarc9cc8042018-11-01 16:15:57 +00006#include <backendsCommon/test/EndToEndTestImpl.hpp>
Narumol Prangnawarat8c7324d2019-05-31 16:42:11 +01007
James Conroy68a4dbc2019-11-13 15:35:59 +00008#include <backendsCommon/test/ArgMinMaxEndToEndTestImpl.hpp>
Aron Virginas-Tar77bfb5e2019-10-16 17:45:38 +01009#include <backendsCommon/test/ComparisonEndToEndTestImpl.hpp>
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +010010#include <backendsCommon/test/ConcatEndToEndTestImpl.hpp>
Aron Virginas-Tarf97f6da2019-10-01 18:35:44 +010011#include <backendsCommon/test/DepthToSpaceEndToEndTestImpl.hpp>
Narumol Prangnawarat8c7324d2019-05-31 16:42:11 +010012#include <backendsCommon/test/DequantizeEndToEndTestImpl.hpp>
Derek Lamberti6a5e5e82019-12-05 14:41:20 +000013#include <backendsCommon/test/DetectionPostProcessEndToEndTestImpl.hpp>
josh minor4a3c6102020-01-06 16:40:46 -060014#include <backendsCommon/test/ElementwiseUnaryEndToEndTestImpl.hpp>
Sadik Armagan062e0e92019-10-14 10:31:43 +010015#include <backendsCommon/test/InstanceNormalizationEndToEndTestImpl.hpp>
Nikhil Raj1c8adac2019-07-22 11:27:29 +010016#include <backendsCommon/test/PreluEndToEndTestImpl.hpp>
Francis Murtaghb3fc2522019-08-09 13:20:50 +010017#include <backendsCommon/test/QuantizedLstmEndToEndTestImpl.hpp>
Ellen Norris-Thompson29794572019-06-26 16:40:36 +010018#include <backendsCommon/test/SpaceToDepthEndToEndTestImpl.hpp>
Narumol Prangnawarat0be43382019-05-27 11:29:59 +010019#include <backendsCommon/test/SplitterEndToEndTestImpl.hpp>
Sadik Armagan581742d2019-08-12 14:11:37 +010020#include <backendsCommon/test/TransposeConvolution2dEndToEndTestImpl.hpp>
Aron Virginas-Tar70104002018-10-24 15:33:28 +010021
22#include <boost/test/unit_test.hpp>
23
24BOOST_AUTO_TEST_SUITE(NeonEndToEnd)
25
narpra01b9546cf2018-11-20 15:21:28 +000026std::vector<armnn::BackendId> defaultBackends = {armnn::Compute::CpuAcc};
27
Aron Virginas-Tar914e4db2019-09-09 13:36:45 +010028// Abs
29BOOST_AUTO_TEST_CASE(NeonAbsEndToEndTestFloat32)
30{
josh minor4a3c6102020-01-06 16:40:46 -060031 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);
Aron Virginas-Tar914e4db2019-09-09 13:36:45 +010040}
41
42// Constant
Aron Virginas-Tar70104002018-10-24 15:33:28 +010043BOOST_AUTO_TEST_CASE(ConstantUsage_Neon_Float32)
44{
narpra01b9546cf2018-11-20 15:21:28 +000045 BOOST_TEST(ConstantUsageFloat32Test(defaultBackends));
Aron Virginas-Tar70104002018-10-24 15:33:28 +010046}
47
Matteo Martincighdb16dd32019-08-27 16:41:11 +010048#if defined(ARMNNREF_ENABLED)
Matteo Martincighe67edb22019-08-14 14:05:46 +010049
50// This test unit needs the reference backend, it's not available if the reference backend is not built
51
Aron Virginas-Tar70104002018-10-24 15:33:28 +010052BOOST_AUTO_TEST_CASE(FallbackToCpuRef)
53{
54 using namespace armnn;
55
56 // Create runtime in which test will run and allow fallback to CpuRef.
57 IRuntime::CreationOptions options;
58 IRuntimePtr runtime(IRuntime::Create(options));
59
60 // Builds up the structure of the network.
61 INetworkPtr net(INetwork::Create());
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
Matteo Martincighe67edb22019-08-14 14:05:46 +010086#endif
87
kevmay01eed85922019-01-28 08:37:25 +000088BOOST_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
Aron Virginas-Tar77bfb5e2019-10-16 17:45:38 +010093 ComparisonSimpleEndToEnd<armnn::DataType::Float32>(defaultBackends,
94 ComparisonOperation::Greater,
95 expectedOutput);
kevmay01eed85922019-01-28 08:37:25 +000096}
97
98BOOST_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
Derek Lambertif90c56d2020-01-10 17:14:08 +0000103 ComparisonSimpleEndToEnd<armnn::DataType::QAsymmU8>(defaultBackends,
Aron Virginas-Tar77bfb5e2019-10-16 17:45:38 +0100104 ComparisonOperation::Greater,
105 expectedOutput);
kevmay01eed85922019-01-28 08:37:25 +0000106}
107
108BOOST_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
Aron Virginas-Tar77bfb5e2019-10-16 17:45:38 +0100113 ComparisonBroadcastEndToEnd<armnn::DataType::Float32>(defaultBackends,
114 ComparisonOperation::Greater,
115 expectedOutput);
kevmay01eed85922019-01-28 08:37:25 +0000116}
117
118BOOST_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
Derek Lambertif90c56d2020-01-10 17:14:08 +0000123 ComparisonBroadcastEndToEnd<armnn::DataType::QAsymmU8>(defaultBackends,
Aron Virginas-Tar77bfb5e2019-10-16 17:45:38 +0100124 ComparisonOperation::Greater,
125 expectedOutput);
kevmay01eed85922019-01-28 08:37:25 +0000126}
127
Jim Flynne242f2d2019-05-22 14:24:13 +0100128BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim0Test)
narpra01b9546cf2018-11-20 15:21:28 +0000129{
Jim Flynne242f2d2019-05-22 14:24:13 +0100130 ConcatDim0EndToEnd<armnn::DataType::Float32>(defaultBackends);
narpra01b9546cf2018-11-20 15:21:28 +0000131}
132
Jim Flynne242f2d2019-05-22 14:24:13 +0100133BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim0Uint8Test)
narpra01b9546cf2018-11-20 15:21:28 +0000134{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000135 ConcatDim0EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
narpra01b9546cf2018-11-20 15:21:28 +0000136}
137
Jim Flynne242f2d2019-05-22 14:24:13 +0100138BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim1Test)
narpra01b9546cf2018-11-20 15:21:28 +0000139{
Jim Flynne242f2d2019-05-22 14:24:13 +0100140 ConcatDim1EndToEnd<armnn::DataType::Float32>(defaultBackends);
narpra01b9546cf2018-11-20 15:21:28 +0000141}
142
Jim Flynne242f2d2019-05-22 14:24:13 +0100143BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim1Uint8Test)
narpra01b9546cf2018-11-20 15:21:28 +0000144{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000145 ConcatDim1EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
narpra01b9546cf2018-11-20 15:21:28 +0000146}
147
Jim Flynne242f2d2019-05-22 14:24:13 +0100148BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim3Test)
narpra01b9546cf2018-11-20 15:21:28 +0000149{
Jim Flynne242f2d2019-05-22 14:24:13 +0100150 ConcatDim3EndToEnd<armnn::DataType::Float32>(defaultBackends);
narpra01b9546cf2018-11-20 15:21:28 +0000151}
152
Jim Flynne242f2d2019-05-22 14:24:13 +0100153BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim3Uint8Test)
narpra01b9546cf2018-11-20 15:21:28 +0000154{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000155 ConcatDim3EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
narpra01b9546cf2018-11-20 15:21:28 +0000156}
157
Aron Virginas-Tarf97f6da2019-10-01 18:35:44 +0100158// DepthToSpace
159BOOST_AUTO_TEST_CASE(DephtToSpaceEndToEndNchwFloat32)
160{
161 DepthToSpaceEndToEnd<armnn::DataType::Float32>(defaultBackends, armnn::DataLayout::NCHW);
162}
163
164BOOST_AUTO_TEST_CASE(DephtToSpaceEndToEndNchwFloat16)
165{
166 DepthToSpaceEndToEnd<armnn::DataType::Float16>(defaultBackends, armnn::DataLayout::NCHW);
167}
168
169BOOST_AUTO_TEST_CASE(DephtToSpaceEndToEndNchwUint8)
170{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000171 DepthToSpaceEndToEnd<armnn::DataType::QAsymmU8>(defaultBackends, armnn::DataLayout::NCHW);
Aron Virginas-Tarf97f6da2019-10-01 18:35:44 +0100172}
173
174BOOST_AUTO_TEST_CASE(DephtToSpaceEndToEndNchwInt16)
175{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000176 DepthToSpaceEndToEnd<armnn::DataType::QSymmS16>(defaultBackends, armnn::DataLayout::NCHW);
Aron Virginas-Tarf97f6da2019-10-01 18:35:44 +0100177}
178
179BOOST_AUTO_TEST_CASE(DephtToSpaceEndToEndNhwcFloat32)
180{
181 DepthToSpaceEndToEnd<armnn::DataType::Float32>(defaultBackends, armnn::DataLayout::NHWC);
182}
183
184BOOST_AUTO_TEST_CASE(DephtToSpaceEndToEndNhwcFloat16)
185{
186 DepthToSpaceEndToEnd<armnn::DataType::Float16>(defaultBackends, armnn::DataLayout::NHWC);
187}
188
189BOOST_AUTO_TEST_CASE(DephtToSpaceEndToEndNhwcUint8)
190{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000191 DepthToSpaceEndToEnd<armnn::DataType::QAsymmU8>(defaultBackends, armnn::DataLayout::NHWC);
Aron Virginas-Tarf97f6da2019-10-01 18:35:44 +0100192}
193
194BOOST_AUTO_TEST_CASE(DephtToSpaceEndToEndNhwcInt16)
195{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000196 DepthToSpaceEndToEnd<armnn::DataType::QSymmS16>(defaultBackends, armnn::DataLayout::NHWC);
Aron Virginas-Tarf97f6da2019-10-01 18:35:44 +0100197}
198
199// Dequantize
Narumol Prangnawarat8c7324d2019-05-31 16:42:11 +0100200BOOST_AUTO_TEST_CASE(DequantizeEndToEndSimpleTest)
201{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000202 DequantizeEndToEndSimple<armnn::DataType::QAsymmU8>(defaultBackends);
Narumol Prangnawarat8c7324d2019-05-31 16:42:11 +0100203}
204
205BOOST_AUTO_TEST_CASE(DequantizeEndToEndOffsetTest)
206{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000207 DequantizeEndToEndOffset<armnn::DataType::QAsymmU8>(defaultBackends);
Narumol Prangnawarat8c7324d2019-05-31 16:42:11 +0100208}
209
Nikhil Raj1c8adac2019-07-22 11:27:29 +0100210BOOST_AUTO_TEST_CASE(NeonPreluEndToEndFloat32Test)
211{
212 PreluEndToEndNegativeTest<armnn::DataType::Float32>(defaultBackends);
213}
214
215BOOST_AUTO_TEST_CASE(NeonPreluEndToEndTestUint8Test)
216{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000217 PreluEndToEndPositiveTest<armnn::DataType::QAsymmU8>(defaultBackends);
Nikhil Raj1c8adac2019-07-22 11:27:29 +0100218}
219
Aron Virginas-Tarf97f6da2019-10-01 18:35:44 +0100220BOOST_AUTO_TEST_CASE(NeonSpaceToDepthNhwcEndToEndTest1)
Ellen Norris-Thompson29794572019-06-26 16:40:36 +0100221{
Aron Virginas-Tarf97f6da2019-10-01 18:35:44 +0100222 SpaceToDepthNhwcEndToEndTest1(defaultBackends);
Ellen Norris-Thompson29794572019-06-26 16:40:36 +0100223}
224
Aron Virginas-Tarf97f6da2019-10-01 18:35:44 +0100225BOOST_AUTO_TEST_CASE(NeonSpaceToDepthNchwEndToEndTest1)
Ellen Norris-Thompson29794572019-06-26 16:40:36 +0100226{
Aron Virginas-Tarf97f6da2019-10-01 18:35:44 +0100227 SpaceToDepthNchwEndToEndTest1(defaultBackends);
Ellen Norris-Thompson29794572019-06-26 16:40:36 +0100228}
229
Aron Virginas-Tarf97f6da2019-10-01 18:35:44 +0100230BOOST_AUTO_TEST_CASE(NeonSpaceToDepthNhwcEndToEndTest2)
Ellen Norris-Thompson29794572019-06-26 16:40:36 +0100231{
Aron Virginas-Tarf97f6da2019-10-01 18:35:44 +0100232 SpaceToDepthNhwcEndToEndTest2(defaultBackends);
Ellen Norris-Thompson29794572019-06-26 16:40:36 +0100233}
234
Aron Virginas-Tarf97f6da2019-10-01 18:35:44 +0100235BOOST_AUTO_TEST_CASE(NeonSpaceToDepthNchwEndToEndTest2)
Ellen Norris-Thompson29794572019-06-26 16:40:36 +0100236{
Aron Virginas-Tarf97f6da2019-10-01 18:35:44 +0100237 SpaceToDepthNchwEndToEndTest2(defaultBackends);
Ellen Norris-Thompson29794572019-06-26 16:40:36 +0100238}
239
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100240BOOST_AUTO_TEST_CASE(NeonSplitter1dEndToEndTest)
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100241{
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100242 Splitter1dEndToEnd<armnn::DataType::Float32>(defaultBackends);
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100243}
244
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100245BOOST_AUTO_TEST_CASE(NeonSplitter1dEndToEndUint8Test)
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100246{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000247 Splitter1dEndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100248}
249
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100250BOOST_AUTO_TEST_CASE(NeonSplitter2dDim0EndToEndTest)
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100251{
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100252 Splitter2dDim0EndToEnd<armnn::DataType::Float32>(defaultBackends);
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100253}
254
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100255BOOST_AUTO_TEST_CASE(NeonSplitter2dDim1EndToEndTest)
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100256{
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100257 Splitter2dDim1EndToEnd<armnn::DataType::Float32>(defaultBackends);
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100258}
259
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100260BOOST_AUTO_TEST_CASE(NeonSplitter2dDim0EndToEndUint8Test)
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100261{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000262 Splitter2dDim0EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100263}
264
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100265BOOST_AUTO_TEST_CASE(NeonSplitter2dDim1EndToEndUint8Test)
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100266{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000267 Splitter2dDim1EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100268}
269
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100270BOOST_AUTO_TEST_CASE(NeonSplitter3dDim0EndToEndTest)
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100271{
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100272 Splitter3dDim0EndToEnd<armnn::DataType::Float32>(defaultBackends);
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100273}
274
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100275BOOST_AUTO_TEST_CASE(NeonSplitter3dDim1EndToEndTest)
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100276{
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100277 Splitter3dDim1EndToEnd<armnn::DataType::Float32>(defaultBackends);
278}
279
280BOOST_AUTO_TEST_CASE(NeonSplitter3dDim2EndToEndTest)
281{
282 Splitter3dDim2EndToEnd<armnn::DataType::Float32>(defaultBackends);
283}
284
285BOOST_AUTO_TEST_CASE(NeonSplitter3dDim0EndToEndUint8Test)
286{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000287 Splitter3dDim0EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100288}
289
290BOOST_AUTO_TEST_CASE(NeonSplitter3dDim1EndToEndUint8Test)
291{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000292 Splitter3dDim1EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100293}
294
295BOOST_AUTO_TEST_CASE(NeonSplitter3dDim2EndToEndUint8Test)
296{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000297 Splitter3dDim2EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100298}
299
300BOOST_AUTO_TEST_CASE(NeonSplitter4dDim0EndToEndTest)
301{
302 Splitter4dDim0EndToEnd<armnn::DataType::Float32>(defaultBackends);
303}
304
305BOOST_AUTO_TEST_CASE(NeonSplitter4dDim1EndToEndTest)
306{
307 Splitter4dDim1EndToEnd<armnn::DataType::Float32>(defaultBackends);
308}
309
310BOOST_AUTO_TEST_CASE(NeonSplitter4dDim2EndToEndTest)
311{
312 Splitter4dDim2EndToEnd<armnn::DataType::Float32>(defaultBackends);
313}
314
315BOOST_AUTO_TEST_CASE(NeonSplitter4dDim3EndToEndTest)
316{
317 Splitter4dDim3EndToEnd<armnn::DataType::Float32>(defaultBackends);
318}
319
320BOOST_AUTO_TEST_CASE(NeonSplitter4dDim0EndToEndUint8Test)
321{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000322 Splitter4dDim0EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100323}
324
325BOOST_AUTO_TEST_CASE(NeonSplitter4dDim1EndToEndUint8Test)
326{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000327 Splitter4dDim1EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100328}
329
330BOOST_AUTO_TEST_CASE(NeonSplitter4dDim2EndToEndUint8Test)
331{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000332 Splitter4dDim2EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
Narumol Prangnawarat0f072ab2019-05-29 14:12:46 +0100333}
334
335BOOST_AUTO_TEST_CASE(NeonSplitter4dDim3EndToEndUint8Test)
336{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000337 Splitter4dDim3EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
Narumol Prangnawarat0be43382019-05-27 11:29:59 +0100338}
339
Francis Murtaghb3fc2522019-08-09 13:20:50 +0100340BOOST_AUTO_TEST_CASE(NeonQuantizedLstmEndToEndTest)
341{
342 QuantizedLstmEndToEnd(defaultBackends);
343}
344
Sadik Armagan581742d2019-08-12 14:11:37 +0100345BOOST_AUTO_TEST_CASE(NeonTransposeConvolution2dEndToEndFloatNchwTest)
346{
347 TransposeConvolution2dEndToEnd<armnn::DataType::Float32, armnn::DataType::Float32>(
348 defaultBackends, armnn::DataLayout::NCHW);
349}
350
351BOOST_AUTO_TEST_CASE(NeonTransposeConvolution2dEndToEndUint8NchwTest)
352{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000353 TransposeConvolution2dEndToEnd<armnn::DataType::QAsymmU8, armnn::DataType::Signed32>(
Sadik Armagan581742d2019-08-12 14:11:37 +0100354 defaultBackends, armnn::DataLayout::NCHW);
355}
356
357BOOST_AUTO_TEST_CASE(NeonTransposeConvolution2dEndToEndFloatNhwcTest)
358{
359 TransposeConvolution2dEndToEnd<armnn::DataType::Float32, armnn::DataType::Float32>(
360 defaultBackends, armnn::DataLayout::NHWC);
361}
362
363BOOST_AUTO_TEST_CASE(NeonTransposeConvolution2dEndToEndUint8NhwcTest)
364{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000365 TransposeConvolution2dEndToEnd<armnn::DataType::QAsymmU8, armnn::DataType::Signed32>(
Sadik Armagan581742d2019-08-12 14:11:37 +0100366 defaultBackends, armnn::DataLayout::NHWC);
367}
368
David Monahan3fb7e102019-08-20 11:25:29 +0100369BOOST_AUTO_TEST_CASE(NeonImportNonAlignedInputPointerTest)
370{
371 ImportNonAlignedInputPointerTest(defaultBackends);
372}
373
Ferran Balaguer83239f92019-09-19 11:49:25 +0100374BOOST_AUTO_TEST_CASE(NeonExportNonAlignedOutputPointerTest)
David Monahan3fb7e102019-08-20 11:25:29 +0100375{
Ferran Balaguer83239f92019-09-19 11:49:25 +0100376 ExportNonAlignedOutputPointerTest(defaultBackends);
377}
378
James Conroyffab16f2019-11-07 14:37:09 +0000379BOOST_AUTO_TEST_CASE(NeonImportAlignedPointerTest, * boost::unit_test::disabled())
Ferran Balaguer83239f92019-09-19 11:49:25 +0100380{
381 ImportAlignedPointerTest(defaultBackends);
David Monahan3fb7e102019-08-20 11:25:29 +0100382}
383
James Conroyffab16f2019-11-07 14:37:09 +0000384BOOST_AUTO_TEST_CASE(NeonImportOnlyWorkload, * boost::unit_test::disabled())
David Monahan3fb7e102019-08-20 11:25:29 +0100385{
Ferran Balaguer83239f92019-09-19 11:49:25 +0100386 ImportOnlyWorkload(defaultBackends);
387}
David Monahan3fb7e102019-08-20 11:25:29 +0100388
James Conroyffab16f2019-11-07 14:37:09 +0000389BOOST_AUTO_TEST_CASE(NeonExportOnlyWorkload, * boost::unit_test::disabled())
Ferran Balaguer83239f92019-09-19 11:49:25 +0100390{
391 ExportOnlyWorkload(defaultBackends);
392}
David Monahan3fb7e102019-08-20 11:25:29 +0100393
James Conroyffab16f2019-11-07 14:37:09 +0000394BOOST_AUTO_TEST_CASE(NeonImportAndExportWorkload, * boost::unit_test::disabled())
Ferran Balaguer83239f92019-09-19 11:49:25 +0100395{
396 ImportAndExportWorkload(defaultBackends);
397}
David Monahan3fb7e102019-08-20 11:25:29 +0100398
James Conroyffab16f2019-11-07 14:37:09 +0000399BOOST_AUTO_TEST_CASE(NeonExportOutputWithSeveralOutputSlotConnectionsTest, * boost::unit_test::disabled())
Ferran Balaguer83239f92019-09-19 11:49:25 +0100400{
401 ExportOutputWithSeveralOutputSlotConnectionsTest(defaultBackends);
David Monahan3fb7e102019-08-20 11:25:29 +0100402}
403
Sadik Armagan062e0e92019-10-14 10:31:43 +0100404// InstanceNormalization
405BOOST_AUTO_TEST_CASE(NeonInstanceNormalizationNchwEndToEndTest1)
406{
407 InstanceNormalizationNchwEndToEndTest1(defaultBackends);
408}
409
410BOOST_AUTO_TEST_CASE(NeonInstanceNormalizationNchwEndToEndTest2)
411{
412 InstanceNormalizationNchwEndToEndTest2(defaultBackends);
413}
414
James Conroy68a4dbc2019-11-13 15:35:59 +0000415// ArgMinMax
416BOOST_AUTO_TEST_CASE(NeonArgMaxSimpleTest)
417{
418 ArgMaxEndToEndSimple<armnn::DataType::Float32>(defaultBackends);
419}
420
421BOOST_AUTO_TEST_CASE(NeonArgMinSimpleTest)
422{
423 ArgMinEndToEndSimple<armnn::DataType::Float32>(defaultBackends);
424}
425
426BOOST_AUTO_TEST_CASE(NeonArgMaxAxis0Test)
427{
428 ArgMaxAxis0EndToEnd<armnn::DataType::Float32>(defaultBackends);
429}
430
431BOOST_AUTO_TEST_CASE(NeonArgMinAxis0Test)
432{
433 ArgMinAxis0EndToEnd<armnn::DataType::Float32>(defaultBackends);
434}
435
436BOOST_AUTO_TEST_CASE(NeonArgMaxAxis1Test)
437{
438 ArgMaxAxis1EndToEnd<armnn::DataType::Float32>(defaultBackends);
439}
440
441BOOST_AUTO_TEST_CASE(NeonArgMinAxis1Test)
442{
443 ArgMinAxis1EndToEnd<armnn::DataType::Float32>(defaultBackends);
444}
445
446BOOST_AUTO_TEST_CASE(NeonArgMaxAxis2Test)
447{
448 ArgMaxAxis2EndToEnd<armnn::DataType::Float32>(defaultBackends);
449}
450
451BOOST_AUTO_TEST_CASE(NeonArgMinAxis2Test)
452{
453 ArgMinAxis2EndToEnd<armnn::DataType::Float32>(defaultBackends);
454}
455
456BOOST_AUTO_TEST_CASE(NeonArgMaxAxis3Test)
457{
458 ArgMaxAxis3EndToEnd<armnn::DataType::Float32>(defaultBackends);
459}
460
461BOOST_AUTO_TEST_CASE(NeonArgMinAxis3Test)
462{
463 ArgMinAxis3EndToEnd<armnn::DataType::Float32>(defaultBackends);
464}
465
Francis Murtagh52ec3462019-11-19 12:24:19 +0000466BOOST_AUTO_TEST_CASE(NeonArgMaxSimpleTestQuantisedAsymm8)
467{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000468 ArgMaxEndToEndSimple<armnn::DataType::QAsymmU8>(defaultBackends);
Francis Murtagh52ec3462019-11-19 12:24:19 +0000469}
470
471BOOST_AUTO_TEST_CASE(NeonArgMinSimpleTestQuantisedAsymm8)
472{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000473 ArgMinEndToEndSimple<armnn::DataType::QAsymmU8>(defaultBackends);
Francis Murtagh52ec3462019-11-19 12:24:19 +0000474}
475
476BOOST_AUTO_TEST_CASE(NeonArgMaxAxis0TestQuantisedAsymm8)
477{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000478 ArgMaxAxis0EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
Francis Murtagh52ec3462019-11-19 12:24:19 +0000479}
480
481BOOST_AUTO_TEST_CASE(NeonArgMinAxis0TestQuantisedAsymm8)
482{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000483 ArgMinAxis0EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
Francis Murtagh52ec3462019-11-19 12:24:19 +0000484}
485
486BOOST_AUTO_TEST_CASE(NeonArgMaxAxis1TestQuantisedAsymm8)
487{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000488 ArgMaxAxis1EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
Francis Murtagh52ec3462019-11-19 12:24:19 +0000489}
490
491BOOST_AUTO_TEST_CASE(NeonArgMinAxis1TestQuantisedAsymm8)
492{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000493 ArgMinAxis1EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
Francis Murtagh52ec3462019-11-19 12:24:19 +0000494}
495
496BOOST_AUTO_TEST_CASE(NeonArgMaxAxis2TestQuantisedAsymm8)
497{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000498 ArgMaxAxis2EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
Francis Murtagh52ec3462019-11-19 12:24:19 +0000499}
500
501BOOST_AUTO_TEST_CASE(NeonArgMinAxis2TestQuantisedAsymm8)
502{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000503 ArgMinAxis2EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
Francis Murtagh52ec3462019-11-19 12:24:19 +0000504}
505
506BOOST_AUTO_TEST_CASE(NeonArgMaxAxis3TestQuantisedAsymm8)
507{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000508 ArgMaxAxis3EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
Francis Murtagh52ec3462019-11-19 12:24:19 +0000509}
510
511BOOST_AUTO_TEST_CASE(NeonArgMinAxis3TestQuantisedAsymm8)
512{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000513 ArgMinAxis3EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
Francis Murtagh52ec3462019-11-19 12:24:19 +0000514}
515
Derek Lamberti6a5e5e82019-12-05 14:41:20 +0000516BOOST_AUTO_TEST_CASE(NeonDetectionPostProcessRegularNmsTest)
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
545inline 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
553BOOST_AUTO_TEST_CASE(NeonDetectionPostProcessRegularNmsUint8Test)
554{
555 armnn::TensorInfo boxEncodingsInfo({ 1, 6, 4 }, armnn::DataType::Float32);
556 armnn::TensorInfo scoresInfo({ 1, 6, 3 }, armnn::DataType::Float32);
557 armnn::TensorInfo anchorsInfo({ 6, 4 }, armnn::DataType::Float32);
558
559 boxEncodingsInfo.SetQuantizationScale(1.0f);
560 boxEncodingsInfo.SetQuantizationOffset(1);
561 scoresInfo.SetQuantizationScale(0.01f);
562 scoresInfo.SetQuantizationOffset(0);
563 anchorsInfo.SetQuantizationScale(0.5f);
564 anchorsInfo.SetQuantizationOffset(0);
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);
Derek Lambertif90c56d2020-01-10 17:14:08 +0000597 DetectionPostProcessRegularNmsEndToEnd<armnn::DataType::QAsymmU8>(defaultBackends, qBoxEncodings,
Derek Lamberti6a5e5e82019-12-05 14:41:20 +0000598 qScores, qAnchors,
599 1.0f, 1, 0.01f, 0, 0.5f, 0);
600}
601
602BOOST_AUTO_TEST_CASE(NeonDetectionPostProcessFastNmsTest)
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
631BOOST_AUTO_TEST_CASE(RefDetectionPostProcessFastNmsUint8Test)
632{
633 armnn::TensorInfo boxEncodingsInfo({ 1, 6, 4 }, armnn::DataType::Float32);
634 armnn::TensorInfo scoresInfo({ 1, 6, 3 }, armnn::DataType::Float32);
635 armnn::TensorInfo anchorsInfo({ 6, 4 }, armnn::DataType::Float32);
636
637 boxEncodingsInfo.SetQuantizationScale(1.0f);
638 boxEncodingsInfo.SetQuantizationOffset(1);
639 scoresInfo.SetQuantizationScale(0.01f);
640 scoresInfo.SetQuantizationOffset(0);
641 anchorsInfo.SetQuantizationScale(0.5f);
642 anchorsInfo.SetQuantizationOffset(0);
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);
Derek Lambertif90c56d2020-01-10 17:14:08 +0000675 DetectionPostProcessFastNmsEndToEnd<armnn::DataType::QAsymmU8>(defaultBackends, qBoxEncodings,
Derek Lamberti6a5e5e82019-12-05 14:41:20 +0000676 qScores, qAnchors,
677 1.0f, 1, 0.01f, 0, 0.5f, 0);
678}
679
Aron Virginas-Tar70104002018-10-24 15:33:28 +0100680BOOST_AUTO_TEST_SUITE_END()