blob: 235c5dcbd298a7c508f0cb7e7cf0cca3a33d3e51 [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>>
Teresa Charlin2b7519d2019-07-09 15:45:35 +0100131LayerTestResult<T, 4> Convolution2d2x2Dilation2x2Padding2x2Stride3x3Test(
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>>
Teresa Charlin20b1f882019-06-19 09:34:37 +0100138LayerTestResult<T, 4> DepthwiseConvolution2d3x3Dilation3x3Test(
139 armnn::IWorkloadFactory& workloadFactory,
140 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
141 bool biasEnabled,
142 const armnn::DataLayout layout);
143
144template<armnn::DataType ArmnnType, armnn::DataType ArmnnBType, typename T = armnn::ResolveType<ArmnnType>>
145LayerTestResult<T, 4> DepthwiseConvolution2d2x3x3Dilation3x3Test(
146 armnn::IWorkloadFactory& workloadFactory,
147 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
148 bool biasEnabled,
149 const armnn::DataLayout layout);
150
Kevin May665a964a2019-08-21 16:53:50 +0100151template<armnn::DataType ArmnnType, armnn::DataType ArmnnBType, typename T = armnn::ResolveType<ArmnnType>>
152LayerTestResult<T, 4> DepthwiseConvolution2dMult4Test(
153 armnn::IWorkloadFactory& workloadFactory,
154 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
155 bool biasEnabled,
156 const armnn::DataLayout layout);
157
158template<armnn::DataType ArmnnType, armnn::DataType ArmnnBType, typename T = armnn::ResolveType<ArmnnType>>
159LayerTestResult<T, 4> DepthwiseConvolution2dMult2Test(
160 armnn::IWorkloadFactory& workloadFactory,
161 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
162 bool biasEnabled,
163 const armnn::DataLayout layout);
164
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000165LayerTestResult<float, 4> DepthwiseConvolution2dDepthNhwcTest(
166 armnn::IWorkloadFactory& workloadFactory,
167 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
168 bool biasEnabled);
telsoa014fcda012018-03-09 14:13:49 +0000169
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000170LayerTestResult<float, 4> DepthwiseConvolution2dDepthMul1Test(
171 armnn::IWorkloadFactory& workloadFactory,
172 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
173 bool biasEnabled,
Matthew Bentham8800c002018-11-19 13:19:28 +0000174 const armnn::DataLayout layout);
surmeh013537c2c2018-05-18 16:31:43 +0100175
Matthew Jacksond6a9dee2019-07-22 13:53:24 +0100176LayerTestResult<float, 4> DepthwiseConvolution2dDepthMul64Test(
177 armnn::IWorkloadFactory& workloadFactory,
178 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
179
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000180LayerTestResult<float, 4> DepthwiseConvolution2dAsymmetricTest(
181 armnn::IWorkloadFactory& workloadFactory,
182 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
183 bool biasEnabled,
Matthew Bentham8800c002018-11-19 13:19:28 +0000184 const armnn::DataLayout layout);
telsoa014fcda012018-03-09 14:13:49 +0000185
Teresa Charlin20b1f882019-06-19 09:34:37 +0100186LayerTestResult<float, 4> SimpleDepthwiseConvolution2d3x3Dilation3x3NhwcTest(
187 armnn::IWorkloadFactory& workloadFactory,
188 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Bruno Goncalves22972f02019-04-26 21:03:24 -0300189
Nattapat Chaimanowong649dd952019-01-22 16:10:44 +0000190LayerTestResult<float, 4> CompareDepthwiseConvolution2dFloatTest(
191 armnn::IWorkloadFactory& workloadFactory,
192 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
193 armnn::IWorkloadFactory& refWorkloadFactory,
194 const armnn::DataLayout layout);
195
196LayerTestResult<uint8_t, 4> CompareDepthwiseConvolution2dUint8Test(
197 armnn::IWorkloadFactory& workloadFactory,
198 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
199 armnn::IWorkloadFactory& refWorkloadFactory,
200 const armnn::DataLayout layout);
201
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000202LayerTestResult<float, 4> SimpleMaxPooling2dSize2x2Stride2x2Test(
203 armnn::IWorkloadFactory& workloadFactory,
204 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
205 bool forceNoPadding);
James Conroy45a9b772018-10-31 11:47:53 +0000206
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000207LayerTestResult<uint8_t, 4> SimpleMaxPooling2dSize2x2Stride2x2Uint8Test(
208 armnn::IWorkloadFactory& workloadFactory,
209 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
210 bool forceNoPadding);
James Conroy45a9b772018-10-31 11:47:53 +0000211
Teresa Charlin0434df62019-06-06 13:40:35 +0100212LayerTestResult<int16_t, 4> SimpleMaxPooling2dSize2x2Stride2x2Int16Test(
213 armnn::IWorkloadFactory& workloadFactory,
214 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
215 bool forceNoPadding);
216
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000217LayerTestResult<float, 4> SimpleMaxPooling2dSize3x3Stride2x4Test(
218 armnn::IWorkloadFactory& workloadFactory,
219 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
220 bool forceNoPadding);
221
222LayerTestResult<uint8_t, 4> SimpleMaxPooling2dSize3x3Stride2x4Uint8Test(
223 armnn::IWorkloadFactory& workloadFactory,
224 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
225 bool forceNoPadding );
226
Teresa Charlin0434df62019-06-06 13:40:35 +0100227LayerTestResult<int16_t, 4> SimpleMaxPooling2dSize3x3Stride2x4Int16Test(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000228 armnn::IWorkloadFactory& workloadFactory,
Teresa Charlin0434df62019-06-06 13:40:35 +0100229 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
230 bool forceNoPadding );
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000231
232LayerTestResult<float, 4> SimpleMaxPooling2dTest(
233 armnn::IWorkloadFactory& workloadFactory,
234 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Matthew Bentham8800c002018-11-19 13:19:28 +0000235 const armnn::DataLayout dataLayout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000236
237LayerTestResult<uint8_t, 4> SimpleMaxPooling2dUint8Test(
238 armnn::IWorkloadFactory& workloadFactory,
239 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Matthew Bentham8800c002018-11-19 13:19:28 +0000240 const armnn::DataLayout dataLayout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000241
Teresa Charlin0434df62019-06-06 13:40:35 +0100242LayerTestResult<int16_t, 4> SimpleMaxPooling2dInt16Test(
243 armnn::IWorkloadFactory& workloadFactory,
244 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
245 const armnn::DataLayout dataLayout);
246
247LayerTestResult<float, 4> IgnorePaddingSimpleMaxPooling2dTest(
248 armnn::IWorkloadFactory& workloadFactory,
249 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
250
251LayerTestResult<uint8_t, 4> IgnorePaddingSimpleMaxPooling2dUint8Test(
252 armnn::IWorkloadFactory& workloadFactory,
253 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
254
255LayerTestResult<int16_t, 4> IgnorePaddingSimpleMaxPooling2dInt16Test(
256 armnn::IWorkloadFactory& workloadFactory,
257 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
258
259LayerTestResult<float, 4> IgnorePaddingMaxPooling2dSize3Test(
260 armnn::IWorkloadFactory& workloadFactory,
261 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
262
263LayerTestResult<uint8_t, 4> IgnorePaddingMaxPooling2dSize3Uint8Test(
264 armnn::IWorkloadFactory& workloadFactory,
265 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
266
267LayerTestResult<int16_t, 4> IgnorePaddingMaxPooling2dSize3Int16Test(
268 armnn::IWorkloadFactory& workloadFactory,
269 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
270
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000271LayerTestResult<float, 4> SimpleAveragePooling2dTest(
272 armnn::IWorkloadFactory& workloadFactory,
273 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Matthew Bentham8800c002018-11-19 13:19:28 +0000274 const armnn::DataLayout dataLayout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000275
276LayerTestResult<uint8_t, 4> SimpleAveragePooling2dUint8Test(
277 armnn::IWorkloadFactory& workloadFactory,
278 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Matthew Bentham8800c002018-11-19 13:19:28 +0000279 const armnn::DataLayout dataLayout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000280
Teresa Charlin0434df62019-06-06 13:40:35 +0100281LayerTestResult<int16_t, 4> SimpleAveragePooling2dInt16Test(
282 armnn::IWorkloadFactory& workloadFactory,
283 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
284 const armnn::DataLayout dataLayout);
285
286LayerTestResult<float, 4> LargeTensorsAveragePooling2dTest(
287 armnn::IWorkloadFactory& workloadFactory,
288 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
289
290LayerTestResult<uint8_t, 4> LargeTensorsAveragePooling2dUint8Test(
291 armnn::IWorkloadFactory& workloadFactory,
292 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
293
294LayerTestResult<int16_t, 4> LargeTensorsAveragePooling2dInt16Test(
295 armnn::IWorkloadFactory& workloadFactory,
296 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
297
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000298LayerTestResult<float, 4> IgnorePaddingAveragePooling2dSize3x2Stride2x2Test(
299 armnn::IWorkloadFactory& workloadFactory,
300 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
301 bool forceNoPadding);
302
303LayerTestResult<float, 4> IgnorePaddingSimpleAveragePooling2dTest(
304 armnn::IWorkloadFactory& workloadFactory,
305 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
306
307LayerTestResult<uint8_t, 4> IgnorePaddingSimpleAveragePooling2dUint8Test(
308 armnn::IWorkloadFactory& workloadFactory,
309 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
310
Teresa Charlin0434df62019-06-06 13:40:35 +0100311LayerTestResult<int16_t, 4> IgnorePaddingSimpleAveragePooling2dInt16Test(
312 armnn::IWorkloadFactory& workloadFactory,
313 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
314
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000315LayerTestResult<float, 4> IgnorePaddingSimpleAveragePooling2dNoPaddingTest(
316 armnn::IWorkloadFactory& workloadFactory,
317 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
318
telsoa014fcda012018-03-09 14:13:49 +0000319LayerTestResult<uint8_t, 4> IgnorePaddingSimpleAveragePooling2dNoPaddingUint8Test(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000320 armnn::IWorkloadFactory& workloadFactory,
321 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000322
Teresa Charlin0434df62019-06-06 13:40:35 +0100323LayerTestResult<int16_t, 4> IgnorePaddingSimpleAveragePooling2dNoPaddingInt16Test(
324 armnn::IWorkloadFactory& workloadFactory,
325 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
326
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000327LayerTestResult<float, 4> IgnorePaddingAveragePooling2dSize3Test(
328 armnn::IWorkloadFactory& workloadFactory,
329 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000330
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000331LayerTestResult<uint8_t, 4> IgnorePaddingAveragePooling2dSize3Uint8Test(
332 armnn::IWorkloadFactory& workloadFactory,
333 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000334
Teresa Charlin0434df62019-06-06 13:40:35 +0100335LayerTestResult<int16_t, 4> IgnorePaddingAveragePooling2dSize3Int16Test(
336 armnn::IWorkloadFactory& workloadFactory,
337 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
338
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000339LayerTestResult<float, 4> SimpleL2Pooling2dTest(
340 armnn::IWorkloadFactory& workloadFactory,
341 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Matthew Bentham8800c002018-11-19 13:19:28 +0000342 const armnn::DataLayout dataLayout);
telsoa014fcda012018-03-09 14:13:49 +0000343
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000344LayerTestResult<uint8_t, 4> SimpleL2Pooling2dUint8Test(
345 armnn::IWorkloadFactory& workloadFactory,
346 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Matthew Bentham8800c002018-11-19 13:19:28 +0000347 const armnn::DataLayout dataLayout);
telsoa014fcda012018-03-09 14:13:49 +0000348
Teresa Charlin0434df62019-06-06 13:40:35 +0100349LayerTestResult<int16_t, 4> SimpleL2Pooling2dInt16Test(
350 armnn::IWorkloadFactory& workloadFactory,
351 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
352 const armnn::DataLayout dataLayout);
353
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000354LayerTestResult<float, 4> L2Pooling2dSize3Stride1Test(
355 armnn::IWorkloadFactory& workloadFactory,
356 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000357
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000358LayerTestResult<uint8_t, 4> L2Pooling2dSize3Stride1Uint8Test(
359 armnn::IWorkloadFactory& workloadFactory,
360 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000361
Teresa Charlin0434df62019-06-06 13:40:35 +0100362LayerTestResult<int16_t, 4> L2Pooling2dSize3Stride1Int16Test(
363 armnn::IWorkloadFactory& workloadFactory,
364 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
365
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000366LayerTestResult<float, 4> L2Pooling2dSize3Stride3Test(
367 armnn::IWorkloadFactory& workloadFactory,
368 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000369
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000370LayerTestResult<uint8_t, 4> L2Pooling2dSize3Stride3Uint8Test(
371 armnn::IWorkloadFactory& workloadFactory,
372 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000373
Teresa Charlin0434df62019-06-06 13:40:35 +0100374LayerTestResult<int16_t, 4> L2Pooling2dSize3Stride3Int16Test(
375 armnn::IWorkloadFactory& workloadFactory,
376 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
377
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000378LayerTestResult<float, 4> L2Pooling2dSize3Stride4Test(
379 armnn::IWorkloadFactory& workloadFactory,
380 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000381
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000382LayerTestResult<uint8_t, 4> L2Pooling2dSize3Stride4Uint8Test(
383 armnn::IWorkloadFactory& workloadFactory,
384 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000385
Teresa Charlin0434df62019-06-06 13:40:35 +0100386LayerTestResult<int16_t, 4> L2Pooling2dSize3Stride4Int16Test(
387 armnn::IWorkloadFactory& workloadFactory,
388 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
389
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000390LayerTestResult<float, 4> L2Pooling2dSize7Test(
391 armnn::IWorkloadFactory& workloadFactory,
392 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000393
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000394LayerTestResult<uint8_t, 4> L2Pooling2dSize7Uint8Test(
395 armnn::IWorkloadFactory& workloadFactory,
396 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000397
Teresa Charlin0434df62019-06-06 13:40:35 +0100398LayerTestResult<int16_t, 4> L2Pooling2dSize7Int16Test(
399 armnn::IWorkloadFactory& workloadFactory,
400 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
401
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000402LayerTestResult<float, 4> L2Pooling2dSize9Test(
403 armnn::IWorkloadFactory& workloadFactory,
404 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000405
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000406LayerTestResult<uint8_t, 4> L2Pooling2dSize9Uint8Test(
407 armnn::IWorkloadFactory& workloadFactory,
408 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
409
Teresa Charlin0434df62019-06-06 13:40:35 +0100410LayerTestResult<int16_t, 4> L2Pooling2dSize9Int16Test(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000411 armnn::IWorkloadFactory& workloadFactory,
412 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
413
414LayerTestResult<float, 4> IgnorePaddingSimpleL2Pooling2dTest(
415 armnn::IWorkloadFactory& workloadFactory,
416 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
417
418LayerTestResult<uint8_t, 4> IgnorePaddingSimpleL2Pooling2dUint8Test(
419 armnn::IWorkloadFactory& workloadFactory,
420 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
421
Teresa Charlin0434df62019-06-06 13:40:35 +0100422LayerTestResult<int16_t, 4> IgnorePaddingSimpleL2Pooling2dInt16Test(
423 armnn::IWorkloadFactory& workloadFactory,
424 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
425
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000426LayerTestResult<float, 4> IgnorePaddingL2Pooling2dSize3Test(
427 armnn::IWorkloadFactory& workloadFactory,
428 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
429
430LayerTestResult<uint8_t, 4> IgnorePaddingL2Pooling2dSize3Uint8Test(
431 armnn::IWorkloadFactory& workloadFactory,
432 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
433
Teresa Charlin0434df62019-06-06 13:40:35 +0100434LayerTestResult<int16_t, 4> IgnorePaddingL2Pooling2dSize3Int16Test(
435 armnn::IWorkloadFactory& workloadFactory,
436 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
437
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000438LayerTestResult<float, 4> AsymmetricNonSquarePooling2dTest(
439 armnn::IWorkloadFactory& workloadFactory,
440 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
441
442LayerTestResult<uint8_t, 4> AsymmetricNonSquarePooling2dUint8Test(
443 armnn::IWorkloadFactory& workloadFactory,
444 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
445
Teresa Charlin0434df62019-06-06 13:40:35 +0100446LayerTestResult<int16_t, 4> AsymmetricNonSquarePooling2dInt16Test(
447 armnn::IWorkloadFactory& workloadFactory,
448 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
449
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000450LayerTestResult<float, 4> ComparePooling2dTest(
451 armnn::IWorkloadFactory& workloadFactory,
452 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
453 armnn::IWorkloadFactory& refWorkloadFactory,
454 armnn::PoolingAlgorithm poolingType);
455
456LayerTestResult<uint8_t, 4> ComparePooling2dUint8Test(
457 armnn::IWorkloadFactory& workloadFactory,
458 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
459 armnn::IWorkloadFactory& refWorkloadFactory,
460 armnn::PoolingAlgorithm poolingType);
461
Teresa Charlin0434df62019-06-06 13:40:35 +0100462LayerTestResult<int16_t, 4> ComparePooling2dInt16Test(
463 armnn::IWorkloadFactory& workloadFactory,
464 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
465 armnn::IWorkloadFactory& refWorkloadFactory,
466 armnn::PoolingAlgorithm poolingType);
467
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000468LayerTestResult<float, 4> ConstantLinearActivationTest(
469 armnn::IWorkloadFactory& workloadFactory,
470 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
471
472LayerTestResult<float, 4> SimpleNormalizationAcrossTest(
473 armnn::IWorkloadFactory& workloadFactory,
474 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
475
476LayerTestResult<float, 4> SimpleNormalizationWithinTest(
477 armnn::IWorkloadFactory& workloadFactory,
478 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
479
480LayerTestResult<float,4> SimpleNormalizationAcrossNhwcTest(
481 armnn::IWorkloadFactory& workloadFactory,
482 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
483
484LayerTestResult<float, 2> SimpleSoftmaxTest(
485 armnn::IWorkloadFactory& workloadFactory,
486 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
487 float beta);
488
Francis Murtagh07f21212019-07-23 09:50:50 +0100489LayerTestResult<float, 2> SimpleAxisSoftmaxTest(
490 armnn::IWorkloadFactory& workloadFactory,
491 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
492 float beta,
493 int axis);
494
Narumol Prangnawarat65d30962019-03-14 11:55:03 +0000495LayerTestResult<float, 3> Simple3dSoftmaxTest(
496 armnn::IWorkloadFactory& workloadFactory,
497 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
498 float beta);
499
Francis Murtagh07f21212019-07-23 09:50:50 +0100500LayerTestResult<float, 3> Simple3dAxisSoftmaxTest(
501 armnn::IWorkloadFactory& workloadFactory,
502 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
503 float beta,
504 int axis);
505
Narumol Prangnawarat65d30962019-03-14 11:55:03 +0000506LayerTestResult<float, 4> Simple4dSoftmaxTest(
507 armnn::IWorkloadFactory& workloadFactory,
508 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
509 float beta);
510
Francis Murtagh07f21212019-07-23 09:50:50 +0100511LayerTestResult<float, 4> Simple4dAxisSoftmaxTest(
512 armnn::IWorkloadFactory& workloadFactory,
513 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
514 float beta,
515 int axis);
516
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000517LayerTestResult<uint8_t, 2> SimpleSoftmaxUint8Test(
518 armnn::IWorkloadFactory& workloadFactory,
519 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
520 float beta);
521
Narumol Prangnawarat65d30962019-03-14 11:55:03 +0000522LayerTestResult<uint8_t,3> Simple3dSoftmaxUint8Test(
523 armnn::IWorkloadFactory& workloadFactory,
524 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
525 float beta);
526
527LayerTestResult<uint8_t,4> Simple4dSoftmaxUint8Test(
528 armnn::IWorkloadFactory& workloadFactory,
529 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
530 float beta);
531
nikraj01248683f2019-05-29 16:46:50 +0100532LayerTestResult<int16_t,2> SimpleSoftmaxUint16Test(
533 armnn::IWorkloadFactory& workloadFactory,
534 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
535 float beta);
536
537LayerTestResult<int16_t,3> Simple3dSoftmaxUint16Test(
538 armnn::IWorkloadFactory& workloadFactory,
539 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
540 float beta);
541
542LayerTestResult<int16_t,4> Simple4dSoftmaxUint16Test(
543 armnn::IWorkloadFactory& workloadFactory,
544 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
545 float beta);
546
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000547LayerTestResult<float, 4> SimpleSigmoidTest(
548 armnn::IWorkloadFactory& workloadFactory,
549 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
550
Nina Drozd8ed4b8c2019-05-29 10:41:04 +0100551template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
552LayerTestResult<T, 4> SimpleReshapeTest(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000553 armnn::IWorkloadFactory& workloadFactory,
554 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
555
Matthew Jacksondba634f2019-08-15 15:14:18 +0100556template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
557LayerTestResult<T, 5> Reshape5dTest(
558 armnn::IWorkloadFactory& workloadFactory,
559 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
560
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000561LayerTestResult<float, 4> SimpleFloorTest(
562 armnn::IWorkloadFactory& workloadFactory,
563 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
564
565LayerTestResult<float, 1> Concatenation1dTest(
566 armnn::IWorkloadFactory& workloadFactory,
567 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
568
569LayerTestResult<float, 2> Concatenation2dDim0Test(
570 armnn::IWorkloadFactory& workloadFactory,
571 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
572
573LayerTestResult<float, 2> Concatenation2dDim1Test(
574 armnn::IWorkloadFactory& workloadFactory,
575 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
576
577LayerTestResult<float, 2> Concatenation2dDim0DiffInputDimsTest(
578 armnn::IWorkloadFactory& workloadFactory,
579 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
580
581LayerTestResult<float, 2> Concatenation2dDim1DiffInputDimsTest(
582 armnn::IWorkloadFactory& workloadFactory,
583 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
584
585LayerTestResult<float, 3> Concatenation3dDim0Test(
586 armnn::IWorkloadFactory& workloadFactory,
587 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
588
589LayerTestResult<float, 3> Concatenation3dDim1Test(
590 armnn::IWorkloadFactory& workloadFactory,
591 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
592
593LayerTestResult<float, 3> Concatenation3dDim2Test(
594 armnn::IWorkloadFactory& workloadFactory,
narpra015cdda352018-11-19 15:30:27 +0000595 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
596 bool useSubtensor);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000597
598LayerTestResult<float, 3> Concatenation3dDim0DiffInputDimsTest(
599 armnn::IWorkloadFactory& workloadFactory,
600 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
601
602LayerTestResult<float, 3> Concatenation3dDim1DiffInputDimsTest(
603 armnn::IWorkloadFactory& workloadFactory,
604 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
605
606LayerTestResult<float, 3> Concatenation3dDim2DiffInputDimsTest(
607 armnn::IWorkloadFactory& workloadFactory,
narpra015cdda352018-11-19 15:30:27 +0000608 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
609 bool useSubtensor);
610
611LayerTestResult<float, 4> Concatenation4dDim0Test(
612 armnn::IWorkloadFactory& workloadFactory,
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000613 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
614
narpra015cdda352018-11-19 15:30:27 +0000615LayerTestResult<float, 4> Concatenation4dDim1Test(
616 armnn::IWorkloadFactory& workloadFactory,
617 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
618
619LayerTestResult<float, 4> Concatenation4dDim2Test(
620 armnn::IWorkloadFactory& workloadFactory,
621 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
622
623LayerTestResult<float, 4> Concatenation4dDim3Test(
624 armnn::IWorkloadFactory& workloadFactory,
625 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
626 bool useSubtensor);
627
628LayerTestResult<float, 4> Concatenation4dDiffShapeDim0Test(
629 armnn::IWorkloadFactory& workloadFactory,
630 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
631
632LayerTestResult<float, 4> Concatenation4dDiffShapeDim1Test(
633 armnn::IWorkloadFactory& workloadFactory,
634 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
635
636LayerTestResult<float, 4> Concatenation4dDiffShapeDim2Test(
637 armnn::IWorkloadFactory& workloadFactory,
638 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
639
640LayerTestResult<float, 4> Concatenation4dDiffShapeDim3Test(
641 armnn::IWorkloadFactory& workloadFactory,
642 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
643 bool useSubtensor);
644
645LayerTestResult<uint8_t, 4> Concatenation4dDim0Uint8Test(
646 armnn::IWorkloadFactory& workloadFactory,
647 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
648
649LayerTestResult<uint8_t, 4> Concatenation4dDim1Uint8Test(
650 armnn::IWorkloadFactory& workloadFactory,
651 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
652
653LayerTestResult<uint8_t, 4> Concatenation4dDim2Uint8Test(
654 armnn::IWorkloadFactory& workloadFactory,
655 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
656
657LayerTestResult<uint8_t, 4> Concatenation4dDim3Uint8Test(
658 armnn::IWorkloadFactory& workloadFactory,
659 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
660 bool useSubtensor);
661
662LayerTestResult<uint8_t, 4> Concatenation4dDiffShapeDim0Uint8Test(
663 armnn::IWorkloadFactory& workloadFactory,
664 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
665
666LayerTestResult<uint8_t, 4> Concatenation4dDiffShapeDim1Uint8Test(
667 armnn::IWorkloadFactory& workloadFactory,
668 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
669
670LayerTestResult<uint8_t, 4> Concatenation4dDiffShapeDim2Uint8Test(
671 armnn::IWorkloadFactory& workloadFactory,
672 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
673
674LayerTestResult<uint8_t, 4> Concatenation4dDiffShapeDim3Uint8Test(
675 armnn::IWorkloadFactory& workloadFactory,
676 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
677 bool useSubtensor);
678
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000679LayerTestResult<uint8_t, 4> SimpleSigmoidUint8Test(
680 armnn::IWorkloadFactory& workloadFactory,
681 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
682
Teresa Charlin18515e22019-04-24 10:17:46 +0100683LayerTestResult<int16_t, 4> SimpleSigmoidInt16Test(
684 armnn::IWorkloadFactory& workloadFactory,
685 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
686
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000687LayerTestResult<float, 4> CompareConvolution2dTest(
688 armnn::IWorkloadFactory& workloadFactory,
689 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
telsoa014fcda012018-03-09 14:13:49 +0000690 armnn::IWorkloadFactory& refWorkloadFactory);
691
692template<typename T>
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000693LayerTestResult<T, 4> CompareDepthwiseConvolution2dTest(
694 armnn::IWorkloadFactory& workloadFactory,
695 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
696 armnn::IWorkloadFactory& refWorkloadFactory,
Matthew Bentham8800c002018-11-19 13:19:28 +0000697 const armnn::DataLayout layout);
telsoa014fcda012018-03-09 14:13:49 +0000698
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000699LayerTestResult<float, 4> CompareNormalizationTest(
700 armnn::IWorkloadFactory& workloadFactory,
701 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
702 armnn::IWorkloadFactory& refWorkloadFactory,
703 armnn::NormalizationAlgorithmChannel normChannel,
704 armnn::NormalizationAlgorithmMethod normMethod);
telsoa014fcda012018-03-09 14:13:49 +0000705
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000706LayerTestResult<float, 2> CompareSoftmaxTest(
707 armnn::IWorkloadFactory& workloadFactory,
708 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
telsoa014fcda012018-03-09 14:13:49 +0000709 armnn::IWorkloadFactory& refWorkloadFactory,
710 float beta);
711
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000712LayerTestResult<float, 2> FullyConnectedFloat32Test(
713 armnn::IWorkloadFactory& workloadFactory,
714 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
715 bool biasEnabled,
716 bool transposeWeights);
telsoa014fcda012018-03-09 14:13:49 +0000717
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000718std::vector<LayerTestResult<float, 3>> SplitterTest(
719 armnn::IWorkloadFactory& workloadFactory,
720 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
David Beck5cd01f32018-09-12 16:00:08 +0100721
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000722LayerTestResult<float, 3> CopyViaSplitterTest(
723 armnn::IWorkloadFactory& workloadFactory,
724 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000725
Jim Flynn4ed6c832019-05-20 11:02:46 +0100726LayerTestResult<float, 3> ConcatTest(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000727 armnn::IWorkloadFactory& workloadFactory,
728 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000729
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000730LayerTestResult<float, 4> AdditionTest(
731 armnn::IWorkloadFactory& workloadFactory,
732 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000733
Matthew Jacksondba634f2019-08-15 15:14:18 +0100734LayerTestResult<float, 5> Addition5dTest(
735 armnn::IWorkloadFactory& workloadFactory,
736 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
737
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000738LayerTestResult<float, 4> AdditionBroadcast1ElementTest(
739 armnn::IWorkloadFactory& workloadFactory,
740 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000741
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000742LayerTestResult<float, 4> AdditionBroadcastTest(
743 armnn::IWorkloadFactory& workloadFactory,
744 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000745
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000746LayerTestResult<float, 4> CompareAdditionTest(
747 armnn::IWorkloadFactory& workloadFactory,
748 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
749 armnn::IWorkloadFactory& refWorkloadFactory);
telsoa014fcda012018-03-09 14:13:49 +0000750
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000751LayerTestResult<float, 4> SubtractionTest(
752 armnn::IWorkloadFactory& workloadFactory,
753 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000754
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000755LayerTestResult<float, 4> SubtractionBroadcast1ElementTest(
756 armnn::IWorkloadFactory& workloadFactory,
757 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000758
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000759LayerTestResult<float, 4> SubtractionBroadcastTest(
760 armnn::IWorkloadFactory& workloadFactory,
761 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000762
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000763LayerTestResult<float, 4> CompareActivationTest(
764 armnn::IWorkloadFactory& workloadFactory,
765 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
766 armnn::IWorkloadFactory& refWorkloadFactory,
767 armnn::ActivationFunction f,
768 unsigned int batchSize);
telsoa014fcda012018-03-09 14:13:49 +0000769
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000770LayerTestResult<float, 4> DivisionTest(
771 armnn::IWorkloadFactory& workloadFactory,
772 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000773
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000774LayerTestResult<float, 4> DivisionByZeroTest(
775 armnn::IWorkloadFactory& workloadFactory,
776 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Mohamed Nour Abouelseoud7420e552018-10-12 12:26:24 +0100777
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000778LayerTestResult<float, 4> DivisionBroadcast1ElementTest(
779 armnn::IWorkloadFactory& workloadFactory,
780 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Mohamed Nour Abouelseoud7420e552018-10-12 12:26:24 +0100781
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000782LayerTestResult<float, 4> DivisionBroadcast1DVectorTest(
783 armnn::IWorkloadFactory& workloadFactory,
784 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa01c577f2c2018-08-31 09:22:23 +0100785
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000786LayerTestResult<float, 4> MultiplicationTest(
787 armnn::IWorkloadFactory& workloadFactory,
788 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa01c577f2c2018-08-31 09:22:23 +0100789
Matthew Jacksondba634f2019-08-15 15:14:18 +0100790LayerTestResult<float, 5> Multiplication5dTest(
791 armnn::IWorkloadFactory& workloadFactory,
792 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
793
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000794LayerTestResult<float, 4> MultiplicationBroadcast1ElementTest(
795 armnn::IWorkloadFactory& workloadFactory,
796 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
narpra011e4c31d2018-09-28 11:07:51 +0100797
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000798LayerTestResult<float, 4> MultiplicationBroadcast1DVectorTest(
799 armnn::IWorkloadFactory& workloadFactory,
800 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
narpra011e4c31d2018-09-28 11:07:51 +0100801
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000802LayerTestResult<float, 4> CompareMultiplicationTest(
803 armnn::IWorkloadFactory& workloadFactory,
804 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
805 armnn::IWorkloadFactory& refWorkloadFactory);
Matteo Martincigh28dcab62018-10-19 16:40:03 +0100806
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000807LayerTestResult<float, 4> BatchNormTest(
808 armnn::IWorkloadFactory& workloadFactory,
809 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Nattapat Chaimanowong3ea76d52018-11-09 14:10:38 +0000810
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000811LayerTestResult<float, 4> BatchNormNhwcTest(
812 armnn::IWorkloadFactory& workloadFactory,
813 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Nattapat Chaimanowong3ea76d52018-11-09 14:10:38 +0000814
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000815LayerTestResult<float, 4> CompareBatchNormTest(
816 armnn::IWorkloadFactory& workloadFactory,
817 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
818 armnn::IWorkloadFactory& refWorkloadFactory);
Nattapat Chaimanowong3ea76d52018-11-09 14:10:38 +0000819
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000820LayerTestResult<float, 4> BoundedReLuUpperAndLowerBoundTest(
821 armnn::IWorkloadFactory& workloadFactory,
822 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Nattapat Chaimanowong3ea76d52018-11-09 14:10:38 +0000823
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000824LayerTestResult<uint8_t, 4> BoundedReLuUint8UpperAndLowerBoundTest(
825 armnn::IWorkloadFactory& workloadFactor,
826 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManagery);
Éanna Ó Catháin4e1e1362018-11-12 11:36:34 +0000827
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000828LayerTestResult<float, 4> BoundedReLuUpperBoundOnlyTest(
829 armnn::IWorkloadFactory& workloadFactory,
830 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Éanna Ó Catháin4e1e1362018-11-12 11:36:34 +0000831
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000832LayerTestResult<uint8_t, 4> BoundedReLuUint8UpperBoundOnlyTest(
833 armnn::IWorkloadFactory& workloadFactory,
834 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Éanna Ó Catháin262553e2018-11-14 11:26:23 +0000835
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000836LayerTestResult<float, 4> CompareBoundedReLuTest(
837 armnn::IWorkloadFactory& workloadFactory,
838 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
839 armnn::IWorkloadFactory& refWorkloadFactory,
840 float upperBound,
841 float lowerBound);
842
konsof017f6db402019-06-07 15:15:58 +0100843LayerTestResult<float, 4> ReLuTest(
844 armnn::IWorkloadFactory& workloadFactory,
845 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
846
847LayerTestResult<uint8_t, 4> ReLuUint8Test(
848 armnn::IWorkloadFactory& workloadFactory,
849 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Teresa Charlin18515e22019-04-24 10:17:46 +0100850
851LayerTestResult<int16_t, 4> ReLuInt16Test(
852 armnn::IWorkloadFactory& workloadFactory,
853 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
854
855LayerTestResult<int16_t, 4> BoundedReLuInt16Test(
856 armnn::IWorkloadFactory& workloadFactory,
857 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
858
konsof017f6db402019-06-07 15:15:58 +0100859LayerTestResult<float, 4> SoftReLuTest(
860 armnn::IWorkloadFactory& workloadFactory,
861 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
862
863LayerTestResult<uint8_t, 4> SoftReLuUint8Test(
864 armnn::IWorkloadFactory& workloadFactory,
865 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
866
Teresa Charlin18515e22019-04-24 10:17:46 +0100867LayerTestResult<int16_t, 4> SoftReLuInt16Test(
868 armnn::IWorkloadFactory& workloadFactory,
869 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
870
konsof017f6db402019-06-07 15:15:58 +0100871LayerTestResult<float, 4> LeakyReLuTest(
872 armnn::IWorkloadFactory& workloadFactory,
873 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
874
875LayerTestResult<uint8_t, 4> LeakyReLuUint8Test(
876 armnn::IWorkloadFactory& workloadFactory,
877 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
878
Teresa Charlin18515e22019-04-24 10:17:46 +0100879LayerTestResult<int16_t, 4> LeakyReLuInt16Test(
880 armnn::IWorkloadFactory& workloadFactory,
881 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
882
konsof017f6db402019-06-07 15:15:58 +0100883LayerTestResult<float, 4> AbsTest(
884 armnn::IWorkloadFactory& workloadFactory,
885 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
886
887LayerTestResult<uint8_t, 4> AbsUint8Test(
888 armnn::IWorkloadFactory& workloadFactory,
889 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
890
Teresa Charlin18515e22019-04-24 10:17:46 +0100891LayerTestResult<int16_t, 4> AbsInt16Test(
892 armnn::IWorkloadFactory& workloadFactory,
893 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
894
konsof017f6db402019-06-07 15:15:58 +0100895LayerTestResult<float, 4> SqrtTest(
896 armnn::IWorkloadFactory& workloadFactory,
897 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
898
899LayerTestResult<uint8_t, 4> SqrtUint8Test(
900 armnn::IWorkloadFactory& workloadFactory,
901 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
902
Teresa Charlin18515e22019-04-24 10:17:46 +0100903LayerTestResult<int16_t, 4> SqrtInt16Test(
904 armnn::IWorkloadFactory& workloadFactory,
905 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
906
konsof017f6db402019-06-07 15:15:58 +0100907LayerTestResult<float, 4> SquareTest(
908 armnn::IWorkloadFactory& workloadFactory,
909 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
910
911LayerTestResult<uint8_t, 4> SquareUint8Test(
912 armnn::IWorkloadFactory& workloadFactory,
913 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
914
Teresa Charlin18515e22019-04-24 10:17:46 +0100915LayerTestResult<int16_t, 4> SquareInt16Test(
916 armnn::IWorkloadFactory& workloadFactory,
917 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
918
konsof017f6db402019-06-07 15:15:58 +0100919LayerTestResult<float, 4> TanhTest(
920 armnn::IWorkloadFactory& workloadFactory,
921 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
922
923LayerTestResult<uint8_t, 4> TanhUint8Test(
924 armnn::IWorkloadFactory& workloadFactory,
925 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
926
Teresa Charlin18515e22019-04-24 10:17:46 +0100927LayerTestResult<int16_t, 4> TanhInt16Test(
928 armnn::IWorkloadFactory& workloadFactory,
929 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
930
931
Teresa Charlin970f43b2019-07-01 13:51:07 +0100932// 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 +0100933template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
934LayerTestResult<T, 4> ResizeBilinearNopTest(
935 armnn::IWorkloadFactory& workloadFactory,
936 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
937 const armnn::DataLayout dataLayout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000938
939// 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 +0100940template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
941LayerTestResult<T, 4> SimpleResizeBilinearTest(
942 armnn::IWorkloadFactory& workloadFactory,
943 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
944 const armnn::DataLayout dataLayout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000945
946// Tests the resize bilinear for minification of a square input matrix (also: input dimensions are a
947// multiple of output dimensions).
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +0100948template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
949LayerTestResult<T, 4> ResizeBilinearSqMinTest(
950 armnn::IWorkloadFactory& workloadFactory,
951 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
952 const armnn::DataLayout dataLayout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000953
954// Tests the resize bilinear for minification (output dimensions smaller than input dimensions).
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +0100955template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
956LayerTestResult<T, 4> ResizeBilinearMinTest(
957 armnn::IWorkloadFactory& workloadFactory,
958 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
959 const armnn::DataLayout dataLayout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000960
961// Tests the resize bilinear for magnification (output dimensions bigger than input dimensions).
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +0100962template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
963LayerTestResult<T, 4> ResizeBilinearMagTest(
964 armnn::IWorkloadFactory& workloadFactory,
965 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
966 const armnn::DataLayout dataLayout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000967
Teresa Charlin970f43b2019-07-01 13:51:07 +0100968// Tests that the output should be identical to the input when the output dimensions match the input ones.
969template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
970LayerTestResult<T, 4> ResizeNearestNeighborNopTest(
971 armnn::IWorkloadFactory& workloadFactory,
972 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
973 const armnn::DataLayout dataLayout);
974
975// Tests the behaviour of the resize NearestNeighbor operation when rescaling a 2x2 image into a 1x1 image.
976template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
977LayerTestResult<T, 4> SimpleResizeNearestNeighborTest(
978 armnn::IWorkloadFactory& workloadFactory,
979 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
980 const armnn::DataLayout dataLayout);
981
982// Tests the resize NearestNeighbor for minification of a square input matrix (also: input dimensions are a
983// multiple of output dimensions).
984template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
985LayerTestResult<T, 4> ResizeNearestNeighborSqMinTest(
986 armnn::IWorkloadFactory& workloadFactory,
987 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
988 const armnn::DataLayout dataLayout);
989
990// Tests the resize NearestNeighbor for minification (output dimensions smaller than input dimensions).
991template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
992LayerTestResult<T, 4> ResizeNearestNeighborMinTest(
993 armnn::IWorkloadFactory& workloadFactory,
994 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
995 const armnn::DataLayout dataLayout);
996
997// Tests the resize NearestNeighbor for magnification (output dimensions bigger than input dimensions).
998template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
999LayerTestResult<T, 4> ResizeNearestNeighborMagTest(
1000 armnn::IWorkloadFactory& workloadFactory,
1001 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Aron Virginas-Tarcc0cefb2019-07-02 17:25:47 +01001002 const armnn::DataLayout dataLayout,
1003 float inQuantScale,
1004 int32_t inQuantOffset,
1005 float outQuantScale,
1006 int32_t outQuantOffset);
Teresa Charlin970f43b2019-07-01 13:51:07 +01001007
nikraj0193f84a92019-06-05 10:48:46 +01001008template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1009LayerTestResult<T, 2> Rsqrt2dTestCommon(
Mohamed Nour Abouelseouda1d3c6a2018-12-27 12:39:16 +00001010 armnn::IWorkloadFactory& workloadFactory,
1011 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1012 const armnn::TensorInfo inputTensorInfo,
1013 const armnn::TensorInfo outputTensorInfo,
nikraj010421e7f2019-06-14 09:40:34 +01001014 const std::vector<float>& inputValues,
1015 const std::vector<float>& expectedOutputValues);
Mohamed Nour Abouelseouda1d3c6a2018-12-27 12:39:16 +00001016
nikraj0193f84a92019-06-05 10:48:46 +01001017template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1018LayerTestResult<T, 2> Rsqrt2dTest(
Mohamed Nour Abouelseouda1d3c6a2018-12-27 12:39:16 +00001019 armnn::IWorkloadFactory& workloadFactory,
1020 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1021
nikraj0193f84a92019-06-05 10:48:46 +01001022template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1023LayerTestResult<T, 3> Rsqrt3dTest(
Mohamed Nour Abouelseouda1d3c6a2018-12-27 12:39:16 +00001024 armnn::IWorkloadFactory& workloadFactory,
1025 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1026
nikraj0193f84a92019-06-05 10:48:46 +01001027template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1028LayerTestResult<T, 2> RsqrtZeroTest(
Mohamed Nour Abouelseouda1d3c6a2018-12-27 12:39:16 +00001029 armnn::IWorkloadFactory& workloadFactory,
1030 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1031
nikraj0193f84a92019-06-05 10:48:46 +01001032template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1033LayerTestResult<T, 2> RsqrtNegativeTest(
Mohamed Nour Abouelseouda1d3c6a2018-12-27 12:39:16 +00001034 armnn::IWorkloadFactory& workloadFactory,
1035 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1036
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001037LayerTestResult<float, 4> BatchNormTest(
1038 armnn::IWorkloadFactory& workloadFactory,
1039 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1040
1041LayerTestResult<float, 4> BatchNormNhwcTest(
1042 armnn::IWorkloadFactory& workloadFactory,
1043 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1044
1045LayerTestResult<float, 2> FakeQuantizationTest(
1046 armnn::IWorkloadFactory& workloadFactory,
1047 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1048
Ferran Balaguere52211e2019-06-17 12:23:52 +01001049LayerTestResult<float, 4> L2NormalizationDefaultEpsilonTest(
1050 armnn::IWorkloadFactory& workloadFactory,
1051 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1052 const armnn::DataLayout layout);
1053
1054LayerTestResult<float, 4> L2NormalizationNonDefaultEpsilonTest(
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> L2Normalization1dTest(
1060 armnn::IWorkloadFactory& workloadFactory,
1061 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Matthew Bentham8800c002018-11-19 13:19:28 +00001062 const armnn::DataLayout layout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001063
Ferran Balaguerd73d14f2019-06-10 10:29:54 +01001064LayerTestResult<int16_t, 4> L2Normalization1dInt16Test(
1065 armnn::IWorkloadFactory& workloadFactory,
1066 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1067 const armnn::DataLayout layout);
1068
Ferran Balaguerc6138d82019-06-13 17:23:50 +01001069LayerTestResult<uint8_t, 4> L2Normalization1dUint8Test(
1070 armnn::IWorkloadFactory& workloadFactory,
1071 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1072 const armnn::DataLayout layout);
1073
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001074LayerTestResult<float, 4> L2Normalization2dTest(
1075 armnn::IWorkloadFactory& workloadFactory,
1076 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Matthew Bentham8800c002018-11-19 13:19:28 +00001077 const armnn::DataLayout layout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001078
Ferran Balaguerd73d14f2019-06-10 10:29:54 +01001079LayerTestResult<int16_t, 4> L2Normalization2dInt16Test(
1080 armnn::IWorkloadFactory& workloadFactory,
1081 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1082 const armnn::DataLayout layout);
1083
Ferran Balaguerc6138d82019-06-13 17:23:50 +01001084LayerTestResult<uint8_t, 4> L2Normalization2dUint8Test(
1085 armnn::IWorkloadFactory& workloadFactory,
1086 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1087 const armnn::DataLayout layout);
1088
Matthew Jackson82b15ed2019-07-25 16:14:30 +01001089LayerTestResult<float, 2> L2Normalization2dShapeTest(
1090 armnn::IWorkloadFactory& workloadFactory,
1091 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1092
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001093LayerTestResult<float, 4> L2Normalization3dTest(
1094 armnn::IWorkloadFactory& workloadFactory,
1095 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Matthew Bentham8800c002018-11-19 13:19:28 +00001096 const armnn::DataLayout layout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001097
Ferran Balaguerd73d14f2019-06-10 10:29:54 +01001098LayerTestResult<int16_t, 4> L2Normalization3dInt16Test(
1099 armnn::IWorkloadFactory& workloadFactory,
1100 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1101 const armnn::DataLayout layout);
1102
Ferran Balaguerc6138d82019-06-13 17:23:50 +01001103LayerTestResult<uint8_t, 4> L2Normalization3dUint8Test(
1104 armnn::IWorkloadFactory& workloadFactory,
1105 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1106 const armnn::DataLayout layout);
1107
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001108LayerTestResult<float, 4> L2Normalization4dTest(
1109 armnn::IWorkloadFactory& workloadFactory,
1110 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Matthew Bentham8800c002018-11-19 13:19:28 +00001111 const armnn::DataLayout layout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001112
Ferran Balaguerd73d14f2019-06-10 10:29:54 +01001113LayerTestResult<int16_t, 4> L2Normalization4dInt16Test(
1114 armnn::IWorkloadFactory& workloadFactory,
1115 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1116 const armnn::DataLayout layout);
1117
Ferran Balaguerc6138d82019-06-13 17:23:50 +01001118LayerTestResult<uint8_t, 4> L2Normalization4dUint8Test(
1119 armnn::IWorkloadFactory& workloadFactory,
1120 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1121 const armnn::DataLayout layout);
1122
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001123LayerTestResult<float, 4> ConstantTest(
1124 armnn::IWorkloadFactory& workloadFactory,
1125 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1126
Nina Drozd58ef2c62019-05-16 12:09:18 +01001127LayerTestResult<uint8_t, 4> ConstantUint8SimpleQuantizationScaleNoOffsetTest(
1128 armnn::IWorkloadFactory& workloadFactory,
1129 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1130
1131LayerTestResult<int16_t, 4> ConstantInt16SimpleQuantizationScaleNoOffsetTest(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001132 armnn::IWorkloadFactory& workloadFactory,
1133 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1134
1135LayerTestResult<uint8_t, 4> BoundedReLuUint8Test(
1136 armnn::IWorkloadFactory& workloadFactory,
1137 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1138 float upperBound);
1139
1140LayerTestResult<uint8_t, 4> BoundedReLuUint8Test(
1141 armnn::IWorkloadFactory& workloadFactory,
1142 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1143 float upperBound,
1144 float lowerBound);
1145
Francis Murtagh46c09d02019-05-28 08:15:28 +01001146template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1147LayerTestResult<T, 2> FullyConnectedTest(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001148 armnn::IWorkloadFactory& workloadFactory,
1149 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1150 bool biasEnabled);
1151
1152std::vector<LayerTestResult<uint8_t, 3>> SplitterUint8Test(
1153 armnn::IWorkloadFactory& workloadFactory,
1154 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1155
Ruomei Yan25339c32019-05-28 16:48:20 +01001156std::vector<LayerTestResult<int16_t, 3>> SplitterInt16Test(
1157 armnn::IWorkloadFactory& workloadFactory,
1158 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1159
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001160LayerTestResult<uint8_t, 3> CopyViaSplitterUint8Test(
1161 armnn::IWorkloadFactory& workloadFactory,
1162 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1163
Ruomei Yan25339c32019-05-28 16:48:20 +01001164LayerTestResult<int16_t, 3> CopyViaSplitterInt16Test(
1165 armnn::IWorkloadFactory& workloadFactory,
1166 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1167
Jim Flynn4ed6c832019-05-20 11:02:46 +01001168LayerTestResult<uint8_t, 3> ConcatUint8Test(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001169 armnn::IWorkloadFactory& workloadFactory,
1170 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1171
Jim Flynn4ed6c832019-05-20 11:02:46 +01001172LayerTestResult<uint16_t, 3> ConcatUint16Test(
Jim Flynncbb66aa2019-05-15 13:03:54 +01001173 armnn::IWorkloadFactory& workloadFactory,
1174 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1175
Jim Flynn4ed6c832019-05-20 11:02:46 +01001176LayerTestResult<uint8_t, 3> ConcatUint8DifferentQParamsTest(
Jim Flynncbb66aa2019-05-15 13:03:54 +01001177 armnn::IWorkloadFactory& workloadFactory,
1178 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Ferran Balaguerb2845652019-02-27 09:42:06 +00001179
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001180LayerTestResult<uint8_t, 4> AdditionUint8Test(
1181 armnn::IWorkloadFactory& workloadFactory,
1182 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1183
1184LayerTestResult<uint8_t, 4> AdditionBroadcast1ElementUint8Test(
1185 armnn::IWorkloadFactory& workloadFactory,
1186 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1187
1188LayerTestResult<uint8_t, 4> AdditionBroadcastUint8Test(
1189 armnn::IWorkloadFactory& workloadFactory,
1190 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1191
Sadik Armagan2999a022019-04-09 14:20:12 +01001192LayerTestResult<int16_t, 4> AdditionInt16Test(
1193 armnn::IWorkloadFactory& workloadFactory,
1194 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1195
1196LayerTestResult<int16_t, 4> AdditionBroadcastInt16Test(
1197 armnn::IWorkloadFactory& workloadFactory,
1198 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1199
1200LayerTestResult<int16_t, 4> AdditionBroadcast1ElementInt16Test(
1201 armnn::IWorkloadFactory& workloadFactory,
1202 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1203
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001204LayerTestResult<uint8_t, 4> SubtractionUint8Test(
1205 armnn::IWorkloadFactory& workloadFactory,
1206 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1207
1208LayerTestResult<uint8_t, 4> SubtractionBroadcast1ElementUint8Test(
1209 armnn::IWorkloadFactory& workloadFactory,
1210 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1211
1212LayerTestResult<uint8_t, 4> SubtractionBroadcastUint8Test(
1213 armnn::IWorkloadFactory& workloadFactory,
1214 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1215
Sadik Armagan2999a022019-04-09 14:20:12 +01001216LayerTestResult<int16_t, 4> SubtractionInt16Test(
1217 armnn::IWorkloadFactory& workloadFactory,
1218 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1219
1220LayerTestResult<int16_t, 4> SubtractionBroadcast1ElementInt16Test(
1221 armnn::IWorkloadFactory& workloadFactory,
1222 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1223
1224LayerTestResult<int16_t, 4> SubtractionBroadcastInt16Test(
1225 armnn::IWorkloadFactory& workloadFactory,
1226 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1227
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001228LayerTestResult<uint8_t, 4> CompareActivationUint8Test(
1229 armnn::IWorkloadFactory& workloadFactory,
1230 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1231 armnn::IWorkloadFactory& refWorkloadFactory,
1232 armnn::ActivationFunction f);
1233
Teresa Charlin18515e22019-04-24 10:17:46 +01001234LayerTestResult<int16_t, 4> CompareActivationInt16Test(
1235 armnn::IWorkloadFactory& workloadFactory,
1236 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1237 armnn::IWorkloadFactory& refWorkloadFactory,
1238 armnn::ActivationFunction f);
1239
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001240LayerTestResult<uint8_t, 2> CompareSoftmaxUint8Test(
1241 armnn::IWorkloadFactory& workloadFactory,
1242 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1243 armnn::IWorkloadFactory& refWorkloadFactory,
1244 float beta);
1245
1246LayerTestResult<uint8_t, 4> MultiplicationUint8Test(
1247 armnn::IWorkloadFactory& workloadFactory,
1248 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1249
1250LayerTestResult<uint8_t, 4> MultiplicationBroadcast1ElementUint8Test(
1251 armnn::IWorkloadFactory& workloadFactory,
1252 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1253
1254LayerTestResult<uint8_t, 4> MultiplicationBroadcast1DVectorUint8Test(
1255 armnn::IWorkloadFactory& workloadFactory,
1256 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1257
Sadik Armagan2999a022019-04-09 14:20:12 +01001258LayerTestResult<int16_t, 4> MultiplicationInt16Test(
1259 armnn::IWorkloadFactory& workloadFactory,
1260 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1261
1262LayerTestResult<int16_t, 4> MultiplicationBroadcast1ElementInt16Test(
1263 armnn::IWorkloadFactory& workloadFactory,
1264 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1265
1266LayerTestResult<int16_t, 4> MultiplicationBroadcast1DVectorInt16Test(
1267 armnn::IWorkloadFactory& workloadFactory,
1268 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1269
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001270LayerTestResult<uint8_t, 4> DivisionUint8Test(
1271 armnn::IWorkloadFactory& workloadFactory,
1272 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1273
1274LayerTestResult<uint8_t, 4> DivisionBroadcast1ElementUint8Test(
1275 armnn::IWorkloadFactory& workloadFactory,
1276 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1277
1278LayerTestResult<uint8_t, 4> DivisionBroadcast1DVectorUint8Test(
1279 armnn::IWorkloadFactory& workloadFactory,
1280 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1281
Sadik Armagan2999a022019-04-09 14:20:12 +01001282LayerTestResult<int16_t, 4> DivisionInt16Test(
1283 armnn::IWorkloadFactory& workloadFactory,
1284 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1285
1286LayerTestResult<int16_t, 4> DivisionBroadcast1ElementInt16Test(
1287 armnn::IWorkloadFactory& workloadFactory,
1288 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1289
1290LayerTestResult<int16_t, 4> DivisionBroadcast1DVectorInt16Test(
1291 armnn::IWorkloadFactory& workloadFactory,
1292 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1293
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001294LayerTestResult<uint8_t, 4> SimpleConvolution2d3x5Uint8Test(
1295 armnn::IWorkloadFactory& workloadFactory,
1296 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1297 bool biasEnabled,
Matthew Bentham8800c002018-11-19 13:19:28 +00001298 const armnn::DataLayout layout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001299
1300LayerTestResult<uint8_t, 4> SimpleConvolution2d3x3Uint8Test(
1301 armnn::IWorkloadFactory& workloadFactory,
1302 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1303 bool biasEnabled,
Matthew Bentham8800c002018-11-19 13:19:28 +00001304 const armnn::DataLayout layout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001305
Mike Kelly2f80f6e2019-05-16 12:41:34 +01001306LayerTestResult<int16_t, 4> SimpleConvolution2d3x5QSymm16Test(
1307 armnn::IWorkloadFactory& workloadFactory,
1308 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1309 bool biasEnabled,
1310 const armnn::DataLayout layout);
1311
1312LayerTestResult<int16_t, 4> SimpleConvolution2d3x3QSymm16Test(
1313 armnn::IWorkloadFactory& workloadFactory,
1314 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1315 bool biasEnabled,
1316 const armnn::DataLayout layout);
1317
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001318LayerTestResult<uint8_t, 4> DepthwiseConvolution2dUint8Test(
1319 armnn::IWorkloadFactory& workloadFactory,
1320 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1321 bool biasEnabled,
Matthew Bentham8800c002018-11-19 13:19:28 +00001322 const armnn::DataLayout layout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001323
1324LayerTestResult<uint8_t, 4> DepthwiseConvolution2dDepthMul1Uint8Test(
1325 armnn::IWorkloadFactory& workloadFactory,
1326 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1327 bool biasEnabled,
Matthew Bentham8800c002018-11-19 13:19:28 +00001328 const armnn::DataLayout layout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001329
Ruomei Yan88d44b82019-05-23 14:29:06 +01001330LayerTestResult<int16_t, 4> DepthwiseConvolution2dInt16Test(
1331 armnn::IWorkloadFactory& workloadFactory,
1332 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1333 bool biasEnabled,
1334 const armnn::DataLayout layout);
1335
1336LayerTestResult<int16_t, 4> DepthwiseConvolution2dDepthMul1Int16Test(
1337 armnn::IWorkloadFactory& workloadFactory,
1338 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1339 bool biasEnabled,
1340 const armnn::DataLayout layout);
1341
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001342LayerTestResult<uint8_t, 4> ConstantLinearActivationUint8Test(
1343 armnn::IWorkloadFactory& workloadFactory,
1344 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1345
Teresa Charlin18515e22019-04-24 10:17:46 +01001346LayerTestResult<int16_t, 4> ConstantLinearActivationInt16Test(
1347 armnn::IWorkloadFactory& workloadFactory,
1348 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1349
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001350LayerTestResult<uint8_t, 4> BatchNormUint8Test(
1351 armnn::IWorkloadFactory& workloadFactory,
1352 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1353
1354LayerTestResult<uint8_t, 4> BatchNormUint8NhwcTest(
1355 armnn::IWorkloadFactory& workloadFactory,
1356 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1357
Matteo Martincighf5507132019-06-04 10:59:47 +01001358LayerTestResult<int16_t, 4> BatchNormInt16Test(
1359 armnn::IWorkloadFactory& workloadFactory,
1360 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1361
1362LayerTestResult<int16_t, 4> BatchNormInt16NhwcTest(
1363 armnn::IWorkloadFactory& workloadFactory,
1364 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1365
Nina Drozd58ef2c62019-05-16 12:09:18 +01001366LayerTestResult<uint8_t, 4> ConstantUint8CustomQuantizationScaleAndOffsetTest(
1367 armnn::IWorkloadFactory& workloadFactory,
1368 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1369
1370LayerTestResult<int16_t, 4> ConstantInt16CustomQuantizationScaleAndOffsetTest(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001371 armnn::IWorkloadFactory& workloadFactory,
1372 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1373
1374LayerTestResult<uint8_t, 1> Concatenation1dUint8Test(
1375 armnn::IWorkloadFactory& workloadFactory,
1376 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1377
1378LayerTestResult<uint8_t, 2> Concatenation2dDim0Uint8Test(
1379 armnn::IWorkloadFactory& workloadFactory,
1380 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1381
1382LayerTestResult<uint8_t, 2> Concatenation2dDim1Uint8Test(
1383 armnn::IWorkloadFactory& workloadFactory,
1384 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1385
1386LayerTestResult<uint8_t, 2> Concatenation2dDim0DiffInputDimsUint8Test(
1387 armnn::IWorkloadFactory& workloadFactory,
1388 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1389
1390LayerTestResult<uint8_t, 2> Concatenation2dDim1DiffInputDimsUint8Test(
1391 armnn::IWorkloadFactory& workloadFactory,
1392 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1393
1394LayerTestResult<uint8_t, 3> Concatenation3dDim0Uint8Test(
1395 armnn::IWorkloadFactory& workloadFactory,
1396 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1397
1398LayerTestResult<uint8_t, 3> Concatenation3dDim1Uint8Test(
1399 armnn::IWorkloadFactory& workloadFactory,
1400 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1401
1402LayerTestResult<uint8_t, 3> Concatenation3dDim2Uint8Test(
1403 armnn::IWorkloadFactory& workloadFactory,
narpra015cdda352018-11-19 15:30:27 +00001404 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1405 bool useSubtensor);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001406
1407LayerTestResult<uint8_t, 3> Concatenation3dDim0DiffInputDimsUint8Test(
1408 armnn::IWorkloadFactory& workloadFactory,
1409 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1410
1411LayerTestResult<uint8_t, 3> Concatenation3dDim1DiffInputDimsUint8Test(
1412 armnn::IWorkloadFactory& workloadFactory,
1413 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1414
1415LayerTestResult<uint8_t, 3> Concatenation3dDim2DiffInputDimsUint8Test(
1416 armnn::IWorkloadFactory& workloadFactory,
narpra015cdda352018-11-19 15:30:27 +00001417 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1418 bool useSubtensor);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001419
kevmay012b4d88e2019-01-24 14:05:09 +00001420LayerTestResult<uint8_t, 4> EqualSimpleTest(
FrancisMurtagh30cdfca2018-12-18 12:57:35 +00001421 armnn::IWorkloadFactory& workloadFactory,
1422 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1423
kevmay012b4d88e2019-01-24 14:05:09 +00001424LayerTestResult<uint8_t, 4> EqualBroadcast1ElementTest(
FrancisMurtagh30cdfca2018-12-18 12:57:35 +00001425 armnn::IWorkloadFactory& workloadFactory,
1426 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1427
kevmay012b4d88e2019-01-24 14:05:09 +00001428LayerTestResult<uint8_t, 4> EqualBroadcast1DVectorTest(
FrancisMurtagh30cdfca2018-12-18 12:57:35 +00001429 armnn::IWorkloadFactory& workloadFactory,
1430 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1431
1432LayerTestResult<uint8_t, 4> EqualUint8Test(
1433 armnn::IWorkloadFactory& workloadFactory,
1434 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1435
1436LayerTestResult<uint8_t, 4> EqualBroadcast1ElementUint8Test(
1437 armnn::IWorkloadFactory& workloadFactory,
1438 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1439
1440LayerTestResult<uint8_t, 4> EqualBroadcast1DVectorUint8Test(
1441 armnn::IWorkloadFactory& workloadFactory,
1442 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1443
kevmay012b4d88e2019-01-24 14:05:09 +00001444LayerTestResult<uint8_t, 4> GreaterSimpleTest(
FrancisMurtagh878f0232018-12-19 10:56:15 +00001445 armnn::IWorkloadFactory& workloadFactory,
1446 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1447
kevmay012b4d88e2019-01-24 14:05:09 +00001448LayerTestResult<uint8_t, 4> GreaterBroadcast1ElementTest(
FrancisMurtagh878f0232018-12-19 10:56:15 +00001449 armnn::IWorkloadFactory& workloadFactory,
1450 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1451
kevmay012b4d88e2019-01-24 14:05:09 +00001452LayerTestResult<uint8_t, 4> GreaterBroadcast1DVectorTest(
FrancisMurtagh878f0232018-12-19 10:56:15 +00001453 armnn::IWorkloadFactory& workloadFactory,
1454 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1455
1456LayerTestResult<uint8_t, 4> GreaterUint8Test(
1457 armnn::IWorkloadFactory& workloadFactory,
1458 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1459
1460LayerTestResult<uint8_t, 4> GreaterBroadcast1ElementUint8Test(
1461 armnn::IWorkloadFactory& workloadFactory,
1462 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1463
1464LayerTestResult<uint8_t, 4> GreaterBroadcast1DVectorUint8Test(
1465 armnn::IWorkloadFactory& workloadFactory,
1466 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1467
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001468LayerTestResult<float, 2> FullyConnectedLargeTest(
1469 armnn::IWorkloadFactory& workloadFactory,
1470 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1471 bool transposeWeights);
1472
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001473LayerTestResult<uint8_t, 2> PadUint82dTest(
1474 armnn::IWorkloadFactory& workloadFactory,
1475 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1476
David Monahan34757812019-06-19 11:47:21 +01001477LayerTestResult<uint8_t, 2> PadUint82dCustomPaddingTest(
1478 armnn::IWorkloadFactory& workloadFactory,
1479 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1480
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001481LayerTestResult<uint8_t, 3> PadUint83dTest(
1482 armnn::IWorkloadFactory& workloadFactory,
1483 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1484
1485LayerTestResult<uint8_t, 4> PadUint84dTest(
1486 armnn::IWorkloadFactory& workloadFactory,
1487 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1488
1489LayerTestResult<float, 2> PadFloat322dTest(
1490 armnn::IWorkloadFactory& workloadFactory,
1491 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1492
David Monahan34757812019-06-19 11:47:21 +01001493LayerTestResult<float, 2> PadFloat322dCustomPaddingTest(
1494 armnn::IWorkloadFactory& workloadFactory,
1495 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1496
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001497LayerTestResult<float, 3> PadFloat323dTest(
1498 armnn::IWorkloadFactory& workloadFactory,
1499 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1500
1501LayerTestResult<float, 4> PadFloat324dTest(
1502 armnn::IWorkloadFactory& workloadFactory,
1503 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1504
Narumol Prangnawarate6eaf662019-07-08 08:57:17 +01001505template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1506LayerTestResult<T, 2> Pad2dTestCommon(
1507 armnn::IWorkloadFactory& workloadFactory,
1508 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1509 float qScale,
1510 int32_t qOffset,
1511 const float customPaddingValue = 0.0f);
1512
1513template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1514LayerTestResult<T, 3> Pad3dTestCommon(
1515 armnn::IWorkloadFactory& workloadFactory,
1516 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1517 float qScale,
1518 int32_t qOffset);
1519
1520template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1521LayerTestResult<T, 4> Pad4dTestCommon(
1522 armnn::IWorkloadFactory& workloadFactory,
1523 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1524 float qScale,
1525 int32_t qOffset);
1526
Jan Eilers38e05bd2019-06-26 13:10:09 +01001527void LstmUtilsZeroVectorTest();
1528void LstmUtilsMeanStddevNormalizationNoneZeroInputTest();
1529void LstmUtilsMeanStddevNormalizationAllZeroInputTest();
1530void LstmUtilsMeanStddevNormalizationMixedZeroInputTest();
1531void LstmUtilsVectorBatchVectorCwiseProductTest();
1532void LstmUtilsVectorBatchVectorAddTest();
1533
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001534LayerTestResult<float, 2> LstmLayerFloat32WithCifgWithPeepholeNoProjectionTest(
1535 armnn::IWorkloadFactory& workloadFactory,
1536 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1537
1538LayerTestResult<float, 2> LstmLayerFloat32NoCifgNoPeepholeNoProjectionTest(
1539 armnn::IWorkloadFactory& workloadFactory,
1540 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1541
1542LayerTestResult<float, 2> LstmLayerFloat32NoCifgWithPeepholeWithProjectionTest(
1543 armnn::IWorkloadFactory& workloadFactory,
1544 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1545
Jan Eilers38e05bd2019-06-26 13:10:09 +01001546LayerTestResult<float, 2> LstmLayerFloat32NoCifgWithPeepholeWithProjectionWithLayerNormTest(
1547 armnn::IWorkloadFactory& workloadFactory,
1548 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1549
Conor Kennedyb9971c92019-05-07 07:14:23 +01001550LayerTestResult<int16_t, 2> LstmLayerInt16NoCifgNoPeepholeNoProjectionTest(
1551 armnn::IWorkloadFactory& workloadFactory,
1552 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1553
1554LayerTestResult<int16_t, 2> LstmLayerInt16WithCifgWithPeepholeNoProjectionTest(
1555 armnn::IWorkloadFactory& workloadFactory,
1556 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1557
1558LayerTestResult<int16_t, 2> LstmLayerInt16NoCifgWithPeepholeWithProjectionTest(
1559 armnn::IWorkloadFactory& workloadFactory,
1560 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1561
1562LayerTestResult<int16_t, 2> LstmLayerInt16NoCifgNoPeepholeNoProjectionInt16ConstantTest(
1563 armnn::IWorkloadFactory& workloadFactory,
1564 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1565
James Conroy9c3cae82019-08-01 16:01:48 +01001566// QuantizedLstm
1567LayerTestResult<uint8_t, 2> QuantizedLstmTest(
1568 armnn::IWorkloadFactory& workloadFactory,
1569 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1570
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001571LayerTestResult<float, 4> SimpleConvertFp16ToFp32Test(
1572 armnn::IWorkloadFactory& workloadFactory,
1573 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1574
1575LayerTestResult<armnn::Half, 4> SimpleConvertFp32ToFp16Test(
1576 armnn::IWorkloadFactory& workloadFactory,
1577 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1578
Éanna Ó Catháinde705582018-12-03 13:04:22 +00001579LayerTestResult<float, 4> MaximumSimpleTest(
1580 armnn::IWorkloadFactory& workloadFactory,
1581 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1582
1583LayerTestResult<float, 4> MaximumBroadcast1ElementTest(
1584 armnn::IWorkloadFactory& workloadFactory,
1585 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1586
1587LayerTestResult<float, 4> MaximumBroadcast1DVectorTest(
1588 armnn::IWorkloadFactory& workloadFactory,
1589 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1590
1591LayerTestResult<uint8_t , 4> MaximumUint8Test(
1592 armnn::IWorkloadFactory& workloadFactory,
1593 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1594
1595LayerTestResult<uint8_t, 4> MaximumBroadcast1ElementUint8Test(
1596 armnn::IWorkloadFactory& workloadFactory,
1597 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1598
1599LayerTestResult<uint8_t, 4> MaximumBroadcast1DVectorUint8Test(
1600 armnn::IWorkloadFactory& workloadFactory,
1601 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1602
Sadik Armagan2999a022019-04-09 14:20:12 +01001603LayerTestResult<int16_t , 4> MaximumInt16Test(
1604 armnn::IWorkloadFactory& workloadFactory,
1605 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1606
1607LayerTestResult<int16_t, 4> MaximumBroadcast1ElementInt16Test(
1608 armnn::IWorkloadFactory& workloadFactory,
1609 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1610
1611LayerTestResult<int16_t, 4> MaximumBroadcast1DVectorInt16Test(
1612 armnn::IWorkloadFactory& workloadFactory,
1613 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1614
James Conroy4d1ff582019-06-10 17:06:39 +01001615template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1616LayerTestResult<T, 1> MeanSimpleTest(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001617 armnn::IWorkloadFactory& workloadFactory,
1618 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1619
James Conroy4d1ff582019-06-10 17:06:39 +01001620template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1621LayerTestResult<T, 3> MeanSimpleAxisTest(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001622 armnn::IWorkloadFactory& workloadFactory,
1623 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1624
James Conroy4d1ff582019-06-10 17:06:39 +01001625template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1626LayerTestResult<T, 4> MeanKeepDimsTest(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001627 armnn::IWorkloadFactory& workloadFactory,
1628 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1629
James Conroy4d1ff582019-06-10 17:06:39 +01001630template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1631LayerTestResult<T, 4> MeanMultipleDimsTest(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001632 armnn::IWorkloadFactory& workloadFactory,
1633 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1634
James Conroy4d1ff582019-06-10 17:06:39 +01001635template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1636LayerTestResult<T, 1> MeanVts1Test(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001637 armnn::IWorkloadFactory& workloadFactory,
1638 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1639
James Conroy4d1ff582019-06-10 17:06:39 +01001640template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1641LayerTestResult<T, 3> MeanVts2Test(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001642 armnn::IWorkloadFactory& workloadFactory,
1643 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1644
James Conroy4d1ff582019-06-10 17:06:39 +01001645template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1646LayerTestResult<T, 3> MeanVts3Test(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001647 armnn::IWorkloadFactory& workloadFactory,
1648 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1649
Éanna Ó Catháin20e58802018-12-04 10:29:06 +00001650LayerTestResult<float, 4> MinimumBroadcast1ElementTest1(
1651 armnn::IWorkloadFactory& workloadFactory,
1652 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1653
1654LayerTestResult<float, 4> MinimumBroadcast1ElementTest2(
1655 armnn::IWorkloadFactory& workloadFactory,
1656 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1657
1658LayerTestResult<uint8_t, 4> MinimumBroadcast1DVectorUint8Test(
1659 armnn::IWorkloadFactory & workloadFactory,
1660 const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager);
1661
Sadik Armagan2999a022019-04-09 14:20:12 +01001662LayerTestResult<int16_t , 4> MinimumInt16Test(
1663 armnn::IWorkloadFactory& workloadFactory,
1664 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1665
1666LayerTestResult<int16_t, 4> MinimumBroadcast1ElementInt16Test(
1667 armnn::IWorkloadFactory& workloadFactory,
1668 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1669
1670LayerTestResult<int16_t, 4> MinimumBroadcast1DVectorInt16Test(
1671 armnn::IWorkloadFactory& workloadFactory,
1672 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1673
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001674LayerTestResult<float, 4> AdditionAfterMaxPoolTest(
1675 armnn::IWorkloadFactory& workloadFactory,
1676 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1677
1678LayerTestResult<float, 4> SpaceToBatchNdSimpleFloat32Test(
1679 armnn::IWorkloadFactory& workloadFactory,
1680 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1681
1682LayerTestResult<float, 4> SpaceToBatchNdMultiChannelsFloat32Test(
1683 armnn::IWorkloadFactory& workloadFactory,
1684 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1685
1686LayerTestResult<float, 4> SpaceToBatchNdMultiBlockFloat32Test(
1687 armnn::IWorkloadFactory& workloadFactory,
1688 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1689
1690LayerTestResult<float, 4> SpaceToBatchNdPaddingFloat32Test(
1691 armnn::IWorkloadFactory& workloadFactory,
1692 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1693
1694LayerTestResult<uint8_t, 4> SpaceToBatchNdSimpleUint8Test(
1695 armnn::IWorkloadFactory& workloadFactory,
1696 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1697
1698LayerTestResult<uint8_t, 4> SpaceToBatchNdMultiChannelsUint8Test(
1699 armnn::IWorkloadFactory& workloadFactory,
1700 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1701
1702LayerTestResult<uint8_t, 4> SpaceToBatchNdMultiBlockUint8Test(
1703 armnn::IWorkloadFactory& workloadFactory,
1704 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1705
1706LayerTestResult<uint8_t, 4> SpaceToBatchNdPaddingUint8Test(
1707 armnn::IWorkloadFactory& workloadFactory,
1708 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1709
1710LayerTestResult<float, 4> SpaceToBatchNdSimpleNHWCFloat32Test(
1711 armnn::IWorkloadFactory& workloadFactory,
1712 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1713
1714LayerTestResult<float, 4> SpaceToBatchNdMultiChannelsNHWCFloat32Test(
1715 armnn::IWorkloadFactory& workloadFactory,
1716 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1717
1718LayerTestResult<float, 4> SpaceToBatchNdMultiBlockNHWCFloat32Test(
1719 armnn::IWorkloadFactory& workloadFactory,
1720 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1721
1722LayerTestResult<float, 4> SpaceToBatchNdPaddingNHWCFloat32Test(
1723 armnn::IWorkloadFactory& workloadFactory,
1724 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1725
1726LayerTestResult<uint8_t, 4> SpaceToBatchNdSimpleNHWCUint8Test(
1727 armnn::IWorkloadFactory& workloadFactory,
1728 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1729
1730LayerTestResult<uint8_t, 4> SpaceToBatchNdMultiChannelsNHWCUint8Test(
1731 armnn::IWorkloadFactory& workloadFactory,
1732 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1733
1734LayerTestResult<uint8_t, 4> SpaceToBatchNdMultiBlockNHWCUint8Test(
1735 armnn::IWorkloadFactory& workloadFactory,
1736 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1737
1738LayerTestResult<uint8_t, 4> SpaceToBatchNdPaddingNHWCUint8Test(
1739 armnn::IWorkloadFactory& workloadFactory,
1740 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1741
nikraj01120522a2019-05-31 11:33:07 +01001742LayerTestResult<int16_t, 4> SpaceToBatchNdSimpleUint16Test(
1743 armnn::IWorkloadFactory& workloadFactory,
1744 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1745
1746LayerTestResult<int16_t, 4> SpaceToBatchNdMultiChannelsUint16Test(
1747 armnn::IWorkloadFactory& workloadFactory,
1748 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1749
1750LayerTestResult<int16_t, 4> SpaceToBatchNdMultiBlockUint16Test(
1751 armnn::IWorkloadFactory& workloadFactory,
1752 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1753
1754LayerTestResult<int16_t, 4> SpaceToBatchNdPaddingUint16Test(
1755 armnn::IWorkloadFactory& workloadFactory,
1756 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1757
1758LayerTestResult<int16_t, 4> SpaceToBatchNdSimpleNHWCUint16Test(
1759 armnn::IWorkloadFactory& workloadFactory,
1760 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1761
1762LayerTestResult<int16_t, 4> SpaceToBatchNdMultiChannelsNHWCUint16Test(
1763 armnn::IWorkloadFactory& workloadFactory,
1764 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1765
1766LayerTestResult<int16_t, 4> SpaceToBatchNdMultiBlockNHWCUint16Test(
1767 armnn::IWorkloadFactory& workloadFactory,
1768 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1769
1770LayerTestResult<int16_t, 4> SpaceToBatchNdPaddingNHWCUint16Test(
1771 armnn::IWorkloadFactory& workloadFactory,
1772 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1773
Francis Murtagh57f13d52019-06-24 14:24:36 +01001774LayerTestResult<float, 4> BatchToSpaceNdNhwcTest1(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001775 armnn::IWorkloadFactory& workloadFactory,
1776 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1777
Francis Murtagh57f13d52019-06-24 14:24:36 +01001778LayerTestResult<float, 4> BatchToSpaceNdNhwcTest2(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001779 armnn::IWorkloadFactory& workloadFactory,
1780 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1781
Francis Murtagh57f13d52019-06-24 14:24:36 +01001782LayerTestResult<float, 4> BatchToSpaceNdNhwcTest3(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001783 armnn::IWorkloadFactory& workloadFactory,
1784 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1785
Francis Murtagh57f13d52019-06-24 14:24:36 +01001786LayerTestResult<float, 4> BatchToSpaceNdNhwcTest4(
Nattapat Chaimanowong3ee14222019-02-27 10:28:09 +00001787 armnn::IWorkloadFactory& workloadFactory,
1788 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1789
Francis Murtagh57f13d52019-06-24 14:24:36 +01001790LayerTestResult<float, 4> BatchToSpaceNdNchwTest1(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001791 armnn::IWorkloadFactory &workloadFactory,
1792 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1793
Francis Murtagh57f13d52019-06-24 14:24:36 +01001794LayerTestResult<float, 4> BatchToSpaceNdNchwTest2(
Nattapat Chaimanowong3ee14222019-02-27 10:28:09 +00001795 armnn::IWorkloadFactory &workloadFactory,
1796 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Mike Kelly831faed2018-11-28 11:52:08 +00001797
Francis Murtagh57f13d52019-06-24 14:24:36 +01001798LayerTestResult<float, 4> BatchToSpaceNdNchwTest3(
Nattapat Chaimanowong3ee14222019-02-27 10:28:09 +00001799 armnn::IWorkloadFactory &workloadFactory,
1800 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Mike Kelly831faed2018-11-28 11:52:08 +00001801
Francis Murtagh57f13d52019-06-24 14:24:36 +01001802LayerTestResult<uint8_t, 4> BatchToSpaceNdNhwcTest5(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001803 armnn::IWorkloadFactory &workloadFactory,
1804 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Nattapat Chaimanowong1216b582018-11-23 15:33:41 +00001805
Francis Murtagh57f13d52019-06-24 14:24:36 +01001806LayerTestResult<uint8_t, 4> BatchToSpaceNdNhwcTest6(
Nattapat Chaimanowong3ee14222019-02-27 10:28:09 +00001807 armnn::IWorkloadFactory &workloadFactory,
1808 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Mike Kelly831faed2018-11-28 11:52:08 +00001809
Francis Murtagh57f13d52019-06-24 14:24:36 +01001810LayerTestResult<uint8_t, 4> BatchToSpaceNdNhwcTest7(
Nattapat Chaimanowong3ee14222019-02-27 10:28:09 +00001811 armnn::IWorkloadFactory &workloadFactory,
1812 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Mike Kelly831faed2018-11-28 11:52:08 +00001813
Francis Murtagh57f13d52019-06-24 14:24:36 +01001814LayerTestResult<uint8_t, 4> BatchToSpaceNdNchwTest4(
Nattapat Chaimanowong3ee14222019-02-27 10:28:09 +00001815 armnn::IWorkloadFactory &workloadFactory,
1816 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Mike Kelly831faed2018-11-28 11:52:08 +00001817
Francis Murtagh57f13d52019-06-24 14:24:36 +01001818LayerTestResult<uint8_t, 4> BatchToSpaceNdNchwTest5(
Nattapat Chaimanowong3ee14222019-02-27 10:28:09 +00001819 armnn::IWorkloadFactory &workloadFactory,
1820 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Mike Kelly831faed2018-11-28 11:52:08 +00001821
Francis Murtagh57f13d52019-06-24 14:24:36 +01001822LayerTestResult<uint8_t, 4> BatchToSpaceNdNchwTest6(
Nattapat Chaimanowong3ee14222019-02-27 10:28:09 +00001823 armnn::IWorkloadFactory &workloadFactory,
1824 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1825
Francis Murtagh57f13d52019-06-24 14:24:36 +01001826LayerTestResult<uint8_t, 4> BatchToSpaceNdNchwTest7(
Nattapat Chaimanowong3ee14222019-02-27 10:28:09 +00001827 armnn::IWorkloadFactory &workloadFactory,
1828 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Mike Kelly831faed2018-11-28 11:52:08 +00001829
Nattapat Chaimanowong1216b582018-11-23 15:33:41 +00001830LayerTestResult<float, 4> StridedSlice4DFloat32Test(
1831 armnn::IWorkloadFactory& workloadFactory,
1832 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Nattapat Chaimanowongcfdcadf2018-12-06 11:54:33 +00001833
Nattapat Chaimanowong1216b582018-11-23 15:33:41 +00001834LayerTestResult<float, 4> StridedSlice4DReverseFloat32Test(
1835 armnn::IWorkloadFactory& workloadFactory,
1836 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1837
1838LayerTestResult<float, 4> StridedSliceSimpleStrideFloat32Test(
1839 armnn::IWorkloadFactory& workloadFactory,
1840 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1841
1842LayerTestResult<float, 4> StridedSliceSimpleRangeMaskFloat32Test(
1843 armnn::IWorkloadFactory& workloadFactory,
1844 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1845
1846LayerTestResult<float, 2> StridedSliceShrinkAxisMaskFloat32Test(
1847 armnn::IWorkloadFactory& workloadFactory,
1848 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1849
1850LayerTestResult<float, 3> StridedSlice3DFloat32Test(
1851 armnn::IWorkloadFactory& workloadFactory,
1852 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1853
1854LayerTestResult<float, 3> StridedSlice3DReverseFloat32Test(
1855 armnn::IWorkloadFactory& workloadFactory,
1856 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1857
1858LayerTestResult<float, 2> StridedSlice2DFloat32Test(
1859 armnn::IWorkloadFactory& workloadFactory,
1860 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1861
1862LayerTestResult<float, 2> StridedSlice2DReverseFloat32Test(
1863 armnn::IWorkloadFactory& workloadFactory,
1864 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1865
1866LayerTestResult<uint8_t, 4> StridedSlice4DUint8Test(
1867 armnn::IWorkloadFactory& workloadFactory,
1868 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1869
1870LayerTestResult<uint8_t, 4> StridedSlice4DReverseUint8Test(
1871 armnn::IWorkloadFactory& workloadFactory,
1872 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1873
1874LayerTestResult<uint8_t, 4> StridedSliceSimpleStrideUint8Test(
1875 armnn::IWorkloadFactory& workloadFactory,
1876 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1877
1878LayerTestResult<uint8_t, 4> StridedSliceSimpleRangeMaskUint8Test(
1879 armnn::IWorkloadFactory& workloadFactory,
1880 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1881
1882LayerTestResult<uint8_t, 2> StridedSliceShrinkAxisMaskUint8Test(
1883 armnn::IWorkloadFactory& workloadFactory,
1884 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1885
1886LayerTestResult<uint8_t, 3> StridedSlice3DUint8Test(
1887 armnn::IWorkloadFactory& workloadFactory,
1888 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1889
1890LayerTestResult<uint8_t, 3> StridedSlice3DReverseUint8Test(
1891 armnn::IWorkloadFactory& workloadFactory,
1892 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1893
1894LayerTestResult<uint8_t, 2> StridedSlice2DUint8Test(
1895 armnn::IWorkloadFactory& workloadFactory,
1896 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1897
1898LayerTestResult<uint8_t, 2> StridedSlice2DReverseUint8Test(
1899 armnn::IWorkloadFactory& workloadFactory,
1900 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Nattapat Chaimanowongcfdcadf2018-12-06 11:54:33 +00001901
Matteo Martincigh42666a12019-05-29 08:53:41 +01001902LayerTestResult<int16_t, 4> StridedSlice4DInt16Test(
1903 armnn::IWorkloadFactory& workloadFactory,
1904 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1905
1906LayerTestResult<int16_t, 4> StridedSlice4DReverseInt16Test(
1907 armnn::IWorkloadFactory& workloadFactory,
1908 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1909
1910LayerTestResult<int16_t, 4> StridedSliceSimpleStrideInt16Test(
1911 armnn::IWorkloadFactory& workloadFactory,
1912 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1913
1914LayerTestResult<int16_t, 4> StridedSliceSimpleRangeMaskInt16Test(
1915 armnn::IWorkloadFactory& workloadFactory,
1916 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1917
1918LayerTestResult<int16_t, 2> StridedSliceShrinkAxisMaskInt16Test(
1919 armnn::IWorkloadFactory& workloadFactory,
1920 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1921
1922LayerTestResult<int16_t, 3> StridedSlice3DInt16Test(
1923 armnn::IWorkloadFactory& workloadFactory,
1924 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1925
1926LayerTestResult<int16_t, 3> StridedSlice3DReverseInt16Test(
1927 armnn::IWorkloadFactory& workloadFactory,
1928 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1929
1930LayerTestResult<int16_t, 2> StridedSlice2DInt16Test(
1931 armnn::IWorkloadFactory& workloadFactory,
1932 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1933
1934LayerTestResult<int16_t, 2> StridedSlice2DReverseInt16Test(
1935 armnn::IWorkloadFactory& workloadFactory,
1936 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1937
Nattapat Chaimanowongcfdcadf2018-12-06 11:54:33 +00001938LayerTestResult<float, 4> Debug4DFloat32Test(
1939 armnn::IWorkloadFactory& workloadFactory,
1940 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1941
1942LayerTestResult<float, 3> Debug3DFloat32Test(
1943 armnn::IWorkloadFactory& workloadFactory,
1944 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1945
1946LayerTestResult<float, 2> Debug2DFloat32Test(
1947 armnn::IWorkloadFactory& workloadFactory,
1948 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1949
1950LayerTestResult<float, 1> Debug1DFloat32Test(
1951 armnn::IWorkloadFactory& workloadFactory,
1952 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1953
1954LayerTestResult<uint8_t, 4> Debug4DUint8Test(
1955 armnn::IWorkloadFactory& workloadFactory,
1956 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1957
1958LayerTestResult<uint8_t, 3> Debug3DUint8Test(
1959 armnn::IWorkloadFactory& workloadFactory,
1960 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1961
1962LayerTestResult<uint8_t, 2> Debug2DUint8Test(
1963 armnn::IWorkloadFactory& workloadFactory,
1964 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1965
1966LayerTestResult<uint8_t, 1> Debug1DUint8Test(
1967 armnn::IWorkloadFactory& workloadFactory,
1968 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Matteo Martincigh49124022019-01-11 13:25:59 +00001969
1970LayerTestResult<uint8_t, 4> PreCompiledConvolution2dTest(
1971 armnn::IWorkloadFactory& workloadFactory,
1972 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1973
1974LayerTestResult<uint8_t, 4> PreCompiledConvolution2dStride2x2Test(
1975 armnn::IWorkloadFactory& workloadFactory,
1976 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1977
1978LayerTestResult<uint8_t, 4> PreCompiledDepthwiseConvolution2dTest(
1979 armnn::IWorkloadFactory & workloadFactory,
1980 const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager);
1981
1982LayerTestResult<uint8_t, 4> PreCompiledDepthwiseConvolution2dStride2x2Test(
1983 armnn::IWorkloadFactory & workloadFactory,
1984 const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager);
1985
1986LayerTestResult<uint8_t, 4> PreCompiledMaxPooling2dTest(
1987 armnn::IWorkloadFactory& workloadFactory,
1988 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1989
1990LayerTestResult<float, 4> Debug4DFloat32Test(
1991 armnn::IWorkloadFactory& workloadFactory,
1992 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1993
1994LayerTestResult<float, 3> Debug3DFloat32Test(
1995 armnn::IWorkloadFactory& workloadFactory,
1996 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1997
1998LayerTestResult<float, 2> Debug2DFloat32Test(
1999 armnn::IWorkloadFactory& workloadFactory,
2000 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
2001
2002LayerTestResult<float, 1> Debug1DFloat32Test(
2003 armnn::IWorkloadFactory& workloadFactory,
2004 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
2005
2006LayerTestResult<uint8_t, 4> Debug4DUint8Test(
2007 armnn::IWorkloadFactory& workloadFactory,
2008 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
2009
2010LayerTestResult<uint8_t, 3> Debug3DUint8Test(
2011 armnn::IWorkloadFactory& workloadFactory,
2012 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
2013
2014LayerTestResult<uint8_t, 2> Debug2DUint8Test(
2015 armnn::IWorkloadFactory& workloadFactory,
2016 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
2017
2018LayerTestResult<uint8_t, 1> Debug1DUint8Test(
2019 armnn::IWorkloadFactory& workloadFactory,
2020 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
narpra014951d842019-01-18 16:53:53 +00002021
2022LayerTestResult<float, 1> Gather1DParamsFloatTest(
2023 armnn::IWorkloadFactory& workloadFactory,
2024 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
2025
2026LayerTestResult<uint8_t, 1> Gather1DParamsUint8Test(
2027 armnn::IWorkloadFactory& workloadFactory,
2028 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
2029
Ellen Norris-Thompsone0dbedf2019-06-24 09:23:38 +01002030LayerTestResult<int16_t, 1> Gather1DParamsInt16Test(
2031 armnn::IWorkloadFactory& workloadFactory,
2032 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
2033
narpra014951d842019-01-18 16:53:53 +00002034LayerTestResult<float, 2> GatherMultiDimParamsFloatTest(
2035 armnn::IWorkloadFactory& workloadFactory,
2036 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
2037
2038LayerTestResult<uint8_t, 2> GatherMultiDimParamsUint8Test(
2039 armnn::IWorkloadFactory& workloadFactory,
2040 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
2041
Ellen Norris-Thompsone0dbedf2019-06-24 09:23:38 +01002042LayerTestResult<int16_t, 2> GatherMultiDimParamsInt16Test(
2043 armnn::IWorkloadFactory& workloadFactory,
2044 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
2045
narpra014951d842019-01-18 16:53:53 +00002046LayerTestResult<float, 4> GatherMultiDimParamsMultiDimIndicesFloatTest(
2047 armnn::IWorkloadFactory& workloadFactory,
2048 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
2049
2050LayerTestResult<uint8_t, 4> GatherMultiDimParamsMultiDimIndicesUint8Test(
2051 armnn::IWorkloadFactory& workloadFactory,
2052 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Nattapat Chaimanowong8a54ac02019-03-29 15:25:04 +00002053
Ellen Norris-Thompsone0dbedf2019-06-24 09:23:38 +01002054LayerTestResult<int16_t, 4> GatherMultiDimParamsMultiDimIndicesInt16Test(
2055 armnn::IWorkloadFactory& workloadFactory,
2056 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
2057
Nattapat Chaimanowongafa4e3a2019-04-02 11:41:45 +01002058LayerTestResult<float, 4> DequantizeSimpleUint8Test(
2059 armnn::IWorkloadFactory& workloadFactory,
2060 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
2061
2062LayerTestResult<float, 4> DequantizeOffsetUint8Test(
2063 armnn::IWorkloadFactory& workloadFactory,
2064 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
2065
2066LayerTestResult<float, 4> DequantizeSimpleInt16Test(
Nattapat Chaimanowong8a54ac02019-03-29 15:25:04 +00002067 armnn::IWorkloadFactory& workloadFactory,
2068 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Nattapat Chaimanowonga0beb3b2019-04-01 17:04:53 +01002069
Keith Davisa57eccb2019-06-14 17:33:22 +01002070LayerTestResult<uint8_t, 4> SpaceToDepthNCHWAsymmQ8Test(
2071 armnn::IWorkloadFactory& workloadFactory,
2072 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
2073
2074LayerTestResult<uint8_t, 4> SpaceToDepthNHWCAsymmQ8Test(
2075 armnn::IWorkloadFactory& workloadFactory,
2076 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
2077
James Conroyd2aa85e2019-07-01 17:12:40 +01002078LayerTestResult<float, 4> SpaceToDepthNHWCFloat32Test1(
Keith Davisa57eccb2019-06-14 17:33:22 +01002079 armnn::IWorkloadFactory& workloadFactory,
2080 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
2081
James Conroyd2aa85e2019-07-01 17:12:40 +01002082LayerTestResult<float, 4> SpaceToDepthNCHWFloat32Test1(
2083 armnn::IWorkloadFactory& workloadFactory,
2084 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
2085
2086LayerTestResult<float, 4> SpaceToDepthNHWCFloat32Test2(
2087 armnn::IWorkloadFactory& workloadFactory,
2088 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
2089
2090LayerTestResult<float, 4> SpaceToDepthNCHWFloat32Test2(
2091 armnn::IWorkloadFactory& workloadFactory,
2092 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
2093
2094LayerTestResult<int16_t, 4> SpaceToDepthNHWCQSymm16Test(
2095 armnn::IWorkloadFactory& workloadFactory,
2096 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
2097
2098LayerTestResult<int16_t, 4> SpaceToDepthNCHWQSymm16Test(
Keith Davisa57eccb2019-06-14 17:33:22 +01002099 armnn::IWorkloadFactory& workloadFactory,
2100 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
2101
Nattapat Chaimanowonga0beb3b2019-04-01 17:04:53 +01002102LayerTestResult<uint8_t, 4> QuantizeSimpleUint8Test(
2103 armnn::IWorkloadFactory& workloadFactory,
2104 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
2105
2106LayerTestResult<uint8_t, 4> QuantizeClampUint8Test(
2107 armnn::IWorkloadFactory& workloadFactory,
2108 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
2109
2110LayerTestResult<int16_t, 4> QuantizeClampInt16Test(
2111 armnn::IWorkloadFactory& workloadFactory,
2112 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Francis Murtagh46c09d02019-05-28 08:15:28 +01002113
Matthew Jacksondba634f2019-08-15 15:14:18 +01002114template <armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
2115std::vector<T> ConvertToDataType(const std::vector<float>& input,
2116 const armnn::TensorInfo& inputTensorInfo)
2117{
2118 std::vector<T> output(input.size());
2119 auto outputTensorInfo = inputTensorInfo;
2120 outputTensorInfo.SetDataType(ArmnnType);
2121
2122 std::unique_ptr<armnn::Encoder<float>> pOutputEncoder = armnn::MakeEncoder<float>(outputTensorInfo, output.data());
2123 armnn::Encoder<float>& rOutputEncoder = *pOutputEncoder;
2124
2125 for (auto it = input.begin(); it != input.end(); ++it)
2126 {
2127 rOutputEncoder.Set(*it);
2128 ++rOutputEncoder;
2129 }
2130 return output;
2131}
2132
2133// Utility method to convert a single value to the correct type
2134template <typename T>
2135T ConvertToDataType(const float& value,
2136 const armnn::TensorInfo& tensorInfo)
2137{
2138 std::vector<T> output(1);
2139 std::unique_ptr<armnn::Encoder<float>> pEncoder = armnn::MakeEncoder<float>(tensorInfo, output.data());
2140 armnn::Encoder<float>& rEncoder = *pEncoder;
2141 rEncoder.Set(value);
2142 return output[0];
2143}
2144
Francis Murtagh46c09d02019-05-28 08:15:28 +01002145template<typename T, typename B>
2146LayerTestResult<T, 2> SimpleFullyConnectedTestImpl(
2147 armnn::IWorkloadFactory& workloadFactory,
2148 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
2149 armnn::TensorInfo inputTensorInfo,
2150 armnn::TensorInfo outputTensorInfo,
2151 armnn::TensorInfo weightsDesc,
2152 armnn::TensorInfo biasesDesc,
2153 boost::multi_array<T, 2>& weights,
2154 boost::multi_array<B, 1>& bias,
2155 boost::multi_array<T, 4>& input,
2156 bool biasEnabled,
2157 bool transposeWeights)
2158{
2159 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2160 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2161
2162 armnn::FullyConnectedQueueDescriptor data;
2163 armnn::WorkloadInfo info;
2164 armnn::ScopedCpuTensorHandle weightsTensor(weightsDesc);
2165 armnn::ScopedCpuTensorHandle biasTensor(biasesDesc);
2166
2167 AllocateAndCopyDataToITensorHandle(&weightsTensor, &weights[0][0]);
2168 AllocateAndCopyDataToITensorHandle(&biasTensor, &bias[0]);
2169
2170 AddInputToWorkload(data, info, inputTensorInfo, inputHandle.get());
2171 AddOutputToWorkload(data, info, outputTensorInfo, outputHandle.get());
2172 data.m_Weight = &weightsTensor;
2173 data.m_Bias = &biasTensor;
2174 data.m_Parameters.m_BiasEnabled = biasEnabled;
2175 data.m_Parameters.m_TransposeWeightMatrix = transposeWeights;
2176
2177 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateFullyConnected(data, info);
2178 LayerTestResult<T, 2> result(outputTensorInfo);
2179
2180 inputHandle->Allocate();
2181 outputHandle->Allocate();
2182 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
2183
2184 ExecuteWorkload(*workload, memoryManager);
2185
2186 CopyDataFromITensorHandle(&result.output[0][0], outputHandle.get());
2187
2188 return result;
2189}
2190
Matthew Jacksondba634f2019-08-15 15:14:18 +01002191template<armnn::DataType ArmnnType, typename T>
2192LayerTestResult<T, 2> FullyConnectedTest(
2193 armnn::IWorkloadFactory& workloadFactory,
2194 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
2195 bool biasEnabled)
Francis Murtagh46c09d02019-05-28 08:15:28 +01002196{
Matthew Jacksondba634f2019-08-15 15:14:18 +01002197 constexpr static unsigned int inputWidth = 3u;
2198 constexpr static unsigned int inputHeight = 2u;
2199 constexpr static unsigned int inputChannels = 1u;
Francis Murtagh46c09d02019-05-28 08:15:28 +01002200
Matthew Jacksondba634f2019-08-15 15:14:18 +01002201 constexpr static unsigned int inputSize = inputWidth * inputHeight * inputChannels;
Francis Murtagh46c09d02019-05-28 08:15:28 +01002202
Matthew Jacksondba634f2019-08-15 15:14:18 +01002203 constexpr static unsigned int outputChannels = 2u;
2204
2205 armnn::TensorInfo inputTensorInfo({ 1, inputChannels, inputHeight, inputWidth }, ArmnnType);
2206 inputTensorInfo.SetQuantizationScale(0.1f);
2207 inputTensorInfo.SetQuantizationOffset(63);
2208
2209 armnn::TensorInfo outputTensorInfo({ 1, outputChannels }, ArmnnType);
2210 outputTensorInfo.SetQuantizationScale(5.f);
2211 outputTensorInfo.SetQuantizationOffset(biasEnabled ? -50 : 10);
2212
2213 armnn::TensorInfo weightsDesc({ outputChannels, inputSize }, ArmnnType);
2214 weightsDesc.SetQuantizationScale(0.2f);
2215 weightsDesc.SetQuantizationOffset(93);
2216
2217 armnn::TensorInfo biasesDesc({ outputChannels }, GetBiasTypeFromWeightsType(weightsDesc.GetDataType()).value());
2218 biasesDesc.SetQuantizationScale(inputTensorInfo.GetQuantizationScale() * weightsDesc.GetQuantizationScale());
2219 biasesDesc.SetQuantizationOffset(0);
2220
2221 LayerTestResult<T, 2> result(outputTensorInfo);
2222
2223 auto input = MakeTensor<T, 4>(inputTensorInfo, ConvertToDataType<ArmnnType>(
2224 {
2225 -1.2f, 6.1f, -3.5f,
2226 18.8f, -5.5f, 2.9f
2227 },
2228 inputTensorInfo));
2229
2230 auto weights = MakeTensor<T, 2>(weightsDesc, ConvertToDataType<ArmnnType>(
2231 {
2232 -8.4f, 20.0f, -10.4f, -8, 16.4f, -11.8f,
2233 23.4f, 10.4f, -14.0f, -3.8f, -11.8f, 11.4f
2234 },
2235 weightsDesc));
2236
2237 auto bias = MakeTensor<int32_t, 1>(biasesDesc, std::vector<int32_t>{9250, 67500});
2238
2239 result = SimpleFullyConnectedTestImpl<T>(
2240 workloadFactory,
2241 memoryManager,
2242 inputTensorInfo, outputTensorInfo,
2243 weightsDesc, biasesDesc,
2244 weights, bias, input,
2245 biasEnabled, true
2246 );
2247
2248 if (biasEnabled)
Francis Murtagh46c09d02019-05-28 08:15:28 +01002249 {
Matthew Jacksondba634f2019-08-15 15:14:18 +01002250 result.outputExpected = MakeTensor<T, 2>(outputTensorInfo,
2251 ConvertToDataType<ArmnnType>({80.f, 1460.f}, outputTensorInfo));
Francis Murtagh46c09d02019-05-28 08:15:28 +01002252 }
Matthew Jacksondba634f2019-08-15 15:14:18 +01002253 else
2254 {
2255 result.outputExpected = MakeTensor<T, 2>(outputTensorInfo,
2256 ConvertToDataType<ArmnnType>({-107.04f, 110.f}, outputTensorInfo));
2257 }
Francis Murtagh46c09d02019-05-28 08:15:28 +01002258
Matthew Jacksondba634f2019-08-15 15:14:18 +01002259 return result;
David Monahan34757812019-06-19 11:47:21 +01002260}
2261
nikraj010421e7f2019-06-14 09:40:34 +01002262template<armnn::DataType ArmnnType, typename T>
nikraj0193f84a92019-06-05 10:48:46 +01002263LayerTestResult<T, 2> Rsqrt2dTestCommon(
2264 armnn::IWorkloadFactory& workloadFactory,
2265 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
2266 const armnn::TensorInfo inputTensorInfo,
2267 const armnn::TensorInfo outputTensorInfo,
nikraj010421e7f2019-06-14 09:40:34 +01002268 const std::vector<float>& inputValues,
2269 const std::vector<float>& expectedOutputValues)
nikraj0193f84a92019-06-05 10:48:46 +01002270{
nikraj010421e7f2019-06-14 09:40:34 +01002271 auto inputTensor = MakeTensor<T, 2>(inputTensorInfo, ConvertToDataType<ArmnnType>(inputValues,inputTensorInfo));
nikraj0193f84a92019-06-05 10:48:46 +01002272
2273 LayerTestResult<T, 2> result(outputTensorInfo);
nikraj010421e7f2019-06-14 09:40:34 +01002274
2275 result.outputExpected = MakeTensor<T, 2>(outputTensorInfo,
2276 ConvertToDataType<ArmnnType>(expectedOutputValues,outputTensorInfo));
nikraj0193f84a92019-06-05 10:48:46 +01002277
2278 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2279 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2280
2281 armnn::RsqrtQueueDescriptor descriptor;
2282
2283 armnn::WorkloadInfo info;
2284
2285 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
2286 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
2287
2288 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateRsqrt(descriptor, info);
2289
2290 inputHandle->Allocate();
2291 outputHandle->Allocate();
2292
2293 CopyDataToITensorHandle(inputHandle.get(), &inputTensor[0][0]);
2294
2295 workload->PostAllocationConfigure();
2296 workload->Execute();
2297
2298 CopyDataFromITensorHandle(&result.output[0][0], outputHandle.get());
2299
2300 return result;
2301}
2302
2303template<armnn::DataType ArmnnType, typename T>
2304LayerTestResult<T, 2> Rsqrt2dTest(
2305 armnn::IWorkloadFactory& workloadFactory,
2306 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
2307{
2308 const armnn::TensorShape inputShape{ 2, 2 };
2309 const armnn::TensorShape outputShape{ 2, 2 };
2310
nikraj010421e7f2019-06-14 09:40:34 +01002311 armnn::TensorInfo inputTensorInfo(inputShape, ArmnnType);
2312 inputTensorInfo.SetQuantizationScale(0.1f);
2313 inputTensorInfo.SetQuantizationOffset(0);
nikraj0193f84a92019-06-05 10:48:46 +01002314
nikraj010421e7f2019-06-14 09:40:34 +01002315 armnn::TensorInfo outputTensorInfo(outputShape, ArmnnType);
2316 outputTensorInfo.SetQuantizationScale(0.1f);
2317 outputTensorInfo.SetQuantizationOffset(0);
nikraj0193f84a92019-06-05 10:48:46 +01002318
nikraj010421e7f2019-06-14 09:40:34 +01002319 std::vector<float> inputValues
2320 {
2321 1.f, 4.f,
2322 16.f, 25.f
2323 };
nikraj0193f84a92019-06-05 10:48:46 +01002324
nikraj010421e7f2019-06-14 09:40:34 +01002325 std::vector<float> expectedOutputValues
2326 {
2327 1.f, 0.5f,
2328 0.25f, 0.2f
2329 };
2330
2331 return Rsqrt2dTestCommon<ArmnnType>(workloadFactory, memoryManager,
nikraj0193f84a92019-06-05 10:48:46 +01002332 inputTensorInfo, outputTensorInfo,
2333 inputValues, expectedOutputValues);
2334}
2335
2336template<armnn::DataType ArmnnType, typename T>
2337LayerTestResult<T, 3> Rsqrt3dTest(
2338 armnn::IWorkloadFactory& workloadFactory,
2339 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
2340{
2341 const armnn::TensorShape inputShape{ 3, 1, 2 };
2342 const armnn::TensorShape outputShape{ 3, 1, 2 };
2343
nikraj010421e7f2019-06-14 09:40:34 +01002344 armnn::TensorInfo inputTensorInfo(inputShape, ArmnnType);
2345 inputTensorInfo.SetQuantizationScale(0.1f);
2346 inputTensorInfo.SetQuantizationOffset(0);
nikraj0193f84a92019-06-05 10:48:46 +01002347
nikraj010421e7f2019-06-14 09:40:34 +01002348 armnn::TensorInfo outputTensorInfo(outputShape, ArmnnType);
2349 outputTensorInfo.SetQuantizationScale(0.1f);
2350 outputTensorInfo.SetQuantizationOffset(0);
nikraj0193f84a92019-06-05 10:48:46 +01002351
nikraj010421e7f2019-06-14 09:40:34 +01002352 std::vector<float> inputValues
2353 {
2354 1.f, 4.f, 16.f,
2355 25.f, 64.f, 100.f
2356 };
nikraj0193f84a92019-06-05 10:48:46 +01002357
nikraj010421e7f2019-06-14 09:40:34 +01002358 std::vector<float> expectedOutputValues
2359 {
2360 1.f, 0.5f, 0.25f,
2361 0.2f, 0.125f, 0.1f
2362 };
2363
2364 auto inputTensor = MakeTensor<T, 3>(inputTensorInfo, ConvertToDataType<ArmnnType>(inputValues,inputTensorInfo));
nikraj0193f84a92019-06-05 10:48:46 +01002365
2366 LayerTestResult<T, 3> result(outputTensorInfo);
nikraj010421e7f2019-06-14 09:40:34 +01002367 result.outputExpected = MakeTensor<T, 3>(outputTensorInfo,
2368 ConvertToDataType<ArmnnType>(expectedOutputValues,outputTensorInfo));
nikraj0193f84a92019-06-05 10:48:46 +01002369
2370 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2371 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2372
2373 armnn::RsqrtQueueDescriptor descriptor;
2374
2375 armnn::WorkloadInfo info;
2376
2377 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
2378 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
2379
2380 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateRsqrt(descriptor, info);
2381
2382 inputHandle->Allocate();
2383 outputHandle->Allocate();
2384
2385 CopyDataToITensorHandle(inputHandle.get(), &inputTensor[0][0][0]);
2386
2387 workload->PostAllocationConfigure();
2388 workload->Execute();
2389
2390 CopyDataFromITensorHandle(&result.output[0][0][0], outputHandle.get());
2391
2392 return result;
2393}
2394
2395template<armnn::DataType ArmnnType, typename T>
2396LayerTestResult<T, 2> RsqrtZeroTest(
2397 armnn::IWorkloadFactory& workloadFactory,
2398 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
2399{
2400 const armnn::TensorShape inputShape{ 1, 2 };
2401 const armnn::TensorShape outputShape{ 1, 2 };
2402
nikraj010421e7f2019-06-14 09:40:34 +01002403 armnn::TensorInfo inputTensorInfo(inputShape, ArmnnType);
2404 inputTensorInfo.SetQuantizationScale(0.1f);
nikraj0193f84a92019-06-05 10:48:46 +01002405
nikraj010421e7f2019-06-14 09:40:34 +01002406 armnn::TensorInfo outputTensorInfo(outputShape, ArmnnType);
2407 outputTensorInfo.SetQuantizationScale(0.1f);
nikraj0193f84a92019-06-05 10:48:46 +01002408
nikraj010421e7f2019-06-14 09:40:34 +01002409 std::vector<float> inputValues
2410 {
2411 0.f, -0.f
2412 };
nikraj0193f84a92019-06-05 10:48:46 +01002413
nikraj010421e7f2019-06-14 09:40:34 +01002414 std::vector<float> expectedOutputValues
2415 {
2416 INFINITY, -INFINITY
2417 };
2418
2419 return Rsqrt2dTestCommon<ArmnnType>(workloadFactory, memoryManager,
nikraj0193f84a92019-06-05 10:48:46 +01002420 inputTensorInfo, outputTensorInfo,
2421 inputValues, expectedOutputValues);
2422}
2423
2424template<armnn::DataType ArmnnType, typename T>
2425LayerTestResult<T, 2> RsqrtNegativeTest(
2426 armnn::IWorkloadFactory& workloadFactory,
2427 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
2428{
2429 const armnn::TensorShape inputShape{ 1, 2 };
2430 const armnn::TensorShape outputShape{ 1, 2 };
2431
nikraj010421e7f2019-06-14 09:40:34 +01002432 armnn::TensorInfo inputTensorInfo(inputShape, ArmnnType);
2433 inputTensorInfo.SetQuantizationScale(0.1f);
2434 inputTensorInfo.SetQuantizationOffset(0);
nikraj0193f84a92019-06-05 10:48:46 +01002435
nikraj010421e7f2019-06-14 09:40:34 +01002436 armnn::TensorInfo outputTensorInfo(outputShape, ArmnnType);
2437 outputTensorInfo.SetQuantizationScale(0.1f);
2438 outputTensorInfo.SetQuantizationOffset(0);
nikraj0193f84a92019-06-05 10:48:46 +01002439
nikraj010421e7f2019-06-14 09:40:34 +01002440 std::vector<float> inputValues
2441 {
2442 -25.f, -16.f
2443 };
nikraj0193f84a92019-06-05 10:48:46 +01002444
nikraj010421e7f2019-06-14 09:40:34 +01002445 std::vector<float> expectedOutputValues
2446 {
2447 -NAN, -NAN
2448 };
2449
2450 return Rsqrt2dTestCommon<ArmnnType>(workloadFactory, memoryManager,
nikraj0193f84a92019-06-05 10:48:46 +01002451 inputTensorInfo, outputTensorInfo,
2452 inputValues, expectedOutputValues);
2453}
2454
Matthew Jacksondba634f2019-08-15 15:14:18 +01002455template<typename T, size_t NumDims>
2456LayerTestResult<T, NumDims> SimpleReshapeTestImpl(
Nina Drozd8ed4b8c2019-05-29 10:41:04 +01002457 armnn::IWorkloadFactory& workloadFactory,
2458 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
2459 armnn::TensorInfo inputTensorInfo,
2460 armnn::TensorInfo outputTensorInfo,
2461 const std::vector<T>& inputData,
2462 const std::vector<T>& outputExpectedData)
2463{
Matthew Jacksondba634f2019-08-15 15:14:18 +01002464 auto input = MakeTensor<T, NumDims>(inputTensorInfo, inputData);
Nina Drozd8ed4b8c2019-05-29 10:41:04 +01002465
Matthew Jacksondba634f2019-08-15 15:14:18 +01002466 LayerTestResult<T, NumDims> ret(outputTensorInfo);
2467 ret.outputExpected = MakeTensor<T, NumDims>(outputTensorInfo, outputExpectedData);
Nina Drozd8ed4b8c2019-05-29 10:41:04 +01002468
2469 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2470 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2471
2472 armnn::ReshapeQueueDescriptor data;
2473 armnn::WorkloadInfo info;
2474 AddInputToWorkload(data, info, inputTensorInfo, inputHandle.get());
2475 AddOutputToWorkload(data, info, outputTensorInfo, outputHandle.get());
2476
2477 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateReshape(data, info);
2478
2479 inputHandle->Allocate();
2480 outputHandle->Allocate();
2481
Matthew Jacksondba634f2019-08-15 15:14:18 +01002482 CopyDataToITensorHandle(inputHandle.get(), input.origin());
Nina Drozd8ed4b8c2019-05-29 10:41:04 +01002483
2484 workload->Execute();
2485
Matthew Jacksondba634f2019-08-15 15:14:18 +01002486 CopyDataFromITensorHandle(ret.output.origin(), outputHandle.get());
Nina Drozd8ed4b8c2019-05-29 10:41:04 +01002487
2488 return ret;
2489}
2490
Francis Murtagh46c09d02019-05-28 08:15:28 +01002491template<armnn::DataType ArmnnType, typename T>
Nina Drozd8ed4b8c2019-05-29 10:41:04 +01002492LayerTestResult<T, 4> SimpleReshapeTest(
2493 armnn::IWorkloadFactory& workloadFactory,
2494 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
2495{
2496 armnn::TensorInfo inputTensorInfo;
2497 armnn::TensorInfo outputTensorInfo;
2498
2499 unsigned int inputShape[] = { 2, 2, 3, 3 };
2500 unsigned int outputShape[] = { 2, 2, 9, 1 };
2501
2502 inputTensorInfo = armnn::TensorInfo(4, inputShape, ArmnnType);
2503 inputTensorInfo.SetQuantizationScale(1.0f);
2504 outputTensorInfo = armnn::TensorInfo(4, outputShape, ArmnnType);
2505 outputTensorInfo.SetQuantizationScale(1.0f);
2506
2507 auto input = ConvertToDataType<ArmnnType>(
2508 {
2509 0.0f, 1.0f, 2.0f,
2510 3.0f, 4.0f, 5.0f,
2511 6.0f, 7.0f, 8.0f,
2512
2513 9.0f, 10.0f, 11.0f,
2514 12.0f, 13.0f, 14.0f,
2515 15.0f, 16.0f, 17.0f,
2516
2517 18.0f, 19.0f, 20.0f,
2518 21.0f, 22.0f, 23.0f,
2519 24.0f, 25.0f, 26.0f,
2520
2521 27.0f, 28.0f, 29.0f,
2522 30.0f, 31.0f, 32.0f,
2523 33.0f, 34.0f, 35.0f,
2524 },
2525 inputTensorInfo);
2526
2527 auto outputExpected = ConvertToDataType<ArmnnType>(
2528 {
2529 0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f,
2530
2531 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f, 16.0f, 17.0f,
2532
2533 18.0f, 19.0f, 20.0f, 21.0f, 22.0f, 23.0f, 24.0f, 25.0f, 26.0f,
2534
2535 27.0f, 28.0f, 29.0f, 30.0f, 31.0f, 32.0f, 33.0f, 34.0f, 35.0f,
2536 },
2537 outputTensorInfo);
2538
Matthew Jacksondba634f2019-08-15 15:14:18 +01002539 return SimpleReshapeTestImpl<T, 4>(
2540 workloadFactory, memoryManager, inputTensorInfo, outputTensorInfo, input, outputExpected);
2541}
2542
2543template<armnn::DataType ArmnnType, typename T>
2544LayerTestResult<T, 5> Reshape5dTest(
2545 armnn::IWorkloadFactory& workloadFactory,
2546 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
2547{
2548 armnn::TensorInfo inputTensorInfo;
2549 armnn::TensorInfo outputTensorInfo;
2550
2551 unsigned int inputShape[] = { 2, 2, 8, 1, 1 };
2552 unsigned int outputShape[] = { 2, 2, 2, 2, 2 };
2553
2554 inputTensorInfo = armnn::TensorInfo(5, inputShape, ArmnnType);
2555 inputTensorInfo.SetQuantizationScale(1.0f);
2556 outputTensorInfo = armnn::TensorInfo(5, outputShape, ArmnnType);
2557 outputTensorInfo.SetQuantizationScale(1.0f);
2558
2559 auto input = ConvertToDataType<ArmnnType>(
2560 {
2561 0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f,
2562 8.0f, 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f,
2563
2564 16.0f, 17.0f, 18.0f, 19.0f, 20.0f, 21.0f, 22.0f, 23.0f,
2565 24.0f, 25.0f, 26.0f, 27.0f, 28.0f, 29.0f, 30.0f, 31.0f,
2566 },
2567 inputTensorInfo);
2568
2569 auto outputExpected = ConvertToDataType<ArmnnType>(
2570 {
2571 0.0f, 1.0f,
2572 2.0f, 3.0f,
2573
2574 4.0f, 5.0f,
2575 6.0f, 7.0f,
2576
2577
2578 8.0f, 9.0f,
2579 10.0f, 11.0f,
2580
2581 12.0f, 13.0f,
2582 14.0f, 15.0f,
2583
2584
2585
2586 16.0f, 17.0f,
2587 18.0f, 19.0f,
2588
2589 20.0f, 21.0f,
2590 22.0f, 23.0f,
2591
2592
2593 24.0f, 25.0f,
2594 26.0f, 27.0f,
2595
2596 28.0f, 29.0f,
2597 30.0f, 31.0f,
2598 },
2599 outputTensorInfo);
2600
2601 return SimpleReshapeTestImpl<T, 5>(
Nina Drozd8ed4b8c2019-05-29 10:41:04 +01002602 workloadFactory, memoryManager, inputTensorInfo, outputTensorInfo, input, outputExpected);
Matteo Martincigh42666a12019-05-29 08:53:41 +01002603}
James Conroy83735b12019-05-30 16:36:59 +01002604
2605template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
2606LayerTestResult<T, 4> SimpleFloorTest(
2607 armnn::IWorkloadFactory& workloadFactory,
2608 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
2609{
James Conroyb40d7102019-06-04 12:32:09 +01002610 armnn::TensorInfo inputTensorInfo({1, 3, 2, 3}, ArmnnType);
2611 inputTensorInfo.SetQuantizationScale(0.1f);
2612
2613 armnn::TensorInfo outputTensorInfo(inputTensorInfo);
2614 outputTensorInfo.SetQuantizationScale(0.1f);
James Conroy83735b12019-05-30 16:36:59 +01002615
2616 auto input = MakeTensor<T, 4>(inputTensorInfo, ConvertToDataType<ArmnnType>(
2617 { -37.5f, -15.2f, -8.76f, -2.0f, -1.5f, -1.3f, -0.5f, -0.4f, 0.0f,
2618 1.0f, 0.4f, 0.5f, 1.3f, 1.5f, 2.0f, 8.76f, 15.2f, 37.5f },
2619 inputTensorInfo));
2620
2621 LayerTestResult<T, 4> ret(outputTensorInfo);
2622 ret.outputExpected = MakeTensor<T, 4>(outputTensorInfo, ConvertToDataType<ArmnnType>(
2623 { -38.0f, -16.0f, -9.0f, -2.0f, -2.0f, -2.0f, -1.0f, -1.0f, 0.0f,
2624 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 2.0f, 8.0f, 15.0f, 37.0f },
2625 outputTensorInfo));
2626
2627 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2628 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2629
2630 armnn::FloorQueueDescriptor data;
2631 armnn::WorkloadInfo info;
2632 AddInputToWorkload(data, info, inputTensorInfo, inputHandle.get());
2633 AddOutputToWorkload(data, info, outputTensorInfo, outputHandle.get());
2634
2635 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateFloor(data, info);
2636
2637 inputHandle->Allocate();
2638 outputHandle->Allocate();
2639
2640 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
2641
2642 workload->Execute();
2643
2644 CopyDataFromITensorHandle(&ret.output[0][0][0][0], outputHandle.get());
2645
2646 return ret;
Matteo Martincighf5507132019-06-04 10:59:47 +01002647}
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002648
2649
2650template<armnn::DataType ArmnnType, typename T>
2651LayerTestResult<T, 4> ResizeBilinearNopTest(
2652 armnn::IWorkloadFactory& workloadFactory,
2653 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
2654 const armnn::DataLayout dataLayout)
2655{
2656 armnn::TensorInfo inputTensorInfo = armnn::IsQuantizedType<T>()
2657 ? armnnUtils::GetTensorInfo(1, 1, 4, 4, dataLayout, ArmnnType)
2658 : armnnUtils::GetTensorInfo(1, 2, 4, 4, dataLayout, ArmnnType);
2659 armnn::TensorInfo outputTensorInfo = armnn::IsQuantizedType<T>()
2660 ? armnnUtils::GetTensorInfo(1, 1, 4, 4, dataLayout, ArmnnType)
2661 : armnnUtils::GetTensorInfo(1, 2, 4, 4, dataLayout, ArmnnType);
2662 if (armnn::IsQuantizedType<T>())
2663 {
2664 inputTensorInfo.SetQuantizationScale(1.5f);
2665 inputTensorInfo.SetQuantizationOffset(-3);
2666 outputTensorInfo.SetQuantizationScale(1.5f);
2667 outputTensorInfo.SetQuantizationOffset(-3);
2668 }
2669
2670 std::vector<float> inputData = armnn::IsQuantizedType<T>()
2671 ? std::initializer_list<float>
2672 {
2673 1, 2, 3, 4,
2674 2, 3, 4, 5,
2675 3, 4, 5, 6,
2676 4, 5, 6, 7
2677 }
2678 : std::initializer_list<float>
2679 {
2680 1.0f, 2.0f, 3.0f, 4.0f,
2681 2.0f, 3.0f, 4.0f, 5.0f,
2682 3.0f, 4.0f, 5.0f, 6.0f,
2683 4.0f, 5.0f, 6.0f, 7.0f,
2684
2685 1.0f, 2.0f, 3.0f, 4.0f,
2686 2.0f, 3.0f, 4.0f, 5.0f,
2687 3.0f, 4.0f, 5.0f, 6.0f,
2688 4.0f, 5.0f, 6.0f, 7.0f
2689 };
2690
2691 const armnn::PermutationVector NCHWToNHWC = { 0, 3, 1, 2 };
2692 if (dataLayout == armnn::DataLayout::NHWC)
2693 {
2694 std::vector<float> tmp(inputData.size());
2695 armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(float));
2696 inputData = tmp;
2697 }
2698
2699 auto input = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(),
2700 inputTensorInfo.GetQuantizationOffset(),
2701 inputData));
2702
2703 LayerTestResult<T, 4> result(outputTensorInfo);
2704 result.outputExpected = input;
2705
2706 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2707 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2708
Aron Virginas-Tar169d2f12019-07-01 19:01:44 +01002709 armnn::ResizeQueueDescriptor descriptor;
2710 descriptor.m_Parameters.m_Method = armnn::ResizeMethod::Bilinear;
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002711 descriptor.m_Parameters.m_DataLayout = dataLayout;
Aron Virginas-Tar169d2f12019-07-01 19:01:44 +01002712
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002713 armnn::WorkloadInfo info;
2714 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
2715 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
2716
Aron Virginas-Tar169d2f12019-07-01 19:01:44 +01002717 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateResize(descriptor, info);
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002718
2719 inputHandle->Allocate();
2720 outputHandle->Allocate();
2721 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
2722
2723 workload->PostAllocationConfigure();
2724 workload->Execute();
2725
2726 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
2727 return result;
2728}
2729
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002730template<armnn::DataType ArmnnType, typename T>
2731LayerTestResult<T, 4> SimpleResizeBilinearTest(
2732 armnn::IWorkloadFactory& workloadFactory,
2733 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
2734 const armnn::DataLayout dataLayout)
2735{
2736 armnn::TensorInfo inputTensorInfo = armnn::IsQuantizedType<T>()
2737 ? armnnUtils::GetTensorInfo(1, 1, 2, 2, dataLayout, ArmnnType)
2738 : armnnUtils::GetTensorInfo(1, 2, 2, 2, dataLayout, ArmnnType);
2739 armnn::TensorInfo outputTensorInfo = armnn::IsQuantizedType<T>()
2740 ? armnnUtils::GetTensorInfo(1, 1, 1, 1, dataLayout, ArmnnType)
2741 : armnnUtils::GetTensorInfo(1, 2, 1, 1, dataLayout, ArmnnType);
2742
2743 if (armnn::IsQuantizedType<T>())
2744 {
2745 inputTensorInfo.SetQuantizationScale(0.1567f);
2746 inputTensorInfo.SetQuantizationOffset(1);
2747 outputTensorInfo.SetQuantizationScale(0.1567f);
2748 outputTensorInfo.SetQuantizationOffset(1);
2749 }
2750
2751 std::vector<float> inputData = armnn::IsQuantizedType<T>()
2752 ? std::initializer_list<float>
2753 {
2754 1, 255,
2755 200, 250
2756 }
2757 : std::initializer_list<float>
2758 {
2759 1.0f, 255.0f,
2760 200.0f, 250.0f,
2761
2762 250.0f, 200.0f,
2763 250.0f, 1.0f
2764 };
2765
2766 // The 'resize bilinear' operation projects the top-left corner of output texels into the input image,
2767 // then figures out the interpolants and weights. Note this is different to projecting the centre of the
2768 // output texel. Thus, for a input matrix of 2x2, we'll expect the output 1x1 matrix to contain, as
2769 // its single element, the value that was at position (0,0) of the input matrix (rather than an average,
2770 // which we would expect if projecting the centre).
2771
2772 std::vector<float> outputData = armnn::IsQuantizedType<T>()
2773 ? std::initializer_list<float>
2774 {
2775 1
2776 }
2777 : std::initializer_list<float>
2778 {
2779 1.0f,
2780
2781 250.0f
2782 };
2783
2784 const armnn::PermutationVector NCHWToNHWC = { 0, 3, 1, 2 };
2785 if (dataLayout == armnn::DataLayout::NHWC)
2786 {
2787 std::vector<float> tmp(inputData.size());
2788 armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(float));
2789 inputData = tmp;
2790
2791 std::vector<float> tmp1(outputData.size());
2792 armnnUtils::Permute(outputTensorInfo.GetShape(), NCHWToNHWC, outputData.data(), tmp1.data(), sizeof(float));
2793 outputData = tmp1;
2794 }
2795
2796 auto input = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(),
2797 inputTensorInfo.GetQuantizationOffset(),
2798 inputData));
2799
2800 LayerTestResult<T, 4> result(outputTensorInfo);
2801 result.outputExpected = MakeTensor<T, 4>(outputTensorInfo,
2802 QuantizedVector<T>(outputTensorInfo.GetQuantizationScale(),
2803 outputTensorInfo.GetQuantizationOffset(),
2804 outputData));
2805
2806 std::unique_ptr <armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2807 std::unique_ptr <armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2808
Aron Virginas-Tar169d2f12019-07-01 19:01:44 +01002809 armnn::ResizeQueueDescriptor descriptor;
2810 descriptor.m_Parameters.m_Method = armnn::ResizeMethod::Bilinear;
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002811 descriptor.m_Parameters.m_DataLayout = dataLayout;
Aron Virginas-Tar169d2f12019-07-01 19:01:44 +01002812
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002813 armnn::WorkloadInfo info;
2814 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
2815 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
2816
Aron Virginas-Tar169d2f12019-07-01 19:01:44 +01002817 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateResize(descriptor, info);
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002818
2819 inputHandle->Allocate();
2820 outputHandle->Allocate();
2821 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
2822
2823 workload->PostAllocationConfigure();
2824 workload->Execute();
2825
2826 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
2827 return result;
2828}
2829
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002830template<armnn::DataType ArmnnType, typename T>
2831LayerTestResult<T, 4> ResizeBilinearSqMinTest(
2832 armnn::IWorkloadFactory& workloadFactory,
2833 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
2834 const armnn::DataLayout dataLayout)
2835{
2836 armnn::TensorInfo inputTensorInfo = armnn::IsQuantizedType<T>()
2837 ? armnnUtils::GetTensorInfo(1, 1, 4, 4, dataLayout, ArmnnType)
2838 : armnnUtils::GetTensorInfo(1, 2, 4, 4, dataLayout, ArmnnType);
2839 armnn::TensorInfo outputTensorInfo = armnn::IsQuantizedType<T>()
2840 ? armnnUtils::GetTensorInfo(1, 1, 2, 2, dataLayout, ArmnnType)
2841 : armnnUtils::GetTensorInfo(1, 2, 2, 2, dataLayout, ArmnnType);
2842
2843 if (armnn::IsQuantizedType<T>())
2844 {
2845 inputTensorInfo.SetQuantizationScale(3.141592f);
2846 inputTensorInfo.SetQuantizationOffset(3);
2847 outputTensorInfo.SetQuantizationScale(3.141592f);
2848 outputTensorInfo.SetQuantizationOffset(3);
2849 }
2850
2851 std::vector<float> inputData = armnn::IsQuantizedType<T>()
2852 ? std::initializer_list<float>
2853 {
2854 1, 2, 3, 4,
2855 2, 3, 4, 5,
2856 3, 4, 5, 6,
2857 4, 5, 6, 7
2858 }
2859 : std::initializer_list<float>
2860 {
2861 1.0f, 2.0f, 3.0f, 4.0f,
2862 2.0f, 3.0f, 4.0f, 5.0f,
2863 3.0f, 4.0f, 5.0f, 6.0f,
2864 4.0f, 5.0f, 6.0f, 7.0f,
2865
2866 7.0f, 6.0f, 5.0f, 4.0f,
2867 6.0f, 5.0f, 4.0f, 3.0f,
2868 5.0f, 4.0f, 3.0f, 2.0f,
2869 4.0f, 3.0f, 2.0f, 1.0f
2870 };
2871
2872 std::vector<float> outputData = armnn::IsQuantizedType<T>()
2873 ? std::initializer_list<float>
2874 {
2875 1, 3,
2876 3, 5
2877 }
2878 : std::initializer_list<float>
2879 {
2880 1.0f, 3.0f,
2881 3.0f, 5.0f,
2882
2883 7.0f, 5.0f,
2884 5.0f, 3.0f
2885 };
2886
2887 const armnn::PermutationVector NCHWToNHWC = { 0, 3, 1, 2 };
2888 if (dataLayout == armnn::DataLayout::NHWC)
2889 {
2890 std::vector<float> tmp(inputData.size());
2891 armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(float));
2892 inputData = tmp;
2893
2894 std::vector<float> tmp1(outputData.size());
2895 armnnUtils::Permute(outputTensorInfo.GetShape(), NCHWToNHWC, outputData.data(), tmp1.data(), sizeof(float));
2896 outputData = tmp1;
2897 }
2898
2899 auto input = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(),
2900 inputTensorInfo.GetQuantizationOffset(),
2901 inputData));
2902
2903 LayerTestResult<T, 4> result(outputTensorInfo);
2904 result.outputExpected = MakeTensor<T, 4>(outputTensorInfo,
2905 QuantizedVector<T>(outputTensorInfo.GetQuantizationScale(),
2906 outputTensorInfo.GetQuantizationOffset(),
2907 outputData));
2908
2909 std::unique_ptr <armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2910 std::unique_ptr <armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2911
Aron Virginas-Tar169d2f12019-07-01 19:01:44 +01002912 armnn::ResizeQueueDescriptor descriptor;
2913 descriptor.m_Parameters.m_Method = armnn::ResizeMethod::Bilinear;
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002914 descriptor.m_Parameters.m_DataLayout = dataLayout;
Aron Virginas-Tar169d2f12019-07-01 19:01:44 +01002915
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002916 armnn::WorkloadInfo info;
2917 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
2918 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
2919
Aron Virginas-Tar169d2f12019-07-01 19:01:44 +01002920 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateResize(descriptor, info);
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002921
2922 inputHandle->Allocate();
2923 outputHandle->Allocate();
2924 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
2925
2926 workload->PostAllocationConfigure();
2927 workload->Execute();
2928
2929 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
2930 return result;
2931}
2932
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002933template<armnn::DataType ArmnnType, typename T>
2934LayerTestResult<T, 4> ResizeBilinearMinTest(
2935 armnn::IWorkloadFactory& workloadFactory,
2936 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
2937 const armnn::DataLayout dataLayout)
2938{
2939 armnn::TensorInfo inputTensorInfo = armnn::IsQuantizedType<T>()
2940 ? armnnUtils::GetTensorInfo(1, 1, 2, 3, dataLayout, ArmnnType)
2941 : armnnUtils::GetTensorInfo(1, 2, 3, 5, dataLayout, ArmnnType);
2942 armnn::TensorInfo outputTensorInfo = armnn::IsQuantizedType<T>()
2943 ? armnnUtils::GetTensorInfo(1, 1, 1, 2, dataLayout, ArmnnType)
2944 : armnnUtils::GetTensorInfo(1, 2, 2, 3, dataLayout, ArmnnType);
2945
2946 if (armnn::IsQuantizedType<T>())
2947 {
2948 inputTensorInfo.SetQuantizationScale(1.5f);
2949 inputTensorInfo.SetQuantizationOffset(-1);
2950 outputTensorInfo.SetQuantizationScale(1.5f);
2951 outputTensorInfo.SetQuantizationOffset(-1);
2952 }
2953
2954 std::vector<float> inputData = armnn::IsQuantizedType<T>()
2955 ? std::initializer_list<float>
2956 {
2957 3.0f, 4.5f, 6.0f, // 1, 2, 3, : Expected quantised values
2958 9.0f, 13.5f, 21.0f // 5, 8, 13
2959 }
2960 : std::initializer_list<float>
2961 {
2962 1.0f, 2.0f, 3.0f, 5.0f, 8.0f,
2963 13.0f, 21.0f, 34.0f, 55.0f, 89.0f,
2964 144.0f, 233.0f, 377.0f, 610.0f, 987.0f,
2965
2966 987.0f, 610.0f, 377.0f, 233.0f, 144.0f,
2967 89.0f, 55.0f, 34.0f, 21.0f, 13.0f,
2968 8.0f, 5.0f, 3.0f, 2.0f, 1.0f
2969 };
2970
2971 std::vector<float> outputData = armnn::IsQuantizedType<T>()
2972 ? std::initializer_list<float>
2973 {
2974 3.0f, 5.25f // 1, 3
2975 }
2976 : std::initializer_list<float>
2977 {
2978 1.0f, 2.6666f, 6.00f,
2979 78.5f, 179.3333f, 401.00f,
2980
2981 987.0f, 454.6670f, 203.33f,
2982 48.5f, 22.3333f, 10.00f
2983 };
2984
2985 const armnn::PermutationVector NCHWToNHWC = { 0, 3, 1, 2 };
2986 if (dataLayout == armnn::DataLayout::NHWC)
2987 {
2988 std::vector<float> tmp(inputData.size());
2989 armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(float));
2990 inputData = tmp;
2991
2992 std::vector<float> tmp1(outputData.size());
2993 armnnUtils::Permute(outputTensorInfo.GetShape(), NCHWToNHWC, outputData.data(), tmp1.data(), sizeof(float));
2994 outputData = tmp1;
2995 }
2996
2997 auto input = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(),
2998 inputTensorInfo.GetQuantizationOffset(),
2999 inputData));
3000
3001 LayerTestResult<T, 4> result(outputTensorInfo);
3002 result.outputExpected = MakeTensor<T, 4>(outputTensorInfo,
3003 QuantizedVector<T>(outputTensorInfo.GetQuantizationScale(),
3004 outputTensorInfo.GetQuantizationOffset(),
3005 outputData));
3006
3007 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
3008 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
3009
Aron Virginas-Tar169d2f12019-07-01 19:01:44 +01003010 armnn::ResizeQueueDescriptor descriptor;
3011 descriptor.m_Parameters.m_Method = armnn::ResizeMethod::Bilinear;
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01003012 descriptor.m_Parameters.m_DataLayout = dataLayout;
Aron Virginas-Tar169d2f12019-07-01 19:01:44 +01003013
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01003014 armnn::WorkloadInfo info;
3015 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
3016 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
3017
Aron Virginas-Tar169d2f12019-07-01 19:01:44 +01003018 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateResize(descriptor, info);
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01003019
3020 inputHandle->Allocate();
3021 outputHandle->Allocate();
3022 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
3023
3024 workload->PostAllocationConfigure();
3025 workload->Execute();
3026
3027 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
3028 return result;
3029}
3030
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01003031template<armnn::DataType ArmnnType, typename T>
3032LayerTestResult<T, 4> ResizeBilinearMagTest(
3033 armnn::IWorkloadFactory& workloadFactory,
3034 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
3035 const armnn::DataLayout dataLayout)
3036{
3037 armnn::TensorInfo inputTensorInfo = armnn::IsQuantizedType<T>()
3038 ? armnnUtils::GetTensorInfo(1, 1, 3, 2, dataLayout, ArmnnType)
3039 : armnnUtils::GetTensorInfo(1, 2, 3, 2, dataLayout, ArmnnType);
3040 armnn::TensorInfo outputTensorInfo = armnn::IsQuantizedType<T>()
3041 ? armnnUtils::GetTensorInfo(1, 1, 3, 5, dataLayout, ArmnnType)
3042 : armnnUtils::GetTensorInfo(1, 2, 3, 5, dataLayout, ArmnnType);
3043
3044 if (armnn::IsQuantizedType<T>())
3045 {
3046 inputTensorInfo.SetQuantizationScale(0.010765f);
3047 inputTensorInfo.SetQuantizationOffset(7);
3048 outputTensorInfo.SetQuantizationScale(0.010132f);
3049 outputTensorInfo.SetQuantizationOffset(-18);
3050 }
3051
3052 std::vector<float> inputData = armnn::IsQuantizedType<T>()
3053 ? std::initializer_list<float>
3054 {
3055 0.183005f, 2.379065f, // 24, 228, : Expected quantised values
3056 1.05497f, 1.302565f, // 105, 128,
3057 2.400595f, 0.68896f // 230, 71
3058 }
3059 : std::initializer_list<float>
3060 {
3061 1.0f, 2.0f,
3062 13.0f, 21.0f,
3063 144.0f, 233.0f,
3064
3065 233.0f, 144.0f,
3066 21.0f, 13.0f,
3067 2.0f, 1.0f
3068 };
3069 std::vector<float> outputData = armnn::IsQuantizedType<T>()
3070 ? std::initializer_list<float>
3071 {
3072 0.18300501f, 1.06142902f, 1.93985295f, 2.37906504f, 2.37906504f,
3073 1.05497003f, 1.15400803f, 1.25304604f, 1.30256498f, 1.30256498f,
3074 2.40059495f, 1.71594095f, 1.03128707f, 0.68896002f, 0.68896002f
3075 // 0, 87, 173, 217, 217, : Expected quantised values
3076 // 86, 96, 106, 111, 111,
3077 // 219, 151, 84, 50, 50
3078 }
3079 : std::initializer_list<float>
3080 {
3081 1.0f, 1.4f, 1.8f, 2.0f, 2.0f,
3082 13.0f, 16.2f, 19.4f, 21.0f, 21.0f,
3083 144.0f, 179.6f, 215.2f, 233.0f, 233.0f,
3084
3085 233.0f, 197.4f, 161.8f, 144.0f, 144.0f,
3086 21.0f, 17.8f, 14.6f, 13.0f, 13.0f,
3087 2.0f, 1.6f, 1.2f, 1.0f, 1.0f
3088 };
3089
3090 const armnn::PermutationVector NCHWToNHWC = { 0, 3, 1, 2 };
3091 if (dataLayout == armnn::DataLayout::NHWC)
3092 {
3093 std::vector<float> tmp(inputData.size());
3094 armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(float));
3095 inputData = tmp;
3096
3097 std::vector<float> tmp1(outputData.size());
3098 armnnUtils::Permute(outputTensorInfo.GetShape(), NCHWToNHWC, outputData.data(), tmp1.data(), sizeof(float));
3099 outputData = tmp1;
3100 }
3101
3102 auto input = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(),
3103 inputTensorInfo.GetQuantizationOffset(),
3104 inputData));
3105
3106 LayerTestResult<T, 4> result(outputTensorInfo);
3107 result.outputExpected = MakeTensor<T, 4>(outputTensorInfo,
3108 QuantizedVector<T>(outputTensorInfo.GetQuantizationScale(),
3109 outputTensorInfo.GetQuantizationOffset(),
3110 outputData));
3111
3112 std::unique_ptr <armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
3113 std::unique_ptr <armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
3114
Aron Virginas-Tar169d2f12019-07-01 19:01:44 +01003115 armnn::ResizeQueueDescriptor descriptor;
3116 descriptor.m_Parameters.m_Method = armnn::ResizeMethod::Bilinear;
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01003117 descriptor.m_Parameters.m_DataLayout = dataLayout;
Aron Virginas-Tar169d2f12019-07-01 19:01:44 +01003118
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01003119 armnn::WorkloadInfo info;
3120 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
3121 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
3122
Aron Virginas-Tar169d2f12019-07-01 19:01:44 +01003123 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateResize(descriptor, info);
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01003124
3125 inputHandle->Allocate();
3126 outputHandle->Allocate();
3127 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
3128
3129 workload->PostAllocationConfigure();
3130 workload->Execute();
3131
3132 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
3133 return result;
3134}
3135
Teresa Charlin970f43b2019-07-01 13:51:07 +01003136
3137template<armnn::DataType ArmnnType, typename T>
3138LayerTestResult<T, 4> ResizeNearestNeighborNopTest(
3139 armnn::IWorkloadFactory& workloadFactory,
3140 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
3141 const armnn::DataLayout dataLayout)
3142{
3143 armnn::TensorInfo inputTensorInfo = armnn::IsQuantizedType<T>()
3144 ? armnnUtils::GetTensorInfo(1, 1, 4, 4, dataLayout, ArmnnType)
3145 : armnnUtils::GetTensorInfo(1, 2, 4, 4, dataLayout, ArmnnType);
3146 armnn::TensorInfo outputTensorInfo = armnn::IsQuantizedType<T>()
3147 ? armnnUtils::GetTensorInfo(1, 1, 4, 4, dataLayout, ArmnnType)
3148 : armnnUtils::GetTensorInfo(1, 2, 4, 4, dataLayout, ArmnnType);
3149 if (armnn::IsQuantizedType<T>())
3150 {
3151 inputTensorInfo.SetQuantizationScale(1.5f);
3152 inputTensorInfo.SetQuantizationOffset(-3);
3153 outputTensorInfo.SetQuantizationScale(1.5f);
3154 outputTensorInfo.SetQuantizationOffset(-3);
3155 }
3156
3157 std::vector<float> inputData = armnn::IsQuantizedType<T>()
3158 ? std::initializer_list<float>
3159 {
3160 1, 2, 3, 4,
3161 2, 3, 4, 5,
3162 3, 4, 5, 6,
3163 4, 5, 6, 7
3164 }
3165 : std::initializer_list<float>
3166 {
3167 1.0f, 2.0f, 3.0f, 4.0f,
3168 2.0f, 3.0f, 4.0f, 5.0f,
3169 3.0f, 4.0f, 5.0f, 6.0f,
3170 4.0f, 5.0f, 6.0f, 7.0f,
3171
3172 1.0f, 2.0f, 3.0f, 4.0f,
3173 2.0f, 3.0f, 4.0f, 5.0f,
3174 3.0f, 4.0f, 5.0f, 6.0f,
3175 4.0f, 5.0f, 6.0f, 7.0f
3176 };
3177
3178 const armnn::PermutationVector NCHWToNHWC = { 0, 3, 1, 2 };
3179 if (dataLayout == armnn::DataLayout::NHWC)
3180 {
3181 std::vector<float> tmp(inputData.size());
3182 armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(float));
3183 inputData = tmp;
3184 }
3185
3186 auto input = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(),
3187 inputTensorInfo.GetQuantizationOffset(),
3188 inputData));
3189
3190 LayerTestResult<T, 4> result(outputTensorInfo);
3191 result.outputExpected = input;
3192
3193 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
3194 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
3195
3196 armnn::ResizeQueueDescriptor descriptor;
3197 descriptor.m_Parameters.m_Method = armnn::ResizeMethod::NearestNeighbor;
3198 descriptor.m_Parameters.m_DataLayout = dataLayout;
3199 armnn::WorkloadInfo info;
3200 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
3201 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
3202
3203 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateResize(descriptor, info);
3204
3205 inputHandle->Allocate();
3206 outputHandle->Allocate();
3207 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
3208
3209 workload->PostAllocationConfigure();
3210 workload->Execute();
3211
3212 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
3213 return result;
3214}
3215
3216template<armnn::DataType ArmnnType, typename T>
3217LayerTestResult<T, 4> SimpleResizeNearestNeighborTest(
3218 armnn::IWorkloadFactory& workloadFactory,
3219 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
3220 const armnn::DataLayout dataLayout)
3221{
3222 armnn::TensorInfo inputTensorInfo = armnn::IsQuantizedType<T>()
3223 ? armnnUtils::GetTensorInfo(1, 1, 2, 2, dataLayout, ArmnnType)
3224 : armnnUtils::GetTensorInfo(1, 2, 2, 2, dataLayout, ArmnnType);
3225 armnn::TensorInfo outputTensorInfo = armnn::IsQuantizedType<T>()
3226 ? armnnUtils::GetTensorInfo(1, 1, 1, 1, dataLayout, ArmnnType)
3227 : armnnUtils::GetTensorInfo(1, 2, 1, 1, dataLayout, ArmnnType);
3228
3229 if (armnn::IsQuantizedType<T>())
3230 {
3231 inputTensorInfo.SetQuantizationScale(0.1567f);
3232 inputTensorInfo.SetQuantizationOffset(1);
3233 outputTensorInfo.SetQuantizationScale(0.1567f);
3234 outputTensorInfo.SetQuantizationOffset(1);
3235 }
3236
3237 std::vector<float> inputData = armnn::IsQuantizedType<T>()
3238 ? std::initializer_list<float>
3239 {
3240 1, 255,
3241 200, 250
3242 }
3243 : std::initializer_list<float>
3244 {
3245 1.0f, 255.0f,
3246 200.0f, 250.0f,
3247
3248 250.0f, 200.0f,
3249 250.0f, 1.0f
3250 };
3251
3252 // The 'resize' operation projects the top-left corner of output texels into the input image,
3253 // then figures out the interpolants and weights. Note this is different to projecting the centre of the
3254 // output texel. Thus, for a input matrix of 2x2, we'll expect the output 1x1 matrix to contain, as
3255 // its single element, the value that was at position (0,0) of the input matrix (rather than an average,
3256 // which we would expect if projecting the centre).
3257
3258 std::vector<float> outputData = armnn::IsQuantizedType<T>()
3259 ? std::initializer_list<float>
3260 {
3261 1
3262 }
3263 : std::initializer_list<float>
3264 {
3265 1.0f,
3266
3267 250.0f
3268 };
3269
3270 const armnn::PermutationVector NCHWToNHWC = { 0, 3, 1, 2 };
3271 if (dataLayout == armnn::DataLayout::NHWC)
3272 {
3273 std::vector<float> tmp(inputData.size());
3274 armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(float));
3275 inputData = tmp;
3276
3277 std::vector<float> tmp1(outputData.size());
3278 armnnUtils::Permute(outputTensorInfo.GetShape(), NCHWToNHWC, outputData.data(), tmp1.data(), sizeof(float));
3279 outputData = tmp1;
3280 }
3281
3282 auto input = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(),
3283 inputTensorInfo.GetQuantizationOffset(),
3284 inputData));
3285
3286 LayerTestResult<T, 4> result(outputTensorInfo);
3287 result.outputExpected = MakeTensor<T, 4>(outputTensorInfo,
3288 QuantizedVector<T>(outputTensorInfo.GetQuantizationScale(),
3289 outputTensorInfo.GetQuantizationOffset(),
3290 outputData));
3291
3292 std::unique_ptr <armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
3293 std::unique_ptr <armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
3294
3295 armnn::ResizeQueueDescriptor descriptor;
3296 descriptor.m_Parameters.m_DataLayout = dataLayout;
3297 descriptor.m_Parameters.m_Method = armnn::ResizeMethod::NearestNeighbor;
3298 armnn::WorkloadInfo info;
3299 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
3300 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
3301
3302 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateResize(descriptor, info);
3303
3304 inputHandle->Allocate();
3305 outputHandle->Allocate();
3306 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
3307
3308 workload->PostAllocationConfigure();
3309 workload->Execute();
3310
3311 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
3312 return result;
3313}
3314
3315template<armnn::DataType ArmnnType, typename T>
3316LayerTestResult<T, 4> ResizeNearestNeighborSqMinTest(
3317 armnn::IWorkloadFactory& workloadFactory,
3318 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
3319 const armnn::DataLayout dataLayout)
3320{
3321 armnn::TensorInfo inputTensorInfo = armnn::IsQuantizedType<T>()
3322 ? armnnUtils::GetTensorInfo(1, 1, 4, 4, dataLayout, ArmnnType)
3323 : armnnUtils::GetTensorInfo(1, 2, 4, 4, dataLayout, ArmnnType);
3324 armnn::TensorInfo outputTensorInfo = armnn::IsQuantizedType<T>()
3325 ? armnnUtils::GetTensorInfo(1, 1, 2, 2, dataLayout, ArmnnType)
3326 : armnnUtils::GetTensorInfo(1, 2, 2, 2, dataLayout, ArmnnType);
3327
3328 if (armnn::IsQuantizedType<T>())
3329 {
3330 inputTensorInfo.SetQuantizationScale(3.141592f);
3331 inputTensorInfo.SetQuantizationOffset(3);
3332 outputTensorInfo.SetQuantizationScale(3.141592f);
3333 outputTensorInfo.SetQuantizationOffset(3);
3334 }
3335
3336 std::vector<float> inputData = armnn::IsQuantizedType<T>()
3337 ? std::initializer_list<float>
3338 {
3339 1, 2, 3, 4,
3340 2, 3, 4, 5,
3341 3, 4, 5, 6,
3342 4, 5, 6, 7
3343 }
3344 : std::initializer_list<float>
3345 {
3346 1.0f, 2.0f, 3.0f, 4.0f,
3347 2.0f, 3.0f, 4.0f, 5.0f,
3348 3.0f, 4.0f, 5.0f, 6.0f,
3349 4.0f, 5.0f, 6.0f, 7.0f,
3350
3351 7.0f, 6.0f, 5.0f, 4.0f,
3352 6.0f, 5.0f, 4.0f, 3.0f,
3353 5.0f, 4.0f, 3.0f, 2.0f,
3354 4.0f, 3.0f, 2.0f, 1.0f
3355 };
3356
3357 std::vector<float> outputData = armnn::IsQuantizedType<T>()
3358 ? std::initializer_list<float>
3359 {
3360 1, 3,
3361 3, 5
3362 }
3363 : std::initializer_list<float>
3364 {
3365 1.0f, 3.0f,
3366 3.0f, 5.0f,
3367
3368 7.0f, 5.0f,
3369 5.0f, 3.0f
3370 };
3371
3372 const armnn::PermutationVector NCHWToNHWC = { 0, 3, 1, 2 };
3373 if (dataLayout == armnn::DataLayout::NHWC)
3374 {
3375 std::vector<float> tmp(inputData.size());
3376 armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(float));
3377 inputData = tmp;
3378
3379 std::vector<float> tmp1(outputData.size());
3380 armnnUtils::Permute(outputTensorInfo.GetShape(), NCHWToNHWC, outputData.data(), tmp1.data(), sizeof(float));
3381 outputData = tmp1;
3382 }
3383
3384 auto input = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(),
3385 inputTensorInfo.GetQuantizationOffset(),
3386 inputData));
3387
3388 LayerTestResult<T, 4> result(outputTensorInfo);
3389 result.outputExpected = MakeTensor<T, 4>(outputTensorInfo,
3390 QuantizedVector<T>(outputTensorInfo.GetQuantizationScale(),
3391 outputTensorInfo.GetQuantizationOffset(),
3392 outputData));
3393
3394 std::unique_ptr <armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
3395 std::unique_ptr <armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
3396
3397 armnn::ResizeQueueDescriptor descriptor;
3398 descriptor.m_Parameters.m_DataLayout = dataLayout;
3399 descriptor.m_Parameters.m_Method = armnn::ResizeMethod::NearestNeighbor;
3400 armnn::WorkloadInfo info;
3401 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
3402 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
3403
3404 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateResize(descriptor, info);
3405
3406 inputHandle->Allocate();
3407 outputHandle->Allocate();
3408 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
3409
3410 workload->PostAllocationConfigure();
3411 workload->Execute();
3412
3413 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
3414 return result;
3415}
3416
3417template<armnn::DataType ArmnnType, typename T>
3418LayerTestResult<T, 4> ResizeNearestNeighborMinTest(
3419 armnn::IWorkloadFactory& workloadFactory,
3420 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
3421 const armnn::DataLayout dataLayout)
3422{
3423 armnn::TensorInfo inputTensorInfo = armnn::IsQuantizedType<T>()
3424 ? armnnUtils::GetTensorInfo(1, 1, 2, 3, dataLayout, ArmnnType)
3425 : armnnUtils::GetTensorInfo(1, 2, 3, 5, dataLayout, ArmnnType);
3426 armnn::TensorInfo outputTensorInfo = armnn::IsQuantizedType<T>()
3427 ? armnnUtils::GetTensorInfo(1, 1, 1, 2, dataLayout, ArmnnType)
3428 : armnnUtils::GetTensorInfo(1, 2, 2, 3, dataLayout, ArmnnType);
3429
3430 if (armnn::IsQuantizedType<T>())
3431 {
3432 inputTensorInfo.SetQuantizationScale(1.5f);
3433 inputTensorInfo.SetQuantizationOffset(-1);
3434 outputTensorInfo.SetQuantizationScale(1.5f);
3435 outputTensorInfo.SetQuantizationOffset(-1);
3436 }
3437
3438 std::vector<float> inputData = armnn::IsQuantizedType<T>()
3439 ? std::initializer_list<float>
3440 {
3441 3.0f, 4.5f, 6.0f, // 1, 2, 3, : Expected quantised values
3442 9.0f, 13.5f, 21.0f // 5, 8, 13
3443 }
3444 : std::initializer_list<float>
3445 {
3446 1.0f, 2.0f, 3.0f, 5.0f, 8.0f,
3447 13.0f, 21.0f, 34.0f, 55.0f, 89.0f,
3448 144.0f, 233.0f, 377.0f, 610.0f, 987.0f,
3449
3450 987.0f, 610.0f, 377.0f, 233.0f, 144.0f,
3451 89.0f, 55.0f, 34.0f, 21.0f, 13.0f,
3452 8.0f, 5.0f, 3.0f, 2.0f, 1.0f
3453 };
3454
3455 std::vector<float> outputData = armnn::IsQuantizedType<T>()
3456 ? std::initializer_list<float>
3457 {
3458 3.0f, 4.5f // 1, 3
3459 }
3460 : std::initializer_list<float>
3461 {
3462 1.f, 2.f, 5.f,
3463 13.f, 21.f, 55.f,
3464
3465 987.f, 610.f, 233.f,
3466 89.f, 55.f, 21.f
3467 };
3468
3469 const armnn::PermutationVector NCHWToNHWC = { 0, 3, 1, 2 };
3470 if (dataLayout == armnn::DataLayout::NHWC)
3471 {
3472 std::vector<float> tmp(inputData.size());
3473 armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(float));
3474 inputData = tmp;
3475
3476 std::vector<float> tmp1(outputData.size());
3477 armnnUtils::Permute(outputTensorInfo.GetShape(), NCHWToNHWC, outputData.data(), tmp1.data(), sizeof(float));
3478 outputData = tmp1;
3479 }
3480
3481 auto input = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(),
3482 inputTensorInfo.GetQuantizationOffset(),
3483 inputData));
3484
3485 LayerTestResult<T, 4> result(outputTensorInfo);
3486 result.outputExpected = MakeTensor<T, 4>(outputTensorInfo,
3487 QuantizedVector<T>(outputTensorInfo.GetQuantizationScale(),
3488 outputTensorInfo.GetQuantizationOffset(),
3489 outputData));
3490
3491 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
3492 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
3493
3494 armnn::ResizeQueueDescriptor descriptor;
3495 descriptor.m_Parameters.m_DataLayout = dataLayout;
3496 descriptor.m_Parameters.m_Method = armnn::ResizeMethod::NearestNeighbor;
3497 armnn::WorkloadInfo info;
3498 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
3499 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
3500
3501 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateResize(descriptor, info);
3502
3503 inputHandle->Allocate();
3504 outputHandle->Allocate();
3505 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
3506
3507 workload->PostAllocationConfigure();
3508 workload->Execute();
3509
3510 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
3511 return result;
3512}
3513
3514template<armnn::DataType ArmnnType, typename T>
3515LayerTestResult<T, 4> ResizeNearestNeighborMagTest(
3516 armnn::IWorkloadFactory& workloadFactory,
3517 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Aron Virginas-Tarcc0cefb2019-07-02 17:25:47 +01003518 const armnn::DataLayout dataLayout,
3519 float inQuantScale,
3520 int32_t inQuantOffset,
3521 float outQuantScale,
3522 int32_t outQuantOffset)
Teresa Charlin970f43b2019-07-01 13:51:07 +01003523{
3524 armnn::TensorInfo inputTensorInfo = armnn::IsQuantizedType<T>()
3525 ? armnnUtils::GetTensorInfo(1, 1, 3, 2, dataLayout, ArmnnType)
3526 : armnnUtils::GetTensorInfo(1, 2, 3, 2, dataLayout, ArmnnType);
3527 armnn::TensorInfo outputTensorInfo = armnn::IsQuantizedType<T>()
3528 ? armnnUtils::GetTensorInfo(1, 1, 3, 5, dataLayout, ArmnnType)
3529 : armnnUtils::GetTensorInfo(1, 2, 3, 5, dataLayout, ArmnnType);
3530
3531 if (armnn::IsQuantizedType<T>())
3532 {
Aron Virginas-Tarcc0cefb2019-07-02 17:25:47 +01003533 inputTensorInfo.SetQuantizationScale(inQuantScale);
3534 inputTensorInfo.SetQuantizationOffset(inQuantOffset);
3535 outputTensorInfo.SetQuantizationScale(outQuantScale);
3536 outputTensorInfo.SetQuantizationOffset(outQuantOffset);
Teresa Charlin970f43b2019-07-01 13:51:07 +01003537 }
3538
3539 std::vector<float> inputData = armnn::IsQuantizedType<T>()
3540 ? std::initializer_list<float>
Aron Virginas-Tarcc0cefb2019-07-02 17:25:47 +01003541 {
3542 0.183005f, 2.379065f, // 24, 228, : expected quantised values
3543 1.054970f, 1.302565f, // 105, 128,
3544 2.400595f, 0.688960f // 230, 71
3545 }
Teresa Charlin970f43b2019-07-01 13:51:07 +01003546 : std::initializer_list<float>
Aron Virginas-Tarcc0cefb2019-07-02 17:25:47 +01003547 {
3548 1.0f, 2.0f,
3549 13.0f, 21.0f,
3550 144.0f, 233.0f,
Teresa Charlin970f43b2019-07-01 13:51:07 +01003551
Aron Virginas-Tarcc0cefb2019-07-02 17:25:47 +01003552 233.0f, 144.0f,
3553 21.0f, 13.0f,
3554 2.0f, 1.0f
3555 };
Teresa Charlin970f43b2019-07-01 13:51:07 +01003556 std::vector<float> outputData = armnn::IsQuantizedType<T>()
3557 ? std::initializer_list<float>
Aron Virginas-Tarcc0cefb2019-07-02 17:25:47 +01003558 {
3559 0.183005f, 0.183005f, 0.183005f, 2.379065f, 2.379065f,
3560 1.054970f, 1.054970f, 1.054970f, 1.302565f, 1.302565f,
3561 2.400595f, 2.400595f, 2.400595f, 0.688960f, 0.688960f
3562 }
Teresa Charlin970f43b2019-07-01 13:51:07 +01003563 : std::initializer_list<float>
Aron Virginas-Tarcc0cefb2019-07-02 17:25:47 +01003564 {
3565 1.f, 1.f, 1.f, 2.f, 2.f,
3566 13.f, 13.f, 13.f, 21.f, 21.f,
3567 144.f, 144.f, 144.f, 233.f, 233.f,
Teresa Charlin970f43b2019-07-01 13:51:07 +01003568
Aron Virginas-Tarcc0cefb2019-07-02 17:25:47 +01003569 233.f, 233.f, 233.f, 144.f, 144.f,
3570 21.f, 21.f, 21.f, 13.f, 13.f,
3571 2.f, 2.f, 2.f, 1.f, 1.f
3572 };
Teresa Charlin970f43b2019-07-01 13:51:07 +01003573
3574 const armnn::PermutationVector NCHWToNHWC = { 0, 3, 1, 2 };
3575 if (dataLayout == armnn::DataLayout::NHWC)
3576 {
3577 std::vector<float> tmp(inputData.size());
3578 armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(float));
3579 inputData = tmp;
3580
3581 std::vector<float> tmp1(outputData.size());
3582 armnnUtils::Permute(outputTensorInfo.GetShape(), NCHWToNHWC, outputData.data(), tmp1.data(), sizeof(float));
3583 outputData = tmp1;
3584 }
3585
3586 auto input = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(),
3587 inputTensorInfo.GetQuantizationOffset(),
3588 inputData));
3589
3590 LayerTestResult<T, 4> result(outputTensorInfo);
3591 result.outputExpected = MakeTensor<T, 4>(outputTensorInfo,
3592 QuantizedVector<T>(outputTensorInfo.GetQuantizationScale(),
3593 outputTensorInfo.GetQuantizationOffset(),
3594 outputData));
3595
3596 std::unique_ptr <armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
3597 std::unique_ptr <armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
3598
3599 armnn::ResizeQueueDescriptor descriptor;
3600 descriptor.m_Parameters.m_DataLayout = dataLayout;
3601 descriptor.m_Parameters.m_Method = armnn::ResizeMethod::NearestNeighbor;
3602 armnn::WorkloadInfo info;
3603 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
3604 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
3605
3606 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateResize(descriptor, info);
3607
3608 inputHandle->Allocate();
3609 outputHandle->Allocate();
3610 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
3611
3612 workload->PostAllocationConfigure();
3613 workload->Execute();
3614
3615 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
3616 return result;
3617}
3618
James Conroy4d1ff582019-06-10 17:06:39 +01003619template<armnn::DataType ArmnnType, typename T, std::size_t InputDim, std::size_t OutputDim>
3620LayerTestResult<T, OutputDim> MeanTestHelper(
3621 armnn::IWorkloadFactory& workloadFactory,
3622 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
3623 const unsigned int* inputShape,
3624 const std::vector<float>& inputData,
3625 const std::vector<unsigned int>& axis,
3626 bool keepDims,
3627 const unsigned int* outputShape,
3628 const std::vector<float>& outputData,
3629 float scale = 1.0f,
3630 int32_t offset = 0)
3631{
3632 armnn::TensorInfo inputTensorInfo(InputDim, inputShape, ArmnnType);
3633 armnn::TensorInfo outputTensorInfo(OutputDim, outputShape, ArmnnType);
3634
3635 inputTensorInfo.SetQuantizationScale(scale);
3636 inputTensorInfo.SetQuantizationOffset(offset);
3637
3638 outputTensorInfo.SetQuantizationScale(scale);
3639 outputTensorInfo.SetQuantizationOffset(offset);
3640
3641 auto input = MakeTensor<T, InputDim>(inputTensorInfo, ConvertToDataType<ArmnnType>(inputData, inputTensorInfo));
3642
3643 LayerTestResult<T, OutputDim> result(outputTensorInfo);
3644 result.outputExpected = MakeTensor<T, OutputDim>(
3645 outputTensorInfo, ConvertToDataType<ArmnnType>(outputData, outputTensorInfo));
3646
3647 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
3648 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
3649
3650 armnn::MeanQueueDescriptor data;
3651 data.m_Parameters.m_Axis = axis;
3652 data.m_Parameters.m_KeepDims = keepDims;
3653 armnn::WorkloadInfo info;
3654 AddInputToWorkload(data, info, inputTensorInfo, inputHandle.get());
3655 AddOutputToWorkload(data, info, outputTensorInfo, outputHandle.get());
3656
3657 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateMean(data, info);
3658
3659 inputHandle->Allocate();
3660 outputHandle->Allocate();
3661
3662 CopyDataToITensorHandle(inputHandle.get(), input.origin());
3663
3664 workload->PostAllocationConfigure();
3665 workload->Execute();
3666
3667 CopyDataFromITensorHandle(result.output.origin(), outputHandle.get());
3668
3669 return result;
3670}
3671
3672template<armnn::DataType ArmnnType, typename T>
3673LayerTestResult<T, 1> MeanSimpleTest(
3674 armnn::IWorkloadFactory& workloadFactory,
3675 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3676{
3677 const unsigned int inputShape[] = { 3, 2 };
3678 const unsigned int outputShape[] = { 1 };
3679
3680 std::vector<float> input({ 1.5f, 1.5f, 2.5f, 2.5f, 3.5f, 3.5f });
3681 std::vector<float> output({ 2.5f });
3682
3683 return MeanTestHelper<ArmnnType, T, 2, 1>(
3684 workloadFactory, memoryManager, inputShape, input, {}, false, outputShape, output);
3685}
3686
3687template<armnn::DataType ArmnnType, typename T>
3688LayerTestResult<T, 3> MeanSimpleAxisTest(
3689 armnn::IWorkloadFactory& workloadFactory,
3690 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3691{
3692 const unsigned int inputShape[] = { 2, 3, 1, 2 };
3693 const unsigned int outputShape[] = { 3, 1, 2 };
3694
3695 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 });
3696 std::vector<float> output({ 1.5f, 2.5f, 3.5f, 4.5f, 5.5f, 6.5f });
3697
3698 return MeanTestHelper<ArmnnType, T, 4, 3>(
3699 workloadFactory, memoryManager, inputShape, input, { 0 }, false, outputShape, output);
3700}
3701
3702template<armnn::DataType ArmnnType, typename T>
3703LayerTestResult<T, 4> MeanKeepDimsTest(
3704 armnn::IWorkloadFactory& workloadFactory,
3705 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3706{
3707 const unsigned int inputShape[] = { 1, 1, 3, 2 };
3708 const unsigned int outputShape[] = { 1, 1, 1, 2 };
3709
3710 std::vector<float> input({ 1.5f, 1.5f, 2.5f, 2.5f, 3.5f, 3.5f });
3711 std::vector<float> output({ 2.5f, 2.5f });
3712
3713 return MeanTestHelper<ArmnnType, T, 4, 4>(
3714 workloadFactory, memoryManager, inputShape, input, { 2 }, true, outputShape, output);
3715}
3716
3717template<armnn::DataType ArmnnType, typename T>
3718LayerTestResult<T, 4> MeanMultipleDimsTest(
3719 armnn::IWorkloadFactory& workloadFactory,
3720 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3721{
3722 const unsigned int inputShape[] = { 2, 3, 1, 2 };
3723 const unsigned int outputShape[] = { 1, 3, 1, 1 };
3724
3725 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 });
3726 std::vector<float> output({ 2.0f, 4.0f, 6.0f });
3727
3728 return MeanTestHelper<ArmnnType, T, 4, 4>(
3729 workloadFactory, memoryManager, inputShape, input, { 0, 3 }, true, outputShape, output);
3730}
3731
3732template<armnn::DataType ArmnnType, typename T>
3733LayerTestResult<T, 1> MeanVts1Test(
3734 armnn::IWorkloadFactory& workloadFactory,
3735 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3736{
3737 const unsigned int inputShape[] = { 4, 3, 2 };
3738 const unsigned int outputShape[] = { 2 };
3739
3740 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,
3741 15.0f, 16.0f, 17.0f, 18.0f, 19.0f, 20.0f, 21.0f, 22.0f, 23.0f, 24.0f });
3742 std::vector<float> output({ 12.0f, 13.0f });
3743
3744 return MeanTestHelper<ArmnnType, T, 3, 1>(
3745 workloadFactory, memoryManager, inputShape, input, { 0, 1 }, false, outputShape, output);
3746}
3747
3748template<armnn::DataType ArmnnType, typename T>
3749LayerTestResult<T, 3> MeanVts2Test(
3750 armnn::IWorkloadFactory& workloadFactory,
3751 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3752{
3753 const unsigned int inputShape[] = { 4, 3, 2 };
3754 const unsigned int outputShape[] = { 1, 3, 1 };
3755
3756 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,
3757 15.0f, 16.0f, 17.0f, 18.0f, 19.0f, 20.0f, 21.0f, 22.0f, 23.0f, 24.0f });
3758 std::vector<float> output({ 10.5f, 12.5f, 14.5f });
3759
3760 return MeanTestHelper<ArmnnType, T, 3, 3>(
3761 workloadFactory, memoryManager, inputShape, input, { 0, 2 }, true, outputShape, output);
3762}
3763
3764template<armnn::DataType ArmnnType, typename T>
3765LayerTestResult<T, 3> MeanVts3Test(
3766 armnn::IWorkloadFactory& workloadFactory,
3767 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3768{
3769 const unsigned int inputShape[] = { 1, 2, 2, 1 };
3770 const unsigned int outputShape[] = { 1, 2, 1 };
3771
3772 std::vector<float> input({ 1.0f, 2.0f, 3.0f, 4.0f });
3773 std::vector<float> output({ 1.5f, 3.5f });
3774
3775 return MeanTestHelper<ArmnnType, T, 4, 3>(
3776 workloadFactory, memoryManager, inputShape, input, { 2 }, false, outputShape, output);
3777}
Narumol Prangnawarat71c80b12019-06-17 17:45:43 +01003778
3779template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
3780LayerTestResult<T, 3> ConcatDifferentInputOutputQParamTest(
3781 armnn::IWorkloadFactory& workloadFactory,
3782 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
3783 bool useSubtensor)
3784{
3785 // Defines the tensor descriptors.
3786 armnn::TensorInfo outputTensorInfo({ 3, 6, 3 }, ArmnnType);
3787 armnn::TensorInfo inputTensorInfo1({ 3, 6, 2 }, ArmnnType);
3788 armnn::TensorInfo inputTensorInfo2({ 3, 6, 1 }, ArmnnType);
3789
3790 std::vector<armnn::TensorShape> inputTensorShapes({inputTensorInfo1.GetShape(), inputTensorInfo2.GetShape()});
3791
3792 // Quantized input1 tensor.
3793 const float inputScale1 = 0.5f;
3794 const int32_t inputOffset1 = 5;
3795
3796 auto input1 = MakeTensor<T, 3>(inputTensorInfo1, std::vector<T>(
3797 {
3798 1, 2, 3,
3799 4, 5, 6,
3800 7, 8, 9,
3801 10, 11, 12,
3802 13, 14, 15,
3803 16, 17, 18,
3804
3805 19, 20, 21,
3806 22, 23, 24,
3807 25, 26, 27,
3808 28, 29, 30,
3809 31, 32, 33,
3810 34, 35, 36
3811 }));
3812
3813 // Quatized input2 tensor.
3814 const float inputScale2 = 0.2f;
3815 const int32_t inputOffset2 = 10;
3816
3817 auto input2 = MakeTensor<T, 3>(inputTensorInfo2, std::vector<T>(
3818 {
3819 37, 38, 39,
3820 40, 41, 42,
3821 43, 44, 45,
3822 46, 47, 48,
3823 49, 50, 51,
3824 52, 53, 54
3825 }));
3826
3827 // Quantized output tensor.
3828 const float outputScale = 0.1f;
3829 const int32_t outputOffset = 20;
3830
3831 LayerTestResult<T, 3> ret(outputTensorInfo);
3832
3833 ret.outputExpected = MakeTensor<T, 3>(outputTensorInfo, std::vector<T>(
3834 {
3835 0, 5, 74,
3836 10, 15, 76,
3837 20, 25, 78,
3838 30, 35, 80,
3839 40, 45, 82,
3840 50, 55, 84,
3841
3842 60, 65, 86,
3843 70, 75, 88,
3844 80, 85, 90,
3845 90, 95, 92,
3846 100, 105, 94,
3847 110, 115, 96,
3848
3849 120, 125, 98,
3850 130, 135, 100,
3851 140, 145, 102,
3852 150, 155, 104,
3853 160, 165, 106,
3854 170, 175, 108
3855 }));
3856
3857 outputTensorInfo.SetQuantizationScale(outputScale);
3858 outputTensorInfo.SetQuantizationOffset(outputOffset);
3859 inputTensorInfo1.SetQuantizationScale(inputScale1);
3860 inputTensorInfo1.SetQuantizationOffset(inputOffset1);
3861 inputTensorInfo2.SetQuantizationScale(inputScale2);
3862 inputTensorInfo2.SetQuantizationOffset(inputOffset2);
3863
3864 std::vector<unsigned int> wOrigin1 = { 0, 0, 0 }; //Extent of the window is defined by size of input[0].
3865 armnn::ConcatQueueDescriptor::ViewOrigin window1(wOrigin1);
3866
3867 std::vector<unsigned int> wOrigin2 = { 0, 0, 2 }; //Extent of the window is defined by size of input[1].
3868 armnn::ConcatQueueDescriptor::ViewOrigin window2(wOrigin2);
3869
3870 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
3871
3872 bool subTensorsSupported = useSubtensor && workloadFactory.SupportsSubTensors();
3873
3874 std::unique_ptr<armnn::ITensorHandle> inputHandle1 =
3875 subTensorsSupported ?
3876 workloadFactory.CreateSubTensorHandle(*outputHandle, inputTensorInfo1.GetShape(), wOrigin1.data()) :
3877 workloadFactory.CreateTensorHandle(inputTensorInfo1);
3878
3879 std::unique_ptr<armnn::ITensorHandle> inputHandle2 =
3880 subTensorsSupported ?
3881 workloadFactory.CreateSubTensorHandle(*outputHandle, inputTensorInfo2.GetShape(), wOrigin2.data()) :
3882 workloadFactory.CreateTensorHandle(inputTensorInfo2);
3883
3884 armnn::ConcatQueueDescriptor data;
3885 armnn::OriginsDescriptor desc = armnn::CreateDescriptorForConcatenation(
3886 inputTensorShapes.begin(),inputTensorShapes.end(), 2);
3887 data.m_Parameters = desc;
3888
3889 armnn::WorkloadInfo info;
3890 AddInputToWorkload(data, info, inputTensorInfo1, inputHandle1.get());
3891 AddInputToWorkload(data, info, inputTensorInfo2, inputHandle2.get());
3892 AddOutputToWorkload(data, info, outputTensorInfo, outputHandle.get());
3893
3894 data.m_ViewOrigins.push_back(window1);
3895 data.m_ViewOrigins.push_back(window2);
3896
3897 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateConcat(data, info);
3898
3899 inputHandle1->Allocate();
3900 inputHandle2->Allocate();
3901 outputHandle->Allocate();
3902
3903 CopyDataToITensorHandle(inputHandle1.get(), &input1[0][0][0]);
3904 CopyDataToITensorHandle(inputHandle2.get(), &input2[0][0][0]);
3905
3906 workload->PostAllocationConfigure();
3907 workload->Execute();
3908
3909 CopyDataFromITensorHandle(&ret.output[0][0][0], outputHandle.get());
3910
3911 return ret;
3912}
Matteo Martincighab9e5252019-06-13 17:27:46 +01003913
3914template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
3915LayerTestResult<T, 4> PreluTest(
3916 armnn::IWorkloadFactory& workloadFactory,
3917 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3918{
3919 armnn::TensorInfo inputTensorInfo ({ 1, 2, 2, 3 }, ArmnnType);
3920 armnn::TensorInfo alphaTensorInfo ({ 1, 1, 1, 3 }, ArmnnType);
3921 armnn::TensorInfo outputTensorInfo({ 1, 2, 2, 3 }, ArmnnType);
3922
3923 if (armnn::IsQuantizedType<T>())
3924 {
3925 inputTensorInfo.SetQuantizationScale(0.25f);
3926 inputTensorInfo.SetQuantizationOffset(128);
3927 alphaTensorInfo.SetQuantizationScale(0.25f);
3928 alphaTensorInfo.SetQuantizationOffset(50);
3929 outputTensorInfo.SetQuantizationScale(0.5f);
3930 outputTensorInfo.SetQuantizationOffset(120);
3931 }
3932
3933 std::vector<float> inputData
3934 {
3935 // Expected quantized values:
3936 // 128, 128, 128, 132, 132, 132, 124, 124, 124, 120, 120, 120
3937 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, -1.0f, -1.0f, -1.0f, -2.0f, -2.0f, -2.0f
3938 };
3939 std::vector<float> alphaData
3940 {
3941 // Expected quantized values:
3942 // 50, 54, 58
3943 0.0f, 1.0f, 2.0f
3944 };
3945 std::vector<float> outputExpectedData =
3946 {
3947 // Expected quantized values:
3948 // 20, 120, 120, 122, 122, 122, 120, 118, 116, 120, 116, 112
3949 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, 0.0f, -1.0f, -2.0f, 0.0f, -2.0f, -4.0f
3950 };
3951
3952 auto input = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(),
3953 inputTensorInfo.GetQuantizationOffset(),
3954 inputData));
3955 auto alpha = MakeTensor<T, 4>(alphaTensorInfo, QuantizedVector<T>(alphaTensorInfo.GetQuantizationScale(),
3956 alphaTensorInfo.GetQuantizationOffset(),
3957 alphaData));
3958
3959 LayerTestResult<T, 4> result(outputTensorInfo);
3960 result.outputExpected = MakeTensor<T, 4>(outputTensorInfo,
3961 QuantizedVector<T>(outputTensorInfo.GetQuantizationScale(),
3962 outputTensorInfo.GetQuantizationOffset(),
3963 outputExpectedData));
3964
3965 std::unique_ptr <armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
3966 std::unique_ptr <armnn::ITensorHandle> alphaHandle = workloadFactory.CreateTensorHandle(alphaTensorInfo);
3967 std::unique_ptr <armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
3968
3969 armnn::PreluQueueDescriptor descriptor;
3970 armnn::WorkloadInfo info;
3971 AddInputToWorkload (descriptor, info, inputTensorInfo, inputHandle.get());
3972 AddInputToWorkload (descriptor, info, alphaTensorInfo, alphaHandle.get());
3973 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
3974
3975 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreatePrelu(descriptor, info);
3976
3977 inputHandle->Allocate();
3978 alphaHandle->Allocate();
3979 outputHandle->Allocate();
3980
3981 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
3982 CopyDataToITensorHandle(alphaHandle.get(), &alpha[0][0][0][0]);
3983
3984 workload->Execute();
3985
3986 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
3987
3988 return result;
3989}
3990
Francis Murtagh57f13d52019-06-24 14:24:36 +01003991template<armnn::DataType ArmnnType,
3992 std::size_t InputDim,
3993 std::size_t OutputDim,
3994 typename T = armnn::ResolveType<ArmnnType>>
3995LayerTestResult<T, OutputDim> BatchToSpaceNdHelper(
3996 armnn::IWorkloadFactory &workloadFactory,
3997 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
3998 const armnn::DataLayout& dataLayout,
3999 const unsigned int *inputShape,
4000 const std::vector<float> &inputData,
4001 const std::vector<unsigned int> &blockShape,
4002 const std::vector<std::pair<unsigned int, unsigned int>> &crops,
4003 const unsigned int *outputShape,
4004 const std::vector<float> &outputData,
4005 float scale = 1.0f,
4006 int32_t offset = 0)
4007{
4008 armnn::TensorInfo inputTensorInfo(InputDim, inputShape, ArmnnType);
4009 armnn::TensorInfo outputTensorInfo(OutputDim, outputShape, ArmnnType);
4010
4011 inputTensorInfo.SetQuantizationScale(scale);
4012 inputTensorInfo.SetQuantizationOffset(offset);
4013
4014 outputTensorInfo.SetQuantizationScale(scale);
4015 outputTensorInfo.SetQuantizationOffset(offset);
Francis Murtaghd0dfe172019-06-25 10:57:10 +01004016
Francis Murtagh57f13d52019-06-24 14:24:36 +01004017 auto input = MakeTensor<T, InputDim>(inputTensorInfo, ConvertToDataType<ArmnnType>(inputData, inputTensorInfo));
4018
4019 LayerTestResult<T, OutputDim> result(outputTensorInfo);
4020 result.outputExpected = MakeTensor<T, OutputDim>(outputTensorInfo,
4021 ConvertToDataType<ArmnnType>(outputData, outputTensorInfo));
4022
4023 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
4024 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
4025
4026 armnn::BatchToSpaceNdQueueDescriptor data;
4027 data.m_Parameters.m_DataLayout = dataLayout;
4028 data.m_Parameters.m_BlockShape = blockShape;
4029 data.m_Parameters.m_Crops = crops;
4030 armnn::WorkloadInfo info;
4031 AddInputToWorkload(data, info, inputTensorInfo, inputHandle.get());
4032 AddOutputToWorkload(data, info, outputTensorInfo, outputHandle.get());
4033
4034 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateBatchToSpaceNd(data, info);
4035
4036 inputHandle->Allocate();
4037 outputHandle->Allocate();
4038
4039 CopyDataToITensorHandle(inputHandle.get(), input.origin());
4040
4041 workload->PostAllocationConfigure();
4042 workload->Execute();
4043
4044 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
4045
4046 return result;
4047}
4048
4049template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
4050LayerTestResult<T, 4> BatchToSpaceNdNhwcTest1(
4051 armnn::IWorkloadFactory& workloadFactory,
4052 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
4053{
4054 const unsigned int inputShape[] = {4, 2, 2, 1};
4055 const unsigned int outputShape[] = {1, 4, 4, 1};
4056
4057 std::vector<float> input({
4058 // Batch 0, Height 0, Width (2) x Channel (1)
4059 1.0f, 3.0f,
4060 // Batch 0, Height 1, Width (2) x Channel (1)
4061 9.0f, 11.0f,
4062
4063
4064 // Batch 1, Height 0, Width (2) x Channel (1)
4065 2.0f, 4.0f,
4066 // Batch 1, Height 1, Width (2) x Channel (1)
4067 10.0f, 12.0f,
4068
4069
4070 // Batch 2, Height 0, Width (2) x Channel (1)
4071 5.0f, 7.0f,
4072 // Batch 2, Height 1, Width (2) x Channel (1)
4073 13.0f, 15.0f,
4074
4075 // Batch 3, Height 0, Width (2) x Channel (3)
4076 6.0f, 8.0f,
4077 // Batch 3, Height 1, Width (2) x Channel (1)
4078 14.0f, 16.0f
4079 });
4080
4081 std::vector<float> expectedOutput({
4082 1.0f, 2.0f, 3.0f, 4.0f,
4083 5.0f, 6.0f, 7.0f, 8.0f,
4084 9.0f, 10.0f, 11.0f, 12.0f,
4085 13.0f, 14.0f, 15.0f, 16.0f
4086 });
4087
4088 std::vector<unsigned int> blockShape {2, 2};
4089 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
4090
4091 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
4092 armnn::DataLayout::NHWC, inputShape, input, blockShape,
4093 crops, outputShape, expectedOutput);
4094}
4095
4096template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
4097LayerTestResult<T, 4> BatchToSpaceNdNhwcTest2(
4098 armnn::IWorkloadFactory& workloadFactory,
4099 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
4100{
4101 const unsigned int inputShape[] = {4, 1, 1, 1};
4102 const unsigned int outputShape[] = {1, 2, 2, 1};
4103
4104 std::vector<float> input({
4105 // Batch 0, Height 0, Width (2) x Channel (1)
4106 1.0f, 2.0f, 3.0f, 4.0f
4107 });
4108
4109 std::vector<float> expectedOutput({1.0f, 2.0f, 3.0f, 4.0f});
4110
4111 std::vector<unsigned int> blockShape({2, 2});
4112 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
4113
4114 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
4115 armnn::DataLayout::NHWC, inputShape, input, blockShape,
4116 crops, outputShape, expectedOutput);
4117}
4118
4119template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
4120LayerTestResult<T, 4> BatchToSpaceNdNhwcTest3(
4121 armnn::IWorkloadFactory& workloadFactory,
4122 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
4123{
4124 const unsigned int inputShape[] = {4, 1, 1, 3};
4125 const unsigned int outputShape[] = {1, 2, 2, 3};
4126
4127 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});
4128
4129 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});
4130
4131 std::vector<unsigned int> blockShape({2, 2});
4132 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
4133
4134 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
4135 armnn::DataLayout::NHWC, inputShape, input, blockShape,
4136 crops, outputShape, expectedOutput);
4137}
4138
4139template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
4140LayerTestResult<T, 4> BatchToSpaceNdNhwcTest4(
4141 armnn::IWorkloadFactory& workloadFactory,
4142 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
4143{
4144 const unsigned int inputShape[] = {8, 1, 3, 1};
4145 const unsigned int outputShape[] = {2, 2, 4, 1};
4146
4147 std::vector<float> input({
4148 0.0f, 1.0f, 3.0f,
4149 0.0f, 9.0f, 11.0f,
4150 0.0f, 2.0f, 4.0f,
4151 0.0f, 10.0f, 12.0f,
4152 0.0f, 5.0f, 7.0f,
4153 0.0f, 13.0f, 15.0f,
4154 0.0f, 6.0f, 8.0f,
4155 0.0f, 14.0f, 16.0f
4156 });
4157
4158 std::vector<float> expectedOutput({
4159 1.0f, 2.0f, 3.0f, 4.0f,
4160 5.0f, 6.0f, 7.0f, 8.0f,
4161 9.0f, 10.0f, 11.0f, 12.0f,
4162 13.0f, 14.0f, 15.0f, 16.0f
4163 });
4164
4165 std::vector<unsigned int> blockShape({2, 2});
4166 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {2, 0}};
4167
4168 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
4169 armnn::DataLayout::NHWC, inputShape, input, blockShape,
4170 crops, outputShape, expectedOutput);
4171}
4172
4173template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
4174LayerTestResult<T, 4> BatchToSpaceNdNhwcTest5(
4175 armnn::IWorkloadFactory& workloadFactory,
4176 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
4177{
4178 const unsigned int inputShape[] = {4, 2, 2, 1};
4179 const unsigned int outputShape[] = {1, 4, 4, 1};
4180
4181 std::vector<float> input({1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16});
4182 std::vector<float> expectedOutput({1, 5, 2, 6, 9, 13, 10, 14, 3, 7, 4, 8, 11, 15, 12, 16});
4183
4184 std::vector<unsigned int> blockShape({2, 2});
4185 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
4186
4187 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager, armnn::DataLayout::NHWC, inputShape,
4188 input, blockShape, crops, outputShape, expectedOutput);
4189}
4190
4191template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
4192LayerTestResult<T, 4> BatchToSpaceNdNhwcTest6(
4193 armnn::IWorkloadFactory& workloadFactory,
4194 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
4195{
4196 const unsigned int inputShape[] = {4, 1, 1, 1};
4197 const unsigned int outputShape[] = {1, 2, 2, 1};
4198
4199 std::vector<float> input({
4200 // Batch 0, Height 0, Width (2) x Channel (1)
4201 1, 2, 3, 4
4202 });
4203
4204 std::vector<float> expectedOutput({1, 2, 3, 4});
4205
4206 std::vector<unsigned int> blockShape({2, 2});
4207 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
4208
4209 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
4210 armnn::DataLayout::NHWC, inputShape, input, blockShape,
4211 crops, outputShape, expectedOutput);
4212}
4213
4214template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
4215LayerTestResult<T, 4> BatchToSpaceNdNhwcTest7(
4216 armnn::IWorkloadFactory& workloadFactory,
4217 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
4218{
4219 const unsigned int inputShape[] = {4, 1, 1, 3};
4220 const unsigned int outputShape[] = {1, 2, 2, 3};
4221
4222 std::vector<float> input({1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12});
4223
4224 std::vector<float> expectedOutput({1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12});
4225
4226 std::vector<unsigned int> blockShape({2, 2});
4227 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
4228
4229 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
4230 armnn::DataLayout::NHWC, inputShape, input, blockShape,
4231 crops, outputShape, expectedOutput);
4232}
4233
4234template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
4235LayerTestResult<T, 4> BatchToSpaceNdNchwTest1(
4236 armnn::IWorkloadFactory &workloadFactory,
4237 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
4238{
4239 const unsigned int inputShape[] = {4, 3, 1, 1};
4240 const unsigned int outputShape[] = {1, 3, 2, 2};
4241
4242 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});
4243
4244 std::vector<float> expectedOutput({
4245 // Batch 0, Channel 0, Height (2) x Width (2)
4246 1.0f, 4.0f,
4247 7.0f, 10.0f,
4248
4249 // Batch 0, Channel 1, Height (2) x Width (2)
4250 2.0f, 5.0f,
4251 8.0f, 11.0f,
4252
4253 // Batch 0, Channel 2, Height (2) x Width (2)
4254 3.0f, 6.0f,
4255 9.0f, 12.0f,
4256 });
4257
4258 std::vector<unsigned int> blockShape({2, 2});
4259 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
4260
4261 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
4262 armnn::DataLayout::NCHW, inputShape, input, blockShape,
4263 crops, outputShape, expectedOutput);
4264}
4265
4266template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
4267LayerTestResult<T, 4> BatchToSpaceNdNchwTest2(
4268 armnn::IWorkloadFactory& workloadFactory,
4269 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
4270{
4271 const unsigned int inputShape[] = {4, 1, 1, 1};
4272 const unsigned int outputShape[] = {1, 1, 2, 2};
4273
4274 std::vector<float> input({
4275 // Batch 0, Height 0, Width (2) x Channel (1)
4276 1.0f, 2.0f, 3.0f, 4.0f
4277 });
4278
4279 std::vector<float> expectedOutput({1.0f, 2.0f, 3.0f, 4.0f});
4280
4281 std::vector<unsigned int> blockShape({2, 2});
4282 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
4283
4284 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
4285 armnn::DataLayout::NCHW, inputShape, input, blockShape,
4286 crops, outputShape, expectedOutput);
4287}
4288
4289template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
4290LayerTestResult<T, 4> BatchToSpaceNdNchwTest3(
4291 armnn::IWorkloadFactory& workloadFactory,
4292 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
4293{
4294 const unsigned int inputShape[] = {4, 3, 1, 1};
4295 const unsigned int outputShape[] = {1, 3, 2, 2};
4296
4297 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});
4298
4299 std::vector<float> expectedOutput({
4300 // Batch 0, Channel 0, Height (2) x Width (2)
4301 1.0f, 7.0f,
4302 2.0f, 8.0f,
4303
4304 // Batch 0, Channel 1, Height (2) x Width (2)
4305 3.0f, 9.0f,
4306 4.0f, 10.0f,
4307
4308 // Batch 0, Channel 2, Height (2) x Width (2)
4309 5.0f, 11.0f,
4310 6.0f, 12.0f,
4311 });
4312
4313 std::vector<unsigned int> blockShape({2, 2});
4314 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
4315
4316 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
4317 armnn::DataLayout::NCHW, inputShape, input, blockShape,
4318 crops, outputShape, expectedOutput);
4319}
4320
4321template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
4322LayerTestResult<T, 4> BatchToSpaceNdNchwTest4(
4323 armnn::IWorkloadFactory &workloadFactory,
4324 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
4325{
4326 const unsigned int inputShape[] = {4, 3, 1, 1};
4327 const unsigned int outputShape[] = {1, 3, 2, 2};
4328
4329 std::vector<float> input({1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12});
4330
4331 std::vector<float> expectedOutput({
4332 // Batch 0, Channel 0, Height (2) x Width (2)
4333 1, 4,
4334 7, 10,
4335
4336 // Batch 0, Channel 1, Height (2) x Width (2)
4337 2, 5,
4338 8, 11,
4339
4340 // Batch 0, Channel 2, Height (2) x Width (2)
4341 3, 6,
4342 9, 12,
4343 });
4344
4345 std::vector<unsigned int> blockShape({2, 2});
4346 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
4347
4348 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
4349 armnn::DataLayout::NCHW, inputShape, input, blockShape,
4350 crops, outputShape, expectedOutput);
4351}
4352
4353template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
4354LayerTestResult<T, 4> BatchToSpaceNdNchwTest5(
4355 armnn::IWorkloadFactory& workloadFactory,
4356 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
4357{
4358 const unsigned int inputShape[] = {4, 1, 1, 1};
4359 const unsigned int outputShape[] = {1, 1, 2, 2};
4360
4361 std::vector<float> input({
4362 // Batch 0, Height 0, Width (2) x Channel (1)
4363 1, 2, 3, 4
4364 });
4365
4366 std::vector<float> expectedOutput({1, 2, 3, 4});
4367
4368 std::vector<unsigned int> blockShape({2, 2});
4369 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
4370
4371 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
4372 armnn::DataLayout::NCHW, inputShape, input, blockShape,
4373 crops, outputShape, expectedOutput);
4374}
4375
4376template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
4377LayerTestResult<T, 4> BatchToSpaceNdNchwTest6(
4378 armnn::IWorkloadFactory& workloadFactory,
4379 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
4380{
4381 const unsigned int inputShape[] = {4, 3, 1, 1};
4382 const unsigned int outputShape[] = {1, 3, 2, 2};
4383
4384 std::vector<float> input({1, 3, 5, 7, 9, 11, 2, 4, 6, 8, 10, 12});
4385
4386 std::vector<float> expectedOutput({
4387 // Batch 0, Channel 0, Height (2) x Width (2)
4388 1, 7,
4389 2, 8,
4390
4391 // Batch 0, Channel 1, Height (2) x Width (2)
4392 3, 9,
4393 4, 10,
4394
4395 // Batch 0, Channel 2, Height (2) x Width (2)
4396 5, 11,
4397 6, 12,
4398 });
4399
4400 std::vector<unsigned int> blockShape({2, 2});
4401 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
4402
4403 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
4404 armnn::DataLayout::NCHW, inputShape, input, blockShape,
4405 crops, outputShape, expectedOutput);
4406}
4407
4408template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
4409LayerTestResult<T, 4> BatchToSpaceNdNchwTest7(
4410 armnn::IWorkloadFactory& workloadFactory,
4411 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
4412{
4413 const unsigned int inputShape[] = {8, 1, 1, 3};
4414 const unsigned int outputShape[] = {2, 1, 2, 4};
4415
4416 std::vector<float> input({
4417 0, 1, 3, 0, 9, 11,
4418 0, 2, 4, 0, 10, 12,
4419 0, 5, 7, 0, 13, 15,
4420 0, 6, 8, 0, 14, 16
4421 });
4422
4423 std::vector<float> expectedOutput({
4424 1, 2, 3, 4,
4425 5, 6, 7, 8,
4426 9, 10, 11, 12,
4427 13, 14, 15, 16
4428 });
4429
4430 std::vector<unsigned int> blockShape({2, 2});
4431 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {2, 0}};
4432
4433 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
4434 armnn::DataLayout::NCHW, inputShape, input, blockShape,
4435 crops, outputShape, expectedOutput);
4436}
4437
Matteo Martincighab9e5252019-06-13 17:27:46 +01004438template LayerTestResult<typename armnn::ResolveType<armnn::DataType::Float32>, 4>
4439PreluTest<armnn::DataType::Float32>(
4440 armnn::IWorkloadFactory& workloadFactory,
4441 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4442
4443template LayerTestResult<typename armnn::ResolveType<armnn::DataType::QuantisedAsymm8>, 4>
4444PreluTest<armnn::DataType::QuantisedAsymm8>(
4445 armnn::IWorkloadFactory& workloadFactory,
4446 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4447
4448template LayerTestResult<typename armnn::ResolveType<armnn::DataType::QuantisedSymm16>, 4>
4449PreluTest<armnn::DataType::QuantisedSymm16>(
4450 armnn::IWorkloadFactory& workloadFactory,
4451 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Aron Virginas-Tar735a4502019-06-26 15:02:47 +01004452
Matthew Jackson81e601c2019-07-11 12:07:09 +01004453template<armnn::DataType ArmnnType, typename T, std::size_t outputDimLength>
4454LayerTestResult<T, outputDimLength> StackTestHelper(
4455 armnn::IWorkloadFactory& workloadFactory,
4456 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
4457 const armnn::TensorInfo& inputTensorInfo,
4458 const armnn::TensorInfo& outputTensorInfo,
4459 unsigned int axis,
4460 const std::vector<std::vector<T>>& inputData,
4461 const std::vector<T>& outputExpectedData)
4462{
4463 unsigned int numInputs = static_cast<unsigned int>(inputData.size());
4464 std::vector<boost::multi_array<T, outputDimLength-1>> inputs;
4465 for (unsigned int i = 0; i < numInputs; ++i)
4466 {
4467 inputs.push_back(MakeTensor<T, outputDimLength-1>(inputTensorInfo, inputData[i]));
4468 }
4469
4470 LayerTestResult<T, outputDimLength> result(outputTensorInfo);
4471 result.outputExpected = MakeTensor<T, outputDimLength>(outputTensorInfo, outputExpectedData);
4472
4473 std::vector<std::unique_ptr<armnn::ITensorHandle>> inputHandles;
4474 for (unsigned int i = 0; i < numInputs; ++i)
4475 {
4476 inputHandles.push_back(workloadFactory.CreateTensorHandle(inputTensorInfo));
4477 }
4478 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
4479
4480 armnn::StackQueueDescriptor descriptor;
4481 descriptor.m_Parameters.m_Axis = axis;
4482 descriptor.m_Parameters.m_InputShape = inputTensorInfo.GetShape();
4483 descriptor.m_Parameters.m_NumInputs = numInputs;
4484
4485 armnn::WorkloadInfo info;
4486 for (unsigned int i = 0; i < numInputs; ++i)
4487 {
4488 std::unique_ptr<armnn::ITensorHandle>& inputHandle = inputHandles[i];
4489 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
4490 inputHandle->Allocate();
4491 CopyDataToITensorHandle(inputHandle.get(), inputs[i].origin());
4492 }
4493
4494 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
4495 outputHandle->Allocate();
4496
4497 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateStack(descriptor, info);
4498
4499 workload->Execute();
4500
4501 CopyDataFromITensorHandle(result.output.origin(), outputHandle.get());
4502
4503 return result;
4504}
4505
4506template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
4507LayerTestResult<T, 4> Stack0AxisTest(
4508 armnn::IWorkloadFactory& workloadFactory,
4509 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
4510{
4511 armnn::TensorInfo inputTensorInfo ({ 3, 2, 3 }, ArmnnType);
4512 armnn::TensorInfo outputTensorInfo({ 2, 3, 2, 3 }, ArmnnType);
4513
4514 std::vector<std::vector<T>> inputData;
4515
4516 inputData.push_back(
4517 {
4518 1, 2, 3,
4519 4, 5, 6,
4520
4521 7, 8, 9,
4522 10, 11, 12,
4523
4524 13, 14, 15,
4525 16, 17, 18
4526 });
4527
4528 inputData.push_back(
4529 {
4530 19, 20, 21,
4531 22, 23, 24,
4532
4533 25, 26, 27,
4534 28, 29, 30,
4535
4536 31, 32, 33,
4537 34, 35, 36
4538 });
4539
4540 std::vector<T> outputExpectedData =
4541 {
4542 1, 2, 3,
4543 4, 5, 6,
4544
4545 7, 8, 9,
4546 10, 11, 12,
4547
4548 13, 14, 15,
4549 16, 17, 18,
4550
4551
4552 19, 20, 21,
4553 22, 23, 24,
4554
4555 25, 26, 27,
4556 28, 29, 30,
4557
4558 31, 32, 33,
4559 34, 35, 36
4560 };
4561
4562 return StackTestHelper<ArmnnType, T, 4>(
4563 workloadFactory,
4564 memoryManager,
4565 inputTensorInfo,
4566 outputTensorInfo,
4567 0U,
4568 inputData,
4569 outputExpectedData
4570 );
4571}
4572
4573template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
4574LayerTestResult<T, 4> Stack4dOutput1AxisTest(
4575 armnn::IWorkloadFactory& workloadFactory,
4576 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
4577{
4578 armnn::TensorInfo inputTensorInfo ({ 3, 2, 3 }, ArmnnType);
4579 armnn::TensorInfo outputTensorInfo({ 3, 2, 2, 3 }, ArmnnType);
4580
4581 std::vector<std::vector<T>> inputData;
4582
4583 inputData.push_back(
4584 {
4585 1, 2, 3,
4586 4, 5, 6,
4587
4588 7, 8, 9,
4589 10, 11, 12,
4590
4591 13, 14, 15,
4592 16, 17, 18
4593 });
4594
4595 inputData.push_back(
4596 {
4597 19, 20, 21,
4598 22, 23, 24,
4599
4600 25, 26, 27,
4601 28, 29, 30,
4602
4603 31, 32, 33,
4604 34, 35, 36
4605 });
4606
4607 std::vector<T> outputExpectedData =
4608 {
4609 1, 2, 3,
4610 4, 5, 6,
4611
4612 19, 20, 21,
4613 22, 23, 24,
4614
4615
4616 7, 8, 9,
4617 10, 11, 12,
4618
4619 25, 26, 27,
4620 28, 29, 30,
4621
4622
4623 13, 14, 15,
4624 16, 17, 18,
4625
4626 31, 32, 33,
4627 34, 35, 36
4628 };
4629
4630 return StackTestHelper<ArmnnType, T, 4>(
4631 workloadFactory,
4632 memoryManager,
4633 inputTensorInfo,
4634 outputTensorInfo,
4635 1U,
4636 inputData,
4637 outputExpectedData
4638 );
4639}
4640
4641template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
4642LayerTestResult<T, 4> Stack4dOutput2AxisTest(
4643 armnn::IWorkloadFactory& workloadFactory,
4644 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
4645{
4646 armnn::TensorInfo inputTensorInfo ({ 3, 2, 3 }, ArmnnType);
4647 armnn::TensorInfo outputTensorInfo({ 3, 2, 2, 3 }, ArmnnType);
4648
4649 std::vector<std::vector<T>> inputData;
4650
4651 inputData.push_back(
4652 {
4653 1, 2, 3,
4654 4, 5, 6,
4655
4656 7, 8, 9,
4657 10, 11, 12,
4658
4659 13, 14, 15,
4660 16, 17, 18
4661 });
4662
4663 inputData.push_back(
4664 {
4665 19, 20, 21,
4666 22, 23, 24,
4667
4668 25, 26, 27,
4669 28, 29, 30,
4670
4671 31, 32, 33,
4672 34, 35, 36
4673 });
4674
4675 std::vector<T> outputExpectedData =
4676 {
4677 1, 2, 3,
4678 19, 20, 21,
4679
4680 4, 5, 6,
4681 22, 23, 24,
4682
4683
4684 7, 8, 9,
4685 25, 26, 27,
4686
4687 10, 11, 12,
4688 28, 29, 30,
4689
4690 13, 14, 15,
4691 31, 32, 33,
4692
4693 16, 17, 18,
4694 34, 35, 36
4695 };
4696
4697 return StackTestHelper<ArmnnType, T, 4>(
4698 workloadFactory,
4699 memoryManager,
4700 inputTensorInfo,
4701 outputTensorInfo,
4702 2U,
4703 inputData,
4704 outputExpectedData
4705 );
4706}
4707
4708template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
4709LayerTestResult<T, 4> Stack4dOutput3AxisTest(
4710 armnn::IWorkloadFactory& workloadFactory,
4711 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
4712{
4713 armnn::TensorInfo inputTensorInfo ({ 3, 2, 3 }, ArmnnType);
4714 armnn::TensorInfo outputTensorInfo({ 3, 2, 3, 2 }, ArmnnType);
4715
4716 std::vector<std::vector<T>> inputData;
4717
4718 inputData.push_back(
4719 {
4720 1, 2, 3,
4721 4, 5, 6,
4722
4723 7, 8, 9,
4724 10, 11, 12,
4725
4726 13, 14, 15,
4727 16, 17, 18
4728 });
4729
4730 inputData.push_back(
4731 {
4732 19, 20, 21,
4733 22, 23, 24,
4734
4735 25, 26, 27,
4736 28, 29, 30,
4737
4738 31, 32, 33,
4739 34, 35, 36
4740 });
4741
4742 std::vector<T> outputExpectedData =
4743 {
4744 1, 19,
4745 2, 20,
4746 3, 21,
4747
4748 4, 22,
4749 5, 23,
4750 6, 24,
4751
4752
4753 7, 25,
4754 8, 26,
4755 9, 27,
4756
4757 10, 28,
4758 11, 29,
4759 12, 30,
4760
4761
4762 13, 31,
4763 14, 32,
4764 15, 33,
4765
4766 16, 34,
4767 17, 35,
4768 18, 36
4769 };
4770
4771 return StackTestHelper<ArmnnType, T, 4>(
4772 workloadFactory,
4773 memoryManager,
4774 inputTensorInfo,
4775 outputTensorInfo,
4776 3U,
4777 inputData,
4778 outputExpectedData
4779 );
4780}
4781
4782template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
4783LayerTestResult<T, 3> Stack3dOutput1Axis3InputTest(
4784 armnn::IWorkloadFactory& workloadFactory,
4785 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
4786{
4787 armnn::TensorInfo inputTensorInfo ({ 3, 3 }, ArmnnType);
4788 armnn::TensorInfo outputTensorInfo({ 3, 3, 3 }, ArmnnType);
4789
4790 std::vector<std::vector<T>> inputData;
4791
4792 inputData.push_back(
4793 {
4794 1, 2, 3,
4795 4, 5, 6,
4796 7, 8, 9
4797 });
4798
4799 inputData.push_back(
4800 {
4801 10, 11, 12,
4802 13, 14, 15,
4803 16, 17, 18
4804 });
4805
4806 inputData.push_back(
4807 {
4808 19, 20, 21,
4809 22, 23, 24,
4810 25, 26, 27
4811 });
4812
4813 std::vector<T> outputExpectedData =
4814 {
4815 1, 2, 3,
4816 10, 11, 12,
4817 19, 20, 21,
4818
4819 4, 5, 6,
4820 13, 14, 15,
4821 22, 23, 24,
4822
4823 7, 8, 9,
4824 16, 17, 18,
4825 25, 26, 27
4826 };
4827
4828 return StackTestHelper<ArmnnType, T, 3>(
4829 workloadFactory,
4830 memoryManager,
4831 inputTensorInfo,
4832 outputTensorInfo,
4833 1U,
4834 inputData,
4835 outputExpectedData
4836 );
4837}
Matthew Jacksondba634f2019-08-15 15:14:18 +01004838
4839template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
4840LayerTestResult<T, 5> Stack5dOutputTest(
4841 armnn::IWorkloadFactory& workloadFactory,
4842 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
4843{
4844 armnn::TensorInfo inputTensorInfo ({ 2, 2, 2, 3 }, ArmnnType);
4845 armnn::TensorInfo outputTensorInfo({ 2, 2, 2, 2, 3 }, ArmnnType);
4846
4847 std::vector<std::vector<T>> inputData;
4848
4849 inputData.push_back(
4850 {
4851 1, 2, 3,
4852 4, 5, 6,
4853
4854 7, 8, 9,
4855 10, 11, 12,
4856
4857
4858 13, 14, 15,
4859 16, 17, 18,
4860
4861 19, 20, 21,
4862 22, 23, 24
4863 });
4864
4865 inputData.push_back(
4866 {
4867 25, 26, 27,
4868 28, 29, 30,
4869
4870 31, 32, 33,
4871 34, 35, 36,
4872
4873
4874 37, 38, 39,
4875 40, 41, 42,
4876
4877 43, 44, 45,
4878 46, 47, 48
4879 });
4880
4881 std::vector<T> outputExpectedData =
4882 {
4883 1, 2, 3,
4884 4, 5, 6,
4885
4886 7, 8, 9,
4887 10, 11, 12,
4888
4889
4890 25, 26, 27,
4891 28, 29, 30,
4892
4893 31, 32, 33,
4894 34, 35, 36,
4895
4896
4897
4898 13, 14, 15,
4899 16, 17, 18,
4900
4901 19, 20, 21,
4902 22, 23, 24,
4903
4904
4905 37, 38, 39,
4906 40, 41, 42,
4907
4908 43, 44, 45,
4909 46, 47, 48
4910
4911 };
4912
4913 return StackTestHelper<ArmnnType, T, 5>(
4914 workloadFactory,
4915 memoryManager,
4916 inputTensorInfo,
4917 outputTensorInfo,
4918 1U,
4919 inputData,
4920 outputExpectedData
4921 );
4922}