blob: 259ad01c62d1499c42d22ad0d66ba0d2c188010d [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
1409LayerTestResult<float, 4> SimplePermuteFloat32Test(
1410 armnn::IWorkloadFactory& workloadFactory,
1411 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1412
1413LayerTestResult<uint8_t, 4> SimplePermuteUint8Test(
1414 armnn::IWorkloadFactory& workloadFactory,
1415 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1416
1417LayerTestResult<uint8_t, 2> PadUint82dTest(
1418 armnn::IWorkloadFactory& workloadFactory,
1419 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1420
David Monahan34757812019-06-19 11:47:21 +01001421LayerTestResult<uint8_t, 2> PadUint82dCustomPaddingTest(
1422 armnn::IWorkloadFactory& workloadFactory,
1423 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1424
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001425LayerTestResult<uint8_t, 3> PadUint83dTest(
1426 armnn::IWorkloadFactory& workloadFactory,
1427 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1428
1429LayerTestResult<uint8_t, 4> PadUint84dTest(
1430 armnn::IWorkloadFactory& workloadFactory,
1431 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1432
1433LayerTestResult<float, 2> PadFloat322dTest(
1434 armnn::IWorkloadFactory& workloadFactory,
1435 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1436
David Monahan34757812019-06-19 11:47:21 +01001437LayerTestResult<float, 2> PadFloat322dCustomPaddingTest(
1438 armnn::IWorkloadFactory& workloadFactory,
1439 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1440
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001441LayerTestResult<float, 3> PadFloat323dTest(
1442 armnn::IWorkloadFactory& workloadFactory,
1443 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1444
1445LayerTestResult<float, 4> PadFloat324dTest(
1446 armnn::IWorkloadFactory& workloadFactory,
1447 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1448
1449LayerTestResult<float, 4> PermuteFloat32ValueSet1Test(
1450 armnn::IWorkloadFactory& workloadFactory,
1451 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1452
1453LayerTestResult<float, 4> PermuteFloat32ValueSet2Test(
1454 armnn::IWorkloadFactory& workloadFactory,
1455 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1456
1457LayerTestResult<float, 4> PermuteFloat32ValueSet3Test(
1458 armnn::IWorkloadFactory& workloadFactory,
1459 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1460
Jan Eilers38e05bd2019-06-26 13:10:09 +01001461void LstmUtilsZeroVectorTest();
1462void LstmUtilsMeanStddevNormalizationNoneZeroInputTest();
1463void LstmUtilsMeanStddevNormalizationAllZeroInputTest();
1464void LstmUtilsMeanStddevNormalizationMixedZeroInputTest();
1465void LstmUtilsVectorBatchVectorCwiseProductTest();
1466void LstmUtilsVectorBatchVectorAddTest();
1467
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001468LayerTestResult<float, 2> LstmLayerFloat32WithCifgWithPeepholeNoProjectionTest(
1469 armnn::IWorkloadFactory& workloadFactory,
1470 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1471
1472LayerTestResult<float, 2> LstmLayerFloat32NoCifgNoPeepholeNoProjectionTest(
1473 armnn::IWorkloadFactory& workloadFactory,
1474 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1475
1476LayerTestResult<float, 2> LstmLayerFloat32NoCifgWithPeepholeWithProjectionTest(
1477 armnn::IWorkloadFactory& workloadFactory,
1478 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1479
Jan Eilers38e05bd2019-06-26 13:10:09 +01001480LayerTestResult<float, 2> LstmLayerFloat32NoCifgWithPeepholeWithProjectionWithLayerNormTest(
1481 armnn::IWorkloadFactory& workloadFactory,
1482 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1483
Conor Kennedyb9971c92019-05-07 07:14:23 +01001484LayerTestResult<int16_t, 2> LstmLayerInt16NoCifgNoPeepholeNoProjectionTest(
1485 armnn::IWorkloadFactory& workloadFactory,
1486 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1487
1488LayerTestResult<int16_t, 2> LstmLayerInt16WithCifgWithPeepholeNoProjectionTest(
1489 armnn::IWorkloadFactory& workloadFactory,
1490 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1491
1492LayerTestResult<int16_t, 2> LstmLayerInt16NoCifgWithPeepholeWithProjectionTest(
1493 armnn::IWorkloadFactory& workloadFactory,
1494 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1495
1496LayerTestResult<int16_t, 2> LstmLayerInt16NoCifgNoPeepholeNoProjectionInt16ConstantTest(
1497 armnn::IWorkloadFactory& workloadFactory,
1498 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1499
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001500LayerTestResult<float, 4> SimpleConvertFp16ToFp32Test(
1501 armnn::IWorkloadFactory& workloadFactory,
1502 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1503
1504LayerTestResult<armnn::Half, 4> SimpleConvertFp32ToFp16Test(
1505 armnn::IWorkloadFactory& workloadFactory,
1506 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1507
Éanna Ó Catháinde705582018-12-03 13:04:22 +00001508LayerTestResult<float, 4> MaximumSimpleTest(
1509 armnn::IWorkloadFactory& workloadFactory,
1510 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1511
1512LayerTestResult<float, 4> MaximumBroadcast1ElementTest(
1513 armnn::IWorkloadFactory& workloadFactory,
1514 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1515
1516LayerTestResult<float, 4> MaximumBroadcast1DVectorTest(
1517 armnn::IWorkloadFactory& workloadFactory,
1518 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1519
1520LayerTestResult<uint8_t , 4> MaximumUint8Test(
1521 armnn::IWorkloadFactory& workloadFactory,
1522 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1523
1524LayerTestResult<uint8_t, 4> MaximumBroadcast1ElementUint8Test(
1525 armnn::IWorkloadFactory& workloadFactory,
1526 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1527
1528LayerTestResult<uint8_t, 4> MaximumBroadcast1DVectorUint8Test(
1529 armnn::IWorkloadFactory& workloadFactory,
1530 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1531
Sadik Armagan2999a022019-04-09 14:20:12 +01001532LayerTestResult<int16_t , 4> MaximumInt16Test(
1533 armnn::IWorkloadFactory& workloadFactory,
1534 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1535
1536LayerTestResult<int16_t, 4> MaximumBroadcast1ElementInt16Test(
1537 armnn::IWorkloadFactory& workloadFactory,
1538 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1539
1540LayerTestResult<int16_t, 4> MaximumBroadcast1DVectorInt16Test(
1541 armnn::IWorkloadFactory& workloadFactory,
1542 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1543
James Conroy4d1ff582019-06-10 17:06:39 +01001544template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1545LayerTestResult<T, 1> MeanSimpleTest(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001546 armnn::IWorkloadFactory& workloadFactory,
1547 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1548
James Conroy4d1ff582019-06-10 17:06:39 +01001549template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1550LayerTestResult<T, 3> MeanSimpleAxisTest(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001551 armnn::IWorkloadFactory& workloadFactory,
1552 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1553
James Conroy4d1ff582019-06-10 17:06:39 +01001554template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1555LayerTestResult<T, 4> MeanKeepDimsTest(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001556 armnn::IWorkloadFactory& workloadFactory,
1557 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1558
James Conroy4d1ff582019-06-10 17:06:39 +01001559template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1560LayerTestResult<T, 4> MeanMultipleDimsTest(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001561 armnn::IWorkloadFactory& workloadFactory,
1562 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1563
James Conroy4d1ff582019-06-10 17:06:39 +01001564template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1565LayerTestResult<T, 1> MeanVts1Test(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001566 armnn::IWorkloadFactory& workloadFactory,
1567 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1568
James Conroy4d1ff582019-06-10 17:06:39 +01001569template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1570LayerTestResult<T, 3> MeanVts2Test(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001571 armnn::IWorkloadFactory& workloadFactory,
1572 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1573
James Conroy4d1ff582019-06-10 17:06:39 +01001574template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1575LayerTestResult<T, 3> MeanVts3Test(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001576 armnn::IWorkloadFactory& workloadFactory,
1577 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1578
Éanna Ó Catháin20e58802018-12-04 10:29:06 +00001579LayerTestResult<float, 4> MinimumBroadcast1ElementTest1(
1580 armnn::IWorkloadFactory& workloadFactory,
1581 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1582
1583LayerTestResult<float, 4> MinimumBroadcast1ElementTest2(
1584 armnn::IWorkloadFactory& workloadFactory,
1585 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1586
1587LayerTestResult<uint8_t, 4> MinimumBroadcast1DVectorUint8Test(
1588 armnn::IWorkloadFactory & workloadFactory,
1589 const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager);
1590
Sadik Armagan2999a022019-04-09 14:20:12 +01001591LayerTestResult<int16_t , 4> MinimumInt16Test(
1592 armnn::IWorkloadFactory& workloadFactory,
1593 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1594
1595LayerTestResult<int16_t, 4> MinimumBroadcast1ElementInt16Test(
1596 armnn::IWorkloadFactory& workloadFactory,
1597 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1598
1599LayerTestResult<int16_t, 4> MinimumBroadcast1DVectorInt16Test(
1600 armnn::IWorkloadFactory& workloadFactory,
1601 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1602
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001603LayerTestResult<float, 4> AdditionAfterMaxPoolTest(
1604 armnn::IWorkloadFactory& workloadFactory,
1605 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1606
1607LayerTestResult<float, 4> SpaceToBatchNdSimpleFloat32Test(
1608 armnn::IWorkloadFactory& workloadFactory,
1609 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1610
1611LayerTestResult<float, 4> SpaceToBatchNdMultiChannelsFloat32Test(
1612 armnn::IWorkloadFactory& workloadFactory,
1613 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1614
1615LayerTestResult<float, 4> SpaceToBatchNdMultiBlockFloat32Test(
1616 armnn::IWorkloadFactory& workloadFactory,
1617 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1618
1619LayerTestResult<float, 4> SpaceToBatchNdPaddingFloat32Test(
1620 armnn::IWorkloadFactory& workloadFactory,
1621 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1622
1623LayerTestResult<uint8_t, 4> SpaceToBatchNdSimpleUint8Test(
1624 armnn::IWorkloadFactory& workloadFactory,
1625 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1626
1627LayerTestResult<uint8_t, 4> SpaceToBatchNdMultiChannelsUint8Test(
1628 armnn::IWorkloadFactory& workloadFactory,
1629 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1630
1631LayerTestResult<uint8_t, 4> SpaceToBatchNdMultiBlockUint8Test(
1632 armnn::IWorkloadFactory& workloadFactory,
1633 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1634
1635LayerTestResult<uint8_t, 4> SpaceToBatchNdPaddingUint8Test(
1636 armnn::IWorkloadFactory& workloadFactory,
1637 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1638
1639LayerTestResult<float, 4> SpaceToBatchNdSimpleNHWCFloat32Test(
1640 armnn::IWorkloadFactory& workloadFactory,
1641 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1642
1643LayerTestResult<float, 4> SpaceToBatchNdMultiChannelsNHWCFloat32Test(
1644 armnn::IWorkloadFactory& workloadFactory,
1645 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1646
1647LayerTestResult<float, 4> SpaceToBatchNdMultiBlockNHWCFloat32Test(
1648 armnn::IWorkloadFactory& workloadFactory,
1649 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1650
1651LayerTestResult<float, 4> SpaceToBatchNdPaddingNHWCFloat32Test(
1652 armnn::IWorkloadFactory& workloadFactory,
1653 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1654
1655LayerTestResult<uint8_t, 4> SpaceToBatchNdSimpleNHWCUint8Test(
1656 armnn::IWorkloadFactory& workloadFactory,
1657 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1658
1659LayerTestResult<uint8_t, 4> SpaceToBatchNdMultiChannelsNHWCUint8Test(
1660 armnn::IWorkloadFactory& workloadFactory,
1661 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1662
1663LayerTestResult<uint8_t, 4> SpaceToBatchNdMultiBlockNHWCUint8Test(
1664 armnn::IWorkloadFactory& workloadFactory,
1665 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1666
1667LayerTestResult<uint8_t, 4> SpaceToBatchNdPaddingNHWCUint8Test(
1668 armnn::IWorkloadFactory& workloadFactory,
1669 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1670
nikraj01120522a2019-05-31 11:33:07 +01001671LayerTestResult<int16_t, 4> SpaceToBatchNdSimpleUint16Test(
1672 armnn::IWorkloadFactory& workloadFactory,
1673 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1674
1675LayerTestResult<int16_t, 4> SpaceToBatchNdMultiChannelsUint16Test(
1676 armnn::IWorkloadFactory& workloadFactory,
1677 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1678
1679LayerTestResult<int16_t, 4> SpaceToBatchNdMultiBlockUint16Test(
1680 armnn::IWorkloadFactory& workloadFactory,
1681 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1682
1683LayerTestResult<int16_t, 4> SpaceToBatchNdPaddingUint16Test(
1684 armnn::IWorkloadFactory& workloadFactory,
1685 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1686
1687LayerTestResult<int16_t, 4> SpaceToBatchNdSimpleNHWCUint16Test(
1688 armnn::IWorkloadFactory& workloadFactory,
1689 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1690
1691LayerTestResult<int16_t, 4> SpaceToBatchNdMultiChannelsNHWCUint16Test(
1692 armnn::IWorkloadFactory& workloadFactory,
1693 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1694
1695LayerTestResult<int16_t, 4> SpaceToBatchNdMultiBlockNHWCUint16Test(
1696 armnn::IWorkloadFactory& workloadFactory,
1697 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1698
1699LayerTestResult<int16_t, 4> SpaceToBatchNdPaddingNHWCUint16Test(
1700 armnn::IWorkloadFactory& workloadFactory,
1701 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1702
Francis Murtagh57f13d52019-06-24 14:24:36 +01001703LayerTestResult<float, 4> BatchToSpaceNdNhwcTest1(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001704 armnn::IWorkloadFactory& workloadFactory,
1705 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1706
Francis Murtagh57f13d52019-06-24 14:24:36 +01001707LayerTestResult<float, 4> BatchToSpaceNdNhwcTest2(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001708 armnn::IWorkloadFactory& workloadFactory,
1709 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1710
Francis Murtagh57f13d52019-06-24 14:24:36 +01001711LayerTestResult<float, 4> BatchToSpaceNdNhwcTest3(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001712 armnn::IWorkloadFactory& workloadFactory,
1713 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1714
Francis Murtagh57f13d52019-06-24 14:24:36 +01001715LayerTestResult<float, 4> BatchToSpaceNdNhwcTest4(
Nattapat Chaimanowong3ee14222019-02-27 10:28:09 +00001716 armnn::IWorkloadFactory& workloadFactory,
1717 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1718
Francis Murtagh57f13d52019-06-24 14:24:36 +01001719LayerTestResult<float, 4> BatchToSpaceNdNchwTest1(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001720 armnn::IWorkloadFactory &workloadFactory,
1721 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1722
Francis Murtagh57f13d52019-06-24 14:24:36 +01001723LayerTestResult<float, 4> BatchToSpaceNdNchwTest2(
Nattapat Chaimanowong3ee14222019-02-27 10:28:09 +00001724 armnn::IWorkloadFactory &workloadFactory,
1725 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Mike Kelly831faed2018-11-28 11:52:08 +00001726
Francis Murtagh57f13d52019-06-24 14:24:36 +01001727LayerTestResult<float, 4> BatchToSpaceNdNchwTest3(
Nattapat Chaimanowong3ee14222019-02-27 10:28:09 +00001728 armnn::IWorkloadFactory &workloadFactory,
1729 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Mike Kelly831faed2018-11-28 11:52:08 +00001730
Francis Murtagh57f13d52019-06-24 14:24:36 +01001731LayerTestResult<uint8_t, 4> BatchToSpaceNdNhwcTest5(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001732 armnn::IWorkloadFactory &workloadFactory,
1733 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Nattapat Chaimanowong1216b582018-11-23 15:33:41 +00001734
Francis Murtagh57f13d52019-06-24 14:24:36 +01001735LayerTestResult<uint8_t, 4> BatchToSpaceNdNhwcTest6(
Nattapat Chaimanowong3ee14222019-02-27 10:28:09 +00001736 armnn::IWorkloadFactory &workloadFactory,
1737 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Mike Kelly831faed2018-11-28 11:52:08 +00001738
Francis Murtagh57f13d52019-06-24 14:24:36 +01001739LayerTestResult<uint8_t, 4> BatchToSpaceNdNhwcTest7(
Nattapat Chaimanowong3ee14222019-02-27 10:28:09 +00001740 armnn::IWorkloadFactory &workloadFactory,
1741 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Mike Kelly831faed2018-11-28 11:52:08 +00001742
Francis Murtagh57f13d52019-06-24 14:24:36 +01001743LayerTestResult<uint8_t, 4> BatchToSpaceNdNchwTest4(
Nattapat Chaimanowong3ee14222019-02-27 10:28:09 +00001744 armnn::IWorkloadFactory &workloadFactory,
1745 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Mike Kelly831faed2018-11-28 11:52:08 +00001746
Francis Murtagh57f13d52019-06-24 14:24:36 +01001747LayerTestResult<uint8_t, 4> BatchToSpaceNdNchwTest5(
Nattapat Chaimanowong3ee14222019-02-27 10:28:09 +00001748 armnn::IWorkloadFactory &workloadFactory,
1749 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Mike Kelly831faed2018-11-28 11:52:08 +00001750
Francis Murtagh57f13d52019-06-24 14:24:36 +01001751LayerTestResult<uint8_t, 4> BatchToSpaceNdNchwTest6(
Nattapat Chaimanowong3ee14222019-02-27 10:28:09 +00001752 armnn::IWorkloadFactory &workloadFactory,
1753 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1754
Francis Murtagh57f13d52019-06-24 14:24:36 +01001755LayerTestResult<uint8_t, 4> BatchToSpaceNdNchwTest7(
Nattapat Chaimanowong3ee14222019-02-27 10:28:09 +00001756 armnn::IWorkloadFactory &workloadFactory,
1757 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Mike Kelly831faed2018-11-28 11:52:08 +00001758
Nattapat Chaimanowong1216b582018-11-23 15:33:41 +00001759LayerTestResult<float, 4> StridedSlice4DFloat32Test(
1760 armnn::IWorkloadFactory& workloadFactory,
1761 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Nattapat Chaimanowongcfdcadf2018-12-06 11:54:33 +00001762
Nattapat Chaimanowong1216b582018-11-23 15:33:41 +00001763LayerTestResult<float, 4> StridedSlice4DReverseFloat32Test(
1764 armnn::IWorkloadFactory& workloadFactory,
1765 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1766
1767LayerTestResult<float, 4> StridedSliceSimpleStrideFloat32Test(
1768 armnn::IWorkloadFactory& workloadFactory,
1769 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1770
1771LayerTestResult<float, 4> StridedSliceSimpleRangeMaskFloat32Test(
1772 armnn::IWorkloadFactory& workloadFactory,
1773 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1774
1775LayerTestResult<float, 2> StridedSliceShrinkAxisMaskFloat32Test(
1776 armnn::IWorkloadFactory& workloadFactory,
1777 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1778
1779LayerTestResult<float, 3> StridedSlice3DFloat32Test(
1780 armnn::IWorkloadFactory& workloadFactory,
1781 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1782
1783LayerTestResult<float, 3> StridedSlice3DReverseFloat32Test(
1784 armnn::IWorkloadFactory& workloadFactory,
1785 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1786
1787LayerTestResult<float, 2> StridedSlice2DFloat32Test(
1788 armnn::IWorkloadFactory& workloadFactory,
1789 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1790
1791LayerTestResult<float, 2> StridedSlice2DReverseFloat32Test(
1792 armnn::IWorkloadFactory& workloadFactory,
1793 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1794
1795LayerTestResult<uint8_t, 4> StridedSlice4DUint8Test(
1796 armnn::IWorkloadFactory& workloadFactory,
1797 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1798
1799LayerTestResult<uint8_t, 4> StridedSlice4DReverseUint8Test(
1800 armnn::IWorkloadFactory& workloadFactory,
1801 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1802
1803LayerTestResult<uint8_t, 4> StridedSliceSimpleStrideUint8Test(
1804 armnn::IWorkloadFactory& workloadFactory,
1805 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1806
1807LayerTestResult<uint8_t, 4> StridedSliceSimpleRangeMaskUint8Test(
1808 armnn::IWorkloadFactory& workloadFactory,
1809 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1810
1811LayerTestResult<uint8_t, 2> StridedSliceShrinkAxisMaskUint8Test(
1812 armnn::IWorkloadFactory& workloadFactory,
1813 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1814
1815LayerTestResult<uint8_t, 3> StridedSlice3DUint8Test(
1816 armnn::IWorkloadFactory& workloadFactory,
1817 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1818
1819LayerTestResult<uint8_t, 3> StridedSlice3DReverseUint8Test(
1820 armnn::IWorkloadFactory& workloadFactory,
1821 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1822
1823LayerTestResult<uint8_t, 2> StridedSlice2DUint8Test(
1824 armnn::IWorkloadFactory& workloadFactory,
1825 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1826
1827LayerTestResult<uint8_t, 2> StridedSlice2DReverseUint8Test(
1828 armnn::IWorkloadFactory& workloadFactory,
1829 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Nattapat Chaimanowongcfdcadf2018-12-06 11:54:33 +00001830
Matteo Martincigh42666a12019-05-29 08:53:41 +01001831LayerTestResult<int16_t, 4> StridedSlice4DInt16Test(
1832 armnn::IWorkloadFactory& workloadFactory,
1833 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1834
1835LayerTestResult<int16_t, 4> StridedSlice4DReverseInt16Test(
1836 armnn::IWorkloadFactory& workloadFactory,
1837 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1838
1839LayerTestResult<int16_t, 4> StridedSliceSimpleStrideInt16Test(
1840 armnn::IWorkloadFactory& workloadFactory,
1841 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1842
1843LayerTestResult<int16_t, 4> StridedSliceSimpleRangeMaskInt16Test(
1844 armnn::IWorkloadFactory& workloadFactory,
1845 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1846
1847LayerTestResult<int16_t, 2> StridedSliceShrinkAxisMaskInt16Test(
1848 armnn::IWorkloadFactory& workloadFactory,
1849 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1850
1851LayerTestResult<int16_t, 3> StridedSlice3DInt16Test(
1852 armnn::IWorkloadFactory& workloadFactory,
1853 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1854
1855LayerTestResult<int16_t, 3> StridedSlice3DReverseInt16Test(
1856 armnn::IWorkloadFactory& workloadFactory,
1857 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1858
1859LayerTestResult<int16_t, 2> StridedSlice2DInt16Test(
1860 armnn::IWorkloadFactory& workloadFactory,
1861 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1862
1863LayerTestResult<int16_t, 2> StridedSlice2DReverseInt16Test(
1864 armnn::IWorkloadFactory& workloadFactory,
1865 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1866
Nattapat Chaimanowongcfdcadf2018-12-06 11:54:33 +00001867LayerTestResult<float, 4> Debug4DFloat32Test(
1868 armnn::IWorkloadFactory& workloadFactory,
1869 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1870
1871LayerTestResult<float, 3> Debug3DFloat32Test(
1872 armnn::IWorkloadFactory& workloadFactory,
1873 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1874
1875LayerTestResult<float, 2> Debug2DFloat32Test(
1876 armnn::IWorkloadFactory& workloadFactory,
1877 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1878
1879LayerTestResult<float, 1> Debug1DFloat32Test(
1880 armnn::IWorkloadFactory& workloadFactory,
1881 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1882
1883LayerTestResult<uint8_t, 4> Debug4DUint8Test(
1884 armnn::IWorkloadFactory& workloadFactory,
1885 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1886
1887LayerTestResult<uint8_t, 3> Debug3DUint8Test(
1888 armnn::IWorkloadFactory& workloadFactory,
1889 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1890
1891LayerTestResult<uint8_t, 2> Debug2DUint8Test(
1892 armnn::IWorkloadFactory& workloadFactory,
1893 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1894
1895LayerTestResult<uint8_t, 1> Debug1DUint8Test(
1896 armnn::IWorkloadFactory& workloadFactory,
1897 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Matteo Martincigh49124022019-01-11 13:25:59 +00001898
1899LayerTestResult<uint8_t, 4> PreCompiledConvolution2dTest(
1900 armnn::IWorkloadFactory& workloadFactory,
1901 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1902
1903LayerTestResult<uint8_t, 4> PreCompiledConvolution2dStride2x2Test(
1904 armnn::IWorkloadFactory& workloadFactory,
1905 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1906
1907LayerTestResult<uint8_t, 4> PreCompiledDepthwiseConvolution2dTest(
1908 armnn::IWorkloadFactory & workloadFactory,
1909 const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager);
1910
1911LayerTestResult<uint8_t, 4> PreCompiledDepthwiseConvolution2dStride2x2Test(
1912 armnn::IWorkloadFactory & workloadFactory,
1913 const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager);
1914
1915LayerTestResult<uint8_t, 4> PreCompiledMaxPooling2dTest(
1916 armnn::IWorkloadFactory& workloadFactory,
1917 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1918
1919LayerTestResult<float, 4> Debug4DFloat32Test(
1920 armnn::IWorkloadFactory& workloadFactory,
1921 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1922
1923LayerTestResult<float, 3> Debug3DFloat32Test(
1924 armnn::IWorkloadFactory& workloadFactory,
1925 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1926
1927LayerTestResult<float, 2> Debug2DFloat32Test(
1928 armnn::IWorkloadFactory& workloadFactory,
1929 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1930
1931LayerTestResult<float, 1> Debug1DFloat32Test(
1932 armnn::IWorkloadFactory& workloadFactory,
1933 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1934
1935LayerTestResult<uint8_t, 4> Debug4DUint8Test(
1936 armnn::IWorkloadFactory& workloadFactory,
1937 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1938
1939LayerTestResult<uint8_t, 3> Debug3DUint8Test(
1940 armnn::IWorkloadFactory& workloadFactory,
1941 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1942
1943LayerTestResult<uint8_t, 2> Debug2DUint8Test(
1944 armnn::IWorkloadFactory& workloadFactory,
1945 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1946
1947LayerTestResult<uint8_t, 1> Debug1DUint8Test(
1948 armnn::IWorkloadFactory& workloadFactory,
1949 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
narpra014951d842019-01-18 16:53:53 +00001950
1951LayerTestResult<float, 1> Gather1DParamsFloatTest(
1952 armnn::IWorkloadFactory& workloadFactory,
1953 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1954
1955LayerTestResult<uint8_t, 1> Gather1DParamsUint8Test(
1956 armnn::IWorkloadFactory& workloadFactory,
1957 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1958
Ellen Norris-Thompsone0dbedf2019-06-24 09:23:38 +01001959LayerTestResult<int16_t, 1> Gather1DParamsInt16Test(
1960 armnn::IWorkloadFactory& workloadFactory,
1961 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1962
narpra014951d842019-01-18 16:53:53 +00001963LayerTestResult<float, 2> GatherMultiDimParamsFloatTest(
1964 armnn::IWorkloadFactory& workloadFactory,
1965 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1966
1967LayerTestResult<uint8_t, 2> GatherMultiDimParamsUint8Test(
1968 armnn::IWorkloadFactory& workloadFactory,
1969 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1970
Ellen Norris-Thompsone0dbedf2019-06-24 09:23:38 +01001971LayerTestResult<int16_t, 2> GatherMultiDimParamsInt16Test(
1972 armnn::IWorkloadFactory& workloadFactory,
1973 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1974
narpra014951d842019-01-18 16:53:53 +00001975LayerTestResult<float, 4> GatherMultiDimParamsMultiDimIndicesFloatTest(
1976 armnn::IWorkloadFactory& workloadFactory,
1977 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1978
1979LayerTestResult<uint8_t, 4> GatherMultiDimParamsMultiDimIndicesUint8Test(
1980 armnn::IWorkloadFactory& workloadFactory,
1981 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Nattapat Chaimanowong8a54ac02019-03-29 15:25:04 +00001982
Ellen Norris-Thompsone0dbedf2019-06-24 09:23:38 +01001983LayerTestResult<int16_t, 4> GatherMultiDimParamsMultiDimIndicesInt16Test(
1984 armnn::IWorkloadFactory& workloadFactory,
1985 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1986
Nattapat Chaimanowongafa4e3a2019-04-02 11:41:45 +01001987LayerTestResult<float, 4> DequantizeSimpleUint8Test(
1988 armnn::IWorkloadFactory& workloadFactory,
1989 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1990
1991LayerTestResult<float, 4> DequantizeOffsetUint8Test(
1992 armnn::IWorkloadFactory& workloadFactory,
1993 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1994
1995LayerTestResult<float, 4> DequantizeSimpleInt16Test(
Nattapat Chaimanowong8a54ac02019-03-29 15:25:04 +00001996 armnn::IWorkloadFactory& workloadFactory,
1997 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Nattapat Chaimanowonga0beb3b2019-04-01 17:04:53 +01001998
Keith Davisa57eccb2019-06-14 17:33:22 +01001999LayerTestResult<uint8_t, 4> SpaceToDepthNCHWAsymmQ8Test(
2000 armnn::IWorkloadFactory& workloadFactory,
2001 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
2002
2003LayerTestResult<uint8_t, 4> SpaceToDepthNHWCAsymmQ8Test(
2004 armnn::IWorkloadFactory& workloadFactory,
2005 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
2006
2007LayerTestResult<float, 4> SpaceToDepthNHWCFloat32Test(
2008 armnn::IWorkloadFactory& workloadFactory,
2009 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
2010
2011LayerTestResult<float, 4> SpaceToDepthNCHWFloat32Test(
2012 armnn::IWorkloadFactory& workloadFactory,
2013 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
2014
Nattapat Chaimanowonga0beb3b2019-04-01 17:04:53 +01002015LayerTestResult<uint8_t, 4> QuantizeSimpleUint8Test(
2016 armnn::IWorkloadFactory& workloadFactory,
2017 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
2018
2019LayerTestResult<uint8_t, 4> QuantizeClampUint8Test(
2020 armnn::IWorkloadFactory& workloadFactory,
2021 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
2022
2023LayerTestResult<int16_t, 4> QuantizeClampInt16Test(
2024 armnn::IWorkloadFactory& workloadFactory,
2025 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Francis Murtagh46c09d02019-05-28 08:15:28 +01002026
2027template<typename T, typename B>
2028LayerTestResult<T, 2> SimpleFullyConnectedTestImpl(
2029 armnn::IWorkloadFactory& workloadFactory,
2030 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
2031 armnn::TensorInfo inputTensorInfo,
2032 armnn::TensorInfo outputTensorInfo,
2033 armnn::TensorInfo weightsDesc,
2034 armnn::TensorInfo biasesDesc,
2035 boost::multi_array<T, 2>& weights,
2036 boost::multi_array<B, 1>& bias,
2037 boost::multi_array<T, 4>& input,
2038 bool biasEnabled,
2039 bool transposeWeights)
2040{
2041 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2042 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2043
2044 armnn::FullyConnectedQueueDescriptor data;
2045 armnn::WorkloadInfo info;
2046 armnn::ScopedCpuTensorHandle weightsTensor(weightsDesc);
2047 armnn::ScopedCpuTensorHandle biasTensor(biasesDesc);
2048
2049 AllocateAndCopyDataToITensorHandle(&weightsTensor, &weights[0][0]);
2050 AllocateAndCopyDataToITensorHandle(&biasTensor, &bias[0]);
2051
2052 AddInputToWorkload(data, info, inputTensorInfo, inputHandle.get());
2053 AddOutputToWorkload(data, info, outputTensorInfo, outputHandle.get());
2054 data.m_Weight = &weightsTensor;
2055 data.m_Bias = &biasTensor;
2056 data.m_Parameters.m_BiasEnabled = biasEnabled;
2057 data.m_Parameters.m_TransposeWeightMatrix = transposeWeights;
2058
2059 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateFullyConnected(data, info);
2060 LayerTestResult<T, 2> result(outputTensorInfo);
2061
2062 inputHandle->Allocate();
2063 outputHandle->Allocate();
2064 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
2065
2066 ExecuteWorkload(*workload, memoryManager);
2067
2068 CopyDataFromITensorHandle(&result.output[0][0], outputHandle.get());
2069
2070 return result;
2071}
2072
2073template <armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
2074std::vector<T> ConvertToDataType(const std::vector<float>& input,
2075 const armnn::TensorInfo& inputTensorInfo)
2076{
2077 std::vector<T> output(input.size());
2078 auto outputTensorInfo = inputTensorInfo;
2079 outputTensorInfo.SetDataType(ArmnnType);
2080
2081 std::unique_ptr<armnn::Encoder<float>> pOutputEncoder = armnn::MakeEncoder<float>(outputTensorInfo, output.data());
2082 armnn::Encoder<float>& rOutputEncoder = *pOutputEncoder;
2083
2084 for (auto it = input.begin(); it != input.end(); ++it)
2085 {
2086 rOutputEncoder.Set(*it);
2087 ++rOutputEncoder;
2088 }
2089 return output;
2090}
2091
David Monahan34757812019-06-19 11:47:21 +01002092// Utility method to convert a single value to the correct type
2093template <typename T>
2094T ConvertToDataType(const float& value,
2095 const armnn::TensorInfo& tensorInfo)
2096{
2097 std::vector<T> output(1);
2098 std::unique_ptr<armnn::Encoder<float>> pEncoder = armnn::MakeEncoder<float>(tensorInfo, output.data());
2099 armnn::Encoder<float>& rEncoder = *pEncoder;
2100 rEncoder.Set(value);
2101 return output[0];
2102}
2103
nikraj010421e7f2019-06-14 09:40:34 +01002104template<armnn::DataType ArmnnType, typename T>
nikraj0193f84a92019-06-05 10:48:46 +01002105LayerTestResult<T, 2> Rsqrt2dTestCommon(
2106 armnn::IWorkloadFactory& workloadFactory,
2107 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
2108 const armnn::TensorInfo inputTensorInfo,
2109 const armnn::TensorInfo outputTensorInfo,
nikraj010421e7f2019-06-14 09:40:34 +01002110 const std::vector<float>& inputValues,
2111 const std::vector<float>& expectedOutputValues)
nikraj0193f84a92019-06-05 10:48:46 +01002112{
nikraj010421e7f2019-06-14 09:40:34 +01002113 auto inputTensor = MakeTensor<T, 2>(inputTensorInfo, ConvertToDataType<ArmnnType>(inputValues,inputTensorInfo));
nikraj0193f84a92019-06-05 10:48:46 +01002114
2115 LayerTestResult<T, 2> result(outputTensorInfo);
nikraj010421e7f2019-06-14 09:40:34 +01002116
2117 result.outputExpected = MakeTensor<T, 2>(outputTensorInfo,
2118 ConvertToDataType<ArmnnType>(expectedOutputValues,outputTensorInfo));
nikraj0193f84a92019-06-05 10:48:46 +01002119
2120 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2121 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2122
2123 armnn::RsqrtQueueDescriptor descriptor;
2124
2125 armnn::WorkloadInfo info;
2126
2127 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
2128 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
2129
2130 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateRsqrt(descriptor, info);
2131
2132 inputHandle->Allocate();
2133 outputHandle->Allocate();
2134
2135 CopyDataToITensorHandle(inputHandle.get(), &inputTensor[0][0]);
2136
2137 workload->PostAllocationConfigure();
2138 workload->Execute();
2139
2140 CopyDataFromITensorHandle(&result.output[0][0], outputHandle.get());
2141
2142 return result;
2143}
2144
2145template<armnn::DataType ArmnnType, typename T>
2146LayerTestResult<T, 2> Rsqrt2dTest(
2147 armnn::IWorkloadFactory& workloadFactory,
2148 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
2149{
2150 const armnn::TensorShape inputShape{ 2, 2 };
2151 const armnn::TensorShape outputShape{ 2, 2 };
2152
nikraj010421e7f2019-06-14 09:40:34 +01002153 armnn::TensorInfo inputTensorInfo(inputShape, ArmnnType);
2154 inputTensorInfo.SetQuantizationScale(0.1f);
2155 inputTensorInfo.SetQuantizationOffset(0);
nikraj0193f84a92019-06-05 10:48:46 +01002156
nikraj010421e7f2019-06-14 09:40:34 +01002157 armnn::TensorInfo outputTensorInfo(outputShape, ArmnnType);
2158 outputTensorInfo.SetQuantizationScale(0.1f);
2159 outputTensorInfo.SetQuantizationOffset(0);
nikraj0193f84a92019-06-05 10:48:46 +01002160
nikraj010421e7f2019-06-14 09:40:34 +01002161 std::vector<float> inputValues
2162 {
2163 1.f, 4.f,
2164 16.f, 25.f
2165 };
nikraj0193f84a92019-06-05 10:48:46 +01002166
nikraj010421e7f2019-06-14 09:40:34 +01002167 std::vector<float> expectedOutputValues
2168 {
2169 1.f, 0.5f,
2170 0.25f, 0.2f
2171 };
2172
2173 return Rsqrt2dTestCommon<ArmnnType>(workloadFactory, memoryManager,
nikraj0193f84a92019-06-05 10:48:46 +01002174 inputTensorInfo, outputTensorInfo,
2175 inputValues, expectedOutputValues);
2176}
2177
2178template<armnn::DataType ArmnnType, typename T>
2179LayerTestResult<T, 3> Rsqrt3dTest(
2180 armnn::IWorkloadFactory& workloadFactory,
2181 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
2182{
2183 const armnn::TensorShape inputShape{ 3, 1, 2 };
2184 const armnn::TensorShape outputShape{ 3, 1, 2 };
2185
nikraj010421e7f2019-06-14 09:40:34 +01002186 armnn::TensorInfo inputTensorInfo(inputShape, ArmnnType);
2187 inputTensorInfo.SetQuantizationScale(0.1f);
2188 inputTensorInfo.SetQuantizationOffset(0);
nikraj0193f84a92019-06-05 10:48:46 +01002189
nikraj010421e7f2019-06-14 09:40:34 +01002190 armnn::TensorInfo outputTensorInfo(outputShape, ArmnnType);
2191 outputTensorInfo.SetQuantizationScale(0.1f);
2192 outputTensorInfo.SetQuantizationOffset(0);
nikraj0193f84a92019-06-05 10:48:46 +01002193
nikraj010421e7f2019-06-14 09:40:34 +01002194 std::vector<float> inputValues
2195 {
2196 1.f, 4.f, 16.f,
2197 25.f, 64.f, 100.f
2198 };
nikraj0193f84a92019-06-05 10:48:46 +01002199
nikraj010421e7f2019-06-14 09:40:34 +01002200 std::vector<float> expectedOutputValues
2201 {
2202 1.f, 0.5f, 0.25f,
2203 0.2f, 0.125f, 0.1f
2204 };
2205
2206 auto inputTensor = MakeTensor<T, 3>(inputTensorInfo, ConvertToDataType<ArmnnType>(inputValues,inputTensorInfo));
nikraj0193f84a92019-06-05 10:48:46 +01002207
2208 LayerTestResult<T, 3> result(outputTensorInfo);
nikraj010421e7f2019-06-14 09:40:34 +01002209 result.outputExpected = MakeTensor<T, 3>(outputTensorInfo,
2210 ConvertToDataType<ArmnnType>(expectedOutputValues,outputTensorInfo));
nikraj0193f84a92019-06-05 10:48:46 +01002211
2212 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2213 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2214
2215 armnn::RsqrtQueueDescriptor descriptor;
2216
2217 armnn::WorkloadInfo info;
2218
2219 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
2220 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
2221
2222 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateRsqrt(descriptor, info);
2223
2224 inputHandle->Allocate();
2225 outputHandle->Allocate();
2226
2227 CopyDataToITensorHandle(inputHandle.get(), &inputTensor[0][0][0]);
2228
2229 workload->PostAllocationConfigure();
2230 workload->Execute();
2231
2232 CopyDataFromITensorHandle(&result.output[0][0][0], outputHandle.get());
2233
2234 return result;
2235}
2236
2237template<armnn::DataType ArmnnType, typename T>
2238LayerTestResult<T, 2> RsqrtZeroTest(
2239 armnn::IWorkloadFactory& workloadFactory,
2240 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
2241{
2242 const armnn::TensorShape inputShape{ 1, 2 };
2243 const armnn::TensorShape outputShape{ 1, 2 };
2244
nikraj010421e7f2019-06-14 09:40:34 +01002245 armnn::TensorInfo inputTensorInfo(inputShape, ArmnnType);
2246 inputTensorInfo.SetQuantizationScale(0.1f);
nikraj0193f84a92019-06-05 10:48:46 +01002247
nikraj010421e7f2019-06-14 09:40:34 +01002248 armnn::TensorInfo outputTensorInfo(outputShape, ArmnnType);
2249 outputTensorInfo.SetQuantizationScale(0.1f);
nikraj0193f84a92019-06-05 10:48:46 +01002250
nikraj010421e7f2019-06-14 09:40:34 +01002251 std::vector<float> inputValues
2252 {
2253 0.f, -0.f
2254 };
nikraj0193f84a92019-06-05 10:48:46 +01002255
nikraj010421e7f2019-06-14 09:40:34 +01002256 std::vector<float> expectedOutputValues
2257 {
2258 INFINITY, -INFINITY
2259 };
2260
2261 return Rsqrt2dTestCommon<ArmnnType>(workloadFactory, memoryManager,
nikraj0193f84a92019-06-05 10:48:46 +01002262 inputTensorInfo, outputTensorInfo,
2263 inputValues, expectedOutputValues);
2264}
2265
2266template<armnn::DataType ArmnnType, typename T>
2267LayerTestResult<T, 2> RsqrtNegativeTest(
2268 armnn::IWorkloadFactory& workloadFactory,
2269 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
2270{
2271 const armnn::TensorShape inputShape{ 1, 2 };
2272 const armnn::TensorShape outputShape{ 1, 2 };
2273
nikraj010421e7f2019-06-14 09:40:34 +01002274 armnn::TensorInfo inputTensorInfo(inputShape, ArmnnType);
2275 inputTensorInfo.SetQuantizationScale(0.1f);
2276 inputTensorInfo.SetQuantizationOffset(0);
nikraj0193f84a92019-06-05 10:48:46 +01002277
nikraj010421e7f2019-06-14 09:40:34 +01002278 armnn::TensorInfo outputTensorInfo(outputShape, ArmnnType);
2279 outputTensorInfo.SetQuantizationScale(0.1f);
2280 outputTensorInfo.SetQuantizationOffset(0);
nikraj0193f84a92019-06-05 10:48:46 +01002281
nikraj010421e7f2019-06-14 09:40:34 +01002282 std::vector<float> inputValues
2283 {
2284 -25.f, -16.f
2285 };
nikraj0193f84a92019-06-05 10:48:46 +01002286
nikraj010421e7f2019-06-14 09:40:34 +01002287 std::vector<float> expectedOutputValues
2288 {
2289 -NAN, -NAN
2290 };
2291
2292 return Rsqrt2dTestCommon<ArmnnType>(workloadFactory, memoryManager,
nikraj0193f84a92019-06-05 10:48:46 +01002293 inputTensorInfo, outputTensorInfo,
2294 inputValues, expectedOutputValues);
2295}
2296
2297template<typename T>
Nina Drozd8ed4b8c2019-05-29 10:41:04 +01002298LayerTestResult<T, 4> SimpleReshapeTestImpl(
2299 armnn::IWorkloadFactory& workloadFactory,
2300 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
2301 armnn::TensorInfo inputTensorInfo,
2302 armnn::TensorInfo outputTensorInfo,
2303 const std::vector<T>& inputData,
2304 const std::vector<T>& outputExpectedData)
2305{
2306 auto input = MakeTensor<T, 4>(inputTensorInfo, inputData);
2307
2308 LayerTestResult<T, 4> ret(outputTensorInfo);
2309 ret.outputExpected = MakeTensor<T, 4>(outputTensorInfo, outputExpectedData);
2310
2311 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2312 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2313
2314 armnn::ReshapeQueueDescriptor data;
2315 armnn::WorkloadInfo info;
2316 AddInputToWorkload(data, info, inputTensorInfo, inputHandle.get());
2317 AddOutputToWorkload(data, info, outputTensorInfo, outputHandle.get());
2318
2319 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateReshape(data, info);
2320
2321 inputHandle->Allocate();
2322 outputHandle->Allocate();
2323
2324 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
2325
2326 workload->Execute();
2327
2328 CopyDataFromITensorHandle(&ret.output[0][0][0][0], outputHandle.get());
2329
2330 return ret;
2331}
2332
Francis Murtagh46c09d02019-05-28 08:15:28 +01002333template<armnn::DataType ArmnnType, typename T>
2334LayerTestResult<T, 2> FullyConnectedTest(
2335 armnn::IWorkloadFactory& workloadFactory,
2336 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
2337 bool biasEnabled)
2338{
2339 constexpr static unsigned int inputWidth = 3u;
2340 constexpr static unsigned int inputHeight = 2u;
2341 constexpr static unsigned int inputChannels = 1u;
2342
2343 constexpr static unsigned int inputSize = inputWidth * inputHeight * inputChannels;
2344
2345 constexpr static unsigned int outputChannels = 2u;
2346
2347 armnn::TensorInfo inputTensorInfo({ 1, inputChannels, inputHeight, inputWidth }, ArmnnType);
2348 inputTensorInfo.SetQuantizationScale(0.1f);
2349 inputTensorInfo.SetQuantizationOffset(63);
2350
2351 armnn::TensorInfo outputTensorInfo({ 1, outputChannels }, ArmnnType);
2352 outputTensorInfo.SetQuantizationScale(5.f);
2353 outputTensorInfo.SetQuantizationOffset(biasEnabled ? -50 : 10);
2354
2355 armnn::TensorInfo weightsDesc({ outputChannels, inputSize }, ArmnnType);
2356 weightsDesc.SetQuantizationScale(0.2f);
2357 weightsDesc.SetQuantizationOffset(93);
2358
2359 armnn::TensorInfo biasesDesc({ outputChannels }, GetBiasTypeFromWeightsType(weightsDesc.GetDataType()).value());
2360 biasesDesc.SetQuantizationScale(inputTensorInfo.GetQuantizationScale() * weightsDesc.GetQuantizationScale());
2361 biasesDesc.SetQuantizationOffset(0);
2362
2363 LayerTestResult<T, 2> result(outputTensorInfo);
2364
2365 auto input = MakeTensor<T, 4>(inputTensorInfo, ConvertToDataType<ArmnnType>(
2366 {
2367 -1.2f, 6.1f, -3.5f,
2368 18.8f, -5.5f, 2.9f
2369 },
2370 inputTensorInfo));
2371
2372 auto weights = MakeTensor<T, 2>(weightsDesc, ConvertToDataType<ArmnnType>(
2373 {
2374 -8.4f, 20.0f, -10.4f, -8, 16.4f, -11.8f,
2375 23.4f, 10.4f, -14.0f, -3.8f, -11.8f, 11.4f
2376 },
2377 weightsDesc));
2378
2379 auto bias = MakeTensor<int32_t, 1>(biasesDesc, std::vector<int32_t>{9250, 67500});
2380
2381 result = SimpleFullyConnectedTestImpl<T>(
2382 workloadFactory,
2383 memoryManager,
2384 inputTensorInfo, outputTensorInfo,
2385 weightsDesc, biasesDesc,
2386 weights, bias, input,
2387 biasEnabled, true
2388 );
2389
2390 if (biasEnabled)
2391 {
2392 result.outputExpected = MakeTensor<T, 2>(outputTensorInfo,
2393 ConvertToDataType<ArmnnType>({80.f, 1460.f}, outputTensorInfo));
2394 }
2395 else
2396 {
2397 result.outputExpected = MakeTensor<T, 2>(outputTensorInfo,
2398 ConvertToDataType<ArmnnType>({-107.04f, 110.f}, outputTensorInfo));
2399 }
2400
2401 return result;
Nina Drozd8ed4b8c2019-05-29 10:41:04 +01002402}
2403
Nina Drozd8ed4b8c2019-05-29 10:41:04 +01002404template<armnn::DataType ArmnnType, typename T>
2405LayerTestResult<T, 4> SimpleReshapeTest(
2406 armnn::IWorkloadFactory& workloadFactory,
2407 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
2408{
2409 armnn::TensorInfo inputTensorInfo;
2410 armnn::TensorInfo outputTensorInfo;
2411
2412 unsigned int inputShape[] = { 2, 2, 3, 3 };
2413 unsigned int outputShape[] = { 2, 2, 9, 1 };
2414
2415 inputTensorInfo = armnn::TensorInfo(4, inputShape, ArmnnType);
2416 inputTensorInfo.SetQuantizationScale(1.0f);
2417 outputTensorInfo = armnn::TensorInfo(4, outputShape, ArmnnType);
2418 outputTensorInfo.SetQuantizationScale(1.0f);
2419
2420 auto input = ConvertToDataType<ArmnnType>(
2421 {
2422 0.0f, 1.0f, 2.0f,
2423 3.0f, 4.0f, 5.0f,
2424 6.0f, 7.0f, 8.0f,
2425
2426 9.0f, 10.0f, 11.0f,
2427 12.0f, 13.0f, 14.0f,
2428 15.0f, 16.0f, 17.0f,
2429
2430 18.0f, 19.0f, 20.0f,
2431 21.0f, 22.0f, 23.0f,
2432 24.0f, 25.0f, 26.0f,
2433
2434 27.0f, 28.0f, 29.0f,
2435 30.0f, 31.0f, 32.0f,
2436 33.0f, 34.0f, 35.0f,
2437 },
2438 inputTensorInfo);
2439
2440 auto outputExpected = ConvertToDataType<ArmnnType>(
2441 {
2442 0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f,
2443
2444 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f, 16.0f, 17.0f,
2445
2446 18.0f, 19.0f, 20.0f, 21.0f, 22.0f, 23.0f, 24.0f, 25.0f, 26.0f,
2447
2448 27.0f, 28.0f, 29.0f, 30.0f, 31.0f, 32.0f, 33.0f, 34.0f, 35.0f,
2449 },
2450 outputTensorInfo);
2451
2452 return SimpleReshapeTestImpl<T>(
2453 workloadFactory, memoryManager, inputTensorInfo, outputTensorInfo, input, outputExpected);
Matteo Martincigh42666a12019-05-29 08:53:41 +01002454}
James Conroy83735b12019-05-30 16:36:59 +01002455
2456template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
2457LayerTestResult<T, 4> SimpleFloorTest(
2458 armnn::IWorkloadFactory& workloadFactory,
2459 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
2460{
James Conroyb40d7102019-06-04 12:32:09 +01002461 armnn::TensorInfo inputTensorInfo({1, 3, 2, 3}, ArmnnType);
2462 inputTensorInfo.SetQuantizationScale(0.1f);
2463
2464 armnn::TensorInfo outputTensorInfo(inputTensorInfo);
2465 outputTensorInfo.SetQuantizationScale(0.1f);
James Conroy83735b12019-05-30 16:36:59 +01002466
2467 auto input = MakeTensor<T, 4>(inputTensorInfo, ConvertToDataType<ArmnnType>(
2468 { -37.5f, -15.2f, -8.76f, -2.0f, -1.5f, -1.3f, -0.5f, -0.4f, 0.0f,
2469 1.0f, 0.4f, 0.5f, 1.3f, 1.5f, 2.0f, 8.76f, 15.2f, 37.5f },
2470 inputTensorInfo));
2471
2472 LayerTestResult<T, 4> ret(outputTensorInfo);
2473 ret.outputExpected = MakeTensor<T, 4>(outputTensorInfo, ConvertToDataType<ArmnnType>(
2474 { -38.0f, -16.0f, -9.0f, -2.0f, -2.0f, -2.0f, -1.0f, -1.0f, 0.0f,
2475 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 2.0f, 8.0f, 15.0f, 37.0f },
2476 outputTensorInfo));
2477
2478 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2479 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2480
2481 armnn::FloorQueueDescriptor data;
2482 armnn::WorkloadInfo info;
2483 AddInputToWorkload(data, info, inputTensorInfo, inputHandle.get());
2484 AddOutputToWorkload(data, info, outputTensorInfo, outputHandle.get());
2485
2486 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateFloor(data, info);
2487
2488 inputHandle->Allocate();
2489 outputHandle->Allocate();
2490
2491 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
2492
2493 workload->Execute();
2494
2495 CopyDataFromITensorHandle(&ret.output[0][0][0][0], outputHandle.get());
2496
2497 return ret;
Matteo Martincighf5507132019-06-04 10:59:47 +01002498}
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002499
2500
2501template<armnn::DataType ArmnnType, typename T>
2502LayerTestResult<T, 4> ResizeBilinearNopTest(
2503 armnn::IWorkloadFactory& workloadFactory,
2504 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
2505 const armnn::DataLayout dataLayout)
2506{
2507 armnn::TensorInfo inputTensorInfo = armnn::IsQuantizedType<T>()
2508 ? armnnUtils::GetTensorInfo(1, 1, 4, 4, dataLayout, ArmnnType)
2509 : armnnUtils::GetTensorInfo(1, 2, 4, 4, dataLayout, ArmnnType);
2510 armnn::TensorInfo outputTensorInfo = armnn::IsQuantizedType<T>()
2511 ? armnnUtils::GetTensorInfo(1, 1, 4, 4, dataLayout, ArmnnType)
2512 : armnnUtils::GetTensorInfo(1, 2, 4, 4, dataLayout, ArmnnType);
2513 if (armnn::IsQuantizedType<T>())
2514 {
2515 inputTensorInfo.SetQuantizationScale(1.5f);
2516 inputTensorInfo.SetQuantizationOffset(-3);
2517 outputTensorInfo.SetQuantizationScale(1.5f);
2518 outputTensorInfo.SetQuantizationOffset(-3);
2519 }
2520
2521 std::vector<float> inputData = armnn::IsQuantizedType<T>()
2522 ? std::initializer_list<float>
2523 {
2524 1, 2, 3, 4,
2525 2, 3, 4, 5,
2526 3, 4, 5, 6,
2527 4, 5, 6, 7
2528 }
2529 : std::initializer_list<float>
2530 {
2531 1.0f, 2.0f, 3.0f, 4.0f,
2532 2.0f, 3.0f, 4.0f, 5.0f,
2533 3.0f, 4.0f, 5.0f, 6.0f,
2534 4.0f, 5.0f, 6.0f, 7.0f,
2535
2536 1.0f, 2.0f, 3.0f, 4.0f,
2537 2.0f, 3.0f, 4.0f, 5.0f,
2538 3.0f, 4.0f, 5.0f, 6.0f,
2539 4.0f, 5.0f, 6.0f, 7.0f
2540 };
2541
2542 const armnn::PermutationVector NCHWToNHWC = { 0, 3, 1, 2 };
2543 if (dataLayout == armnn::DataLayout::NHWC)
2544 {
2545 std::vector<float> tmp(inputData.size());
2546 armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(float));
2547 inputData = tmp;
2548 }
2549
2550 auto input = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(),
2551 inputTensorInfo.GetQuantizationOffset(),
2552 inputData));
2553
2554 LayerTestResult<T, 4> result(outputTensorInfo);
2555 result.outputExpected = input;
2556
2557 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2558 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2559
Aron Virginas-Tar169d2f12019-07-01 19:01:44 +01002560 armnn::ResizeQueueDescriptor descriptor;
2561 descriptor.m_Parameters.m_Method = armnn::ResizeMethod::Bilinear;
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002562 descriptor.m_Parameters.m_DataLayout = dataLayout;
Aron Virginas-Tar169d2f12019-07-01 19:01:44 +01002563
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002564 armnn::WorkloadInfo info;
2565 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
2566 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
2567
Aron Virginas-Tar169d2f12019-07-01 19:01:44 +01002568 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateResize(descriptor, info);
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002569
2570 inputHandle->Allocate();
2571 outputHandle->Allocate();
2572 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
2573
2574 workload->PostAllocationConfigure();
2575 workload->Execute();
2576
2577 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
2578 return result;
2579}
2580
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002581template<armnn::DataType ArmnnType, typename T>
2582LayerTestResult<T, 4> SimpleResizeBilinearTest(
2583 armnn::IWorkloadFactory& workloadFactory,
2584 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
2585 const armnn::DataLayout dataLayout)
2586{
2587 armnn::TensorInfo inputTensorInfo = armnn::IsQuantizedType<T>()
2588 ? armnnUtils::GetTensorInfo(1, 1, 2, 2, dataLayout, ArmnnType)
2589 : armnnUtils::GetTensorInfo(1, 2, 2, 2, dataLayout, ArmnnType);
2590 armnn::TensorInfo outputTensorInfo = armnn::IsQuantizedType<T>()
2591 ? armnnUtils::GetTensorInfo(1, 1, 1, 1, dataLayout, ArmnnType)
2592 : armnnUtils::GetTensorInfo(1, 2, 1, 1, dataLayout, ArmnnType);
2593
2594 if (armnn::IsQuantizedType<T>())
2595 {
2596 inputTensorInfo.SetQuantizationScale(0.1567f);
2597 inputTensorInfo.SetQuantizationOffset(1);
2598 outputTensorInfo.SetQuantizationScale(0.1567f);
2599 outputTensorInfo.SetQuantizationOffset(1);
2600 }
2601
2602 std::vector<float> inputData = armnn::IsQuantizedType<T>()
2603 ? std::initializer_list<float>
2604 {
2605 1, 255,
2606 200, 250
2607 }
2608 : std::initializer_list<float>
2609 {
2610 1.0f, 255.0f,
2611 200.0f, 250.0f,
2612
2613 250.0f, 200.0f,
2614 250.0f, 1.0f
2615 };
2616
2617 // The 'resize bilinear' operation projects the top-left corner of output texels into the input image,
2618 // then figures out the interpolants and weights. Note this is different to projecting the centre of the
2619 // output texel. Thus, for a input matrix of 2x2, we'll expect the output 1x1 matrix to contain, as
2620 // its single element, the value that was at position (0,0) of the input matrix (rather than an average,
2621 // which we would expect if projecting the centre).
2622
2623 std::vector<float> outputData = armnn::IsQuantizedType<T>()
2624 ? std::initializer_list<float>
2625 {
2626 1
2627 }
2628 : std::initializer_list<float>
2629 {
2630 1.0f,
2631
2632 250.0f
2633 };
2634
2635 const armnn::PermutationVector NCHWToNHWC = { 0, 3, 1, 2 };
2636 if (dataLayout == armnn::DataLayout::NHWC)
2637 {
2638 std::vector<float> tmp(inputData.size());
2639 armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(float));
2640 inputData = tmp;
2641
2642 std::vector<float> tmp1(outputData.size());
2643 armnnUtils::Permute(outputTensorInfo.GetShape(), NCHWToNHWC, outputData.data(), tmp1.data(), sizeof(float));
2644 outputData = tmp1;
2645 }
2646
2647 auto input = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(),
2648 inputTensorInfo.GetQuantizationOffset(),
2649 inputData));
2650
2651 LayerTestResult<T, 4> result(outputTensorInfo);
2652 result.outputExpected = MakeTensor<T, 4>(outputTensorInfo,
2653 QuantizedVector<T>(outputTensorInfo.GetQuantizationScale(),
2654 outputTensorInfo.GetQuantizationOffset(),
2655 outputData));
2656
2657 std::unique_ptr <armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2658 std::unique_ptr <armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2659
Aron Virginas-Tar169d2f12019-07-01 19:01:44 +01002660 armnn::ResizeQueueDescriptor descriptor;
2661 descriptor.m_Parameters.m_Method = armnn::ResizeMethod::Bilinear;
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002662 descriptor.m_Parameters.m_DataLayout = dataLayout;
Aron Virginas-Tar169d2f12019-07-01 19:01:44 +01002663
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002664 armnn::WorkloadInfo info;
2665 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
2666 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
2667
Aron Virginas-Tar169d2f12019-07-01 19:01:44 +01002668 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateResize(descriptor, info);
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002669
2670 inputHandle->Allocate();
2671 outputHandle->Allocate();
2672 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
2673
2674 workload->PostAllocationConfigure();
2675 workload->Execute();
2676
2677 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
2678 return result;
2679}
2680
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002681template<armnn::DataType ArmnnType, typename T>
2682LayerTestResult<T, 4> ResizeBilinearSqMinTest(
2683 armnn::IWorkloadFactory& workloadFactory,
2684 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
2685 const armnn::DataLayout dataLayout)
2686{
2687 armnn::TensorInfo inputTensorInfo = armnn::IsQuantizedType<T>()
2688 ? armnnUtils::GetTensorInfo(1, 1, 4, 4, dataLayout, ArmnnType)
2689 : armnnUtils::GetTensorInfo(1, 2, 4, 4, dataLayout, ArmnnType);
2690 armnn::TensorInfo outputTensorInfo = armnn::IsQuantizedType<T>()
2691 ? armnnUtils::GetTensorInfo(1, 1, 2, 2, dataLayout, ArmnnType)
2692 : armnnUtils::GetTensorInfo(1, 2, 2, 2, dataLayout, ArmnnType);
2693
2694 if (armnn::IsQuantizedType<T>())
2695 {
2696 inputTensorInfo.SetQuantizationScale(3.141592f);
2697 inputTensorInfo.SetQuantizationOffset(3);
2698 outputTensorInfo.SetQuantizationScale(3.141592f);
2699 outputTensorInfo.SetQuantizationOffset(3);
2700 }
2701
2702 std::vector<float> inputData = armnn::IsQuantizedType<T>()
2703 ? std::initializer_list<float>
2704 {
2705 1, 2, 3, 4,
2706 2, 3, 4, 5,
2707 3, 4, 5, 6,
2708 4, 5, 6, 7
2709 }
2710 : std::initializer_list<float>
2711 {
2712 1.0f, 2.0f, 3.0f, 4.0f,
2713 2.0f, 3.0f, 4.0f, 5.0f,
2714 3.0f, 4.0f, 5.0f, 6.0f,
2715 4.0f, 5.0f, 6.0f, 7.0f,
2716
2717 7.0f, 6.0f, 5.0f, 4.0f,
2718 6.0f, 5.0f, 4.0f, 3.0f,
2719 5.0f, 4.0f, 3.0f, 2.0f,
2720 4.0f, 3.0f, 2.0f, 1.0f
2721 };
2722
2723 std::vector<float> outputData = armnn::IsQuantizedType<T>()
2724 ? std::initializer_list<float>
2725 {
2726 1, 3,
2727 3, 5
2728 }
2729 : std::initializer_list<float>
2730 {
2731 1.0f, 3.0f,
2732 3.0f, 5.0f,
2733
2734 7.0f, 5.0f,
2735 5.0f, 3.0f
2736 };
2737
2738 const armnn::PermutationVector NCHWToNHWC = { 0, 3, 1, 2 };
2739 if (dataLayout == armnn::DataLayout::NHWC)
2740 {
2741 std::vector<float> tmp(inputData.size());
2742 armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(float));
2743 inputData = tmp;
2744
2745 std::vector<float> tmp1(outputData.size());
2746 armnnUtils::Permute(outputTensorInfo.GetShape(), NCHWToNHWC, outputData.data(), tmp1.data(), sizeof(float));
2747 outputData = tmp1;
2748 }
2749
2750 auto input = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(),
2751 inputTensorInfo.GetQuantizationOffset(),
2752 inputData));
2753
2754 LayerTestResult<T, 4> result(outputTensorInfo);
2755 result.outputExpected = MakeTensor<T, 4>(outputTensorInfo,
2756 QuantizedVector<T>(outputTensorInfo.GetQuantizationScale(),
2757 outputTensorInfo.GetQuantizationOffset(),
2758 outputData));
2759
2760 std::unique_ptr <armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2761 std::unique_ptr <armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2762
Aron Virginas-Tar169d2f12019-07-01 19:01:44 +01002763 armnn::ResizeQueueDescriptor descriptor;
2764 descriptor.m_Parameters.m_Method = armnn::ResizeMethod::Bilinear;
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002765 descriptor.m_Parameters.m_DataLayout = dataLayout;
Aron Virginas-Tar169d2f12019-07-01 19:01:44 +01002766
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002767 armnn::WorkloadInfo info;
2768 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
2769 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
2770
Aron Virginas-Tar169d2f12019-07-01 19:01:44 +01002771 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateResize(descriptor, info);
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002772
2773 inputHandle->Allocate();
2774 outputHandle->Allocate();
2775 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
2776
2777 workload->PostAllocationConfigure();
2778 workload->Execute();
2779
2780 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
2781 return result;
2782}
2783
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002784template<armnn::DataType ArmnnType, typename T>
2785LayerTestResult<T, 4> ResizeBilinearMinTest(
2786 armnn::IWorkloadFactory& workloadFactory,
2787 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
2788 const armnn::DataLayout dataLayout)
2789{
2790 armnn::TensorInfo inputTensorInfo = armnn::IsQuantizedType<T>()
2791 ? armnnUtils::GetTensorInfo(1, 1, 2, 3, dataLayout, ArmnnType)
2792 : armnnUtils::GetTensorInfo(1, 2, 3, 5, dataLayout, ArmnnType);
2793 armnn::TensorInfo outputTensorInfo = armnn::IsQuantizedType<T>()
2794 ? armnnUtils::GetTensorInfo(1, 1, 1, 2, dataLayout, ArmnnType)
2795 : armnnUtils::GetTensorInfo(1, 2, 2, 3, dataLayout, ArmnnType);
2796
2797 if (armnn::IsQuantizedType<T>())
2798 {
2799 inputTensorInfo.SetQuantizationScale(1.5f);
2800 inputTensorInfo.SetQuantizationOffset(-1);
2801 outputTensorInfo.SetQuantizationScale(1.5f);
2802 outputTensorInfo.SetQuantizationOffset(-1);
2803 }
2804
2805 std::vector<float> inputData = armnn::IsQuantizedType<T>()
2806 ? std::initializer_list<float>
2807 {
2808 3.0f, 4.5f, 6.0f, // 1, 2, 3, : Expected quantised values
2809 9.0f, 13.5f, 21.0f // 5, 8, 13
2810 }
2811 : std::initializer_list<float>
2812 {
2813 1.0f, 2.0f, 3.0f, 5.0f, 8.0f,
2814 13.0f, 21.0f, 34.0f, 55.0f, 89.0f,
2815 144.0f, 233.0f, 377.0f, 610.0f, 987.0f,
2816
2817 987.0f, 610.0f, 377.0f, 233.0f, 144.0f,
2818 89.0f, 55.0f, 34.0f, 21.0f, 13.0f,
2819 8.0f, 5.0f, 3.0f, 2.0f, 1.0f
2820 };
2821
2822 std::vector<float> outputData = armnn::IsQuantizedType<T>()
2823 ? std::initializer_list<float>
2824 {
2825 3.0f, 5.25f // 1, 3
2826 }
2827 : std::initializer_list<float>
2828 {
2829 1.0f, 2.6666f, 6.00f,
2830 78.5f, 179.3333f, 401.00f,
2831
2832 987.0f, 454.6670f, 203.33f,
2833 48.5f, 22.3333f, 10.00f
2834 };
2835
2836 const armnn::PermutationVector NCHWToNHWC = { 0, 3, 1, 2 };
2837 if (dataLayout == armnn::DataLayout::NHWC)
2838 {
2839 std::vector<float> tmp(inputData.size());
2840 armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(float));
2841 inputData = tmp;
2842
2843 std::vector<float> tmp1(outputData.size());
2844 armnnUtils::Permute(outputTensorInfo.GetShape(), NCHWToNHWC, outputData.data(), tmp1.data(), sizeof(float));
2845 outputData = tmp1;
2846 }
2847
2848 auto input = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(),
2849 inputTensorInfo.GetQuantizationOffset(),
2850 inputData));
2851
2852 LayerTestResult<T, 4> result(outputTensorInfo);
2853 result.outputExpected = MakeTensor<T, 4>(outputTensorInfo,
2854 QuantizedVector<T>(outputTensorInfo.GetQuantizationScale(),
2855 outputTensorInfo.GetQuantizationOffset(),
2856 outputData));
2857
2858 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2859 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2860
Aron Virginas-Tar169d2f12019-07-01 19:01:44 +01002861 armnn::ResizeQueueDescriptor descriptor;
2862 descriptor.m_Parameters.m_Method = armnn::ResizeMethod::Bilinear;
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002863 descriptor.m_Parameters.m_DataLayout = dataLayout;
Aron Virginas-Tar169d2f12019-07-01 19:01:44 +01002864
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002865 armnn::WorkloadInfo info;
2866 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
2867 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
2868
Aron Virginas-Tar169d2f12019-07-01 19:01:44 +01002869 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateResize(descriptor, info);
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002870
2871 inputHandle->Allocate();
2872 outputHandle->Allocate();
2873 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
2874
2875 workload->PostAllocationConfigure();
2876 workload->Execute();
2877
2878 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
2879 return result;
2880}
2881
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002882template<armnn::DataType ArmnnType, typename T>
2883LayerTestResult<T, 4> ResizeBilinearMagTest(
2884 armnn::IWorkloadFactory& workloadFactory,
2885 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
2886 const armnn::DataLayout dataLayout)
2887{
2888 armnn::TensorInfo inputTensorInfo = armnn::IsQuantizedType<T>()
2889 ? armnnUtils::GetTensorInfo(1, 1, 3, 2, dataLayout, ArmnnType)
2890 : armnnUtils::GetTensorInfo(1, 2, 3, 2, dataLayout, ArmnnType);
2891 armnn::TensorInfo outputTensorInfo = armnn::IsQuantizedType<T>()
2892 ? armnnUtils::GetTensorInfo(1, 1, 3, 5, dataLayout, ArmnnType)
2893 : armnnUtils::GetTensorInfo(1, 2, 3, 5, dataLayout, ArmnnType);
2894
2895 if (armnn::IsQuantizedType<T>())
2896 {
2897 inputTensorInfo.SetQuantizationScale(0.010765f);
2898 inputTensorInfo.SetQuantizationOffset(7);
2899 outputTensorInfo.SetQuantizationScale(0.010132f);
2900 outputTensorInfo.SetQuantizationOffset(-18);
2901 }
2902
2903 std::vector<float> inputData = armnn::IsQuantizedType<T>()
2904 ? std::initializer_list<float>
2905 {
2906 0.183005f, 2.379065f, // 24, 228, : Expected quantised values
2907 1.05497f, 1.302565f, // 105, 128,
2908 2.400595f, 0.68896f // 230, 71
2909 }
2910 : std::initializer_list<float>
2911 {
2912 1.0f, 2.0f,
2913 13.0f, 21.0f,
2914 144.0f, 233.0f,
2915
2916 233.0f, 144.0f,
2917 21.0f, 13.0f,
2918 2.0f, 1.0f
2919 };
2920 std::vector<float> outputData = armnn::IsQuantizedType<T>()
2921 ? std::initializer_list<float>
2922 {
2923 0.18300501f, 1.06142902f, 1.93985295f, 2.37906504f, 2.37906504f,
2924 1.05497003f, 1.15400803f, 1.25304604f, 1.30256498f, 1.30256498f,
2925 2.40059495f, 1.71594095f, 1.03128707f, 0.68896002f, 0.68896002f
2926 // 0, 87, 173, 217, 217, : Expected quantised values
2927 // 86, 96, 106, 111, 111,
2928 // 219, 151, 84, 50, 50
2929 }
2930 : std::initializer_list<float>
2931 {
2932 1.0f, 1.4f, 1.8f, 2.0f, 2.0f,
2933 13.0f, 16.2f, 19.4f, 21.0f, 21.0f,
2934 144.0f, 179.6f, 215.2f, 233.0f, 233.0f,
2935
2936 233.0f, 197.4f, 161.8f, 144.0f, 144.0f,
2937 21.0f, 17.8f, 14.6f, 13.0f, 13.0f,
2938 2.0f, 1.6f, 1.2f, 1.0f, 1.0f
2939 };
2940
2941 const armnn::PermutationVector NCHWToNHWC = { 0, 3, 1, 2 };
2942 if (dataLayout == armnn::DataLayout::NHWC)
2943 {
2944 std::vector<float> tmp(inputData.size());
2945 armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(float));
2946 inputData = tmp;
2947
2948 std::vector<float> tmp1(outputData.size());
2949 armnnUtils::Permute(outputTensorInfo.GetShape(), NCHWToNHWC, outputData.data(), tmp1.data(), sizeof(float));
2950 outputData = tmp1;
2951 }
2952
2953 auto input = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(),
2954 inputTensorInfo.GetQuantizationOffset(),
2955 inputData));
2956
2957 LayerTestResult<T, 4> result(outputTensorInfo);
2958 result.outputExpected = MakeTensor<T, 4>(outputTensorInfo,
2959 QuantizedVector<T>(outputTensorInfo.GetQuantizationScale(),
2960 outputTensorInfo.GetQuantizationOffset(),
2961 outputData));
2962
2963 std::unique_ptr <armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2964 std::unique_ptr <armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2965
Aron Virginas-Tar169d2f12019-07-01 19:01:44 +01002966 armnn::ResizeQueueDescriptor descriptor;
2967 descriptor.m_Parameters.m_Method = armnn::ResizeMethod::Bilinear;
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002968 descriptor.m_Parameters.m_DataLayout = dataLayout;
Aron Virginas-Tar169d2f12019-07-01 19:01:44 +01002969
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002970 armnn::WorkloadInfo info;
2971 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
2972 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
2973
Aron Virginas-Tar169d2f12019-07-01 19:01:44 +01002974 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateResize(descriptor, info);
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002975
2976 inputHandle->Allocate();
2977 outputHandle->Allocate();
2978 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
2979
2980 workload->PostAllocationConfigure();
2981 workload->Execute();
2982
2983 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
2984 return result;
2985}
2986
Teresa Charlin970f43b2019-07-01 13:51:07 +01002987
2988template<armnn::DataType ArmnnType, typename T>
2989LayerTestResult<T, 4> ResizeNearestNeighborNopTest(
2990 armnn::IWorkloadFactory& workloadFactory,
2991 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
2992 const armnn::DataLayout dataLayout)
2993{
2994 armnn::TensorInfo inputTensorInfo = armnn::IsQuantizedType<T>()
2995 ? armnnUtils::GetTensorInfo(1, 1, 4, 4, dataLayout, ArmnnType)
2996 : armnnUtils::GetTensorInfo(1, 2, 4, 4, dataLayout, ArmnnType);
2997 armnn::TensorInfo outputTensorInfo = armnn::IsQuantizedType<T>()
2998 ? armnnUtils::GetTensorInfo(1, 1, 4, 4, dataLayout, ArmnnType)
2999 : armnnUtils::GetTensorInfo(1, 2, 4, 4, dataLayout, ArmnnType);
3000 if (armnn::IsQuantizedType<T>())
3001 {
3002 inputTensorInfo.SetQuantizationScale(1.5f);
3003 inputTensorInfo.SetQuantizationOffset(-3);
3004 outputTensorInfo.SetQuantizationScale(1.5f);
3005 outputTensorInfo.SetQuantizationOffset(-3);
3006 }
3007
3008 std::vector<float> inputData = armnn::IsQuantizedType<T>()
3009 ? std::initializer_list<float>
3010 {
3011 1, 2, 3, 4,
3012 2, 3, 4, 5,
3013 3, 4, 5, 6,
3014 4, 5, 6, 7
3015 }
3016 : std::initializer_list<float>
3017 {
3018 1.0f, 2.0f, 3.0f, 4.0f,
3019 2.0f, 3.0f, 4.0f, 5.0f,
3020 3.0f, 4.0f, 5.0f, 6.0f,
3021 4.0f, 5.0f, 6.0f, 7.0f,
3022
3023 1.0f, 2.0f, 3.0f, 4.0f,
3024 2.0f, 3.0f, 4.0f, 5.0f,
3025 3.0f, 4.0f, 5.0f, 6.0f,
3026 4.0f, 5.0f, 6.0f, 7.0f
3027 };
3028
3029 const armnn::PermutationVector NCHWToNHWC = { 0, 3, 1, 2 };
3030 if (dataLayout == armnn::DataLayout::NHWC)
3031 {
3032 std::vector<float> tmp(inputData.size());
3033 armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(float));
3034 inputData = tmp;
3035 }
3036
3037 auto input = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(),
3038 inputTensorInfo.GetQuantizationOffset(),
3039 inputData));
3040
3041 LayerTestResult<T, 4> result(outputTensorInfo);
3042 result.outputExpected = input;
3043
3044 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
3045 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
3046
3047 armnn::ResizeQueueDescriptor descriptor;
3048 descriptor.m_Parameters.m_Method = armnn::ResizeMethod::NearestNeighbor;
3049 descriptor.m_Parameters.m_DataLayout = dataLayout;
3050 armnn::WorkloadInfo info;
3051 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
3052 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
3053
3054 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateResize(descriptor, info);
3055
3056 inputHandle->Allocate();
3057 outputHandle->Allocate();
3058 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
3059
3060 workload->PostAllocationConfigure();
3061 workload->Execute();
3062
3063 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
3064 return result;
3065}
3066
3067template<armnn::DataType ArmnnType, typename T>
3068LayerTestResult<T, 4> SimpleResizeNearestNeighborTest(
3069 armnn::IWorkloadFactory& workloadFactory,
3070 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
3071 const armnn::DataLayout dataLayout)
3072{
3073 armnn::TensorInfo inputTensorInfo = armnn::IsQuantizedType<T>()
3074 ? armnnUtils::GetTensorInfo(1, 1, 2, 2, dataLayout, ArmnnType)
3075 : armnnUtils::GetTensorInfo(1, 2, 2, 2, dataLayout, ArmnnType);
3076 armnn::TensorInfo outputTensorInfo = armnn::IsQuantizedType<T>()
3077 ? armnnUtils::GetTensorInfo(1, 1, 1, 1, dataLayout, ArmnnType)
3078 : armnnUtils::GetTensorInfo(1, 2, 1, 1, dataLayout, ArmnnType);
3079
3080 if (armnn::IsQuantizedType<T>())
3081 {
3082 inputTensorInfo.SetQuantizationScale(0.1567f);
3083 inputTensorInfo.SetQuantizationOffset(1);
3084 outputTensorInfo.SetQuantizationScale(0.1567f);
3085 outputTensorInfo.SetQuantizationOffset(1);
3086 }
3087
3088 std::vector<float> inputData = armnn::IsQuantizedType<T>()
3089 ? std::initializer_list<float>
3090 {
3091 1, 255,
3092 200, 250
3093 }
3094 : std::initializer_list<float>
3095 {
3096 1.0f, 255.0f,
3097 200.0f, 250.0f,
3098
3099 250.0f, 200.0f,
3100 250.0f, 1.0f
3101 };
3102
3103 // The 'resize' operation projects the top-left corner of output texels into the input image,
3104 // then figures out the interpolants and weights. Note this is different to projecting the centre of the
3105 // output texel. Thus, for a input matrix of 2x2, we'll expect the output 1x1 matrix to contain, as
3106 // its single element, the value that was at position (0,0) of the input matrix (rather than an average,
3107 // which we would expect if projecting the centre).
3108
3109 std::vector<float> outputData = armnn::IsQuantizedType<T>()
3110 ? std::initializer_list<float>
3111 {
3112 1
3113 }
3114 : std::initializer_list<float>
3115 {
3116 1.0f,
3117
3118 250.0f
3119 };
3120
3121 const armnn::PermutationVector NCHWToNHWC = { 0, 3, 1, 2 };
3122 if (dataLayout == armnn::DataLayout::NHWC)
3123 {
3124 std::vector<float> tmp(inputData.size());
3125 armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(float));
3126 inputData = tmp;
3127
3128 std::vector<float> tmp1(outputData.size());
3129 armnnUtils::Permute(outputTensorInfo.GetShape(), NCHWToNHWC, outputData.data(), tmp1.data(), sizeof(float));
3130 outputData = tmp1;
3131 }
3132
3133 auto input = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(),
3134 inputTensorInfo.GetQuantizationOffset(),
3135 inputData));
3136
3137 LayerTestResult<T, 4> result(outputTensorInfo);
3138 result.outputExpected = MakeTensor<T, 4>(outputTensorInfo,
3139 QuantizedVector<T>(outputTensorInfo.GetQuantizationScale(),
3140 outputTensorInfo.GetQuantizationOffset(),
3141 outputData));
3142
3143 std::unique_ptr <armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
3144 std::unique_ptr <armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
3145
3146 armnn::ResizeQueueDescriptor descriptor;
3147 descriptor.m_Parameters.m_DataLayout = dataLayout;
3148 descriptor.m_Parameters.m_Method = armnn::ResizeMethod::NearestNeighbor;
3149 armnn::WorkloadInfo info;
3150 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
3151 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
3152
3153 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateResize(descriptor, info);
3154
3155 inputHandle->Allocate();
3156 outputHandle->Allocate();
3157 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
3158
3159 workload->PostAllocationConfigure();
3160 workload->Execute();
3161
3162 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
3163 return result;
3164}
3165
3166template<armnn::DataType ArmnnType, typename T>
3167LayerTestResult<T, 4> ResizeNearestNeighborSqMinTest(
3168 armnn::IWorkloadFactory& workloadFactory,
3169 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
3170 const armnn::DataLayout dataLayout)
3171{
3172 armnn::TensorInfo inputTensorInfo = armnn::IsQuantizedType<T>()
3173 ? armnnUtils::GetTensorInfo(1, 1, 4, 4, dataLayout, ArmnnType)
3174 : armnnUtils::GetTensorInfo(1, 2, 4, 4, dataLayout, ArmnnType);
3175 armnn::TensorInfo outputTensorInfo = armnn::IsQuantizedType<T>()
3176 ? armnnUtils::GetTensorInfo(1, 1, 2, 2, dataLayout, ArmnnType)
3177 : armnnUtils::GetTensorInfo(1, 2, 2, 2, dataLayout, ArmnnType);
3178
3179 if (armnn::IsQuantizedType<T>())
3180 {
3181 inputTensorInfo.SetQuantizationScale(3.141592f);
3182 inputTensorInfo.SetQuantizationOffset(3);
3183 outputTensorInfo.SetQuantizationScale(3.141592f);
3184 outputTensorInfo.SetQuantizationOffset(3);
3185 }
3186
3187 std::vector<float> inputData = armnn::IsQuantizedType<T>()
3188 ? std::initializer_list<float>
3189 {
3190 1, 2, 3, 4,
3191 2, 3, 4, 5,
3192 3, 4, 5, 6,
3193 4, 5, 6, 7
3194 }
3195 : std::initializer_list<float>
3196 {
3197 1.0f, 2.0f, 3.0f, 4.0f,
3198 2.0f, 3.0f, 4.0f, 5.0f,
3199 3.0f, 4.0f, 5.0f, 6.0f,
3200 4.0f, 5.0f, 6.0f, 7.0f,
3201
3202 7.0f, 6.0f, 5.0f, 4.0f,
3203 6.0f, 5.0f, 4.0f, 3.0f,
3204 5.0f, 4.0f, 3.0f, 2.0f,
3205 4.0f, 3.0f, 2.0f, 1.0f
3206 };
3207
3208 std::vector<float> outputData = armnn::IsQuantizedType<T>()
3209 ? std::initializer_list<float>
3210 {
3211 1, 3,
3212 3, 5
3213 }
3214 : std::initializer_list<float>
3215 {
3216 1.0f, 3.0f,
3217 3.0f, 5.0f,
3218
3219 7.0f, 5.0f,
3220 5.0f, 3.0f
3221 };
3222
3223 const armnn::PermutationVector NCHWToNHWC = { 0, 3, 1, 2 };
3224 if (dataLayout == armnn::DataLayout::NHWC)
3225 {
3226 std::vector<float> tmp(inputData.size());
3227 armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(float));
3228 inputData = tmp;
3229
3230 std::vector<float> tmp1(outputData.size());
3231 armnnUtils::Permute(outputTensorInfo.GetShape(), NCHWToNHWC, outputData.data(), tmp1.data(), sizeof(float));
3232 outputData = tmp1;
3233 }
3234
3235 auto input = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(),
3236 inputTensorInfo.GetQuantizationOffset(),
3237 inputData));
3238
3239 LayerTestResult<T, 4> result(outputTensorInfo);
3240 result.outputExpected = MakeTensor<T, 4>(outputTensorInfo,
3241 QuantizedVector<T>(outputTensorInfo.GetQuantizationScale(),
3242 outputTensorInfo.GetQuantizationOffset(),
3243 outputData));
3244
3245 std::unique_ptr <armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
3246 std::unique_ptr <armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
3247
3248 armnn::ResizeQueueDescriptor descriptor;
3249 descriptor.m_Parameters.m_DataLayout = dataLayout;
3250 descriptor.m_Parameters.m_Method = armnn::ResizeMethod::NearestNeighbor;
3251 armnn::WorkloadInfo info;
3252 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
3253 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
3254
3255 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateResize(descriptor, info);
3256
3257 inputHandle->Allocate();
3258 outputHandle->Allocate();
3259 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
3260
3261 workload->PostAllocationConfigure();
3262 workload->Execute();
3263
3264 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
3265 return result;
3266}
3267
3268template<armnn::DataType ArmnnType, typename T>
3269LayerTestResult<T, 4> ResizeNearestNeighborMinTest(
3270 armnn::IWorkloadFactory& workloadFactory,
3271 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
3272 const armnn::DataLayout dataLayout)
3273{
3274 armnn::TensorInfo inputTensorInfo = armnn::IsQuantizedType<T>()
3275 ? armnnUtils::GetTensorInfo(1, 1, 2, 3, dataLayout, ArmnnType)
3276 : armnnUtils::GetTensorInfo(1, 2, 3, 5, dataLayout, ArmnnType);
3277 armnn::TensorInfo outputTensorInfo = armnn::IsQuantizedType<T>()
3278 ? armnnUtils::GetTensorInfo(1, 1, 1, 2, dataLayout, ArmnnType)
3279 : armnnUtils::GetTensorInfo(1, 2, 2, 3, dataLayout, ArmnnType);
3280
3281 if (armnn::IsQuantizedType<T>())
3282 {
3283 inputTensorInfo.SetQuantizationScale(1.5f);
3284 inputTensorInfo.SetQuantizationOffset(-1);
3285 outputTensorInfo.SetQuantizationScale(1.5f);
3286 outputTensorInfo.SetQuantizationOffset(-1);
3287 }
3288
3289 std::vector<float> inputData = armnn::IsQuantizedType<T>()
3290 ? std::initializer_list<float>
3291 {
3292 3.0f, 4.5f, 6.0f, // 1, 2, 3, : Expected quantised values
3293 9.0f, 13.5f, 21.0f // 5, 8, 13
3294 }
3295 : std::initializer_list<float>
3296 {
3297 1.0f, 2.0f, 3.0f, 5.0f, 8.0f,
3298 13.0f, 21.0f, 34.0f, 55.0f, 89.0f,
3299 144.0f, 233.0f, 377.0f, 610.0f, 987.0f,
3300
3301 987.0f, 610.0f, 377.0f, 233.0f, 144.0f,
3302 89.0f, 55.0f, 34.0f, 21.0f, 13.0f,
3303 8.0f, 5.0f, 3.0f, 2.0f, 1.0f
3304 };
3305
3306 std::vector<float> outputData = armnn::IsQuantizedType<T>()
3307 ? std::initializer_list<float>
3308 {
3309 3.0f, 4.5f // 1, 3
3310 }
3311 : std::initializer_list<float>
3312 {
3313 1.f, 2.f, 5.f,
3314 13.f, 21.f, 55.f,
3315
3316 987.f, 610.f, 233.f,
3317 89.f, 55.f, 21.f
3318 };
3319
3320 const armnn::PermutationVector NCHWToNHWC = { 0, 3, 1, 2 };
3321 if (dataLayout == armnn::DataLayout::NHWC)
3322 {
3323 std::vector<float> tmp(inputData.size());
3324 armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(float));
3325 inputData = tmp;
3326
3327 std::vector<float> tmp1(outputData.size());
3328 armnnUtils::Permute(outputTensorInfo.GetShape(), NCHWToNHWC, outputData.data(), tmp1.data(), sizeof(float));
3329 outputData = tmp1;
3330 }
3331
3332 auto input = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(),
3333 inputTensorInfo.GetQuantizationOffset(),
3334 inputData));
3335
3336 LayerTestResult<T, 4> result(outputTensorInfo);
3337 result.outputExpected = MakeTensor<T, 4>(outputTensorInfo,
3338 QuantizedVector<T>(outputTensorInfo.GetQuantizationScale(),
3339 outputTensorInfo.GetQuantizationOffset(),
3340 outputData));
3341
3342 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
3343 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
3344
3345 armnn::ResizeQueueDescriptor descriptor;
3346 descriptor.m_Parameters.m_DataLayout = dataLayout;
3347 descriptor.m_Parameters.m_Method = armnn::ResizeMethod::NearestNeighbor;
3348 armnn::WorkloadInfo info;
3349 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
3350 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
3351
3352 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateResize(descriptor, info);
3353
3354 inputHandle->Allocate();
3355 outputHandle->Allocate();
3356 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
3357
3358 workload->PostAllocationConfigure();
3359 workload->Execute();
3360
3361 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
3362 return result;
3363}
3364
3365template<armnn::DataType ArmnnType, typename T>
3366LayerTestResult<T, 4> ResizeNearestNeighborMagTest(
3367 armnn::IWorkloadFactory& workloadFactory,
3368 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
3369 const armnn::DataLayout dataLayout)
3370{
3371 armnn::TensorInfo inputTensorInfo = armnn::IsQuantizedType<T>()
3372 ? armnnUtils::GetTensorInfo(1, 1, 3, 2, dataLayout, ArmnnType)
3373 : armnnUtils::GetTensorInfo(1, 2, 3, 2, dataLayout, ArmnnType);
3374 armnn::TensorInfo outputTensorInfo = armnn::IsQuantizedType<T>()
3375 ? armnnUtils::GetTensorInfo(1, 1, 3, 5, dataLayout, ArmnnType)
3376 : armnnUtils::GetTensorInfo(1, 2, 3, 5, dataLayout, ArmnnType);
3377
3378 if (armnn::IsQuantizedType<T>())
3379 {
3380 inputTensorInfo.SetQuantizationScale(0.010765f);
3381 inputTensorInfo.SetQuantizationOffset(7);
3382 outputTensorInfo.SetQuantizationScale(0.010132f);
3383 outputTensorInfo.SetQuantizationOffset(-18);
3384 }
3385
3386 std::vector<float> inputData = armnn::IsQuantizedType<T>()
3387 ? std::initializer_list<float>
3388 {
3389 0.183005f, 2.379065f, // 24, 228, : Expected quantised values
3390 1.05497f, 1.302565f, // 105, 128,
3391 2.400595f, 0.68896f // 230, 71
3392 }
3393 : std::initializer_list<float>
3394 {
3395 1.0f, 2.0f,
3396 13.0f, 21.0f,
3397 144.0f, 233.0f,
3398
3399 233.0f, 144.0f,
3400 21.0f, 13.0f,
3401 2.0f, 1.0f
3402 };
3403 std::vector<float> outputData = armnn::IsQuantizedType<T>()
3404 ? std::initializer_list<float>
3405 {
3406 0.183005f, 0.183005f, 0.183005f, 2.379065f, 2.379065f,
3407 1.05497f, 1.05497f, 1.05497f, 1.302565f, 1.302565f,
3408 2.400595f, 2.400595f, 2.400595f, 0.68896f, 0.68896f
3409 }
3410 : std::initializer_list<float>
3411 {
3412 1.f, 1.f, 1.f, 2.f, 2.f,
3413 13.f, 13.f, 13.f, 21.f, 21.f,
3414 144.f, 144.f, 144.f, 233.f, 233.f,
3415
3416 233.f, 233.f, 233.f, 144.f, 144.f,
3417 21.f, 21.f, 21.f, 13.f, 13.f,
3418 2.f, 2.f, 2.f, 1.f, 1.f
3419 };
3420
3421 const armnn::PermutationVector NCHWToNHWC = { 0, 3, 1, 2 };
3422 if (dataLayout == armnn::DataLayout::NHWC)
3423 {
3424 std::vector<float> tmp(inputData.size());
3425 armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(float));
3426 inputData = tmp;
3427
3428 std::vector<float> tmp1(outputData.size());
3429 armnnUtils::Permute(outputTensorInfo.GetShape(), NCHWToNHWC, outputData.data(), tmp1.data(), sizeof(float));
3430 outputData = tmp1;
3431 }
3432
3433 auto input = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(),
3434 inputTensorInfo.GetQuantizationOffset(),
3435 inputData));
3436
3437 LayerTestResult<T, 4> result(outputTensorInfo);
3438 result.outputExpected = MakeTensor<T, 4>(outputTensorInfo,
3439 QuantizedVector<T>(outputTensorInfo.GetQuantizationScale(),
3440 outputTensorInfo.GetQuantizationOffset(),
3441 outputData));
3442
3443 std::unique_ptr <armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
3444 std::unique_ptr <armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
3445
3446 armnn::ResizeQueueDescriptor descriptor;
3447 descriptor.m_Parameters.m_DataLayout = dataLayout;
3448 descriptor.m_Parameters.m_Method = armnn::ResizeMethod::NearestNeighbor;
3449 armnn::WorkloadInfo info;
3450 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
3451 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
3452
3453 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateResize(descriptor, info);
3454
3455 inputHandle->Allocate();
3456 outputHandle->Allocate();
3457 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
3458
3459 workload->PostAllocationConfigure();
3460 workload->Execute();
3461
3462 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
3463 return result;
3464}
3465
3466
James Conroy4d1ff582019-06-10 17:06:39 +01003467template<armnn::DataType ArmnnType, typename T, std::size_t InputDim, std::size_t OutputDim>
3468LayerTestResult<T, OutputDim> MeanTestHelper(
3469 armnn::IWorkloadFactory& workloadFactory,
3470 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
3471 const unsigned int* inputShape,
3472 const std::vector<float>& inputData,
3473 const std::vector<unsigned int>& axis,
3474 bool keepDims,
3475 const unsigned int* outputShape,
3476 const std::vector<float>& outputData,
3477 float scale = 1.0f,
3478 int32_t offset = 0)
3479{
3480 armnn::TensorInfo inputTensorInfo(InputDim, inputShape, ArmnnType);
3481 armnn::TensorInfo outputTensorInfo(OutputDim, outputShape, ArmnnType);
3482
3483 inputTensorInfo.SetQuantizationScale(scale);
3484 inputTensorInfo.SetQuantizationOffset(offset);
3485
3486 outputTensorInfo.SetQuantizationScale(scale);
3487 outputTensorInfo.SetQuantizationOffset(offset);
3488
3489 auto input = MakeTensor<T, InputDim>(inputTensorInfo, ConvertToDataType<ArmnnType>(inputData, inputTensorInfo));
3490
3491 LayerTestResult<T, OutputDim> result(outputTensorInfo);
3492 result.outputExpected = MakeTensor<T, OutputDim>(
3493 outputTensorInfo, ConvertToDataType<ArmnnType>(outputData, outputTensorInfo));
3494
3495 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
3496 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
3497
3498 armnn::MeanQueueDescriptor data;
3499 data.m_Parameters.m_Axis = axis;
3500 data.m_Parameters.m_KeepDims = keepDims;
3501 armnn::WorkloadInfo info;
3502 AddInputToWorkload(data, info, inputTensorInfo, inputHandle.get());
3503 AddOutputToWorkload(data, info, outputTensorInfo, outputHandle.get());
3504
3505 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateMean(data, info);
3506
3507 inputHandle->Allocate();
3508 outputHandle->Allocate();
3509
3510 CopyDataToITensorHandle(inputHandle.get(), input.origin());
3511
3512 workload->PostAllocationConfigure();
3513 workload->Execute();
3514
3515 CopyDataFromITensorHandle(result.output.origin(), outputHandle.get());
3516
3517 return result;
3518}
3519
3520template<armnn::DataType ArmnnType, typename T>
3521LayerTestResult<T, 1> MeanSimpleTest(
3522 armnn::IWorkloadFactory& workloadFactory,
3523 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3524{
3525 const unsigned int inputShape[] = { 3, 2 };
3526 const unsigned int outputShape[] = { 1 };
3527
3528 std::vector<float> input({ 1.5f, 1.5f, 2.5f, 2.5f, 3.5f, 3.5f });
3529 std::vector<float> output({ 2.5f });
3530
3531 return MeanTestHelper<ArmnnType, T, 2, 1>(
3532 workloadFactory, memoryManager, inputShape, input, {}, false, outputShape, output);
3533}
3534
3535template<armnn::DataType ArmnnType, typename T>
3536LayerTestResult<T, 3> MeanSimpleAxisTest(
3537 armnn::IWorkloadFactory& workloadFactory,
3538 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3539{
3540 const unsigned int inputShape[] = { 2, 3, 1, 2 };
3541 const unsigned int outputShape[] = { 3, 1, 2 };
3542
3543 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 });
3544 std::vector<float> output({ 1.5f, 2.5f, 3.5f, 4.5f, 5.5f, 6.5f });
3545
3546 return MeanTestHelper<ArmnnType, T, 4, 3>(
3547 workloadFactory, memoryManager, inputShape, input, { 0 }, false, outputShape, output);
3548}
3549
3550template<armnn::DataType ArmnnType, typename T>
3551LayerTestResult<T, 4> MeanKeepDimsTest(
3552 armnn::IWorkloadFactory& workloadFactory,
3553 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3554{
3555 const unsigned int inputShape[] = { 1, 1, 3, 2 };
3556 const unsigned int outputShape[] = { 1, 1, 1, 2 };
3557
3558 std::vector<float> input({ 1.5f, 1.5f, 2.5f, 2.5f, 3.5f, 3.5f });
3559 std::vector<float> output({ 2.5f, 2.5f });
3560
3561 return MeanTestHelper<ArmnnType, T, 4, 4>(
3562 workloadFactory, memoryManager, inputShape, input, { 2 }, true, outputShape, output);
3563}
3564
3565template<armnn::DataType ArmnnType, typename T>
3566LayerTestResult<T, 4> MeanMultipleDimsTest(
3567 armnn::IWorkloadFactory& workloadFactory,
3568 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3569{
3570 const unsigned int inputShape[] = { 2, 3, 1, 2 };
3571 const unsigned int outputShape[] = { 1, 3, 1, 1 };
3572
3573 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 });
3574 std::vector<float> output({ 2.0f, 4.0f, 6.0f });
3575
3576 return MeanTestHelper<ArmnnType, T, 4, 4>(
3577 workloadFactory, memoryManager, inputShape, input, { 0, 3 }, true, outputShape, output);
3578}
3579
3580template<armnn::DataType ArmnnType, typename T>
3581LayerTestResult<T, 1> MeanVts1Test(
3582 armnn::IWorkloadFactory& workloadFactory,
3583 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3584{
3585 const unsigned int inputShape[] = { 4, 3, 2 };
3586 const unsigned int outputShape[] = { 2 };
3587
3588 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,
3589 15.0f, 16.0f, 17.0f, 18.0f, 19.0f, 20.0f, 21.0f, 22.0f, 23.0f, 24.0f });
3590 std::vector<float> output({ 12.0f, 13.0f });
3591
3592 return MeanTestHelper<ArmnnType, T, 3, 1>(
3593 workloadFactory, memoryManager, inputShape, input, { 0, 1 }, false, outputShape, output);
3594}
3595
3596template<armnn::DataType ArmnnType, typename T>
3597LayerTestResult<T, 3> MeanVts2Test(
3598 armnn::IWorkloadFactory& workloadFactory,
3599 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3600{
3601 const unsigned int inputShape[] = { 4, 3, 2 };
3602 const unsigned int outputShape[] = { 1, 3, 1 };
3603
3604 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,
3605 15.0f, 16.0f, 17.0f, 18.0f, 19.0f, 20.0f, 21.0f, 22.0f, 23.0f, 24.0f });
3606 std::vector<float> output({ 10.5f, 12.5f, 14.5f });
3607
3608 return MeanTestHelper<ArmnnType, T, 3, 3>(
3609 workloadFactory, memoryManager, inputShape, input, { 0, 2 }, true, outputShape, output);
3610}
3611
3612template<armnn::DataType ArmnnType, typename T>
3613LayerTestResult<T, 3> MeanVts3Test(
3614 armnn::IWorkloadFactory& workloadFactory,
3615 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3616{
3617 const unsigned int inputShape[] = { 1, 2, 2, 1 };
3618 const unsigned int outputShape[] = { 1, 2, 1 };
3619
3620 std::vector<float> input({ 1.0f, 2.0f, 3.0f, 4.0f });
3621 std::vector<float> output({ 1.5f, 3.5f });
3622
3623 return MeanTestHelper<ArmnnType, T, 4, 3>(
3624 workloadFactory, memoryManager, inputShape, input, { 2 }, false, outputShape, output);
3625}
Narumol Prangnawarat71c80b12019-06-17 17:45:43 +01003626
3627template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
3628LayerTestResult<T, 3> ConcatDifferentInputOutputQParamTest(
3629 armnn::IWorkloadFactory& workloadFactory,
3630 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
3631 bool useSubtensor)
3632{
3633 // Defines the tensor descriptors.
3634 armnn::TensorInfo outputTensorInfo({ 3, 6, 3 }, ArmnnType);
3635 armnn::TensorInfo inputTensorInfo1({ 3, 6, 2 }, ArmnnType);
3636 armnn::TensorInfo inputTensorInfo2({ 3, 6, 1 }, ArmnnType);
3637
3638 std::vector<armnn::TensorShape> inputTensorShapes({inputTensorInfo1.GetShape(), inputTensorInfo2.GetShape()});
3639
3640 // Quantized input1 tensor.
3641 const float inputScale1 = 0.5f;
3642 const int32_t inputOffset1 = 5;
3643
3644 auto input1 = MakeTensor<T, 3>(inputTensorInfo1, std::vector<T>(
3645 {
3646 1, 2, 3,
3647 4, 5, 6,
3648 7, 8, 9,
3649 10, 11, 12,
3650 13, 14, 15,
3651 16, 17, 18,
3652
3653 19, 20, 21,
3654 22, 23, 24,
3655 25, 26, 27,
3656 28, 29, 30,
3657 31, 32, 33,
3658 34, 35, 36
3659 }));
3660
3661 // Quatized input2 tensor.
3662 const float inputScale2 = 0.2f;
3663 const int32_t inputOffset2 = 10;
3664
3665 auto input2 = MakeTensor<T, 3>(inputTensorInfo2, std::vector<T>(
3666 {
3667 37, 38, 39,
3668 40, 41, 42,
3669 43, 44, 45,
3670 46, 47, 48,
3671 49, 50, 51,
3672 52, 53, 54
3673 }));
3674
3675 // Quantized output tensor.
3676 const float outputScale = 0.1f;
3677 const int32_t outputOffset = 20;
3678
3679 LayerTestResult<T, 3> ret(outputTensorInfo);
3680
3681 ret.outputExpected = MakeTensor<T, 3>(outputTensorInfo, std::vector<T>(
3682 {
3683 0, 5, 74,
3684 10, 15, 76,
3685 20, 25, 78,
3686 30, 35, 80,
3687 40, 45, 82,
3688 50, 55, 84,
3689
3690 60, 65, 86,
3691 70, 75, 88,
3692 80, 85, 90,
3693 90, 95, 92,
3694 100, 105, 94,
3695 110, 115, 96,
3696
3697 120, 125, 98,
3698 130, 135, 100,
3699 140, 145, 102,
3700 150, 155, 104,
3701 160, 165, 106,
3702 170, 175, 108
3703 }));
3704
3705 outputTensorInfo.SetQuantizationScale(outputScale);
3706 outputTensorInfo.SetQuantizationOffset(outputOffset);
3707 inputTensorInfo1.SetQuantizationScale(inputScale1);
3708 inputTensorInfo1.SetQuantizationOffset(inputOffset1);
3709 inputTensorInfo2.SetQuantizationScale(inputScale2);
3710 inputTensorInfo2.SetQuantizationOffset(inputOffset2);
3711
3712 std::vector<unsigned int> wOrigin1 = { 0, 0, 0 }; //Extent of the window is defined by size of input[0].
3713 armnn::ConcatQueueDescriptor::ViewOrigin window1(wOrigin1);
3714
3715 std::vector<unsigned int> wOrigin2 = { 0, 0, 2 }; //Extent of the window is defined by size of input[1].
3716 armnn::ConcatQueueDescriptor::ViewOrigin window2(wOrigin2);
3717
3718 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
3719
3720 bool subTensorsSupported = useSubtensor && workloadFactory.SupportsSubTensors();
3721
3722 std::unique_ptr<armnn::ITensorHandle> inputHandle1 =
3723 subTensorsSupported ?
3724 workloadFactory.CreateSubTensorHandle(*outputHandle, inputTensorInfo1.GetShape(), wOrigin1.data()) :
3725 workloadFactory.CreateTensorHandle(inputTensorInfo1);
3726
3727 std::unique_ptr<armnn::ITensorHandle> inputHandle2 =
3728 subTensorsSupported ?
3729 workloadFactory.CreateSubTensorHandle(*outputHandle, inputTensorInfo2.GetShape(), wOrigin2.data()) :
3730 workloadFactory.CreateTensorHandle(inputTensorInfo2);
3731
3732 armnn::ConcatQueueDescriptor data;
3733 armnn::OriginsDescriptor desc = armnn::CreateDescriptorForConcatenation(
3734 inputTensorShapes.begin(),inputTensorShapes.end(), 2);
3735 data.m_Parameters = desc;
3736
3737 armnn::WorkloadInfo info;
3738 AddInputToWorkload(data, info, inputTensorInfo1, inputHandle1.get());
3739 AddInputToWorkload(data, info, inputTensorInfo2, inputHandle2.get());
3740 AddOutputToWorkload(data, info, outputTensorInfo, outputHandle.get());
3741
3742 data.m_ViewOrigins.push_back(window1);
3743 data.m_ViewOrigins.push_back(window2);
3744
3745 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateConcat(data, info);
3746
3747 inputHandle1->Allocate();
3748 inputHandle2->Allocate();
3749 outputHandle->Allocate();
3750
3751 CopyDataToITensorHandle(inputHandle1.get(), &input1[0][0][0]);
3752 CopyDataToITensorHandle(inputHandle2.get(), &input2[0][0][0]);
3753
3754 workload->PostAllocationConfigure();
3755 workload->Execute();
3756
3757 CopyDataFromITensorHandle(&ret.output[0][0][0], outputHandle.get());
3758
3759 return ret;
3760}
Matteo Martincighab9e5252019-06-13 17:27:46 +01003761
3762template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
3763LayerTestResult<T, 4> PreluTest(
3764 armnn::IWorkloadFactory& workloadFactory,
3765 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3766{
3767 armnn::TensorInfo inputTensorInfo ({ 1, 2, 2, 3 }, ArmnnType);
3768 armnn::TensorInfo alphaTensorInfo ({ 1, 1, 1, 3 }, ArmnnType);
3769 armnn::TensorInfo outputTensorInfo({ 1, 2, 2, 3 }, ArmnnType);
3770
3771 if (armnn::IsQuantizedType<T>())
3772 {
3773 inputTensorInfo.SetQuantizationScale(0.25f);
3774 inputTensorInfo.SetQuantizationOffset(128);
3775 alphaTensorInfo.SetQuantizationScale(0.25f);
3776 alphaTensorInfo.SetQuantizationOffset(50);
3777 outputTensorInfo.SetQuantizationScale(0.5f);
3778 outputTensorInfo.SetQuantizationOffset(120);
3779 }
3780
3781 std::vector<float> inputData
3782 {
3783 // Expected quantized values:
3784 // 128, 128, 128, 132, 132, 132, 124, 124, 124, 120, 120, 120
3785 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, -1.0f, -1.0f, -1.0f, -2.0f, -2.0f, -2.0f
3786 };
3787 std::vector<float> alphaData
3788 {
3789 // Expected quantized values:
3790 // 50, 54, 58
3791 0.0f, 1.0f, 2.0f
3792 };
3793 std::vector<float> outputExpectedData =
3794 {
3795 // Expected quantized values:
3796 // 20, 120, 120, 122, 122, 122, 120, 118, 116, 120, 116, 112
3797 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, 0.0f, -1.0f, -2.0f, 0.0f, -2.0f, -4.0f
3798 };
3799
3800 auto input = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(),
3801 inputTensorInfo.GetQuantizationOffset(),
3802 inputData));
3803 auto alpha = MakeTensor<T, 4>(alphaTensorInfo, QuantizedVector<T>(alphaTensorInfo.GetQuantizationScale(),
3804 alphaTensorInfo.GetQuantizationOffset(),
3805 alphaData));
3806
3807 LayerTestResult<T, 4> result(outputTensorInfo);
3808 result.outputExpected = MakeTensor<T, 4>(outputTensorInfo,
3809 QuantizedVector<T>(outputTensorInfo.GetQuantizationScale(),
3810 outputTensorInfo.GetQuantizationOffset(),
3811 outputExpectedData));
3812
3813 std::unique_ptr <armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
3814 std::unique_ptr <armnn::ITensorHandle> alphaHandle = workloadFactory.CreateTensorHandle(alphaTensorInfo);
3815 std::unique_ptr <armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
3816
3817 armnn::PreluQueueDescriptor descriptor;
3818 armnn::WorkloadInfo info;
3819 AddInputToWorkload (descriptor, info, inputTensorInfo, inputHandle.get());
3820 AddInputToWorkload (descriptor, info, alphaTensorInfo, alphaHandle.get());
3821 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
3822
3823 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreatePrelu(descriptor, info);
3824
3825 inputHandle->Allocate();
3826 alphaHandle->Allocate();
3827 outputHandle->Allocate();
3828
3829 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
3830 CopyDataToITensorHandle(alphaHandle.get(), &alpha[0][0][0][0]);
3831
3832 workload->Execute();
3833
3834 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
3835
3836 return result;
3837}
3838
Francis Murtagh57f13d52019-06-24 14:24:36 +01003839template<armnn::DataType ArmnnType,
3840 std::size_t InputDim,
3841 std::size_t OutputDim,
3842 typename T = armnn::ResolveType<ArmnnType>>
3843LayerTestResult<T, OutputDim> BatchToSpaceNdHelper(
3844 armnn::IWorkloadFactory &workloadFactory,
3845 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
3846 const armnn::DataLayout& dataLayout,
3847 const unsigned int *inputShape,
3848 const std::vector<float> &inputData,
3849 const std::vector<unsigned int> &blockShape,
3850 const std::vector<std::pair<unsigned int, unsigned int>> &crops,
3851 const unsigned int *outputShape,
3852 const std::vector<float> &outputData,
3853 float scale = 1.0f,
3854 int32_t offset = 0)
3855{
3856 armnn::TensorInfo inputTensorInfo(InputDim, inputShape, ArmnnType);
3857 armnn::TensorInfo outputTensorInfo(OutputDim, outputShape, ArmnnType);
3858
3859 inputTensorInfo.SetQuantizationScale(scale);
3860 inputTensorInfo.SetQuantizationOffset(offset);
3861
3862 outputTensorInfo.SetQuantizationScale(scale);
3863 outputTensorInfo.SetQuantizationOffset(offset);
Francis Murtaghd0dfe172019-06-25 10:57:10 +01003864
Francis Murtagh57f13d52019-06-24 14:24:36 +01003865 auto input = MakeTensor<T, InputDim>(inputTensorInfo, ConvertToDataType<ArmnnType>(inputData, inputTensorInfo));
3866
3867 LayerTestResult<T, OutputDim> result(outputTensorInfo);
3868 result.outputExpected = MakeTensor<T, OutputDim>(outputTensorInfo,
3869 ConvertToDataType<ArmnnType>(outputData, outputTensorInfo));
3870
3871 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
3872 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
3873
3874 armnn::BatchToSpaceNdQueueDescriptor data;
3875 data.m_Parameters.m_DataLayout = dataLayout;
3876 data.m_Parameters.m_BlockShape = blockShape;
3877 data.m_Parameters.m_Crops = crops;
3878 armnn::WorkloadInfo info;
3879 AddInputToWorkload(data, info, inputTensorInfo, inputHandle.get());
3880 AddOutputToWorkload(data, info, outputTensorInfo, outputHandle.get());
3881
3882 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateBatchToSpaceNd(data, info);
3883
3884 inputHandle->Allocate();
3885 outputHandle->Allocate();
3886
3887 CopyDataToITensorHandle(inputHandle.get(), input.origin());
3888
3889 workload->PostAllocationConfigure();
3890 workload->Execute();
3891
3892 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
3893
3894 return result;
3895}
3896
3897template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
3898LayerTestResult<T, 4> BatchToSpaceNdNhwcTest1(
3899 armnn::IWorkloadFactory& workloadFactory,
3900 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3901{
3902 const unsigned int inputShape[] = {4, 2, 2, 1};
3903 const unsigned int outputShape[] = {1, 4, 4, 1};
3904
3905 std::vector<float> input({
3906 // Batch 0, Height 0, Width (2) x Channel (1)
3907 1.0f, 3.0f,
3908 // Batch 0, Height 1, Width (2) x Channel (1)
3909 9.0f, 11.0f,
3910
3911
3912 // Batch 1, Height 0, Width (2) x Channel (1)
3913 2.0f, 4.0f,
3914 // Batch 1, Height 1, Width (2) x Channel (1)
3915 10.0f, 12.0f,
3916
3917
3918 // Batch 2, Height 0, Width (2) x Channel (1)
3919 5.0f, 7.0f,
3920 // Batch 2, Height 1, Width (2) x Channel (1)
3921 13.0f, 15.0f,
3922
3923 // Batch 3, Height 0, Width (2) x Channel (3)
3924 6.0f, 8.0f,
3925 // Batch 3, Height 1, Width (2) x Channel (1)
3926 14.0f, 16.0f
3927 });
3928
3929 std::vector<float> expectedOutput({
3930 1.0f, 2.0f, 3.0f, 4.0f,
3931 5.0f, 6.0f, 7.0f, 8.0f,
3932 9.0f, 10.0f, 11.0f, 12.0f,
3933 13.0f, 14.0f, 15.0f, 16.0f
3934 });
3935
3936 std::vector<unsigned int> blockShape {2, 2};
3937 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
3938
3939 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
3940 armnn::DataLayout::NHWC, inputShape, input, blockShape,
3941 crops, outputShape, expectedOutput);
3942}
3943
3944template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
3945LayerTestResult<T, 4> BatchToSpaceNdNhwcTest2(
3946 armnn::IWorkloadFactory& workloadFactory,
3947 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3948{
3949 const unsigned int inputShape[] = {4, 1, 1, 1};
3950 const unsigned int outputShape[] = {1, 2, 2, 1};
3951
3952 std::vector<float> input({
3953 // Batch 0, Height 0, Width (2) x Channel (1)
3954 1.0f, 2.0f, 3.0f, 4.0f
3955 });
3956
3957 std::vector<float> expectedOutput({1.0f, 2.0f, 3.0f, 4.0f});
3958
3959 std::vector<unsigned int> blockShape({2, 2});
3960 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
3961
3962 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
3963 armnn::DataLayout::NHWC, inputShape, input, blockShape,
3964 crops, outputShape, expectedOutput);
3965}
3966
3967template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
3968LayerTestResult<T, 4> BatchToSpaceNdNhwcTest3(
3969 armnn::IWorkloadFactory& workloadFactory,
3970 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3971{
3972 const unsigned int inputShape[] = {4, 1, 1, 3};
3973 const unsigned int outputShape[] = {1, 2, 2, 3};
3974
3975 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});
3976
3977 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});
3978
3979 std::vector<unsigned int> blockShape({2, 2});
3980 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
3981
3982 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
3983 armnn::DataLayout::NHWC, inputShape, input, blockShape,
3984 crops, outputShape, expectedOutput);
3985}
3986
3987template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
3988LayerTestResult<T, 4> BatchToSpaceNdNhwcTest4(
3989 armnn::IWorkloadFactory& workloadFactory,
3990 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3991{
3992 const unsigned int inputShape[] = {8, 1, 3, 1};
3993 const unsigned int outputShape[] = {2, 2, 4, 1};
3994
3995 std::vector<float> input({
3996 0.0f, 1.0f, 3.0f,
3997 0.0f, 9.0f, 11.0f,
3998 0.0f, 2.0f, 4.0f,
3999 0.0f, 10.0f, 12.0f,
4000 0.0f, 5.0f, 7.0f,
4001 0.0f, 13.0f, 15.0f,
4002 0.0f, 6.0f, 8.0f,
4003 0.0f, 14.0f, 16.0f
4004 });
4005
4006 std::vector<float> expectedOutput({
4007 1.0f, 2.0f, 3.0f, 4.0f,
4008 5.0f, 6.0f, 7.0f, 8.0f,
4009 9.0f, 10.0f, 11.0f, 12.0f,
4010 13.0f, 14.0f, 15.0f, 16.0f
4011 });
4012
4013 std::vector<unsigned int> blockShape({2, 2});
4014 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {2, 0}};
4015
4016 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
4017 armnn::DataLayout::NHWC, inputShape, input, blockShape,
4018 crops, outputShape, expectedOutput);
4019}
4020
4021template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
4022LayerTestResult<T, 4> BatchToSpaceNdNhwcTest5(
4023 armnn::IWorkloadFactory& workloadFactory,
4024 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
4025{
4026 const unsigned int inputShape[] = {4, 2, 2, 1};
4027 const unsigned int outputShape[] = {1, 4, 4, 1};
4028
4029 std::vector<float> input({1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16});
4030 std::vector<float> expectedOutput({1, 5, 2, 6, 9, 13, 10, 14, 3, 7, 4, 8, 11, 15, 12, 16});
4031
4032 std::vector<unsigned int> blockShape({2, 2});
4033 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
4034
4035 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager, armnn::DataLayout::NHWC, inputShape,
4036 input, blockShape, crops, outputShape, expectedOutput);
4037}
4038
4039template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
4040LayerTestResult<T, 4> BatchToSpaceNdNhwcTest6(
4041 armnn::IWorkloadFactory& workloadFactory,
4042 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
4043{
4044 const unsigned int inputShape[] = {4, 1, 1, 1};
4045 const unsigned int outputShape[] = {1, 2, 2, 1};
4046
4047 std::vector<float> input({
4048 // Batch 0, Height 0, Width (2) x Channel (1)
4049 1, 2, 3, 4
4050 });
4051
4052 std::vector<float> expectedOutput({1, 2, 3, 4});
4053
4054 std::vector<unsigned int> blockShape({2, 2});
4055 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
4056
4057 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
4058 armnn::DataLayout::NHWC, inputShape, input, blockShape,
4059 crops, outputShape, expectedOutput);
4060}
4061
4062template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
4063LayerTestResult<T, 4> BatchToSpaceNdNhwcTest7(
4064 armnn::IWorkloadFactory& workloadFactory,
4065 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
4066{
4067 const unsigned int inputShape[] = {4, 1, 1, 3};
4068 const unsigned int outputShape[] = {1, 2, 2, 3};
4069
4070 std::vector<float> input({1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12});
4071
4072 std::vector<float> expectedOutput({1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12});
4073
4074 std::vector<unsigned int> blockShape({2, 2});
4075 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
4076
4077 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
4078 armnn::DataLayout::NHWC, inputShape, input, blockShape,
4079 crops, outputShape, expectedOutput);
4080}
4081
4082template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
4083LayerTestResult<T, 4> BatchToSpaceNdNchwTest1(
4084 armnn::IWorkloadFactory &workloadFactory,
4085 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
4086{
4087 const unsigned int inputShape[] = {4, 3, 1, 1};
4088 const unsigned int outputShape[] = {1, 3, 2, 2};
4089
4090 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});
4091
4092 std::vector<float> expectedOutput({
4093 // Batch 0, Channel 0, Height (2) x Width (2)
4094 1.0f, 4.0f,
4095 7.0f, 10.0f,
4096
4097 // Batch 0, Channel 1, Height (2) x Width (2)
4098 2.0f, 5.0f,
4099 8.0f, 11.0f,
4100
4101 // Batch 0, Channel 2, Height (2) x Width (2)
4102 3.0f, 6.0f,
4103 9.0f, 12.0f,
4104 });
4105
4106 std::vector<unsigned int> blockShape({2, 2});
4107 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
4108
4109 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
4110 armnn::DataLayout::NCHW, inputShape, input, blockShape,
4111 crops, outputShape, expectedOutput);
4112}
4113
4114template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
4115LayerTestResult<T, 4> BatchToSpaceNdNchwTest2(
4116 armnn::IWorkloadFactory& workloadFactory,
4117 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
4118{
4119 const unsigned int inputShape[] = {4, 1, 1, 1};
4120 const unsigned int outputShape[] = {1, 1, 2, 2};
4121
4122 std::vector<float> input({
4123 // Batch 0, Height 0, Width (2) x Channel (1)
4124 1.0f, 2.0f, 3.0f, 4.0f
4125 });
4126
4127 std::vector<float> expectedOutput({1.0f, 2.0f, 3.0f, 4.0f});
4128
4129 std::vector<unsigned int> blockShape({2, 2});
4130 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
4131
4132 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
4133 armnn::DataLayout::NCHW, inputShape, input, blockShape,
4134 crops, outputShape, expectedOutput);
4135}
4136
4137template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
4138LayerTestResult<T, 4> BatchToSpaceNdNchwTest3(
4139 armnn::IWorkloadFactory& workloadFactory,
4140 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
4141{
4142 const unsigned int inputShape[] = {4, 3, 1, 1};
4143 const unsigned int outputShape[] = {1, 3, 2, 2};
4144
4145 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});
4146
4147 std::vector<float> expectedOutput({
4148 // Batch 0, Channel 0, Height (2) x Width (2)
4149 1.0f, 7.0f,
4150 2.0f, 8.0f,
4151
4152 // Batch 0, Channel 1, Height (2) x Width (2)
4153 3.0f, 9.0f,
4154 4.0f, 10.0f,
4155
4156 // Batch 0, Channel 2, Height (2) x Width (2)
4157 5.0f, 11.0f,
4158 6.0f, 12.0f,
4159 });
4160
4161 std::vector<unsigned int> blockShape({2, 2});
4162 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
4163
4164 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
4165 armnn::DataLayout::NCHW, inputShape, input, blockShape,
4166 crops, outputShape, expectedOutput);
4167}
4168
4169template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
4170LayerTestResult<T, 4> BatchToSpaceNdNchwTest4(
4171 armnn::IWorkloadFactory &workloadFactory,
4172 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
4173{
4174 const unsigned int inputShape[] = {4, 3, 1, 1};
4175 const unsigned int outputShape[] = {1, 3, 2, 2};
4176
4177 std::vector<float> input({1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12});
4178
4179 std::vector<float> expectedOutput({
4180 // Batch 0, Channel 0, Height (2) x Width (2)
4181 1, 4,
4182 7, 10,
4183
4184 // Batch 0, Channel 1, Height (2) x Width (2)
4185 2, 5,
4186 8, 11,
4187
4188 // Batch 0, Channel 2, Height (2) x Width (2)
4189 3, 6,
4190 9, 12,
4191 });
4192
4193 std::vector<unsigned int> blockShape({2, 2});
4194 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
4195
4196 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
4197 armnn::DataLayout::NCHW, inputShape, input, blockShape,
4198 crops, outputShape, expectedOutput);
4199}
4200
4201template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
4202LayerTestResult<T, 4> BatchToSpaceNdNchwTest5(
4203 armnn::IWorkloadFactory& workloadFactory,
4204 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
4205{
4206 const unsigned int inputShape[] = {4, 1, 1, 1};
4207 const unsigned int outputShape[] = {1, 1, 2, 2};
4208
4209 std::vector<float> input({
4210 // Batch 0, Height 0, Width (2) x Channel (1)
4211 1, 2, 3, 4
4212 });
4213
4214 std::vector<float> expectedOutput({1, 2, 3, 4});
4215
4216 std::vector<unsigned int> blockShape({2, 2});
4217 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
4218
4219 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
4220 armnn::DataLayout::NCHW, inputShape, input, blockShape,
4221 crops, outputShape, expectedOutput);
4222}
4223
4224template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
4225LayerTestResult<T, 4> BatchToSpaceNdNchwTest6(
4226 armnn::IWorkloadFactory& workloadFactory,
4227 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
4228{
4229 const unsigned int inputShape[] = {4, 3, 1, 1};
4230 const unsigned int outputShape[] = {1, 3, 2, 2};
4231
4232 std::vector<float> input({1, 3, 5, 7, 9, 11, 2, 4, 6, 8, 10, 12});
4233
4234 std::vector<float> expectedOutput({
4235 // Batch 0, Channel 0, Height (2) x Width (2)
4236 1, 7,
4237 2, 8,
4238
4239 // Batch 0, Channel 1, Height (2) x Width (2)
4240 3, 9,
4241 4, 10,
4242
4243 // Batch 0, Channel 2, Height (2) x Width (2)
4244 5, 11,
4245 6, 12,
4246 });
4247
4248 std::vector<unsigned int> blockShape({2, 2});
4249 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
4250
4251 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
4252 armnn::DataLayout::NCHW, inputShape, input, blockShape,
4253 crops, outputShape, expectedOutput);
4254}
4255
4256template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
4257LayerTestResult<T, 4> BatchToSpaceNdNchwTest7(
4258 armnn::IWorkloadFactory& workloadFactory,
4259 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
4260{
4261 const unsigned int inputShape[] = {8, 1, 1, 3};
4262 const unsigned int outputShape[] = {2, 1, 2, 4};
4263
4264 std::vector<float> input({
4265 0, 1, 3, 0, 9, 11,
4266 0, 2, 4, 0, 10, 12,
4267 0, 5, 7, 0, 13, 15,
4268 0, 6, 8, 0, 14, 16
4269 });
4270
4271 std::vector<float> expectedOutput({
4272 1, 2, 3, 4,
4273 5, 6, 7, 8,
4274 9, 10, 11, 12,
4275 13, 14, 15, 16
4276 });
4277
4278 std::vector<unsigned int> blockShape({2, 2});
4279 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {2, 0}};
4280
4281 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
4282 armnn::DataLayout::NCHW, inputShape, input, blockShape,
4283 crops, outputShape, expectedOutput);
4284}
4285
Matteo Martincighab9e5252019-06-13 17:27:46 +01004286template LayerTestResult<typename armnn::ResolveType<armnn::DataType::Float32>, 4>
4287PreluTest<armnn::DataType::Float32>(
4288 armnn::IWorkloadFactory& workloadFactory,
4289 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4290
4291template LayerTestResult<typename armnn::ResolveType<armnn::DataType::QuantisedAsymm8>, 4>
4292PreluTest<armnn::DataType::QuantisedAsymm8>(
4293 armnn::IWorkloadFactory& workloadFactory,
4294 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4295
4296template LayerTestResult<typename armnn::ResolveType<armnn::DataType::QuantisedSymm16>, 4>
4297PreluTest<armnn::DataType::QuantisedSymm16>(
4298 armnn::IWorkloadFactory& workloadFactory,
4299 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Aron Virginas-Tar735a4502019-06-26 15:02:47 +01004300
4301//
4302// TransposeConvolution2d
4303//
4304
4305// Simple biased
4306LayerTestResult<float, 4> SimpleTransposeConvolution2dFloatNchwTest(
4307 armnn::IWorkloadFactory& workloadFactory,
4308 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4309
4310LayerTestResult<float, 4> SimpleTransposeConvolution2dFloatNhwcTest(
4311 armnn::IWorkloadFactory& workloadFactory,
4312 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4313
4314LayerTestResult<uint8_t, 4> SimpleTransposeConvolution2dUint8NchwTest(
4315 armnn::IWorkloadFactory& workloadFactory,
4316 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4317
4318LayerTestResult<uint8_t, 4> SimpleTransposeConvolution2dUint8NhwcTest(
4319 armnn::IWorkloadFactory& workloadFactory,
4320 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4321
4322LayerTestResult<int16_t, 4> SimpleTransposeConvolution2dInt16NchwTest(
4323 armnn::IWorkloadFactory& workloadFactory,
4324 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4325
4326LayerTestResult<int16_t, 4> SimpleTransposeConvolution2dInt16NhwcTest(
4327 armnn::IWorkloadFactory& workloadFactory,
4328 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4329
4330// Simple unbiased
4331LayerTestResult<float, 4> UnbiasedSimpleTransposeConvolution2dFloatNchwTest(
4332 armnn::IWorkloadFactory& workloadFactory,
4333 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4334
4335LayerTestResult<float, 4> UnbiasedSimpleTransposeConvolution2dFloatNhwcTest(
4336 armnn::IWorkloadFactory& workloadFactory,
4337 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4338
4339LayerTestResult<uint8_t, 4> UnbiasedSimpleTransposeConvolution2dUint8NchwTest(
4340 armnn::IWorkloadFactory& workloadFactory,
4341 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4342
4343LayerTestResult<uint8_t, 4> UnbiasedSimpleTransposeConvolution2dUint8NhwcTest(
4344 armnn::IWorkloadFactory& workloadFactory,
4345 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4346
4347LayerTestResult<int16_t, 4> UnbiasedSimpleTransposeConvolution2dInt16NchwTest(
4348 armnn::IWorkloadFactory& workloadFactory,
4349 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4350
4351LayerTestResult<int16_t, 4> UnbiasedSimpleTransposeConvolution2dInt16NhwcTest(
4352 armnn::IWorkloadFactory& workloadFactory,
4353 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4354
4355// Padded biased
4356LayerTestResult<float, 4> PaddedTransposeConvolution2dFloatNchwTest(
4357 armnn::IWorkloadFactory& workloadFactory,
4358 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4359
4360LayerTestResult<float, 4> PaddedTransposeConvolution2dFloatNhwcTest(
4361 armnn::IWorkloadFactory& workloadFactory,
4362 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4363
4364LayerTestResult<uint8_t, 4> PaddedTransposeConvolution2dUint8NchwTest(
4365 armnn::IWorkloadFactory& workloadFactory,
4366 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4367
4368LayerTestResult<uint8_t, 4> PaddedTransposeConvolution2dUint8NhwcTest(
4369 armnn::IWorkloadFactory& workloadFactory,
4370 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4371
4372LayerTestResult<int16_t, 4> PaddedTransposeConvolution2dInt16NchwTest(
4373 armnn::IWorkloadFactory& workloadFactory,
4374 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4375
4376LayerTestResult<int16_t, 4> PaddedTransposeConvolution2dInt16NhwcTest(
4377 armnn::IWorkloadFactory& workloadFactory,
4378 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4379
4380// Padded unbiased
4381LayerTestResult<float, 4> UnbiasedPaddedTransposeConvolution2dFloatNchwTest(
4382 armnn::IWorkloadFactory& workloadFactory,
4383 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4384
4385LayerTestResult<float, 4> UnbiasedPaddedTransposeConvolution2dFloatNhwcTest(
4386 armnn::IWorkloadFactory& workloadFactory,
4387 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4388
4389LayerTestResult<uint8_t, 4> UnbiasedPaddedTransposeConvolution2dUint8NchwTest(
4390 armnn::IWorkloadFactory& workloadFactory,
4391 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4392
4393LayerTestResult<uint8_t, 4> UnbiasedPaddedTransposeConvolution2dUint8NhwcTest(
4394 armnn::IWorkloadFactory& workloadFactory,
4395 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4396
4397LayerTestResult<int16_t, 4> UnbiasedPaddedTransposeConvolution2dInt16NchwTest(
4398 armnn::IWorkloadFactory& workloadFactory,
4399 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4400
4401LayerTestResult<int16_t, 4> UnbiasedPaddedTransposeConvolution2dInt16NhwcTest(
4402 armnn::IWorkloadFactory& workloadFactory,
4403 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4404
4405// Strided biased
4406LayerTestResult<float, 4> StridedTransposeConvolution2dFloatNchwTest(
4407 armnn::IWorkloadFactory& workloadFactory,
4408 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4409
4410LayerTestResult<float, 4> StridedTransposeConvolution2dFloatNhwcTest(
4411 armnn::IWorkloadFactory& workloadFactory,
4412 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4413
4414LayerTestResult<uint8_t, 4> StridedTransposeConvolution2dUint8NchwTest(
4415 armnn::IWorkloadFactory& workloadFactory,
4416 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4417
4418LayerTestResult<uint8_t, 4> StridedTransposeConvolution2dUint8NhwcTest(
4419 armnn::IWorkloadFactory& workloadFactory,
4420 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4421
4422LayerTestResult<int16_t, 4> StridedTransposeConvolution2dInt16NchwTest(
4423 armnn::IWorkloadFactory& workloadFactory,
4424 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4425
4426LayerTestResult<int16_t, 4> StridedTransposeConvolution2dInt16NhwcTest(
4427 armnn::IWorkloadFactory& workloadFactory,
4428 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4429
4430// Strided unbiased
4431LayerTestResult<float, 4> UnbiasedStridedTransposeConvolution2dFloatNchwTest(
4432 armnn::IWorkloadFactory& workloadFactory,
4433 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4434
4435LayerTestResult<float, 4> UnbiasedStridedTransposeConvolution2dFloatNhwcTest(
4436 armnn::IWorkloadFactory& workloadFactory,
4437 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4438
4439LayerTestResult<uint8_t, 4> UnbiasedStridedTransposeConvolution2dUint8NchwTest(
4440 armnn::IWorkloadFactory& workloadFactory,
4441 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4442
4443LayerTestResult<uint8_t, 4> UnbiasedStridedTransposeConvolution2dUint8NhwcTest(
4444 armnn::IWorkloadFactory& workloadFactory,
4445 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4446
4447LayerTestResult<int16_t, 4> UnbiasedStridedTransposeConvolution2dInt16NchwTest(
4448 armnn::IWorkloadFactory& workloadFactory,
4449 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4450
4451LayerTestResult<int16_t, 4> UnbiasedStridedTransposeConvolution2dInt16NhwcTest(
4452 armnn::IWorkloadFactory& workloadFactory,
4453 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);