blob: d6747f5898e34282543ca16965e5d63938d5b027 [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
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000151LayerTestResult<float, 4> DepthwiseConvolution2dDepthNhwcTest(
152 armnn::IWorkloadFactory& workloadFactory,
153 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
154 bool biasEnabled);
telsoa014fcda012018-03-09 14:13:49 +0000155
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000156LayerTestResult<float, 4> DepthwiseConvolution2dDepthMul1Test(
157 armnn::IWorkloadFactory& workloadFactory,
158 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
159 bool biasEnabled,
Matthew Bentham8800c002018-11-19 13:19:28 +0000160 const armnn::DataLayout layout);
surmeh013537c2c2018-05-18 16:31:43 +0100161
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000162LayerTestResult<float, 4> DepthwiseConvolution2dAsymmetricTest(
163 armnn::IWorkloadFactory& workloadFactory,
164 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
165 bool biasEnabled,
Matthew Bentham8800c002018-11-19 13:19:28 +0000166 const armnn::DataLayout layout);
telsoa014fcda012018-03-09 14:13:49 +0000167
Teresa Charlin20b1f882019-06-19 09:34:37 +0100168LayerTestResult<float, 4> SimpleDepthwiseConvolution2d3x3Dilation3x3NhwcTest(
169 armnn::IWorkloadFactory& workloadFactory,
170 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Bruno Goncalves22972f02019-04-26 21:03:24 -0300171
Nattapat Chaimanowong649dd952019-01-22 16:10:44 +0000172LayerTestResult<float, 4> CompareDepthwiseConvolution2dFloatTest(
173 armnn::IWorkloadFactory& workloadFactory,
174 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
175 armnn::IWorkloadFactory& refWorkloadFactory,
176 const armnn::DataLayout layout);
177
178LayerTestResult<uint8_t, 4> CompareDepthwiseConvolution2dUint8Test(
179 armnn::IWorkloadFactory& workloadFactory,
180 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
181 armnn::IWorkloadFactory& refWorkloadFactory,
182 const armnn::DataLayout layout);
183
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000184LayerTestResult<float, 4> SimpleMaxPooling2dSize2x2Stride2x2Test(
185 armnn::IWorkloadFactory& workloadFactory,
186 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
187 bool forceNoPadding);
James Conroy45a9b772018-10-31 11:47:53 +0000188
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000189LayerTestResult<uint8_t, 4> SimpleMaxPooling2dSize2x2Stride2x2Uint8Test(
190 armnn::IWorkloadFactory& workloadFactory,
191 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
192 bool forceNoPadding);
James Conroy45a9b772018-10-31 11:47:53 +0000193
Teresa Charlin0434df62019-06-06 13:40:35 +0100194LayerTestResult<int16_t, 4> SimpleMaxPooling2dSize2x2Stride2x2Int16Test(
195 armnn::IWorkloadFactory& workloadFactory,
196 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
197 bool forceNoPadding);
198
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000199LayerTestResult<float, 4> SimpleMaxPooling2dSize3x3Stride2x4Test(
200 armnn::IWorkloadFactory& workloadFactory,
201 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
202 bool forceNoPadding);
203
204LayerTestResult<uint8_t, 4> SimpleMaxPooling2dSize3x3Stride2x4Uint8Test(
205 armnn::IWorkloadFactory& workloadFactory,
206 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
207 bool forceNoPadding );
208
Teresa Charlin0434df62019-06-06 13:40:35 +0100209LayerTestResult<int16_t, 4> SimpleMaxPooling2dSize3x3Stride2x4Int16Test(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000210 armnn::IWorkloadFactory& workloadFactory,
Teresa Charlin0434df62019-06-06 13:40:35 +0100211 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
212 bool forceNoPadding );
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000213
214LayerTestResult<float, 4> SimpleMaxPooling2dTest(
215 armnn::IWorkloadFactory& workloadFactory,
216 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Matthew Bentham8800c002018-11-19 13:19:28 +0000217 const armnn::DataLayout dataLayout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000218
219LayerTestResult<uint8_t, 4> SimpleMaxPooling2dUint8Test(
220 armnn::IWorkloadFactory& workloadFactory,
221 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Matthew Bentham8800c002018-11-19 13:19:28 +0000222 const armnn::DataLayout dataLayout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000223
Teresa Charlin0434df62019-06-06 13:40:35 +0100224LayerTestResult<int16_t, 4> SimpleMaxPooling2dInt16Test(
225 armnn::IWorkloadFactory& workloadFactory,
226 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
227 const armnn::DataLayout dataLayout);
228
229LayerTestResult<float, 4> IgnorePaddingSimpleMaxPooling2dTest(
230 armnn::IWorkloadFactory& workloadFactory,
231 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
232
233LayerTestResult<uint8_t, 4> IgnorePaddingSimpleMaxPooling2dUint8Test(
234 armnn::IWorkloadFactory& workloadFactory,
235 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
236
237LayerTestResult<int16_t, 4> IgnorePaddingSimpleMaxPooling2dInt16Test(
238 armnn::IWorkloadFactory& workloadFactory,
239 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
240
241LayerTestResult<float, 4> IgnorePaddingMaxPooling2dSize3Test(
242 armnn::IWorkloadFactory& workloadFactory,
243 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
244
245LayerTestResult<uint8_t, 4> IgnorePaddingMaxPooling2dSize3Uint8Test(
246 armnn::IWorkloadFactory& workloadFactory,
247 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
248
249LayerTestResult<int16_t, 4> IgnorePaddingMaxPooling2dSize3Int16Test(
250 armnn::IWorkloadFactory& workloadFactory,
251 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
252
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000253LayerTestResult<float, 4> SimpleAveragePooling2dTest(
254 armnn::IWorkloadFactory& workloadFactory,
255 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Matthew Bentham8800c002018-11-19 13:19:28 +0000256 const armnn::DataLayout dataLayout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000257
258LayerTestResult<uint8_t, 4> SimpleAveragePooling2dUint8Test(
259 armnn::IWorkloadFactory& workloadFactory,
260 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Matthew Bentham8800c002018-11-19 13:19:28 +0000261 const armnn::DataLayout dataLayout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000262
Teresa Charlin0434df62019-06-06 13:40:35 +0100263LayerTestResult<int16_t, 4> SimpleAveragePooling2dInt16Test(
264 armnn::IWorkloadFactory& workloadFactory,
265 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
266 const armnn::DataLayout dataLayout);
267
268LayerTestResult<float, 4> LargeTensorsAveragePooling2dTest(
269 armnn::IWorkloadFactory& workloadFactory,
270 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
271
272LayerTestResult<uint8_t, 4> LargeTensorsAveragePooling2dUint8Test(
273 armnn::IWorkloadFactory& workloadFactory,
274 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
275
276LayerTestResult<int16_t, 4> LargeTensorsAveragePooling2dInt16Test(
277 armnn::IWorkloadFactory& workloadFactory,
278 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
279
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000280LayerTestResult<float, 4> IgnorePaddingAveragePooling2dSize3x2Stride2x2Test(
281 armnn::IWorkloadFactory& workloadFactory,
282 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
283 bool forceNoPadding);
284
285LayerTestResult<float, 4> IgnorePaddingSimpleAveragePooling2dTest(
286 armnn::IWorkloadFactory& workloadFactory,
287 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
288
289LayerTestResult<uint8_t, 4> IgnorePaddingSimpleAveragePooling2dUint8Test(
290 armnn::IWorkloadFactory& workloadFactory,
291 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
292
Teresa Charlin0434df62019-06-06 13:40:35 +0100293LayerTestResult<int16_t, 4> IgnorePaddingSimpleAveragePooling2dInt16Test(
294 armnn::IWorkloadFactory& workloadFactory,
295 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
296
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000297LayerTestResult<float, 4> IgnorePaddingSimpleAveragePooling2dNoPaddingTest(
298 armnn::IWorkloadFactory& workloadFactory,
299 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
300
telsoa014fcda012018-03-09 14:13:49 +0000301LayerTestResult<uint8_t, 4> IgnorePaddingSimpleAveragePooling2dNoPaddingUint8Test(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000302 armnn::IWorkloadFactory& workloadFactory,
303 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000304
Teresa Charlin0434df62019-06-06 13:40:35 +0100305LayerTestResult<int16_t, 4> IgnorePaddingSimpleAveragePooling2dNoPaddingInt16Test(
306 armnn::IWorkloadFactory& workloadFactory,
307 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
308
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000309LayerTestResult<float, 4> IgnorePaddingAveragePooling2dSize3Test(
310 armnn::IWorkloadFactory& workloadFactory,
311 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000312
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000313LayerTestResult<uint8_t, 4> IgnorePaddingAveragePooling2dSize3Uint8Test(
314 armnn::IWorkloadFactory& workloadFactory,
315 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000316
Teresa Charlin0434df62019-06-06 13:40:35 +0100317LayerTestResult<int16_t, 4> IgnorePaddingAveragePooling2dSize3Int16Test(
318 armnn::IWorkloadFactory& workloadFactory,
319 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
320
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000321LayerTestResult<float, 4> SimpleL2Pooling2dTest(
322 armnn::IWorkloadFactory& workloadFactory,
323 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Matthew Bentham8800c002018-11-19 13:19:28 +0000324 const armnn::DataLayout dataLayout);
telsoa014fcda012018-03-09 14:13:49 +0000325
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000326LayerTestResult<uint8_t, 4> SimpleL2Pooling2dUint8Test(
327 armnn::IWorkloadFactory& workloadFactory,
328 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Matthew Bentham8800c002018-11-19 13:19:28 +0000329 const armnn::DataLayout dataLayout);
telsoa014fcda012018-03-09 14:13:49 +0000330
Teresa Charlin0434df62019-06-06 13:40:35 +0100331LayerTestResult<int16_t, 4> SimpleL2Pooling2dInt16Test(
332 armnn::IWorkloadFactory& workloadFactory,
333 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
334 const armnn::DataLayout dataLayout);
335
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000336LayerTestResult<float, 4> L2Pooling2dSize3Stride1Test(
337 armnn::IWorkloadFactory& workloadFactory,
338 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000339
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000340LayerTestResult<uint8_t, 4> L2Pooling2dSize3Stride1Uint8Test(
341 armnn::IWorkloadFactory& workloadFactory,
342 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000343
Teresa Charlin0434df62019-06-06 13:40:35 +0100344LayerTestResult<int16_t, 4> L2Pooling2dSize3Stride1Int16Test(
345 armnn::IWorkloadFactory& workloadFactory,
346 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
347
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000348LayerTestResult<float, 4> L2Pooling2dSize3Stride3Test(
349 armnn::IWorkloadFactory& workloadFactory,
350 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000351
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000352LayerTestResult<uint8_t, 4> L2Pooling2dSize3Stride3Uint8Test(
353 armnn::IWorkloadFactory& workloadFactory,
354 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000355
Teresa Charlin0434df62019-06-06 13:40:35 +0100356LayerTestResult<int16_t, 4> L2Pooling2dSize3Stride3Int16Test(
357 armnn::IWorkloadFactory& workloadFactory,
358 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
359
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000360LayerTestResult<float, 4> L2Pooling2dSize3Stride4Test(
361 armnn::IWorkloadFactory& workloadFactory,
362 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000363
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000364LayerTestResult<uint8_t, 4> L2Pooling2dSize3Stride4Uint8Test(
365 armnn::IWorkloadFactory& workloadFactory,
366 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000367
Teresa Charlin0434df62019-06-06 13:40:35 +0100368LayerTestResult<int16_t, 4> L2Pooling2dSize3Stride4Int16Test(
369 armnn::IWorkloadFactory& workloadFactory,
370 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
371
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000372LayerTestResult<float, 4> L2Pooling2dSize7Test(
373 armnn::IWorkloadFactory& workloadFactory,
374 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000375
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000376LayerTestResult<uint8_t, 4> L2Pooling2dSize7Uint8Test(
377 armnn::IWorkloadFactory& workloadFactory,
378 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000379
Teresa Charlin0434df62019-06-06 13:40:35 +0100380LayerTestResult<int16_t, 4> L2Pooling2dSize7Int16Test(
381 armnn::IWorkloadFactory& workloadFactory,
382 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
383
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000384LayerTestResult<float, 4> L2Pooling2dSize9Test(
385 armnn::IWorkloadFactory& workloadFactory,
386 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000387
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000388LayerTestResult<uint8_t, 4> L2Pooling2dSize9Uint8Test(
389 armnn::IWorkloadFactory& workloadFactory,
390 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
391
Teresa Charlin0434df62019-06-06 13:40:35 +0100392LayerTestResult<int16_t, 4> L2Pooling2dSize9Int16Test(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000393 armnn::IWorkloadFactory& workloadFactory,
394 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
395
396LayerTestResult<float, 4> IgnorePaddingSimpleL2Pooling2dTest(
397 armnn::IWorkloadFactory& workloadFactory,
398 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
399
400LayerTestResult<uint8_t, 4> IgnorePaddingSimpleL2Pooling2dUint8Test(
401 armnn::IWorkloadFactory& workloadFactory,
402 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
403
Teresa Charlin0434df62019-06-06 13:40:35 +0100404LayerTestResult<int16_t, 4> IgnorePaddingSimpleL2Pooling2dInt16Test(
405 armnn::IWorkloadFactory& workloadFactory,
406 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
407
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000408LayerTestResult<float, 4> IgnorePaddingL2Pooling2dSize3Test(
409 armnn::IWorkloadFactory& workloadFactory,
410 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
411
412LayerTestResult<uint8_t, 4> IgnorePaddingL2Pooling2dSize3Uint8Test(
413 armnn::IWorkloadFactory& workloadFactory,
414 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
415
Teresa Charlin0434df62019-06-06 13:40:35 +0100416LayerTestResult<int16_t, 4> IgnorePaddingL2Pooling2dSize3Int16Test(
417 armnn::IWorkloadFactory& workloadFactory,
418 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
419
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000420LayerTestResult<float, 4> AsymmetricNonSquarePooling2dTest(
421 armnn::IWorkloadFactory& workloadFactory,
422 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
423
424LayerTestResult<uint8_t, 4> AsymmetricNonSquarePooling2dUint8Test(
425 armnn::IWorkloadFactory& workloadFactory,
426 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
427
Teresa Charlin0434df62019-06-06 13:40:35 +0100428LayerTestResult<int16_t, 4> AsymmetricNonSquarePooling2dInt16Test(
429 armnn::IWorkloadFactory& workloadFactory,
430 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
431
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000432LayerTestResult<float, 4> ComparePooling2dTest(
433 armnn::IWorkloadFactory& workloadFactory,
434 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
435 armnn::IWorkloadFactory& refWorkloadFactory,
436 armnn::PoolingAlgorithm poolingType);
437
438LayerTestResult<uint8_t, 4> ComparePooling2dUint8Test(
439 armnn::IWorkloadFactory& workloadFactory,
440 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
441 armnn::IWorkloadFactory& refWorkloadFactory,
442 armnn::PoolingAlgorithm poolingType);
443
Teresa Charlin0434df62019-06-06 13:40:35 +0100444LayerTestResult<int16_t, 4> ComparePooling2dInt16Test(
445 armnn::IWorkloadFactory& workloadFactory,
446 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
447 armnn::IWorkloadFactory& refWorkloadFactory,
448 armnn::PoolingAlgorithm poolingType);
449
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000450LayerTestResult<float, 4> ConstantLinearActivationTest(
451 armnn::IWorkloadFactory& workloadFactory,
452 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
453
454LayerTestResult<float, 4> SimpleNormalizationAcrossTest(
455 armnn::IWorkloadFactory& workloadFactory,
456 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
457
458LayerTestResult<float, 4> SimpleNormalizationWithinTest(
459 armnn::IWorkloadFactory& workloadFactory,
460 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
461
462LayerTestResult<float,4> SimpleNormalizationAcrossNhwcTest(
463 armnn::IWorkloadFactory& workloadFactory,
464 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
465
466LayerTestResult<float, 2> SimpleSoftmaxTest(
467 armnn::IWorkloadFactory& workloadFactory,
468 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
469 float beta);
470
Narumol Prangnawarat65d30962019-03-14 11:55:03 +0000471LayerTestResult<float, 3> Simple3dSoftmaxTest(
472 armnn::IWorkloadFactory& workloadFactory,
473 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
474 float beta);
475
476LayerTestResult<float, 4> Simple4dSoftmaxTest(
477 armnn::IWorkloadFactory& workloadFactory,
478 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
479 float beta);
480
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000481LayerTestResult<uint8_t, 2> SimpleSoftmaxUint8Test(
482 armnn::IWorkloadFactory& workloadFactory,
483 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
484 float beta);
485
Narumol Prangnawarat65d30962019-03-14 11:55:03 +0000486LayerTestResult<uint8_t,3> Simple3dSoftmaxUint8Test(
487 armnn::IWorkloadFactory& workloadFactory,
488 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
489 float beta);
490
491LayerTestResult<uint8_t,4> Simple4dSoftmaxUint8Test(
492 armnn::IWorkloadFactory& workloadFactory,
493 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
494 float beta);
495
nikraj01248683f2019-05-29 16:46:50 +0100496LayerTestResult<int16_t,2> SimpleSoftmaxUint16Test(
497 armnn::IWorkloadFactory& workloadFactory,
498 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
499 float beta);
500
501LayerTestResult<int16_t,3> Simple3dSoftmaxUint16Test(
502 armnn::IWorkloadFactory& workloadFactory,
503 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
504 float beta);
505
506LayerTestResult<int16_t,4> Simple4dSoftmaxUint16Test(
507 armnn::IWorkloadFactory& workloadFactory,
508 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
509 float beta);
510
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000511LayerTestResult<float, 4> SimpleSigmoidTest(
512 armnn::IWorkloadFactory& workloadFactory,
513 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
514
Nina Drozd8ed4b8c2019-05-29 10:41:04 +0100515template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
516LayerTestResult<T, 4> SimpleReshapeTest(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000517 armnn::IWorkloadFactory& workloadFactory,
518 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
519
520LayerTestResult<float, 4> SimpleFloorTest(
521 armnn::IWorkloadFactory& workloadFactory,
522 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
523
524LayerTestResult<float, 1> Concatenation1dTest(
525 armnn::IWorkloadFactory& workloadFactory,
526 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
527
528LayerTestResult<float, 2> Concatenation2dDim0Test(
529 armnn::IWorkloadFactory& workloadFactory,
530 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
531
532LayerTestResult<float, 2> Concatenation2dDim1Test(
533 armnn::IWorkloadFactory& workloadFactory,
534 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
535
536LayerTestResult<float, 2> Concatenation2dDim0DiffInputDimsTest(
537 armnn::IWorkloadFactory& workloadFactory,
538 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
539
540LayerTestResult<float, 2> Concatenation2dDim1DiffInputDimsTest(
541 armnn::IWorkloadFactory& workloadFactory,
542 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
543
544LayerTestResult<float, 3> Concatenation3dDim0Test(
545 armnn::IWorkloadFactory& workloadFactory,
546 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
547
548LayerTestResult<float, 3> Concatenation3dDim1Test(
549 armnn::IWorkloadFactory& workloadFactory,
550 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
551
552LayerTestResult<float, 3> Concatenation3dDim2Test(
553 armnn::IWorkloadFactory& workloadFactory,
narpra015cdda352018-11-19 15:30:27 +0000554 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
555 bool useSubtensor);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000556
557LayerTestResult<float, 3> Concatenation3dDim0DiffInputDimsTest(
558 armnn::IWorkloadFactory& workloadFactory,
559 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
560
561LayerTestResult<float, 3> Concatenation3dDim1DiffInputDimsTest(
562 armnn::IWorkloadFactory& workloadFactory,
563 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
564
565LayerTestResult<float, 3> Concatenation3dDim2DiffInputDimsTest(
566 armnn::IWorkloadFactory& workloadFactory,
narpra015cdda352018-11-19 15:30:27 +0000567 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
568 bool useSubtensor);
569
570LayerTestResult<float, 4> Concatenation4dDim0Test(
571 armnn::IWorkloadFactory& workloadFactory,
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000572 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
573
narpra015cdda352018-11-19 15:30:27 +0000574LayerTestResult<float, 4> Concatenation4dDim1Test(
575 armnn::IWorkloadFactory& workloadFactory,
576 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
577
578LayerTestResult<float, 4> Concatenation4dDim2Test(
579 armnn::IWorkloadFactory& workloadFactory,
580 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
581
582LayerTestResult<float, 4> Concatenation4dDim3Test(
583 armnn::IWorkloadFactory& workloadFactory,
584 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
585 bool useSubtensor);
586
587LayerTestResult<float, 4> Concatenation4dDiffShapeDim0Test(
588 armnn::IWorkloadFactory& workloadFactory,
589 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
590
591LayerTestResult<float, 4> Concatenation4dDiffShapeDim1Test(
592 armnn::IWorkloadFactory& workloadFactory,
593 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
594
595LayerTestResult<float, 4> Concatenation4dDiffShapeDim2Test(
596 armnn::IWorkloadFactory& workloadFactory,
597 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
598
599LayerTestResult<float, 4> Concatenation4dDiffShapeDim3Test(
600 armnn::IWorkloadFactory& workloadFactory,
601 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
602 bool useSubtensor);
603
604LayerTestResult<uint8_t, 4> Concatenation4dDim0Uint8Test(
605 armnn::IWorkloadFactory& workloadFactory,
606 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
607
608LayerTestResult<uint8_t, 4> Concatenation4dDim1Uint8Test(
609 armnn::IWorkloadFactory& workloadFactory,
610 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
611
612LayerTestResult<uint8_t, 4> Concatenation4dDim2Uint8Test(
613 armnn::IWorkloadFactory& workloadFactory,
614 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
615
616LayerTestResult<uint8_t, 4> Concatenation4dDim3Uint8Test(
617 armnn::IWorkloadFactory& workloadFactory,
618 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
619 bool useSubtensor);
620
621LayerTestResult<uint8_t, 4> Concatenation4dDiffShapeDim0Uint8Test(
622 armnn::IWorkloadFactory& workloadFactory,
623 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
624
625LayerTestResult<uint8_t, 4> Concatenation4dDiffShapeDim1Uint8Test(
626 armnn::IWorkloadFactory& workloadFactory,
627 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
628
629LayerTestResult<uint8_t, 4> Concatenation4dDiffShapeDim2Uint8Test(
630 armnn::IWorkloadFactory& workloadFactory,
631 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
632
633LayerTestResult<uint8_t, 4> Concatenation4dDiffShapeDim3Uint8Test(
634 armnn::IWorkloadFactory& workloadFactory,
635 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
636 bool useSubtensor);
637
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000638LayerTestResult<uint8_t, 4> SimpleSigmoidUint8Test(
639 armnn::IWorkloadFactory& workloadFactory,
640 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
641
Teresa Charlin18515e22019-04-24 10:17:46 +0100642LayerTestResult<int16_t, 4> SimpleSigmoidInt16Test(
643 armnn::IWorkloadFactory& workloadFactory,
644 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
645
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000646LayerTestResult<float, 4> CompareConvolution2dTest(
647 armnn::IWorkloadFactory& workloadFactory,
648 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
telsoa014fcda012018-03-09 14:13:49 +0000649 armnn::IWorkloadFactory& refWorkloadFactory);
650
651template<typename T>
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000652LayerTestResult<T, 4> CompareDepthwiseConvolution2dTest(
653 armnn::IWorkloadFactory& workloadFactory,
654 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
655 armnn::IWorkloadFactory& refWorkloadFactory,
Matthew Bentham8800c002018-11-19 13:19:28 +0000656 const armnn::DataLayout layout);
telsoa014fcda012018-03-09 14:13:49 +0000657
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000658LayerTestResult<float, 4> CompareNormalizationTest(
659 armnn::IWorkloadFactory& workloadFactory,
660 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
661 armnn::IWorkloadFactory& refWorkloadFactory,
662 armnn::NormalizationAlgorithmChannel normChannel,
663 armnn::NormalizationAlgorithmMethod normMethod);
telsoa014fcda012018-03-09 14:13:49 +0000664
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000665LayerTestResult<float, 2> CompareSoftmaxTest(
666 armnn::IWorkloadFactory& workloadFactory,
667 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
telsoa014fcda012018-03-09 14:13:49 +0000668 armnn::IWorkloadFactory& refWorkloadFactory,
669 float beta);
670
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000671LayerTestResult<float, 2> FullyConnectedFloat32Test(
672 armnn::IWorkloadFactory& workloadFactory,
673 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
674 bool biasEnabled,
675 bool transposeWeights);
telsoa014fcda012018-03-09 14:13:49 +0000676
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000677std::vector<LayerTestResult<float, 3>> SplitterTest(
678 armnn::IWorkloadFactory& workloadFactory,
679 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
David Beck5cd01f32018-09-12 16:00:08 +0100680
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000681LayerTestResult<float, 3> CopyViaSplitterTest(
682 armnn::IWorkloadFactory& workloadFactory,
683 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000684
Jim Flynn4ed6c832019-05-20 11:02:46 +0100685LayerTestResult<float, 3> ConcatTest(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000686 armnn::IWorkloadFactory& workloadFactory,
687 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000688
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000689LayerTestResult<float, 4> AdditionTest(
690 armnn::IWorkloadFactory& workloadFactory,
691 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000692
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000693LayerTestResult<float, 4> AdditionBroadcast1ElementTest(
694 armnn::IWorkloadFactory& workloadFactory,
695 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000696
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000697LayerTestResult<float, 4> AdditionBroadcastTest(
698 armnn::IWorkloadFactory& workloadFactory,
699 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000700
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000701LayerTestResult<float, 4> CompareAdditionTest(
702 armnn::IWorkloadFactory& workloadFactory,
703 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
704 armnn::IWorkloadFactory& refWorkloadFactory);
telsoa014fcda012018-03-09 14:13:49 +0000705
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000706LayerTestResult<float, 4> SubtractionTest(
707 armnn::IWorkloadFactory& workloadFactory,
708 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000709
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000710LayerTestResult<float, 4> SubtractionBroadcast1ElementTest(
711 armnn::IWorkloadFactory& workloadFactory,
712 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000713
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000714LayerTestResult<float, 4> SubtractionBroadcastTest(
715 armnn::IWorkloadFactory& workloadFactory,
716 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000717
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000718LayerTestResult<float, 4> CompareActivationTest(
719 armnn::IWorkloadFactory& workloadFactory,
720 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
721 armnn::IWorkloadFactory& refWorkloadFactory,
722 armnn::ActivationFunction f,
723 unsigned int batchSize);
telsoa014fcda012018-03-09 14:13:49 +0000724
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000725LayerTestResult<float, 4> DivisionTest(
726 armnn::IWorkloadFactory& workloadFactory,
727 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa014fcda012018-03-09 14:13:49 +0000728
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000729LayerTestResult<float, 4> DivisionByZeroTest(
730 armnn::IWorkloadFactory& workloadFactory,
731 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Mohamed Nour Abouelseoud7420e552018-10-12 12:26:24 +0100732
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000733LayerTestResult<float, 4> DivisionBroadcast1ElementTest(
734 armnn::IWorkloadFactory& workloadFactory,
735 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Mohamed Nour Abouelseoud7420e552018-10-12 12:26:24 +0100736
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000737LayerTestResult<float, 4> DivisionBroadcast1DVectorTest(
738 armnn::IWorkloadFactory& workloadFactory,
739 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa01c577f2c2018-08-31 09:22:23 +0100740
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000741LayerTestResult<float, 4> MultiplicationTest(
742 armnn::IWorkloadFactory& workloadFactory,
743 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
telsoa01c577f2c2018-08-31 09:22:23 +0100744
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000745LayerTestResult<float, 4> MultiplicationBroadcast1ElementTest(
746 armnn::IWorkloadFactory& workloadFactory,
747 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
narpra011e4c31d2018-09-28 11:07:51 +0100748
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000749LayerTestResult<float, 4> MultiplicationBroadcast1DVectorTest(
750 armnn::IWorkloadFactory& workloadFactory,
751 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
narpra011e4c31d2018-09-28 11:07:51 +0100752
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000753LayerTestResult<float, 4> CompareMultiplicationTest(
754 armnn::IWorkloadFactory& workloadFactory,
755 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
756 armnn::IWorkloadFactory& refWorkloadFactory);
Matteo Martincigh28dcab62018-10-19 16:40:03 +0100757
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000758LayerTestResult<float, 4> BatchNormTest(
759 armnn::IWorkloadFactory& workloadFactory,
760 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Nattapat Chaimanowong3ea76d52018-11-09 14:10:38 +0000761
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000762LayerTestResult<float, 4> BatchNormNhwcTest(
763 armnn::IWorkloadFactory& workloadFactory,
764 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Nattapat Chaimanowong3ea76d52018-11-09 14:10:38 +0000765
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000766LayerTestResult<float, 4> CompareBatchNormTest(
767 armnn::IWorkloadFactory& workloadFactory,
768 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
769 armnn::IWorkloadFactory& refWorkloadFactory);
Nattapat Chaimanowong3ea76d52018-11-09 14:10:38 +0000770
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000771LayerTestResult<float, 4> BoundedReLuUpperAndLowerBoundTest(
772 armnn::IWorkloadFactory& workloadFactory,
773 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Nattapat Chaimanowong3ea76d52018-11-09 14:10:38 +0000774
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000775LayerTestResult<uint8_t, 4> BoundedReLuUint8UpperAndLowerBoundTest(
776 armnn::IWorkloadFactory& workloadFactor,
777 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManagery);
Éanna Ó Catháin4e1e1362018-11-12 11:36:34 +0000778
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000779LayerTestResult<float, 4> BoundedReLuUpperBoundOnlyTest(
780 armnn::IWorkloadFactory& workloadFactory,
781 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Éanna Ó Catháin4e1e1362018-11-12 11:36:34 +0000782
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000783LayerTestResult<uint8_t, 4> BoundedReLuUint8UpperBoundOnlyTest(
784 armnn::IWorkloadFactory& workloadFactory,
785 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Éanna Ó Catháin262553e2018-11-14 11:26:23 +0000786
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000787LayerTestResult<float, 4> CompareBoundedReLuTest(
788 armnn::IWorkloadFactory& workloadFactory,
789 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
790 armnn::IWorkloadFactory& refWorkloadFactory,
791 float upperBound,
792 float lowerBound);
793
konsof017f6db402019-06-07 15:15:58 +0100794LayerTestResult<float, 4> ReLuTest(
795 armnn::IWorkloadFactory& workloadFactory,
796 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
797
798LayerTestResult<uint8_t, 4> ReLuUint8Test(
799 armnn::IWorkloadFactory& workloadFactory,
800 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Teresa Charlin18515e22019-04-24 10:17:46 +0100801
802LayerTestResult<int16_t, 4> ReLuInt16Test(
803 armnn::IWorkloadFactory& workloadFactory,
804 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
805
806LayerTestResult<int16_t, 4> BoundedReLuInt16Test(
807 armnn::IWorkloadFactory& workloadFactory,
808 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
809
konsof017f6db402019-06-07 15:15:58 +0100810LayerTestResult<float, 4> SoftReLuTest(
811 armnn::IWorkloadFactory& workloadFactory,
812 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
813
814LayerTestResult<uint8_t, 4> SoftReLuUint8Test(
815 armnn::IWorkloadFactory& workloadFactory,
816 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
817
Teresa Charlin18515e22019-04-24 10:17:46 +0100818LayerTestResult<int16_t, 4> SoftReLuInt16Test(
819 armnn::IWorkloadFactory& workloadFactory,
820 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
821
konsof017f6db402019-06-07 15:15:58 +0100822LayerTestResult<float, 4> LeakyReLuTest(
823 armnn::IWorkloadFactory& workloadFactory,
824 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
825
826LayerTestResult<uint8_t, 4> LeakyReLuUint8Test(
827 armnn::IWorkloadFactory& workloadFactory,
828 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
829
Teresa Charlin18515e22019-04-24 10:17:46 +0100830LayerTestResult<int16_t, 4> LeakyReLuInt16Test(
831 armnn::IWorkloadFactory& workloadFactory,
832 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
833
konsof017f6db402019-06-07 15:15:58 +0100834LayerTestResult<float, 4> AbsTest(
835 armnn::IWorkloadFactory& workloadFactory,
836 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
837
838LayerTestResult<uint8_t, 4> AbsUint8Test(
839 armnn::IWorkloadFactory& workloadFactory,
840 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
841
Teresa Charlin18515e22019-04-24 10:17:46 +0100842LayerTestResult<int16_t, 4> AbsInt16Test(
843 armnn::IWorkloadFactory& workloadFactory,
844 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
845
konsof017f6db402019-06-07 15:15:58 +0100846LayerTestResult<float, 4> SqrtTest(
847 armnn::IWorkloadFactory& workloadFactory,
848 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
849
850LayerTestResult<uint8_t, 4> SqrtUint8Test(
851 armnn::IWorkloadFactory& workloadFactory,
852 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
853
Teresa Charlin18515e22019-04-24 10:17:46 +0100854LayerTestResult<int16_t, 4> SqrtInt16Test(
855 armnn::IWorkloadFactory& workloadFactory,
856 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
857
konsof017f6db402019-06-07 15:15:58 +0100858LayerTestResult<float, 4> SquareTest(
859 armnn::IWorkloadFactory& workloadFactory,
860 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
861
862LayerTestResult<uint8_t, 4> SquareUint8Test(
863 armnn::IWorkloadFactory& workloadFactory,
864 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
865
Teresa Charlin18515e22019-04-24 10:17:46 +0100866LayerTestResult<int16_t, 4> SquareInt16Test(
867 armnn::IWorkloadFactory& workloadFactory,
868 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
869
konsof017f6db402019-06-07 15:15:58 +0100870LayerTestResult<float, 4> TanhTest(
871 armnn::IWorkloadFactory& workloadFactory,
872 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
873
874LayerTestResult<uint8_t, 4> TanhUint8Test(
875 armnn::IWorkloadFactory& workloadFactory,
876 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
877
Teresa Charlin18515e22019-04-24 10:17:46 +0100878LayerTestResult<int16_t, 4> TanhInt16Test(
879 armnn::IWorkloadFactory& workloadFactory,
880 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
881
882
Teresa Charlin970f43b2019-07-01 13:51:07 +0100883// 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 +0100884template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
885LayerTestResult<T, 4> ResizeBilinearNopTest(
886 armnn::IWorkloadFactory& workloadFactory,
887 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
888 const armnn::DataLayout dataLayout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000889
890// Tests the behaviour of the resize bilinear operation when rescaling a 2x2 image into a 1x1 image.
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +0100891template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
892LayerTestResult<T, 4> SimpleResizeBilinearTest(
893 armnn::IWorkloadFactory& workloadFactory,
894 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
895 const armnn::DataLayout dataLayout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000896
897// Tests the resize bilinear for minification of a square input matrix (also: input dimensions are a
898// multiple of output dimensions).
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +0100899template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
900LayerTestResult<T, 4> ResizeBilinearSqMinTest(
901 armnn::IWorkloadFactory& workloadFactory,
902 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
903 const armnn::DataLayout dataLayout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000904
905// Tests the resize bilinear for minification (output dimensions smaller than input dimensions).
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +0100906template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
907LayerTestResult<T, 4> ResizeBilinearMinTest(
908 armnn::IWorkloadFactory& workloadFactory,
909 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
910 const armnn::DataLayout dataLayout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000911
912// Tests the resize bilinear for magnification (output dimensions bigger than input dimensions).
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +0100913template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
914LayerTestResult<T, 4> ResizeBilinearMagTest(
915 armnn::IWorkloadFactory& workloadFactory,
916 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
917 const armnn::DataLayout dataLayout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000918
Teresa Charlin970f43b2019-07-01 13:51:07 +0100919// Tests that the output should be identical to the input when the output dimensions match the input ones.
920template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
921LayerTestResult<T, 4> ResizeNearestNeighborNopTest(
922 armnn::IWorkloadFactory& workloadFactory,
923 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
924 const armnn::DataLayout dataLayout);
925
926// Tests the behaviour of the resize NearestNeighbor operation when rescaling a 2x2 image into a 1x1 image.
927template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
928LayerTestResult<T, 4> SimpleResizeNearestNeighborTest(
929 armnn::IWorkloadFactory& workloadFactory,
930 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
931 const armnn::DataLayout dataLayout);
932
933// Tests the resize NearestNeighbor for minification of a square input matrix (also: input dimensions are a
934// multiple of output dimensions).
935template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
936LayerTestResult<T, 4> ResizeNearestNeighborSqMinTest(
937 armnn::IWorkloadFactory& workloadFactory,
938 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
939 const armnn::DataLayout dataLayout);
940
941// Tests the resize NearestNeighbor for minification (output dimensions smaller than input dimensions).
942template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
943LayerTestResult<T, 4> ResizeNearestNeighborMinTest(
944 armnn::IWorkloadFactory& workloadFactory,
945 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
946 const armnn::DataLayout dataLayout);
947
948// Tests the resize NearestNeighbor for magnification (output dimensions bigger than input dimensions).
949template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
950LayerTestResult<T, 4> ResizeNearestNeighborMagTest(
951 armnn::IWorkloadFactory& workloadFactory,
952 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Aron Virginas-Tarcc0cefb2019-07-02 17:25:47 +0100953 const armnn::DataLayout dataLayout,
954 float inQuantScale,
955 int32_t inQuantOffset,
956 float outQuantScale,
957 int32_t outQuantOffset);
Teresa Charlin970f43b2019-07-01 13:51:07 +0100958
nikraj0193f84a92019-06-05 10:48:46 +0100959template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
960LayerTestResult<T, 2> Rsqrt2dTestCommon(
Mohamed Nour Abouelseouda1d3c6a2018-12-27 12:39:16 +0000961 armnn::IWorkloadFactory& workloadFactory,
962 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
963 const armnn::TensorInfo inputTensorInfo,
964 const armnn::TensorInfo outputTensorInfo,
nikraj010421e7f2019-06-14 09:40:34 +0100965 const std::vector<float>& inputValues,
966 const std::vector<float>& expectedOutputValues);
Mohamed Nour Abouelseouda1d3c6a2018-12-27 12:39:16 +0000967
nikraj0193f84a92019-06-05 10:48:46 +0100968template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
969LayerTestResult<T, 2> Rsqrt2dTest(
Mohamed Nour Abouelseouda1d3c6a2018-12-27 12:39:16 +0000970 armnn::IWorkloadFactory& workloadFactory,
971 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
972
nikraj0193f84a92019-06-05 10:48:46 +0100973template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
974LayerTestResult<T, 3> Rsqrt3dTest(
Mohamed Nour Abouelseouda1d3c6a2018-12-27 12:39:16 +0000975 armnn::IWorkloadFactory& workloadFactory,
976 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
977
nikraj0193f84a92019-06-05 10:48:46 +0100978template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
979LayerTestResult<T, 2> RsqrtZeroTest(
Mohamed Nour Abouelseouda1d3c6a2018-12-27 12:39:16 +0000980 armnn::IWorkloadFactory& workloadFactory,
981 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
982
nikraj0193f84a92019-06-05 10:48:46 +0100983template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
984LayerTestResult<T, 2> RsqrtNegativeTest(
Mohamed Nour Abouelseouda1d3c6a2018-12-27 12:39:16 +0000985 armnn::IWorkloadFactory& workloadFactory,
986 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
987
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000988LayerTestResult<float, 4> BatchNormTest(
989 armnn::IWorkloadFactory& workloadFactory,
990 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
991
992LayerTestResult<float, 4> BatchNormNhwcTest(
993 armnn::IWorkloadFactory& workloadFactory,
994 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
995
996LayerTestResult<float, 2> FakeQuantizationTest(
997 armnn::IWorkloadFactory& workloadFactory,
998 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
999
Ferran Balaguere52211e2019-06-17 12:23:52 +01001000LayerTestResult<float, 4> L2NormalizationDefaultEpsilonTest(
1001 armnn::IWorkloadFactory& workloadFactory,
1002 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1003 const armnn::DataLayout layout);
1004
1005LayerTestResult<float, 4> L2NormalizationNonDefaultEpsilonTest(
1006 armnn::IWorkloadFactory& workloadFactory,
1007 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1008 const armnn::DataLayout layout);
1009
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001010LayerTestResult<float, 4> L2Normalization1dTest(
1011 armnn::IWorkloadFactory& workloadFactory,
1012 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Matthew Bentham8800c002018-11-19 13:19:28 +00001013 const armnn::DataLayout layout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001014
Ferran Balaguerd73d14f2019-06-10 10:29:54 +01001015LayerTestResult<int16_t, 4> L2Normalization1dInt16Test(
1016 armnn::IWorkloadFactory& workloadFactory,
1017 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1018 const armnn::DataLayout layout);
1019
Ferran Balaguerc6138d82019-06-13 17:23:50 +01001020LayerTestResult<uint8_t, 4> L2Normalization1dUint8Test(
1021 armnn::IWorkloadFactory& workloadFactory,
1022 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1023 const armnn::DataLayout layout);
1024
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001025LayerTestResult<float, 4> L2Normalization2dTest(
1026 armnn::IWorkloadFactory& workloadFactory,
1027 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Matthew Bentham8800c002018-11-19 13:19:28 +00001028 const armnn::DataLayout layout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001029
Ferran Balaguerd73d14f2019-06-10 10:29:54 +01001030LayerTestResult<int16_t, 4> L2Normalization2dInt16Test(
1031 armnn::IWorkloadFactory& workloadFactory,
1032 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1033 const armnn::DataLayout layout);
1034
Ferran Balaguerc6138d82019-06-13 17:23:50 +01001035LayerTestResult<uint8_t, 4> L2Normalization2dUint8Test(
1036 armnn::IWorkloadFactory& workloadFactory,
1037 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1038 const armnn::DataLayout layout);
1039
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001040LayerTestResult<float, 4> L2Normalization3dTest(
1041 armnn::IWorkloadFactory& workloadFactory,
1042 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Matthew Bentham8800c002018-11-19 13:19:28 +00001043 const armnn::DataLayout layout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001044
Ferran Balaguerd73d14f2019-06-10 10:29:54 +01001045LayerTestResult<int16_t, 4> L2Normalization3dInt16Test(
1046 armnn::IWorkloadFactory& workloadFactory,
1047 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1048 const armnn::DataLayout layout);
1049
Ferran Balaguerc6138d82019-06-13 17:23:50 +01001050LayerTestResult<uint8_t, 4> L2Normalization3dUint8Test(
1051 armnn::IWorkloadFactory& workloadFactory,
1052 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1053 const armnn::DataLayout layout);
1054
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001055LayerTestResult<float, 4> L2Normalization4dTest(
1056 armnn::IWorkloadFactory& workloadFactory,
1057 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Matthew Bentham8800c002018-11-19 13:19:28 +00001058 const armnn::DataLayout layout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001059
Ferran Balaguerd73d14f2019-06-10 10:29:54 +01001060LayerTestResult<int16_t, 4> L2Normalization4dInt16Test(
1061 armnn::IWorkloadFactory& workloadFactory,
1062 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1063 const armnn::DataLayout layout);
1064
Ferran Balaguerc6138d82019-06-13 17:23:50 +01001065LayerTestResult<uint8_t, 4> L2Normalization4dUint8Test(
1066 armnn::IWorkloadFactory& workloadFactory,
1067 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1068 const armnn::DataLayout layout);
1069
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001070LayerTestResult<float, 4> ConstantTest(
1071 armnn::IWorkloadFactory& workloadFactory,
1072 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1073
Nina Drozd58ef2c62019-05-16 12:09:18 +01001074LayerTestResult<uint8_t, 4> ConstantUint8SimpleQuantizationScaleNoOffsetTest(
1075 armnn::IWorkloadFactory& workloadFactory,
1076 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1077
1078LayerTestResult<int16_t, 4> ConstantInt16SimpleQuantizationScaleNoOffsetTest(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001079 armnn::IWorkloadFactory& workloadFactory,
1080 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1081
1082LayerTestResult<uint8_t, 4> BoundedReLuUint8Test(
1083 armnn::IWorkloadFactory& workloadFactory,
1084 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1085 float upperBound);
1086
1087LayerTestResult<uint8_t, 4> BoundedReLuUint8Test(
1088 armnn::IWorkloadFactory& workloadFactory,
1089 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1090 float upperBound,
1091 float lowerBound);
1092
Francis Murtagh46c09d02019-05-28 08:15:28 +01001093template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1094LayerTestResult<T, 2> FullyConnectedTest(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001095 armnn::IWorkloadFactory& workloadFactory,
1096 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1097 bool biasEnabled);
1098
1099std::vector<LayerTestResult<uint8_t, 3>> SplitterUint8Test(
1100 armnn::IWorkloadFactory& workloadFactory,
1101 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1102
Ruomei Yan25339c32019-05-28 16:48:20 +01001103std::vector<LayerTestResult<int16_t, 3>> SplitterInt16Test(
1104 armnn::IWorkloadFactory& workloadFactory,
1105 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1106
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001107LayerTestResult<uint8_t, 3> CopyViaSplitterUint8Test(
1108 armnn::IWorkloadFactory& workloadFactory,
1109 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1110
Ruomei Yan25339c32019-05-28 16:48:20 +01001111LayerTestResult<int16_t, 3> CopyViaSplitterInt16Test(
1112 armnn::IWorkloadFactory& workloadFactory,
1113 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1114
Jim Flynn4ed6c832019-05-20 11:02:46 +01001115LayerTestResult<uint8_t, 3> ConcatUint8Test(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001116 armnn::IWorkloadFactory& workloadFactory,
1117 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1118
Jim Flynn4ed6c832019-05-20 11:02:46 +01001119LayerTestResult<uint16_t, 3> ConcatUint16Test(
Jim Flynncbb66aa2019-05-15 13:03:54 +01001120 armnn::IWorkloadFactory& workloadFactory,
1121 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1122
Jim Flynn4ed6c832019-05-20 11:02:46 +01001123LayerTestResult<uint8_t, 3> ConcatUint8DifferentQParamsTest(
Jim Flynncbb66aa2019-05-15 13:03:54 +01001124 armnn::IWorkloadFactory& workloadFactory,
1125 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Ferran Balaguerb2845652019-02-27 09:42:06 +00001126
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001127LayerTestResult<uint8_t, 4> AdditionUint8Test(
1128 armnn::IWorkloadFactory& workloadFactory,
1129 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1130
1131LayerTestResult<uint8_t, 4> AdditionBroadcast1ElementUint8Test(
1132 armnn::IWorkloadFactory& workloadFactory,
1133 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1134
1135LayerTestResult<uint8_t, 4> AdditionBroadcastUint8Test(
1136 armnn::IWorkloadFactory& workloadFactory,
1137 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1138
Sadik Armagan2999a022019-04-09 14:20:12 +01001139LayerTestResult<int16_t, 4> AdditionInt16Test(
1140 armnn::IWorkloadFactory& workloadFactory,
1141 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1142
1143LayerTestResult<int16_t, 4> AdditionBroadcastInt16Test(
1144 armnn::IWorkloadFactory& workloadFactory,
1145 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1146
1147LayerTestResult<int16_t, 4> AdditionBroadcast1ElementInt16Test(
1148 armnn::IWorkloadFactory& workloadFactory,
1149 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1150
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001151LayerTestResult<uint8_t, 4> SubtractionUint8Test(
1152 armnn::IWorkloadFactory& workloadFactory,
1153 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1154
1155LayerTestResult<uint8_t, 4> SubtractionBroadcast1ElementUint8Test(
1156 armnn::IWorkloadFactory& workloadFactory,
1157 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1158
1159LayerTestResult<uint8_t, 4> SubtractionBroadcastUint8Test(
1160 armnn::IWorkloadFactory& workloadFactory,
1161 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1162
Sadik Armagan2999a022019-04-09 14:20:12 +01001163LayerTestResult<int16_t, 4> SubtractionInt16Test(
1164 armnn::IWorkloadFactory& workloadFactory,
1165 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1166
1167LayerTestResult<int16_t, 4> SubtractionBroadcast1ElementInt16Test(
1168 armnn::IWorkloadFactory& workloadFactory,
1169 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1170
1171LayerTestResult<int16_t, 4> SubtractionBroadcastInt16Test(
1172 armnn::IWorkloadFactory& workloadFactory,
1173 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1174
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001175LayerTestResult<uint8_t, 4> CompareActivationUint8Test(
1176 armnn::IWorkloadFactory& workloadFactory,
1177 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1178 armnn::IWorkloadFactory& refWorkloadFactory,
1179 armnn::ActivationFunction f);
1180
Teresa Charlin18515e22019-04-24 10:17:46 +01001181LayerTestResult<int16_t, 4> CompareActivationInt16Test(
1182 armnn::IWorkloadFactory& workloadFactory,
1183 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1184 armnn::IWorkloadFactory& refWorkloadFactory,
1185 armnn::ActivationFunction f);
1186
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001187LayerTestResult<uint8_t, 2> CompareSoftmaxUint8Test(
1188 armnn::IWorkloadFactory& workloadFactory,
1189 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1190 armnn::IWorkloadFactory& refWorkloadFactory,
1191 float beta);
1192
1193LayerTestResult<uint8_t, 4> MultiplicationUint8Test(
1194 armnn::IWorkloadFactory& workloadFactory,
1195 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1196
1197LayerTestResult<uint8_t, 4> MultiplicationBroadcast1ElementUint8Test(
1198 armnn::IWorkloadFactory& workloadFactory,
1199 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1200
1201LayerTestResult<uint8_t, 4> MultiplicationBroadcast1DVectorUint8Test(
1202 armnn::IWorkloadFactory& workloadFactory,
1203 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1204
Sadik Armagan2999a022019-04-09 14:20:12 +01001205LayerTestResult<int16_t, 4> MultiplicationInt16Test(
1206 armnn::IWorkloadFactory& workloadFactory,
1207 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1208
1209LayerTestResult<int16_t, 4> MultiplicationBroadcast1ElementInt16Test(
1210 armnn::IWorkloadFactory& workloadFactory,
1211 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1212
1213LayerTestResult<int16_t, 4> MultiplicationBroadcast1DVectorInt16Test(
1214 armnn::IWorkloadFactory& workloadFactory,
1215 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1216
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001217LayerTestResult<uint8_t, 4> DivisionUint8Test(
1218 armnn::IWorkloadFactory& workloadFactory,
1219 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1220
1221LayerTestResult<uint8_t, 4> DivisionBroadcast1ElementUint8Test(
1222 armnn::IWorkloadFactory& workloadFactory,
1223 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1224
1225LayerTestResult<uint8_t, 4> DivisionBroadcast1DVectorUint8Test(
1226 armnn::IWorkloadFactory& workloadFactory,
1227 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1228
Sadik Armagan2999a022019-04-09 14:20:12 +01001229LayerTestResult<int16_t, 4> DivisionInt16Test(
1230 armnn::IWorkloadFactory& workloadFactory,
1231 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1232
1233LayerTestResult<int16_t, 4> DivisionBroadcast1ElementInt16Test(
1234 armnn::IWorkloadFactory& workloadFactory,
1235 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1236
1237LayerTestResult<int16_t, 4> DivisionBroadcast1DVectorInt16Test(
1238 armnn::IWorkloadFactory& workloadFactory,
1239 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1240
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001241LayerTestResult<uint8_t, 4> SimpleConvolution2d3x5Uint8Test(
1242 armnn::IWorkloadFactory& workloadFactory,
1243 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1244 bool biasEnabled,
Matthew Bentham8800c002018-11-19 13:19:28 +00001245 const armnn::DataLayout layout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001246
1247LayerTestResult<uint8_t, 4> SimpleConvolution2d3x3Uint8Test(
1248 armnn::IWorkloadFactory& workloadFactory,
1249 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1250 bool biasEnabled,
Matthew Bentham8800c002018-11-19 13:19:28 +00001251 const armnn::DataLayout layout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001252
Mike Kelly2f80f6e2019-05-16 12:41:34 +01001253LayerTestResult<int16_t, 4> SimpleConvolution2d3x5QSymm16Test(
1254 armnn::IWorkloadFactory& workloadFactory,
1255 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1256 bool biasEnabled,
1257 const armnn::DataLayout layout);
1258
1259LayerTestResult<int16_t, 4> SimpleConvolution2d3x3QSymm16Test(
1260 armnn::IWorkloadFactory& workloadFactory,
1261 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1262 bool biasEnabled,
1263 const armnn::DataLayout layout);
1264
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001265LayerTestResult<uint8_t, 4> DepthwiseConvolution2dUint8Test(
1266 armnn::IWorkloadFactory& workloadFactory,
1267 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1268 bool biasEnabled,
Matthew Bentham8800c002018-11-19 13:19:28 +00001269 const armnn::DataLayout layout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001270
1271LayerTestResult<uint8_t, 4> DepthwiseConvolution2dDepthMul1Uint8Test(
1272 armnn::IWorkloadFactory& workloadFactory,
1273 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1274 bool biasEnabled,
Matthew Bentham8800c002018-11-19 13:19:28 +00001275 const armnn::DataLayout layout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001276
Ruomei Yan88d44b82019-05-23 14:29:06 +01001277LayerTestResult<int16_t, 4> DepthwiseConvolution2dInt16Test(
1278 armnn::IWorkloadFactory& workloadFactory,
1279 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1280 bool biasEnabled,
1281 const armnn::DataLayout layout);
1282
1283LayerTestResult<int16_t, 4> DepthwiseConvolution2dDepthMul1Int16Test(
1284 armnn::IWorkloadFactory& workloadFactory,
1285 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1286 bool biasEnabled,
1287 const armnn::DataLayout layout);
1288
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001289LayerTestResult<uint8_t, 4> ConstantLinearActivationUint8Test(
1290 armnn::IWorkloadFactory& workloadFactory,
1291 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1292
Teresa Charlin18515e22019-04-24 10:17:46 +01001293LayerTestResult<int16_t, 4> ConstantLinearActivationInt16Test(
1294 armnn::IWorkloadFactory& workloadFactory,
1295 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1296
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001297LayerTestResult<uint8_t, 4> BatchNormUint8Test(
1298 armnn::IWorkloadFactory& workloadFactory,
1299 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1300
1301LayerTestResult<uint8_t, 4> BatchNormUint8NhwcTest(
1302 armnn::IWorkloadFactory& workloadFactory,
1303 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1304
Matteo Martincighf5507132019-06-04 10:59:47 +01001305LayerTestResult<int16_t, 4> BatchNormInt16Test(
1306 armnn::IWorkloadFactory& workloadFactory,
1307 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1308
1309LayerTestResult<int16_t, 4> BatchNormInt16NhwcTest(
1310 armnn::IWorkloadFactory& workloadFactory,
1311 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1312
Nina Drozd58ef2c62019-05-16 12:09:18 +01001313LayerTestResult<uint8_t, 4> ConstantUint8CustomQuantizationScaleAndOffsetTest(
1314 armnn::IWorkloadFactory& workloadFactory,
1315 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1316
1317LayerTestResult<int16_t, 4> ConstantInt16CustomQuantizationScaleAndOffsetTest(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001318 armnn::IWorkloadFactory& workloadFactory,
1319 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1320
1321LayerTestResult<uint8_t, 1> Concatenation1dUint8Test(
1322 armnn::IWorkloadFactory& workloadFactory,
1323 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1324
1325LayerTestResult<uint8_t, 2> Concatenation2dDim0Uint8Test(
1326 armnn::IWorkloadFactory& workloadFactory,
1327 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1328
1329LayerTestResult<uint8_t, 2> Concatenation2dDim1Uint8Test(
1330 armnn::IWorkloadFactory& workloadFactory,
1331 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1332
1333LayerTestResult<uint8_t, 2> Concatenation2dDim0DiffInputDimsUint8Test(
1334 armnn::IWorkloadFactory& workloadFactory,
1335 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1336
1337LayerTestResult<uint8_t, 2> Concatenation2dDim1DiffInputDimsUint8Test(
1338 armnn::IWorkloadFactory& workloadFactory,
1339 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1340
1341LayerTestResult<uint8_t, 3> Concatenation3dDim0Uint8Test(
1342 armnn::IWorkloadFactory& workloadFactory,
1343 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1344
1345LayerTestResult<uint8_t, 3> Concatenation3dDim1Uint8Test(
1346 armnn::IWorkloadFactory& workloadFactory,
1347 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1348
1349LayerTestResult<uint8_t, 3> Concatenation3dDim2Uint8Test(
1350 armnn::IWorkloadFactory& workloadFactory,
narpra015cdda352018-11-19 15:30:27 +00001351 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1352 bool useSubtensor);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001353
1354LayerTestResult<uint8_t, 3> Concatenation3dDim0DiffInputDimsUint8Test(
1355 armnn::IWorkloadFactory& workloadFactory,
1356 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1357
1358LayerTestResult<uint8_t, 3> Concatenation3dDim1DiffInputDimsUint8Test(
1359 armnn::IWorkloadFactory& workloadFactory,
1360 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1361
1362LayerTestResult<uint8_t, 3> Concatenation3dDim2DiffInputDimsUint8Test(
1363 armnn::IWorkloadFactory& workloadFactory,
narpra015cdda352018-11-19 15:30:27 +00001364 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1365 bool useSubtensor);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001366
kevmay012b4d88e2019-01-24 14:05:09 +00001367LayerTestResult<uint8_t, 4> EqualSimpleTest(
FrancisMurtagh30cdfca2018-12-18 12:57:35 +00001368 armnn::IWorkloadFactory& workloadFactory,
1369 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1370
kevmay012b4d88e2019-01-24 14:05:09 +00001371LayerTestResult<uint8_t, 4> EqualBroadcast1ElementTest(
FrancisMurtagh30cdfca2018-12-18 12:57:35 +00001372 armnn::IWorkloadFactory& workloadFactory,
1373 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1374
kevmay012b4d88e2019-01-24 14:05:09 +00001375LayerTestResult<uint8_t, 4> EqualBroadcast1DVectorTest(
FrancisMurtagh30cdfca2018-12-18 12:57:35 +00001376 armnn::IWorkloadFactory& workloadFactory,
1377 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1378
1379LayerTestResult<uint8_t, 4> EqualUint8Test(
1380 armnn::IWorkloadFactory& workloadFactory,
1381 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1382
1383LayerTestResult<uint8_t, 4> EqualBroadcast1ElementUint8Test(
1384 armnn::IWorkloadFactory& workloadFactory,
1385 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1386
1387LayerTestResult<uint8_t, 4> EqualBroadcast1DVectorUint8Test(
1388 armnn::IWorkloadFactory& workloadFactory,
1389 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1390
kevmay012b4d88e2019-01-24 14:05:09 +00001391LayerTestResult<uint8_t, 4> GreaterSimpleTest(
FrancisMurtagh878f0232018-12-19 10:56:15 +00001392 armnn::IWorkloadFactory& workloadFactory,
1393 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1394
kevmay012b4d88e2019-01-24 14:05:09 +00001395LayerTestResult<uint8_t, 4> GreaterBroadcast1ElementTest(
FrancisMurtagh878f0232018-12-19 10:56:15 +00001396 armnn::IWorkloadFactory& workloadFactory,
1397 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1398
kevmay012b4d88e2019-01-24 14:05:09 +00001399LayerTestResult<uint8_t, 4> GreaterBroadcast1DVectorTest(
FrancisMurtagh878f0232018-12-19 10:56:15 +00001400 armnn::IWorkloadFactory& workloadFactory,
1401 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1402
1403LayerTestResult<uint8_t, 4> GreaterUint8Test(
1404 armnn::IWorkloadFactory& workloadFactory,
1405 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1406
1407LayerTestResult<uint8_t, 4> GreaterBroadcast1ElementUint8Test(
1408 armnn::IWorkloadFactory& workloadFactory,
1409 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1410
1411LayerTestResult<uint8_t, 4> GreaterBroadcast1DVectorUint8Test(
1412 armnn::IWorkloadFactory& workloadFactory,
1413 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1414
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001415LayerTestResult<float, 2> FullyConnectedLargeTest(
1416 armnn::IWorkloadFactory& workloadFactory,
1417 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1418 bool transposeWeights);
1419
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001420LayerTestResult<uint8_t, 2> PadUint82dTest(
1421 armnn::IWorkloadFactory& workloadFactory,
1422 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1423
David Monahan34757812019-06-19 11:47:21 +01001424LayerTestResult<uint8_t, 2> PadUint82dCustomPaddingTest(
1425 armnn::IWorkloadFactory& workloadFactory,
1426 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1427
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001428LayerTestResult<uint8_t, 3> PadUint83dTest(
1429 armnn::IWorkloadFactory& workloadFactory,
1430 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1431
1432LayerTestResult<uint8_t, 4> PadUint84dTest(
1433 armnn::IWorkloadFactory& workloadFactory,
1434 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1435
1436LayerTestResult<float, 2> PadFloat322dTest(
1437 armnn::IWorkloadFactory& workloadFactory,
1438 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1439
David Monahan34757812019-06-19 11:47:21 +01001440LayerTestResult<float, 2> PadFloat322dCustomPaddingTest(
1441 armnn::IWorkloadFactory& workloadFactory,
1442 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1443
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001444LayerTestResult<float, 3> PadFloat323dTest(
1445 armnn::IWorkloadFactory& workloadFactory,
1446 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1447
1448LayerTestResult<float, 4> PadFloat324dTest(
1449 armnn::IWorkloadFactory& workloadFactory,
1450 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1451
Narumol Prangnawarate6eaf662019-07-08 08:57:17 +01001452template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1453LayerTestResult<T, 2> Pad2dTestCommon(
1454 armnn::IWorkloadFactory& workloadFactory,
1455 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1456 float qScale,
1457 int32_t qOffset,
1458 const float customPaddingValue = 0.0f);
1459
1460template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1461LayerTestResult<T, 3> Pad3dTestCommon(
1462 armnn::IWorkloadFactory& workloadFactory,
1463 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1464 float qScale,
1465 int32_t qOffset);
1466
1467template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1468LayerTestResult<T, 4> Pad4dTestCommon(
1469 armnn::IWorkloadFactory& workloadFactory,
1470 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1471 float qScale,
1472 int32_t qOffset);
1473
Jan Eilers38e05bd2019-06-26 13:10:09 +01001474void LstmUtilsZeroVectorTest();
1475void LstmUtilsMeanStddevNormalizationNoneZeroInputTest();
1476void LstmUtilsMeanStddevNormalizationAllZeroInputTest();
1477void LstmUtilsMeanStddevNormalizationMixedZeroInputTest();
1478void LstmUtilsVectorBatchVectorCwiseProductTest();
1479void LstmUtilsVectorBatchVectorAddTest();
1480
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001481LayerTestResult<float, 2> LstmLayerFloat32WithCifgWithPeepholeNoProjectionTest(
1482 armnn::IWorkloadFactory& workloadFactory,
1483 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1484
1485LayerTestResult<float, 2> LstmLayerFloat32NoCifgNoPeepholeNoProjectionTest(
1486 armnn::IWorkloadFactory& workloadFactory,
1487 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1488
1489LayerTestResult<float, 2> LstmLayerFloat32NoCifgWithPeepholeWithProjectionTest(
1490 armnn::IWorkloadFactory& workloadFactory,
1491 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1492
Jan Eilers38e05bd2019-06-26 13:10:09 +01001493LayerTestResult<float, 2> LstmLayerFloat32NoCifgWithPeepholeWithProjectionWithLayerNormTest(
1494 armnn::IWorkloadFactory& workloadFactory,
1495 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1496
Conor Kennedyb9971c92019-05-07 07:14:23 +01001497LayerTestResult<int16_t, 2> LstmLayerInt16NoCifgNoPeepholeNoProjectionTest(
1498 armnn::IWorkloadFactory& workloadFactory,
1499 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1500
1501LayerTestResult<int16_t, 2> LstmLayerInt16WithCifgWithPeepholeNoProjectionTest(
1502 armnn::IWorkloadFactory& workloadFactory,
1503 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1504
1505LayerTestResult<int16_t, 2> LstmLayerInt16NoCifgWithPeepholeWithProjectionTest(
1506 armnn::IWorkloadFactory& workloadFactory,
1507 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1508
1509LayerTestResult<int16_t, 2> LstmLayerInt16NoCifgNoPeepholeNoProjectionInt16ConstantTest(
1510 armnn::IWorkloadFactory& workloadFactory,
1511 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1512
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001513LayerTestResult<float, 4> SimpleConvertFp16ToFp32Test(
1514 armnn::IWorkloadFactory& workloadFactory,
1515 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1516
1517LayerTestResult<armnn::Half, 4> SimpleConvertFp32ToFp16Test(
1518 armnn::IWorkloadFactory& workloadFactory,
1519 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1520
Éanna Ó Catháinde705582018-12-03 13:04:22 +00001521LayerTestResult<float, 4> MaximumSimpleTest(
1522 armnn::IWorkloadFactory& workloadFactory,
1523 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1524
1525LayerTestResult<float, 4> MaximumBroadcast1ElementTest(
1526 armnn::IWorkloadFactory& workloadFactory,
1527 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1528
1529LayerTestResult<float, 4> MaximumBroadcast1DVectorTest(
1530 armnn::IWorkloadFactory& workloadFactory,
1531 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1532
1533LayerTestResult<uint8_t , 4> MaximumUint8Test(
1534 armnn::IWorkloadFactory& workloadFactory,
1535 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1536
1537LayerTestResult<uint8_t, 4> MaximumBroadcast1ElementUint8Test(
1538 armnn::IWorkloadFactory& workloadFactory,
1539 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1540
1541LayerTestResult<uint8_t, 4> MaximumBroadcast1DVectorUint8Test(
1542 armnn::IWorkloadFactory& workloadFactory,
1543 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1544
Sadik Armagan2999a022019-04-09 14:20:12 +01001545LayerTestResult<int16_t , 4> MaximumInt16Test(
1546 armnn::IWorkloadFactory& workloadFactory,
1547 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1548
1549LayerTestResult<int16_t, 4> MaximumBroadcast1ElementInt16Test(
1550 armnn::IWorkloadFactory& workloadFactory,
1551 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1552
1553LayerTestResult<int16_t, 4> MaximumBroadcast1DVectorInt16Test(
1554 armnn::IWorkloadFactory& workloadFactory,
1555 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1556
James Conroy4d1ff582019-06-10 17:06:39 +01001557template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1558LayerTestResult<T, 1> MeanSimpleTest(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001559 armnn::IWorkloadFactory& workloadFactory,
1560 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1561
James Conroy4d1ff582019-06-10 17:06:39 +01001562template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1563LayerTestResult<T, 3> MeanSimpleAxisTest(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001564 armnn::IWorkloadFactory& workloadFactory,
1565 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1566
James Conroy4d1ff582019-06-10 17:06:39 +01001567template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1568LayerTestResult<T, 4> MeanKeepDimsTest(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001569 armnn::IWorkloadFactory& workloadFactory,
1570 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1571
James Conroy4d1ff582019-06-10 17:06:39 +01001572template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1573LayerTestResult<T, 4> MeanMultipleDimsTest(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001574 armnn::IWorkloadFactory& workloadFactory,
1575 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1576
James Conroy4d1ff582019-06-10 17:06:39 +01001577template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1578LayerTestResult<T, 1> MeanVts1Test(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001579 armnn::IWorkloadFactory& workloadFactory,
1580 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1581
James Conroy4d1ff582019-06-10 17:06:39 +01001582template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1583LayerTestResult<T, 3> MeanVts2Test(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001584 armnn::IWorkloadFactory& workloadFactory,
1585 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1586
James Conroy4d1ff582019-06-10 17:06:39 +01001587template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1588LayerTestResult<T, 3> MeanVts3Test(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001589 armnn::IWorkloadFactory& workloadFactory,
1590 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1591
Éanna Ó Catháin20e58802018-12-04 10:29:06 +00001592LayerTestResult<float, 4> MinimumBroadcast1ElementTest1(
1593 armnn::IWorkloadFactory& workloadFactory,
1594 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1595
1596LayerTestResult<float, 4> MinimumBroadcast1ElementTest2(
1597 armnn::IWorkloadFactory& workloadFactory,
1598 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1599
1600LayerTestResult<uint8_t, 4> MinimumBroadcast1DVectorUint8Test(
1601 armnn::IWorkloadFactory & workloadFactory,
1602 const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager);
1603
Sadik Armagan2999a022019-04-09 14:20:12 +01001604LayerTestResult<int16_t , 4> MinimumInt16Test(
1605 armnn::IWorkloadFactory& workloadFactory,
1606 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1607
1608LayerTestResult<int16_t, 4> MinimumBroadcast1ElementInt16Test(
1609 armnn::IWorkloadFactory& workloadFactory,
1610 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1611
1612LayerTestResult<int16_t, 4> MinimumBroadcast1DVectorInt16Test(
1613 armnn::IWorkloadFactory& workloadFactory,
1614 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1615
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001616LayerTestResult<float, 4> AdditionAfterMaxPoolTest(
1617 armnn::IWorkloadFactory& workloadFactory,
1618 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1619
1620LayerTestResult<float, 4> SpaceToBatchNdSimpleFloat32Test(
1621 armnn::IWorkloadFactory& workloadFactory,
1622 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1623
1624LayerTestResult<float, 4> SpaceToBatchNdMultiChannelsFloat32Test(
1625 armnn::IWorkloadFactory& workloadFactory,
1626 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1627
1628LayerTestResult<float, 4> SpaceToBatchNdMultiBlockFloat32Test(
1629 armnn::IWorkloadFactory& workloadFactory,
1630 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1631
1632LayerTestResult<float, 4> SpaceToBatchNdPaddingFloat32Test(
1633 armnn::IWorkloadFactory& workloadFactory,
1634 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1635
1636LayerTestResult<uint8_t, 4> SpaceToBatchNdSimpleUint8Test(
1637 armnn::IWorkloadFactory& workloadFactory,
1638 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1639
1640LayerTestResult<uint8_t, 4> SpaceToBatchNdMultiChannelsUint8Test(
1641 armnn::IWorkloadFactory& workloadFactory,
1642 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1643
1644LayerTestResult<uint8_t, 4> SpaceToBatchNdMultiBlockUint8Test(
1645 armnn::IWorkloadFactory& workloadFactory,
1646 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1647
1648LayerTestResult<uint8_t, 4> SpaceToBatchNdPaddingUint8Test(
1649 armnn::IWorkloadFactory& workloadFactory,
1650 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1651
1652LayerTestResult<float, 4> SpaceToBatchNdSimpleNHWCFloat32Test(
1653 armnn::IWorkloadFactory& workloadFactory,
1654 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1655
1656LayerTestResult<float, 4> SpaceToBatchNdMultiChannelsNHWCFloat32Test(
1657 armnn::IWorkloadFactory& workloadFactory,
1658 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1659
1660LayerTestResult<float, 4> SpaceToBatchNdMultiBlockNHWCFloat32Test(
1661 armnn::IWorkloadFactory& workloadFactory,
1662 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1663
1664LayerTestResult<float, 4> SpaceToBatchNdPaddingNHWCFloat32Test(
1665 armnn::IWorkloadFactory& workloadFactory,
1666 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1667
1668LayerTestResult<uint8_t, 4> SpaceToBatchNdSimpleNHWCUint8Test(
1669 armnn::IWorkloadFactory& workloadFactory,
1670 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1671
1672LayerTestResult<uint8_t, 4> SpaceToBatchNdMultiChannelsNHWCUint8Test(
1673 armnn::IWorkloadFactory& workloadFactory,
1674 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1675
1676LayerTestResult<uint8_t, 4> SpaceToBatchNdMultiBlockNHWCUint8Test(
1677 armnn::IWorkloadFactory& workloadFactory,
1678 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1679
1680LayerTestResult<uint8_t, 4> SpaceToBatchNdPaddingNHWCUint8Test(
1681 armnn::IWorkloadFactory& workloadFactory,
1682 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1683
nikraj01120522a2019-05-31 11:33:07 +01001684LayerTestResult<int16_t, 4> SpaceToBatchNdSimpleUint16Test(
1685 armnn::IWorkloadFactory& workloadFactory,
1686 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1687
1688LayerTestResult<int16_t, 4> SpaceToBatchNdMultiChannelsUint16Test(
1689 armnn::IWorkloadFactory& workloadFactory,
1690 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1691
1692LayerTestResult<int16_t, 4> SpaceToBatchNdMultiBlockUint16Test(
1693 armnn::IWorkloadFactory& workloadFactory,
1694 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1695
1696LayerTestResult<int16_t, 4> SpaceToBatchNdPaddingUint16Test(
1697 armnn::IWorkloadFactory& workloadFactory,
1698 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1699
1700LayerTestResult<int16_t, 4> SpaceToBatchNdSimpleNHWCUint16Test(
1701 armnn::IWorkloadFactory& workloadFactory,
1702 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1703
1704LayerTestResult<int16_t, 4> SpaceToBatchNdMultiChannelsNHWCUint16Test(
1705 armnn::IWorkloadFactory& workloadFactory,
1706 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1707
1708LayerTestResult<int16_t, 4> SpaceToBatchNdMultiBlockNHWCUint16Test(
1709 armnn::IWorkloadFactory& workloadFactory,
1710 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1711
1712LayerTestResult<int16_t, 4> SpaceToBatchNdPaddingNHWCUint16Test(
1713 armnn::IWorkloadFactory& workloadFactory,
1714 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1715
Francis Murtagh57f13d52019-06-24 14:24:36 +01001716LayerTestResult<float, 4> BatchToSpaceNdNhwcTest1(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001717 armnn::IWorkloadFactory& workloadFactory,
1718 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1719
Francis Murtagh57f13d52019-06-24 14:24:36 +01001720LayerTestResult<float, 4> BatchToSpaceNdNhwcTest2(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001721 armnn::IWorkloadFactory& workloadFactory,
1722 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1723
Francis Murtagh57f13d52019-06-24 14:24:36 +01001724LayerTestResult<float, 4> BatchToSpaceNdNhwcTest3(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001725 armnn::IWorkloadFactory& workloadFactory,
1726 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1727
Francis Murtagh57f13d52019-06-24 14:24:36 +01001728LayerTestResult<float, 4> BatchToSpaceNdNhwcTest4(
Nattapat Chaimanowong3ee14222019-02-27 10:28:09 +00001729 armnn::IWorkloadFactory& workloadFactory,
1730 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1731
Francis Murtagh57f13d52019-06-24 14:24:36 +01001732LayerTestResult<float, 4> BatchToSpaceNdNchwTest1(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001733 armnn::IWorkloadFactory &workloadFactory,
1734 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1735
Francis Murtagh57f13d52019-06-24 14:24:36 +01001736LayerTestResult<float, 4> BatchToSpaceNdNchwTest2(
Nattapat Chaimanowong3ee14222019-02-27 10:28:09 +00001737 armnn::IWorkloadFactory &workloadFactory,
1738 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Mike Kelly831faed2018-11-28 11:52:08 +00001739
Francis Murtagh57f13d52019-06-24 14:24:36 +01001740LayerTestResult<float, 4> BatchToSpaceNdNchwTest3(
Nattapat Chaimanowong3ee14222019-02-27 10:28:09 +00001741 armnn::IWorkloadFactory &workloadFactory,
1742 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Mike Kelly831faed2018-11-28 11:52:08 +00001743
Francis Murtagh57f13d52019-06-24 14:24:36 +01001744LayerTestResult<uint8_t, 4> BatchToSpaceNdNhwcTest5(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001745 armnn::IWorkloadFactory &workloadFactory,
1746 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Nattapat Chaimanowong1216b582018-11-23 15:33:41 +00001747
Francis Murtagh57f13d52019-06-24 14:24:36 +01001748LayerTestResult<uint8_t, 4> BatchToSpaceNdNhwcTest6(
Nattapat Chaimanowong3ee14222019-02-27 10:28:09 +00001749 armnn::IWorkloadFactory &workloadFactory,
1750 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Mike Kelly831faed2018-11-28 11:52:08 +00001751
Francis Murtagh57f13d52019-06-24 14:24:36 +01001752LayerTestResult<uint8_t, 4> BatchToSpaceNdNhwcTest7(
Nattapat Chaimanowong3ee14222019-02-27 10:28:09 +00001753 armnn::IWorkloadFactory &workloadFactory,
1754 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Mike Kelly831faed2018-11-28 11:52:08 +00001755
Francis Murtagh57f13d52019-06-24 14:24:36 +01001756LayerTestResult<uint8_t, 4> BatchToSpaceNdNchwTest4(
Nattapat Chaimanowong3ee14222019-02-27 10:28:09 +00001757 armnn::IWorkloadFactory &workloadFactory,
1758 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Mike Kelly831faed2018-11-28 11:52:08 +00001759
Francis Murtagh57f13d52019-06-24 14:24:36 +01001760LayerTestResult<uint8_t, 4> BatchToSpaceNdNchwTest5(
Nattapat Chaimanowong3ee14222019-02-27 10:28:09 +00001761 armnn::IWorkloadFactory &workloadFactory,
1762 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Mike Kelly831faed2018-11-28 11:52:08 +00001763
Francis Murtagh57f13d52019-06-24 14:24:36 +01001764LayerTestResult<uint8_t, 4> BatchToSpaceNdNchwTest6(
Nattapat Chaimanowong3ee14222019-02-27 10:28:09 +00001765 armnn::IWorkloadFactory &workloadFactory,
1766 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1767
Francis Murtagh57f13d52019-06-24 14:24:36 +01001768LayerTestResult<uint8_t, 4> BatchToSpaceNdNchwTest7(
Nattapat Chaimanowong3ee14222019-02-27 10:28:09 +00001769 armnn::IWorkloadFactory &workloadFactory,
1770 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Mike Kelly831faed2018-11-28 11:52:08 +00001771
Nattapat Chaimanowong1216b582018-11-23 15:33:41 +00001772LayerTestResult<float, 4> StridedSlice4DFloat32Test(
1773 armnn::IWorkloadFactory& workloadFactory,
1774 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Nattapat Chaimanowongcfdcadf2018-12-06 11:54:33 +00001775
Nattapat Chaimanowong1216b582018-11-23 15:33:41 +00001776LayerTestResult<float, 4> StridedSlice4DReverseFloat32Test(
1777 armnn::IWorkloadFactory& workloadFactory,
1778 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1779
1780LayerTestResult<float, 4> StridedSliceSimpleStrideFloat32Test(
1781 armnn::IWorkloadFactory& workloadFactory,
1782 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1783
1784LayerTestResult<float, 4> StridedSliceSimpleRangeMaskFloat32Test(
1785 armnn::IWorkloadFactory& workloadFactory,
1786 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1787
1788LayerTestResult<float, 2> StridedSliceShrinkAxisMaskFloat32Test(
1789 armnn::IWorkloadFactory& workloadFactory,
1790 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1791
1792LayerTestResult<float, 3> StridedSlice3DFloat32Test(
1793 armnn::IWorkloadFactory& workloadFactory,
1794 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1795
1796LayerTestResult<float, 3> StridedSlice3DReverseFloat32Test(
1797 armnn::IWorkloadFactory& workloadFactory,
1798 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1799
1800LayerTestResult<float, 2> StridedSlice2DFloat32Test(
1801 armnn::IWorkloadFactory& workloadFactory,
1802 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1803
1804LayerTestResult<float, 2> StridedSlice2DReverseFloat32Test(
1805 armnn::IWorkloadFactory& workloadFactory,
1806 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1807
1808LayerTestResult<uint8_t, 4> StridedSlice4DUint8Test(
1809 armnn::IWorkloadFactory& workloadFactory,
1810 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1811
1812LayerTestResult<uint8_t, 4> StridedSlice4DReverseUint8Test(
1813 armnn::IWorkloadFactory& workloadFactory,
1814 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1815
1816LayerTestResult<uint8_t, 4> StridedSliceSimpleStrideUint8Test(
1817 armnn::IWorkloadFactory& workloadFactory,
1818 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1819
1820LayerTestResult<uint8_t, 4> StridedSliceSimpleRangeMaskUint8Test(
1821 armnn::IWorkloadFactory& workloadFactory,
1822 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1823
1824LayerTestResult<uint8_t, 2> StridedSliceShrinkAxisMaskUint8Test(
1825 armnn::IWorkloadFactory& workloadFactory,
1826 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1827
1828LayerTestResult<uint8_t, 3> StridedSlice3DUint8Test(
1829 armnn::IWorkloadFactory& workloadFactory,
1830 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1831
1832LayerTestResult<uint8_t, 3> StridedSlice3DReverseUint8Test(
1833 armnn::IWorkloadFactory& workloadFactory,
1834 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1835
1836LayerTestResult<uint8_t, 2> StridedSlice2DUint8Test(
1837 armnn::IWorkloadFactory& workloadFactory,
1838 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1839
1840LayerTestResult<uint8_t, 2> StridedSlice2DReverseUint8Test(
1841 armnn::IWorkloadFactory& workloadFactory,
1842 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Nattapat Chaimanowongcfdcadf2018-12-06 11:54:33 +00001843
Matteo Martincigh42666a12019-05-29 08:53:41 +01001844LayerTestResult<int16_t, 4> StridedSlice4DInt16Test(
1845 armnn::IWorkloadFactory& workloadFactory,
1846 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1847
1848LayerTestResult<int16_t, 4> StridedSlice4DReverseInt16Test(
1849 armnn::IWorkloadFactory& workloadFactory,
1850 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1851
1852LayerTestResult<int16_t, 4> StridedSliceSimpleStrideInt16Test(
1853 armnn::IWorkloadFactory& workloadFactory,
1854 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1855
1856LayerTestResult<int16_t, 4> StridedSliceSimpleRangeMaskInt16Test(
1857 armnn::IWorkloadFactory& workloadFactory,
1858 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1859
1860LayerTestResult<int16_t, 2> StridedSliceShrinkAxisMaskInt16Test(
1861 armnn::IWorkloadFactory& workloadFactory,
1862 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1863
1864LayerTestResult<int16_t, 3> StridedSlice3DInt16Test(
1865 armnn::IWorkloadFactory& workloadFactory,
1866 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1867
1868LayerTestResult<int16_t, 3> StridedSlice3DReverseInt16Test(
1869 armnn::IWorkloadFactory& workloadFactory,
1870 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1871
1872LayerTestResult<int16_t, 2> StridedSlice2DInt16Test(
1873 armnn::IWorkloadFactory& workloadFactory,
1874 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1875
1876LayerTestResult<int16_t, 2> StridedSlice2DReverseInt16Test(
1877 armnn::IWorkloadFactory& workloadFactory,
1878 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1879
Nattapat Chaimanowongcfdcadf2018-12-06 11:54:33 +00001880LayerTestResult<float, 4> Debug4DFloat32Test(
1881 armnn::IWorkloadFactory& workloadFactory,
1882 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1883
1884LayerTestResult<float, 3> Debug3DFloat32Test(
1885 armnn::IWorkloadFactory& workloadFactory,
1886 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1887
1888LayerTestResult<float, 2> Debug2DFloat32Test(
1889 armnn::IWorkloadFactory& workloadFactory,
1890 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1891
1892LayerTestResult<float, 1> Debug1DFloat32Test(
1893 armnn::IWorkloadFactory& workloadFactory,
1894 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1895
1896LayerTestResult<uint8_t, 4> Debug4DUint8Test(
1897 armnn::IWorkloadFactory& workloadFactory,
1898 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1899
1900LayerTestResult<uint8_t, 3> Debug3DUint8Test(
1901 armnn::IWorkloadFactory& workloadFactory,
1902 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1903
1904LayerTestResult<uint8_t, 2> Debug2DUint8Test(
1905 armnn::IWorkloadFactory& workloadFactory,
1906 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1907
1908LayerTestResult<uint8_t, 1> Debug1DUint8Test(
1909 armnn::IWorkloadFactory& workloadFactory,
1910 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Matteo Martincigh49124022019-01-11 13:25:59 +00001911
1912LayerTestResult<uint8_t, 4> PreCompiledConvolution2dTest(
1913 armnn::IWorkloadFactory& workloadFactory,
1914 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1915
1916LayerTestResult<uint8_t, 4> PreCompiledConvolution2dStride2x2Test(
1917 armnn::IWorkloadFactory& workloadFactory,
1918 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1919
1920LayerTestResult<uint8_t, 4> PreCompiledDepthwiseConvolution2dTest(
1921 armnn::IWorkloadFactory & workloadFactory,
1922 const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager);
1923
1924LayerTestResult<uint8_t, 4> PreCompiledDepthwiseConvolution2dStride2x2Test(
1925 armnn::IWorkloadFactory & workloadFactory,
1926 const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager);
1927
1928LayerTestResult<uint8_t, 4> PreCompiledMaxPooling2dTest(
1929 armnn::IWorkloadFactory& workloadFactory,
1930 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1931
1932LayerTestResult<float, 4> Debug4DFloat32Test(
1933 armnn::IWorkloadFactory& workloadFactory,
1934 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1935
1936LayerTestResult<float, 3> Debug3DFloat32Test(
1937 armnn::IWorkloadFactory& workloadFactory,
1938 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1939
1940LayerTestResult<float, 2> Debug2DFloat32Test(
1941 armnn::IWorkloadFactory& workloadFactory,
1942 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1943
1944LayerTestResult<float, 1> Debug1DFloat32Test(
1945 armnn::IWorkloadFactory& workloadFactory,
1946 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1947
1948LayerTestResult<uint8_t, 4> Debug4DUint8Test(
1949 armnn::IWorkloadFactory& workloadFactory,
1950 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1951
1952LayerTestResult<uint8_t, 3> Debug3DUint8Test(
1953 armnn::IWorkloadFactory& workloadFactory,
1954 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1955
1956LayerTestResult<uint8_t, 2> Debug2DUint8Test(
1957 armnn::IWorkloadFactory& workloadFactory,
1958 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1959
1960LayerTestResult<uint8_t, 1> Debug1DUint8Test(
1961 armnn::IWorkloadFactory& workloadFactory,
1962 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
narpra014951d842019-01-18 16:53:53 +00001963
1964LayerTestResult<float, 1> Gather1DParamsFloatTest(
1965 armnn::IWorkloadFactory& workloadFactory,
1966 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1967
1968LayerTestResult<uint8_t, 1> Gather1DParamsUint8Test(
1969 armnn::IWorkloadFactory& workloadFactory,
1970 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1971
Ellen Norris-Thompsone0dbedf2019-06-24 09:23:38 +01001972LayerTestResult<int16_t, 1> Gather1DParamsInt16Test(
1973 armnn::IWorkloadFactory& workloadFactory,
1974 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1975
narpra014951d842019-01-18 16:53:53 +00001976LayerTestResult<float, 2> GatherMultiDimParamsFloatTest(
1977 armnn::IWorkloadFactory& workloadFactory,
1978 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1979
1980LayerTestResult<uint8_t, 2> GatherMultiDimParamsUint8Test(
1981 armnn::IWorkloadFactory& workloadFactory,
1982 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1983
Ellen Norris-Thompsone0dbedf2019-06-24 09:23:38 +01001984LayerTestResult<int16_t, 2> GatherMultiDimParamsInt16Test(
1985 armnn::IWorkloadFactory& workloadFactory,
1986 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1987
narpra014951d842019-01-18 16:53:53 +00001988LayerTestResult<float, 4> GatherMultiDimParamsMultiDimIndicesFloatTest(
1989 armnn::IWorkloadFactory& workloadFactory,
1990 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1991
1992LayerTestResult<uint8_t, 4> GatherMultiDimParamsMultiDimIndicesUint8Test(
1993 armnn::IWorkloadFactory& workloadFactory,
1994 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Nattapat Chaimanowong8a54ac02019-03-29 15:25:04 +00001995
Ellen Norris-Thompsone0dbedf2019-06-24 09:23:38 +01001996LayerTestResult<int16_t, 4> GatherMultiDimParamsMultiDimIndicesInt16Test(
1997 armnn::IWorkloadFactory& workloadFactory,
1998 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1999
Nattapat Chaimanowongafa4e3a2019-04-02 11:41:45 +01002000LayerTestResult<float, 4> DequantizeSimpleUint8Test(
2001 armnn::IWorkloadFactory& workloadFactory,
2002 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
2003
2004LayerTestResult<float, 4> DequantizeOffsetUint8Test(
2005 armnn::IWorkloadFactory& workloadFactory,
2006 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
2007
2008LayerTestResult<float, 4> DequantizeSimpleInt16Test(
Nattapat Chaimanowong8a54ac02019-03-29 15:25:04 +00002009 armnn::IWorkloadFactory& workloadFactory,
2010 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Nattapat Chaimanowonga0beb3b2019-04-01 17:04:53 +01002011
Keith Davisa57eccb2019-06-14 17:33:22 +01002012LayerTestResult<uint8_t, 4> SpaceToDepthNCHWAsymmQ8Test(
2013 armnn::IWorkloadFactory& workloadFactory,
2014 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
2015
2016LayerTestResult<uint8_t, 4> SpaceToDepthNHWCAsymmQ8Test(
2017 armnn::IWorkloadFactory& workloadFactory,
2018 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
2019
James Conroyd2aa85e2019-07-01 17:12:40 +01002020LayerTestResult<float, 4> SpaceToDepthNHWCFloat32Test1(
Keith Davisa57eccb2019-06-14 17:33:22 +01002021 armnn::IWorkloadFactory& workloadFactory,
2022 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
2023
James Conroyd2aa85e2019-07-01 17:12:40 +01002024LayerTestResult<float, 4> SpaceToDepthNCHWFloat32Test1(
2025 armnn::IWorkloadFactory& workloadFactory,
2026 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
2027
2028LayerTestResult<float, 4> SpaceToDepthNHWCFloat32Test2(
2029 armnn::IWorkloadFactory& workloadFactory,
2030 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
2031
2032LayerTestResult<float, 4> SpaceToDepthNCHWFloat32Test2(
2033 armnn::IWorkloadFactory& workloadFactory,
2034 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
2035
2036LayerTestResult<int16_t, 4> SpaceToDepthNHWCQSymm16Test(
2037 armnn::IWorkloadFactory& workloadFactory,
2038 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
2039
2040LayerTestResult<int16_t, 4> SpaceToDepthNCHWQSymm16Test(
Keith Davisa57eccb2019-06-14 17:33:22 +01002041 armnn::IWorkloadFactory& workloadFactory,
2042 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
2043
Nattapat Chaimanowonga0beb3b2019-04-01 17:04:53 +01002044LayerTestResult<uint8_t, 4> QuantizeSimpleUint8Test(
2045 armnn::IWorkloadFactory& workloadFactory,
2046 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
2047
2048LayerTestResult<uint8_t, 4> QuantizeClampUint8Test(
2049 armnn::IWorkloadFactory& workloadFactory,
2050 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
2051
2052LayerTestResult<int16_t, 4> QuantizeClampInt16Test(
2053 armnn::IWorkloadFactory& workloadFactory,
2054 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Francis Murtagh46c09d02019-05-28 08:15:28 +01002055
2056template<typename T, typename B>
2057LayerTestResult<T, 2> SimpleFullyConnectedTestImpl(
2058 armnn::IWorkloadFactory& workloadFactory,
2059 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
2060 armnn::TensorInfo inputTensorInfo,
2061 armnn::TensorInfo outputTensorInfo,
2062 armnn::TensorInfo weightsDesc,
2063 armnn::TensorInfo biasesDesc,
2064 boost::multi_array<T, 2>& weights,
2065 boost::multi_array<B, 1>& bias,
2066 boost::multi_array<T, 4>& input,
2067 bool biasEnabled,
2068 bool transposeWeights)
2069{
2070 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2071 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2072
2073 armnn::FullyConnectedQueueDescriptor data;
2074 armnn::WorkloadInfo info;
2075 armnn::ScopedCpuTensorHandle weightsTensor(weightsDesc);
2076 armnn::ScopedCpuTensorHandle biasTensor(biasesDesc);
2077
2078 AllocateAndCopyDataToITensorHandle(&weightsTensor, &weights[0][0]);
2079 AllocateAndCopyDataToITensorHandle(&biasTensor, &bias[0]);
2080
2081 AddInputToWorkload(data, info, inputTensorInfo, inputHandle.get());
2082 AddOutputToWorkload(data, info, outputTensorInfo, outputHandle.get());
2083 data.m_Weight = &weightsTensor;
2084 data.m_Bias = &biasTensor;
2085 data.m_Parameters.m_BiasEnabled = biasEnabled;
2086 data.m_Parameters.m_TransposeWeightMatrix = transposeWeights;
2087
2088 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateFullyConnected(data, info);
2089 LayerTestResult<T, 2> result(outputTensorInfo);
2090
2091 inputHandle->Allocate();
2092 outputHandle->Allocate();
2093 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
2094
2095 ExecuteWorkload(*workload, memoryManager);
2096
2097 CopyDataFromITensorHandle(&result.output[0][0], outputHandle.get());
2098
2099 return result;
2100}
2101
2102template <armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
2103std::vector<T> ConvertToDataType(const std::vector<float>& input,
2104 const armnn::TensorInfo& inputTensorInfo)
2105{
2106 std::vector<T> output(input.size());
2107 auto outputTensorInfo = inputTensorInfo;
2108 outputTensorInfo.SetDataType(ArmnnType);
2109
2110 std::unique_ptr<armnn::Encoder<float>> pOutputEncoder = armnn::MakeEncoder<float>(outputTensorInfo, output.data());
2111 armnn::Encoder<float>& rOutputEncoder = *pOutputEncoder;
2112
2113 for (auto it = input.begin(); it != input.end(); ++it)
2114 {
2115 rOutputEncoder.Set(*it);
2116 ++rOutputEncoder;
2117 }
2118 return output;
2119}
2120
David Monahan34757812019-06-19 11:47:21 +01002121// Utility method to convert a single value to the correct type
2122template <typename T>
2123T ConvertToDataType(const float& value,
2124 const armnn::TensorInfo& tensorInfo)
2125{
2126 std::vector<T> output(1);
2127 std::unique_ptr<armnn::Encoder<float>> pEncoder = armnn::MakeEncoder<float>(tensorInfo, output.data());
2128 armnn::Encoder<float>& rEncoder = *pEncoder;
2129 rEncoder.Set(value);
2130 return output[0];
2131}
2132
nikraj010421e7f2019-06-14 09:40:34 +01002133template<armnn::DataType ArmnnType, typename T>
nikraj0193f84a92019-06-05 10:48:46 +01002134LayerTestResult<T, 2> Rsqrt2dTestCommon(
2135 armnn::IWorkloadFactory& workloadFactory,
2136 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
2137 const armnn::TensorInfo inputTensorInfo,
2138 const armnn::TensorInfo outputTensorInfo,
nikraj010421e7f2019-06-14 09:40:34 +01002139 const std::vector<float>& inputValues,
2140 const std::vector<float>& expectedOutputValues)
nikraj0193f84a92019-06-05 10:48:46 +01002141{
nikraj010421e7f2019-06-14 09:40:34 +01002142 auto inputTensor = MakeTensor<T, 2>(inputTensorInfo, ConvertToDataType<ArmnnType>(inputValues,inputTensorInfo));
nikraj0193f84a92019-06-05 10:48:46 +01002143
2144 LayerTestResult<T, 2> result(outputTensorInfo);
nikraj010421e7f2019-06-14 09:40:34 +01002145
2146 result.outputExpected = MakeTensor<T, 2>(outputTensorInfo,
2147 ConvertToDataType<ArmnnType>(expectedOutputValues,outputTensorInfo));
nikraj0193f84a92019-06-05 10:48:46 +01002148
2149 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2150 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2151
2152 armnn::RsqrtQueueDescriptor descriptor;
2153
2154 armnn::WorkloadInfo info;
2155
2156 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
2157 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
2158
2159 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateRsqrt(descriptor, info);
2160
2161 inputHandle->Allocate();
2162 outputHandle->Allocate();
2163
2164 CopyDataToITensorHandle(inputHandle.get(), &inputTensor[0][0]);
2165
2166 workload->PostAllocationConfigure();
2167 workload->Execute();
2168
2169 CopyDataFromITensorHandle(&result.output[0][0], outputHandle.get());
2170
2171 return result;
2172}
2173
2174template<armnn::DataType ArmnnType, typename T>
2175LayerTestResult<T, 2> Rsqrt2dTest(
2176 armnn::IWorkloadFactory& workloadFactory,
2177 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
2178{
2179 const armnn::TensorShape inputShape{ 2, 2 };
2180 const armnn::TensorShape outputShape{ 2, 2 };
2181
nikraj010421e7f2019-06-14 09:40:34 +01002182 armnn::TensorInfo inputTensorInfo(inputShape, ArmnnType);
2183 inputTensorInfo.SetQuantizationScale(0.1f);
2184 inputTensorInfo.SetQuantizationOffset(0);
nikraj0193f84a92019-06-05 10:48:46 +01002185
nikraj010421e7f2019-06-14 09:40:34 +01002186 armnn::TensorInfo outputTensorInfo(outputShape, ArmnnType);
2187 outputTensorInfo.SetQuantizationScale(0.1f);
2188 outputTensorInfo.SetQuantizationOffset(0);
nikraj0193f84a92019-06-05 10:48:46 +01002189
nikraj010421e7f2019-06-14 09:40:34 +01002190 std::vector<float> inputValues
2191 {
2192 1.f, 4.f,
2193 16.f, 25.f
2194 };
nikraj0193f84a92019-06-05 10:48:46 +01002195
nikraj010421e7f2019-06-14 09:40:34 +01002196 std::vector<float> expectedOutputValues
2197 {
2198 1.f, 0.5f,
2199 0.25f, 0.2f
2200 };
2201
2202 return Rsqrt2dTestCommon<ArmnnType>(workloadFactory, memoryManager,
nikraj0193f84a92019-06-05 10:48:46 +01002203 inputTensorInfo, outputTensorInfo,
2204 inputValues, expectedOutputValues);
2205}
2206
2207template<armnn::DataType ArmnnType, typename T>
2208LayerTestResult<T, 3> Rsqrt3dTest(
2209 armnn::IWorkloadFactory& workloadFactory,
2210 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
2211{
2212 const armnn::TensorShape inputShape{ 3, 1, 2 };
2213 const armnn::TensorShape outputShape{ 3, 1, 2 };
2214
nikraj010421e7f2019-06-14 09:40:34 +01002215 armnn::TensorInfo inputTensorInfo(inputShape, ArmnnType);
2216 inputTensorInfo.SetQuantizationScale(0.1f);
2217 inputTensorInfo.SetQuantizationOffset(0);
nikraj0193f84a92019-06-05 10:48:46 +01002218
nikraj010421e7f2019-06-14 09:40:34 +01002219 armnn::TensorInfo outputTensorInfo(outputShape, ArmnnType);
2220 outputTensorInfo.SetQuantizationScale(0.1f);
2221 outputTensorInfo.SetQuantizationOffset(0);
nikraj0193f84a92019-06-05 10:48:46 +01002222
nikraj010421e7f2019-06-14 09:40:34 +01002223 std::vector<float> inputValues
2224 {
2225 1.f, 4.f, 16.f,
2226 25.f, 64.f, 100.f
2227 };
nikraj0193f84a92019-06-05 10:48:46 +01002228
nikraj010421e7f2019-06-14 09:40:34 +01002229 std::vector<float> expectedOutputValues
2230 {
2231 1.f, 0.5f, 0.25f,
2232 0.2f, 0.125f, 0.1f
2233 };
2234
2235 auto inputTensor = MakeTensor<T, 3>(inputTensorInfo, ConvertToDataType<ArmnnType>(inputValues,inputTensorInfo));
nikraj0193f84a92019-06-05 10:48:46 +01002236
2237 LayerTestResult<T, 3> result(outputTensorInfo);
nikraj010421e7f2019-06-14 09:40:34 +01002238 result.outputExpected = MakeTensor<T, 3>(outputTensorInfo,
2239 ConvertToDataType<ArmnnType>(expectedOutputValues,outputTensorInfo));
nikraj0193f84a92019-06-05 10:48:46 +01002240
2241 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2242 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2243
2244 armnn::RsqrtQueueDescriptor descriptor;
2245
2246 armnn::WorkloadInfo info;
2247
2248 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
2249 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
2250
2251 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateRsqrt(descriptor, info);
2252
2253 inputHandle->Allocate();
2254 outputHandle->Allocate();
2255
2256 CopyDataToITensorHandle(inputHandle.get(), &inputTensor[0][0][0]);
2257
2258 workload->PostAllocationConfigure();
2259 workload->Execute();
2260
2261 CopyDataFromITensorHandle(&result.output[0][0][0], outputHandle.get());
2262
2263 return result;
2264}
2265
2266template<armnn::DataType ArmnnType, typename T>
2267LayerTestResult<T, 2> RsqrtZeroTest(
2268 armnn::IWorkloadFactory& workloadFactory,
2269 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
2270{
2271 const armnn::TensorShape inputShape{ 1, 2 };
2272 const armnn::TensorShape outputShape{ 1, 2 };
2273
nikraj010421e7f2019-06-14 09:40:34 +01002274 armnn::TensorInfo inputTensorInfo(inputShape, ArmnnType);
2275 inputTensorInfo.SetQuantizationScale(0.1f);
nikraj0193f84a92019-06-05 10:48:46 +01002276
nikraj010421e7f2019-06-14 09:40:34 +01002277 armnn::TensorInfo outputTensorInfo(outputShape, ArmnnType);
2278 outputTensorInfo.SetQuantizationScale(0.1f);
nikraj0193f84a92019-06-05 10:48:46 +01002279
nikraj010421e7f2019-06-14 09:40:34 +01002280 std::vector<float> inputValues
2281 {
2282 0.f, -0.f
2283 };
nikraj0193f84a92019-06-05 10:48:46 +01002284
nikraj010421e7f2019-06-14 09:40:34 +01002285 std::vector<float> expectedOutputValues
2286 {
2287 INFINITY, -INFINITY
2288 };
2289
2290 return Rsqrt2dTestCommon<ArmnnType>(workloadFactory, memoryManager,
nikraj0193f84a92019-06-05 10:48:46 +01002291 inputTensorInfo, outputTensorInfo,
2292 inputValues, expectedOutputValues);
2293}
2294
2295template<armnn::DataType ArmnnType, typename T>
2296LayerTestResult<T, 2> RsqrtNegativeTest(
2297 armnn::IWorkloadFactory& workloadFactory,
2298 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
2299{
2300 const armnn::TensorShape inputShape{ 1, 2 };
2301 const armnn::TensorShape outputShape{ 1, 2 };
2302
nikraj010421e7f2019-06-14 09:40:34 +01002303 armnn::TensorInfo inputTensorInfo(inputShape, ArmnnType);
2304 inputTensorInfo.SetQuantizationScale(0.1f);
2305 inputTensorInfo.SetQuantizationOffset(0);
nikraj0193f84a92019-06-05 10:48:46 +01002306
nikraj010421e7f2019-06-14 09:40:34 +01002307 armnn::TensorInfo outputTensorInfo(outputShape, ArmnnType);
2308 outputTensorInfo.SetQuantizationScale(0.1f);
2309 outputTensorInfo.SetQuantizationOffset(0);
nikraj0193f84a92019-06-05 10:48:46 +01002310
nikraj010421e7f2019-06-14 09:40:34 +01002311 std::vector<float> inputValues
2312 {
2313 -25.f, -16.f
2314 };
nikraj0193f84a92019-06-05 10:48:46 +01002315
nikraj010421e7f2019-06-14 09:40:34 +01002316 std::vector<float> expectedOutputValues
2317 {
2318 -NAN, -NAN
2319 };
2320
2321 return Rsqrt2dTestCommon<ArmnnType>(workloadFactory, memoryManager,
nikraj0193f84a92019-06-05 10:48:46 +01002322 inputTensorInfo, outputTensorInfo,
2323 inputValues, expectedOutputValues);
2324}
2325
2326template<typename T>
Nina Drozd8ed4b8c2019-05-29 10:41:04 +01002327LayerTestResult<T, 4> SimpleReshapeTestImpl(
2328 armnn::IWorkloadFactory& workloadFactory,
2329 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
2330 armnn::TensorInfo inputTensorInfo,
2331 armnn::TensorInfo outputTensorInfo,
2332 const std::vector<T>& inputData,
2333 const std::vector<T>& outputExpectedData)
2334{
2335 auto input = MakeTensor<T, 4>(inputTensorInfo, inputData);
2336
2337 LayerTestResult<T, 4> ret(outputTensorInfo);
2338 ret.outputExpected = MakeTensor<T, 4>(outputTensorInfo, outputExpectedData);
2339
2340 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2341 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2342
2343 armnn::ReshapeQueueDescriptor data;
2344 armnn::WorkloadInfo info;
2345 AddInputToWorkload(data, info, inputTensorInfo, inputHandle.get());
2346 AddOutputToWorkload(data, info, outputTensorInfo, outputHandle.get());
2347
2348 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateReshape(data, info);
2349
2350 inputHandle->Allocate();
2351 outputHandle->Allocate();
2352
2353 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
2354
2355 workload->Execute();
2356
2357 CopyDataFromITensorHandle(&ret.output[0][0][0][0], outputHandle.get());
2358
2359 return ret;
2360}
2361
Francis Murtagh46c09d02019-05-28 08:15:28 +01002362template<armnn::DataType ArmnnType, typename T>
2363LayerTestResult<T, 2> FullyConnectedTest(
2364 armnn::IWorkloadFactory& workloadFactory,
2365 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
2366 bool biasEnabled)
2367{
2368 constexpr static unsigned int inputWidth = 3u;
2369 constexpr static unsigned int inputHeight = 2u;
2370 constexpr static unsigned int inputChannels = 1u;
2371
2372 constexpr static unsigned int inputSize = inputWidth * inputHeight * inputChannels;
2373
2374 constexpr static unsigned int outputChannels = 2u;
2375
2376 armnn::TensorInfo inputTensorInfo({ 1, inputChannels, inputHeight, inputWidth }, ArmnnType);
2377 inputTensorInfo.SetQuantizationScale(0.1f);
2378 inputTensorInfo.SetQuantizationOffset(63);
2379
2380 armnn::TensorInfo outputTensorInfo({ 1, outputChannels }, ArmnnType);
2381 outputTensorInfo.SetQuantizationScale(5.f);
2382 outputTensorInfo.SetQuantizationOffset(biasEnabled ? -50 : 10);
2383
2384 armnn::TensorInfo weightsDesc({ outputChannels, inputSize }, ArmnnType);
2385 weightsDesc.SetQuantizationScale(0.2f);
2386 weightsDesc.SetQuantizationOffset(93);
2387
2388 armnn::TensorInfo biasesDesc({ outputChannels }, GetBiasTypeFromWeightsType(weightsDesc.GetDataType()).value());
2389 biasesDesc.SetQuantizationScale(inputTensorInfo.GetQuantizationScale() * weightsDesc.GetQuantizationScale());
2390 biasesDesc.SetQuantizationOffset(0);
2391
2392 LayerTestResult<T, 2> result(outputTensorInfo);
2393
2394 auto input = MakeTensor<T, 4>(inputTensorInfo, ConvertToDataType<ArmnnType>(
2395 {
2396 -1.2f, 6.1f, -3.5f,
2397 18.8f, -5.5f, 2.9f
2398 },
2399 inputTensorInfo));
2400
2401 auto weights = MakeTensor<T, 2>(weightsDesc, ConvertToDataType<ArmnnType>(
2402 {
2403 -8.4f, 20.0f, -10.4f, -8, 16.4f, -11.8f,
2404 23.4f, 10.4f, -14.0f, -3.8f, -11.8f, 11.4f
2405 },
2406 weightsDesc));
2407
2408 auto bias = MakeTensor<int32_t, 1>(biasesDesc, std::vector<int32_t>{9250, 67500});
2409
2410 result = SimpleFullyConnectedTestImpl<T>(
2411 workloadFactory,
2412 memoryManager,
2413 inputTensorInfo, outputTensorInfo,
2414 weightsDesc, biasesDesc,
2415 weights, bias, input,
2416 biasEnabled, true
2417 );
2418
2419 if (biasEnabled)
2420 {
2421 result.outputExpected = MakeTensor<T, 2>(outputTensorInfo,
2422 ConvertToDataType<ArmnnType>({80.f, 1460.f}, outputTensorInfo));
2423 }
2424 else
2425 {
2426 result.outputExpected = MakeTensor<T, 2>(outputTensorInfo,
2427 ConvertToDataType<ArmnnType>({-107.04f, 110.f}, outputTensorInfo));
2428 }
2429
2430 return result;
Nina Drozd8ed4b8c2019-05-29 10:41:04 +01002431}
2432
Nina Drozd8ed4b8c2019-05-29 10:41:04 +01002433template<armnn::DataType ArmnnType, typename T>
2434LayerTestResult<T, 4> SimpleReshapeTest(
2435 armnn::IWorkloadFactory& workloadFactory,
2436 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
2437{
2438 armnn::TensorInfo inputTensorInfo;
2439 armnn::TensorInfo outputTensorInfo;
2440
2441 unsigned int inputShape[] = { 2, 2, 3, 3 };
2442 unsigned int outputShape[] = { 2, 2, 9, 1 };
2443
2444 inputTensorInfo = armnn::TensorInfo(4, inputShape, ArmnnType);
2445 inputTensorInfo.SetQuantizationScale(1.0f);
2446 outputTensorInfo = armnn::TensorInfo(4, outputShape, ArmnnType);
2447 outputTensorInfo.SetQuantizationScale(1.0f);
2448
2449 auto input = ConvertToDataType<ArmnnType>(
2450 {
2451 0.0f, 1.0f, 2.0f,
2452 3.0f, 4.0f, 5.0f,
2453 6.0f, 7.0f, 8.0f,
2454
2455 9.0f, 10.0f, 11.0f,
2456 12.0f, 13.0f, 14.0f,
2457 15.0f, 16.0f, 17.0f,
2458
2459 18.0f, 19.0f, 20.0f,
2460 21.0f, 22.0f, 23.0f,
2461 24.0f, 25.0f, 26.0f,
2462
2463 27.0f, 28.0f, 29.0f,
2464 30.0f, 31.0f, 32.0f,
2465 33.0f, 34.0f, 35.0f,
2466 },
2467 inputTensorInfo);
2468
2469 auto outputExpected = ConvertToDataType<ArmnnType>(
2470 {
2471 0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f,
2472
2473 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f, 16.0f, 17.0f,
2474
2475 18.0f, 19.0f, 20.0f, 21.0f, 22.0f, 23.0f, 24.0f, 25.0f, 26.0f,
2476
2477 27.0f, 28.0f, 29.0f, 30.0f, 31.0f, 32.0f, 33.0f, 34.0f, 35.0f,
2478 },
2479 outputTensorInfo);
2480
2481 return SimpleReshapeTestImpl<T>(
2482 workloadFactory, memoryManager, inputTensorInfo, outputTensorInfo, input, outputExpected);
Matteo Martincigh42666a12019-05-29 08:53:41 +01002483}
James Conroy83735b12019-05-30 16:36:59 +01002484
2485template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
2486LayerTestResult<T, 4> SimpleFloorTest(
2487 armnn::IWorkloadFactory& workloadFactory,
2488 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
2489{
James Conroyb40d7102019-06-04 12:32:09 +01002490 armnn::TensorInfo inputTensorInfo({1, 3, 2, 3}, ArmnnType);
2491 inputTensorInfo.SetQuantizationScale(0.1f);
2492
2493 armnn::TensorInfo outputTensorInfo(inputTensorInfo);
2494 outputTensorInfo.SetQuantizationScale(0.1f);
James Conroy83735b12019-05-30 16:36:59 +01002495
2496 auto input = MakeTensor<T, 4>(inputTensorInfo, ConvertToDataType<ArmnnType>(
2497 { -37.5f, -15.2f, -8.76f, -2.0f, -1.5f, -1.3f, -0.5f, -0.4f, 0.0f,
2498 1.0f, 0.4f, 0.5f, 1.3f, 1.5f, 2.0f, 8.76f, 15.2f, 37.5f },
2499 inputTensorInfo));
2500
2501 LayerTestResult<T, 4> ret(outputTensorInfo);
2502 ret.outputExpected = MakeTensor<T, 4>(outputTensorInfo, ConvertToDataType<ArmnnType>(
2503 { -38.0f, -16.0f, -9.0f, -2.0f, -2.0f, -2.0f, -1.0f, -1.0f, 0.0f,
2504 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 2.0f, 8.0f, 15.0f, 37.0f },
2505 outputTensorInfo));
2506
2507 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2508 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2509
2510 armnn::FloorQueueDescriptor data;
2511 armnn::WorkloadInfo info;
2512 AddInputToWorkload(data, info, inputTensorInfo, inputHandle.get());
2513 AddOutputToWorkload(data, info, outputTensorInfo, outputHandle.get());
2514
2515 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateFloor(data, info);
2516
2517 inputHandle->Allocate();
2518 outputHandle->Allocate();
2519
2520 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
2521
2522 workload->Execute();
2523
2524 CopyDataFromITensorHandle(&ret.output[0][0][0][0], outputHandle.get());
2525
2526 return ret;
Matteo Martincighf5507132019-06-04 10:59:47 +01002527}
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002528
2529
2530template<armnn::DataType ArmnnType, typename T>
2531LayerTestResult<T, 4> ResizeBilinearNopTest(
2532 armnn::IWorkloadFactory& workloadFactory,
2533 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
2534 const armnn::DataLayout dataLayout)
2535{
2536 armnn::TensorInfo inputTensorInfo = armnn::IsQuantizedType<T>()
2537 ? armnnUtils::GetTensorInfo(1, 1, 4, 4, dataLayout, ArmnnType)
2538 : armnnUtils::GetTensorInfo(1, 2, 4, 4, dataLayout, ArmnnType);
2539 armnn::TensorInfo outputTensorInfo = armnn::IsQuantizedType<T>()
2540 ? armnnUtils::GetTensorInfo(1, 1, 4, 4, dataLayout, ArmnnType)
2541 : armnnUtils::GetTensorInfo(1, 2, 4, 4, dataLayout, ArmnnType);
2542 if (armnn::IsQuantizedType<T>())
2543 {
2544 inputTensorInfo.SetQuantizationScale(1.5f);
2545 inputTensorInfo.SetQuantizationOffset(-3);
2546 outputTensorInfo.SetQuantizationScale(1.5f);
2547 outputTensorInfo.SetQuantizationOffset(-3);
2548 }
2549
2550 std::vector<float> inputData = armnn::IsQuantizedType<T>()
2551 ? std::initializer_list<float>
2552 {
2553 1, 2, 3, 4,
2554 2, 3, 4, 5,
2555 3, 4, 5, 6,
2556 4, 5, 6, 7
2557 }
2558 : std::initializer_list<float>
2559 {
2560 1.0f, 2.0f, 3.0f, 4.0f,
2561 2.0f, 3.0f, 4.0f, 5.0f,
2562 3.0f, 4.0f, 5.0f, 6.0f,
2563 4.0f, 5.0f, 6.0f, 7.0f,
2564
2565 1.0f, 2.0f, 3.0f, 4.0f,
2566 2.0f, 3.0f, 4.0f, 5.0f,
2567 3.0f, 4.0f, 5.0f, 6.0f,
2568 4.0f, 5.0f, 6.0f, 7.0f
2569 };
2570
2571 const armnn::PermutationVector NCHWToNHWC = { 0, 3, 1, 2 };
2572 if (dataLayout == armnn::DataLayout::NHWC)
2573 {
2574 std::vector<float> tmp(inputData.size());
2575 armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(float));
2576 inputData = tmp;
2577 }
2578
2579 auto input = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(),
2580 inputTensorInfo.GetQuantizationOffset(),
2581 inputData));
2582
2583 LayerTestResult<T, 4> result(outputTensorInfo);
2584 result.outputExpected = input;
2585
2586 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2587 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2588
Aron Virginas-Tar169d2f12019-07-01 19:01:44 +01002589 armnn::ResizeQueueDescriptor descriptor;
2590 descriptor.m_Parameters.m_Method = armnn::ResizeMethod::Bilinear;
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002591 descriptor.m_Parameters.m_DataLayout = dataLayout;
Aron Virginas-Tar169d2f12019-07-01 19:01:44 +01002592
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002593 armnn::WorkloadInfo info;
2594 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
2595 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
2596
Aron Virginas-Tar169d2f12019-07-01 19:01:44 +01002597 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateResize(descriptor, info);
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002598
2599 inputHandle->Allocate();
2600 outputHandle->Allocate();
2601 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
2602
2603 workload->PostAllocationConfigure();
2604 workload->Execute();
2605
2606 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
2607 return result;
2608}
2609
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002610template<armnn::DataType ArmnnType, typename T>
2611LayerTestResult<T, 4> SimpleResizeBilinearTest(
2612 armnn::IWorkloadFactory& workloadFactory,
2613 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
2614 const armnn::DataLayout dataLayout)
2615{
2616 armnn::TensorInfo inputTensorInfo = armnn::IsQuantizedType<T>()
2617 ? armnnUtils::GetTensorInfo(1, 1, 2, 2, dataLayout, ArmnnType)
2618 : armnnUtils::GetTensorInfo(1, 2, 2, 2, dataLayout, ArmnnType);
2619 armnn::TensorInfo outputTensorInfo = armnn::IsQuantizedType<T>()
2620 ? armnnUtils::GetTensorInfo(1, 1, 1, 1, dataLayout, ArmnnType)
2621 : armnnUtils::GetTensorInfo(1, 2, 1, 1, dataLayout, ArmnnType);
2622
2623 if (armnn::IsQuantizedType<T>())
2624 {
2625 inputTensorInfo.SetQuantizationScale(0.1567f);
2626 inputTensorInfo.SetQuantizationOffset(1);
2627 outputTensorInfo.SetQuantizationScale(0.1567f);
2628 outputTensorInfo.SetQuantizationOffset(1);
2629 }
2630
2631 std::vector<float> inputData = armnn::IsQuantizedType<T>()
2632 ? std::initializer_list<float>
2633 {
2634 1, 255,
2635 200, 250
2636 }
2637 : std::initializer_list<float>
2638 {
2639 1.0f, 255.0f,
2640 200.0f, 250.0f,
2641
2642 250.0f, 200.0f,
2643 250.0f, 1.0f
2644 };
2645
2646 // The 'resize bilinear' operation projects the top-left corner of output texels into the input image,
2647 // then figures out the interpolants and weights. Note this is different to projecting the centre of the
2648 // output texel. Thus, for a input matrix of 2x2, we'll expect the output 1x1 matrix to contain, as
2649 // its single element, the value that was at position (0,0) of the input matrix (rather than an average,
2650 // which we would expect if projecting the centre).
2651
2652 std::vector<float> outputData = armnn::IsQuantizedType<T>()
2653 ? std::initializer_list<float>
2654 {
2655 1
2656 }
2657 : std::initializer_list<float>
2658 {
2659 1.0f,
2660
2661 250.0f
2662 };
2663
2664 const armnn::PermutationVector NCHWToNHWC = { 0, 3, 1, 2 };
2665 if (dataLayout == armnn::DataLayout::NHWC)
2666 {
2667 std::vector<float> tmp(inputData.size());
2668 armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(float));
2669 inputData = tmp;
2670
2671 std::vector<float> tmp1(outputData.size());
2672 armnnUtils::Permute(outputTensorInfo.GetShape(), NCHWToNHWC, outputData.data(), tmp1.data(), sizeof(float));
2673 outputData = tmp1;
2674 }
2675
2676 auto input = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(),
2677 inputTensorInfo.GetQuantizationOffset(),
2678 inputData));
2679
2680 LayerTestResult<T, 4> result(outputTensorInfo);
2681 result.outputExpected = MakeTensor<T, 4>(outputTensorInfo,
2682 QuantizedVector<T>(outputTensorInfo.GetQuantizationScale(),
2683 outputTensorInfo.GetQuantizationOffset(),
2684 outputData));
2685
2686 std::unique_ptr <armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2687 std::unique_ptr <armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2688
Aron Virginas-Tar169d2f12019-07-01 19:01:44 +01002689 armnn::ResizeQueueDescriptor descriptor;
2690 descriptor.m_Parameters.m_Method = armnn::ResizeMethod::Bilinear;
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002691 descriptor.m_Parameters.m_DataLayout = dataLayout;
Aron Virginas-Tar169d2f12019-07-01 19:01:44 +01002692
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002693 armnn::WorkloadInfo info;
2694 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
2695 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
2696
Aron Virginas-Tar169d2f12019-07-01 19:01:44 +01002697 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateResize(descriptor, info);
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002698
2699 inputHandle->Allocate();
2700 outputHandle->Allocate();
2701 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
2702
2703 workload->PostAllocationConfigure();
2704 workload->Execute();
2705
2706 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
2707 return result;
2708}
2709
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002710template<armnn::DataType ArmnnType, typename T>
2711LayerTestResult<T, 4> ResizeBilinearSqMinTest(
2712 armnn::IWorkloadFactory& workloadFactory,
2713 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
2714 const armnn::DataLayout dataLayout)
2715{
2716 armnn::TensorInfo inputTensorInfo = armnn::IsQuantizedType<T>()
2717 ? armnnUtils::GetTensorInfo(1, 1, 4, 4, dataLayout, ArmnnType)
2718 : armnnUtils::GetTensorInfo(1, 2, 4, 4, dataLayout, ArmnnType);
2719 armnn::TensorInfo outputTensorInfo = armnn::IsQuantizedType<T>()
2720 ? armnnUtils::GetTensorInfo(1, 1, 2, 2, dataLayout, ArmnnType)
2721 : armnnUtils::GetTensorInfo(1, 2, 2, 2, dataLayout, ArmnnType);
2722
2723 if (armnn::IsQuantizedType<T>())
2724 {
2725 inputTensorInfo.SetQuantizationScale(3.141592f);
2726 inputTensorInfo.SetQuantizationOffset(3);
2727 outputTensorInfo.SetQuantizationScale(3.141592f);
2728 outputTensorInfo.SetQuantizationOffset(3);
2729 }
2730
2731 std::vector<float> inputData = armnn::IsQuantizedType<T>()
2732 ? std::initializer_list<float>
2733 {
2734 1, 2, 3, 4,
2735 2, 3, 4, 5,
2736 3, 4, 5, 6,
2737 4, 5, 6, 7
2738 }
2739 : std::initializer_list<float>
2740 {
2741 1.0f, 2.0f, 3.0f, 4.0f,
2742 2.0f, 3.0f, 4.0f, 5.0f,
2743 3.0f, 4.0f, 5.0f, 6.0f,
2744 4.0f, 5.0f, 6.0f, 7.0f,
2745
2746 7.0f, 6.0f, 5.0f, 4.0f,
2747 6.0f, 5.0f, 4.0f, 3.0f,
2748 5.0f, 4.0f, 3.0f, 2.0f,
2749 4.0f, 3.0f, 2.0f, 1.0f
2750 };
2751
2752 std::vector<float> outputData = armnn::IsQuantizedType<T>()
2753 ? std::initializer_list<float>
2754 {
2755 1, 3,
2756 3, 5
2757 }
2758 : std::initializer_list<float>
2759 {
2760 1.0f, 3.0f,
2761 3.0f, 5.0f,
2762
2763 7.0f, 5.0f,
2764 5.0f, 3.0f
2765 };
2766
2767 const armnn::PermutationVector NCHWToNHWC = { 0, 3, 1, 2 };
2768 if (dataLayout == armnn::DataLayout::NHWC)
2769 {
2770 std::vector<float> tmp(inputData.size());
2771 armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(float));
2772 inputData = tmp;
2773
2774 std::vector<float> tmp1(outputData.size());
2775 armnnUtils::Permute(outputTensorInfo.GetShape(), NCHWToNHWC, outputData.data(), tmp1.data(), sizeof(float));
2776 outputData = tmp1;
2777 }
2778
2779 auto input = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(),
2780 inputTensorInfo.GetQuantizationOffset(),
2781 inputData));
2782
2783 LayerTestResult<T, 4> result(outputTensorInfo);
2784 result.outputExpected = MakeTensor<T, 4>(outputTensorInfo,
2785 QuantizedVector<T>(outputTensorInfo.GetQuantizationScale(),
2786 outputTensorInfo.GetQuantizationOffset(),
2787 outputData));
2788
2789 std::unique_ptr <armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2790 std::unique_ptr <armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2791
Aron Virginas-Tar169d2f12019-07-01 19:01:44 +01002792 armnn::ResizeQueueDescriptor descriptor;
2793 descriptor.m_Parameters.m_Method = armnn::ResizeMethod::Bilinear;
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002794 descriptor.m_Parameters.m_DataLayout = dataLayout;
Aron Virginas-Tar169d2f12019-07-01 19:01:44 +01002795
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002796 armnn::WorkloadInfo info;
2797 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
2798 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
2799
Aron Virginas-Tar169d2f12019-07-01 19:01:44 +01002800 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateResize(descriptor, info);
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002801
2802 inputHandle->Allocate();
2803 outputHandle->Allocate();
2804 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
2805
2806 workload->PostAllocationConfigure();
2807 workload->Execute();
2808
2809 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
2810 return result;
2811}
2812
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002813template<armnn::DataType ArmnnType, typename T>
2814LayerTestResult<T, 4> ResizeBilinearMinTest(
2815 armnn::IWorkloadFactory& workloadFactory,
2816 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
2817 const armnn::DataLayout dataLayout)
2818{
2819 armnn::TensorInfo inputTensorInfo = armnn::IsQuantizedType<T>()
2820 ? armnnUtils::GetTensorInfo(1, 1, 2, 3, dataLayout, ArmnnType)
2821 : armnnUtils::GetTensorInfo(1, 2, 3, 5, dataLayout, ArmnnType);
2822 armnn::TensorInfo outputTensorInfo = armnn::IsQuantizedType<T>()
2823 ? armnnUtils::GetTensorInfo(1, 1, 1, 2, dataLayout, ArmnnType)
2824 : armnnUtils::GetTensorInfo(1, 2, 2, 3, dataLayout, ArmnnType);
2825
2826 if (armnn::IsQuantizedType<T>())
2827 {
2828 inputTensorInfo.SetQuantizationScale(1.5f);
2829 inputTensorInfo.SetQuantizationOffset(-1);
2830 outputTensorInfo.SetQuantizationScale(1.5f);
2831 outputTensorInfo.SetQuantizationOffset(-1);
2832 }
2833
2834 std::vector<float> inputData = armnn::IsQuantizedType<T>()
2835 ? std::initializer_list<float>
2836 {
2837 3.0f, 4.5f, 6.0f, // 1, 2, 3, : Expected quantised values
2838 9.0f, 13.5f, 21.0f // 5, 8, 13
2839 }
2840 : std::initializer_list<float>
2841 {
2842 1.0f, 2.0f, 3.0f, 5.0f, 8.0f,
2843 13.0f, 21.0f, 34.0f, 55.0f, 89.0f,
2844 144.0f, 233.0f, 377.0f, 610.0f, 987.0f,
2845
2846 987.0f, 610.0f, 377.0f, 233.0f, 144.0f,
2847 89.0f, 55.0f, 34.0f, 21.0f, 13.0f,
2848 8.0f, 5.0f, 3.0f, 2.0f, 1.0f
2849 };
2850
2851 std::vector<float> outputData = armnn::IsQuantizedType<T>()
2852 ? std::initializer_list<float>
2853 {
2854 3.0f, 5.25f // 1, 3
2855 }
2856 : std::initializer_list<float>
2857 {
2858 1.0f, 2.6666f, 6.00f,
2859 78.5f, 179.3333f, 401.00f,
2860
2861 987.0f, 454.6670f, 203.33f,
2862 48.5f, 22.3333f, 10.00f
2863 };
2864
2865 const armnn::PermutationVector NCHWToNHWC = { 0, 3, 1, 2 };
2866 if (dataLayout == armnn::DataLayout::NHWC)
2867 {
2868 std::vector<float> tmp(inputData.size());
2869 armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(float));
2870 inputData = tmp;
2871
2872 std::vector<float> tmp1(outputData.size());
2873 armnnUtils::Permute(outputTensorInfo.GetShape(), NCHWToNHWC, outputData.data(), tmp1.data(), sizeof(float));
2874 outputData = tmp1;
2875 }
2876
2877 auto input = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(),
2878 inputTensorInfo.GetQuantizationOffset(),
2879 inputData));
2880
2881 LayerTestResult<T, 4> result(outputTensorInfo);
2882 result.outputExpected = MakeTensor<T, 4>(outputTensorInfo,
2883 QuantizedVector<T>(outputTensorInfo.GetQuantizationScale(),
2884 outputTensorInfo.GetQuantizationOffset(),
2885 outputData));
2886
2887 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2888 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2889
Aron Virginas-Tar169d2f12019-07-01 19:01:44 +01002890 armnn::ResizeQueueDescriptor descriptor;
2891 descriptor.m_Parameters.m_Method = armnn::ResizeMethod::Bilinear;
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002892 descriptor.m_Parameters.m_DataLayout = dataLayout;
Aron Virginas-Tar169d2f12019-07-01 19:01:44 +01002893
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002894 armnn::WorkloadInfo info;
2895 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
2896 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
2897
Aron Virginas-Tar169d2f12019-07-01 19:01:44 +01002898 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateResize(descriptor, info);
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002899
2900 inputHandle->Allocate();
2901 outputHandle->Allocate();
2902 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
2903
2904 workload->PostAllocationConfigure();
2905 workload->Execute();
2906
2907 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
2908 return result;
2909}
2910
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002911template<armnn::DataType ArmnnType, typename T>
2912LayerTestResult<T, 4> ResizeBilinearMagTest(
2913 armnn::IWorkloadFactory& workloadFactory,
2914 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
2915 const armnn::DataLayout dataLayout)
2916{
2917 armnn::TensorInfo inputTensorInfo = armnn::IsQuantizedType<T>()
2918 ? armnnUtils::GetTensorInfo(1, 1, 3, 2, dataLayout, ArmnnType)
2919 : armnnUtils::GetTensorInfo(1, 2, 3, 2, dataLayout, ArmnnType);
2920 armnn::TensorInfo outputTensorInfo = armnn::IsQuantizedType<T>()
2921 ? armnnUtils::GetTensorInfo(1, 1, 3, 5, dataLayout, ArmnnType)
2922 : armnnUtils::GetTensorInfo(1, 2, 3, 5, dataLayout, ArmnnType);
2923
2924 if (armnn::IsQuantizedType<T>())
2925 {
2926 inputTensorInfo.SetQuantizationScale(0.010765f);
2927 inputTensorInfo.SetQuantizationOffset(7);
2928 outputTensorInfo.SetQuantizationScale(0.010132f);
2929 outputTensorInfo.SetQuantizationOffset(-18);
2930 }
2931
2932 std::vector<float> inputData = armnn::IsQuantizedType<T>()
2933 ? std::initializer_list<float>
2934 {
2935 0.183005f, 2.379065f, // 24, 228, : Expected quantised values
2936 1.05497f, 1.302565f, // 105, 128,
2937 2.400595f, 0.68896f // 230, 71
2938 }
2939 : std::initializer_list<float>
2940 {
2941 1.0f, 2.0f,
2942 13.0f, 21.0f,
2943 144.0f, 233.0f,
2944
2945 233.0f, 144.0f,
2946 21.0f, 13.0f,
2947 2.0f, 1.0f
2948 };
2949 std::vector<float> outputData = armnn::IsQuantizedType<T>()
2950 ? std::initializer_list<float>
2951 {
2952 0.18300501f, 1.06142902f, 1.93985295f, 2.37906504f, 2.37906504f,
2953 1.05497003f, 1.15400803f, 1.25304604f, 1.30256498f, 1.30256498f,
2954 2.40059495f, 1.71594095f, 1.03128707f, 0.68896002f, 0.68896002f
2955 // 0, 87, 173, 217, 217, : Expected quantised values
2956 // 86, 96, 106, 111, 111,
2957 // 219, 151, 84, 50, 50
2958 }
2959 : std::initializer_list<float>
2960 {
2961 1.0f, 1.4f, 1.8f, 2.0f, 2.0f,
2962 13.0f, 16.2f, 19.4f, 21.0f, 21.0f,
2963 144.0f, 179.6f, 215.2f, 233.0f, 233.0f,
2964
2965 233.0f, 197.4f, 161.8f, 144.0f, 144.0f,
2966 21.0f, 17.8f, 14.6f, 13.0f, 13.0f,
2967 2.0f, 1.6f, 1.2f, 1.0f, 1.0f
2968 };
2969
2970 const armnn::PermutationVector NCHWToNHWC = { 0, 3, 1, 2 };
2971 if (dataLayout == armnn::DataLayout::NHWC)
2972 {
2973 std::vector<float> tmp(inputData.size());
2974 armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(float));
2975 inputData = tmp;
2976
2977 std::vector<float> tmp1(outputData.size());
2978 armnnUtils::Permute(outputTensorInfo.GetShape(), NCHWToNHWC, outputData.data(), tmp1.data(), sizeof(float));
2979 outputData = tmp1;
2980 }
2981
2982 auto input = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(),
2983 inputTensorInfo.GetQuantizationOffset(),
2984 inputData));
2985
2986 LayerTestResult<T, 4> result(outputTensorInfo);
2987 result.outputExpected = MakeTensor<T, 4>(outputTensorInfo,
2988 QuantizedVector<T>(outputTensorInfo.GetQuantizationScale(),
2989 outputTensorInfo.GetQuantizationOffset(),
2990 outputData));
2991
2992 std::unique_ptr <armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2993 std::unique_ptr <armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2994
Aron Virginas-Tar169d2f12019-07-01 19:01:44 +01002995 armnn::ResizeQueueDescriptor descriptor;
2996 descriptor.m_Parameters.m_Method = armnn::ResizeMethod::Bilinear;
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002997 descriptor.m_Parameters.m_DataLayout = dataLayout;
Aron Virginas-Tar169d2f12019-07-01 19:01:44 +01002998
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002999 armnn::WorkloadInfo info;
3000 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
3001 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
3002
Aron Virginas-Tar169d2f12019-07-01 19:01:44 +01003003 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateResize(descriptor, info);
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01003004
3005 inputHandle->Allocate();
3006 outputHandle->Allocate();
3007 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
3008
3009 workload->PostAllocationConfigure();
3010 workload->Execute();
3011
3012 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
3013 return result;
3014}
3015
Teresa Charlin970f43b2019-07-01 13:51:07 +01003016
3017template<armnn::DataType ArmnnType, typename T>
3018LayerTestResult<T, 4> ResizeNearestNeighborNopTest(
3019 armnn::IWorkloadFactory& workloadFactory,
3020 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
3021 const armnn::DataLayout dataLayout)
3022{
3023 armnn::TensorInfo inputTensorInfo = armnn::IsQuantizedType<T>()
3024 ? armnnUtils::GetTensorInfo(1, 1, 4, 4, dataLayout, ArmnnType)
3025 : armnnUtils::GetTensorInfo(1, 2, 4, 4, dataLayout, ArmnnType);
3026 armnn::TensorInfo outputTensorInfo = armnn::IsQuantizedType<T>()
3027 ? armnnUtils::GetTensorInfo(1, 1, 4, 4, dataLayout, ArmnnType)
3028 : armnnUtils::GetTensorInfo(1, 2, 4, 4, dataLayout, ArmnnType);
3029 if (armnn::IsQuantizedType<T>())
3030 {
3031 inputTensorInfo.SetQuantizationScale(1.5f);
3032 inputTensorInfo.SetQuantizationOffset(-3);
3033 outputTensorInfo.SetQuantizationScale(1.5f);
3034 outputTensorInfo.SetQuantizationOffset(-3);
3035 }
3036
3037 std::vector<float> inputData = armnn::IsQuantizedType<T>()
3038 ? std::initializer_list<float>
3039 {
3040 1, 2, 3, 4,
3041 2, 3, 4, 5,
3042 3, 4, 5, 6,
3043 4, 5, 6, 7
3044 }
3045 : std::initializer_list<float>
3046 {
3047 1.0f, 2.0f, 3.0f, 4.0f,
3048 2.0f, 3.0f, 4.0f, 5.0f,
3049 3.0f, 4.0f, 5.0f, 6.0f,
3050 4.0f, 5.0f, 6.0f, 7.0f,
3051
3052 1.0f, 2.0f, 3.0f, 4.0f,
3053 2.0f, 3.0f, 4.0f, 5.0f,
3054 3.0f, 4.0f, 5.0f, 6.0f,
3055 4.0f, 5.0f, 6.0f, 7.0f
3056 };
3057
3058 const armnn::PermutationVector NCHWToNHWC = { 0, 3, 1, 2 };
3059 if (dataLayout == armnn::DataLayout::NHWC)
3060 {
3061 std::vector<float> tmp(inputData.size());
3062 armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(float));
3063 inputData = tmp;
3064 }
3065
3066 auto input = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(),
3067 inputTensorInfo.GetQuantizationOffset(),
3068 inputData));
3069
3070 LayerTestResult<T, 4> result(outputTensorInfo);
3071 result.outputExpected = input;
3072
3073 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
3074 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
3075
3076 armnn::ResizeQueueDescriptor descriptor;
3077 descriptor.m_Parameters.m_Method = armnn::ResizeMethod::NearestNeighbor;
3078 descriptor.m_Parameters.m_DataLayout = dataLayout;
3079 armnn::WorkloadInfo info;
3080 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
3081 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
3082
3083 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateResize(descriptor, info);
3084
3085 inputHandle->Allocate();
3086 outputHandle->Allocate();
3087 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
3088
3089 workload->PostAllocationConfigure();
3090 workload->Execute();
3091
3092 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
3093 return result;
3094}
3095
3096template<armnn::DataType ArmnnType, typename T>
3097LayerTestResult<T, 4> SimpleResizeNearestNeighborTest(
3098 armnn::IWorkloadFactory& workloadFactory,
3099 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
3100 const armnn::DataLayout dataLayout)
3101{
3102 armnn::TensorInfo inputTensorInfo = armnn::IsQuantizedType<T>()
3103 ? armnnUtils::GetTensorInfo(1, 1, 2, 2, dataLayout, ArmnnType)
3104 : armnnUtils::GetTensorInfo(1, 2, 2, 2, dataLayout, ArmnnType);
3105 armnn::TensorInfo outputTensorInfo = armnn::IsQuantizedType<T>()
3106 ? armnnUtils::GetTensorInfo(1, 1, 1, 1, dataLayout, ArmnnType)
3107 : armnnUtils::GetTensorInfo(1, 2, 1, 1, dataLayout, ArmnnType);
3108
3109 if (armnn::IsQuantizedType<T>())
3110 {
3111 inputTensorInfo.SetQuantizationScale(0.1567f);
3112 inputTensorInfo.SetQuantizationOffset(1);
3113 outputTensorInfo.SetQuantizationScale(0.1567f);
3114 outputTensorInfo.SetQuantizationOffset(1);
3115 }
3116
3117 std::vector<float> inputData = armnn::IsQuantizedType<T>()
3118 ? std::initializer_list<float>
3119 {
3120 1, 255,
3121 200, 250
3122 }
3123 : std::initializer_list<float>
3124 {
3125 1.0f, 255.0f,
3126 200.0f, 250.0f,
3127
3128 250.0f, 200.0f,
3129 250.0f, 1.0f
3130 };
3131
3132 // The 'resize' operation projects the top-left corner of output texels into the input image,
3133 // then figures out the interpolants and weights. Note this is different to projecting the centre of the
3134 // output texel. Thus, for a input matrix of 2x2, we'll expect the output 1x1 matrix to contain, as
3135 // its single element, the value that was at position (0,0) of the input matrix (rather than an average,
3136 // which we would expect if projecting the centre).
3137
3138 std::vector<float> outputData = armnn::IsQuantizedType<T>()
3139 ? std::initializer_list<float>
3140 {
3141 1
3142 }
3143 : std::initializer_list<float>
3144 {
3145 1.0f,
3146
3147 250.0f
3148 };
3149
3150 const armnn::PermutationVector NCHWToNHWC = { 0, 3, 1, 2 };
3151 if (dataLayout == armnn::DataLayout::NHWC)
3152 {
3153 std::vector<float> tmp(inputData.size());
3154 armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(float));
3155 inputData = tmp;
3156
3157 std::vector<float> tmp1(outputData.size());
3158 armnnUtils::Permute(outputTensorInfo.GetShape(), NCHWToNHWC, outputData.data(), tmp1.data(), sizeof(float));
3159 outputData = tmp1;
3160 }
3161
3162 auto input = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(),
3163 inputTensorInfo.GetQuantizationOffset(),
3164 inputData));
3165
3166 LayerTestResult<T, 4> result(outputTensorInfo);
3167 result.outputExpected = MakeTensor<T, 4>(outputTensorInfo,
3168 QuantizedVector<T>(outputTensorInfo.GetQuantizationScale(),
3169 outputTensorInfo.GetQuantizationOffset(),
3170 outputData));
3171
3172 std::unique_ptr <armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
3173 std::unique_ptr <armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
3174
3175 armnn::ResizeQueueDescriptor descriptor;
3176 descriptor.m_Parameters.m_DataLayout = dataLayout;
3177 descriptor.m_Parameters.m_Method = armnn::ResizeMethod::NearestNeighbor;
3178 armnn::WorkloadInfo info;
3179 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
3180 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
3181
3182 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateResize(descriptor, info);
3183
3184 inputHandle->Allocate();
3185 outputHandle->Allocate();
3186 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
3187
3188 workload->PostAllocationConfigure();
3189 workload->Execute();
3190
3191 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
3192 return result;
3193}
3194
3195template<armnn::DataType ArmnnType, typename T>
3196LayerTestResult<T, 4> ResizeNearestNeighborSqMinTest(
3197 armnn::IWorkloadFactory& workloadFactory,
3198 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
3199 const armnn::DataLayout dataLayout)
3200{
3201 armnn::TensorInfo inputTensorInfo = armnn::IsQuantizedType<T>()
3202 ? armnnUtils::GetTensorInfo(1, 1, 4, 4, dataLayout, ArmnnType)
3203 : armnnUtils::GetTensorInfo(1, 2, 4, 4, dataLayout, ArmnnType);
3204 armnn::TensorInfo outputTensorInfo = armnn::IsQuantizedType<T>()
3205 ? armnnUtils::GetTensorInfo(1, 1, 2, 2, dataLayout, ArmnnType)
3206 : armnnUtils::GetTensorInfo(1, 2, 2, 2, dataLayout, ArmnnType);
3207
3208 if (armnn::IsQuantizedType<T>())
3209 {
3210 inputTensorInfo.SetQuantizationScale(3.141592f);
3211 inputTensorInfo.SetQuantizationOffset(3);
3212 outputTensorInfo.SetQuantizationScale(3.141592f);
3213 outputTensorInfo.SetQuantizationOffset(3);
3214 }
3215
3216 std::vector<float> inputData = armnn::IsQuantizedType<T>()
3217 ? std::initializer_list<float>
3218 {
3219 1, 2, 3, 4,
3220 2, 3, 4, 5,
3221 3, 4, 5, 6,
3222 4, 5, 6, 7
3223 }
3224 : std::initializer_list<float>
3225 {
3226 1.0f, 2.0f, 3.0f, 4.0f,
3227 2.0f, 3.0f, 4.0f, 5.0f,
3228 3.0f, 4.0f, 5.0f, 6.0f,
3229 4.0f, 5.0f, 6.0f, 7.0f,
3230
3231 7.0f, 6.0f, 5.0f, 4.0f,
3232 6.0f, 5.0f, 4.0f, 3.0f,
3233 5.0f, 4.0f, 3.0f, 2.0f,
3234 4.0f, 3.0f, 2.0f, 1.0f
3235 };
3236
3237 std::vector<float> outputData = armnn::IsQuantizedType<T>()
3238 ? std::initializer_list<float>
3239 {
3240 1, 3,
3241 3, 5
3242 }
3243 : std::initializer_list<float>
3244 {
3245 1.0f, 3.0f,
3246 3.0f, 5.0f,
3247
3248 7.0f, 5.0f,
3249 5.0f, 3.0f
3250 };
3251
3252 const armnn::PermutationVector NCHWToNHWC = { 0, 3, 1, 2 };
3253 if (dataLayout == armnn::DataLayout::NHWC)
3254 {
3255 std::vector<float> tmp(inputData.size());
3256 armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(float));
3257 inputData = tmp;
3258
3259 std::vector<float> tmp1(outputData.size());
3260 armnnUtils::Permute(outputTensorInfo.GetShape(), NCHWToNHWC, outputData.data(), tmp1.data(), sizeof(float));
3261 outputData = tmp1;
3262 }
3263
3264 auto input = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(),
3265 inputTensorInfo.GetQuantizationOffset(),
3266 inputData));
3267
3268 LayerTestResult<T, 4> result(outputTensorInfo);
3269 result.outputExpected = MakeTensor<T, 4>(outputTensorInfo,
3270 QuantizedVector<T>(outputTensorInfo.GetQuantizationScale(),
3271 outputTensorInfo.GetQuantizationOffset(),
3272 outputData));
3273
3274 std::unique_ptr <armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
3275 std::unique_ptr <armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
3276
3277 armnn::ResizeQueueDescriptor descriptor;
3278 descriptor.m_Parameters.m_DataLayout = dataLayout;
3279 descriptor.m_Parameters.m_Method = armnn::ResizeMethod::NearestNeighbor;
3280 armnn::WorkloadInfo info;
3281 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
3282 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
3283
3284 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateResize(descriptor, info);
3285
3286 inputHandle->Allocate();
3287 outputHandle->Allocate();
3288 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
3289
3290 workload->PostAllocationConfigure();
3291 workload->Execute();
3292
3293 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
3294 return result;
3295}
3296
3297template<armnn::DataType ArmnnType, typename T>
3298LayerTestResult<T, 4> ResizeNearestNeighborMinTest(
3299 armnn::IWorkloadFactory& workloadFactory,
3300 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
3301 const armnn::DataLayout dataLayout)
3302{
3303 armnn::TensorInfo inputTensorInfo = armnn::IsQuantizedType<T>()
3304 ? armnnUtils::GetTensorInfo(1, 1, 2, 3, dataLayout, ArmnnType)
3305 : armnnUtils::GetTensorInfo(1, 2, 3, 5, dataLayout, ArmnnType);
3306 armnn::TensorInfo outputTensorInfo = armnn::IsQuantizedType<T>()
3307 ? armnnUtils::GetTensorInfo(1, 1, 1, 2, dataLayout, ArmnnType)
3308 : armnnUtils::GetTensorInfo(1, 2, 2, 3, dataLayout, ArmnnType);
3309
3310 if (armnn::IsQuantizedType<T>())
3311 {
3312 inputTensorInfo.SetQuantizationScale(1.5f);
3313 inputTensorInfo.SetQuantizationOffset(-1);
3314 outputTensorInfo.SetQuantizationScale(1.5f);
3315 outputTensorInfo.SetQuantizationOffset(-1);
3316 }
3317
3318 std::vector<float> inputData = armnn::IsQuantizedType<T>()
3319 ? std::initializer_list<float>
3320 {
3321 3.0f, 4.5f, 6.0f, // 1, 2, 3, : Expected quantised values
3322 9.0f, 13.5f, 21.0f // 5, 8, 13
3323 }
3324 : std::initializer_list<float>
3325 {
3326 1.0f, 2.0f, 3.0f, 5.0f, 8.0f,
3327 13.0f, 21.0f, 34.0f, 55.0f, 89.0f,
3328 144.0f, 233.0f, 377.0f, 610.0f, 987.0f,
3329
3330 987.0f, 610.0f, 377.0f, 233.0f, 144.0f,
3331 89.0f, 55.0f, 34.0f, 21.0f, 13.0f,
3332 8.0f, 5.0f, 3.0f, 2.0f, 1.0f
3333 };
3334
3335 std::vector<float> outputData = armnn::IsQuantizedType<T>()
3336 ? std::initializer_list<float>
3337 {
3338 3.0f, 4.5f // 1, 3
3339 }
3340 : std::initializer_list<float>
3341 {
3342 1.f, 2.f, 5.f,
3343 13.f, 21.f, 55.f,
3344
3345 987.f, 610.f, 233.f,
3346 89.f, 55.f, 21.f
3347 };
3348
3349 const armnn::PermutationVector NCHWToNHWC = { 0, 3, 1, 2 };
3350 if (dataLayout == armnn::DataLayout::NHWC)
3351 {
3352 std::vector<float> tmp(inputData.size());
3353 armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(float));
3354 inputData = tmp;
3355
3356 std::vector<float> tmp1(outputData.size());
3357 armnnUtils::Permute(outputTensorInfo.GetShape(), NCHWToNHWC, outputData.data(), tmp1.data(), sizeof(float));
3358 outputData = tmp1;
3359 }
3360
3361 auto input = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(),
3362 inputTensorInfo.GetQuantizationOffset(),
3363 inputData));
3364
3365 LayerTestResult<T, 4> result(outputTensorInfo);
3366 result.outputExpected = MakeTensor<T, 4>(outputTensorInfo,
3367 QuantizedVector<T>(outputTensorInfo.GetQuantizationScale(),
3368 outputTensorInfo.GetQuantizationOffset(),
3369 outputData));
3370
3371 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
3372 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
3373
3374 armnn::ResizeQueueDescriptor descriptor;
3375 descriptor.m_Parameters.m_DataLayout = dataLayout;
3376 descriptor.m_Parameters.m_Method = armnn::ResizeMethod::NearestNeighbor;
3377 armnn::WorkloadInfo info;
3378 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
3379 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
3380
3381 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateResize(descriptor, info);
3382
3383 inputHandle->Allocate();
3384 outputHandle->Allocate();
3385 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
3386
3387 workload->PostAllocationConfigure();
3388 workload->Execute();
3389
3390 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
3391 return result;
3392}
3393
3394template<armnn::DataType ArmnnType, typename T>
3395LayerTestResult<T, 4> ResizeNearestNeighborMagTest(
3396 armnn::IWorkloadFactory& workloadFactory,
3397 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Aron Virginas-Tarcc0cefb2019-07-02 17:25:47 +01003398 const armnn::DataLayout dataLayout,
3399 float inQuantScale,
3400 int32_t inQuantOffset,
3401 float outQuantScale,
3402 int32_t outQuantOffset)
Teresa Charlin970f43b2019-07-01 13:51:07 +01003403{
3404 armnn::TensorInfo inputTensorInfo = armnn::IsQuantizedType<T>()
3405 ? armnnUtils::GetTensorInfo(1, 1, 3, 2, dataLayout, ArmnnType)
3406 : armnnUtils::GetTensorInfo(1, 2, 3, 2, dataLayout, ArmnnType);
3407 armnn::TensorInfo outputTensorInfo = armnn::IsQuantizedType<T>()
3408 ? armnnUtils::GetTensorInfo(1, 1, 3, 5, dataLayout, ArmnnType)
3409 : armnnUtils::GetTensorInfo(1, 2, 3, 5, dataLayout, ArmnnType);
3410
3411 if (armnn::IsQuantizedType<T>())
3412 {
Aron Virginas-Tarcc0cefb2019-07-02 17:25:47 +01003413 inputTensorInfo.SetQuantizationScale(inQuantScale);
3414 inputTensorInfo.SetQuantizationOffset(inQuantOffset);
3415 outputTensorInfo.SetQuantizationScale(outQuantScale);
3416 outputTensorInfo.SetQuantizationOffset(outQuantOffset);
Teresa Charlin970f43b2019-07-01 13:51:07 +01003417 }
3418
3419 std::vector<float> inputData = armnn::IsQuantizedType<T>()
3420 ? std::initializer_list<float>
Aron Virginas-Tarcc0cefb2019-07-02 17:25:47 +01003421 {
3422 0.183005f, 2.379065f, // 24, 228, : expected quantised values
3423 1.054970f, 1.302565f, // 105, 128,
3424 2.400595f, 0.688960f // 230, 71
3425 }
Teresa Charlin970f43b2019-07-01 13:51:07 +01003426 : std::initializer_list<float>
Aron Virginas-Tarcc0cefb2019-07-02 17:25:47 +01003427 {
3428 1.0f, 2.0f,
3429 13.0f, 21.0f,
3430 144.0f, 233.0f,
Teresa Charlin970f43b2019-07-01 13:51:07 +01003431
Aron Virginas-Tarcc0cefb2019-07-02 17:25:47 +01003432 233.0f, 144.0f,
3433 21.0f, 13.0f,
3434 2.0f, 1.0f
3435 };
Teresa Charlin970f43b2019-07-01 13:51:07 +01003436 std::vector<float> outputData = armnn::IsQuantizedType<T>()
3437 ? std::initializer_list<float>
Aron Virginas-Tarcc0cefb2019-07-02 17:25:47 +01003438 {
3439 0.183005f, 0.183005f, 0.183005f, 2.379065f, 2.379065f,
3440 1.054970f, 1.054970f, 1.054970f, 1.302565f, 1.302565f,
3441 2.400595f, 2.400595f, 2.400595f, 0.688960f, 0.688960f
3442 }
Teresa Charlin970f43b2019-07-01 13:51:07 +01003443 : std::initializer_list<float>
Aron Virginas-Tarcc0cefb2019-07-02 17:25:47 +01003444 {
3445 1.f, 1.f, 1.f, 2.f, 2.f,
3446 13.f, 13.f, 13.f, 21.f, 21.f,
3447 144.f, 144.f, 144.f, 233.f, 233.f,
Teresa Charlin970f43b2019-07-01 13:51:07 +01003448
Aron Virginas-Tarcc0cefb2019-07-02 17:25:47 +01003449 233.f, 233.f, 233.f, 144.f, 144.f,
3450 21.f, 21.f, 21.f, 13.f, 13.f,
3451 2.f, 2.f, 2.f, 1.f, 1.f
3452 };
Teresa Charlin970f43b2019-07-01 13:51:07 +01003453
3454 const armnn::PermutationVector NCHWToNHWC = { 0, 3, 1, 2 };
3455 if (dataLayout == armnn::DataLayout::NHWC)
3456 {
3457 std::vector<float> tmp(inputData.size());
3458 armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(float));
3459 inputData = tmp;
3460
3461 std::vector<float> tmp1(outputData.size());
3462 armnnUtils::Permute(outputTensorInfo.GetShape(), NCHWToNHWC, outputData.data(), tmp1.data(), sizeof(float));
3463 outputData = tmp1;
3464 }
3465
3466 auto input = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(),
3467 inputTensorInfo.GetQuantizationOffset(),
3468 inputData));
3469
3470 LayerTestResult<T, 4> result(outputTensorInfo);
3471 result.outputExpected = MakeTensor<T, 4>(outputTensorInfo,
3472 QuantizedVector<T>(outputTensorInfo.GetQuantizationScale(),
3473 outputTensorInfo.GetQuantizationOffset(),
3474 outputData));
3475
3476 std::unique_ptr <armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
3477 std::unique_ptr <armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
3478
3479 armnn::ResizeQueueDescriptor descriptor;
3480 descriptor.m_Parameters.m_DataLayout = dataLayout;
3481 descriptor.m_Parameters.m_Method = armnn::ResizeMethod::NearestNeighbor;
3482 armnn::WorkloadInfo info;
3483 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
3484 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
3485
3486 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateResize(descriptor, info);
3487
3488 inputHandle->Allocate();
3489 outputHandle->Allocate();
3490 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
3491
3492 workload->PostAllocationConfigure();
3493 workload->Execute();
3494
3495 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
3496 return result;
3497}
3498
James Conroy4d1ff582019-06-10 17:06:39 +01003499template<armnn::DataType ArmnnType, typename T, std::size_t InputDim, std::size_t OutputDim>
3500LayerTestResult<T, OutputDim> MeanTestHelper(
3501 armnn::IWorkloadFactory& workloadFactory,
3502 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
3503 const unsigned int* inputShape,
3504 const std::vector<float>& inputData,
3505 const std::vector<unsigned int>& axis,
3506 bool keepDims,
3507 const unsigned int* outputShape,
3508 const std::vector<float>& outputData,
3509 float scale = 1.0f,
3510 int32_t offset = 0)
3511{
3512 armnn::TensorInfo inputTensorInfo(InputDim, inputShape, ArmnnType);
3513 armnn::TensorInfo outputTensorInfo(OutputDim, outputShape, ArmnnType);
3514
3515 inputTensorInfo.SetQuantizationScale(scale);
3516 inputTensorInfo.SetQuantizationOffset(offset);
3517
3518 outputTensorInfo.SetQuantizationScale(scale);
3519 outputTensorInfo.SetQuantizationOffset(offset);
3520
3521 auto input = MakeTensor<T, InputDim>(inputTensorInfo, ConvertToDataType<ArmnnType>(inputData, inputTensorInfo));
3522
3523 LayerTestResult<T, OutputDim> result(outputTensorInfo);
3524 result.outputExpected = MakeTensor<T, OutputDim>(
3525 outputTensorInfo, ConvertToDataType<ArmnnType>(outputData, outputTensorInfo));
3526
3527 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
3528 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
3529
3530 armnn::MeanQueueDescriptor data;
3531 data.m_Parameters.m_Axis = axis;
3532 data.m_Parameters.m_KeepDims = keepDims;
3533 armnn::WorkloadInfo info;
3534 AddInputToWorkload(data, info, inputTensorInfo, inputHandle.get());
3535 AddOutputToWorkload(data, info, outputTensorInfo, outputHandle.get());
3536
3537 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateMean(data, info);
3538
3539 inputHandle->Allocate();
3540 outputHandle->Allocate();
3541
3542 CopyDataToITensorHandle(inputHandle.get(), input.origin());
3543
3544 workload->PostAllocationConfigure();
3545 workload->Execute();
3546
3547 CopyDataFromITensorHandle(result.output.origin(), outputHandle.get());
3548
3549 return result;
3550}
3551
3552template<armnn::DataType ArmnnType, typename T>
3553LayerTestResult<T, 1> MeanSimpleTest(
3554 armnn::IWorkloadFactory& workloadFactory,
3555 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3556{
3557 const unsigned int inputShape[] = { 3, 2 };
3558 const unsigned int outputShape[] = { 1 };
3559
3560 std::vector<float> input({ 1.5f, 1.5f, 2.5f, 2.5f, 3.5f, 3.5f });
3561 std::vector<float> output({ 2.5f });
3562
3563 return MeanTestHelper<ArmnnType, T, 2, 1>(
3564 workloadFactory, memoryManager, inputShape, input, {}, false, outputShape, output);
3565}
3566
3567template<armnn::DataType ArmnnType, typename T>
3568LayerTestResult<T, 3> MeanSimpleAxisTest(
3569 armnn::IWorkloadFactory& workloadFactory,
3570 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3571{
3572 const unsigned int inputShape[] = { 2, 3, 1, 2 };
3573 const unsigned int outputShape[] = { 3, 1, 2 };
3574
3575 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 });
3576 std::vector<float> output({ 1.5f, 2.5f, 3.5f, 4.5f, 5.5f, 6.5f });
3577
3578 return MeanTestHelper<ArmnnType, T, 4, 3>(
3579 workloadFactory, memoryManager, inputShape, input, { 0 }, false, outputShape, output);
3580}
3581
3582template<armnn::DataType ArmnnType, typename T>
3583LayerTestResult<T, 4> MeanKeepDimsTest(
3584 armnn::IWorkloadFactory& workloadFactory,
3585 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3586{
3587 const unsigned int inputShape[] = { 1, 1, 3, 2 };
3588 const unsigned int outputShape[] = { 1, 1, 1, 2 };
3589
3590 std::vector<float> input({ 1.5f, 1.5f, 2.5f, 2.5f, 3.5f, 3.5f });
3591 std::vector<float> output({ 2.5f, 2.5f });
3592
3593 return MeanTestHelper<ArmnnType, T, 4, 4>(
3594 workloadFactory, memoryManager, inputShape, input, { 2 }, true, outputShape, output);
3595}
3596
3597template<armnn::DataType ArmnnType, typename T>
3598LayerTestResult<T, 4> MeanMultipleDimsTest(
3599 armnn::IWorkloadFactory& workloadFactory,
3600 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3601{
3602 const unsigned int inputShape[] = { 2, 3, 1, 2 };
3603 const unsigned int outputShape[] = { 1, 3, 1, 1 };
3604
3605 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 });
3606 std::vector<float> output({ 2.0f, 4.0f, 6.0f });
3607
3608 return MeanTestHelper<ArmnnType, T, 4, 4>(
3609 workloadFactory, memoryManager, inputShape, input, { 0, 3 }, true, outputShape, output);
3610}
3611
3612template<armnn::DataType ArmnnType, typename T>
3613LayerTestResult<T, 1> MeanVts1Test(
3614 armnn::IWorkloadFactory& workloadFactory,
3615 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3616{
3617 const unsigned int inputShape[] = { 4, 3, 2 };
3618 const unsigned int outputShape[] = { 2 };
3619
3620 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,
3621 15.0f, 16.0f, 17.0f, 18.0f, 19.0f, 20.0f, 21.0f, 22.0f, 23.0f, 24.0f });
3622 std::vector<float> output({ 12.0f, 13.0f });
3623
3624 return MeanTestHelper<ArmnnType, T, 3, 1>(
3625 workloadFactory, memoryManager, inputShape, input, { 0, 1 }, false, outputShape, output);
3626}
3627
3628template<armnn::DataType ArmnnType, typename T>
3629LayerTestResult<T, 3> MeanVts2Test(
3630 armnn::IWorkloadFactory& workloadFactory,
3631 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3632{
3633 const unsigned int inputShape[] = { 4, 3, 2 };
3634 const unsigned int outputShape[] = { 1, 3, 1 };
3635
3636 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,
3637 15.0f, 16.0f, 17.0f, 18.0f, 19.0f, 20.0f, 21.0f, 22.0f, 23.0f, 24.0f });
3638 std::vector<float> output({ 10.5f, 12.5f, 14.5f });
3639
3640 return MeanTestHelper<ArmnnType, T, 3, 3>(
3641 workloadFactory, memoryManager, inputShape, input, { 0, 2 }, true, outputShape, output);
3642}
3643
3644template<armnn::DataType ArmnnType, typename T>
3645LayerTestResult<T, 3> MeanVts3Test(
3646 armnn::IWorkloadFactory& workloadFactory,
3647 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3648{
3649 const unsigned int inputShape[] = { 1, 2, 2, 1 };
3650 const unsigned int outputShape[] = { 1, 2, 1 };
3651
3652 std::vector<float> input({ 1.0f, 2.0f, 3.0f, 4.0f });
3653 std::vector<float> output({ 1.5f, 3.5f });
3654
3655 return MeanTestHelper<ArmnnType, T, 4, 3>(
3656 workloadFactory, memoryManager, inputShape, input, { 2 }, false, outputShape, output);
3657}
Narumol Prangnawarat71c80b12019-06-17 17:45:43 +01003658
3659template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
3660LayerTestResult<T, 3> ConcatDifferentInputOutputQParamTest(
3661 armnn::IWorkloadFactory& workloadFactory,
3662 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
3663 bool useSubtensor)
3664{
3665 // Defines the tensor descriptors.
3666 armnn::TensorInfo outputTensorInfo({ 3, 6, 3 }, ArmnnType);
3667 armnn::TensorInfo inputTensorInfo1({ 3, 6, 2 }, ArmnnType);
3668 armnn::TensorInfo inputTensorInfo2({ 3, 6, 1 }, ArmnnType);
3669
3670 std::vector<armnn::TensorShape> inputTensorShapes({inputTensorInfo1.GetShape(), inputTensorInfo2.GetShape()});
3671
3672 // Quantized input1 tensor.
3673 const float inputScale1 = 0.5f;
3674 const int32_t inputOffset1 = 5;
3675
3676 auto input1 = MakeTensor<T, 3>(inputTensorInfo1, std::vector<T>(
3677 {
3678 1, 2, 3,
3679 4, 5, 6,
3680 7, 8, 9,
3681 10, 11, 12,
3682 13, 14, 15,
3683 16, 17, 18,
3684
3685 19, 20, 21,
3686 22, 23, 24,
3687 25, 26, 27,
3688 28, 29, 30,
3689 31, 32, 33,
3690 34, 35, 36
3691 }));
3692
3693 // Quatized input2 tensor.
3694 const float inputScale2 = 0.2f;
3695 const int32_t inputOffset2 = 10;
3696
3697 auto input2 = MakeTensor<T, 3>(inputTensorInfo2, std::vector<T>(
3698 {
3699 37, 38, 39,
3700 40, 41, 42,
3701 43, 44, 45,
3702 46, 47, 48,
3703 49, 50, 51,
3704 52, 53, 54
3705 }));
3706
3707 // Quantized output tensor.
3708 const float outputScale = 0.1f;
3709 const int32_t outputOffset = 20;
3710
3711 LayerTestResult<T, 3> ret(outputTensorInfo);
3712
3713 ret.outputExpected = MakeTensor<T, 3>(outputTensorInfo, std::vector<T>(
3714 {
3715 0, 5, 74,
3716 10, 15, 76,
3717 20, 25, 78,
3718 30, 35, 80,
3719 40, 45, 82,
3720 50, 55, 84,
3721
3722 60, 65, 86,
3723 70, 75, 88,
3724 80, 85, 90,
3725 90, 95, 92,
3726 100, 105, 94,
3727 110, 115, 96,
3728
3729 120, 125, 98,
3730 130, 135, 100,
3731 140, 145, 102,
3732 150, 155, 104,
3733 160, 165, 106,
3734 170, 175, 108
3735 }));
3736
3737 outputTensorInfo.SetQuantizationScale(outputScale);
3738 outputTensorInfo.SetQuantizationOffset(outputOffset);
3739 inputTensorInfo1.SetQuantizationScale(inputScale1);
3740 inputTensorInfo1.SetQuantizationOffset(inputOffset1);
3741 inputTensorInfo2.SetQuantizationScale(inputScale2);
3742 inputTensorInfo2.SetQuantizationOffset(inputOffset2);
3743
3744 std::vector<unsigned int> wOrigin1 = { 0, 0, 0 }; //Extent of the window is defined by size of input[0].
3745 armnn::ConcatQueueDescriptor::ViewOrigin window1(wOrigin1);
3746
3747 std::vector<unsigned int> wOrigin2 = { 0, 0, 2 }; //Extent of the window is defined by size of input[1].
3748 armnn::ConcatQueueDescriptor::ViewOrigin window2(wOrigin2);
3749
3750 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
3751
3752 bool subTensorsSupported = useSubtensor && workloadFactory.SupportsSubTensors();
3753
3754 std::unique_ptr<armnn::ITensorHandle> inputHandle1 =
3755 subTensorsSupported ?
3756 workloadFactory.CreateSubTensorHandle(*outputHandle, inputTensorInfo1.GetShape(), wOrigin1.data()) :
3757 workloadFactory.CreateTensorHandle(inputTensorInfo1);
3758
3759 std::unique_ptr<armnn::ITensorHandle> inputHandle2 =
3760 subTensorsSupported ?
3761 workloadFactory.CreateSubTensorHandle(*outputHandle, inputTensorInfo2.GetShape(), wOrigin2.data()) :
3762 workloadFactory.CreateTensorHandle(inputTensorInfo2);
3763
3764 armnn::ConcatQueueDescriptor data;
3765 armnn::OriginsDescriptor desc = armnn::CreateDescriptorForConcatenation(
3766 inputTensorShapes.begin(),inputTensorShapes.end(), 2);
3767 data.m_Parameters = desc;
3768
3769 armnn::WorkloadInfo info;
3770 AddInputToWorkload(data, info, inputTensorInfo1, inputHandle1.get());
3771 AddInputToWorkload(data, info, inputTensorInfo2, inputHandle2.get());
3772 AddOutputToWorkload(data, info, outputTensorInfo, outputHandle.get());
3773
3774 data.m_ViewOrigins.push_back(window1);
3775 data.m_ViewOrigins.push_back(window2);
3776
3777 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateConcat(data, info);
3778
3779 inputHandle1->Allocate();
3780 inputHandle2->Allocate();
3781 outputHandle->Allocate();
3782
3783 CopyDataToITensorHandle(inputHandle1.get(), &input1[0][0][0]);
3784 CopyDataToITensorHandle(inputHandle2.get(), &input2[0][0][0]);
3785
3786 workload->PostAllocationConfigure();
3787 workload->Execute();
3788
3789 CopyDataFromITensorHandle(&ret.output[0][0][0], outputHandle.get());
3790
3791 return ret;
3792}
Matteo Martincighab9e5252019-06-13 17:27:46 +01003793
3794template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
3795LayerTestResult<T, 4> PreluTest(
3796 armnn::IWorkloadFactory& workloadFactory,
3797 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3798{
3799 armnn::TensorInfo inputTensorInfo ({ 1, 2, 2, 3 }, ArmnnType);
3800 armnn::TensorInfo alphaTensorInfo ({ 1, 1, 1, 3 }, ArmnnType);
3801 armnn::TensorInfo outputTensorInfo({ 1, 2, 2, 3 }, ArmnnType);
3802
3803 if (armnn::IsQuantizedType<T>())
3804 {
3805 inputTensorInfo.SetQuantizationScale(0.25f);
3806 inputTensorInfo.SetQuantizationOffset(128);
3807 alphaTensorInfo.SetQuantizationScale(0.25f);
3808 alphaTensorInfo.SetQuantizationOffset(50);
3809 outputTensorInfo.SetQuantizationScale(0.5f);
3810 outputTensorInfo.SetQuantizationOffset(120);
3811 }
3812
3813 std::vector<float> inputData
3814 {
3815 // Expected quantized values:
3816 // 128, 128, 128, 132, 132, 132, 124, 124, 124, 120, 120, 120
3817 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, -1.0f, -1.0f, -1.0f, -2.0f, -2.0f, -2.0f
3818 };
3819 std::vector<float> alphaData
3820 {
3821 // Expected quantized values:
3822 // 50, 54, 58
3823 0.0f, 1.0f, 2.0f
3824 };
3825 std::vector<float> outputExpectedData =
3826 {
3827 // Expected quantized values:
3828 // 20, 120, 120, 122, 122, 122, 120, 118, 116, 120, 116, 112
3829 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, 0.0f, -1.0f, -2.0f, 0.0f, -2.0f, -4.0f
3830 };
3831
3832 auto input = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(),
3833 inputTensorInfo.GetQuantizationOffset(),
3834 inputData));
3835 auto alpha = MakeTensor<T, 4>(alphaTensorInfo, QuantizedVector<T>(alphaTensorInfo.GetQuantizationScale(),
3836 alphaTensorInfo.GetQuantizationOffset(),
3837 alphaData));
3838
3839 LayerTestResult<T, 4> result(outputTensorInfo);
3840 result.outputExpected = MakeTensor<T, 4>(outputTensorInfo,
3841 QuantizedVector<T>(outputTensorInfo.GetQuantizationScale(),
3842 outputTensorInfo.GetQuantizationOffset(),
3843 outputExpectedData));
3844
3845 std::unique_ptr <armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
3846 std::unique_ptr <armnn::ITensorHandle> alphaHandle = workloadFactory.CreateTensorHandle(alphaTensorInfo);
3847 std::unique_ptr <armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
3848
3849 armnn::PreluQueueDescriptor descriptor;
3850 armnn::WorkloadInfo info;
3851 AddInputToWorkload (descriptor, info, inputTensorInfo, inputHandle.get());
3852 AddInputToWorkload (descriptor, info, alphaTensorInfo, alphaHandle.get());
3853 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
3854
3855 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreatePrelu(descriptor, info);
3856
3857 inputHandle->Allocate();
3858 alphaHandle->Allocate();
3859 outputHandle->Allocate();
3860
3861 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
3862 CopyDataToITensorHandle(alphaHandle.get(), &alpha[0][0][0][0]);
3863
3864 workload->Execute();
3865
3866 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
3867
3868 return result;
3869}
3870
Francis Murtagh57f13d52019-06-24 14:24:36 +01003871template<armnn::DataType ArmnnType,
3872 std::size_t InputDim,
3873 std::size_t OutputDim,
3874 typename T = armnn::ResolveType<ArmnnType>>
3875LayerTestResult<T, OutputDim> BatchToSpaceNdHelper(
3876 armnn::IWorkloadFactory &workloadFactory,
3877 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
3878 const armnn::DataLayout& dataLayout,
3879 const unsigned int *inputShape,
3880 const std::vector<float> &inputData,
3881 const std::vector<unsigned int> &blockShape,
3882 const std::vector<std::pair<unsigned int, unsigned int>> &crops,
3883 const unsigned int *outputShape,
3884 const std::vector<float> &outputData,
3885 float scale = 1.0f,
3886 int32_t offset = 0)
3887{
3888 armnn::TensorInfo inputTensorInfo(InputDim, inputShape, ArmnnType);
3889 armnn::TensorInfo outputTensorInfo(OutputDim, outputShape, ArmnnType);
3890
3891 inputTensorInfo.SetQuantizationScale(scale);
3892 inputTensorInfo.SetQuantizationOffset(offset);
3893
3894 outputTensorInfo.SetQuantizationScale(scale);
3895 outputTensorInfo.SetQuantizationOffset(offset);
Francis Murtaghd0dfe172019-06-25 10:57:10 +01003896
Francis Murtagh57f13d52019-06-24 14:24:36 +01003897 auto input = MakeTensor<T, InputDim>(inputTensorInfo, ConvertToDataType<ArmnnType>(inputData, inputTensorInfo));
3898
3899 LayerTestResult<T, OutputDim> result(outputTensorInfo);
3900 result.outputExpected = MakeTensor<T, OutputDim>(outputTensorInfo,
3901 ConvertToDataType<ArmnnType>(outputData, outputTensorInfo));
3902
3903 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
3904 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
3905
3906 armnn::BatchToSpaceNdQueueDescriptor data;
3907 data.m_Parameters.m_DataLayout = dataLayout;
3908 data.m_Parameters.m_BlockShape = blockShape;
3909 data.m_Parameters.m_Crops = crops;
3910 armnn::WorkloadInfo info;
3911 AddInputToWorkload(data, info, inputTensorInfo, inputHandle.get());
3912 AddOutputToWorkload(data, info, outputTensorInfo, outputHandle.get());
3913
3914 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateBatchToSpaceNd(data, info);
3915
3916 inputHandle->Allocate();
3917 outputHandle->Allocate();
3918
3919 CopyDataToITensorHandle(inputHandle.get(), input.origin());
3920
3921 workload->PostAllocationConfigure();
3922 workload->Execute();
3923
3924 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
3925
3926 return result;
3927}
3928
3929template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
3930LayerTestResult<T, 4> BatchToSpaceNdNhwcTest1(
3931 armnn::IWorkloadFactory& workloadFactory,
3932 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3933{
3934 const unsigned int inputShape[] = {4, 2, 2, 1};
3935 const unsigned int outputShape[] = {1, 4, 4, 1};
3936
3937 std::vector<float> input({
3938 // Batch 0, Height 0, Width (2) x Channel (1)
3939 1.0f, 3.0f,
3940 // Batch 0, Height 1, Width (2) x Channel (1)
3941 9.0f, 11.0f,
3942
3943
3944 // Batch 1, Height 0, Width (2) x Channel (1)
3945 2.0f, 4.0f,
3946 // Batch 1, Height 1, Width (2) x Channel (1)
3947 10.0f, 12.0f,
3948
3949
3950 // Batch 2, Height 0, Width (2) x Channel (1)
3951 5.0f, 7.0f,
3952 // Batch 2, Height 1, Width (2) x Channel (1)
3953 13.0f, 15.0f,
3954
3955 // Batch 3, Height 0, Width (2) x Channel (3)
3956 6.0f, 8.0f,
3957 // Batch 3, Height 1, Width (2) x Channel (1)
3958 14.0f, 16.0f
3959 });
3960
3961 std::vector<float> expectedOutput({
3962 1.0f, 2.0f, 3.0f, 4.0f,
3963 5.0f, 6.0f, 7.0f, 8.0f,
3964 9.0f, 10.0f, 11.0f, 12.0f,
3965 13.0f, 14.0f, 15.0f, 16.0f
3966 });
3967
3968 std::vector<unsigned int> blockShape {2, 2};
3969 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
3970
3971 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
3972 armnn::DataLayout::NHWC, inputShape, input, blockShape,
3973 crops, outputShape, expectedOutput);
3974}
3975
3976template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
3977LayerTestResult<T, 4> BatchToSpaceNdNhwcTest2(
3978 armnn::IWorkloadFactory& workloadFactory,
3979 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3980{
3981 const unsigned int inputShape[] = {4, 1, 1, 1};
3982 const unsigned int outputShape[] = {1, 2, 2, 1};
3983
3984 std::vector<float> input({
3985 // Batch 0, Height 0, Width (2) x Channel (1)
3986 1.0f, 2.0f, 3.0f, 4.0f
3987 });
3988
3989 std::vector<float> expectedOutput({1.0f, 2.0f, 3.0f, 4.0f});
3990
3991 std::vector<unsigned int> blockShape({2, 2});
3992 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
3993
3994 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
3995 armnn::DataLayout::NHWC, inputShape, input, blockShape,
3996 crops, outputShape, expectedOutput);
3997}
3998
3999template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
4000LayerTestResult<T, 4> BatchToSpaceNdNhwcTest3(
4001 armnn::IWorkloadFactory& workloadFactory,
4002 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
4003{
4004 const unsigned int inputShape[] = {4, 1, 1, 3};
4005 const unsigned int outputShape[] = {1, 2, 2, 3};
4006
4007 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});
4008
4009 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});
4010
4011 std::vector<unsigned int> blockShape({2, 2});
4012 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
4013
4014 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
4015 armnn::DataLayout::NHWC, inputShape, input, blockShape,
4016 crops, outputShape, expectedOutput);
4017}
4018
4019template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
4020LayerTestResult<T, 4> BatchToSpaceNdNhwcTest4(
4021 armnn::IWorkloadFactory& workloadFactory,
4022 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
4023{
4024 const unsigned int inputShape[] = {8, 1, 3, 1};
4025 const unsigned int outputShape[] = {2, 2, 4, 1};
4026
4027 std::vector<float> input({
4028 0.0f, 1.0f, 3.0f,
4029 0.0f, 9.0f, 11.0f,
4030 0.0f, 2.0f, 4.0f,
4031 0.0f, 10.0f, 12.0f,
4032 0.0f, 5.0f, 7.0f,
4033 0.0f, 13.0f, 15.0f,
4034 0.0f, 6.0f, 8.0f,
4035 0.0f, 14.0f, 16.0f
4036 });
4037
4038 std::vector<float> expectedOutput({
4039 1.0f, 2.0f, 3.0f, 4.0f,
4040 5.0f, 6.0f, 7.0f, 8.0f,
4041 9.0f, 10.0f, 11.0f, 12.0f,
4042 13.0f, 14.0f, 15.0f, 16.0f
4043 });
4044
4045 std::vector<unsigned int> blockShape({2, 2});
4046 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {2, 0}};
4047
4048 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
4049 armnn::DataLayout::NHWC, inputShape, input, blockShape,
4050 crops, outputShape, expectedOutput);
4051}
4052
4053template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
4054LayerTestResult<T, 4> BatchToSpaceNdNhwcTest5(
4055 armnn::IWorkloadFactory& workloadFactory,
4056 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
4057{
4058 const unsigned int inputShape[] = {4, 2, 2, 1};
4059 const unsigned int outputShape[] = {1, 4, 4, 1};
4060
4061 std::vector<float> input({1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16});
4062 std::vector<float> expectedOutput({1, 5, 2, 6, 9, 13, 10, 14, 3, 7, 4, 8, 11, 15, 12, 16});
4063
4064 std::vector<unsigned int> blockShape({2, 2});
4065 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
4066
4067 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager, armnn::DataLayout::NHWC, inputShape,
4068 input, blockShape, crops, outputShape, expectedOutput);
4069}
4070
4071template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
4072LayerTestResult<T, 4> BatchToSpaceNdNhwcTest6(
4073 armnn::IWorkloadFactory& workloadFactory,
4074 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
4075{
4076 const unsigned int inputShape[] = {4, 1, 1, 1};
4077 const unsigned int outputShape[] = {1, 2, 2, 1};
4078
4079 std::vector<float> input({
4080 // Batch 0, Height 0, Width (2) x Channel (1)
4081 1, 2, 3, 4
4082 });
4083
4084 std::vector<float> expectedOutput({1, 2, 3, 4});
4085
4086 std::vector<unsigned int> blockShape({2, 2});
4087 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
4088
4089 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
4090 armnn::DataLayout::NHWC, inputShape, input, blockShape,
4091 crops, outputShape, expectedOutput);
4092}
4093
4094template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
4095LayerTestResult<T, 4> BatchToSpaceNdNhwcTest7(
4096 armnn::IWorkloadFactory& workloadFactory,
4097 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
4098{
4099 const unsigned int inputShape[] = {4, 1, 1, 3};
4100 const unsigned int outputShape[] = {1, 2, 2, 3};
4101
4102 std::vector<float> input({1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12});
4103
4104 std::vector<float> expectedOutput({1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12});
4105
4106 std::vector<unsigned int> blockShape({2, 2});
4107 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
4108
4109 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
4110 armnn::DataLayout::NHWC, inputShape, input, blockShape,
4111 crops, outputShape, expectedOutput);
4112}
4113
4114template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
4115LayerTestResult<T, 4> BatchToSpaceNdNchwTest1(
4116 armnn::IWorkloadFactory &workloadFactory,
4117 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
4118{
4119 const unsigned int inputShape[] = {4, 3, 1, 1};
4120 const unsigned int outputShape[] = {1, 3, 2, 2};
4121
4122 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});
4123
4124 std::vector<float> expectedOutput({
4125 // Batch 0, Channel 0, Height (2) x Width (2)
4126 1.0f, 4.0f,
4127 7.0f, 10.0f,
4128
4129 // Batch 0, Channel 1, Height (2) x Width (2)
4130 2.0f, 5.0f,
4131 8.0f, 11.0f,
4132
4133 // Batch 0, Channel 2, Height (2) x Width (2)
4134 3.0f, 6.0f,
4135 9.0f, 12.0f,
4136 });
4137
4138 std::vector<unsigned int> blockShape({2, 2});
4139 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
4140
4141 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
4142 armnn::DataLayout::NCHW, inputShape, input, blockShape,
4143 crops, outputShape, expectedOutput);
4144}
4145
4146template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
4147LayerTestResult<T, 4> BatchToSpaceNdNchwTest2(
4148 armnn::IWorkloadFactory& workloadFactory,
4149 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
4150{
4151 const unsigned int inputShape[] = {4, 1, 1, 1};
4152 const unsigned int outputShape[] = {1, 1, 2, 2};
4153
4154 std::vector<float> input({
4155 // Batch 0, Height 0, Width (2) x Channel (1)
4156 1.0f, 2.0f, 3.0f, 4.0f
4157 });
4158
4159 std::vector<float> expectedOutput({1.0f, 2.0f, 3.0f, 4.0f});
4160
4161 std::vector<unsigned int> blockShape({2, 2});
4162 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
4163
4164 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
4165 armnn::DataLayout::NCHW, inputShape, input, blockShape,
4166 crops, outputShape, expectedOutput);
4167}
4168
4169template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
4170LayerTestResult<T, 4> BatchToSpaceNdNchwTest3(
4171 armnn::IWorkloadFactory& workloadFactory,
4172 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
4173{
4174 const unsigned int inputShape[] = {4, 3, 1, 1};
4175 const unsigned int outputShape[] = {1, 3, 2, 2};
4176
4177 std::vector<float> input({1.0f, 3.0f, 5.0f, 7.0f, 9.0f, 11.0f, 2.0f, 4.0f, 6.0f, 8.0f, 10.0f, 12.0f});
4178
4179 std::vector<float> expectedOutput({
4180 // Batch 0, Channel 0, Height (2) x Width (2)
4181 1.0f, 7.0f,
4182 2.0f, 8.0f,
4183
4184 // Batch 0, Channel 1, Height (2) x Width (2)
4185 3.0f, 9.0f,
4186 4.0f, 10.0f,
4187
4188 // Batch 0, Channel 2, Height (2) x Width (2)
4189 5.0f, 11.0f,
4190 6.0f, 12.0f,
4191 });
4192
4193 std::vector<unsigned int> blockShape({2, 2});
4194 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
4195
4196 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
4197 armnn::DataLayout::NCHW, inputShape, input, blockShape,
4198 crops, outputShape, expectedOutput);
4199}
4200
4201template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
4202LayerTestResult<T, 4> BatchToSpaceNdNchwTest4(
4203 armnn::IWorkloadFactory &workloadFactory,
4204 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
4205{
4206 const unsigned int inputShape[] = {4, 3, 1, 1};
4207 const unsigned int outputShape[] = {1, 3, 2, 2};
4208
4209 std::vector<float> input({1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12});
4210
4211 std::vector<float> expectedOutput({
4212 // Batch 0, Channel 0, Height (2) x Width (2)
4213 1, 4,
4214 7, 10,
4215
4216 // Batch 0, Channel 1, Height (2) x Width (2)
4217 2, 5,
4218 8, 11,
4219
4220 // Batch 0, Channel 2, Height (2) x Width (2)
4221 3, 6,
4222 9, 12,
4223 });
4224
4225 std::vector<unsigned int> blockShape({2, 2});
4226 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
4227
4228 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
4229 armnn::DataLayout::NCHW, inputShape, input, blockShape,
4230 crops, outputShape, expectedOutput);
4231}
4232
4233template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
4234LayerTestResult<T, 4> BatchToSpaceNdNchwTest5(
4235 armnn::IWorkloadFactory& workloadFactory,
4236 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
4237{
4238 const unsigned int inputShape[] = {4, 1, 1, 1};
4239 const unsigned int outputShape[] = {1, 1, 2, 2};
4240
4241 std::vector<float> input({
4242 // Batch 0, Height 0, Width (2) x Channel (1)
4243 1, 2, 3, 4
4244 });
4245
4246 std::vector<float> expectedOutput({1, 2, 3, 4});
4247
4248 std::vector<unsigned int> blockShape({2, 2});
4249 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
4250
4251 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
4252 armnn::DataLayout::NCHW, inputShape, input, blockShape,
4253 crops, outputShape, expectedOutput);
4254}
4255
4256template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
4257LayerTestResult<T, 4> BatchToSpaceNdNchwTest6(
4258 armnn::IWorkloadFactory& workloadFactory,
4259 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
4260{
4261 const unsigned int inputShape[] = {4, 3, 1, 1};
4262 const unsigned int outputShape[] = {1, 3, 2, 2};
4263
4264 std::vector<float> input({1, 3, 5, 7, 9, 11, 2, 4, 6, 8, 10, 12});
4265
4266 std::vector<float> expectedOutput({
4267 // Batch 0, Channel 0, Height (2) x Width (2)
4268 1, 7,
4269 2, 8,
4270
4271 // Batch 0, Channel 1, Height (2) x Width (2)
4272 3, 9,
4273 4, 10,
4274
4275 // Batch 0, Channel 2, Height (2) x Width (2)
4276 5, 11,
4277 6, 12,
4278 });
4279
4280 std::vector<unsigned int> blockShape({2, 2});
4281 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
4282
4283 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
4284 armnn::DataLayout::NCHW, inputShape, input, blockShape,
4285 crops, outputShape, expectedOutput);
4286}
4287
4288template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
4289LayerTestResult<T, 4> BatchToSpaceNdNchwTest7(
4290 armnn::IWorkloadFactory& workloadFactory,
4291 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
4292{
4293 const unsigned int inputShape[] = {8, 1, 1, 3};
4294 const unsigned int outputShape[] = {2, 1, 2, 4};
4295
4296 std::vector<float> input({
4297 0, 1, 3, 0, 9, 11,
4298 0, 2, 4, 0, 10, 12,
4299 0, 5, 7, 0, 13, 15,
4300 0, 6, 8, 0, 14, 16
4301 });
4302
4303 std::vector<float> expectedOutput({
4304 1, 2, 3, 4,
4305 5, 6, 7, 8,
4306 9, 10, 11, 12,
4307 13, 14, 15, 16
4308 });
4309
4310 std::vector<unsigned int> blockShape({2, 2});
4311 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {2, 0}};
4312
4313 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
4314 armnn::DataLayout::NCHW, inputShape, input, blockShape,
4315 crops, outputShape, expectedOutput);
4316}
4317
Matteo Martincighab9e5252019-06-13 17:27:46 +01004318template LayerTestResult<typename armnn::ResolveType<armnn::DataType::Float32>, 4>
4319PreluTest<armnn::DataType::Float32>(
4320 armnn::IWorkloadFactory& workloadFactory,
4321 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4322
4323template LayerTestResult<typename armnn::ResolveType<armnn::DataType::QuantisedAsymm8>, 4>
4324PreluTest<armnn::DataType::QuantisedAsymm8>(
4325 armnn::IWorkloadFactory& workloadFactory,
4326 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4327
4328template LayerTestResult<typename armnn::ResolveType<armnn::DataType::QuantisedSymm16>, 4>
4329PreluTest<armnn::DataType::QuantisedSymm16>(
4330 armnn::IWorkloadFactory& workloadFactory,
4331 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Aron Virginas-Tar735a4502019-06-26 15:02:47 +01004332
4333//
4334// TransposeConvolution2d
4335//
4336
4337// Simple biased
4338LayerTestResult<float, 4> SimpleTransposeConvolution2dFloatNchwTest(
4339 armnn::IWorkloadFactory& workloadFactory,
4340 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4341
4342LayerTestResult<float, 4> SimpleTransposeConvolution2dFloatNhwcTest(
4343 armnn::IWorkloadFactory& workloadFactory,
4344 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4345
4346LayerTestResult<uint8_t, 4> SimpleTransposeConvolution2dUint8NchwTest(
4347 armnn::IWorkloadFactory& workloadFactory,
4348 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4349
4350LayerTestResult<uint8_t, 4> SimpleTransposeConvolution2dUint8NhwcTest(
4351 armnn::IWorkloadFactory& workloadFactory,
4352 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4353
4354LayerTestResult<int16_t, 4> SimpleTransposeConvolution2dInt16NchwTest(
4355 armnn::IWorkloadFactory& workloadFactory,
4356 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4357
4358LayerTestResult<int16_t, 4> SimpleTransposeConvolution2dInt16NhwcTest(
4359 armnn::IWorkloadFactory& workloadFactory,
4360 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4361
4362// Simple unbiased
4363LayerTestResult<float, 4> UnbiasedSimpleTransposeConvolution2dFloatNchwTest(
4364 armnn::IWorkloadFactory& workloadFactory,
4365 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4366
4367LayerTestResult<float, 4> UnbiasedSimpleTransposeConvolution2dFloatNhwcTest(
4368 armnn::IWorkloadFactory& workloadFactory,
4369 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4370
4371LayerTestResult<uint8_t, 4> UnbiasedSimpleTransposeConvolution2dUint8NchwTest(
4372 armnn::IWorkloadFactory& workloadFactory,
4373 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4374
4375LayerTestResult<uint8_t, 4> UnbiasedSimpleTransposeConvolution2dUint8NhwcTest(
4376 armnn::IWorkloadFactory& workloadFactory,
4377 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4378
4379LayerTestResult<int16_t, 4> UnbiasedSimpleTransposeConvolution2dInt16NchwTest(
4380 armnn::IWorkloadFactory& workloadFactory,
4381 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4382
4383LayerTestResult<int16_t, 4> UnbiasedSimpleTransposeConvolution2dInt16NhwcTest(
4384 armnn::IWorkloadFactory& workloadFactory,
4385 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4386
4387// Padded biased
4388LayerTestResult<float, 4> PaddedTransposeConvolution2dFloatNchwTest(
4389 armnn::IWorkloadFactory& workloadFactory,
4390 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4391
4392LayerTestResult<float, 4> PaddedTransposeConvolution2dFloatNhwcTest(
4393 armnn::IWorkloadFactory& workloadFactory,
4394 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4395
4396LayerTestResult<uint8_t, 4> PaddedTransposeConvolution2dUint8NchwTest(
4397 armnn::IWorkloadFactory& workloadFactory,
4398 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4399
4400LayerTestResult<uint8_t, 4> PaddedTransposeConvolution2dUint8NhwcTest(
4401 armnn::IWorkloadFactory& workloadFactory,
4402 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4403
4404LayerTestResult<int16_t, 4> PaddedTransposeConvolution2dInt16NchwTest(
4405 armnn::IWorkloadFactory& workloadFactory,
4406 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4407
4408LayerTestResult<int16_t, 4> PaddedTransposeConvolution2dInt16NhwcTest(
4409 armnn::IWorkloadFactory& workloadFactory,
4410 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4411
4412// Padded unbiased
4413LayerTestResult<float, 4> UnbiasedPaddedTransposeConvolution2dFloatNchwTest(
4414 armnn::IWorkloadFactory& workloadFactory,
4415 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4416
4417LayerTestResult<float, 4> UnbiasedPaddedTransposeConvolution2dFloatNhwcTest(
4418 armnn::IWorkloadFactory& workloadFactory,
4419 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4420
4421LayerTestResult<uint8_t, 4> UnbiasedPaddedTransposeConvolution2dUint8NchwTest(
4422 armnn::IWorkloadFactory& workloadFactory,
4423 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4424
4425LayerTestResult<uint8_t, 4> UnbiasedPaddedTransposeConvolution2dUint8NhwcTest(
4426 armnn::IWorkloadFactory& workloadFactory,
4427 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4428
4429LayerTestResult<int16_t, 4> UnbiasedPaddedTransposeConvolution2dInt16NchwTest(
4430 armnn::IWorkloadFactory& workloadFactory,
4431 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4432
4433LayerTestResult<int16_t, 4> UnbiasedPaddedTransposeConvolution2dInt16NhwcTest(
4434 armnn::IWorkloadFactory& workloadFactory,
4435 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4436
4437// Strided biased
4438LayerTestResult<float, 4> StridedTransposeConvolution2dFloatNchwTest(
4439 armnn::IWorkloadFactory& workloadFactory,
4440 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4441
4442LayerTestResult<float, 4> StridedTransposeConvolution2dFloatNhwcTest(
4443 armnn::IWorkloadFactory& workloadFactory,
4444 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4445
4446LayerTestResult<uint8_t, 4> StridedTransposeConvolution2dUint8NchwTest(
4447 armnn::IWorkloadFactory& workloadFactory,
4448 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4449
4450LayerTestResult<uint8_t, 4> StridedTransposeConvolution2dUint8NhwcTest(
4451 armnn::IWorkloadFactory& workloadFactory,
4452 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4453
4454LayerTestResult<int16_t, 4> StridedTransposeConvolution2dInt16NchwTest(
4455 armnn::IWorkloadFactory& workloadFactory,
4456 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4457
4458LayerTestResult<int16_t, 4> StridedTransposeConvolution2dInt16NhwcTest(
4459 armnn::IWorkloadFactory& workloadFactory,
4460 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4461
4462// Strided unbiased
4463LayerTestResult<float, 4> UnbiasedStridedTransposeConvolution2dFloatNchwTest(
4464 armnn::IWorkloadFactory& workloadFactory,
4465 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4466
4467LayerTestResult<float, 4> UnbiasedStridedTransposeConvolution2dFloatNhwcTest(
4468 armnn::IWorkloadFactory& workloadFactory,
4469 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4470
4471LayerTestResult<uint8_t, 4> UnbiasedStridedTransposeConvolution2dUint8NchwTest(
4472 armnn::IWorkloadFactory& workloadFactory,
4473 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4474
4475LayerTestResult<uint8_t, 4> UnbiasedStridedTransposeConvolution2dUint8NhwcTest(
4476 armnn::IWorkloadFactory& workloadFactory,
4477 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4478
4479LayerTestResult<int16_t, 4> UnbiasedStridedTransposeConvolution2dInt16NchwTest(
4480 armnn::IWorkloadFactory& workloadFactory,
4481 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4482
4483LayerTestResult<int16_t, 4> UnbiasedStridedTransposeConvolution2dInt16NhwcTest(
4484 armnn::IWorkloadFactory& workloadFactory,
Narumol Prangnawarate6eaf662019-07-08 08:57:17 +01004485 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);