blob: 108ea79070ec11e16bfff31f7d780cf68a08c7d3 [file] [log] [blame]
telsoa014fcda012018-03-09 14:13:49 +00001//
2// Copyright © 2017 Arm Ltd. All rights reserved.
David Beckecb56cd2018-09-05 12:52:57 +01003// SPDX-License-Identifier: MIT
telsoa014fcda012018-03-09 14:13:49 +00004//
5#pragma once
6
Aron Virginas-Tarc9cc8042018-11-01 16:15:57 +00007#include <armnn/ArmNN.hpp>
8#include <armnn/Tensor.hpp>
9
10#include <Half.hpp>
Francis Murtagh46c09d02019-05-28 08:15:28 +010011#include "TensorCopyUtils.hpp"
12#include "WorkloadTestUtils.hpp"
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +010013#include "TensorUtils.hpp"
14#include "Permute.hpp"
telsoa014fcda012018-03-09 14:13:49 +000015
Francis Murtagh46c09d02019-05-28 08:15:28 +010016#include <backendsCommon/CpuTensorHandle.hpp>
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +000017#include <backendsCommon/IBackendInternal.hpp>
18#include <backendsCommon/IMemoryManager.hpp>
Francis Murtagh46c09d02019-05-28 08:15:28 +010019#include <reference/workloads/Decoders.hpp>
20#include <reference/workloads/Encoders.hpp>
21#include <test/TensorHelpers.hpp>
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +000022
telsoa014fcda012018-03-09 14:13:49 +000023#include <boost/multi_array.hpp>
24#include <boost/assert.hpp>
Aron Virginas-Tarc9cc8042018-11-01 16:15:57 +000025
telsoa014fcda012018-03-09 14:13:49 +000026#include <array>
27
telsoa01c577f2c2018-08-31 09:22:23 +010028// Layer callables.
telsoa014fcda012018-03-09 14:13:49 +000029
30namespace armnn
31{
32class IWorkloadFactory;
33}
34
35template <std::size_t n>
36boost::array<unsigned int, n> GetTensorShapeAsArray(const armnn::TensorInfo& tensorInfo)
37{
38 BOOST_ASSERT_MSG(n == tensorInfo.GetNumDimensions(),
39 "Attempting to construct a shape array of mismatching size");
40
41 boost::array<unsigned int, n> shape;
42 for (unsigned int i = 0; i < n; i++)
43 {
44 shape[i] = tensorInfo.GetShape()[i];
45 }
46 return shape;
47}
48
49template <typename T, std::size_t n>
50struct LayerTestResult
51{
52 LayerTestResult(const armnn::TensorInfo& outputInfo)
53 {
54 auto shape( GetTensorShapeAsArray<n>(outputInfo) );
55 output.resize(shape);
56 outputExpected.resize(shape);
57 supported = true;
kevmay012b4d88e2019-01-24 14:05:09 +000058 compareBoolean = false;
telsoa014fcda012018-03-09 14:13:49 +000059 }
60
61 boost::multi_array<T, n> output;
62 boost::multi_array<T, n> outputExpected;
63 bool supported;
kevmay012b4d88e2019-01-24 14:05:09 +000064 bool compareBoolean;
telsoa014fcda012018-03-09 14:13:49 +000065};
66
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +000067LayerTestResult<float, 4> SimpleConvolution2d3x5Test(
68 armnn::IWorkloadFactory& workloadFactory,
69 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
70 bool biasEnabled,
Matthew Bentham8800c002018-11-19 13:19:28 +000071 const armnn::DataLayout layout);
telsoa014fcda012018-03-09 14:13:49 +000072
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +000073LayerTestResult<float, 4> SimpleConvolution2d3x3Test(
74 armnn::IWorkloadFactory& workloadFactory,
75 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
76 bool biasEnabled,
Matthew Bentham8800c002018-11-19 13:19:28 +000077 const armnn::DataLayout layout);
Francis Murtaghd59116e2018-10-04 16:03:07 +010078
Mike Kelly7332ed82018-12-20 17:03:06 +000079LayerTestResult<float, 4> SimpleConvolution2d3x3Stride2x2Test(
80 armnn::IWorkloadFactory& workloadFactory,
81 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
82 bool biasEnabled,
83 const armnn::DataLayout layout);
84
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +000085LayerTestResult<float, 4> SimpleConvolution2d3x3NhwcTest(
86 armnn::IWorkloadFactory& workloadFactory,
87 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
88 bool biasEnabled);
telsoa014fcda012018-03-09 14:13:49 +000089
Teresa Charlinedeeb162019-06-14 11:09:19 +010090LayerTestResult<float, 4> Convolution2dAsymmetricPaddingLargerThanHalfKernelSizeTest(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +000091 armnn::IWorkloadFactory& workloadFactory,
92 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Teresa Charlinedeeb162019-06-14 11:09:19 +010093 armnn::DataLayout layout);
telsoa014fcda012018-03-09 14:13:49 +000094
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +000095LayerTestResult<float, 4> Convolution2dAsymmetricPaddingTest(
96 armnn::IWorkloadFactory& workloadFactory,
97 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Teresa Charlinedeeb162019-06-14 11:09:19 +010098 armnn::DataLayout layout);
telsoa014fcda012018-03-09 14:13:49 +000099
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000100LayerTestResult<float, 4> Convolution1dTest(
101 armnn::IWorkloadFactory& workloadFactory,
102 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
103 bool biasEnabled);
telsoa014fcda012018-03-09 14:13:49 +0000104
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000105LayerTestResult<uint8_t, 4> Convolution1dUint8Test(
106 armnn::IWorkloadFactory& workloadFactory,
107 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
108 bool biasEnabled);
telsoa014fcda012018-03-09 14:13:49 +0000109
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000110LayerTestResult<float, 4> DepthwiseConvolution2dTest(
111 armnn::IWorkloadFactory& workloadFactory,
112 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
113 bool biasEnabled,
Matthew Bentham8800c002018-11-19 13:19:28 +0000114 const armnn::DataLayout layout);
Nikhil Rajcec6b652018-10-12 13:51:57 +0100115
Teresa Charlinedeeb162019-06-14 11:09:19 +0100116template<armnn::DataType ArmnnType, armnn::DataType ArmnnBType, typename T = armnn::ResolveType<ArmnnType>>
117LayerTestResult<T, 4> Convolution2d3x3Dilation3x3Test(
118 armnn::IWorkloadFactory& workloadFactory,
119 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
120 bool biasEnabled,
121 const armnn::DataLayout layout);
122
123template<armnn::DataType ArmnnType, armnn::DataType ArmnnBType, typename T = armnn::ResolveType<ArmnnType>>
124LayerTestResult<T, 4> Convolution2d2x3x3Dilation3x3Test(
125 armnn::IWorkloadFactory& workloadFactory,
126 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
127 bool biasEnabled,
128 const armnn::DataLayout layout);
129
Teresa Charlin20b1f882019-06-19 09:34:37 +0100130template<armnn::DataType ArmnnType, armnn::DataType ArmnnBType, typename T = armnn::ResolveType<ArmnnType>>
131LayerTestResult<T, 4> DepthwiseConvolution2d3x3Dilation3x3Test(
132 armnn::IWorkloadFactory& workloadFactory,
133 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
134 bool biasEnabled,
135 const armnn::DataLayout layout);
136
137template<armnn::DataType ArmnnType, armnn::DataType ArmnnBType, typename T = armnn::ResolveType<ArmnnType>>
138LayerTestResult<T, 4> DepthwiseConvolution2d2x3x3Dilation3x3Test(
139 armnn::IWorkloadFactory& workloadFactory,
140 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
141 bool biasEnabled,
142 const armnn::DataLayout layout);
143
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000144LayerTestResult<float, 4> DepthwiseConvolution2dDepthNhwcTest(
145 armnn::IWorkloadFactory& workloadFactory,
146 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
147 bool biasEnabled);
telsoa014fcda012018-03-09 14:13:49 +0000148
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000149LayerTestResult<float, 4> DepthwiseConvolution2dDepthMul1Test(
150 armnn::IWorkloadFactory& workloadFactory,
151 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
152 bool biasEnabled,
Matthew Bentham8800c002018-11-19 13:19:28 +0000153 const armnn::DataLayout layout);
surmeh013537c2c2018-05-18 16:31:43 +0100154
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000155LayerTestResult<float, 4> DepthwiseConvolution2dAsymmetricTest(
156 armnn::IWorkloadFactory& workloadFactory,
157 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
158 bool biasEnabled,
Matthew Bentham8800c002018-11-19 13:19:28 +0000159 const armnn::DataLayout layout);
telsoa014fcda012018-03-09 14:13:49 +0000160
Teresa Charlin20b1f882019-06-19 09:34:37 +0100161LayerTestResult<float, 4> SimpleDepthwiseConvolution2d3x3Dilation3x3NhwcTest(
162 armnn::IWorkloadFactory& workloadFactory,
163 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Bruno Goncalves22972f02019-04-26 21:03:24 -0300164
Nattapat Chaimanowong649dd952019-01-22 16:10:44 +0000165LayerTestResult<float, 4> CompareDepthwiseConvolution2dFloatTest(
166 armnn::IWorkloadFactory& workloadFactory,
167 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
168 armnn::IWorkloadFactory& refWorkloadFactory,
169 const armnn::DataLayout layout);
170
171LayerTestResult<uint8_t, 4> CompareDepthwiseConvolution2dUint8Test(
172 armnn::IWorkloadFactory& workloadFactory,
173 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
174 armnn::IWorkloadFactory& refWorkloadFactory,
175 const armnn::DataLayout layout);
176
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000177LayerTestResult<float, 4> SimpleMaxPooling2dSize2x2Stride2x2Test(
178 armnn::IWorkloadFactory& workloadFactory,
179 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
180 bool forceNoPadding);
James Conroy45a9b772018-10-31 11:47:53 +0000181
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000182LayerTestResult<uint8_t, 4> SimpleMaxPooling2dSize2x2Stride2x2Uint8Test(
183 armnn::IWorkloadFactory& workloadFactory,
184 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
185 bool forceNoPadding);
James Conroy45a9b772018-10-31 11:47:53 +0000186
Teresa Charlin0434df62019-06-06 13:40:35 +0100187LayerTestResult<int16_t, 4> SimpleMaxPooling2dSize2x2Stride2x2Int16Test(
188 armnn::IWorkloadFactory& workloadFactory,
189 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
190 bool forceNoPadding);
191
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000192LayerTestResult<float, 4> SimpleMaxPooling2dSize3x3Stride2x4Test(
193 armnn::IWorkloadFactory& workloadFactory,
194 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
195 bool forceNoPadding);
196
197LayerTestResult<uint8_t, 4> SimpleMaxPooling2dSize3x3Stride2x4Uint8Test(
198 armnn::IWorkloadFactory& workloadFactory,
199 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
200 bool forceNoPadding );
201
Teresa Charlin0434df62019-06-06 13:40:35 +0100202LayerTestResult<int16_t, 4> SimpleMaxPooling2dSize3x3Stride2x4Int16Test(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000203 armnn::IWorkloadFactory& workloadFactory,
Teresa Charlin0434df62019-06-06 13:40:35 +0100204 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
205 bool forceNoPadding );
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000206
207LayerTestResult<float, 4> SimpleMaxPooling2dTest(
208 armnn::IWorkloadFactory& workloadFactory,
209 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Matthew Bentham8800c002018-11-19 13:19:28 +0000210 const armnn::DataLayout dataLayout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000211
212LayerTestResult<uint8_t, 4> SimpleMaxPooling2dUint8Test(
213 armnn::IWorkloadFactory& workloadFactory,
214 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Matthew Bentham8800c002018-11-19 13:19:28 +0000215 const armnn::DataLayout dataLayout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000216
Teresa Charlin0434df62019-06-06 13:40:35 +0100217LayerTestResult<int16_t, 4> SimpleMaxPooling2dInt16Test(
218 armnn::IWorkloadFactory& workloadFactory,
219 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
220 const armnn::DataLayout dataLayout);
221
222LayerTestResult<float, 4> IgnorePaddingSimpleMaxPooling2dTest(
223 armnn::IWorkloadFactory& workloadFactory,
224 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
225
226LayerTestResult<uint8_t, 4> IgnorePaddingSimpleMaxPooling2dUint8Test(
227 armnn::IWorkloadFactory& workloadFactory,
228 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
229
230LayerTestResult<int16_t, 4> IgnorePaddingSimpleMaxPooling2dInt16Test(
231 armnn::IWorkloadFactory& workloadFactory,
232 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
233
234LayerTestResult<float, 4> IgnorePaddingMaxPooling2dSize3Test(
235 armnn::IWorkloadFactory& workloadFactory,
236 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
237
238LayerTestResult<uint8_t, 4> IgnorePaddingMaxPooling2dSize3Uint8Test(
239 armnn::IWorkloadFactory& workloadFactory,
240 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
241
242LayerTestResult<int16_t, 4> IgnorePaddingMaxPooling2dSize3Int16Test(
243 armnn::IWorkloadFactory& workloadFactory,
244 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
245
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000246LayerTestResult<float, 4> SimpleAveragePooling2dTest(
247 armnn::IWorkloadFactory& workloadFactory,
248 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Matthew Bentham8800c002018-11-19 13:19:28 +0000249 const armnn::DataLayout dataLayout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000250
251LayerTestResult<uint8_t, 4> SimpleAveragePooling2dUint8Test(
252 armnn::IWorkloadFactory& workloadFactory,
253 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Matthew Bentham8800c002018-11-19 13:19:28 +0000254 const armnn::DataLayout dataLayout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000255
Teresa Charlin0434df62019-06-06 13:40:35 +0100256LayerTestResult<int16_t, 4> SimpleAveragePooling2dInt16Test(
257 armnn::IWorkloadFactory& workloadFactory,
258 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
259 const armnn::DataLayout dataLayout);
260
261LayerTestResult<float, 4> LargeTensorsAveragePooling2dTest(
262 armnn::IWorkloadFactory& workloadFactory,
263 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
264
265LayerTestResult<uint8_t, 4> LargeTensorsAveragePooling2dUint8Test(
266 armnn::IWorkloadFactory& workloadFactory,
267 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
268
269LayerTestResult<int16_t, 4> LargeTensorsAveragePooling2dInt16Test(
270 armnn::IWorkloadFactory& workloadFactory,
271 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
272
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000273LayerTestResult<float, 4> IgnorePaddingAveragePooling2dSize3x2Stride2x2Test(
274 armnn::IWorkloadFactory& workloadFactory,
275 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
276 bool forceNoPadding);
277
278LayerTestResult<float, 4> IgnorePaddingSimpleAveragePooling2dTest(
279 armnn::IWorkloadFactory& workloadFactory,
280 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
281
282LayerTestResult<uint8_t, 4> IgnorePaddingSimpleAveragePooling2dUint8Test(
283 armnn::IWorkloadFactory& workloadFactory,
284 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
285
Teresa Charlin0434df62019-06-06 13:40:35 +0100286LayerTestResult<int16_t, 4> IgnorePaddingSimpleAveragePooling2dInt16Test(
287 armnn::IWorkloadFactory& workloadFactory,
288 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
289
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000290LayerTestResult<float, 4> IgnorePaddingSimpleAveragePooling2dNoPaddingTest(
291 armnn::IWorkloadFactory& workloadFactory,
292 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
293
telsoa014fcda012018-03-09 14:13:49 +0000294LayerTestResult<uint8_t, 4> IgnorePaddingSimpleAveragePooling2dNoPaddingUint8Test(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000295 armnn::IWorkloadFactory& workloadFactory,
296 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000297
Teresa Charlin0434df62019-06-06 13:40:35 +0100298LayerTestResult<int16_t, 4> IgnorePaddingSimpleAveragePooling2dNoPaddingInt16Test(
299 armnn::IWorkloadFactory& workloadFactory,
300 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
301
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000302LayerTestResult<float, 4> IgnorePaddingAveragePooling2dSize3Test(
303 armnn::IWorkloadFactory& workloadFactory,
304 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000305
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000306LayerTestResult<uint8_t, 4> IgnorePaddingAveragePooling2dSize3Uint8Test(
307 armnn::IWorkloadFactory& workloadFactory,
308 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000309
Teresa Charlin0434df62019-06-06 13:40:35 +0100310LayerTestResult<int16_t, 4> IgnorePaddingAveragePooling2dSize3Int16Test(
311 armnn::IWorkloadFactory& workloadFactory,
312 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
313
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000314LayerTestResult<float, 4> SimpleL2Pooling2dTest(
315 armnn::IWorkloadFactory& workloadFactory,
316 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Matthew Bentham8800c002018-11-19 13:19:28 +0000317 const armnn::DataLayout dataLayout);
telsoa014fcda012018-03-09 14:13:49 +0000318
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000319LayerTestResult<uint8_t, 4> SimpleL2Pooling2dUint8Test(
320 armnn::IWorkloadFactory& workloadFactory,
321 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Matthew Bentham8800c002018-11-19 13:19:28 +0000322 const armnn::DataLayout dataLayout);
telsoa014fcda012018-03-09 14:13:49 +0000323
Teresa Charlin0434df62019-06-06 13:40:35 +0100324LayerTestResult<int16_t, 4> SimpleL2Pooling2dInt16Test(
325 armnn::IWorkloadFactory& workloadFactory,
326 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
327 const armnn::DataLayout dataLayout);
328
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000329LayerTestResult<float, 4> L2Pooling2dSize3Stride1Test(
330 armnn::IWorkloadFactory& workloadFactory,
331 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000332
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000333LayerTestResult<uint8_t, 4> L2Pooling2dSize3Stride1Uint8Test(
334 armnn::IWorkloadFactory& workloadFactory,
335 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000336
Teresa Charlin0434df62019-06-06 13:40:35 +0100337LayerTestResult<int16_t, 4> L2Pooling2dSize3Stride1Int16Test(
338 armnn::IWorkloadFactory& workloadFactory,
339 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
340
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000341LayerTestResult<float, 4> L2Pooling2dSize3Stride3Test(
342 armnn::IWorkloadFactory& workloadFactory,
343 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000344
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000345LayerTestResult<uint8_t, 4> L2Pooling2dSize3Stride3Uint8Test(
346 armnn::IWorkloadFactory& workloadFactory,
347 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000348
Teresa Charlin0434df62019-06-06 13:40:35 +0100349LayerTestResult<int16_t, 4> L2Pooling2dSize3Stride3Int16Test(
350 armnn::IWorkloadFactory& workloadFactory,
351 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
352
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000353LayerTestResult<float, 4> L2Pooling2dSize3Stride4Test(
354 armnn::IWorkloadFactory& workloadFactory,
355 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000356
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000357LayerTestResult<uint8_t, 4> L2Pooling2dSize3Stride4Uint8Test(
358 armnn::IWorkloadFactory& workloadFactory,
359 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000360
Teresa Charlin0434df62019-06-06 13:40:35 +0100361LayerTestResult<int16_t, 4> L2Pooling2dSize3Stride4Int16Test(
362 armnn::IWorkloadFactory& workloadFactory,
363 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
364
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000365LayerTestResult<float, 4> L2Pooling2dSize7Test(
366 armnn::IWorkloadFactory& workloadFactory,
367 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000368
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000369LayerTestResult<uint8_t, 4> L2Pooling2dSize7Uint8Test(
370 armnn::IWorkloadFactory& workloadFactory,
371 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000372
Teresa Charlin0434df62019-06-06 13:40:35 +0100373LayerTestResult<int16_t, 4> L2Pooling2dSize7Int16Test(
374 armnn::IWorkloadFactory& workloadFactory,
375 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
376
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000377LayerTestResult<float, 4> L2Pooling2dSize9Test(
378 armnn::IWorkloadFactory& workloadFactory,
379 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000380
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000381LayerTestResult<uint8_t, 4> L2Pooling2dSize9Uint8Test(
382 armnn::IWorkloadFactory& workloadFactory,
383 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
384
Teresa Charlin0434df62019-06-06 13:40:35 +0100385LayerTestResult<int16_t, 4> L2Pooling2dSize9Int16Test(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000386 armnn::IWorkloadFactory& workloadFactory,
387 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
388
389LayerTestResult<float, 4> IgnorePaddingSimpleL2Pooling2dTest(
390 armnn::IWorkloadFactory& workloadFactory,
391 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
392
393LayerTestResult<uint8_t, 4> IgnorePaddingSimpleL2Pooling2dUint8Test(
394 armnn::IWorkloadFactory& workloadFactory,
395 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
396
Teresa Charlin0434df62019-06-06 13:40:35 +0100397LayerTestResult<int16_t, 4> IgnorePaddingSimpleL2Pooling2dInt16Test(
398 armnn::IWorkloadFactory& workloadFactory,
399 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
400
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000401LayerTestResult<float, 4> IgnorePaddingL2Pooling2dSize3Test(
402 armnn::IWorkloadFactory& workloadFactory,
403 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
404
405LayerTestResult<uint8_t, 4> IgnorePaddingL2Pooling2dSize3Uint8Test(
406 armnn::IWorkloadFactory& workloadFactory,
407 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
408
Teresa Charlin0434df62019-06-06 13:40:35 +0100409LayerTestResult<int16_t, 4> IgnorePaddingL2Pooling2dSize3Int16Test(
410 armnn::IWorkloadFactory& workloadFactory,
411 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
412
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000413LayerTestResult<float, 4> AsymmetricNonSquarePooling2dTest(
414 armnn::IWorkloadFactory& workloadFactory,
415 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
416
417LayerTestResult<uint8_t, 4> AsymmetricNonSquarePooling2dUint8Test(
418 armnn::IWorkloadFactory& workloadFactory,
419 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
420
Teresa Charlin0434df62019-06-06 13:40:35 +0100421LayerTestResult<int16_t, 4> AsymmetricNonSquarePooling2dInt16Test(
422 armnn::IWorkloadFactory& workloadFactory,
423 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
424
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000425LayerTestResult<float, 4> ComparePooling2dTest(
426 armnn::IWorkloadFactory& workloadFactory,
427 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
428 armnn::IWorkloadFactory& refWorkloadFactory,
429 armnn::PoolingAlgorithm poolingType);
430
431LayerTestResult<uint8_t, 4> ComparePooling2dUint8Test(
432 armnn::IWorkloadFactory& workloadFactory,
433 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
434 armnn::IWorkloadFactory& refWorkloadFactory,
435 armnn::PoolingAlgorithm poolingType);
436
Teresa Charlin0434df62019-06-06 13:40:35 +0100437LayerTestResult<int16_t, 4> ComparePooling2dInt16Test(
438 armnn::IWorkloadFactory& workloadFactory,
439 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
440 armnn::IWorkloadFactory& refWorkloadFactory,
441 armnn::PoolingAlgorithm poolingType);
442
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000443LayerTestResult<float, 4> ConstantLinearActivationTest(
444 armnn::IWorkloadFactory& workloadFactory,
445 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
446
447LayerTestResult<float, 4> SimpleNormalizationAcrossTest(
448 armnn::IWorkloadFactory& workloadFactory,
449 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
450
451LayerTestResult<float, 4> SimpleNormalizationWithinTest(
452 armnn::IWorkloadFactory& workloadFactory,
453 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
454
455LayerTestResult<float,4> SimpleNormalizationAcrossNhwcTest(
456 armnn::IWorkloadFactory& workloadFactory,
457 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
458
459LayerTestResult<float, 2> SimpleSoftmaxTest(
460 armnn::IWorkloadFactory& workloadFactory,
461 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
462 float beta);
463
Narumol Prangnawarat65d30962019-03-14 11:55:03 +0000464LayerTestResult<float, 3> Simple3dSoftmaxTest(
465 armnn::IWorkloadFactory& workloadFactory,
466 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
467 float beta);
468
469LayerTestResult<float, 4> Simple4dSoftmaxTest(
470 armnn::IWorkloadFactory& workloadFactory,
471 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
472 float beta);
473
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000474LayerTestResult<uint8_t, 2> SimpleSoftmaxUint8Test(
475 armnn::IWorkloadFactory& workloadFactory,
476 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
477 float beta);
478
Narumol Prangnawarat65d30962019-03-14 11:55:03 +0000479LayerTestResult<uint8_t,3> Simple3dSoftmaxUint8Test(
480 armnn::IWorkloadFactory& workloadFactory,
481 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
482 float beta);
483
484LayerTestResult<uint8_t,4> Simple4dSoftmaxUint8Test(
485 armnn::IWorkloadFactory& workloadFactory,
486 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
487 float beta);
488
nikraj01248683f2019-05-29 16:46:50 +0100489LayerTestResult<int16_t,2> SimpleSoftmaxUint16Test(
490 armnn::IWorkloadFactory& workloadFactory,
491 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
492 float beta);
493
494LayerTestResult<int16_t,3> Simple3dSoftmaxUint16Test(
495 armnn::IWorkloadFactory& workloadFactory,
496 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
497 float beta);
498
499LayerTestResult<int16_t,4> Simple4dSoftmaxUint16Test(
500 armnn::IWorkloadFactory& workloadFactory,
501 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
502 float beta);
503
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000504LayerTestResult<float, 4> SimpleSigmoidTest(
505 armnn::IWorkloadFactory& workloadFactory,
506 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
507
Nina Drozd8ed4b8c2019-05-29 10:41:04 +0100508template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
509LayerTestResult<T, 4> SimpleReshapeTest(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000510 armnn::IWorkloadFactory& workloadFactory,
511 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
512
513LayerTestResult<float, 4> SimpleFloorTest(
514 armnn::IWorkloadFactory& workloadFactory,
515 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
516
517LayerTestResult<float, 1> Concatenation1dTest(
518 armnn::IWorkloadFactory& workloadFactory,
519 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
520
521LayerTestResult<float, 2> Concatenation2dDim0Test(
522 armnn::IWorkloadFactory& workloadFactory,
523 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
524
525LayerTestResult<float, 2> Concatenation2dDim1Test(
526 armnn::IWorkloadFactory& workloadFactory,
527 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
528
529LayerTestResult<float, 2> Concatenation2dDim0DiffInputDimsTest(
530 armnn::IWorkloadFactory& workloadFactory,
531 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
532
533LayerTestResult<float, 2> Concatenation2dDim1DiffInputDimsTest(
534 armnn::IWorkloadFactory& workloadFactory,
535 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
536
537LayerTestResult<float, 3> Concatenation3dDim0Test(
538 armnn::IWorkloadFactory& workloadFactory,
539 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
540
541LayerTestResult<float, 3> Concatenation3dDim1Test(
542 armnn::IWorkloadFactory& workloadFactory,
543 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
544
545LayerTestResult<float, 3> Concatenation3dDim2Test(
546 armnn::IWorkloadFactory& workloadFactory,
narpra015cdda352018-11-19 15:30:27 +0000547 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
548 bool useSubtensor);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000549
550LayerTestResult<float, 3> Concatenation3dDim0DiffInputDimsTest(
551 armnn::IWorkloadFactory& workloadFactory,
552 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
553
554LayerTestResult<float, 3> Concatenation3dDim1DiffInputDimsTest(
555 armnn::IWorkloadFactory& workloadFactory,
556 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
557
558LayerTestResult<float, 3> Concatenation3dDim2DiffInputDimsTest(
559 armnn::IWorkloadFactory& workloadFactory,
narpra015cdda352018-11-19 15:30:27 +0000560 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
561 bool useSubtensor);
562
563LayerTestResult<float, 4> Concatenation4dDim0Test(
564 armnn::IWorkloadFactory& workloadFactory,
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000565 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
566
narpra015cdda352018-11-19 15:30:27 +0000567LayerTestResult<float, 4> Concatenation4dDim1Test(
568 armnn::IWorkloadFactory& workloadFactory,
569 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
570
571LayerTestResult<float, 4> Concatenation4dDim2Test(
572 armnn::IWorkloadFactory& workloadFactory,
573 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
574
575LayerTestResult<float, 4> Concatenation4dDim3Test(
576 armnn::IWorkloadFactory& workloadFactory,
577 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
578 bool useSubtensor);
579
580LayerTestResult<float, 4> Concatenation4dDiffShapeDim0Test(
581 armnn::IWorkloadFactory& workloadFactory,
582 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
583
584LayerTestResult<float, 4> Concatenation4dDiffShapeDim1Test(
585 armnn::IWorkloadFactory& workloadFactory,
586 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
587
588LayerTestResult<float, 4> Concatenation4dDiffShapeDim2Test(
589 armnn::IWorkloadFactory& workloadFactory,
590 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
591
592LayerTestResult<float, 4> Concatenation4dDiffShapeDim3Test(
593 armnn::IWorkloadFactory& workloadFactory,
594 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
595 bool useSubtensor);
596
597LayerTestResult<uint8_t, 4> Concatenation4dDim0Uint8Test(
598 armnn::IWorkloadFactory& workloadFactory,
599 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
600
601LayerTestResult<uint8_t, 4> Concatenation4dDim1Uint8Test(
602 armnn::IWorkloadFactory& workloadFactory,
603 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
604
605LayerTestResult<uint8_t, 4> Concatenation4dDim2Uint8Test(
606 armnn::IWorkloadFactory& workloadFactory,
607 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
608
609LayerTestResult<uint8_t, 4> Concatenation4dDim3Uint8Test(
610 armnn::IWorkloadFactory& workloadFactory,
611 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
612 bool useSubtensor);
613
614LayerTestResult<uint8_t, 4> Concatenation4dDiffShapeDim0Uint8Test(
615 armnn::IWorkloadFactory& workloadFactory,
616 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
617
618LayerTestResult<uint8_t, 4> Concatenation4dDiffShapeDim1Uint8Test(
619 armnn::IWorkloadFactory& workloadFactory,
620 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
621
622LayerTestResult<uint8_t, 4> Concatenation4dDiffShapeDim2Uint8Test(
623 armnn::IWorkloadFactory& workloadFactory,
624 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
625
626LayerTestResult<uint8_t, 4> Concatenation4dDiffShapeDim3Uint8Test(
627 armnn::IWorkloadFactory& workloadFactory,
628 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
629 bool useSubtensor);
630
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000631LayerTestResult<uint8_t, 4> SimpleSigmoidUint8Test(
632 armnn::IWorkloadFactory& workloadFactory,
633 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
634
Teresa Charlin18515e22019-04-24 10:17:46 +0100635LayerTestResult<int16_t, 4> SimpleSigmoidInt16Test(
636 armnn::IWorkloadFactory& workloadFactory,
637 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
638
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000639LayerTestResult<float, 4> CompareConvolution2dTest(
640 armnn::IWorkloadFactory& workloadFactory,
641 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
telsoa014fcda012018-03-09 14:13:49 +0000642 armnn::IWorkloadFactory& refWorkloadFactory);
643
644template<typename T>
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000645LayerTestResult<T, 4> CompareDepthwiseConvolution2dTest(
646 armnn::IWorkloadFactory& workloadFactory,
647 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
648 armnn::IWorkloadFactory& refWorkloadFactory,
Matthew Bentham8800c002018-11-19 13:19:28 +0000649 const armnn::DataLayout layout);
telsoa014fcda012018-03-09 14:13:49 +0000650
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000651LayerTestResult<float, 4> CompareNormalizationTest(
652 armnn::IWorkloadFactory& workloadFactory,
653 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
654 armnn::IWorkloadFactory& refWorkloadFactory,
655 armnn::NormalizationAlgorithmChannel normChannel,
656 armnn::NormalizationAlgorithmMethod normMethod);
telsoa014fcda012018-03-09 14:13:49 +0000657
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000658LayerTestResult<float, 2> CompareSoftmaxTest(
659 armnn::IWorkloadFactory& workloadFactory,
660 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
telsoa014fcda012018-03-09 14:13:49 +0000661 armnn::IWorkloadFactory& refWorkloadFactory,
662 float beta);
663
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000664LayerTestResult<float, 2> FullyConnectedFloat32Test(
665 armnn::IWorkloadFactory& workloadFactory,
666 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
667 bool biasEnabled,
668 bool transposeWeights);
telsoa014fcda012018-03-09 14:13:49 +0000669
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000670std::vector<LayerTestResult<float, 3>> SplitterTest(
671 armnn::IWorkloadFactory& workloadFactory,
672 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
David Beck5cd01f32018-09-12 16:00:08 +0100673
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000674LayerTestResult<float, 3> CopyViaSplitterTest(
675 armnn::IWorkloadFactory& workloadFactory,
676 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000677
Jim Flynn4ed6c832019-05-20 11:02:46 +0100678LayerTestResult<float, 3> ConcatTest(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000679 armnn::IWorkloadFactory& workloadFactory,
680 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000681
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000682LayerTestResult<float, 4> AdditionTest(
683 armnn::IWorkloadFactory& workloadFactory,
684 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000685
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000686LayerTestResult<float, 4> AdditionBroadcast1ElementTest(
687 armnn::IWorkloadFactory& workloadFactory,
688 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000689
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000690LayerTestResult<float, 4> AdditionBroadcastTest(
691 armnn::IWorkloadFactory& workloadFactory,
692 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000693
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000694LayerTestResult<float, 4> CompareAdditionTest(
695 armnn::IWorkloadFactory& workloadFactory,
696 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
697 armnn::IWorkloadFactory& refWorkloadFactory);
telsoa014fcda012018-03-09 14:13:49 +0000698
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000699LayerTestResult<float, 4> SubtractionTest(
700 armnn::IWorkloadFactory& workloadFactory,
701 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000702
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000703LayerTestResult<float, 4> SubtractionBroadcast1ElementTest(
704 armnn::IWorkloadFactory& workloadFactory,
705 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000706
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000707LayerTestResult<float, 4> SubtractionBroadcastTest(
708 armnn::IWorkloadFactory& workloadFactory,
709 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000710
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000711LayerTestResult<float, 4> CompareActivationTest(
712 armnn::IWorkloadFactory& workloadFactory,
713 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
714 armnn::IWorkloadFactory& refWorkloadFactory,
715 armnn::ActivationFunction f,
716 unsigned int batchSize);
telsoa014fcda012018-03-09 14:13:49 +0000717
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000718LayerTestResult<float, 4> DivisionTest(
719 armnn::IWorkloadFactory& workloadFactory,
720 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000721
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000722LayerTestResult<float, 4> DivisionByZeroTest(
723 armnn::IWorkloadFactory& workloadFactory,
724 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Mohamed Nour Abouelseoud7420e552018-10-12 12:26:24 +0100725
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000726LayerTestResult<float, 4> DivisionBroadcast1ElementTest(
727 armnn::IWorkloadFactory& workloadFactory,
728 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Mohamed Nour Abouelseoud7420e552018-10-12 12:26:24 +0100729
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000730LayerTestResult<float, 4> DivisionBroadcast1DVectorTest(
731 armnn::IWorkloadFactory& workloadFactory,
732 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa01c577f2c2018-08-31 09:22:23 +0100733
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000734LayerTestResult<float, 4> MultiplicationTest(
735 armnn::IWorkloadFactory& workloadFactory,
736 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa01c577f2c2018-08-31 09:22:23 +0100737
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000738LayerTestResult<float, 4> MultiplicationBroadcast1ElementTest(
739 armnn::IWorkloadFactory& workloadFactory,
740 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
narpra011e4c31d2018-09-28 11:07:51 +0100741
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000742LayerTestResult<float, 4> MultiplicationBroadcast1DVectorTest(
743 armnn::IWorkloadFactory& workloadFactory,
744 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
narpra011e4c31d2018-09-28 11:07:51 +0100745
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000746LayerTestResult<float, 4> CompareMultiplicationTest(
747 armnn::IWorkloadFactory& workloadFactory,
748 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
749 armnn::IWorkloadFactory& refWorkloadFactory);
Matteo Martincigh28dcab62018-10-19 16:40:03 +0100750
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000751LayerTestResult<float, 4> BatchNormTest(
752 armnn::IWorkloadFactory& workloadFactory,
753 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Nattapat Chaimanowong3ea76d52018-11-09 14:10:38 +0000754
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000755LayerTestResult<float, 4> BatchNormNhwcTest(
756 armnn::IWorkloadFactory& workloadFactory,
757 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Nattapat Chaimanowong3ea76d52018-11-09 14:10:38 +0000758
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000759LayerTestResult<float, 4> CompareBatchNormTest(
760 armnn::IWorkloadFactory& workloadFactory,
761 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
762 armnn::IWorkloadFactory& refWorkloadFactory);
Nattapat Chaimanowong3ea76d52018-11-09 14:10:38 +0000763
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000764LayerTestResult<float, 4> BoundedReLuUpperAndLowerBoundTest(
765 armnn::IWorkloadFactory& workloadFactory,
766 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Nattapat Chaimanowong3ea76d52018-11-09 14:10:38 +0000767
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000768LayerTestResult<uint8_t, 4> BoundedReLuUint8UpperAndLowerBoundTest(
769 armnn::IWorkloadFactory& workloadFactor,
770 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManagery);
Éanna Ó Catháin4e1e1362018-11-12 11:36:34 +0000771
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000772LayerTestResult<float, 4> BoundedReLuUpperBoundOnlyTest(
773 armnn::IWorkloadFactory& workloadFactory,
774 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Éanna Ó Catháin4e1e1362018-11-12 11:36:34 +0000775
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000776LayerTestResult<uint8_t, 4> BoundedReLuUint8UpperBoundOnlyTest(
777 armnn::IWorkloadFactory& workloadFactory,
778 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Éanna Ó Catháin262553e2018-11-14 11:26:23 +0000779
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000780LayerTestResult<float, 4> CompareBoundedReLuTest(
781 armnn::IWorkloadFactory& workloadFactory,
782 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
783 armnn::IWorkloadFactory& refWorkloadFactory,
784 float upperBound,
785 float lowerBound);
786
konsof017f6db402019-06-07 15:15:58 +0100787LayerTestResult<float, 4> ReLuTest(
788 armnn::IWorkloadFactory& workloadFactory,
789 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
790
791LayerTestResult<uint8_t, 4> ReLuUint8Test(
792 armnn::IWorkloadFactory& workloadFactory,
793 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Teresa Charlin18515e22019-04-24 10:17:46 +0100794
795LayerTestResult<int16_t, 4> ReLuInt16Test(
796 armnn::IWorkloadFactory& workloadFactory,
797 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
798
799LayerTestResult<int16_t, 4> BoundedReLuInt16Test(
800 armnn::IWorkloadFactory& workloadFactory,
801 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
802
konsof017f6db402019-06-07 15:15:58 +0100803LayerTestResult<float, 4> SoftReLuTest(
804 armnn::IWorkloadFactory& workloadFactory,
805 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
806
807LayerTestResult<uint8_t, 4> SoftReLuUint8Test(
808 armnn::IWorkloadFactory& workloadFactory,
809 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
810
Teresa Charlin18515e22019-04-24 10:17:46 +0100811LayerTestResult<int16_t, 4> SoftReLuInt16Test(
812 armnn::IWorkloadFactory& workloadFactory,
813 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
814
konsof017f6db402019-06-07 15:15:58 +0100815LayerTestResult<float, 4> LeakyReLuTest(
816 armnn::IWorkloadFactory& workloadFactory,
817 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
818
819LayerTestResult<uint8_t, 4> LeakyReLuUint8Test(
820 armnn::IWorkloadFactory& workloadFactory,
821 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
822
Teresa Charlin18515e22019-04-24 10:17:46 +0100823LayerTestResult<int16_t, 4> LeakyReLuInt16Test(
824 armnn::IWorkloadFactory& workloadFactory,
825 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
826
konsof017f6db402019-06-07 15:15:58 +0100827LayerTestResult<float, 4> AbsTest(
828 armnn::IWorkloadFactory& workloadFactory,
829 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
830
831LayerTestResult<uint8_t, 4> AbsUint8Test(
832 armnn::IWorkloadFactory& workloadFactory,
833 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
834
Teresa Charlin18515e22019-04-24 10:17:46 +0100835LayerTestResult<int16_t, 4> AbsInt16Test(
836 armnn::IWorkloadFactory& workloadFactory,
837 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
838
konsof017f6db402019-06-07 15:15:58 +0100839LayerTestResult<float, 4> SqrtTest(
840 armnn::IWorkloadFactory& workloadFactory,
841 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
842
843LayerTestResult<uint8_t, 4> SqrtUint8Test(
844 armnn::IWorkloadFactory& workloadFactory,
845 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
846
Teresa Charlin18515e22019-04-24 10:17:46 +0100847LayerTestResult<int16_t, 4> SqrtInt16Test(
848 armnn::IWorkloadFactory& workloadFactory,
849 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
850
konsof017f6db402019-06-07 15:15:58 +0100851LayerTestResult<float, 4> SquareTest(
852 armnn::IWorkloadFactory& workloadFactory,
853 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
854
855LayerTestResult<uint8_t, 4> SquareUint8Test(
856 armnn::IWorkloadFactory& workloadFactory,
857 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
858
Teresa Charlin18515e22019-04-24 10:17:46 +0100859LayerTestResult<int16_t, 4> SquareInt16Test(
860 armnn::IWorkloadFactory& workloadFactory,
861 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
862
konsof017f6db402019-06-07 15:15:58 +0100863LayerTestResult<float, 4> TanhTest(
864 armnn::IWorkloadFactory& workloadFactory,
865 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
866
867LayerTestResult<uint8_t, 4> TanhUint8Test(
868 armnn::IWorkloadFactory& workloadFactory,
869 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
870
Teresa Charlin18515e22019-04-24 10:17:46 +0100871LayerTestResult<int16_t, 4> TanhInt16Test(
872 armnn::IWorkloadFactory& workloadFactory,
873 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
874
875
Teresa Charlin970f43b2019-07-01 13:51:07 +0100876// Tests that the output should be identical to the input when the output dimensions match the input ones.
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +0100877template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
878LayerTestResult<T, 4> ResizeBilinearNopTest(
879 armnn::IWorkloadFactory& workloadFactory,
880 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
881 const armnn::DataLayout dataLayout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000882
883// Tests the behaviour of the resize bilinear operation when rescaling a 2x2 image into a 1x1 image.
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +0100884template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
885LayerTestResult<T, 4> SimpleResizeBilinearTest(
886 armnn::IWorkloadFactory& workloadFactory,
887 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
888 const armnn::DataLayout dataLayout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000889
890// Tests the resize bilinear for minification of a square input matrix (also: input dimensions are a
891// multiple of output dimensions).
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +0100892template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
893LayerTestResult<T, 4> ResizeBilinearSqMinTest(
894 armnn::IWorkloadFactory& workloadFactory,
895 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
896 const armnn::DataLayout dataLayout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000897
898// Tests the resize bilinear for minification (output dimensions smaller than input dimensions).
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +0100899template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
900LayerTestResult<T, 4> ResizeBilinearMinTest(
901 armnn::IWorkloadFactory& workloadFactory,
902 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
903 const armnn::DataLayout dataLayout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000904
905// Tests the resize bilinear for magnification (output dimensions bigger than input dimensions).
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +0100906template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
907LayerTestResult<T, 4> ResizeBilinearMagTest(
908 armnn::IWorkloadFactory& workloadFactory,
909 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
910 const armnn::DataLayout dataLayout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000911
Teresa Charlin970f43b2019-07-01 13:51:07 +0100912// Tests that the output should be identical to the input when the output dimensions match the input ones.
913template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
914LayerTestResult<T, 4> ResizeNearestNeighborNopTest(
915 armnn::IWorkloadFactory& workloadFactory,
916 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
917 const armnn::DataLayout dataLayout);
918
919// Tests the behaviour of the resize NearestNeighbor operation when rescaling a 2x2 image into a 1x1 image.
920template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
921LayerTestResult<T, 4> SimpleResizeNearestNeighborTest(
922 armnn::IWorkloadFactory& workloadFactory,
923 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
924 const armnn::DataLayout dataLayout);
925
926// Tests the resize NearestNeighbor for minification of a square input matrix (also: input dimensions are a
927// multiple of output dimensions).
928template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
929LayerTestResult<T, 4> ResizeNearestNeighborSqMinTest(
930 armnn::IWorkloadFactory& workloadFactory,
931 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
932 const armnn::DataLayout dataLayout);
933
934// Tests the resize NearestNeighbor for minification (output dimensions smaller than input dimensions).
935template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
936LayerTestResult<T, 4> ResizeNearestNeighborMinTest(
937 armnn::IWorkloadFactory& workloadFactory,
938 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
939 const armnn::DataLayout dataLayout);
940
941// Tests the resize NearestNeighbor for magnification (output dimensions bigger than input dimensions).
942template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
943LayerTestResult<T, 4> ResizeNearestNeighborMagTest(
944 armnn::IWorkloadFactory& workloadFactory,
945 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
946 const armnn::DataLayout dataLayout);
947
nikraj0193f84a92019-06-05 10:48:46 +0100948template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
949LayerTestResult<T, 2> Rsqrt2dTestCommon(
Mohamed Nour Abouelseouda1d3c6a2018-12-27 12:39:16 +0000950 armnn::IWorkloadFactory& workloadFactory,
951 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
952 const armnn::TensorInfo inputTensorInfo,
953 const armnn::TensorInfo outputTensorInfo,
nikraj010421e7f2019-06-14 09:40:34 +0100954 const std::vector<float>& inputValues,
955 const std::vector<float>& expectedOutputValues);
Mohamed Nour Abouelseouda1d3c6a2018-12-27 12:39:16 +0000956
nikraj0193f84a92019-06-05 10:48:46 +0100957template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
958LayerTestResult<T, 2> Rsqrt2dTest(
Mohamed Nour Abouelseouda1d3c6a2018-12-27 12:39:16 +0000959 armnn::IWorkloadFactory& workloadFactory,
960 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
961
nikraj0193f84a92019-06-05 10:48:46 +0100962template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
963LayerTestResult<T, 3> Rsqrt3dTest(
Mohamed Nour Abouelseouda1d3c6a2018-12-27 12:39:16 +0000964 armnn::IWorkloadFactory& workloadFactory,
965 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
966
nikraj0193f84a92019-06-05 10:48:46 +0100967template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
968LayerTestResult<T, 2> RsqrtZeroTest(
Mohamed Nour Abouelseouda1d3c6a2018-12-27 12:39:16 +0000969 armnn::IWorkloadFactory& workloadFactory,
970 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
971
nikraj0193f84a92019-06-05 10:48:46 +0100972template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
973LayerTestResult<T, 2> RsqrtNegativeTest(
Mohamed Nour Abouelseouda1d3c6a2018-12-27 12:39:16 +0000974 armnn::IWorkloadFactory& workloadFactory,
975 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
976
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000977LayerTestResult<float, 4> BatchNormTest(
978 armnn::IWorkloadFactory& workloadFactory,
979 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
980
981LayerTestResult<float, 4> BatchNormNhwcTest(
982 armnn::IWorkloadFactory& workloadFactory,
983 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
984
985LayerTestResult<float, 2> FakeQuantizationTest(
986 armnn::IWorkloadFactory& workloadFactory,
987 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
988
Ferran Balaguere52211e2019-06-17 12:23:52 +0100989LayerTestResult<float, 4> L2NormalizationDefaultEpsilonTest(
990 armnn::IWorkloadFactory& workloadFactory,
991 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
992 const armnn::DataLayout layout);
993
994LayerTestResult<float, 4> L2NormalizationNonDefaultEpsilonTest(
995 armnn::IWorkloadFactory& workloadFactory,
996 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
997 const armnn::DataLayout layout);
998
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000999LayerTestResult<float, 4> L2Normalization1dTest(
1000 armnn::IWorkloadFactory& workloadFactory,
1001 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Matthew Bentham8800c002018-11-19 13:19:28 +00001002 const armnn::DataLayout layout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001003
Ferran Balaguerd73d14f2019-06-10 10:29:54 +01001004LayerTestResult<int16_t, 4> L2Normalization1dInt16Test(
1005 armnn::IWorkloadFactory& workloadFactory,
1006 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1007 const armnn::DataLayout layout);
1008
Ferran Balaguerc6138d82019-06-13 17:23:50 +01001009LayerTestResult<uint8_t, 4> L2Normalization1dUint8Test(
1010 armnn::IWorkloadFactory& workloadFactory,
1011 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1012 const armnn::DataLayout layout);
1013
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001014LayerTestResult<float, 4> L2Normalization2dTest(
1015 armnn::IWorkloadFactory& workloadFactory,
1016 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Matthew Bentham8800c002018-11-19 13:19:28 +00001017 const armnn::DataLayout layout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001018
Ferran Balaguerd73d14f2019-06-10 10:29:54 +01001019LayerTestResult<int16_t, 4> L2Normalization2dInt16Test(
1020 armnn::IWorkloadFactory& workloadFactory,
1021 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1022 const armnn::DataLayout layout);
1023
Ferran Balaguerc6138d82019-06-13 17:23:50 +01001024LayerTestResult<uint8_t, 4> L2Normalization2dUint8Test(
1025 armnn::IWorkloadFactory& workloadFactory,
1026 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1027 const armnn::DataLayout layout);
1028
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001029LayerTestResult<float, 4> L2Normalization3dTest(
1030 armnn::IWorkloadFactory& workloadFactory,
1031 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Matthew Bentham8800c002018-11-19 13:19:28 +00001032 const armnn::DataLayout layout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001033
Ferran Balaguerd73d14f2019-06-10 10:29:54 +01001034LayerTestResult<int16_t, 4> L2Normalization3dInt16Test(
1035 armnn::IWorkloadFactory& workloadFactory,
1036 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1037 const armnn::DataLayout layout);
1038
Ferran Balaguerc6138d82019-06-13 17:23:50 +01001039LayerTestResult<uint8_t, 4> L2Normalization3dUint8Test(
1040 armnn::IWorkloadFactory& workloadFactory,
1041 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1042 const armnn::DataLayout layout);
1043
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001044LayerTestResult<float, 4> L2Normalization4dTest(
1045 armnn::IWorkloadFactory& workloadFactory,
1046 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Matthew Bentham8800c002018-11-19 13:19:28 +00001047 const armnn::DataLayout layout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001048
Ferran Balaguerd73d14f2019-06-10 10:29:54 +01001049LayerTestResult<int16_t, 4> L2Normalization4dInt16Test(
1050 armnn::IWorkloadFactory& workloadFactory,
1051 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1052 const armnn::DataLayout layout);
1053
Ferran Balaguerc6138d82019-06-13 17:23:50 +01001054LayerTestResult<uint8_t, 4> L2Normalization4dUint8Test(
1055 armnn::IWorkloadFactory& workloadFactory,
1056 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1057 const armnn::DataLayout layout);
1058
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001059LayerTestResult<float, 4> ConstantTest(
1060 armnn::IWorkloadFactory& workloadFactory,
1061 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1062
Nina Drozd58ef2c62019-05-16 12:09:18 +01001063LayerTestResult<uint8_t, 4> ConstantUint8SimpleQuantizationScaleNoOffsetTest(
1064 armnn::IWorkloadFactory& workloadFactory,
1065 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1066
1067LayerTestResult<int16_t, 4> ConstantInt16SimpleQuantizationScaleNoOffsetTest(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001068 armnn::IWorkloadFactory& workloadFactory,
1069 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1070
1071LayerTestResult<uint8_t, 4> BoundedReLuUint8Test(
1072 armnn::IWorkloadFactory& workloadFactory,
1073 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1074 float upperBound);
1075
1076LayerTestResult<uint8_t, 4> BoundedReLuUint8Test(
1077 armnn::IWorkloadFactory& workloadFactory,
1078 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1079 float upperBound,
1080 float lowerBound);
1081
Francis Murtagh46c09d02019-05-28 08:15:28 +01001082template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1083LayerTestResult<T, 2> FullyConnectedTest(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001084 armnn::IWorkloadFactory& workloadFactory,
1085 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1086 bool biasEnabled);
1087
1088std::vector<LayerTestResult<uint8_t, 3>> SplitterUint8Test(
1089 armnn::IWorkloadFactory& workloadFactory,
1090 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1091
Ruomei Yan25339c32019-05-28 16:48:20 +01001092std::vector<LayerTestResult<int16_t, 3>> SplitterInt16Test(
1093 armnn::IWorkloadFactory& workloadFactory,
1094 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1095
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001096LayerTestResult<uint8_t, 3> CopyViaSplitterUint8Test(
1097 armnn::IWorkloadFactory& workloadFactory,
1098 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1099
Ruomei Yan25339c32019-05-28 16:48:20 +01001100LayerTestResult<int16_t, 3> CopyViaSplitterInt16Test(
1101 armnn::IWorkloadFactory& workloadFactory,
1102 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1103
Jim Flynn4ed6c832019-05-20 11:02:46 +01001104LayerTestResult<uint8_t, 3> ConcatUint8Test(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001105 armnn::IWorkloadFactory& workloadFactory,
1106 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1107
Jim Flynn4ed6c832019-05-20 11:02:46 +01001108LayerTestResult<uint16_t, 3> ConcatUint16Test(
Jim Flynncbb66aa2019-05-15 13:03:54 +01001109 armnn::IWorkloadFactory& workloadFactory,
1110 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1111
Jim Flynn4ed6c832019-05-20 11:02:46 +01001112LayerTestResult<uint8_t, 3> ConcatUint8DifferentQParamsTest(
Jim Flynncbb66aa2019-05-15 13:03:54 +01001113 armnn::IWorkloadFactory& workloadFactory,
1114 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Ferran Balaguerb2845652019-02-27 09:42:06 +00001115
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001116LayerTestResult<uint8_t, 4> AdditionUint8Test(
1117 armnn::IWorkloadFactory& workloadFactory,
1118 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1119
1120LayerTestResult<uint8_t, 4> AdditionBroadcast1ElementUint8Test(
1121 armnn::IWorkloadFactory& workloadFactory,
1122 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1123
1124LayerTestResult<uint8_t, 4> AdditionBroadcastUint8Test(
1125 armnn::IWorkloadFactory& workloadFactory,
1126 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1127
Sadik Armagan2999a022019-04-09 14:20:12 +01001128LayerTestResult<int16_t, 4> AdditionInt16Test(
1129 armnn::IWorkloadFactory& workloadFactory,
1130 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1131
1132LayerTestResult<int16_t, 4> AdditionBroadcastInt16Test(
1133 armnn::IWorkloadFactory& workloadFactory,
1134 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1135
1136LayerTestResult<int16_t, 4> AdditionBroadcast1ElementInt16Test(
1137 armnn::IWorkloadFactory& workloadFactory,
1138 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1139
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001140LayerTestResult<uint8_t, 4> SubtractionUint8Test(
1141 armnn::IWorkloadFactory& workloadFactory,
1142 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1143
1144LayerTestResult<uint8_t, 4> SubtractionBroadcast1ElementUint8Test(
1145 armnn::IWorkloadFactory& workloadFactory,
1146 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1147
1148LayerTestResult<uint8_t, 4> SubtractionBroadcastUint8Test(
1149 armnn::IWorkloadFactory& workloadFactory,
1150 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1151
Sadik Armagan2999a022019-04-09 14:20:12 +01001152LayerTestResult<int16_t, 4> SubtractionInt16Test(
1153 armnn::IWorkloadFactory& workloadFactory,
1154 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1155
1156LayerTestResult<int16_t, 4> SubtractionBroadcast1ElementInt16Test(
1157 armnn::IWorkloadFactory& workloadFactory,
1158 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1159
1160LayerTestResult<int16_t, 4> SubtractionBroadcastInt16Test(
1161 armnn::IWorkloadFactory& workloadFactory,
1162 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1163
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001164LayerTestResult<uint8_t, 4> CompareActivationUint8Test(
1165 armnn::IWorkloadFactory& workloadFactory,
1166 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1167 armnn::IWorkloadFactory& refWorkloadFactory,
1168 armnn::ActivationFunction f);
1169
Teresa Charlin18515e22019-04-24 10:17:46 +01001170LayerTestResult<int16_t, 4> CompareActivationInt16Test(
1171 armnn::IWorkloadFactory& workloadFactory,
1172 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1173 armnn::IWorkloadFactory& refWorkloadFactory,
1174 armnn::ActivationFunction f);
1175
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001176LayerTestResult<uint8_t, 2> CompareSoftmaxUint8Test(
1177 armnn::IWorkloadFactory& workloadFactory,
1178 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1179 armnn::IWorkloadFactory& refWorkloadFactory,
1180 float beta);
1181
1182LayerTestResult<uint8_t, 4> MultiplicationUint8Test(
1183 armnn::IWorkloadFactory& workloadFactory,
1184 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1185
1186LayerTestResult<uint8_t, 4> MultiplicationBroadcast1ElementUint8Test(
1187 armnn::IWorkloadFactory& workloadFactory,
1188 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1189
1190LayerTestResult<uint8_t, 4> MultiplicationBroadcast1DVectorUint8Test(
1191 armnn::IWorkloadFactory& workloadFactory,
1192 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1193
Sadik Armagan2999a022019-04-09 14:20:12 +01001194LayerTestResult<int16_t, 4> MultiplicationInt16Test(
1195 armnn::IWorkloadFactory& workloadFactory,
1196 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1197
1198LayerTestResult<int16_t, 4> MultiplicationBroadcast1ElementInt16Test(
1199 armnn::IWorkloadFactory& workloadFactory,
1200 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1201
1202LayerTestResult<int16_t, 4> MultiplicationBroadcast1DVectorInt16Test(
1203 armnn::IWorkloadFactory& workloadFactory,
1204 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1205
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001206LayerTestResult<uint8_t, 4> DivisionUint8Test(
1207 armnn::IWorkloadFactory& workloadFactory,
1208 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1209
1210LayerTestResult<uint8_t, 4> DivisionBroadcast1ElementUint8Test(
1211 armnn::IWorkloadFactory& workloadFactory,
1212 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1213
1214LayerTestResult<uint8_t, 4> DivisionBroadcast1DVectorUint8Test(
1215 armnn::IWorkloadFactory& workloadFactory,
1216 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1217
Sadik Armagan2999a022019-04-09 14:20:12 +01001218LayerTestResult<int16_t, 4> DivisionInt16Test(
1219 armnn::IWorkloadFactory& workloadFactory,
1220 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1221
1222LayerTestResult<int16_t, 4> DivisionBroadcast1ElementInt16Test(
1223 armnn::IWorkloadFactory& workloadFactory,
1224 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1225
1226LayerTestResult<int16_t, 4> DivisionBroadcast1DVectorInt16Test(
1227 armnn::IWorkloadFactory& workloadFactory,
1228 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1229
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001230LayerTestResult<uint8_t, 4> SimpleConvolution2d3x5Uint8Test(
1231 armnn::IWorkloadFactory& workloadFactory,
1232 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1233 bool biasEnabled,
Matthew Bentham8800c002018-11-19 13:19:28 +00001234 const armnn::DataLayout layout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001235
1236LayerTestResult<uint8_t, 4> SimpleConvolution2d3x3Uint8Test(
1237 armnn::IWorkloadFactory& workloadFactory,
1238 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1239 bool biasEnabled,
Matthew Bentham8800c002018-11-19 13:19:28 +00001240 const armnn::DataLayout layout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001241
Mike Kelly2f80f6e2019-05-16 12:41:34 +01001242LayerTestResult<int16_t, 4> SimpleConvolution2d3x5QSymm16Test(
1243 armnn::IWorkloadFactory& workloadFactory,
1244 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1245 bool biasEnabled,
1246 const armnn::DataLayout layout);
1247
1248LayerTestResult<int16_t, 4> SimpleConvolution2d3x3QSymm16Test(
1249 armnn::IWorkloadFactory& workloadFactory,
1250 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1251 bool biasEnabled,
1252 const armnn::DataLayout layout);
1253
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001254LayerTestResult<uint8_t, 4> DepthwiseConvolution2dUint8Test(
1255 armnn::IWorkloadFactory& workloadFactory,
1256 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1257 bool biasEnabled,
Matthew Bentham8800c002018-11-19 13:19:28 +00001258 const armnn::DataLayout layout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001259
1260LayerTestResult<uint8_t, 4> DepthwiseConvolution2dDepthMul1Uint8Test(
1261 armnn::IWorkloadFactory& workloadFactory,
1262 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1263 bool biasEnabled,
Matthew Bentham8800c002018-11-19 13:19:28 +00001264 const armnn::DataLayout layout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001265
Ruomei Yan88d44b82019-05-23 14:29:06 +01001266LayerTestResult<int16_t, 4> DepthwiseConvolution2dInt16Test(
1267 armnn::IWorkloadFactory& workloadFactory,
1268 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1269 bool biasEnabled,
1270 const armnn::DataLayout layout);
1271
1272LayerTestResult<int16_t, 4> DepthwiseConvolution2dDepthMul1Int16Test(
1273 armnn::IWorkloadFactory& workloadFactory,
1274 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1275 bool biasEnabled,
1276 const armnn::DataLayout layout);
1277
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001278LayerTestResult<uint8_t, 4> ConstantLinearActivationUint8Test(
1279 armnn::IWorkloadFactory& workloadFactory,
1280 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1281
Teresa Charlin18515e22019-04-24 10:17:46 +01001282LayerTestResult<int16_t, 4> ConstantLinearActivationInt16Test(
1283 armnn::IWorkloadFactory& workloadFactory,
1284 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1285
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001286LayerTestResult<uint8_t, 4> BatchNormUint8Test(
1287 armnn::IWorkloadFactory& workloadFactory,
1288 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1289
1290LayerTestResult<uint8_t, 4> BatchNormUint8NhwcTest(
1291 armnn::IWorkloadFactory& workloadFactory,
1292 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1293
Matteo Martincighf5507132019-06-04 10:59:47 +01001294LayerTestResult<int16_t, 4> BatchNormInt16Test(
1295 armnn::IWorkloadFactory& workloadFactory,
1296 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1297
1298LayerTestResult<int16_t, 4> BatchNormInt16NhwcTest(
1299 armnn::IWorkloadFactory& workloadFactory,
1300 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1301
Nina Drozd58ef2c62019-05-16 12:09:18 +01001302LayerTestResult<uint8_t, 4> ConstantUint8CustomQuantizationScaleAndOffsetTest(
1303 armnn::IWorkloadFactory& workloadFactory,
1304 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1305
1306LayerTestResult<int16_t, 4> ConstantInt16CustomQuantizationScaleAndOffsetTest(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001307 armnn::IWorkloadFactory& workloadFactory,
1308 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1309
1310LayerTestResult<uint8_t, 1> Concatenation1dUint8Test(
1311 armnn::IWorkloadFactory& workloadFactory,
1312 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1313
1314LayerTestResult<uint8_t, 2> Concatenation2dDim0Uint8Test(
1315 armnn::IWorkloadFactory& workloadFactory,
1316 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1317
1318LayerTestResult<uint8_t, 2> Concatenation2dDim1Uint8Test(
1319 armnn::IWorkloadFactory& workloadFactory,
1320 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1321
1322LayerTestResult<uint8_t, 2> Concatenation2dDim0DiffInputDimsUint8Test(
1323 armnn::IWorkloadFactory& workloadFactory,
1324 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1325
1326LayerTestResult<uint8_t, 2> Concatenation2dDim1DiffInputDimsUint8Test(
1327 armnn::IWorkloadFactory& workloadFactory,
1328 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1329
1330LayerTestResult<uint8_t, 3> Concatenation3dDim0Uint8Test(
1331 armnn::IWorkloadFactory& workloadFactory,
1332 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1333
1334LayerTestResult<uint8_t, 3> Concatenation3dDim1Uint8Test(
1335 armnn::IWorkloadFactory& workloadFactory,
1336 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1337
1338LayerTestResult<uint8_t, 3> Concatenation3dDim2Uint8Test(
1339 armnn::IWorkloadFactory& workloadFactory,
narpra015cdda352018-11-19 15:30:27 +00001340 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1341 bool useSubtensor);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001342
1343LayerTestResult<uint8_t, 3> Concatenation3dDim0DiffInputDimsUint8Test(
1344 armnn::IWorkloadFactory& workloadFactory,
1345 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1346
1347LayerTestResult<uint8_t, 3> Concatenation3dDim1DiffInputDimsUint8Test(
1348 armnn::IWorkloadFactory& workloadFactory,
1349 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1350
1351LayerTestResult<uint8_t, 3> Concatenation3dDim2DiffInputDimsUint8Test(
1352 armnn::IWorkloadFactory& workloadFactory,
narpra015cdda352018-11-19 15:30:27 +00001353 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1354 bool useSubtensor);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001355
kevmay012b4d88e2019-01-24 14:05:09 +00001356LayerTestResult<uint8_t, 4> EqualSimpleTest(
FrancisMurtagh30cdfca2018-12-18 12:57:35 +00001357 armnn::IWorkloadFactory& workloadFactory,
1358 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1359
kevmay012b4d88e2019-01-24 14:05:09 +00001360LayerTestResult<uint8_t, 4> EqualBroadcast1ElementTest(
FrancisMurtagh30cdfca2018-12-18 12:57:35 +00001361 armnn::IWorkloadFactory& workloadFactory,
1362 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1363
kevmay012b4d88e2019-01-24 14:05:09 +00001364LayerTestResult<uint8_t, 4> EqualBroadcast1DVectorTest(
FrancisMurtagh30cdfca2018-12-18 12:57:35 +00001365 armnn::IWorkloadFactory& workloadFactory,
1366 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1367
1368LayerTestResult<uint8_t, 4> EqualUint8Test(
1369 armnn::IWorkloadFactory& workloadFactory,
1370 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1371
1372LayerTestResult<uint8_t, 4> EqualBroadcast1ElementUint8Test(
1373 armnn::IWorkloadFactory& workloadFactory,
1374 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1375
1376LayerTestResult<uint8_t, 4> EqualBroadcast1DVectorUint8Test(
1377 armnn::IWorkloadFactory& workloadFactory,
1378 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1379
kevmay012b4d88e2019-01-24 14:05:09 +00001380LayerTestResult<uint8_t, 4> GreaterSimpleTest(
FrancisMurtagh878f0232018-12-19 10:56:15 +00001381 armnn::IWorkloadFactory& workloadFactory,
1382 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1383
kevmay012b4d88e2019-01-24 14:05:09 +00001384LayerTestResult<uint8_t, 4> GreaterBroadcast1ElementTest(
FrancisMurtagh878f0232018-12-19 10:56:15 +00001385 armnn::IWorkloadFactory& workloadFactory,
1386 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1387
kevmay012b4d88e2019-01-24 14:05:09 +00001388LayerTestResult<uint8_t, 4> GreaterBroadcast1DVectorTest(
FrancisMurtagh878f0232018-12-19 10:56:15 +00001389 armnn::IWorkloadFactory& workloadFactory,
1390 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1391
1392LayerTestResult<uint8_t, 4> GreaterUint8Test(
1393 armnn::IWorkloadFactory& workloadFactory,
1394 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1395
1396LayerTestResult<uint8_t, 4> GreaterBroadcast1ElementUint8Test(
1397 armnn::IWorkloadFactory& workloadFactory,
1398 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1399
1400LayerTestResult<uint8_t, 4> GreaterBroadcast1DVectorUint8Test(
1401 armnn::IWorkloadFactory& workloadFactory,
1402 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1403
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001404LayerTestResult<float, 2> FullyConnectedLargeTest(
1405 armnn::IWorkloadFactory& workloadFactory,
1406 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1407 bool transposeWeights);
1408
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001409LayerTestResult<uint8_t, 2> PadUint82dTest(
1410 armnn::IWorkloadFactory& workloadFactory,
1411 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1412
David Monahan34757812019-06-19 11:47:21 +01001413LayerTestResult<uint8_t, 2> PadUint82dCustomPaddingTest(
1414 armnn::IWorkloadFactory& workloadFactory,
1415 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1416
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001417LayerTestResult<uint8_t, 3> PadUint83dTest(
1418 armnn::IWorkloadFactory& workloadFactory,
1419 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1420
1421LayerTestResult<uint8_t, 4> PadUint84dTest(
1422 armnn::IWorkloadFactory& workloadFactory,
1423 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1424
1425LayerTestResult<float, 2> PadFloat322dTest(
1426 armnn::IWorkloadFactory& workloadFactory,
1427 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1428
David Monahan34757812019-06-19 11:47:21 +01001429LayerTestResult<float, 2> PadFloat322dCustomPaddingTest(
1430 armnn::IWorkloadFactory& workloadFactory,
1431 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1432
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001433LayerTestResult<float, 3> PadFloat323dTest(
1434 armnn::IWorkloadFactory& workloadFactory,
1435 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1436
1437LayerTestResult<float, 4> PadFloat324dTest(
1438 armnn::IWorkloadFactory& workloadFactory,
1439 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1440
Narumol Prangnawarate6eaf662019-07-08 08:57:17 +01001441template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1442LayerTestResult<T, 2> Pad2dTestCommon(
1443 armnn::IWorkloadFactory& workloadFactory,
1444 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1445 float qScale,
1446 int32_t qOffset,
1447 const float customPaddingValue = 0.0f);
1448
1449template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1450LayerTestResult<T, 3> Pad3dTestCommon(
1451 armnn::IWorkloadFactory& workloadFactory,
1452 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1453 float qScale,
1454 int32_t qOffset);
1455
1456template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1457LayerTestResult<T, 4> Pad4dTestCommon(
1458 armnn::IWorkloadFactory& workloadFactory,
1459 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1460 float qScale,
1461 int32_t qOffset);
1462
Jan Eilers38e05bd2019-06-26 13:10:09 +01001463void LstmUtilsZeroVectorTest();
1464void LstmUtilsMeanStddevNormalizationNoneZeroInputTest();
1465void LstmUtilsMeanStddevNormalizationAllZeroInputTest();
1466void LstmUtilsMeanStddevNormalizationMixedZeroInputTest();
1467void LstmUtilsVectorBatchVectorCwiseProductTest();
1468void LstmUtilsVectorBatchVectorAddTest();
1469
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001470LayerTestResult<float, 2> LstmLayerFloat32WithCifgWithPeepholeNoProjectionTest(
1471 armnn::IWorkloadFactory& workloadFactory,
1472 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1473
1474LayerTestResult<float, 2> LstmLayerFloat32NoCifgNoPeepholeNoProjectionTest(
1475 armnn::IWorkloadFactory& workloadFactory,
1476 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1477
1478LayerTestResult<float, 2> LstmLayerFloat32NoCifgWithPeepholeWithProjectionTest(
1479 armnn::IWorkloadFactory& workloadFactory,
1480 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1481
Jan Eilers38e05bd2019-06-26 13:10:09 +01001482LayerTestResult<float, 2> LstmLayerFloat32NoCifgWithPeepholeWithProjectionWithLayerNormTest(
1483 armnn::IWorkloadFactory& workloadFactory,
1484 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1485
Conor Kennedyb9971c92019-05-07 07:14:23 +01001486LayerTestResult<int16_t, 2> LstmLayerInt16NoCifgNoPeepholeNoProjectionTest(
1487 armnn::IWorkloadFactory& workloadFactory,
1488 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1489
1490LayerTestResult<int16_t, 2> LstmLayerInt16WithCifgWithPeepholeNoProjectionTest(
1491 armnn::IWorkloadFactory& workloadFactory,
1492 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1493
1494LayerTestResult<int16_t, 2> LstmLayerInt16NoCifgWithPeepholeWithProjectionTest(
1495 armnn::IWorkloadFactory& workloadFactory,
1496 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1497
1498LayerTestResult<int16_t, 2> LstmLayerInt16NoCifgNoPeepholeNoProjectionInt16ConstantTest(
1499 armnn::IWorkloadFactory& workloadFactory,
1500 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1501
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001502LayerTestResult<float, 4> SimpleConvertFp16ToFp32Test(
1503 armnn::IWorkloadFactory& workloadFactory,
1504 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1505
1506LayerTestResult<armnn::Half, 4> SimpleConvertFp32ToFp16Test(
1507 armnn::IWorkloadFactory& workloadFactory,
1508 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1509
Éanna Ó Catháinde705582018-12-03 13:04:22 +00001510LayerTestResult<float, 4> MaximumSimpleTest(
1511 armnn::IWorkloadFactory& workloadFactory,
1512 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1513
1514LayerTestResult<float, 4> MaximumBroadcast1ElementTest(
1515 armnn::IWorkloadFactory& workloadFactory,
1516 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1517
1518LayerTestResult<float, 4> MaximumBroadcast1DVectorTest(
1519 armnn::IWorkloadFactory& workloadFactory,
1520 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1521
1522LayerTestResult<uint8_t , 4> MaximumUint8Test(
1523 armnn::IWorkloadFactory& workloadFactory,
1524 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1525
1526LayerTestResult<uint8_t, 4> MaximumBroadcast1ElementUint8Test(
1527 armnn::IWorkloadFactory& workloadFactory,
1528 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1529
1530LayerTestResult<uint8_t, 4> MaximumBroadcast1DVectorUint8Test(
1531 armnn::IWorkloadFactory& workloadFactory,
1532 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1533
Sadik Armagan2999a022019-04-09 14:20:12 +01001534LayerTestResult<int16_t , 4> MaximumInt16Test(
1535 armnn::IWorkloadFactory& workloadFactory,
1536 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1537
1538LayerTestResult<int16_t, 4> MaximumBroadcast1ElementInt16Test(
1539 armnn::IWorkloadFactory& workloadFactory,
1540 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1541
1542LayerTestResult<int16_t, 4> MaximumBroadcast1DVectorInt16Test(
1543 armnn::IWorkloadFactory& workloadFactory,
1544 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1545
James Conroy4d1ff582019-06-10 17:06:39 +01001546template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1547LayerTestResult<T, 1> MeanSimpleTest(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001548 armnn::IWorkloadFactory& workloadFactory,
1549 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1550
James Conroy4d1ff582019-06-10 17:06:39 +01001551template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1552LayerTestResult<T, 3> MeanSimpleAxisTest(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001553 armnn::IWorkloadFactory& workloadFactory,
1554 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1555
James Conroy4d1ff582019-06-10 17:06:39 +01001556template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1557LayerTestResult<T, 4> MeanKeepDimsTest(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001558 armnn::IWorkloadFactory& workloadFactory,
1559 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1560
James Conroy4d1ff582019-06-10 17:06:39 +01001561template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1562LayerTestResult<T, 4> MeanMultipleDimsTest(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001563 armnn::IWorkloadFactory& workloadFactory,
1564 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1565
James Conroy4d1ff582019-06-10 17:06:39 +01001566template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1567LayerTestResult<T, 1> MeanVts1Test(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001568 armnn::IWorkloadFactory& workloadFactory,
1569 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1570
James Conroy4d1ff582019-06-10 17:06:39 +01001571template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1572LayerTestResult<T, 3> MeanVts2Test(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001573 armnn::IWorkloadFactory& workloadFactory,
1574 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1575
James Conroy4d1ff582019-06-10 17:06:39 +01001576template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1577LayerTestResult<T, 3> MeanVts3Test(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001578 armnn::IWorkloadFactory& workloadFactory,
1579 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1580
Éanna Ó Catháin20e58802018-12-04 10:29:06 +00001581LayerTestResult<float, 4> MinimumBroadcast1ElementTest1(
1582 armnn::IWorkloadFactory& workloadFactory,
1583 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1584
1585LayerTestResult<float, 4> MinimumBroadcast1ElementTest2(
1586 armnn::IWorkloadFactory& workloadFactory,
1587 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1588
1589LayerTestResult<uint8_t, 4> MinimumBroadcast1DVectorUint8Test(
1590 armnn::IWorkloadFactory & workloadFactory,
1591 const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager);
1592
Sadik Armagan2999a022019-04-09 14:20:12 +01001593LayerTestResult<int16_t , 4> MinimumInt16Test(
1594 armnn::IWorkloadFactory& workloadFactory,
1595 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1596
1597LayerTestResult<int16_t, 4> MinimumBroadcast1ElementInt16Test(
1598 armnn::IWorkloadFactory& workloadFactory,
1599 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1600
1601LayerTestResult<int16_t, 4> MinimumBroadcast1DVectorInt16Test(
1602 armnn::IWorkloadFactory& workloadFactory,
1603 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1604
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001605LayerTestResult<float, 4> AdditionAfterMaxPoolTest(
1606 armnn::IWorkloadFactory& workloadFactory,
1607 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1608
1609LayerTestResult<float, 4> SpaceToBatchNdSimpleFloat32Test(
1610 armnn::IWorkloadFactory& workloadFactory,
1611 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1612
1613LayerTestResult<float, 4> SpaceToBatchNdMultiChannelsFloat32Test(
1614 armnn::IWorkloadFactory& workloadFactory,
1615 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1616
1617LayerTestResult<float, 4> SpaceToBatchNdMultiBlockFloat32Test(
1618 armnn::IWorkloadFactory& workloadFactory,
1619 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1620
1621LayerTestResult<float, 4> SpaceToBatchNdPaddingFloat32Test(
1622 armnn::IWorkloadFactory& workloadFactory,
1623 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1624
1625LayerTestResult<uint8_t, 4> SpaceToBatchNdSimpleUint8Test(
1626 armnn::IWorkloadFactory& workloadFactory,
1627 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1628
1629LayerTestResult<uint8_t, 4> SpaceToBatchNdMultiChannelsUint8Test(
1630 armnn::IWorkloadFactory& workloadFactory,
1631 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1632
1633LayerTestResult<uint8_t, 4> SpaceToBatchNdMultiBlockUint8Test(
1634 armnn::IWorkloadFactory& workloadFactory,
1635 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1636
1637LayerTestResult<uint8_t, 4> SpaceToBatchNdPaddingUint8Test(
1638 armnn::IWorkloadFactory& workloadFactory,
1639 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1640
1641LayerTestResult<float, 4> SpaceToBatchNdSimpleNHWCFloat32Test(
1642 armnn::IWorkloadFactory& workloadFactory,
1643 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1644
1645LayerTestResult<float, 4> SpaceToBatchNdMultiChannelsNHWCFloat32Test(
1646 armnn::IWorkloadFactory& workloadFactory,
1647 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1648
1649LayerTestResult<float, 4> SpaceToBatchNdMultiBlockNHWCFloat32Test(
1650 armnn::IWorkloadFactory& workloadFactory,
1651 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1652
1653LayerTestResult<float, 4> SpaceToBatchNdPaddingNHWCFloat32Test(
1654 armnn::IWorkloadFactory& workloadFactory,
1655 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1656
1657LayerTestResult<uint8_t, 4> SpaceToBatchNdSimpleNHWCUint8Test(
1658 armnn::IWorkloadFactory& workloadFactory,
1659 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1660
1661LayerTestResult<uint8_t, 4> SpaceToBatchNdMultiChannelsNHWCUint8Test(
1662 armnn::IWorkloadFactory& workloadFactory,
1663 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1664
1665LayerTestResult<uint8_t, 4> SpaceToBatchNdMultiBlockNHWCUint8Test(
1666 armnn::IWorkloadFactory& workloadFactory,
1667 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1668
1669LayerTestResult<uint8_t, 4> SpaceToBatchNdPaddingNHWCUint8Test(
1670 armnn::IWorkloadFactory& workloadFactory,
1671 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1672
nikraj01120522a2019-05-31 11:33:07 +01001673LayerTestResult<int16_t, 4> SpaceToBatchNdSimpleUint16Test(
1674 armnn::IWorkloadFactory& workloadFactory,
1675 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1676
1677LayerTestResult<int16_t, 4> SpaceToBatchNdMultiChannelsUint16Test(
1678 armnn::IWorkloadFactory& workloadFactory,
1679 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1680
1681LayerTestResult<int16_t, 4> SpaceToBatchNdMultiBlockUint16Test(
1682 armnn::IWorkloadFactory& workloadFactory,
1683 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1684
1685LayerTestResult<int16_t, 4> SpaceToBatchNdPaddingUint16Test(
1686 armnn::IWorkloadFactory& workloadFactory,
1687 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1688
1689LayerTestResult<int16_t, 4> SpaceToBatchNdSimpleNHWCUint16Test(
1690 armnn::IWorkloadFactory& workloadFactory,
1691 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1692
1693LayerTestResult<int16_t, 4> SpaceToBatchNdMultiChannelsNHWCUint16Test(
1694 armnn::IWorkloadFactory& workloadFactory,
1695 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1696
1697LayerTestResult<int16_t, 4> SpaceToBatchNdMultiBlockNHWCUint16Test(
1698 armnn::IWorkloadFactory& workloadFactory,
1699 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1700
1701LayerTestResult<int16_t, 4> SpaceToBatchNdPaddingNHWCUint16Test(
1702 armnn::IWorkloadFactory& workloadFactory,
1703 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1704
Francis Murtagh57f13d52019-06-24 14:24:36 +01001705LayerTestResult<float, 4> BatchToSpaceNdNhwcTest1(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001706 armnn::IWorkloadFactory& workloadFactory,
1707 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1708
Francis Murtagh57f13d52019-06-24 14:24:36 +01001709LayerTestResult<float, 4> BatchToSpaceNdNhwcTest2(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001710 armnn::IWorkloadFactory& workloadFactory,
1711 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1712
Francis Murtagh57f13d52019-06-24 14:24:36 +01001713LayerTestResult<float, 4> BatchToSpaceNdNhwcTest3(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001714 armnn::IWorkloadFactory& workloadFactory,
1715 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1716
Francis Murtagh57f13d52019-06-24 14:24:36 +01001717LayerTestResult<float, 4> BatchToSpaceNdNhwcTest4(
Nattapat Chaimanowong3ee14222019-02-27 10:28:09 +00001718 armnn::IWorkloadFactory& workloadFactory,
1719 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1720
Francis Murtagh57f13d52019-06-24 14:24:36 +01001721LayerTestResult<float, 4> BatchToSpaceNdNchwTest1(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001722 armnn::IWorkloadFactory &workloadFactory,
1723 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1724
Francis Murtagh57f13d52019-06-24 14:24:36 +01001725LayerTestResult<float, 4> BatchToSpaceNdNchwTest2(
Nattapat Chaimanowong3ee14222019-02-27 10:28:09 +00001726 armnn::IWorkloadFactory &workloadFactory,
1727 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Mike Kelly831faed2018-11-28 11:52:08 +00001728
Francis Murtagh57f13d52019-06-24 14:24:36 +01001729LayerTestResult<float, 4> BatchToSpaceNdNchwTest3(
Nattapat Chaimanowong3ee14222019-02-27 10:28:09 +00001730 armnn::IWorkloadFactory &workloadFactory,
1731 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Mike Kelly831faed2018-11-28 11:52:08 +00001732
Francis Murtagh57f13d52019-06-24 14:24:36 +01001733LayerTestResult<uint8_t, 4> BatchToSpaceNdNhwcTest5(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001734 armnn::IWorkloadFactory &workloadFactory,
1735 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Nattapat Chaimanowong1216b582018-11-23 15:33:41 +00001736
Francis Murtagh57f13d52019-06-24 14:24:36 +01001737LayerTestResult<uint8_t, 4> BatchToSpaceNdNhwcTest6(
Nattapat Chaimanowong3ee14222019-02-27 10:28:09 +00001738 armnn::IWorkloadFactory &workloadFactory,
1739 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Mike Kelly831faed2018-11-28 11:52:08 +00001740
Francis Murtagh57f13d52019-06-24 14:24:36 +01001741LayerTestResult<uint8_t, 4> BatchToSpaceNdNhwcTest7(
Nattapat Chaimanowong3ee14222019-02-27 10:28:09 +00001742 armnn::IWorkloadFactory &workloadFactory,
1743 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Mike Kelly831faed2018-11-28 11:52:08 +00001744
Francis Murtagh57f13d52019-06-24 14:24:36 +01001745LayerTestResult<uint8_t, 4> BatchToSpaceNdNchwTest4(
Nattapat Chaimanowong3ee14222019-02-27 10:28:09 +00001746 armnn::IWorkloadFactory &workloadFactory,
1747 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Mike Kelly831faed2018-11-28 11:52:08 +00001748
Francis Murtagh57f13d52019-06-24 14:24:36 +01001749LayerTestResult<uint8_t, 4> BatchToSpaceNdNchwTest5(
Nattapat Chaimanowong3ee14222019-02-27 10:28:09 +00001750 armnn::IWorkloadFactory &workloadFactory,
1751 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Mike Kelly831faed2018-11-28 11:52:08 +00001752
Francis Murtagh57f13d52019-06-24 14:24:36 +01001753LayerTestResult<uint8_t, 4> BatchToSpaceNdNchwTest6(
Nattapat Chaimanowong3ee14222019-02-27 10:28:09 +00001754 armnn::IWorkloadFactory &workloadFactory,
1755 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1756
Francis Murtagh57f13d52019-06-24 14:24:36 +01001757LayerTestResult<uint8_t, 4> BatchToSpaceNdNchwTest7(
Nattapat Chaimanowong3ee14222019-02-27 10:28:09 +00001758 armnn::IWorkloadFactory &workloadFactory,
1759 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Mike Kelly831faed2018-11-28 11:52:08 +00001760
Nattapat Chaimanowong1216b582018-11-23 15:33:41 +00001761LayerTestResult<float, 4> StridedSlice4DFloat32Test(
1762 armnn::IWorkloadFactory& workloadFactory,
1763 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Nattapat Chaimanowongcfdcadf2018-12-06 11:54:33 +00001764
Nattapat Chaimanowong1216b582018-11-23 15:33:41 +00001765LayerTestResult<float, 4> StridedSlice4DReverseFloat32Test(
1766 armnn::IWorkloadFactory& workloadFactory,
1767 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1768
1769LayerTestResult<float, 4> StridedSliceSimpleStrideFloat32Test(
1770 armnn::IWorkloadFactory& workloadFactory,
1771 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1772
1773LayerTestResult<float, 4> StridedSliceSimpleRangeMaskFloat32Test(
1774 armnn::IWorkloadFactory& workloadFactory,
1775 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1776
1777LayerTestResult<float, 2> StridedSliceShrinkAxisMaskFloat32Test(
1778 armnn::IWorkloadFactory& workloadFactory,
1779 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1780
1781LayerTestResult<float, 3> StridedSlice3DFloat32Test(
1782 armnn::IWorkloadFactory& workloadFactory,
1783 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1784
1785LayerTestResult<float, 3> StridedSlice3DReverseFloat32Test(
1786 armnn::IWorkloadFactory& workloadFactory,
1787 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1788
1789LayerTestResult<float, 2> StridedSlice2DFloat32Test(
1790 armnn::IWorkloadFactory& workloadFactory,
1791 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1792
1793LayerTestResult<float, 2> StridedSlice2DReverseFloat32Test(
1794 armnn::IWorkloadFactory& workloadFactory,
1795 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1796
1797LayerTestResult<uint8_t, 4> StridedSlice4DUint8Test(
1798 armnn::IWorkloadFactory& workloadFactory,
1799 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1800
1801LayerTestResult<uint8_t, 4> StridedSlice4DReverseUint8Test(
1802 armnn::IWorkloadFactory& workloadFactory,
1803 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1804
1805LayerTestResult<uint8_t, 4> StridedSliceSimpleStrideUint8Test(
1806 armnn::IWorkloadFactory& workloadFactory,
1807 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1808
1809LayerTestResult<uint8_t, 4> StridedSliceSimpleRangeMaskUint8Test(
1810 armnn::IWorkloadFactory& workloadFactory,
1811 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1812
1813LayerTestResult<uint8_t, 2> StridedSliceShrinkAxisMaskUint8Test(
1814 armnn::IWorkloadFactory& workloadFactory,
1815 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1816
1817LayerTestResult<uint8_t, 3> StridedSlice3DUint8Test(
1818 armnn::IWorkloadFactory& workloadFactory,
1819 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1820
1821LayerTestResult<uint8_t, 3> StridedSlice3DReverseUint8Test(
1822 armnn::IWorkloadFactory& workloadFactory,
1823 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1824
1825LayerTestResult<uint8_t, 2> StridedSlice2DUint8Test(
1826 armnn::IWorkloadFactory& workloadFactory,
1827 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1828
1829LayerTestResult<uint8_t, 2> StridedSlice2DReverseUint8Test(
1830 armnn::IWorkloadFactory& workloadFactory,
1831 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Nattapat Chaimanowongcfdcadf2018-12-06 11:54:33 +00001832
Matteo Martincigh42666a12019-05-29 08:53:41 +01001833LayerTestResult<int16_t, 4> StridedSlice4DInt16Test(
1834 armnn::IWorkloadFactory& workloadFactory,
1835 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1836
1837LayerTestResult<int16_t, 4> StridedSlice4DReverseInt16Test(
1838 armnn::IWorkloadFactory& workloadFactory,
1839 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1840
1841LayerTestResult<int16_t, 4> StridedSliceSimpleStrideInt16Test(
1842 armnn::IWorkloadFactory& workloadFactory,
1843 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1844
1845LayerTestResult<int16_t, 4> StridedSliceSimpleRangeMaskInt16Test(
1846 armnn::IWorkloadFactory& workloadFactory,
1847 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1848
1849LayerTestResult<int16_t, 2> StridedSliceShrinkAxisMaskInt16Test(
1850 armnn::IWorkloadFactory& workloadFactory,
1851 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1852
1853LayerTestResult<int16_t, 3> StridedSlice3DInt16Test(
1854 armnn::IWorkloadFactory& workloadFactory,
1855 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1856
1857LayerTestResult<int16_t, 3> StridedSlice3DReverseInt16Test(
1858 armnn::IWorkloadFactory& workloadFactory,
1859 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1860
1861LayerTestResult<int16_t, 2> StridedSlice2DInt16Test(
1862 armnn::IWorkloadFactory& workloadFactory,
1863 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1864
1865LayerTestResult<int16_t, 2> StridedSlice2DReverseInt16Test(
1866 armnn::IWorkloadFactory& workloadFactory,
1867 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1868
Nattapat Chaimanowongcfdcadf2018-12-06 11:54:33 +00001869LayerTestResult<float, 4> Debug4DFloat32Test(
1870 armnn::IWorkloadFactory& workloadFactory,
1871 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1872
1873LayerTestResult<float, 3> Debug3DFloat32Test(
1874 armnn::IWorkloadFactory& workloadFactory,
1875 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1876
1877LayerTestResult<float, 2> Debug2DFloat32Test(
1878 armnn::IWorkloadFactory& workloadFactory,
1879 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1880
1881LayerTestResult<float, 1> Debug1DFloat32Test(
1882 armnn::IWorkloadFactory& workloadFactory,
1883 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1884
1885LayerTestResult<uint8_t, 4> Debug4DUint8Test(
1886 armnn::IWorkloadFactory& workloadFactory,
1887 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1888
1889LayerTestResult<uint8_t, 3> Debug3DUint8Test(
1890 armnn::IWorkloadFactory& workloadFactory,
1891 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1892
1893LayerTestResult<uint8_t, 2> Debug2DUint8Test(
1894 armnn::IWorkloadFactory& workloadFactory,
1895 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1896
1897LayerTestResult<uint8_t, 1> Debug1DUint8Test(
1898 armnn::IWorkloadFactory& workloadFactory,
1899 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Matteo Martincigh49124022019-01-11 13:25:59 +00001900
1901LayerTestResult<uint8_t, 4> PreCompiledConvolution2dTest(
1902 armnn::IWorkloadFactory& workloadFactory,
1903 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1904
1905LayerTestResult<uint8_t, 4> PreCompiledConvolution2dStride2x2Test(
1906 armnn::IWorkloadFactory& workloadFactory,
1907 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1908
1909LayerTestResult<uint8_t, 4> PreCompiledDepthwiseConvolution2dTest(
1910 armnn::IWorkloadFactory & workloadFactory,
1911 const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager);
1912
1913LayerTestResult<uint8_t, 4> PreCompiledDepthwiseConvolution2dStride2x2Test(
1914 armnn::IWorkloadFactory & workloadFactory,
1915 const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager);
1916
1917LayerTestResult<uint8_t, 4> PreCompiledMaxPooling2dTest(
1918 armnn::IWorkloadFactory& workloadFactory,
1919 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1920
1921LayerTestResult<float, 4> Debug4DFloat32Test(
1922 armnn::IWorkloadFactory& workloadFactory,
1923 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1924
1925LayerTestResult<float, 3> Debug3DFloat32Test(
1926 armnn::IWorkloadFactory& workloadFactory,
1927 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1928
1929LayerTestResult<float, 2> Debug2DFloat32Test(
1930 armnn::IWorkloadFactory& workloadFactory,
1931 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1932
1933LayerTestResult<float, 1> Debug1DFloat32Test(
1934 armnn::IWorkloadFactory& workloadFactory,
1935 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1936
1937LayerTestResult<uint8_t, 4> Debug4DUint8Test(
1938 armnn::IWorkloadFactory& workloadFactory,
1939 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1940
1941LayerTestResult<uint8_t, 3> Debug3DUint8Test(
1942 armnn::IWorkloadFactory& workloadFactory,
1943 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1944
1945LayerTestResult<uint8_t, 2> Debug2DUint8Test(
1946 armnn::IWorkloadFactory& workloadFactory,
1947 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1948
1949LayerTestResult<uint8_t, 1> Debug1DUint8Test(
1950 armnn::IWorkloadFactory& workloadFactory,
1951 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
narpra014951d842019-01-18 16:53:53 +00001952
1953LayerTestResult<float, 1> Gather1DParamsFloatTest(
1954 armnn::IWorkloadFactory& workloadFactory,
1955 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1956
1957LayerTestResult<uint8_t, 1> Gather1DParamsUint8Test(
1958 armnn::IWorkloadFactory& workloadFactory,
1959 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1960
Ellen Norris-Thompsone0dbedf2019-06-24 09:23:38 +01001961LayerTestResult<int16_t, 1> Gather1DParamsInt16Test(
1962 armnn::IWorkloadFactory& workloadFactory,
1963 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1964
narpra014951d842019-01-18 16:53:53 +00001965LayerTestResult<float, 2> GatherMultiDimParamsFloatTest(
1966 armnn::IWorkloadFactory& workloadFactory,
1967 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1968
1969LayerTestResult<uint8_t, 2> GatherMultiDimParamsUint8Test(
1970 armnn::IWorkloadFactory& workloadFactory,
1971 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1972
Ellen Norris-Thompsone0dbedf2019-06-24 09:23:38 +01001973LayerTestResult<int16_t, 2> GatherMultiDimParamsInt16Test(
1974 armnn::IWorkloadFactory& workloadFactory,
1975 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1976
narpra014951d842019-01-18 16:53:53 +00001977LayerTestResult<float, 4> GatherMultiDimParamsMultiDimIndicesFloatTest(
1978 armnn::IWorkloadFactory& workloadFactory,
1979 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1980
1981LayerTestResult<uint8_t, 4> GatherMultiDimParamsMultiDimIndicesUint8Test(
1982 armnn::IWorkloadFactory& workloadFactory,
1983 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Nattapat Chaimanowong8a54ac02019-03-29 15:25:04 +00001984
Ellen Norris-Thompsone0dbedf2019-06-24 09:23:38 +01001985LayerTestResult<int16_t, 4> GatherMultiDimParamsMultiDimIndicesInt16Test(
1986 armnn::IWorkloadFactory& workloadFactory,
1987 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1988
Nattapat Chaimanowongafa4e3a2019-04-02 11:41:45 +01001989LayerTestResult<float, 4> DequantizeSimpleUint8Test(
1990 armnn::IWorkloadFactory& workloadFactory,
1991 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1992
1993LayerTestResult<float, 4> DequantizeOffsetUint8Test(
1994 armnn::IWorkloadFactory& workloadFactory,
1995 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1996
1997LayerTestResult<float, 4> DequantizeSimpleInt16Test(
Nattapat Chaimanowong8a54ac02019-03-29 15:25:04 +00001998 armnn::IWorkloadFactory& workloadFactory,
1999 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Nattapat Chaimanowonga0beb3b2019-04-01 17:04:53 +01002000
Keith Davisa57eccb2019-06-14 17:33:22 +01002001LayerTestResult<uint8_t, 4> SpaceToDepthNCHWAsymmQ8Test(
2002 armnn::IWorkloadFactory& workloadFactory,
2003 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
2004
2005LayerTestResult<uint8_t, 4> SpaceToDepthNHWCAsymmQ8Test(
2006 armnn::IWorkloadFactory& workloadFactory,
2007 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
2008
James Conroyd2aa85e2019-07-01 17:12:40 +01002009LayerTestResult<float, 4> SpaceToDepthNHWCFloat32Test1(
Keith Davisa57eccb2019-06-14 17:33:22 +01002010 armnn::IWorkloadFactory& workloadFactory,
2011 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
2012
James Conroyd2aa85e2019-07-01 17:12:40 +01002013LayerTestResult<float, 4> SpaceToDepthNCHWFloat32Test1(
2014 armnn::IWorkloadFactory& workloadFactory,
2015 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
2016
2017LayerTestResult<float, 4> SpaceToDepthNHWCFloat32Test2(
2018 armnn::IWorkloadFactory& workloadFactory,
2019 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
2020
2021LayerTestResult<float, 4> SpaceToDepthNCHWFloat32Test2(
2022 armnn::IWorkloadFactory& workloadFactory,
2023 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
2024
2025LayerTestResult<int16_t, 4> SpaceToDepthNHWCQSymm16Test(
2026 armnn::IWorkloadFactory& workloadFactory,
2027 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
2028
2029LayerTestResult<int16_t, 4> SpaceToDepthNCHWQSymm16Test(
Keith Davisa57eccb2019-06-14 17:33:22 +01002030 armnn::IWorkloadFactory& workloadFactory,
2031 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
2032
Nattapat Chaimanowonga0beb3b2019-04-01 17:04:53 +01002033LayerTestResult<uint8_t, 4> QuantizeSimpleUint8Test(
2034 armnn::IWorkloadFactory& workloadFactory,
2035 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
2036
2037LayerTestResult<uint8_t, 4> QuantizeClampUint8Test(
2038 armnn::IWorkloadFactory& workloadFactory,
2039 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
2040
2041LayerTestResult<int16_t, 4> QuantizeClampInt16Test(
2042 armnn::IWorkloadFactory& workloadFactory,
2043 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Francis Murtagh46c09d02019-05-28 08:15:28 +01002044
2045template<typename T, typename B>
2046LayerTestResult<T, 2> SimpleFullyConnectedTestImpl(
2047 armnn::IWorkloadFactory& workloadFactory,
2048 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
2049 armnn::TensorInfo inputTensorInfo,
2050 armnn::TensorInfo outputTensorInfo,
2051 armnn::TensorInfo weightsDesc,
2052 armnn::TensorInfo biasesDesc,
2053 boost::multi_array<T, 2>& weights,
2054 boost::multi_array<B, 1>& bias,
2055 boost::multi_array<T, 4>& input,
2056 bool biasEnabled,
2057 bool transposeWeights)
2058{
2059 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2060 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2061
2062 armnn::FullyConnectedQueueDescriptor data;
2063 armnn::WorkloadInfo info;
2064 armnn::ScopedCpuTensorHandle weightsTensor(weightsDesc);
2065 armnn::ScopedCpuTensorHandle biasTensor(biasesDesc);
2066
2067 AllocateAndCopyDataToITensorHandle(&weightsTensor, &weights[0][0]);
2068 AllocateAndCopyDataToITensorHandle(&biasTensor, &bias[0]);
2069
2070 AddInputToWorkload(data, info, inputTensorInfo, inputHandle.get());
2071 AddOutputToWorkload(data, info, outputTensorInfo, outputHandle.get());
2072 data.m_Weight = &weightsTensor;
2073 data.m_Bias = &biasTensor;
2074 data.m_Parameters.m_BiasEnabled = biasEnabled;
2075 data.m_Parameters.m_TransposeWeightMatrix = transposeWeights;
2076
2077 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateFullyConnected(data, info);
2078 LayerTestResult<T, 2> result(outputTensorInfo);
2079
2080 inputHandle->Allocate();
2081 outputHandle->Allocate();
2082 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
2083
2084 ExecuteWorkload(*workload, memoryManager);
2085
2086 CopyDataFromITensorHandle(&result.output[0][0], outputHandle.get());
2087
2088 return result;
2089}
2090
2091template <armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
2092std::vector<T> ConvertToDataType(const std::vector<float>& input,
2093 const armnn::TensorInfo& inputTensorInfo)
2094{
2095 std::vector<T> output(input.size());
2096 auto outputTensorInfo = inputTensorInfo;
2097 outputTensorInfo.SetDataType(ArmnnType);
2098
2099 std::unique_ptr<armnn::Encoder<float>> pOutputEncoder = armnn::MakeEncoder<float>(outputTensorInfo, output.data());
2100 armnn::Encoder<float>& rOutputEncoder = *pOutputEncoder;
2101
2102 for (auto it = input.begin(); it != input.end(); ++it)
2103 {
2104 rOutputEncoder.Set(*it);
2105 ++rOutputEncoder;
2106 }
2107 return output;
2108}
2109
David Monahan34757812019-06-19 11:47:21 +01002110// Utility method to convert a single value to the correct type
2111template <typename T>
2112T ConvertToDataType(const float& value,
2113 const armnn::TensorInfo& tensorInfo)
2114{
2115 std::vector<T> output(1);
2116 std::unique_ptr<armnn::Encoder<float>> pEncoder = armnn::MakeEncoder<float>(tensorInfo, output.data());
2117 armnn::Encoder<float>& rEncoder = *pEncoder;
2118 rEncoder.Set(value);
2119 return output[0];
2120}
2121
nikraj010421e7f2019-06-14 09:40:34 +01002122template<armnn::DataType ArmnnType, typename T>
nikraj0193f84a92019-06-05 10:48:46 +01002123LayerTestResult<T, 2> Rsqrt2dTestCommon(
2124 armnn::IWorkloadFactory& workloadFactory,
2125 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
2126 const armnn::TensorInfo inputTensorInfo,
2127 const armnn::TensorInfo outputTensorInfo,
nikraj010421e7f2019-06-14 09:40:34 +01002128 const std::vector<float>& inputValues,
2129 const std::vector<float>& expectedOutputValues)
nikraj0193f84a92019-06-05 10:48:46 +01002130{
nikraj010421e7f2019-06-14 09:40:34 +01002131 auto inputTensor = MakeTensor<T, 2>(inputTensorInfo, ConvertToDataType<ArmnnType>(inputValues,inputTensorInfo));
nikraj0193f84a92019-06-05 10:48:46 +01002132
2133 LayerTestResult<T, 2> result(outputTensorInfo);
nikraj010421e7f2019-06-14 09:40:34 +01002134
2135 result.outputExpected = MakeTensor<T, 2>(outputTensorInfo,
2136 ConvertToDataType<ArmnnType>(expectedOutputValues,outputTensorInfo));
nikraj0193f84a92019-06-05 10:48:46 +01002137
2138 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2139 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2140
2141 armnn::RsqrtQueueDescriptor descriptor;
2142
2143 armnn::WorkloadInfo info;
2144
2145 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
2146 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
2147
2148 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateRsqrt(descriptor, info);
2149
2150 inputHandle->Allocate();
2151 outputHandle->Allocate();
2152
2153 CopyDataToITensorHandle(inputHandle.get(), &inputTensor[0][0]);
2154
2155 workload->PostAllocationConfigure();
2156 workload->Execute();
2157
2158 CopyDataFromITensorHandle(&result.output[0][0], outputHandle.get());
2159
2160 return result;
2161}
2162
2163template<armnn::DataType ArmnnType, typename T>
2164LayerTestResult<T, 2> Rsqrt2dTest(
2165 armnn::IWorkloadFactory& workloadFactory,
2166 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
2167{
2168 const armnn::TensorShape inputShape{ 2, 2 };
2169 const armnn::TensorShape outputShape{ 2, 2 };
2170
nikraj010421e7f2019-06-14 09:40:34 +01002171 armnn::TensorInfo inputTensorInfo(inputShape, ArmnnType);
2172 inputTensorInfo.SetQuantizationScale(0.1f);
2173 inputTensorInfo.SetQuantizationOffset(0);
nikraj0193f84a92019-06-05 10:48:46 +01002174
nikraj010421e7f2019-06-14 09:40:34 +01002175 armnn::TensorInfo outputTensorInfo(outputShape, ArmnnType);
2176 outputTensorInfo.SetQuantizationScale(0.1f);
2177 outputTensorInfo.SetQuantizationOffset(0);
nikraj0193f84a92019-06-05 10:48:46 +01002178
nikraj010421e7f2019-06-14 09:40:34 +01002179 std::vector<float> inputValues
2180 {
2181 1.f, 4.f,
2182 16.f, 25.f
2183 };
nikraj0193f84a92019-06-05 10:48:46 +01002184
nikraj010421e7f2019-06-14 09:40:34 +01002185 std::vector<float> expectedOutputValues
2186 {
2187 1.f, 0.5f,
2188 0.25f, 0.2f
2189 };
2190
2191 return Rsqrt2dTestCommon<ArmnnType>(workloadFactory, memoryManager,
nikraj0193f84a92019-06-05 10:48:46 +01002192 inputTensorInfo, outputTensorInfo,
2193 inputValues, expectedOutputValues);
2194}
2195
2196template<armnn::DataType ArmnnType, typename T>
2197LayerTestResult<T, 3> Rsqrt3dTest(
2198 armnn::IWorkloadFactory& workloadFactory,
2199 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
2200{
2201 const armnn::TensorShape inputShape{ 3, 1, 2 };
2202 const armnn::TensorShape outputShape{ 3, 1, 2 };
2203
nikraj010421e7f2019-06-14 09:40:34 +01002204 armnn::TensorInfo inputTensorInfo(inputShape, ArmnnType);
2205 inputTensorInfo.SetQuantizationScale(0.1f);
2206 inputTensorInfo.SetQuantizationOffset(0);
nikraj0193f84a92019-06-05 10:48:46 +01002207
nikraj010421e7f2019-06-14 09:40:34 +01002208 armnn::TensorInfo outputTensorInfo(outputShape, ArmnnType);
2209 outputTensorInfo.SetQuantizationScale(0.1f);
2210 outputTensorInfo.SetQuantizationOffset(0);
nikraj0193f84a92019-06-05 10:48:46 +01002211
nikraj010421e7f2019-06-14 09:40:34 +01002212 std::vector<float> inputValues
2213 {
2214 1.f, 4.f, 16.f,
2215 25.f, 64.f, 100.f
2216 };
nikraj0193f84a92019-06-05 10:48:46 +01002217
nikraj010421e7f2019-06-14 09:40:34 +01002218 std::vector<float> expectedOutputValues
2219 {
2220 1.f, 0.5f, 0.25f,
2221 0.2f, 0.125f, 0.1f
2222 };
2223
2224 auto inputTensor = MakeTensor<T, 3>(inputTensorInfo, ConvertToDataType<ArmnnType>(inputValues,inputTensorInfo));
nikraj0193f84a92019-06-05 10:48:46 +01002225
2226 LayerTestResult<T, 3> result(outputTensorInfo);
nikraj010421e7f2019-06-14 09:40:34 +01002227 result.outputExpected = MakeTensor<T, 3>(outputTensorInfo,
2228 ConvertToDataType<ArmnnType>(expectedOutputValues,outputTensorInfo));
nikraj0193f84a92019-06-05 10:48:46 +01002229
2230 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2231 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2232
2233 armnn::RsqrtQueueDescriptor descriptor;
2234
2235 armnn::WorkloadInfo info;
2236
2237 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
2238 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
2239
2240 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateRsqrt(descriptor, info);
2241
2242 inputHandle->Allocate();
2243 outputHandle->Allocate();
2244
2245 CopyDataToITensorHandle(inputHandle.get(), &inputTensor[0][0][0]);
2246
2247 workload->PostAllocationConfigure();
2248 workload->Execute();
2249
2250 CopyDataFromITensorHandle(&result.output[0][0][0], outputHandle.get());
2251
2252 return result;
2253}
2254
2255template<armnn::DataType ArmnnType, typename T>
2256LayerTestResult<T, 2> RsqrtZeroTest(
2257 armnn::IWorkloadFactory& workloadFactory,
2258 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
2259{
2260 const armnn::TensorShape inputShape{ 1, 2 };
2261 const armnn::TensorShape outputShape{ 1, 2 };
2262
nikraj010421e7f2019-06-14 09:40:34 +01002263 armnn::TensorInfo inputTensorInfo(inputShape, ArmnnType);
2264 inputTensorInfo.SetQuantizationScale(0.1f);
nikraj0193f84a92019-06-05 10:48:46 +01002265
nikraj010421e7f2019-06-14 09:40:34 +01002266 armnn::TensorInfo outputTensorInfo(outputShape, ArmnnType);
2267 outputTensorInfo.SetQuantizationScale(0.1f);
nikraj0193f84a92019-06-05 10:48:46 +01002268
nikraj010421e7f2019-06-14 09:40:34 +01002269 std::vector<float> inputValues
2270 {
2271 0.f, -0.f
2272 };
nikraj0193f84a92019-06-05 10:48:46 +01002273
nikraj010421e7f2019-06-14 09:40:34 +01002274 std::vector<float> expectedOutputValues
2275 {
2276 INFINITY, -INFINITY
2277 };
2278
2279 return Rsqrt2dTestCommon<ArmnnType>(workloadFactory, memoryManager,
nikraj0193f84a92019-06-05 10:48:46 +01002280 inputTensorInfo, outputTensorInfo,
2281 inputValues, expectedOutputValues);
2282}
2283
2284template<armnn::DataType ArmnnType, typename T>
2285LayerTestResult<T, 2> RsqrtNegativeTest(
2286 armnn::IWorkloadFactory& workloadFactory,
2287 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
2288{
2289 const armnn::TensorShape inputShape{ 1, 2 };
2290 const armnn::TensorShape outputShape{ 1, 2 };
2291
nikraj010421e7f2019-06-14 09:40:34 +01002292 armnn::TensorInfo inputTensorInfo(inputShape, ArmnnType);
2293 inputTensorInfo.SetQuantizationScale(0.1f);
2294 inputTensorInfo.SetQuantizationOffset(0);
nikraj0193f84a92019-06-05 10:48:46 +01002295
nikraj010421e7f2019-06-14 09:40:34 +01002296 armnn::TensorInfo outputTensorInfo(outputShape, ArmnnType);
2297 outputTensorInfo.SetQuantizationScale(0.1f);
2298 outputTensorInfo.SetQuantizationOffset(0);
nikraj0193f84a92019-06-05 10:48:46 +01002299
nikraj010421e7f2019-06-14 09:40:34 +01002300 std::vector<float> inputValues
2301 {
2302 -25.f, -16.f
2303 };
nikraj0193f84a92019-06-05 10:48:46 +01002304
nikraj010421e7f2019-06-14 09:40:34 +01002305 std::vector<float> expectedOutputValues
2306 {
2307 -NAN, -NAN
2308 };
2309
2310 return Rsqrt2dTestCommon<ArmnnType>(workloadFactory, memoryManager,
nikraj0193f84a92019-06-05 10:48:46 +01002311 inputTensorInfo, outputTensorInfo,
2312 inputValues, expectedOutputValues);
2313}
2314
2315template<typename T>
Nina Drozd8ed4b8c2019-05-29 10:41:04 +01002316LayerTestResult<T, 4> SimpleReshapeTestImpl(
2317 armnn::IWorkloadFactory& workloadFactory,
2318 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
2319 armnn::TensorInfo inputTensorInfo,
2320 armnn::TensorInfo outputTensorInfo,
2321 const std::vector<T>& inputData,
2322 const std::vector<T>& outputExpectedData)
2323{
2324 auto input = MakeTensor<T, 4>(inputTensorInfo, inputData);
2325
2326 LayerTestResult<T, 4> ret(outputTensorInfo);
2327 ret.outputExpected = MakeTensor<T, 4>(outputTensorInfo, outputExpectedData);
2328
2329 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2330 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2331
2332 armnn::ReshapeQueueDescriptor data;
2333 armnn::WorkloadInfo info;
2334 AddInputToWorkload(data, info, inputTensorInfo, inputHandle.get());
2335 AddOutputToWorkload(data, info, outputTensorInfo, outputHandle.get());
2336
2337 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateReshape(data, info);
2338
2339 inputHandle->Allocate();
2340 outputHandle->Allocate();
2341
2342 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
2343
2344 workload->Execute();
2345
2346 CopyDataFromITensorHandle(&ret.output[0][0][0][0], outputHandle.get());
2347
2348 return ret;
2349}
2350
Francis Murtagh46c09d02019-05-28 08:15:28 +01002351template<armnn::DataType ArmnnType, typename T>
2352LayerTestResult<T, 2> FullyConnectedTest(
2353 armnn::IWorkloadFactory& workloadFactory,
2354 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
2355 bool biasEnabled)
2356{
2357 constexpr static unsigned int inputWidth = 3u;
2358 constexpr static unsigned int inputHeight = 2u;
2359 constexpr static unsigned int inputChannels = 1u;
2360
2361 constexpr static unsigned int inputSize = inputWidth * inputHeight * inputChannels;
2362
2363 constexpr static unsigned int outputChannels = 2u;
2364
2365 armnn::TensorInfo inputTensorInfo({ 1, inputChannels, inputHeight, inputWidth }, ArmnnType);
2366 inputTensorInfo.SetQuantizationScale(0.1f);
2367 inputTensorInfo.SetQuantizationOffset(63);
2368
2369 armnn::TensorInfo outputTensorInfo({ 1, outputChannels }, ArmnnType);
2370 outputTensorInfo.SetQuantizationScale(5.f);
2371 outputTensorInfo.SetQuantizationOffset(biasEnabled ? -50 : 10);
2372
2373 armnn::TensorInfo weightsDesc({ outputChannels, inputSize }, ArmnnType);
2374 weightsDesc.SetQuantizationScale(0.2f);
2375 weightsDesc.SetQuantizationOffset(93);
2376
2377 armnn::TensorInfo biasesDesc({ outputChannels }, GetBiasTypeFromWeightsType(weightsDesc.GetDataType()).value());
2378 biasesDesc.SetQuantizationScale(inputTensorInfo.GetQuantizationScale() * weightsDesc.GetQuantizationScale());
2379 biasesDesc.SetQuantizationOffset(0);
2380
2381 LayerTestResult<T, 2> result(outputTensorInfo);
2382
2383 auto input = MakeTensor<T, 4>(inputTensorInfo, ConvertToDataType<ArmnnType>(
2384 {
2385 -1.2f, 6.1f, -3.5f,
2386 18.8f, -5.5f, 2.9f
2387 },
2388 inputTensorInfo));
2389
2390 auto weights = MakeTensor<T, 2>(weightsDesc, ConvertToDataType<ArmnnType>(
2391 {
2392 -8.4f, 20.0f, -10.4f, -8, 16.4f, -11.8f,
2393 23.4f, 10.4f, -14.0f, -3.8f, -11.8f, 11.4f
2394 },
2395 weightsDesc));
2396
2397 auto bias = MakeTensor<int32_t, 1>(biasesDesc, std::vector<int32_t>{9250, 67500});
2398
2399 result = SimpleFullyConnectedTestImpl<T>(
2400 workloadFactory,
2401 memoryManager,
2402 inputTensorInfo, outputTensorInfo,
2403 weightsDesc, biasesDesc,
2404 weights, bias, input,
2405 biasEnabled, true
2406 );
2407
2408 if (biasEnabled)
2409 {
2410 result.outputExpected = MakeTensor<T, 2>(outputTensorInfo,
2411 ConvertToDataType<ArmnnType>({80.f, 1460.f}, outputTensorInfo));
2412 }
2413 else
2414 {
2415 result.outputExpected = MakeTensor<T, 2>(outputTensorInfo,
2416 ConvertToDataType<ArmnnType>({-107.04f, 110.f}, outputTensorInfo));
2417 }
2418
2419 return result;
Nina Drozd8ed4b8c2019-05-29 10:41:04 +01002420}
2421
Nina Drozd8ed4b8c2019-05-29 10:41:04 +01002422template<armnn::DataType ArmnnType, typename T>
2423LayerTestResult<T, 4> SimpleReshapeTest(
2424 armnn::IWorkloadFactory& workloadFactory,
2425 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
2426{
2427 armnn::TensorInfo inputTensorInfo;
2428 armnn::TensorInfo outputTensorInfo;
2429
2430 unsigned int inputShape[] = { 2, 2, 3, 3 };
2431 unsigned int outputShape[] = { 2, 2, 9, 1 };
2432
2433 inputTensorInfo = armnn::TensorInfo(4, inputShape, ArmnnType);
2434 inputTensorInfo.SetQuantizationScale(1.0f);
2435 outputTensorInfo = armnn::TensorInfo(4, outputShape, ArmnnType);
2436 outputTensorInfo.SetQuantizationScale(1.0f);
2437
2438 auto input = ConvertToDataType<ArmnnType>(
2439 {
2440 0.0f, 1.0f, 2.0f,
2441 3.0f, 4.0f, 5.0f,
2442 6.0f, 7.0f, 8.0f,
2443
2444 9.0f, 10.0f, 11.0f,
2445 12.0f, 13.0f, 14.0f,
2446 15.0f, 16.0f, 17.0f,
2447
2448 18.0f, 19.0f, 20.0f,
2449 21.0f, 22.0f, 23.0f,
2450 24.0f, 25.0f, 26.0f,
2451
2452 27.0f, 28.0f, 29.0f,
2453 30.0f, 31.0f, 32.0f,
2454 33.0f, 34.0f, 35.0f,
2455 },
2456 inputTensorInfo);
2457
2458 auto outputExpected = ConvertToDataType<ArmnnType>(
2459 {
2460 0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f,
2461
2462 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f, 16.0f, 17.0f,
2463
2464 18.0f, 19.0f, 20.0f, 21.0f, 22.0f, 23.0f, 24.0f, 25.0f, 26.0f,
2465
2466 27.0f, 28.0f, 29.0f, 30.0f, 31.0f, 32.0f, 33.0f, 34.0f, 35.0f,
2467 },
2468 outputTensorInfo);
2469
2470 return SimpleReshapeTestImpl<T>(
2471 workloadFactory, memoryManager, inputTensorInfo, outputTensorInfo, input, outputExpected);
Matteo Martincigh42666a12019-05-29 08:53:41 +01002472}
James Conroy83735b12019-05-30 16:36:59 +01002473
2474template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
2475LayerTestResult<T, 4> SimpleFloorTest(
2476 armnn::IWorkloadFactory& workloadFactory,
2477 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
2478{
James Conroyb40d7102019-06-04 12:32:09 +01002479 armnn::TensorInfo inputTensorInfo({1, 3, 2, 3}, ArmnnType);
2480 inputTensorInfo.SetQuantizationScale(0.1f);
2481
2482 armnn::TensorInfo outputTensorInfo(inputTensorInfo);
2483 outputTensorInfo.SetQuantizationScale(0.1f);
James Conroy83735b12019-05-30 16:36:59 +01002484
2485 auto input = MakeTensor<T, 4>(inputTensorInfo, ConvertToDataType<ArmnnType>(
2486 { -37.5f, -15.2f, -8.76f, -2.0f, -1.5f, -1.3f, -0.5f, -0.4f, 0.0f,
2487 1.0f, 0.4f, 0.5f, 1.3f, 1.5f, 2.0f, 8.76f, 15.2f, 37.5f },
2488 inputTensorInfo));
2489
2490 LayerTestResult<T, 4> ret(outputTensorInfo);
2491 ret.outputExpected = MakeTensor<T, 4>(outputTensorInfo, ConvertToDataType<ArmnnType>(
2492 { -38.0f, -16.0f, -9.0f, -2.0f, -2.0f, -2.0f, -1.0f, -1.0f, 0.0f,
2493 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 2.0f, 8.0f, 15.0f, 37.0f },
2494 outputTensorInfo));
2495
2496 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2497 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2498
2499 armnn::FloorQueueDescriptor data;
2500 armnn::WorkloadInfo info;
2501 AddInputToWorkload(data, info, inputTensorInfo, inputHandle.get());
2502 AddOutputToWorkload(data, info, outputTensorInfo, outputHandle.get());
2503
2504 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateFloor(data, info);
2505
2506 inputHandle->Allocate();
2507 outputHandle->Allocate();
2508
2509 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
2510
2511 workload->Execute();
2512
2513 CopyDataFromITensorHandle(&ret.output[0][0][0][0], outputHandle.get());
2514
2515 return ret;
Matteo Martincighf5507132019-06-04 10:59:47 +01002516}
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002517
2518
2519template<armnn::DataType ArmnnType, typename T>
2520LayerTestResult<T, 4> ResizeBilinearNopTest(
2521 armnn::IWorkloadFactory& workloadFactory,
2522 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
2523 const armnn::DataLayout dataLayout)
2524{
2525 armnn::TensorInfo inputTensorInfo = armnn::IsQuantizedType<T>()
2526 ? armnnUtils::GetTensorInfo(1, 1, 4, 4, dataLayout, ArmnnType)
2527 : armnnUtils::GetTensorInfo(1, 2, 4, 4, dataLayout, ArmnnType);
2528 armnn::TensorInfo outputTensorInfo = armnn::IsQuantizedType<T>()
2529 ? armnnUtils::GetTensorInfo(1, 1, 4, 4, dataLayout, ArmnnType)
2530 : armnnUtils::GetTensorInfo(1, 2, 4, 4, dataLayout, ArmnnType);
2531 if (armnn::IsQuantizedType<T>())
2532 {
2533 inputTensorInfo.SetQuantizationScale(1.5f);
2534 inputTensorInfo.SetQuantizationOffset(-3);
2535 outputTensorInfo.SetQuantizationScale(1.5f);
2536 outputTensorInfo.SetQuantizationOffset(-3);
2537 }
2538
2539 std::vector<float> inputData = armnn::IsQuantizedType<T>()
2540 ? std::initializer_list<float>
2541 {
2542 1, 2, 3, 4,
2543 2, 3, 4, 5,
2544 3, 4, 5, 6,
2545 4, 5, 6, 7
2546 }
2547 : std::initializer_list<float>
2548 {
2549 1.0f, 2.0f, 3.0f, 4.0f,
2550 2.0f, 3.0f, 4.0f, 5.0f,
2551 3.0f, 4.0f, 5.0f, 6.0f,
2552 4.0f, 5.0f, 6.0f, 7.0f,
2553
2554 1.0f, 2.0f, 3.0f, 4.0f,
2555 2.0f, 3.0f, 4.0f, 5.0f,
2556 3.0f, 4.0f, 5.0f, 6.0f,
2557 4.0f, 5.0f, 6.0f, 7.0f
2558 };
2559
2560 const armnn::PermutationVector NCHWToNHWC = { 0, 3, 1, 2 };
2561 if (dataLayout == armnn::DataLayout::NHWC)
2562 {
2563 std::vector<float> tmp(inputData.size());
2564 armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(float));
2565 inputData = tmp;
2566 }
2567
2568 auto input = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(),
2569 inputTensorInfo.GetQuantizationOffset(),
2570 inputData));
2571
2572 LayerTestResult<T, 4> result(outputTensorInfo);
2573 result.outputExpected = input;
2574
2575 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2576 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2577
Aron Virginas-Tar169d2f12019-07-01 19:01:44 +01002578 armnn::ResizeQueueDescriptor descriptor;
2579 descriptor.m_Parameters.m_Method = armnn::ResizeMethod::Bilinear;
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002580 descriptor.m_Parameters.m_DataLayout = dataLayout;
Aron Virginas-Tar169d2f12019-07-01 19:01:44 +01002581
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002582 armnn::WorkloadInfo info;
2583 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
2584 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
2585
Aron Virginas-Tar169d2f12019-07-01 19:01:44 +01002586 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateResize(descriptor, info);
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002587
2588 inputHandle->Allocate();
2589 outputHandle->Allocate();
2590 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
2591
2592 workload->PostAllocationConfigure();
2593 workload->Execute();
2594
2595 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
2596 return result;
2597}
2598
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002599template<armnn::DataType ArmnnType, typename T>
2600LayerTestResult<T, 4> SimpleResizeBilinearTest(
2601 armnn::IWorkloadFactory& workloadFactory,
2602 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
2603 const armnn::DataLayout dataLayout)
2604{
2605 armnn::TensorInfo inputTensorInfo = armnn::IsQuantizedType<T>()
2606 ? armnnUtils::GetTensorInfo(1, 1, 2, 2, dataLayout, ArmnnType)
2607 : armnnUtils::GetTensorInfo(1, 2, 2, 2, dataLayout, ArmnnType);
2608 armnn::TensorInfo outputTensorInfo = armnn::IsQuantizedType<T>()
2609 ? armnnUtils::GetTensorInfo(1, 1, 1, 1, dataLayout, ArmnnType)
2610 : armnnUtils::GetTensorInfo(1, 2, 1, 1, dataLayout, ArmnnType);
2611
2612 if (armnn::IsQuantizedType<T>())
2613 {
2614 inputTensorInfo.SetQuantizationScale(0.1567f);
2615 inputTensorInfo.SetQuantizationOffset(1);
2616 outputTensorInfo.SetQuantizationScale(0.1567f);
2617 outputTensorInfo.SetQuantizationOffset(1);
2618 }
2619
2620 std::vector<float> inputData = armnn::IsQuantizedType<T>()
2621 ? std::initializer_list<float>
2622 {
2623 1, 255,
2624 200, 250
2625 }
2626 : std::initializer_list<float>
2627 {
2628 1.0f, 255.0f,
2629 200.0f, 250.0f,
2630
2631 250.0f, 200.0f,
2632 250.0f, 1.0f
2633 };
2634
2635 // The 'resize bilinear' operation projects the top-left corner of output texels into the input image,
2636 // then figures out the interpolants and weights. Note this is different to projecting the centre of the
2637 // output texel. Thus, for a input matrix of 2x2, we'll expect the output 1x1 matrix to contain, as
2638 // its single element, the value that was at position (0,0) of the input matrix (rather than an average,
2639 // which we would expect if projecting the centre).
2640
2641 std::vector<float> outputData = armnn::IsQuantizedType<T>()
2642 ? std::initializer_list<float>
2643 {
2644 1
2645 }
2646 : std::initializer_list<float>
2647 {
2648 1.0f,
2649
2650 250.0f
2651 };
2652
2653 const armnn::PermutationVector NCHWToNHWC = { 0, 3, 1, 2 };
2654 if (dataLayout == armnn::DataLayout::NHWC)
2655 {
2656 std::vector<float> tmp(inputData.size());
2657 armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(float));
2658 inputData = tmp;
2659
2660 std::vector<float> tmp1(outputData.size());
2661 armnnUtils::Permute(outputTensorInfo.GetShape(), NCHWToNHWC, outputData.data(), tmp1.data(), sizeof(float));
2662 outputData = tmp1;
2663 }
2664
2665 auto input = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(),
2666 inputTensorInfo.GetQuantizationOffset(),
2667 inputData));
2668
2669 LayerTestResult<T, 4> result(outputTensorInfo);
2670 result.outputExpected = MakeTensor<T, 4>(outputTensorInfo,
2671 QuantizedVector<T>(outputTensorInfo.GetQuantizationScale(),
2672 outputTensorInfo.GetQuantizationOffset(),
2673 outputData));
2674
2675 std::unique_ptr <armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2676 std::unique_ptr <armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2677
Aron Virginas-Tar169d2f12019-07-01 19:01:44 +01002678 armnn::ResizeQueueDescriptor descriptor;
2679 descriptor.m_Parameters.m_Method = armnn::ResizeMethod::Bilinear;
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002680 descriptor.m_Parameters.m_DataLayout = dataLayout;
Aron Virginas-Tar169d2f12019-07-01 19:01:44 +01002681
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002682 armnn::WorkloadInfo info;
2683 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
2684 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
2685
Aron Virginas-Tar169d2f12019-07-01 19:01:44 +01002686 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateResize(descriptor, info);
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002687
2688 inputHandle->Allocate();
2689 outputHandle->Allocate();
2690 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
2691
2692 workload->PostAllocationConfigure();
2693 workload->Execute();
2694
2695 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
2696 return result;
2697}
2698
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002699template<armnn::DataType ArmnnType, typename T>
2700LayerTestResult<T, 4> ResizeBilinearSqMinTest(
2701 armnn::IWorkloadFactory& workloadFactory,
2702 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
2703 const armnn::DataLayout dataLayout)
2704{
2705 armnn::TensorInfo inputTensorInfo = armnn::IsQuantizedType<T>()
2706 ? armnnUtils::GetTensorInfo(1, 1, 4, 4, dataLayout, ArmnnType)
2707 : armnnUtils::GetTensorInfo(1, 2, 4, 4, dataLayout, ArmnnType);
2708 armnn::TensorInfo outputTensorInfo = armnn::IsQuantizedType<T>()
2709 ? armnnUtils::GetTensorInfo(1, 1, 2, 2, dataLayout, ArmnnType)
2710 : armnnUtils::GetTensorInfo(1, 2, 2, 2, dataLayout, ArmnnType);
2711
2712 if (armnn::IsQuantizedType<T>())
2713 {
2714 inputTensorInfo.SetQuantizationScale(3.141592f);
2715 inputTensorInfo.SetQuantizationOffset(3);
2716 outputTensorInfo.SetQuantizationScale(3.141592f);
2717 outputTensorInfo.SetQuantizationOffset(3);
2718 }
2719
2720 std::vector<float> inputData = armnn::IsQuantizedType<T>()
2721 ? std::initializer_list<float>
2722 {
2723 1, 2, 3, 4,
2724 2, 3, 4, 5,
2725 3, 4, 5, 6,
2726 4, 5, 6, 7
2727 }
2728 : std::initializer_list<float>
2729 {
2730 1.0f, 2.0f, 3.0f, 4.0f,
2731 2.0f, 3.0f, 4.0f, 5.0f,
2732 3.0f, 4.0f, 5.0f, 6.0f,
2733 4.0f, 5.0f, 6.0f, 7.0f,
2734
2735 7.0f, 6.0f, 5.0f, 4.0f,
2736 6.0f, 5.0f, 4.0f, 3.0f,
2737 5.0f, 4.0f, 3.0f, 2.0f,
2738 4.0f, 3.0f, 2.0f, 1.0f
2739 };
2740
2741 std::vector<float> outputData = armnn::IsQuantizedType<T>()
2742 ? std::initializer_list<float>
2743 {
2744 1, 3,
2745 3, 5
2746 }
2747 : std::initializer_list<float>
2748 {
2749 1.0f, 3.0f,
2750 3.0f, 5.0f,
2751
2752 7.0f, 5.0f,
2753 5.0f, 3.0f
2754 };
2755
2756 const armnn::PermutationVector NCHWToNHWC = { 0, 3, 1, 2 };
2757 if (dataLayout == armnn::DataLayout::NHWC)
2758 {
2759 std::vector<float> tmp(inputData.size());
2760 armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(float));
2761 inputData = tmp;
2762
2763 std::vector<float> tmp1(outputData.size());
2764 armnnUtils::Permute(outputTensorInfo.GetShape(), NCHWToNHWC, outputData.data(), tmp1.data(), sizeof(float));
2765 outputData = tmp1;
2766 }
2767
2768 auto input = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(),
2769 inputTensorInfo.GetQuantizationOffset(),
2770 inputData));
2771
2772 LayerTestResult<T, 4> result(outputTensorInfo);
2773 result.outputExpected = MakeTensor<T, 4>(outputTensorInfo,
2774 QuantizedVector<T>(outputTensorInfo.GetQuantizationScale(),
2775 outputTensorInfo.GetQuantizationOffset(),
2776 outputData));
2777
2778 std::unique_ptr <armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2779 std::unique_ptr <armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2780
Aron Virginas-Tar169d2f12019-07-01 19:01:44 +01002781 armnn::ResizeQueueDescriptor descriptor;
2782 descriptor.m_Parameters.m_Method = armnn::ResizeMethod::Bilinear;
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002783 descriptor.m_Parameters.m_DataLayout = dataLayout;
Aron Virginas-Tar169d2f12019-07-01 19:01:44 +01002784
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002785 armnn::WorkloadInfo info;
2786 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
2787 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
2788
Aron Virginas-Tar169d2f12019-07-01 19:01:44 +01002789 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateResize(descriptor, info);
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002790
2791 inputHandle->Allocate();
2792 outputHandle->Allocate();
2793 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
2794
2795 workload->PostAllocationConfigure();
2796 workload->Execute();
2797
2798 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
2799 return result;
2800}
2801
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002802template<armnn::DataType ArmnnType, typename T>
2803LayerTestResult<T, 4> ResizeBilinearMinTest(
2804 armnn::IWorkloadFactory& workloadFactory,
2805 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
2806 const armnn::DataLayout dataLayout)
2807{
2808 armnn::TensorInfo inputTensorInfo = armnn::IsQuantizedType<T>()
2809 ? armnnUtils::GetTensorInfo(1, 1, 2, 3, dataLayout, ArmnnType)
2810 : armnnUtils::GetTensorInfo(1, 2, 3, 5, dataLayout, ArmnnType);
2811 armnn::TensorInfo outputTensorInfo = armnn::IsQuantizedType<T>()
2812 ? armnnUtils::GetTensorInfo(1, 1, 1, 2, dataLayout, ArmnnType)
2813 : armnnUtils::GetTensorInfo(1, 2, 2, 3, dataLayout, ArmnnType);
2814
2815 if (armnn::IsQuantizedType<T>())
2816 {
2817 inputTensorInfo.SetQuantizationScale(1.5f);
2818 inputTensorInfo.SetQuantizationOffset(-1);
2819 outputTensorInfo.SetQuantizationScale(1.5f);
2820 outputTensorInfo.SetQuantizationOffset(-1);
2821 }
2822
2823 std::vector<float> inputData = armnn::IsQuantizedType<T>()
2824 ? std::initializer_list<float>
2825 {
2826 3.0f, 4.5f, 6.0f, // 1, 2, 3, : Expected quantised values
2827 9.0f, 13.5f, 21.0f // 5, 8, 13
2828 }
2829 : std::initializer_list<float>
2830 {
2831 1.0f, 2.0f, 3.0f, 5.0f, 8.0f,
2832 13.0f, 21.0f, 34.0f, 55.0f, 89.0f,
2833 144.0f, 233.0f, 377.0f, 610.0f, 987.0f,
2834
2835 987.0f, 610.0f, 377.0f, 233.0f, 144.0f,
2836 89.0f, 55.0f, 34.0f, 21.0f, 13.0f,
2837 8.0f, 5.0f, 3.0f, 2.0f, 1.0f
2838 };
2839
2840 std::vector<float> outputData = armnn::IsQuantizedType<T>()
2841 ? std::initializer_list<float>
2842 {
2843 3.0f, 5.25f // 1, 3
2844 }
2845 : std::initializer_list<float>
2846 {
2847 1.0f, 2.6666f, 6.00f,
2848 78.5f, 179.3333f, 401.00f,
2849
2850 987.0f, 454.6670f, 203.33f,
2851 48.5f, 22.3333f, 10.00f
2852 };
2853
2854 const armnn::PermutationVector NCHWToNHWC = { 0, 3, 1, 2 };
2855 if (dataLayout == armnn::DataLayout::NHWC)
2856 {
2857 std::vector<float> tmp(inputData.size());
2858 armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(float));
2859 inputData = tmp;
2860
2861 std::vector<float> tmp1(outputData.size());
2862 armnnUtils::Permute(outputTensorInfo.GetShape(), NCHWToNHWC, outputData.data(), tmp1.data(), sizeof(float));
2863 outputData = tmp1;
2864 }
2865
2866 auto input = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(),
2867 inputTensorInfo.GetQuantizationOffset(),
2868 inputData));
2869
2870 LayerTestResult<T, 4> result(outputTensorInfo);
2871 result.outputExpected = MakeTensor<T, 4>(outputTensorInfo,
2872 QuantizedVector<T>(outputTensorInfo.GetQuantizationScale(),
2873 outputTensorInfo.GetQuantizationOffset(),
2874 outputData));
2875
2876 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2877 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2878
Aron Virginas-Tar169d2f12019-07-01 19:01:44 +01002879 armnn::ResizeQueueDescriptor descriptor;
2880 descriptor.m_Parameters.m_Method = armnn::ResizeMethod::Bilinear;
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002881 descriptor.m_Parameters.m_DataLayout = dataLayout;
Aron Virginas-Tar169d2f12019-07-01 19:01:44 +01002882
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002883 armnn::WorkloadInfo info;
2884 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
2885 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
2886
Aron Virginas-Tar169d2f12019-07-01 19:01:44 +01002887 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateResize(descriptor, info);
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002888
2889 inputHandle->Allocate();
2890 outputHandle->Allocate();
2891 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
2892
2893 workload->PostAllocationConfigure();
2894 workload->Execute();
2895
2896 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
2897 return result;
2898}
2899
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002900template<armnn::DataType ArmnnType, typename T>
2901LayerTestResult<T, 4> ResizeBilinearMagTest(
2902 armnn::IWorkloadFactory& workloadFactory,
2903 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
2904 const armnn::DataLayout dataLayout)
2905{
2906 armnn::TensorInfo inputTensorInfo = armnn::IsQuantizedType<T>()
2907 ? armnnUtils::GetTensorInfo(1, 1, 3, 2, dataLayout, ArmnnType)
2908 : armnnUtils::GetTensorInfo(1, 2, 3, 2, dataLayout, ArmnnType);
2909 armnn::TensorInfo outputTensorInfo = armnn::IsQuantizedType<T>()
2910 ? armnnUtils::GetTensorInfo(1, 1, 3, 5, dataLayout, ArmnnType)
2911 : armnnUtils::GetTensorInfo(1, 2, 3, 5, dataLayout, ArmnnType);
2912
2913 if (armnn::IsQuantizedType<T>())
2914 {
2915 inputTensorInfo.SetQuantizationScale(0.010765f);
2916 inputTensorInfo.SetQuantizationOffset(7);
2917 outputTensorInfo.SetQuantizationScale(0.010132f);
2918 outputTensorInfo.SetQuantizationOffset(-18);
2919 }
2920
2921 std::vector<float> inputData = armnn::IsQuantizedType<T>()
2922 ? std::initializer_list<float>
2923 {
2924 0.183005f, 2.379065f, // 24, 228, : Expected quantised values
2925 1.05497f, 1.302565f, // 105, 128,
2926 2.400595f, 0.68896f // 230, 71
2927 }
2928 : std::initializer_list<float>
2929 {
2930 1.0f, 2.0f,
2931 13.0f, 21.0f,
2932 144.0f, 233.0f,
2933
2934 233.0f, 144.0f,
2935 21.0f, 13.0f,
2936 2.0f, 1.0f
2937 };
2938 std::vector<float> outputData = armnn::IsQuantizedType<T>()
2939 ? std::initializer_list<float>
2940 {
2941 0.18300501f, 1.06142902f, 1.93985295f, 2.37906504f, 2.37906504f,
2942 1.05497003f, 1.15400803f, 1.25304604f, 1.30256498f, 1.30256498f,
2943 2.40059495f, 1.71594095f, 1.03128707f, 0.68896002f, 0.68896002f
2944 // 0, 87, 173, 217, 217, : Expected quantised values
2945 // 86, 96, 106, 111, 111,
2946 // 219, 151, 84, 50, 50
2947 }
2948 : std::initializer_list<float>
2949 {
2950 1.0f, 1.4f, 1.8f, 2.0f, 2.0f,
2951 13.0f, 16.2f, 19.4f, 21.0f, 21.0f,
2952 144.0f, 179.6f, 215.2f, 233.0f, 233.0f,
2953
2954 233.0f, 197.4f, 161.8f, 144.0f, 144.0f,
2955 21.0f, 17.8f, 14.6f, 13.0f, 13.0f,
2956 2.0f, 1.6f, 1.2f, 1.0f, 1.0f
2957 };
2958
2959 const armnn::PermutationVector NCHWToNHWC = { 0, 3, 1, 2 };
2960 if (dataLayout == armnn::DataLayout::NHWC)
2961 {
2962 std::vector<float> tmp(inputData.size());
2963 armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(float));
2964 inputData = tmp;
2965
2966 std::vector<float> tmp1(outputData.size());
2967 armnnUtils::Permute(outputTensorInfo.GetShape(), NCHWToNHWC, outputData.data(), tmp1.data(), sizeof(float));
2968 outputData = tmp1;
2969 }
2970
2971 auto input = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(),
2972 inputTensorInfo.GetQuantizationOffset(),
2973 inputData));
2974
2975 LayerTestResult<T, 4> result(outputTensorInfo);
2976 result.outputExpected = MakeTensor<T, 4>(outputTensorInfo,
2977 QuantizedVector<T>(outputTensorInfo.GetQuantizationScale(),
2978 outputTensorInfo.GetQuantizationOffset(),
2979 outputData));
2980
2981 std::unique_ptr <armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2982 std::unique_ptr <armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2983
Aron Virginas-Tar169d2f12019-07-01 19:01:44 +01002984 armnn::ResizeQueueDescriptor descriptor;
2985 descriptor.m_Parameters.m_Method = armnn::ResizeMethod::Bilinear;
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002986 descriptor.m_Parameters.m_DataLayout = dataLayout;
Aron Virginas-Tar169d2f12019-07-01 19:01:44 +01002987
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002988 armnn::WorkloadInfo info;
2989 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
2990 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
2991
Aron Virginas-Tar169d2f12019-07-01 19:01:44 +01002992 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateResize(descriptor, info);
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002993
2994 inputHandle->Allocate();
2995 outputHandle->Allocate();
2996 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
2997
2998 workload->PostAllocationConfigure();
2999 workload->Execute();
3000
3001 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
3002 return result;
3003}
3004
Teresa Charlin970f43b2019-07-01 13:51:07 +01003005
3006template<armnn::DataType ArmnnType, typename T>
3007LayerTestResult<T, 4> ResizeNearestNeighborNopTest(
3008 armnn::IWorkloadFactory& workloadFactory,
3009 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
3010 const armnn::DataLayout dataLayout)
3011{
3012 armnn::TensorInfo inputTensorInfo = armnn::IsQuantizedType<T>()
3013 ? armnnUtils::GetTensorInfo(1, 1, 4, 4, dataLayout, ArmnnType)
3014 : armnnUtils::GetTensorInfo(1, 2, 4, 4, dataLayout, ArmnnType);
3015 armnn::TensorInfo outputTensorInfo = armnn::IsQuantizedType<T>()
3016 ? armnnUtils::GetTensorInfo(1, 1, 4, 4, dataLayout, ArmnnType)
3017 : armnnUtils::GetTensorInfo(1, 2, 4, 4, dataLayout, ArmnnType);
3018 if (armnn::IsQuantizedType<T>())
3019 {
3020 inputTensorInfo.SetQuantizationScale(1.5f);
3021 inputTensorInfo.SetQuantizationOffset(-3);
3022 outputTensorInfo.SetQuantizationScale(1.5f);
3023 outputTensorInfo.SetQuantizationOffset(-3);
3024 }
3025
3026 std::vector<float> inputData = armnn::IsQuantizedType<T>()
3027 ? std::initializer_list<float>
3028 {
3029 1, 2, 3, 4,
3030 2, 3, 4, 5,
3031 3, 4, 5, 6,
3032 4, 5, 6, 7
3033 }
3034 : std::initializer_list<float>
3035 {
3036 1.0f, 2.0f, 3.0f, 4.0f,
3037 2.0f, 3.0f, 4.0f, 5.0f,
3038 3.0f, 4.0f, 5.0f, 6.0f,
3039 4.0f, 5.0f, 6.0f, 7.0f,
3040
3041 1.0f, 2.0f, 3.0f, 4.0f,
3042 2.0f, 3.0f, 4.0f, 5.0f,
3043 3.0f, 4.0f, 5.0f, 6.0f,
3044 4.0f, 5.0f, 6.0f, 7.0f
3045 };
3046
3047 const armnn::PermutationVector NCHWToNHWC = { 0, 3, 1, 2 };
3048 if (dataLayout == armnn::DataLayout::NHWC)
3049 {
3050 std::vector<float> tmp(inputData.size());
3051 armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(float));
3052 inputData = tmp;
3053 }
3054
3055 auto input = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(),
3056 inputTensorInfo.GetQuantizationOffset(),
3057 inputData));
3058
3059 LayerTestResult<T, 4> result(outputTensorInfo);
3060 result.outputExpected = input;
3061
3062 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
3063 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
3064
3065 armnn::ResizeQueueDescriptor descriptor;
3066 descriptor.m_Parameters.m_Method = armnn::ResizeMethod::NearestNeighbor;
3067 descriptor.m_Parameters.m_DataLayout = dataLayout;
3068 armnn::WorkloadInfo info;
3069 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
3070 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
3071
3072 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateResize(descriptor, info);
3073
3074 inputHandle->Allocate();
3075 outputHandle->Allocate();
3076 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
3077
3078 workload->PostAllocationConfigure();
3079 workload->Execute();
3080
3081 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
3082 return result;
3083}
3084
3085template<armnn::DataType ArmnnType, typename T>
3086LayerTestResult<T, 4> SimpleResizeNearestNeighborTest(
3087 armnn::IWorkloadFactory& workloadFactory,
3088 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
3089 const armnn::DataLayout dataLayout)
3090{
3091 armnn::TensorInfo inputTensorInfo = armnn::IsQuantizedType<T>()
3092 ? armnnUtils::GetTensorInfo(1, 1, 2, 2, dataLayout, ArmnnType)
3093 : armnnUtils::GetTensorInfo(1, 2, 2, 2, dataLayout, ArmnnType);
3094 armnn::TensorInfo outputTensorInfo = armnn::IsQuantizedType<T>()
3095 ? armnnUtils::GetTensorInfo(1, 1, 1, 1, dataLayout, ArmnnType)
3096 : armnnUtils::GetTensorInfo(1, 2, 1, 1, dataLayout, ArmnnType);
3097
3098 if (armnn::IsQuantizedType<T>())
3099 {
3100 inputTensorInfo.SetQuantizationScale(0.1567f);
3101 inputTensorInfo.SetQuantizationOffset(1);
3102 outputTensorInfo.SetQuantizationScale(0.1567f);
3103 outputTensorInfo.SetQuantizationOffset(1);
3104 }
3105
3106 std::vector<float> inputData = armnn::IsQuantizedType<T>()
3107 ? std::initializer_list<float>
3108 {
3109 1, 255,
3110 200, 250
3111 }
3112 : std::initializer_list<float>
3113 {
3114 1.0f, 255.0f,
3115 200.0f, 250.0f,
3116
3117 250.0f, 200.0f,
3118 250.0f, 1.0f
3119 };
3120
3121 // The 'resize' operation projects the top-left corner of output texels into the input image,
3122 // then figures out the interpolants and weights. Note this is different to projecting the centre of the
3123 // output texel. Thus, for a input matrix of 2x2, we'll expect the output 1x1 matrix to contain, as
3124 // its single element, the value that was at position (0,0) of the input matrix (rather than an average,
3125 // which we would expect if projecting the centre).
3126
3127 std::vector<float> outputData = armnn::IsQuantizedType<T>()
3128 ? std::initializer_list<float>
3129 {
3130 1
3131 }
3132 : std::initializer_list<float>
3133 {
3134 1.0f,
3135
3136 250.0f
3137 };
3138
3139 const armnn::PermutationVector NCHWToNHWC = { 0, 3, 1, 2 };
3140 if (dataLayout == armnn::DataLayout::NHWC)
3141 {
3142 std::vector<float> tmp(inputData.size());
3143 armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(float));
3144 inputData = tmp;
3145
3146 std::vector<float> tmp1(outputData.size());
3147 armnnUtils::Permute(outputTensorInfo.GetShape(), NCHWToNHWC, outputData.data(), tmp1.data(), sizeof(float));
3148 outputData = tmp1;
3149 }
3150
3151 auto input = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(),
3152 inputTensorInfo.GetQuantizationOffset(),
3153 inputData));
3154
3155 LayerTestResult<T, 4> result(outputTensorInfo);
3156 result.outputExpected = MakeTensor<T, 4>(outputTensorInfo,
3157 QuantizedVector<T>(outputTensorInfo.GetQuantizationScale(),
3158 outputTensorInfo.GetQuantizationOffset(),
3159 outputData));
3160
3161 std::unique_ptr <armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
3162 std::unique_ptr <armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
3163
3164 armnn::ResizeQueueDescriptor descriptor;
3165 descriptor.m_Parameters.m_DataLayout = dataLayout;
3166 descriptor.m_Parameters.m_Method = armnn::ResizeMethod::NearestNeighbor;
3167 armnn::WorkloadInfo info;
3168 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
3169 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
3170
3171 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateResize(descriptor, info);
3172
3173 inputHandle->Allocate();
3174 outputHandle->Allocate();
3175 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
3176
3177 workload->PostAllocationConfigure();
3178 workload->Execute();
3179
3180 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
3181 return result;
3182}
3183
3184template<armnn::DataType ArmnnType, typename T>
3185LayerTestResult<T, 4> ResizeNearestNeighborSqMinTest(
3186 armnn::IWorkloadFactory& workloadFactory,
3187 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
3188 const armnn::DataLayout dataLayout)
3189{
3190 armnn::TensorInfo inputTensorInfo = armnn::IsQuantizedType<T>()
3191 ? armnnUtils::GetTensorInfo(1, 1, 4, 4, dataLayout, ArmnnType)
3192 : armnnUtils::GetTensorInfo(1, 2, 4, 4, dataLayout, ArmnnType);
3193 armnn::TensorInfo outputTensorInfo = armnn::IsQuantizedType<T>()
3194 ? armnnUtils::GetTensorInfo(1, 1, 2, 2, dataLayout, ArmnnType)
3195 : armnnUtils::GetTensorInfo(1, 2, 2, 2, dataLayout, ArmnnType);
3196
3197 if (armnn::IsQuantizedType<T>())
3198 {
3199 inputTensorInfo.SetQuantizationScale(3.141592f);
3200 inputTensorInfo.SetQuantizationOffset(3);
3201 outputTensorInfo.SetQuantizationScale(3.141592f);
3202 outputTensorInfo.SetQuantizationOffset(3);
3203 }
3204
3205 std::vector<float> inputData = armnn::IsQuantizedType<T>()
3206 ? std::initializer_list<float>
3207 {
3208 1, 2, 3, 4,
3209 2, 3, 4, 5,
3210 3, 4, 5, 6,
3211 4, 5, 6, 7
3212 }
3213 : std::initializer_list<float>
3214 {
3215 1.0f, 2.0f, 3.0f, 4.0f,
3216 2.0f, 3.0f, 4.0f, 5.0f,
3217 3.0f, 4.0f, 5.0f, 6.0f,
3218 4.0f, 5.0f, 6.0f, 7.0f,
3219
3220 7.0f, 6.0f, 5.0f, 4.0f,
3221 6.0f, 5.0f, 4.0f, 3.0f,
3222 5.0f, 4.0f, 3.0f, 2.0f,
3223 4.0f, 3.0f, 2.0f, 1.0f
3224 };
3225
3226 std::vector<float> outputData = armnn::IsQuantizedType<T>()
3227 ? std::initializer_list<float>
3228 {
3229 1, 3,
3230 3, 5
3231 }
3232 : std::initializer_list<float>
3233 {
3234 1.0f, 3.0f,
3235 3.0f, 5.0f,
3236
3237 7.0f, 5.0f,
3238 5.0f, 3.0f
3239 };
3240
3241 const armnn::PermutationVector NCHWToNHWC = { 0, 3, 1, 2 };
3242 if (dataLayout == armnn::DataLayout::NHWC)
3243 {
3244 std::vector<float> tmp(inputData.size());
3245 armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(float));
3246 inputData = tmp;
3247
3248 std::vector<float> tmp1(outputData.size());
3249 armnnUtils::Permute(outputTensorInfo.GetShape(), NCHWToNHWC, outputData.data(), tmp1.data(), sizeof(float));
3250 outputData = tmp1;
3251 }
3252
3253 auto input = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(),
3254 inputTensorInfo.GetQuantizationOffset(),
3255 inputData));
3256
3257 LayerTestResult<T, 4> result(outputTensorInfo);
3258 result.outputExpected = MakeTensor<T, 4>(outputTensorInfo,
3259 QuantizedVector<T>(outputTensorInfo.GetQuantizationScale(),
3260 outputTensorInfo.GetQuantizationOffset(),
3261 outputData));
3262
3263 std::unique_ptr <armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
3264 std::unique_ptr <armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
3265
3266 armnn::ResizeQueueDescriptor descriptor;
3267 descriptor.m_Parameters.m_DataLayout = dataLayout;
3268 descriptor.m_Parameters.m_Method = armnn::ResizeMethod::NearestNeighbor;
3269 armnn::WorkloadInfo info;
3270 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
3271 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
3272
3273 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateResize(descriptor, info);
3274
3275 inputHandle->Allocate();
3276 outputHandle->Allocate();
3277 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
3278
3279 workload->PostAllocationConfigure();
3280 workload->Execute();
3281
3282 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
3283 return result;
3284}
3285
3286template<armnn::DataType ArmnnType, typename T>
3287LayerTestResult<T, 4> ResizeNearestNeighborMinTest(
3288 armnn::IWorkloadFactory& workloadFactory,
3289 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
3290 const armnn::DataLayout dataLayout)
3291{
3292 armnn::TensorInfo inputTensorInfo = armnn::IsQuantizedType<T>()
3293 ? armnnUtils::GetTensorInfo(1, 1, 2, 3, dataLayout, ArmnnType)
3294 : armnnUtils::GetTensorInfo(1, 2, 3, 5, dataLayout, ArmnnType);
3295 armnn::TensorInfo outputTensorInfo = armnn::IsQuantizedType<T>()
3296 ? armnnUtils::GetTensorInfo(1, 1, 1, 2, dataLayout, ArmnnType)
3297 : armnnUtils::GetTensorInfo(1, 2, 2, 3, dataLayout, ArmnnType);
3298
3299 if (armnn::IsQuantizedType<T>())
3300 {
3301 inputTensorInfo.SetQuantizationScale(1.5f);
3302 inputTensorInfo.SetQuantizationOffset(-1);
3303 outputTensorInfo.SetQuantizationScale(1.5f);
3304 outputTensorInfo.SetQuantizationOffset(-1);
3305 }
3306
3307 std::vector<float> inputData = armnn::IsQuantizedType<T>()
3308 ? std::initializer_list<float>
3309 {
3310 3.0f, 4.5f, 6.0f, // 1, 2, 3, : Expected quantised values
3311 9.0f, 13.5f, 21.0f // 5, 8, 13
3312 }
3313 : std::initializer_list<float>
3314 {
3315 1.0f, 2.0f, 3.0f, 5.0f, 8.0f,
3316 13.0f, 21.0f, 34.0f, 55.0f, 89.0f,
3317 144.0f, 233.0f, 377.0f, 610.0f, 987.0f,
3318
3319 987.0f, 610.0f, 377.0f, 233.0f, 144.0f,
3320 89.0f, 55.0f, 34.0f, 21.0f, 13.0f,
3321 8.0f, 5.0f, 3.0f, 2.0f, 1.0f
3322 };
3323
3324 std::vector<float> outputData = armnn::IsQuantizedType<T>()
3325 ? std::initializer_list<float>
3326 {
3327 3.0f, 4.5f // 1, 3
3328 }
3329 : std::initializer_list<float>
3330 {
3331 1.f, 2.f, 5.f,
3332 13.f, 21.f, 55.f,
3333
3334 987.f, 610.f, 233.f,
3335 89.f, 55.f, 21.f
3336 };
3337
3338 const armnn::PermutationVector NCHWToNHWC = { 0, 3, 1, 2 };
3339 if (dataLayout == armnn::DataLayout::NHWC)
3340 {
3341 std::vector<float> tmp(inputData.size());
3342 armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(float));
3343 inputData = tmp;
3344
3345 std::vector<float> tmp1(outputData.size());
3346 armnnUtils::Permute(outputTensorInfo.GetShape(), NCHWToNHWC, outputData.data(), tmp1.data(), sizeof(float));
3347 outputData = tmp1;
3348 }
3349
3350 auto input = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(),
3351 inputTensorInfo.GetQuantizationOffset(),
3352 inputData));
3353
3354 LayerTestResult<T, 4> result(outputTensorInfo);
3355 result.outputExpected = MakeTensor<T, 4>(outputTensorInfo,
3356 QuantizedVector<T>(outputTensorInfo.GetQuantizationScale(),
3357 outputTensorInfo.GetQuantizationOffset(),
3358 outputData));
3359
3360 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
3361 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
3362
3363 armnn::ResizeQueueDescriptor descriptor;
3364 descriptor.m_Parameters.m_DataLayout = dataLayout;
3365 descriptor.m_Parameters.m_Method = armnn::ResizeMethod::NearestNeighbor;
3366 armnn::WorkloadInfo info;
3367 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
3368 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
3369
3370 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateResize(descriptor, info);
3371
3372 inputHandle->Allocate();
3373 outputHandle->Allocate();
3374 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
3375
3376 workload->PostAllocationConfigure();
3377 workload->Execute();
3378
3379 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
3380 return result;
3381}
3382
3383template<armnn::DataType ArmnnType, typename T>
3384LayerTestResult<T, 4> ResizeNearestNeighborMagTest(
3385 armnn::IWorkloadFactory& workloadFactory,
3386 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
3387 const armnn::DataLayout dataLayout)
3388{
3389 armnn::TensorInfo inputTensorInfo = armnn::IsQuantizedType<T>()
3390 ? armnnUtils::GetTensorInfo(1, 1, 3, 2, dataLayout, ArmnnType)
3391 : armnnUtils::GetTensorInfo(1, 2, 3, 2, dataLayout, ArmnnType);
3392 armnn::TensorInfo outputTensorInfo = armnn::IsQuantizedType<T>()
3393 ? armnnUtils::GetTensorInfo(1, 1, 3, 5, dataLayout, ArmnnType)
3394 : armnnUtils::GetTensorInfo(1, 2, 3, 5, dataLayout, ArmnnType);
3395
3396 if (armnn::IsQuantizedType<T>())
3397 {
3398 inputTensorInfo.SetQuantizationScale(0.010765f);
3399 inputTensorInfo.SetQuantizationOffset(7);
3400 outputTensorInfo.SetQuantizationScale(0.010132f);
3401 outputTensorInfo.SetQuantizationOffset(-18);
3402 }
3403
3404 std::vector<float> inputData = armnn::IsQuantizedType<T>()
3405 ? std::initializer_list<float>
3406 {
3407 0.183005f, 2.379065f, // 24, 228, : Expected quantised values
3408 1.05497f, 1.302565f, // 105, 128,
3409 2.400595f, 0.68896f // 230, 71
3410 }
3411 : std::initializer_list<float>
3412 {
3413 1.0f, 2.0f,
3414 13.0f, 21.0f,
3415 144.0f, 233.0f,
3416
3417 233.0f, 144.0f,
3418 21.0f, 13.0f,
3419 2.0f, 1.0f
3420 };
3421 std::vector<float> outputData = armnn::IsQuantizedType<T>()
3422 ? std::initializer_list<float>
3423 {
3424 0.183005f, 0.183005f, 0.183005f, 2.379065f, 2.379065f,
3425 1.05497f, 1.05497f, 1.05497f, 1.302565f, 1.302565f,
3426 2.400595f, 2.400595f, 2.400595f, 0.68896f, 0.68896f
3427 }
3428 : std::initializer_list<float>
3429 {
3430 1.f, 1.f, 1.f, 2.f, 2.f,
3431 13.f, 13.f, 13.f, 21.f, 21.f,
3432 144.f, 144.f, 144.f, 233.f, 233.f,
3433
3434 233.f, 233.f, 233.f, 144.f, 144.f,
3435 21.f, 21.f, 21.f, 13.f, 13.f,
3436 2.f, 2.f, 2.f, 1.f, 1.f
3437 };
3438
3439 const armnn::PermutationVector NCHWToNHWC = { 0, 3, 1, 2 };
3440 if (dataLayout == armnn::DataLayout::NHWC)
3441 {
3442 std::vector<float> tmp(inputData.size());
3443 armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(float));
3444 inputData = tmp;
3445
3446 std::vector<float> tmp1(outputData.size());
3447 armnnUtils::Permute(outputTensorInfo.GetShape(), NCHWToNHWC, outputData.data(), tmp1.data(), sizeof(float));
3448 outputData = tmp1;
3449 }
3450
3451 auto input = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(),
3452 inputTensorInfo.GetQuantizationOffset(),
3453 inputData));
3454
3455 LayerTestResult<T, 4> result(outputTensorInfo);
3456 result.outputExpected = MakeTensor<T, 4>(outputTensorInfo,
3457 QuantizedVector<T>(outputTensorInfo.GetQuantizationScale(),
3458 outputTensorInfo.GetQuantizationOffset(),
3459 outputData));
3460
3461 std::unique_ptr <armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
3462 std::unique_ptr <armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
3463
3464 armnn::ResizeQueueDescriptor descriptor;
3465 descriptor.m_Parameters.m_DataLayout = dataLayout;
3466 descriptor.m_Parameters.m_Method = armnn::ResizeMethod::NearestNeighbor;
3467 armnn::WorkloadInfo info;
3468 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
3469 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
3470
3471 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateResize(descriptor, info);
3472
3473 inputHandle->Allocate();
3474 outputHandle->Allocate();
3475 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
3476
3477 workload->PostAllocationConfigure();
3478 workload->Execute();
3479
3480 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
3481 return result;
3482}
3483
3484
James Conroy4d1ff582019-06-10 17:06:39 +01003485template<armnn::DataType ArmnnType, typename T, std::size_t InputDim, std::size_t OutputDim>
3486LayerTestResult<T, OutputDim> MeanTestHelper(
3487 armnn::IWorkloadFactory& workloadFactory,
3488 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
3489 const unsigned int* inputShape,
3490 const std::vector<float>& inputData,
3491 const std::vector<unsigned int>& axis,
3492 bool keepDims,
3493 const unsigned int* outputShape,
3494 const std::vector<float>& outputData,
3495 float scale = 1.0f,
3496 int32_t offset = 0)
3497{
3498 armnn::TensorInfo inputTensorInfo(InputDim, inputShape, ArmnnType);
3499 armnn::TensorInfo outputTensorInfo(OutputDim, outputShape, ArmnnType);
3500
3501 inputTensorInfo.SetQuantizationScale(scale);
3502 inputTensorInfo.SetQuantizationOffset(offset);
3503
3504 outputTensorInfo.SetQuantizationScale(scale);
3505 outputTensorInfo.SetQuantizationOffset(offset);
3506
3507 auto input = MakeTensor<T, InputDim>(inputTensorInfo, ConvertToDataType<ArmnnType>(inputData, inputTensorInfo));
3508
3509 LayerTestResult<T, OutputDim> result(outputTensorInfo);
3510 result.outputExpected = MakeTensor<T, OutputDim>(
3511 outputTensorInfo, ConvertToDataType<ArmnnType>(outputData, outputTensorInfo));
3512
3513 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
3514 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
3515
3516 armnn::MeanQueueDescriptor data;
3517 data.m_Parameters.m_Axis = axis;
3518 data.m_Parameters.m_KeepDims = keepDims;
3519 armnn::WorkloadInfo info;
3520 AddInputToWorkload(data, info, inputTensorInfo, inputHandle.get());
3521 AddOutputToWorkload(data, info, outputTensorInfo, outputHandle.get());
3522
3523 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateMean(data, info);
3524
3525 inputHandle->Allocate();
3526 outputHandle->Allocate();
3527
3528 CopyDataToITensorHandle(inputHandle.get(), input.origin());
3529
3530 workload->PostAllocationConfigure();
3531 workload->Execute();
3532
3533 CopyDataFromITensorHandle(result.output.origin(), outputHandle.get());
3534
3535 return result;
3536}
3537
3538template<armnn::DataType ArmnnType, typename T>
3539LayerTestResult<T, 1> MeanSimpleTest(
3540 armnn::IWorkloadFactory& workloadFactory,
3541 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3542{
3543 const unsigned int inputShape[] = { 3, 2 };
3544 const unsigned int outputShape[] = { 1 };
3545
3546 std::vector<float> input({ 1.5f, 1.5f, 2.5f, 2.5f, 3.5f, 3.5f });
3547 std::vector<float> output({ 2.5f });
3548
3549 return MeanTestHelper<ArmnnType, T, 2, 1>(
3550 workloadFactory, memoryManager, inputShape, input, {}, false, outputShape, output);
3551}
3552
3553template<armnn::DataType ArmnnType, typename T>
3554LayerTestResult<T, 3> MeanSimpleAxisTest(
3555 armnn::IWorkloadFactory& workloadFactory,
3556 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3557{
3558 const unsigned int inputShape[] = { 2, 3, 1, 2 };
3559 const unsigned int outputShape[] = { 3, 1, 2 };
3560
3561 std::vector<float> input({ 1.5f, 2.5f, 3.5f, 4.5f, 5.5f, 6.5f, 1.5f, 2.5f, 3.5f, 4.5f, 5.5f, 6.5f });
3562 std::vector<float> output({ 1.5f, 2.5f, 3.5f, 4.5f, 5.5f, 6.5f });
3563
3564 return MeanTestHelper<ArmnnType, T, 4, 3>(
3565 workloadFactory, memoryManager, inputShape, input, { 0 }, false, outputShape, output);
3566}
3567
3568template<armnn::DataType ArmnnType, typename T>
3569LayerTestResult<T, 4> MeanKeepDimsTest(
3570 armnn::IWorkloadFactory& workloadFactory,
3571 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3572{
3573 const unsigned int inputShape[] = { 1, 1, 3, 2 };
3574 const unsigned int outputShape[] = { 1, 1, 1, 2 };
3575
3576 std::vector<float> input({ 1.5f, 1.5f, 2.5f, 2.5f, 3.5f, 3.5f });
3577 std::vector<float> output({ 2.5f, 2.5f });
3578
3579 return MeanTestHelper<ArmnnType, T, 4, 4>(
3580 workloadFactory, memoryManager, inputShape, input, { 2 }, true, outputShape, output);
3581}
3582
3583template<armnn::DataType ArmnnType, typename T>
3584LayerTestResult<T, 4> MeanMultipleDimsTest(
3585 armnn::IWorkloadFactory& workloadFactory,
3586 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3587{
3588 const unsigned int inputShape[] = { 2, 3, 1, 2 };
3589 const unsigned int outputShape[] = { 1, 3, 1, 1 };
3590
3591 std::vector<float> input({ 1.5f, 2.5f, 3.5f, 4.5f, 5.5f, 6.5f, 1.5f, 2.5f, 3.5f, 4.5f, 5.5f, 6.5 });
3592 std::vector<float> output({ 2.0f, 4.0f, 6.0f });
3593
3594 return MeanTestHelper<ArmnnType, T, 4, 4>(
3595 workloadFactory, memoryManager, inputShape, input, { 0, 3 }, true, outputShape, output);
3596}
3597
3598template<armnn::DataType ArmnnType, typename T>
3599LayerTestResult<T, 1> MeanVts1Test(
3600 armnn::IWorkloadFactory& workloadFactory,
3601 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3602{
3603 const unsigned int inputShape[] = { 4, 3, 2 };
3604 const unsigned int outputShape[] = { 2 };
3605
3606 std::vector<float> input({ 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f,
3607 15.0f, 16.0f, 17.0f, 18.0f, 19.0f, 20.0f, 21.0f, 22.0f, 23.0f, 24.0f });
3608 std::vector<float> output({ 12.0f, 13.0f });
3609
3610 return MeanTestHelper<ArmnnType, T, 3, 1>(
3611 workloadFactory, memoryManager, inputShape, input, { 0, 1 }, false, outputShape, output);
3612}
3613
3614template<armnn::DataType ArmnnType, typename T>
3615LayerTestResult<T, 3> MeanVts2Test(
3616 armnn::IWorkloadFactory& workloadFactory,
3617 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3618{
3619 const unsigned int inputShape[] = { 4, 3, 2 };
3620 const unsigned int outputShape[] = { 1, 3, 1 };
3621
3622 std::vector<float> input({ 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f,
3623 15.0f, 16.0f, 17.0f, 18.0f, 19.0f, 20.0f, 21.0f, 22.0f, 23.0f, 24.0f });
3624 std::vector<float> output({ 10.5f, 12.5f, 14.5f });
3625
3626 return MeanTestHelper<ArmnnType, T, 3, 3>(
3627 workloadFactory, memoryManager, inputShape, input, { 0, 2 }, true, outputShape, output);
3628}
3629
3630template<armnn::DataType ArmnnType, typename T>
3631LayerTestResult<T, 3> MeanVts3Test(
3632 armnn::IWorkloadFactory& workloadFactory,
3633 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3634{
3635 const unsigned int inputShape[] = { 1, 2, 2, 1 };
3636 const unsigned int outputShape[] = { 1, 2, 1 };
3637
3638 std::vector<float> input({ 1.0f, 2.0f, 3.0f, 4.0f });
3639 std::vector<float> output({ 1.5f, 3.5f });
3640
3641 return MeanTestHelper<ArmnnType, T, 4, 3>(
3642 workloadFactory, memoryManager, inputShape, input, { 2 }, false, outputShape, output);
3643}
Narumol Prangnawarat71c80b12019-06-17 17:45:43 +01003644
3645template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
3646LayerTestResult<T, 3> ConcatDifferentInputOutputQParamTest(
3647 armnn::IWorkloadFactory& workloadFactory,
3648 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
3649 bool useSubtensor)
3650{
3651 // Defines the tensor descriptors.
3652 armnn::TensorInfo outputTensorInfo({ 3, 6, 3 }, ArmnnType);
3653 armnn::TensorInfo inputTensorInfo1({ 3, 6, 2 }, ArmnnType);
3654 armnn::TensorInfo inputTensorInfo2({ 3, 6, 1 }, ArmnnType);
3655
3656 std::vector<armnn::TensorShape> inputTensorShapes({inputTensorInfo1.GetShape(), inputTensorInfo2.GetShape()});
3657
3658 // Quantized input1 tensor.
3659 const float inputScale1 = 0.5f;
3660 const int32_t inputOffset1 = 5;
3661
3662 auto input1 = MakeTensor<T, 3>(inputTensorInfo1, std::vector<T>(
3663 {
3664 1, 2, 3,
3665 4, 5, 6,
3666 7, 8, 9,
3667 10, 11, 12,
3668 13, 14, 15,
3669 16, 17, 18,
3670
3671 19, 20, 21,
3672 22, 23, 24,
3673 25, 26, 27,
3674 28, 29, 30,
3675 31, 32, 33,
3676 34, 35, 36
3677 }));
3678
3679 // Quatized input2 tensor.
3680 const float inputScale2 = 0.2f;
3681 const int32_t inputOffset2 = 10;
3682
3683 auto input2 = MakeTensor<T, 3>(inputTensorInfo2, std::vector<T>(
3684 {
3685 37, 38, 39,
3686 40, 41, 42,
3687 43, 44, 45,
3688 46, 47, 48,
3689 49, 50, 51,
3690 52, 53, 54
3691 }));
3692
3693 // Quantized output tensor.
3694 const float outputScale = 0.1f;
3695 const int32_t outputOffset = 20;
3696
3697 LayerTestResult<T, 3> ret(outputTensorInfo);
3698
3699 ret.outputExpected = MakeTensor<T, 3>(outputTensorInfo, std::vector<T>(
3700 {
3701 0, 5, 74,
3702 10, 15, 76,
3703 20, 25, 78,
3704 30, 35, 80,
3705 40, 45, 82,
3706 50, 55, 84,
3707
3708 60, 65, 86,
3709 70, 75, 88,
3710 80, 85, 90,
3711 90, 95, 92,
3712 100, 105, 94,
3713 110, 115, 96,
3714
3715 120, 125, 98,
3716 130, 135, 100,
3717 140, 145, 102,
3718 150, 155, 104,
3719 160, 165, 106,
3720 170, 175, 108
3721 }));
3722
3723 outputTensorInfo.SetQuantizationScale(outputScale);
3724 outputTensorInfo.SetQuantizationOffset(outputOffset);
3725 inputTensorInfo1.SetQuantizationScale(inputScale1);
3726 inputTensorInfo1.SetQuantizationOffset(inputOffset1);
3727 inputTensorInfo2.SetQuantizationScale(inputScale2);
3728 inputTensorInfo2.SetQuantizationOffset(inputOffset2);
3729
3730 std::vector<unsigned int> wOrigin1 = { 0, 0, 0 }; //Extent of the window is defined by size of input[0].
3731 armnn::ConcatQueueDescriptor::ViewOrigin window1(wOrigin1);
3732
3733 std::vector<unsigned int> wOrigin2 = { 0, 0, 2 }; //Extent of the window is defined by size of input[1].
3734 armnn::ConcatQueueDescriptor::ViewOrigin window2(wOrigin2);
3735
3736 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
3737
3738 bool subTensorsSupported = useSubtensor && workloadFactory.SupportsSubTensors();
3739
3740 std::unique_ptr<armnn::ITensorHandle> inputHandle1 =
3741 subTensorsSupported ?
3742 workloadFactory.CreateSubTensorHandle(*outputHandle, inputTensorInfo1.GetShape(), wOrigin1.data()) :
3743 workloadFactory.CreateTensorHandle(inputTensorInfo1);
3744
3745 std::unique_ptr<armnn::ITensorHandle> inputHandle2 =
3746 subTensorsSupported ?
3747 workloadFactory.CreateSubTensorHandle(*outputHandle, inputTensorInfo2.GetShape(), wOrigin2.data()) :
3748 workloadFactory.CreateTensorHandle(inputTensorInfo2);
3749
3750 armnn::ConcatQueueDescriptor data;
3751 armnn::OriginsDescriptor desc = armnn::CreateDescriptorForConcatenation(
3752 inputTensorShapes.begin(),inputTensorShapes.end(), 2);
3753 data.m_Parameters = desc;
3754
3755 armnn::WorkloadInfo info;
3756 AddInputToWorkload(data, info, inputTensorInfo1, inputHandle1.get());
3757 AddInputToWorkload(data, info, inputTensorInfo2, inputHandle2.get());
3758 AddOutputToWorkload(data, info, outputTensorInfo, outputHandle.get());
3759
3760 data.m_ViewOrigins.push_back(window1);
3761 data.m_ViewOrigins.push_back(window2);
3762
3763 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateConcat(data, info);
3764
3765 inputHandle1->Allocate();
3766 inputHandle2->Allocate();
3767 outputHandle->Allocate();
3768
3769 CopyDataToITensorHandle(inputHandle1.get(), &input1[0][0][0]);
3770 CopyDataToITensorHandle(inputHandle2.get(), &input2[0][0][0]);
3771
3772 workload->PostAllocationConfigure();
3773 workload->Execute();
3774
3775 CopyDataFromITensorHandle(&ret.output[0][0][0], outputHandle.get());
3776
3777 return ret;
3778}
Matteo Martincighab9e5252019-06-13 17:27:46 +01003779
3780template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
3781LayerTestResult<T, 4> PreluTest(
3782 armnn::IWorkloadFactory& workloadFactory,
3783 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3784{
3785 armnn::TensorInfo inputTensorInfo ({ 1, 2, 2, 3 }, ArmnnType);
3786 armnn::TensorInfo alphaTensorInfo ({ 1, 1, 1, 3 }, ArmnnType);
3787 armnn::TensorInfo outputTensorInfo({ 1, 2, 2, 3 }, ArmnnType);
3788
3789 if (armnn::IsQuantizedType<T>())
3790 {
3791 inputTensorInfo.SetQuantizationScale(0.25f);
3792 inputTensorInfo.SetQuantizationOffset(128);
3793 alphaTensorInfo.SetQuantizationScale(0.25f);
3794 alphaTensorInfo.SetQuantizationOffset(50);
3795 outputTensorInfo.SetQuantizationScale(0.5f);
3796 outputTensorInfo.SetQuantizationOffset(120);
3797 }
3798
3799 std::vector<float> inputData
3800 {
3801 // Expected quantized values:
3802 // 128, 128, 128, 132, 132, 132, 124, 124, 124, 120, 120, 120
3803 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, -1.0f, -1.0f, -1.0f, -2.0f, -2.0f, -2.0f
3804 };
3805 std::vector<float> alphaData
3806 {
3807 // Expected quantized values:
3808 // 50, 54, 58
3809 0.0f, 1.0f, 2.0f
3810 };
3811 std::vector<float> outputExpectedData =
3812 {
3813 // Expected quantized values:
3814 // 20, 120, 120, 122, 122, 122, 120, 118, 116, 120, 116, 112
3815 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, 0.0f, -1.0f, -2.0f, 0.0f, -2.0f, -4.0f
3816 };
3817
3818 auto input = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(),
3819 inputTensorInfo.GetQuantizationOffset(),
3820 inputData));
3821 auto alpha = MakeTensor<T, 4>(alphaTensorInfo, QuantizedVector<T>(alphaTensorInfo.GetQuantizationScale(),
3822 alphaTensorInfo.GetQuantizationOffset(),
3823 alphaData));
3824
3825 LayerTestResult<T, 4> result(outputTensorInfo);
3826 result.outputExpected = MakeTensor<T, 4>(outputTensorInfo,
3827 QuantizedVector<T>(outputTensorInfo.GetQuantizationScale(),
3828 outputTensorInfo.GetQuantizationOffset(),
3829 outputExpectedData));
3830
3831 std::unique_ptr <armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
3832 std::unique_ptr <armnn::ITensorHandle> alphaHandle = workloadFactory.CreateTensorHandle(alphaTensorInfo);
3833 std::unique_ptr <armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
3834
3835 armnn::PreluQueueDescriptor descriptor;
3836 armnn::WorkloadInfo info;
3837 AddInputToWorkload (descriptor, info, inputTensorInfo, inputHandle.get());
3838 AddInputToWorkload (descriptor, info, alphaTensorInfo, alphaHandle.get());
3839 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
3840
3841 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreatePrelu(descriptor, info);
3842
3843 inputHandle->Allocate();
3844 alphaHandle->Allocate();
3845 outputHandle->Allocate();
3846
3847 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
3848 CopyDataToITensorHandle(alphaHandle.get(), &alpha[0][0][0][0]);
3849
3850 workload->Execute();
3851
3852 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
3853
3854 return result;
3855}
3856
Francis Murtagh57f13d52019-06-24 14:24:36 +01003857template<armnn::DataType ArmnnType,
3858 std::size_t InputDim,
3859 std::size_t OutputDim,
3860 typename T = armnn::ResolveType<ArmnnType>>
3861LayerTestResult<T, OutputDim> BatchToSpaceNdHelper(
3862 armnn::IWorkloadFactory &workloadFactory,
3863 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
3864 const armnn::DataLayout& dataLayout,
3865 const unsigned int *inputShape,
3866 const std::vector<float> &inputData,
3867 const std::vector<unsigned int> &blockShape,
3868 const std::vector<std::pair<unsigned int, unsigned int>> &crops,
3869 const unsigned int *outputShape,
3870 const std::vector<float> &outputData,
3871 float scale = 1.0f,
3872 int32_t offset = 0)
3873{
3874 armnn::TensorInfo inputTensorInfo(InputDim, inputShape, ArmnnType);
3875 armnn::TensorInfo outputTensorInfo(OutputDim, outputShape, ArmnnType);
3876
3877 inputTensorInfo.SetQuantizationScale(scale);
3878 inputTensorInfo.SetQuantizationOffset(offset);
3879
3880 outputTensorInfo.SetQuantizationScale(scale);
3881 outputTensorInfo.SetQuantizationOffset(offset);
Francis Murtaghd0dfe172019-06-25 10:57:10 +01003882
Francis Murtagh57f13d52019-06-24 14:24:36 +01003883 auto input = MakeTensor<T, InputDim>(inputTensorInfo, ConvertToDataType<ArmnnType>(inputData, inputTensorInfo));
3884
3885 LayerTestResult<T, OutputDim> result(outputTensorInfo);
3886 result.outputExpected = MakeTensor<T, OutputDim>(outputTensorInfo,
3887 ConvertToDataType<ArmnnType>(outputData, outputTensorInfo));
3888
3889 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
3890 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
3891
3892 armnn::BatchToSpaceNdQueueDescriptor data;
3893 data.m_Parameters.m_DataLayout = dataLayout;
3894 data.m_Parameters.m_BlockShape = blockShape;
3895 data.m_Parameters.m_Crops = crops;
3896 armnn::WorkloadInfo info;
3897 AddInputToWorkload(data, info, inputTensorInfo, inputHandle.get());
3898 AddOutputToWorkload(data, info, outputTensorInfo, outputHandle.get());
3899
3900 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateBatchToSpaceNd(data, info);
3901
3902 inputHandle->Allocate();
3903 outputHandle->Allocate();
3904
3905 CopyDataToITensorHandle(inputHandle.get(), input.origin());
3906
3907 workload->PostAllocationConfigure();
3908 workload->Execute();
3909
3910 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
3911
3912 return result;
3913}
3914
3915template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
3916LayerTestResult<T, 4> BatchToSpaceNdNhwcTest1(
3917 armnn::IWorkloadFactory& workloadFactory,
3918 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3919{
3920 const unsigned int inputShape[] = {4, 2, 2, 1};
3921 const unsigned int outputShape[] = {1, 4, 4, 1};
3922
3923 std::vector<float> input({
3924 // Batch 0, Height 0, Width (2) x Channel (1)
3925 1.0f, 3.0f,
3926 // Batch 0, Height 1, Width (2) x Channel (1)
3927 9.0f, 11.0f,
3928
3929
3930 // Batch 1, Height 0, Width (2) x Channel (1)
3931 2.0f, 4.0f,
3932 // Batch 1, Height 1, Width (2) x Channel (1)
3933 10.0f, 12.0f,
3934
3935
3936 // Batch 2, Height 0, Width (2) x Channel (1)
3937 5.0f, 7.0f,
3938 // Batch 2, Height 1, Width (2) x Channel (1)
3939 13.0f, 15.0f,
3940
3941 // Batch 3, Height 0, Width (2) x Channel (3)
3942 6.0f, 8.0f,
3943 // Batch 3, Height 1, Width (2) x Channel (1)
3944 14.0f, 16.0f
3945 });
3946
3947 std::vector<float> expectedOutput({
3948 1.0f, 2.0f, 3.0f, 4.0f,
3949 5.0f, 6.0f, 7.0f, 8.0f,
3950 9.0f, 10.0f, 11.0f, 12.0f,
3951 13.0f, 14.0f, 15.0f, 16.0f
3952 });
3953
3954 std::vector<unsigned int> blockShape {2, 2};
3955 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
3956
3957 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
3958 armnn::DataLayout::NHWC, inputShape, input, blockShape,
3959 crops, outputShape, expectedOutput);
3960}
3961
3962template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
3963LayerTestResult<T, 4> BatchToSpaceNdNhwcTest2(
3964 armnn::IWorkloadFactory& workloadFactory,
3965 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3966{
3967 const unsigned int inputShape[] = {4, 1, 1, 1};
3968 const unsigned int outputShape[] = {1, 2, 2, 1};
3969
3970 std::vector<float> input({
3971 // Batch 0, Height 0, Width (2) x Channel (1)
3972 1.0f, 2.0f, 3.0f, 4.0f
3973 });
3974
3975 std::vector<float> expectedOutput({1.0f, 2.0f, 3.0f, 4.0f});
3976
3977 std::vector<unsigned int> blockShape({2, 2});
3978 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
3979
3980 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
3981 armnn::DataLayout::NHWC, inputShape, input, blockShape,
3982 crops, outputShape, expectedOutput);
3983}
3984
3985template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
3986LayerTestResult<T, 4> BatchToSpaceNdNhwcTest3(
3987 armnn::IWorkloadFactory& workloadFactory,
3988 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3989{
3990 const unsigned int inputShape[] = {4, 1, 1, 3};
3991 const unsigned int outputShape[] = {1, 2, 2, 3};
3992
3993 std::vector<float> input({1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f});
3994
3995 std::vector<float> expectedOutput({1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f});
3996
3997 std::vector<unsigned int> blockShape({2, 2});
3998 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
3999
4000 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
4001 armnn::DataLayout::NHWC, inputShape, input, blockShape,
4002 crops, outputShape, expectedOutput);
4003}
4004
4005template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
4006LayerTestResult<T, 4> BatchToSpaceNdNhwcTest4(
4007 armnn::IWorkloadFactory& workloadFactory,
4008 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
4009{
4010 const unsigned int inputShape[] = {8, 1, 3, 1};
4011 const unsigned int outputShape[] = {2, 2, 4, 1};
4012
4013 std::vector<float> input({
4014 0.0f, 1.0f, 3.0f,
4015 0.0f, 9.0f, 11.0f,
4016 0.0f, 2.0f, 4.0f,
4017 0.0f, 10.0f, 12.0f,
4018 0.0f, 5.0f, 7.0f,
4019 0.0f, 13.0f, 15.0f,
4020 0.0f, 6.0f, 8.0f,
4021 0.0f, 14.0f, 16.0f
4022 });
4023
4024 std::vector<float> expectedOutput({
4025 1.0f, 2.0f, 3.0f, 4.0f,
4026 5.0f, 6.0f, 7.0f, 8.0f,
4027 9.0f, 10.0f, 11.0f, 12.0f,
4028 13.0f, 14.0f, 15.0f, 16.0f
4029 });
4030
4031 std::vector<unsigned int> blockShape({2, 2});
4032 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {2, 0}};
4033
4034 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
4035 armnn::DataLayout::NHWC, inputShape, input, blockShape,
4036 crops, outputShape, expectedOutput);
4037}
4038
4039template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
4040LayerTestResult<T, 4> BatchToSpaceNdNhwcTest5(
4041 armnn::IWorkloadFactory& workloadFactory,
4042 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
4043{
4044 const unsigned int inputShape[] = {4, 2, 2, 1};
4045 const unsigned int outputShape[] = {1, 4, 4, 1};
4046
4047 std::vector<float> input({1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16});
4048 std::vector<float> expectedOutput({1, 5, 2, 6, 9, 13, 10, 14, 3, 7, 4, 8, 11, 15, 12, 16});
4049
4050 std::vector<unsigned int> blockShape({2, 2});
4051 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
4052
4053 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager, armnn::DataLayout::NHWC, inputShape,
4054 input, blockShape, crops, outputShape, expectedOutput);
4055}
4056
4057template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
4058LayerTestResult<T, 4> BatchToSpaceNdNhwcTest6(
4059 armnn::IWorkloadFactory& workloadFactory,
4060 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
4061{
4062 const unsigned int inputShape[] = {4, 1, 1, 1};
4063 const unsigned int outputShape[] = {1, 2, 2, 1};
4064
4065 std::vector<float> input({
4066 // Batch 0, Height 0, Width (2) x Channel (1)
4067 1, 2, 3, 4
4068 });
4069
4070 std::vector<float> expectedOutput({1, 2, 3, 4});
4071
4072 std::vector<unsigned int> blockShape({2, 2});
4073 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
4074
4075 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
4076 armnn::DataLayout::NHWC, inputShape, input, blockShape,
4077 crops, outputShape, expectedOutput);
4078}
4079
4080template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
4081LayerTestResult<T, 4> BatchToSpaceNdNhwcTest7(
4082 armnn::IWorkloadFactory& workloadFactory,
4083 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
4084{
4085 const unsigned int inputShape[] = {4, 1, 1, 3};
4086 const unsigned int outputShape[] = {1, 2, 2, 3};
4087
4088 std::vector<float> input({1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12});
4089
4090 std::vector<float> expectedOutput({1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12});
4091
4092 std::vector<unsigned int> blockShape({2, 2});
4093 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
4094
4095 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
4096 armnn::DataLayout::NHWC, inputShape, input, blockShape,
4097 crops, outputShape, expectedOutput);
4098}
4099
4100template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
4101LayerTestResult<T, 4> BatchToSpaceNdNchwTest1(
4102 armnn::IWorkloadFactory &workloadFactory,
4103 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
4104{
4105 const unsigned int inputShape[] = {4, 3, 1, 1};
4106 const unsigned int outputShape[] = {1, 3, 2, 2};
4107
4108 std::vector<float> input({1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f});
4109
4110 std::vector<float> expectedOutput({
4111 // Batch 0, Channel 0, Height (2) x Width (2)
4112 1.0f, 4.0f,
4113 7.0f, 10.0f,
4114
4115 // Batch 0, Channel 1, Height (2) x Width (2)
4116 2.0f, 5.0f,
4117 8.0f, 11.0f,
4118
4119 // Batch 0, Channel 2, Height (2) x Width (2)
4120 3.0f, 6.0f,
4121 9.0f, 12.0f,
4122 });
4123
4124 std::vector<unsigned int> blockShape({2, 2});
4125 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
4126
4127 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
4128 armnn::DataLayout::NCHW, inputShape, input, blockShape,
4129 crops, outputShape, expectedOutput);
4130}
4131
4132template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
4133LayerTestResult<T, 4> BatchToSpaceNdNchwTest2(
4134 armnn::IWorkloadFactory& workloadFactory,
4135 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
4136{
4137 const unsigned int inputShape[] = {4, 1, 1, 1};
4138 const unsigned int outputShape[] = {1, 1, 2, 2};
4139
4140 std::vector<float> input({
4141 // Batch 0, Height 0, Width (2) x Channel (1)
4142 1.0f, 2.0f, 3.0f, 4.0f
4143 });
4144
4145 std::vector<float> expectedOutput({1.0f, 2.0f, 3.0f, 4.0f});
4146
4147 std::vector<unsigned int> blockShape({2, 2});
4148 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
4149
4150 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
4151 armnn::DataLayout::NCHW, inputShape, input, blockShape,
4152 crops, outputShape, expectedOutput);
4153}
4154
4155template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
4156LayerTestResult<T, 4> BatchToSpaceNdNchwTest3(
4157 armnn::IWorkloadFactory& workloadFactory,
4158 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
4159{
4160 const unsigned int inputShape[] = {4, 3, 1, 1};
4161 const unsigned int outputShape[] = {1, 3, 2, 2};
4162
4163 std::vector<float> input({1.0f, 3.0f, 5.0f, 7.0f, 9.0f, 11.0f, 2.0f, 4.0f, 6.0f, 8.0f, 10.0f, 12.0f});
4164
4165 std::vector<float> expectedOutput({
4166 // Batch 0, Channel 0, Height (2) x Width (2)
4167 1.0f, 7.0f,
4168 2.0f, 8.0f,
4169
4170 // Batch 0, Channel 1, Height (2) x Width (2)
4171 3.0f, 9.0f,
4172 4.0f, 10.0f,
4173
4174 // Batch 0, Channel 2, Height (2) x Width (2)
4175 5.0f, 11.0f,
4176 6.0f, 12.0f,
4177 });
4178
4179 std::vector<unsigned int> blockShape({2, 2});
4180 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
4181
4182 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
4183 armnn::DataLayout::NCHW, inputShape, input, blockShape,
4184 crops, outputShape, expectedOutput);
4185}
4186
4187template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
4188LayerTestResult<T, 4> BatchToSpaceNdNchwTest4(
4189 armnn::IWorkloadFactory &workloadFactory,
4190 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
4191{
4192 const unsigned int inputShape[] = {4, 3, 1, 1};
4193 const unsigned int outputShape[] = {1, 3, 2, 2};
4194
4195 std::vector<float> input({1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12});
4196
4197 std::vector<float> expectedOutput({
4198 // Batch 0, Channel 0, Height (2) x Width (2)
4199 1, 4,
4200 7, 10,
4201
4202 // Batch 0, Channel 1, Height (2) x Width (2)
4203 2, 5,
4204 8, 11,
4205
4206 // Batch 0, Channel 2, Height (2) x Width (2)
4207 3, 6,
4208 9, 12,
4209 });
4210
4211 std::vector<unsigned int> blockShape({2, 2});
4212 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
4213
4214 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
4215 armnn::DataLayout::NCHW, inputShape, input, blockShape,
4216 crops, outputShape, expectedOutput);
4217}
4218
4219template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
4220LayerTestResult<T, 4> BatchToSpaceNdNchwTest5(
4221 armnn::IWorkloadFactory& workloadFactory,
4222 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
4223{
4224 const unsigned int inputShape[] = {4, 1, 1, 1};
4225 const unsigned int outputShape[] = {1, 1, 2, 2};
4226
4227 std::vector<float> input({
4228 // Batch 0, Height 0, Width (2) x Channel (1)
4229 1, 2, 3, 4
4230 });
4231
4232 std::vector<float> expectedOutput({1, 2, 3, 4});
4233
4234 std::vector<unsigned int> blockShape({2, 2});
4235 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
4236
4237 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
4238 armnn::DataLayout::NCHW, inputShape, input, blockShape,
4239 crops, outputShape, expectedOutput);
4240}
4241
4242template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
4243LayerTestResult<T, 4> BatchToSpaceNdNchwTest6(
4244 armnn::IWorkloadFactory& workloadFactory,
4245 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
4246{
4247 const unsigned int inputShape[] = {4, 3, 1, 1};
4248 const unsigned int outputShape[] = {1, 3, 2, 2};
4249
4250 std::vector<float> input({1, 3, 5, 7, 9, 11, 2, 4, 6, 8, 10, 12});
4251
4252 std::vector<float> expectedOutput({
4253 // Batch 0, Channel 0, Height (2) x Width (2)
4254 1, 7,
4255 2, 8,
4256
4257 // Batch 0, Channel 1, Height (2) x Width (2)
4258 3, 9,
4259 4, 10,
4260
4261 // Batch 0, Channel 2, Height (2) x Width (2)
4262 5, 11,
4263 6, 12,
4264 });
4265
4266 std::vector<unsigned int> blockShape({2, 2});
4267 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
4268
4269 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
4270 armnn::DataLayout::NCHW, inputShape, input, blockShape,
4271 crops, outputShape, expectedOutput);
4272}
4273
4274template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
4275LayerTestResult<T, 4> BatchToSpaceNdNchwTest7(
4276 armnn::IWorkloadFactory& workloadFactory,
4277 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
4278{
4279 const unsigned int inputShape[] = {8, 1, 1, 3};
4280 const unsigned int outputShape[] = {2, 1, 2, 4};
4281
4282 std::vector<float> input({
4283 0, 1, 3, 0, 9, 11,
4284 0, 2, 4, 0, 10, 12,
4285 0, 5, 7, 0, 13, 15,
4286 0, 6, 8, 0, 14, 16
4287 });
4288
4289 std::vector<float> expectedOutput({
4290 1, 2, 3, 4,
4291 5, 6, 7, 8,
4292 9, 10, 11, 12,
4293 13, 14, 15, 16
4294 });
4295
4296 std::vector<unsigned int> blockShape({2, 2});
4297 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {2, 0}};
4298
4299 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
4300 armnn::DataLayout::NCHW, inputShape, input, blockShape,
4301 crops, outputShape, expectedOutput);
4302}
4303
Matteo Martincighab9e5252019-06-13 17:27:46 +01004304template LayerTestResult<typename armnn::ResolveType<armnn::DataType::Float32>, 4>
4305PreluTest<armnn::DataType::Float32>(
4306 armnn::IWorkloadFactory& workloadFactory,
4307 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4308
4309template LayerTestResult<typename armnn::ResolveType<armnn::DataType::QuantisedAsymm8>, 4>
4310PreluTest<armnn::DataType::QuantisedAsymm8>(
4311 armnn::IWorkloadFactory& workloadFactory,
4312 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4313
4314template LayerTestResult<typename armnn::ResolveType<armnn::DataType::QuantisedSymm16>, 4>
4315PreluTest<armnn::DataType::QuantisedSymm16>(
4316 armnn::IWorkloadFactory& workloadFactory,
4317 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Aron Virginas-Tar735a4502019-06-26 15:02:47 +01004318
4319//
4320// TransposeConvolution2d
4321//
4322
4323// Simple biased
4324LayerTestResult<float, 4> SimpleTransposeConvolution2dFloatNchwTest(
4325 armnn::IWorkloadFactory& workloadFactory,
4326 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4327
4328LayerTestResult<float, 4> SimpleTransposeConvolution2dFloatNhwcTest(
4329 armnn::IWorkloadFactory& workloadFactory,
4330 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4331
4332LayerTestResult<uint8_t, 4> SimpleTransposeConvolution2dUint8NchwTest(
4333 armnn::IWorkloadFactory& workloadFactory,
4334 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4335
4336LayerTestResult<uint8_t, 4> SimpleTransposeConvolution2dUint8NhwcTest(
4337 armnn::IWorkloadFactory& workloadFactory,
4338 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4339
4340LayerTestResult<int16_t, 4> SimpleTransposeConvolution2dInt16NchwTest(
4341 armnn::IWorkloadFactory& workloadFactory,
4342 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4343
4344LayerTestResult<int16_t, 4> SimpleTransposeConvolution2dInt16NhwcTest(
4345 armnn::IWorkloadFactory& workloadFactory,
4346 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4347
4348// Simple unbiased
4349LayerTestResult<float, 4> UnbiasedSimpleTransposeConvolution2dFloatNchwTest(
4350 armnn::IWorkloadFactory& workloadFactory,
4351 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4352
4353LayerTestResult<float, 4> UnbiasedSimpleTransposeConvolution2dFloatNhwcTest(
4354 armnn::IWorkloadFactory& workloadFactory,
4355 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4356
4357LayerTestResult<uint8_t, 4> UnbiasedSimpleTransposeConvolution2dUint8NchwTest(
4358 armnn::IWorkloadFactory& workloadFactory,
4359 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4360
4361LayerTestResult<uint8_t, 4> UnbiasedSimpleTransposeConvolution2dUint8NhwcTest(
4362 armnn::IWorkloadFactory& workloadFactory,
4363 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4364
4365LayerTestResult<int16_t, 4> UnbiasedSimpleTransposeConvolution2dInt16NchwTest(
4366 armnn::IWorkloadFactory& workloadFactory,
4367 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4368
4369LayerTestResult<int16_t, 4> UnbiasedSimpleTransposeConvolution2dInt16NhwcTest(
4370 armnn::IWorkloadFactory& workloadFactory,
4371 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4372
4373// Padded biased
4374LayerTestResult<float, 4> PaddedTransposeConvolution2dFloatNchwTest(
4375 armnn::IWorkloadFactory& workloadFactory,
4376 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4377
4378LayerTestResult<float, 4> PaddedTransposeConvolution2dFloatNhwcTest(
4379 armnn::IWorkloadFactory& workloadFactory,
4380 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4381
4382LayerTestResult<uint8_t, 4> PaddedTransposeConvolution2dUint8NchwTest(
4383 armnn::IWorkloadFactory& workloadFactory,
4384 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4385
4386LayerTestResult<uint8_t, 4> PaddedTransposeConvolution2dUint8NhwcTest(
4387 armnn::IWorkloadFactory& workloadFactory,
4388 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4389
4390LayerTestResult<int16_t, 4> PaddedTransposeConvolution2dInt16NchwTest(
4391 armnn::IWorkloadFactory& workloadFactory,
4392 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4393
4394LayerTestResult<int16_t, 4> PaddedTransposeConvolution2dInt16NhwcTest(
4395 armnn::IWorkloadFactory& workloadFactory,
4396 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4397
4398// Padded unbiased
4399LayerTestResult<float, 4> UnbiasedPaddedTransposeConvolution2dFloatNchwTest(
4400 armnn::IWorkloadFactory& workloadFactory,
4401 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4402
4403LayerTestResult<float, 4> UnbiasedPaddedTransposeConvolution2dFloatNhwcTest(
4404 armnn::IWorkloadFactory& workloadFactory,
4405 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4406
4407LayerTestResult<uint8_t, 4> UnbiasedPaddedTransposeConvolution2dUint8NchwTest(
4408 armnn::IWorkloadFactory& workloadFactory,
4409 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4410
4411LayerTestResult<uint8_t, 4> UnbiasedPaddedTransposeConvolution2dUint8NhwcTest(
4412 armnn::IWorkloadFactory& workloadFactory,
4413 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4414
4415LayerTestResult<int16_t, 4> UnbiasedPaddedTransposeConvolution2dInt16NchwTest(
4416 armnn::IWorkloadFactory& workloadFactory,
4417 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4418
4419LayerTestResult<int16_t, 4> UnbiasedPaddedTransposeConvolution2dInt16NhwcTest(
4420 armnn::IWorkloadFactory& workloadFactory,
4421 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4422
4423// Strided biased
4424LayerTestResult<float, 4> StridedTransposeConvolution2dFloatNchwTest(
4425 armnn::IWorkloadFactory& workloadFactory,
4426 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4427
4428LayerTestResult<float, 4> StridedTransposeConvolution2dFloatNhwcTest(
4429 armnn::IWorkloadFactory& workloadFactory,
4430 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4431
4432LayerTestResult<uint8_t, 4> StridedTransposeConvolution2dUint8NchwTest(
4433 armnn::IWorkloadFactory& workloadFactory,
4434 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4435
4436LayerTestResult<uint8_t, 4> StridedTransposeConvolution2dUint8NhwcTest(
4437 armnn::IWorkloadFactory& workloadFactory,
4438 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4439
4440LayerTestResult<int16_t, 4> StridedTransposeConvolution2dInt16NchwTest(
4441 armnn::IWorkloadFactory& workloadFactory,
4442 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4443
4444LayerTestResult<int16_t, 4> StridedTransposeConvolution2dInt16NhwcTest(
4445 armnn::IWorkloadFactory& workloadFactory,
4446 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4447
4448// Strided unbiased
4449LayerTestResult<float, 4> UnbiasedStridedTransposeConvolution2dFloatNchwTest(
4450 armnn::IWorkloadFactory& workloadFactory,
4451 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4452
4453LayerTestResult<float, 4> UnbiasedStridedTransposeConvolution2dFloatNhwcTest(
4454 armnn::IWorkloadFactory& workloadFactory,
4455 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4456
4457LayerTestResult<uint8_t, 4> UnbiasedStridedTransposeConvolution2dUint8NchwTest(
4458 armnn::IWorkloadFactory& workloadFactory,
4459 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4460
4461LayerTestResult<uint8_t, 4> UnbiasedStridedTransposeConvolution2dUint8NhwcTest(
4462 armnn::IWorkloadFactory& workloadFactory,
4463 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4464
4465LayerTestResult<int16_t, 4> UnbiasedStridedTransposeConvolution2dInt16NchwTest(
4466 armnn::IWorkloadFactory& workloadFactory,
4467 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4468
4469LayerTestResult<int16_t, 4> UnbiasedStridedTransposeConvolution2dInt16NhwcTest(
4470 armnn::IWorkloadFactory& workloadFactory,
Narumol Prangnawarate6eaf662019-07-08 08:57:17 +01004471 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);