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