blob: 7db8471db68c91006992bbb556847e7f7d551c28 [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,
953 const armnn::DataLayout dataLayout);
954
nikraj0193f84a92019-06-05 10:48:46 +0100955template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
956LayerTestResult<T, 2> Rsqrt2dTestCommon(
Mohamed Nour Abouelseouda1d3c6a2018-12-27 12:39:16 +0000957 armnn::IWorkloadFactory& workloadFactory,
958 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
959 const armnn::TensorInfo inputTensorInfo,
960 const armnn::TensorInfo outputTensorInfo,
nikraj010421e7f2019-06-14 09:40:34 +0100961 const std::vector<float>& inputValues,
962 const std::vector<float>& expectedOutputValues);
Mohamed Nour Abouelseouda1d3c6a2018-12-27 12:39:16 +0000963
nikraj0193f84a92019-06-05 10:48:46 +0100964template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
965LayerTestResult<T, 2> Rsqrt2dTest(
Mohamed Nour Abouelseouda1d3c6a2018-12-27 12:39:16 +0000966 armnn::IWorkloadFactory& workloadFactory,
967 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
968
nikraj0193f84a92019-06-05 10:48:46 +0100969template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
970LayerTestResult<T, 3> Rsqrt3dTest(
Mohamed Nour Abouelseouda1d3c6a2018-12-27 12:39:16 +0000971 armnn::IWorkloadFactory& workloadFactory,
972 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
973
nikraj0193f84a92019-06-05 10:48:46 +0100974template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
975LayerTestResult<T, 2> RsqrtZeroTest(
Mohamed Nour Abouelseouda1d3c6a2018-12-27 12:39:16 +0000976 armnn::IWorkloadFactory& workloadFactory,
977 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
978
nikraj0193f84a92019-06-05 10:48:46 +0100979template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
980LayerTestResult<T, 2> RsqrtNegativeTest(
Mohamed Nour Abouelseouda1d3c6a2018-12-27 12:39:16 +0000981 armnn::IWorkloadFactory& workloadFactory,
982 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
983
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +0000984LayerTestResult<float, 4> BatchNormTest(
985 armnn::IWorkloadFactory& workloadFactory,
986 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
987
988LayerTestResult<float, 4> BatchNormNhwcTest(
989 armnn::IWorkloadFactory& workloadFactory,
990 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
991
992LayerTestResult<float, 2> FakeQuantizationTest(
993 armnn::IWorkloadFactory& workloadFactory,
994 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
995
Ferran Balaguere52211e2019-06-17 12:23:52 +0100996LayerTestResult<float, 4> L2NormalizationDefaultEpsilonTest(
997 armnn::IWorkloadFactory& workloadFactory,
998 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
999 const armnn::DataLayout layout);
1000
1001LayerTestResult<float, 4> L2NormalizationNonDefaultEpsilonTest(
1002 armnn::IWorkloadFactory& workloadFactory,
1003 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1004 const armnn::DataLayout layout);
1005
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001006LayerTestResult<float, 4> L2Normalization1dTest(
1007 armnn::IWorkloadFactory& workloadFactory,
1008 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Matthew Bentham8800c002018-11-19 13:19:28 +00001009 const armnn::DataLayout layout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001010
Ferran Balaguerd73d14f2019-06-10 10:29:54 +01001011LayerTestResult<int16_t, 4> L2Normalization1dInt16Test(
1012 armnn::IWorkloadFactory& workloadFactory,
1013 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1014 const armnn::DataLayout layout);
1015
Ferran Balaguerc6138d82019-06-13 17:23:50 +01001016LayerTestResult<uint8_t, 4> L2Normalization1dUint8Test(
1017 armnn::IWorkloadFactory& workloadFactory,
1018 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1019 const armnn::DataLayout layout);
1020
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001021LayerTestResult<float, 4> L2Normalization2dTest(
1022 armnn::IWorkloadFactory& workloadFactory,
1023 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Matthew Bentham8800c002018-11-19 13:19:28 +00001024 const armnn::DataLayout layout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001025
Ferran Balaguerd73d14f2019-06-10 10:29:54 +01001026LayerTestResult<int16_t, 4> L2Normalization2dInt16Test(
1027 armnn::IWorkloadFactory& workloadFactory,
1028 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1029 const armnn::DataLayout layout);
1030
Ferran Balaguerc6138d82019-06-13 17:23:50 +01001031LayerTestResult<uint8_t, 4> L2Normalization2dUint8Test(
1032 armnn::IWorkloadFactory& workloadFactory,
1033 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1034 const armnn::DataLayout layout);
1035
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001036LayerTestResult<float, 4> L2Normalization3dTest(
1037 armnn::IWorkloadFactory& workloadFactory,
1038 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Matthew Bentham8800c002018-11-19 13:19:28 +00001039 const armnn::DataLayout layout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001040
Ferran Balaguerd73d14f2019-06-10 10:29:54 +01001041LayerTestResult<int16_t, 4> L2Normalization3dInt16Test(
1042 armnn::IWorkloadFactory& workloadFactory,
1043 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1044 const armnn::DataLayout layout);
1045
Ferran Balaguerc6138d82019-06-13 17:23:50 +01001046LayerTestResult<uint8_t, 4> L2Normalization3dUint8Test(
1047 armnn::IWorkloadFactory& workloadFactory,
1048 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1049 const armnn::DataLayout layout);
1050
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001051LayerTestResult<float, 4> L2Normalization4dTest(
1052 armnn::IWorkloadFactory& workloadFactory,
1053 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Matthew Bentham8800c002018-11-19 13:19:28 +00001054 const armnn::DataLayout layout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001055
Ferran Balaguerd73d14f2019-06-10 10:29:54 +01001056LayerTestResult<int16_t, 4> L2Normalization4dInt16Test(
1057 armnn::IWorkloadFactory& workloadFactory,
1058 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1059 const armnn::DataLayout layout);
1060
Ferran Balaguerc6138d82019-06-13 17:23:50 +01001061LayerTestResult<uint8_t, 4> L2Normalization4dUint8Test(
1062 armnn::IWorkloadFactory& workloadFactory,
1063 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1064 const armnn::DataLayout layout);
1065
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001066LayerTestResult<float, 4> ConstantTest(
1067 armnn::IWorkloadFactory& workloadFactory,
1068 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1069
Nina Drozd58ef2c62019-05-16 12:09:18 +01001070LayerTestResult<uint8_t, 4> ConstantUint8SimpleQuantizationScaleNoOffsetTest(
1071 armnn::IWorkloadFactory& workloadFactory,
1072 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1073
1074LayerTestResult<int16_t, 4> ConstantInt16SimpleQuantizationScaleNoOffsetTest(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001075 armnn::IWorkloadFactory& workloadFactory,
1076 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1077
1078LayerTestResult<uint8_t, 4> BoundedReLuUint8Test(
1079 armnn::IWorkloadFactory& workloadFactory,
1080 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1081 float upperBound);
1082
1083LayerTestResult<uint8_t, 4> BoundedReLuUint8Test(
1084 armnn::IWorkloadFactory& workloadFactory,
1085 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1086 float upperBound,
1087 float lowerBound);
1088
Francis Murtagh46c09d02019-05-28 08:15:28 +01001089template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1090LayerTestResult<T, 2> FullyConnectedTest(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001091 armnn::IWorkloadFactory& workloadFactory,
1092 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1093 bool biasEnabled);
1094
1095std::vector<LayerTestResult<uint8_t, 3>> SplitterUint8Test(
1096 armnn::IWorkloadFactory& workloadFactory,
1097 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1098
Ruomei Yan25339c32019-05-28 16:48:20 +01001099std::vector<LayerTestResult<int16_t, 3>> SplitterInt16Test(
1100 armnn::IWorkloadFactory& workloadFactory,
1101 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1102
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001103LayerTestResult<uint8_t, 3> CopyViaSplitterUint8Test(
1104 armnn::IWorkloadFactory& workloadFactory,
1105 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1106
Ruomei Yan25339c32019-05-28 16:48:20 +01001107LayerTestResult<int16_t, 3> CopyViaSplitterInt16Test(
1108 armnn::IWorkloadFactory& workloadFactory,
1109 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1110
Jim Flynn4ed6c832019-05-20 11:02:46 +01001111LayerTestResult<uint8_t, 3> ConcatUint8Test(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001112 armnn::IWorkloadFactory& workloadFactory,
1113 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1114
Jim Flynn4ed6c832019-05-20 11:02:46 +01001115LayerTestResult<uint16_t, 3> ConcatUint16Test(
Jim Flynncbb66aa2019-05-15 13:03:54 +01001116 armnn::IWorkloadFactory& workloadFactory,
1117 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1118
Jim Flynn4ed6c832019-05-20 11:02:46 +01001119LayerTestResult<uint8_t, 3> ConcatUint8DifferentQParamsTest(
Jim Flynncbb66aa2019-05-15 13:03:54 +01001120 armnn::IWorkloadFactory& workloadFactory,
1121 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Ferran Balaguerb2845652019-02-27 09:42:06 +00001122
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001123LayerTestResult<uint8_t, 4> AdditionUint8Test(
1124 armnn::IWorkloadFactory& workloadFactory,
1125 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1126
1127LayerTestResult<uint8_t, 4> AdditionBroadcast1ElementUint8Test(
1128 armnn::IWorkloadFactory& workloadFactory,
1129 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1130
1131LayerTestResult<uint8_t, 4> AdditionBroadcastUint8Test(
1132 armnn::IWorkloadFactory& workloadFactory,
1133 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1134
Sadik Armagan2999a022019-04-09 14:20:12 +01001135LayerTestResult<int16_t, 4> AdditionInt16Test(
1136 armnn::IWorkloadFactory& workloadFactory,
1137 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1138
1139LayerTestResult<int16_t, 4> AdditionBroadcastInt16Test(
1140 armnn::IWorkloadFactory& workloadFactory,
1141 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1142
1143LayerTestResult<int16_t, 4> AdditionBroadcast1ElementInt16Test(
1144 armnn::IWorkloadFactory& workloadFactory,
1145 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1146
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001147LayerTestResult<uint8_t, 4> SubtractionUint8Test(
1148 armnn::IWorkloadFactory& workloadFactory,
1149 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1150
1151LayerTestResult<uint8_t, 4> SubtractionBroadcast1ElementUint8Test(
1152 armnn::IWorkloadFactory& workloadFactory,
1153 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1154
1155LayerTestResult<uint8_t, 4> SubtractionBroadcastUint8Test(
1156 armnn::IWorkloadFactory& workloadFactory,
1157 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1158
Sadik Armagan2999a022019-04-09 14:20:12 +01001159LayerTestResult<int16_t, 4> SubtractionInt16Test(
1160 armnn::IWorkloadFactory& workloadFactory,
1161 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1162
1163LayerTestResult<int16_t, 4> SubtractionBroadcast1ElementInt16Test(
1164 armnn::IWorkloadFactory& workloadFactory,
1165 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1166
1167LayerTestResult<int16_t, 4> SubtractionBroadcastInt16Test(
1168 armnn::IWorkloadFactory& workloadFactory,
1169 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1170
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001171LayerTestResult<uint8_t, 4> CompareActivationUint8Test(
1172 armnn::IWorkloadFactory& workloadFactory,
1173 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1174 armnn::IWorkloadFactory& refWorkloadFactory,
1175 armnn::ActivationFunction f);
1176
Teresa Charlin18515e22019-04-24 10:17:46 +01001177LayerTestResult<int16_t, 4> CompareActivationInt16Test(
1178 armnn::IWorkloadFactory& workloadFactory,
1179 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1180 armnn::IWorkloadFactory& refWorkloadFactory,
1181 armnn::ActivationFunction f);
1182
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001183LayerTestResult<uint8_t, 2> CompareSoftmaxUint8Test(
1184 armnn::IWorkloadFactory& workloadFactory,
1185 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1186 armnn::IWorkloadFactory& refWorkloadFactory,
1187 float beta);
1188
1189LayerTestResult<uint8_t, 4> MultiplicationUint8Test(
1190 armnn::IWorkloadFactory& workloadFactory,
1191 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1192
1193LayerTestResult<uint8_t, 4> MultiplicationBroadcast1ElementUint8Test(
1194 armnn::IWorkloadFactory& workloadFactory,
1195 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1196
1197LayerTestResult<uint8_t, 4> MultiplicationBroadcast1DVectorUint8Test(
1198 armnn::IWorkloadFactory& workloadFactory,
1199 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1200
Sadik Armagan2999a022019-04-09 14:20:12 +01001201LayerTestResult<int16_t, 4> MultiplicationInt16Test(
1202 armnn::IWorkloadFactory& workloadFactory,
1203 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1204
1205LayerTestResult<int16_t, 4> MultiplicationBroadcast1ElementInt16Test(
1206 armnn::IWorkloadFactory& workloadFactory,
1207 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1208
1209LayerTestResult<int16_t, 4> MultiplicationBroadcast1DVectorInt16Test(
1210 armnn::IWorkloadFactory& workloadFactory,
1211 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1212
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001213LayerTestResult<uint8_t, 4> DivisionUint8Test(
1214 armnn::IWorkloadFactory& workloadFactory,
1215 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1216
1217LayerTestResult<uint8_t, 4> DivisionBroadcast1ElementUint8Test(
1218 armnn::IWorkloadFactory& workloadFactory,
1219 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1220
1221LayerTestResult<uint8_t, 4> DivisionBroadcast1DVectorUint8Test(
1222 armnn::IWorkloadFactory& workloadFactory,
1223 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1224
Sadik Armagan2999a022019-04-09 14:20:12 +01001225LayerTestResult<int16_t, 4> DivisionInt16Test(
1226 armnn::IWorkloadFactory& workloadFactory,
1227 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1228
1229LayerTestResult<int16_t, 4> DivisionBroadcast1ElementInt16Test(
1230 armnn::IWorkloadFactory& workloadFactory,
1231 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1232
1233LayerTestResult<int16_t, 4> DivisionBroadcast1DVectorInt16Test(
1234 armnn::IWorkloadFactory& workloadFactory,
1235 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1236
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001237LayerTestResult<uint8_t, 4> SimpleConvolution2d3x5Uint8Test(
1238 armnn::IWorkloadFactory& workloadFactory,
1239 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1240 bool biasEnabled,
Matthew Bentham8800c002018-11-19 13:19:28 +00001241 const armnn::DataLayout layout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001242
1243LayerTestResult<uint8_t, 4> SimpleConvolution2d3x3Uint8Test(
1244 armnn::IWorkloadFactory& workloadFactory,
1245 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1246 bool biasEnabled,
Matthew Bentham8800c002018-11-19 13:19:28 +00001247 const armnn::DataLayout layout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001248
Mike Kelly2f80f6e2019-05-16 12:41:34 +01001249LayerTestResult<int16_t, 4> SimpleConvolution2d3x5QSymm16Test(
1250 armnn::IWorkloadFactory& workloadFactory,
1251 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1252 bool biasEnabled,
1253 const armnn::DataLayout layout);
1254
1255LayerTestResult<int16_t, 4> SimpleConvolution2d3x3QSymm16Test(
1256 armnn::IWorkloadFactory& workloadFactory,
1257 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1258 bool biasEnabled,
1259 const armnn::DataLayout layout);
1260
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001261LayerTestResult<uint8_t, 4> DepthwiseConvolution2dUint8Test(
1262 armnn::IWorkloadFactory& workloadFactory,
1263 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1264 bool biasEnabled,
Matthew Bentham8800c002018-11-19 13:19:28 +00001265 const armnn::DataLayout layout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001266
1267LayerTestResult<uint8_t, 4> DepthwiseConvolution2dDepthMul1Uint8Test(
1268 armnn::IWorkloadFactory& workloadFactory,
1269 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1270 bool biasEnabled,
Matthew Bentham8800c002018-11-19 13:19:28 +00001271 const armnn::DataLayout layout);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001272
Ruomei Yan88d44b82019-05-23 14:29:06 +01001273LayerTestResult<int16_t, 4> DepthwiseConvolution2dInt16Test(
1274 armnn::IWorkloadFactory& workloadFactory,
1275 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1276 bool biasEnabled,
1277 const armnn::DataLayout layout);
1278
1279LayerTestResult<int16_t, 4> DepthwiseConvolution2dDepthMul1Int16Test(
1280 armnn::IWorkloadFactory& workloadFactory,
1281 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1282 bool biasEnabled,
1283 const armnn::DataLayout layout);
1284
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001285LayerTestResult<uint8_t, 4> ConstantLinearActivationUint8Test(
1286 armnn::IWorkloadFactory& workloadFactory,
1287 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1288
Teresa Charlin18515e22019-04-24 10:17:46 +01001289LayerTestResult<int16_t, 4> ConstantLinearActivationInt16Test(
1290 armnn::IWorkloadFactory& workloadFactory,
1291 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1292
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001293LayerTestResult<uint8_t, 4> BatchNormUint8Test(
1294 armnn::IWorkloadFactory& workloadFactory,
1295 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1296
1297LayerTestResult<uint8_t, 4> BatchNormUint8NhwcTest(
1298 armnn::IWorkloadFactory& workloadFactory,
1299 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1300
Matteo Martincighf5507132019-06-04 10:59:47 +01001301LayerTestResult<int16_t, 4> BatchNormInt16Test(
1302 armnn::IWorkloadFactory& workloadFactory,
1303 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1304
1305LayerTestResult<int16_t, 4> BatchNormInt16NhwcTest(
1306 armnn::IWorkloadFactory& workloadFactory,
1307 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1308
Nina Drozd58ef2c62019-05-16 12:09:18 +01001309LayerTestResult<uint8_t, 4> ConstantUint8CustomQuantizationScaleAndOffsetTest(
1310 armnn::IWorkloadFactory& workloadFactory,
1311 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1312
1313LayerTestResult<int16_t, 4> ConstantInt16CustomQuantizationScaleAndOffsetTest(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001314 armnn::IWorkloadFactory& workloadFactory,
1315 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1316
1317LayerTestResult<uint8_t, 1> Concatenation1dUint8Test(
1318 armnn::IWorkloadFactory& workloadFactory,
1319 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1320
1321LayerTestResult<uint8_t, 2> Concatenation2dDim0Uint8Test(
1322 armnn::IWorkloadFactory& workloadFactory,
1323 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1324
1325LayerTestResult<uint8_t, 2> Concatenation2dDim1Uint8Test(
1326 armnn::IWorkloadFactory& workloadFactory,
1327 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1328
1329LayerTestResult<uint8_t, 2> Concatenation2dDim0DiffInputDimsUint8Test(
1330 armnn::IWorkloadFactory& workloadFactory,
1331 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1332
1333LayerTestResult<uint8_t, 2> Concatenation2dDim1DiffInputDimsUint8Test(
1334 armnn::IWorkloadFactory& workloadFactory,
1335 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1336
1337LayerTestResult<uint8_t, 3> Concatenation3dDim0Uint8Test(
1338 armnn::IWorkloadFactory& workloadFactory,
1339 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1340
1341LayerTestResult<uint8_t, 3> Concatenation3dDim1Uint8Test(
1342 armnn::IWorkloadFactory& workloadFactory,
1343 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1344
1345LayerTestResult<uint8_t, 3> Concatenation3dDim2Uint8Test(
1346 armnn::IWorkloadFactory& workloadFactory,
narpra015cdda352018-11-19 15:30:27 +00001347 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1348 bool useSubtensor);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001349
1350LayerTestResult<uint8_t, 3> Concatenation3dDim0DiffInputDimsUint8Test(
1351 armnn::IWorkloadFactory& workloadFactory,
1352 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1353
1354LayerTestResult<uint8_t, 3> Concatenation3dDim1DiffInputDimsUint8Test(
1355 armnn::IWorkloadFactory& workloadFactory,
1356 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1357
1358LayerTestResult<uint8_t, 3> Concatenation3dDim2DiffInputDimsUint8Test(
1359 armnn::IWorkloadFactory& workloadFactory,
narpra015cdda352018-11-19 15:30:27 +00001360 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1361 bool useSubtensor);
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001362
kevmay012b4d88e2019-01-24 14:05:09 +00001363LayerTestResult<uint8_t, 4> EqualSimpleTest(
FrancisMurtagh30cdfca2018-12-18 12:57:35 +00001364 armnn::IWorkloadFactory& workloadFactory,
1365 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1366
kevmay012b4d88e2019-01-24 14:05:09 +00001367LayerTestResult<uint8_t, 4> EqualBroadcast1ElementTest(
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> EqualBroadcast1DVectorTest(
FrancisMurtagh30cdfca2018-12-18 12:57:35 +00001372 armnn::IWorkloadFactory& workloadFactory,
1373 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1374
1375LayerTestResult<uint8_t, 4> EqualUint8Test(
1376 armnn::IWorkloadFactory& workloadFactory,
1377 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1378
1379LayerTestResult<uint8_t, 4> EqualBroadcast1ElementUint8Test(
1380 armnn::IWorkloadFactory& workloadFactory,
1381 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1382
1383LayerTestResult<uint8_t, 4> EqualBroadcast1DVectorUint8Test(
1384 armnn::IWorkloadFactory& workloadFactory,
1385 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1386
kevmay012b4d88e2019-01-24 14:05:09 +00001387LayerTestResult<uint8_t, 4> GreaterSimpleTest(
FrancisMurtagh878f0232018-12-19 10:56:15 +00001388 armnn::IWorkloadFactory& workloadFactory,
1389 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1390
kevmay012b4d88e2019-01-24 14:05:09 +00001391LayerTestResult<uint8_t, 4> GreaterBroadcast1ElementTest(
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> GreaterBroadcast1DVectorTest(
FrancisMurtagh878f0232018-12-19 10:56:15 +00001396 armnn::IWorkloadFactory& workloadFactory,
1397 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1398
1399LayerTestResult<uint8_t, 4> GreaterUint8Test(
1400 armnn::IWorkloadFactory& workloadFactory,
1401 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1402
1403LayerTestResult<uint8_t, 4> GreaterBroadcast1ElementUint8Test(
1404 armnn::IWorkloadFactory& workloadFactory,
1405 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1406
1407LayerTestResult<uint8_t, 4> GreaterBroadcast1DVectorUint8Test(
1408 armnn::IWorkloadFactory& workloadFactory,
1409 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1410
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001411LayerTestResult<float, 2> FullyConnectedLargeTest(
1412 armnn::IWorkloadFactory& workloadFactory,
1413 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1414 bool transposeWeights);
1415
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001416LayerTestResult<uint8_t, 2> PadUint82dTest(
1417 armnn::IWorkloadFactory& workloadFactory,
1418 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1419
David Monahan34757812019-06-19 11:47:21 +01001420LayerTestResult<uint8_t, 2> PadUint82dCustomPaddingTest(
1421 armnn::IWorkloadFactory& workloadFactory,
1422 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1423
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001424LayerTestResult<uint8_t, 3> PadUint83dTest(
1425 armnn::IWorkloadFactory& workloadFactory,
1426 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1427
1428LayerTestResult<uint8_t, 4> PadUint84dTest(
1429 armnn::IWorkloadFactory& workloadFactory,
1430 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1431
1432LayerTestResult<float, 2> PadFloat322dTest(
1433 armnn::IWorkloadFactory& workloadFactory,
1434 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1435
David Monahan34757812019-06-19 11:47:21 +01001436LayerTestResult<float, 2> PadFloat322dCustomPaddingTest(
1437 armnn::IWorkloadFactory& workloadFactory,
1438 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1439
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001440LayerTestResult<float, 3> PadFloat323dTest(
1441 armnn::IWorkloadFactory& workloadFactory,
1442 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1443
1444LayerTestResult<float, 4> PadFloat324dTest(
1445 armnn::IWorkloadFactory& workloadFactory,
1446 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1447
Narumol Prangnawarate6eaf662019-07-08 08:57:17 +01001448template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1449LayerTestResult<T, 2> Pad2dTestCommon(
1450 armnn::IWorkloadFactory& workloadFactory,
1451 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1452 float qScale,
1453 int32_t qOffset,
1454 const float customPaddingValue = 0.0f);
1455
1456template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1457LayerTestResult<T, 3> Pad3dTestCommon(
1458 armnn::IWorkloadFactory& workloadFactory,
1459 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1460 float qScale,
1461 int32_t qOffset);
1462
1463template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1464LayerTestResult<T, 4> Pad4dTestCommon(
1465 armnn::IWorkloadFactory& workloadFactory,
1466 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1467 float qScale,
1468 int32_t qOffset);
1469
Jan Eilers38e05bd2019-06-26 13:10:09 +01001470void LstmUtilsZeroVectorTest();
1471void LstmUtilsMeanStddevNormalizationNoneZeroInputTest();
1472void LstmUtilsMeanStddevNormalizationAllZeroInputTest();
1473void LstmUtilsMeanStddevNormalizationMixedZeroInputTest();
1474void LstmUtilsVectorBatchVectorCwiseProductTest();
1475void LstmUtilsVectorBatchVectorAddTest();
1476
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001477LayerTestResult<float, 2> LstmLayerFloat32WithCifgWithPeepholeNoProjectionTest(
1478 armnn::IWorkloadFactory& workloadFactory,
1479 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1480
1481LayerTestResult<float, 2> LstmLayerFloat32NoCifgNoPeepholeNoProjectionTest(
1482 armnn::IWorkloadFactory& workloadFactory,
1483 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1484
1485LayerTestResult<float, 2> LstmLayerFloat32NoCifgWithPeepholeWithProjectionTest(
1486 armnn::IWorkloadFactory& workloadFactory,
1487 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1488
Jan Eilers38e05bd2019-06-26 13:10:09 +01001489LayerTestResult<float, 2> LstmLayerFloat32NoCifgWithPeepholeWithProjectionWithLayerNormTest(
1490 armnn::IWorkloadFactory& workloadFactory,
1491 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1492
Conor Kennedyb9971c92019-05-07 07:14:23 +01001493LayerTestResult<int16_t, 2> LstmLayerInt16NoCifgNoPeepholeNoProjectionTest(
1494 armnn::IWorkloadFactory& workloadFactory,
1495 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1496
1497LayerTestResult<int16_t, 2> LstmLayerInt16WithCifgWithPeepholeNoProjectionTest(
1498 armnn::IWorkloadFactory& workloadFactory,
1499 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1500
1501LayerTestResult<int16_t, 2> LstmLayerInt16NoCifgWithPeepholeWithProjectionTest(
1502 armnn::IWorkloadFactory& workloadFactory,
1503 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1504
1505LayerTestResult<int16_t, 2> LstmLayerInt16NoCifgNoPeepholeNoProjectionInt16ConstantTest(
1506 armnn::IWorkloadFactory& workloadFactory,
1507 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1508
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001509LayerTestResult<float, 4> SimpleConvertFp16ToFp32Test(
1510 armnn::IWorkloadFactory& workloadFactory,
1511 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1512
1513LayerTestResult<armnn::Half, 4> SimpleConvertFp32ToFp16Test(
1514 armnn::IWorkloadFactory& workloadFactory,
1515 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1516
Éanna Ó Catháinde705582018-12-03 13:04:22 +00001517LayerTestResult<float, 4> MaximumSimpleTest(
1518 armnn::IWorkloadFactory& workloadFactory,
1519 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1520
1521LayerTestResult<float, 4> MaximumBroadcast1ElementTest(
1522 armnn::IWorkloadFactory& workloadFactory,
1523 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1524
1525LayerTestResult<float, 4> MaximumBroadcast1DVectorTest(
1526 armnn::IWorkloadFactory& workloadFactory,
1527 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1528
1529LayerTestResult<uint8_t , 4> MaximumUint8Test(
1530 armnn::IWorkloadFactory& workloadFactory,
1531 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1532
1533LayerTestResult<uint8_t, 4> MaximumBroadcast1ElementUint8Test(
1534 armnn::IWorkloadFactory& workloadFactory,
1535 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1536
1537LayerTestResult<uint8_t, 4> MaximumBroadcast1DVectorUint8Test(
1538 armnn::IWorkloadFactory& workloadFactory,
1539 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1540
Sadik Armagan2999a022019-04-09 14:20:12 +01001541LayerTestResult<int16_t , 4> MaximumInt16Test(
1542 armnn::IWorkloadFactory& workloadFactory,
1543 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1544
1545LayerTestResult<int16_t, 4> MaximumBroadcast1ElementInt16Test(
1546 armnn::IWorkloadFactory& workloadFactory,
1547 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1548
1549LayerTestResult<int16_t, 4> MaximumBroadcast1DVectorInt16Test(
1550 armnn::IWorkloadFactory& workloadFactory,
1551 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1552
James Conroy4d1ff582019-06-10 17:06:39 +01001553template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1554LayerTestResult<T, 1> MeanSimpleTest(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001555 armnn::IWorkloadFactory& workloadFactory,
1556 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1557
James Conroy4d1ff582019-06-10 17:06:39 +01001558template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1559LayerTestResult<T, 3> MeanSimpleAxisTest(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001560 armnn::IWorkloadFactory& workloadFactory,
1561 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1562
James Conroy4d1ff582019-06-10 17:06:39 +01001563template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1564LayerTestResult<T, 4> MeanKeepDimsTest(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001565 armnn::IWorkloadFactory& workloadFactory,
1566 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1567
James Conroy4d1ff582019-06-10 17:06:39 +01001568template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1569LayerTestResult<T, 4> MeanMultipleDimsTest(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001570 armnn::IWorkloadFactory& workloadFactory,
1571 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1572
James Conroy4d1ff582019-06-10 17:06:39 +01001573template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1574LayerTestResult<T, 1> MeanVts1Test(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001575 armnn::IWorkloadFactory& workloadFactory,
1576 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1577
James Conroy4d1ff582019-06-10 17:06:39 +01001578template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1579LayerTestResult<T, 3> MeanVts2Test(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001580 armnn::IWorkloadFactory& workloadFactory,
1581 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1582
James Conroy4d1ff582019-06-10 17:06:39 +01001583template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1584LayerTestResult<T, 3> MeanVts3Test(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001585 armnn::IWorkloadFactory& workloadFactory,
1586 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1587
Éanna Ó Catháin20e58802018-12-04 10:29:06 +00001588LayerTestResult<float, 4> MinimumBroadcast1ElementTest1(
1589 armnn::IWorkloadFactory& workloadFactory,
1590 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1591
1592LayerTestResult<float, 4> MinimumBroadcast1ElementTest2(
1593 armnn::IWorkloadFactory& workloadFactory,
1594 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1595
1596LayerTestResult<uint8_t, 4> MinimumBroadcast1DVectorUint8Test(
1597 armnn::IWorkloadFactory & workloadFactory,
1598 const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager);
1599
Sadik Armagan2999a022019-04-09 14:20:12 +01001600LayerTestResult<int16_t , 4> MinimumInt16Test(
1601 armnn::IWorkloadFactory& workloadFactory,
1602 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1603
1604LayerTestResult<int16_t, 4> MinimumBroadcast1ElementInt16Test(
1605 armnn::IWorkloadFactory& workloadFactory,
1606 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1607
1608LayerTestResult<int16_t, 4> MinimumBroadcast1DVectorInt16Test(
1609 armnn::IWorkloadFactory& workloadFactory,
1610 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1611
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001612LayerTestResult<float, 4> AdditionAfterMaxPoolTest(
1613 armnn::IWorkloadFactory& workloadFactory,
1614 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1615
1616LayerTestResult<float, 4> SpaceToBatchNdSimpleFloat32Test(
1617 armnn::IWorkloadFactory& workloadFactory,
1618 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1619
1620LayerTestResult<float, 4> SpaceToBatchNdMultiChannelsFloat32Test(
1621 armnn::IWorkloadFactory& workloadFactory,
1622 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1623
1624LayerTestResult<float, 4> SpaceToBatchNdMultiBlockFloat32Test(
1625 armnn::IWorkloadFactory& workloadFactory,
1626 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1627
1628LayerTestResult<float, 4> SpaceToBatchNdPaddingFloat32Test(
1629 armnn::IWorkloadFactory& workloadFactory,
1630 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1631
1632LayerTestResult<uint8_t, 4> SpaceToBatchNdSimpleUint8Test(
1633 armnn::IWorkloadFactory& workloadFactory,
1634 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1635
1636LayerTestResult<uint8_t, 4> SpaceToBatchNdMultiChannelsUint8Test(
1637 armnn::IWorkloadFactory& workloadFactory,
1638 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1639
1640LayerTestResult<uint8_t, 4> SpaceToBatchNdMultiBlockUint8Test(
1641 armnn::IWorkloadFactory& workloadFactory,
1642 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1643
1644LayerTestResult<uint8_t, 4> SpaceToBatchNdPaddingUint8Test(
1645 armnn::IWorkloadFactory& workloadFactory,
1646 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1647
1648LayerTestResult<float, 4> SpaceToBatchNdSimpleNHWCFloat32Test(
1649 armnn::IWorkloadFactory& workloadFactory,
1650 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1651
1652LayerTestResult<float, 4> SpaceToBatchNdMultiChannelsNHWCFloat32Test(
1653 armnn::IWorkloadFactory& workloadFactory,
1654 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1655
1656LayerTestResult<float, 4> SpaceToBatchNdMultiBlockNHWCFloat32Test(
1657 armnn::IWorkloadFactory& workloadFactory,
1658 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1659
1660LayerTestResult<float, 4> SpaceToBatchNdPaddingNHWCFloat32Test(
1661 armnn::IWorkloadFactory& workloadFactory,
1662 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1663
1664LayerTestResult<uint8_t, 4> SpaceToBatchNdSimpleNHWCUint8Test(
1665 armnn::IWorkloadFactory& workloadFactory,
1666 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1667
1668LayerTestResult<uint8_t, 4> SpaceToBatchNdMultiChannelsNHWCUint8Test(
1669 armnn::IWorkloadFactory& workloadFactory,
1670 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1671
1672LayerTestResult<uint8_t, 4> SpaceToBatchNdMultiBlockNHWCUint8Test(
1673 armnn::IWorkloadFactory& workloadFactory,
1674 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1675
1676LayerTestResult<uint8_t, 4> SpaceToBatchNdPaddingNHWCUint8Test(
1677 armnn::IWorkloadFactory& workloadFactory,
1678 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1679
nikraj01120522a2019-05-31 11:33:07 +01001680LayerTestResult<int16_t, 4> SpaceToBatchNdSimpleUint16Test(
1681 armnn::IWorkloadFactory& workloadFactory,
1682 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1683
1684LayerTestResult<int16_t, 4> SpaceToBatchNdMultiChannelsUint16Test(
1685 armnn::IWorkloadFactory& workloadFactory,
1686 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1687
1688LayerTestResult<int16_t, 4> SpaceToBatchNdMultiBlockUint16Test(
1689 armnn::IWorkloadFactory& workloadFactory,
1690 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1691
1692LayerTestResult<int16_t, 4> SpaceToBatchNdPaddingUint16Test(
1693 armnn::IWorkloadFactory& workloadFactory,
1694 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1695
1696LayerTestResult<int16_t, 4> SpaceToBatchNdSimpleNHWCUint16Test(
1697 armnn::IWorkloadFactory& workloadFactory,
1698 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1699
1700LayerTestResult<int16_t, 4> SpaceToBatchNdMultiChannelsNHWCUint16Test(
1701 armnn::IWorkloadFactory& workloadFactory,
1702 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1703
1704LayerTestResult<int16_t, 4> SpaceToBatchNdMultiBlockNHWCUint16Test(
1705 armnn::IWorkloadFactory& workloadFactory,
1706 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1707
1708LayerTestResult<int16_t, 4> SpaceToBatchNdPaddingNHWCUint16Test(
1709 armnn::IWorkloadFactory& workloadFactory,
1710 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1711
Francis Murtagh57f13d52019-06-24 14:24:36 +01001712LayerTestResult<float, 4> BatchToSpaceNdNhwcTest1(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001713 armnn::IWorkloadFactory& workloadFactory,
1714 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1715
Francis Murtagh57f13d52019-06-24 14:24:36 +01001716LayerTestResult<float, 4> BatchToSpaceNdNhwcTest2(
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> BatchToSpaceNdNhwcTest3(
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> BatchToSpaceNdNhwcTest4(
Nattapat Chaimanowong3ee14222019-02-27 10:28:09 +00001725 armnn::IWorkloadFactory& workloadFactory,
1726 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1727
Francis Murtagh57f13d52019-06-24 14:24:36 +01001728LayerTestResult<float, 4> BatchToSpaceNdNchwTest1(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001729 armnn::IWorkloadFactory &workloadFactory,
1730 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1731
Francis Murtagh57f13d52019-06-24 14:24:36 +01001732LayerTestResult<float, 4> BatchToSpaceNdNchwTest2(
Nattapat Chaimanowong3ee14222019-02-27 10:28:09 +00001733 armnn::IWorkloadFactory &workloadFactory,
1734 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Mike Kelly831faed2018-11-28 11:52:08 +00001735
Francis Murtagh57f13d52019-06-24 14:24:36 +01001736LayerTestResult<float, 4> BatchToSpaceNdNchwTest3(
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<uint8_t, 4> BatchToSpaceNdNhwcTest5(
Aron Virginas-Tar5caf9072018-11-14 18:35:18 +00001741 armnn::IWorkloadFactory &workloadFactory,
1742 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Nattapat Chaimanowong1216b582018-11-23 15:33:41 +00001743
Francis Murtagh57f13d52019-06-24 14:24:36 +01001744LayerTestResult<uint8_t, 4> BatchToSpaceNdNhwcTest6(
Nattapat Chaimanowong3ee14222019-02-27 10:28:09 +00001745 armnn::IWorkloadFactory &workloadFactory,
1746 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Mike Kelly831faed2018-11-28 11:52:08 +00001747
Francis Murtagh57f13d52019-06-24 14:24:36 +01001748LayerTestResult<uint8_t, 4> BatchToSpaceNdNhwcTest7(
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> BatchToSpaceNdNchwTest4(
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> BatchToSpaceNdNchwTest5(
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> BatchToSpaceNdNchwTest6(
Nattapat Chaimanowong3ee14222019-02-27 10:28:09 +00001761 armnn::IWorkloadFactory &workloadFactory,
1762 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1763
Francis Murtagh57f13d52019-06-24 14:24:36 +01001764LayerTestResult<uint8_t, 4> BatchToSpaceNdNchwTest7(
Nattapat Chaimanowong3ee14222019-02-27 10:28:09 +00001765 armnn::IWorkloadFactory &workloadFactory,
1766 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Mike Kelly831faed2018-11-28 11:52:08 +00001767
Nattapat Chaimanowong1216b582018-11-23 15:33:41 +00001768LayerTestResult<float, 4> StridedSlice4DFloat32Test(
1769 armnn::IWorkloadFactory& workloadFactory,
1770 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Nattapat Chaimanowongcfdcadf2018-12-06 11:54:33 +00001771
Nattapat Chaimanowong1216b582018-11-23 15:33:41 +00001772LayerTestResult<float, 4> StridedSlice4DReverseFloat32Test(
1773 armnn::IWorkloadFactory& workloadFactory,
1774 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1775
1776LayerTestResult<float, 4> StridedSliceSimpleStrideFloat32Test(
1777 armnn::IWorkloadFactory& workloadFactory,
1778 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1779
1780LayerTestResult<float, 4> StridedSliceSimpleRangeMaskFloat32Test(
1781 armnn::IWorkloadFactory& workloadFactory,
1782 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1783
1784LayerTestResult<float, 2> StridedSliceShrinkAxisMaskFloat32Test(
1785 armnn::IWorkloadFactory& workloadFactory,
1786 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1787
1788LayerTestResult<float, 3> StridedSlice3DFloat32Test(
1789 armnn::IWorkloadFactory& workloadFactory,
1790 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1791
1792LayerTestResult<float, 3> StridedSlice3DReverseFloat32Test(
1793 armnn::IWorkloadFactory& workloadFactory,
1794 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1795
1796LayerTestResult<float, 2> StridedSlice2DFloat32Test(
1797 armnn::IWorkloadFactory& workloadFactory,
1798 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1799
1800LayerTestResult<float, 2> StridedSlice2DReverseFloat32Test(
1801 armnn::IWorkloadFactory& workloadFactory,
1802 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1803
1804LayerTestResult<uint8_t, 4> StridedSlice4DUint8Test(
1805 armnn::IWorkloadFactory& workloadFactory,
1806 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1807
1808LayerTestResult<uint8_t, 4> StridedSlice4DReverseUint8Test(
1809 armnn::IWorkloadFactory& workloadFactory,
1810 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1811
1812LayerTestResult<uint8_t, 4> StridedSliceSimpleStrideUint8Test(
1813 armnn::IWorkloadFactory& workloadFactory,
1814 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1815
1816LayerTestResult<uint8_t, 4> StridedSliceSimpleRangeMaskUint8Test(
1817 armnn::IWorkloadFactory& workloadFactory,
1818 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1819
1820LayerTestResult<uint8_t, 2> StridedSliceShrinkAxisMaskUint8Test(
1821 armnn::IWorkloadFactory& workloadFactory,
1822 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1823
1824LayerTestResult<uint8_t, 3> StridedSlice3DUint8Test(
1825 armnn::IWorkloadFactory& workloadFactory,
1826 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1827
1828LayerTestResult<uint8_t, 3> StridedSlice3DReverseUint8Test(
1829 armnn::IWorkloadFactory& workloadFactory,
1830 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1831
1832LayerTestResult<uint8_t, 2> StridedSlice2DUint8Test(
1833 armnn::IWorkloadFactory& workloadFactory,
1834 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1835
1836LayerTestResult<uint8_t, 2> StridedSlice2DReverseUint8Test(
1837 armnn::IWorkloadFactory& workloadFactory,
1838 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Nattapat Chaimanowongcfdcadf2018-12-06 11:54:33 +00001839
Matteo Martincigh42666a12019-05-29 08:53:41 +01001840LayerTestResult<int16_t, 4> StridedSlice4DInt16Test(
1841 armnn::IWorkloadFactory& workloadFactory,
1842 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1843
1844LayerTestResult<int16_t, 4> StridedSlice4DReverseInt16Test(
1845 armnn::IWorkloadFactory& workloadFactory,
1846 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1847
1848LayerTestResult<int16_t, 4> StridedSliceSimpleStrideInt16Test(
1849 armnn::IWorkloadFactory& workloadFactory,
1850 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1851
1852LayerTestResult<int16_t, 4> StridedSliceSimpleRangeMaskInt16Test(
1853 armnn::IWorkloadFactory& workloadFactory,
1854 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1855
1856LayerTestResult<int16_t, 2> StridedSliceShrinkAxisMaskInt16Test(
1857 armnn::IWorkloadFactory& workloadFactory,
1858 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1859
1860LayerTestResult<int16_t, 3> StridedSlice3DInt16Test(
1861 armnn::IWorkloadFactory& workloadFactory,
1862 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1863
1864LayerTestResult<int16_t, 3> StridedSlice3DReverseInt16Test(
1865 armnn::IWorkloadFactory& workloadFactory,
1866 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1867
1868LayerTestResult<int16_t, 2> StridedSlice2DInt16Test(
1869 armnn::IWorkloadFactory& workloadFactory,
1870 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1871
1872LayerTestResult<int16_t, 2> StridedSlice2DReverseInt16Test(
1873 armnn::IWorkloadFactory& workloadFactory,
1874 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1875
Nattapat Chaimanowongcfdcadf2018-12-06 11:54:33 +00001876LayerTestResult<float, 4> Debug4DFloat32Test(
1877 armnn::IWorkloadFactory& workloadFactory,
1878 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1879
1880LayerTestResult<float, 3> Debug3DFloat32Test(
1881 armnn::IWorkloadFactory& workloadFactory,
1882 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1883
1884LayerTestResult<float, 2> Debug2DFloat32Test(
1885 armnn::IWorkloadFactory& workloadFactory,
1886 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1887
1888LayerTestResult<float, 1> Debug1DFloat32Test(
1889 armnn::IWorkloadFactory& workloadFactory,
1890 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1891
1892LayerTestResult<uint8_t, 4> Debug4DUint8Test(
1893 armnn::IWorkloadFactory& workloadFactory,
1894 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1895
1896LayerTestResult<uint8_t, 3> Debug3DUint8Test(
1897 armnn::IWorkloadFactory& workloadFactory,
1898 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1899
1900LayerTestResult<uint8_t, 2> Debug2DUint8Test(
1901 armnn::IWorkloadFactory& workloadFactory,
1902 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1903
1904LayerTestResult<uint8_t, 1> Debug1DUint8Test(
1905 armnn::IWorkloadFactory& workloadFactory,
1906 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Matteo Martincigh49124022019-01-11 13:25:59 +00001907
1908LayerTestResult<uint8_t, 4> PreCompiledConvolution2dTest(
1909 armnn::IWorkloadFactory& workloadFactory,
1910 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1911
1912LayerTestResult<uint8_t, 4> PreCompiledConvolution2dStride2x2Test(
1913 armnn::IWorkloadFactory& workloadFactory,
1914 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1915
1916LayerTestResult<uint8_t, 4> PreCompiledDepthwiseConvolution2dTest(
1917 armnn::IWorkloadFactory & workloadFactory,
1918 const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager);
1919
1920LayerTestResult<uint8_t, 4> PreCompiledDepthwiseConvolution2dStride2x2Test(
1921 armnn::IWorkloadFactory & workloadFactory,
1922 const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager);
1923
1924LayerTestResult<uint8_t, 4> PreCompiledMaxPooling2dTest(
1925 armnn::IWorkloadFactory& workloadFactory,
1926 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1927
1928LayerTestResult<float, 4> Debug4DFloat32Test(
1929 armnn::IWorkloadFactory& workloadFactory,
1930 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1931
1932LayerTestResult<float, 3> Debug3DFloat32Test(
1933 armnn::IWorkloadFactory& workloadFactory,
1934 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1935
1936LayerTestResult<float, 2> Debug2DFloat32Test(
1937 armnn::IWorkloadFactory& workloadFactory,
1938 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1939
1940LayerTestResult<float, 1> Debug1DFloat32Test(
1941 armnn::IWorkloadFactory& workloadFactory,
1942 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1943
1944LayerTestResult<uint8_t, 4> Debug4DUint8Test(
1945 armnn::IWorkloadFactory& workloadFactory,
1946 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1947
1948LayerTestResult<uint8_t, 3> Debug3DUint8Test(
1949 armnn::IWorkloadFactory& workloadFactory,
1950 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1951
1952LayerTestResult<uint8_t, 2> Debug2DUint8Test(
1953 armnn::IWorkloadFactory& workloadFactory,
1954 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1955
1956LayerTestResult<uint8_t, 1> Debug1DUint8Test(
1957 armnn::IWorkloadFactory& workloadFactory,
1958 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
narpra014951d842019-01-18 16:53:53 +00001959
1960LayerTestResult<float, 1> Gather1DParamsFloatTest(
1961 armnn::IWorkloadFactory& workloadFactory,
1962 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1963
1964LayerTestResult<uint8_t, 1> Gather1DParamsUint8Test(
1965 armnn::IWorkloadFactory& workloadFactory,
1966 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1967
Ellen Norris-Thompsone0dbedf2019-06-24 09:23:38 +01001968LayerTestResult<int16_t, 1> Gather1DParamsInt16Test(
1969 armnn::IWorkloadFactory& workloadFactory,
1970 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1971
narpra014951d842019-01-18 16:53:53 +00001972LayerTestResult<float, 2> GatherMultiDimParamsFloatTest(
1973 armnn::IWorkloadFactory& workloadFactory,
1974 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1975
1976LayerTestResult<uint8_t, 2> GatherMultiDimParamsUint8Test(
1977 armnn::IWorkloadFactory& workloadFactory,
1978 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1979
Ellen Norris-Thompsone0dbedf2019-06-24 09:23:38 +01001980LayerTestResult<int16_t, 2> GatherMultiDimParamsInt16Test(
1981 armnn::IWorkloadFactory& workloadFactory,
1982 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1983
narpra014951d842019-01-18 16:53:53 +00001984LayerTestResult<float, 4> GatherMultiDimParamsMultiDimIndicesFloatTest(
1985 armnn::IWorkloadFactory& workloadFactory,
1986 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1987
1988LayerTestResult<uint8_t, 4> GatherMultiDimParamsMultiDimIndicesUint8Test(
1989 armnn::IWorkloadFactory& workloadFactory,
1990 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Nattapat Chaimanowong8a54ac02019-03-29 15:25:04 +00001991
Ellen Norris-Thompsone0dbedf2019-06-24 09:23:38 +01001992LayerTestResult<int16_t, 4> GatherMultiDimParamsMultiDimIndicesInt16Test(
1993 armnn::IWorkloadFactory& workloadFactory,
1994 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1995
Nattapat Chaimanowongafa4e3a2019-04-02 11:41:45 +01001996LayerTestResult<float, 4> DequantizeSimpleUint8Test(
1997 armnn::IWorkloadFactory& workloadFactory,
1998 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1999
2000LayerTestResult<float, 4> DequantizeOffsetUint8Test(
2001 armnn::IWorkloadFactory& workloadFactory,
2002 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
2003
2004LayerTestResult<float, 4> DequantizeSimpleInt16Test(
Nattapat Chaimanowong8a54ac02019-03-29 15:25:04 +00002005 armnn::IWorkloadFactory& workloadFactory,
2006 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Nattapat Chaimanowonga0beb3b2019-04-01 17:04:53 +01002007
Keith Davisa57eccb2019-06-14 17:33:22 +01002008LayerTestResult<uint8_t, 4> SpaceToDepthNCHWAsymmQ8Test(
2009 armnn::IWorkloadFactory& workloadFactory,
2010 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
2011
2012LayerTestResult<uint8_t, 4> SpaceToDepthNHWCAsymmQ8Test(
2013 armnn::IWorkloadFactory& workloadFactory,
2014 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
2015
James Conroyd2aa85e2019-07-01 17:12:40 +01002016LayerTestResult<float, 4> SpaceToDepthNHWCFloat32Test1(
Keith Davisa57eccb2019-06-14 17:33:22 +01002017 armnn::IWorkloadFactory& workloadFactory,
2018 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
2019
James Conroyd2aa85e2019-07-01 17:12:40 +01002020LayerTestResult<float, 4> SpaceToDepthNCHWFloat32Test1(
2021 armnn::IWorkloadFactory& workloadFactory,
2022 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
2023
2024LayerTestResult<float, 4> SpaceToDepthNHWCFloat32Test2(
2025 armnn::IWorkloadFactory& workloadFactory,
2026 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
2027
2028LayerTestResult<float, 4> SpaceToDepthNCHWFloat32Test2(
2029 armnn::IWorkloadFactory& workloadFactory,
2030 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
2031
2032LayerTestResult<int16_t, 4> SpaceToDepthNHWCQSymm16Test(
2033 armnn::IWorkloadFactory& workloadFactory,
2034 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
2035
2036LayerTestResult<int16_t, 4> SpaceToDepthNCHWQSymm16Test(
Keith Davisa57eccb2019-06-14 17:33:22 +01002037 armnn::IWorkloadFactory& workloadFactory,
2038 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
2039
Nattapat Chaimanowonga0beb3b2019-04-01 17:04:53 +01002040LayerTestResult<uint8_t, 4> QuantizeSimpleUint8Test(
2041 armnn::IWorkloadFactory& workloadFactory,
2042 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
2043
2044LayerTestResult<uint8_t, 4> QuantizeClampUint8Test(
2045 armnn::IWorkloadFactory& workloadFactory,
2046 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
2047
2048LayerTestResult<int16_t, 4> QuantizeClampInt16Test(
2049 armnn::IWorkloadFactory& workloadFactory,
2050 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Francis Murtagh46c09d02019-05-28 08:15:28 +01002051
2052template<typename T, typename B>
2053LayerTestResult<T, 2> SimpleFullyConnectedTestImpl(
2054 armnn::IWorkloadFactory& workloadFactory,
2055 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
2056 armnn::TensorInfo inputTensorInfo,
2057 armnn::TensorInfo outputTensorInfo,
2058 armnn::TensorInfo weightsDesc,
2059 armnn::TensorInfo biasesDesc,
2060 boost::multi_array<T, 2>& weights,
2061 boost::multi_array<B, 1>& bias,
2062 boost::multi_array<T, 4>& input,
2063 bool biasEnabled,
2064 bool transposeWeights)
2065{
2066 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2067 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2068
2069 armnn::FullyConnectedQueueDescriptor data;
2070 armnn::WorkloadInfo info;
2071 armnn::ScopedCpuTensorHandle weightsTensor(weightsDesc);
2072 armnn::ScopedCpuTensorHandle biasTensor(biasesDesc);
2073
2074 AllocateAndCopyDataToITensorHandle(&weightsTensor, &weights[0][0]);
2075 AllocateAndCopyDataToITensorHandle(&biasTensor, &bias[0]);
2076
2077 AddInputToWorkload(data, info, inputTensorInfo, inputHandle.get());
2078 AddOutputToWorkload(data, info, outputTensorInfo, outputHandle.get());
2079 data.m_Weight = &weightsTensor;
2080 data.m_Bias = &biasTensor;
2081 data.m_Parameters.m_BiasEnabled = biasEnabled;
2082 data.m_Parameters.m_TransposeWeightMatrix = transposeWeights;
2083
2084 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateFullyConnected(data, info);
2085 LayerTestResult<T, 2> result(outputTensorInfo);
2086
2087 inputHandle->Allocate();
2088 outputHandle->Allocate();
2089 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
2090
2091 ExecuteWorkload(*workload, memoryManager);
2092
2093 CopyDataFromITensorHandle(&result.output[0][0], outputHandle.get());
2094
2095 return result;
2096}
2097
2098template <armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
2099std::vector<T> ConvertToDataType(const std::vector<float>& input,
2100 const armnn::TensorInfo& inputTensorInfo)
2101{
2102 std::vector<T> output(input.size());
2103 auto outputTensorInfo = inputTensorInfo;
2104 outputTensorInfo.SetDataType(ArmnnType);
2105
2106 std::unique_ptr<armnn::Encoder<float>> pOutputEncoder = armnn::MakeEncoder<float>(outputTensorInfo, output.data());
2107 armnn::Encoder<float>& rOutputEncoder = *pOutputEncoder;
2108
2109 for (auto it = input.begin(); it != input.end(); ++it)
2110 {
2111 rOutputEncoder.Set(*it);
2112 ++rOutputEncoder;
2113 }
2114 return output;
2115}
2116
David Monahan34757812019-06-19 11:47:21 +01002117// Utility method to convert a single value to the correct type
2118template <typename T>
2119T ConvertToDataType(const float& value,
2120 const armnn::TensorInfo& tensorInfo)
2121{
2122 std::vector<T> output(1);
2123 std::unique_ptr<armnn::Encoder<float>> pEncoder = armnn::MakeEncoder<float>(tensorInfo, output.data());
2124 armnn::Encoder<float>& rEncoder = *pEncoder;
2125 rEncoder.Set(value);
2126 return output[0];
2127}
2128
nikraj010421e7f2019-06-14 09:40:34 +01002129template<armnn::DataType ArmnnType, typename T>
nikraj0193f84a92019-06-05 10:48:46 +01002130LayerTestResult<T, 2> Rsqrt2dTestCommon(
2131 armnn::IWorkloadFactory& workloadFactory,
2132 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
2133 const armnn::TensorInfo inputTensorInfo,
2134 const armnn::TensorInfo outputTensorInfo,
nikraj010421e7f2019-06-14 09:40:34 +01002135 const std::vector<float>& inputValues,
2136 const std::vector<float>& expectedOutputValues)
nikraj0193f84a92019-06-05 10:48:46 +01002137{
nikraj010421e7f2019-06-14 09:40:34 +01002138 auto inputTensor = MakeTensor<T, 2>(inputTensorInfo, ConvertToDataType<ArmnnType>(inputValues,inputTensorInfo));
nikraj0193f84a92019-06-05 10:48:46 +01002139
2140 LayerTestResult<T, 2> result(outputTensorInfo);
nikraj010421e7f2019-06-14 09:40:34 +01002141
2142 result.outputExpected = MakeTensor<T, 2>(outputTensorInfo,
2143 ConvertToDataType<ArmnnType>(expectedOutputValues,outputTensorInfo));
nikraj0193f84a92019-06-05 10:48:46 +01002144
2145 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2146 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2147
2148 armnn::RsqrtQueueDescriptor descriptor;
2149
2150 armnn::WorkloadInfo info;
2151
2152 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
2153 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
2154
2155 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateRsqrt(descriptor, info);
2156
2157 inputHandle->Allocate();
2158 outputHandle->Allocate();
2159
2160 CopyDataToITensorHandle(inputHandle.get(), &inputTensor[0][0]);
2161
2162 workload->PostAllocationConfigure();
2163 workload->Execute();
2164
2165 CopyDataFromITensorHandle(&result.output[0][0], outputHandle.get());
2166
2167 return result;
2168}
2169
2170template<armnn::DataType ArmnnType, typename T>
2171LayerTestResult<T, 2> Rsqrt2dTest(
2172 armnn::IWorkloadFactory& workloadFactory,
2173 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
2174{
2175 const armnn::TensorShape inputShape{ 2, 2 };
2176 const armnn::TensorShape outputShape{ 2, 2 };
2177
nikraj010421e7f2019-06-14 09:40:34 +01002178 armnn::TensorInfo inputTensorInfo(inputShape, ArmnnType);
2179 inputTensorInfo.SetQuantizationScale(0.1f);
2180 inputTensorInfo.SetQuantizationOffset(0);
nikraj0193f84a92019-06-05 10:48:46 +01002181
nikraj010421e7f2019-06-14 09:40:34 +01002182 armnn::TensorInfo outputTensorInfo(outputShape, ArmnnType);
2183 outputTensorInfo.SetQuantizationScale(0.1f);
2184 outputTensorInfo.SetQuantizationOffset(0);
nikraj0193f84a92019-06-05 10:48:46 +01002185
nikraj010421e7f2019-06-14 09:40:34 +01002186 std::vector<float> inputValues
2187 {
2188 1.f, 4.f,
2189 16.f, 25.f
2190 };
nikraj0193f84a92019-06-05 10:48:46 +01002191
nikraj010421e7f2019-06-14 09:40:34 +01002192 std::vector<float> expectedOutputValues
2193 {
2194 1.f, 0.5f,
2195 0.25f, 0.2f
2196 };
2197
2198 return Rsqrt2dTestCommon<ArmnnType>(workloadFactory, memoryManager,
nikraj0193f84a92019-06-05 10:48:46 +01002199 inputTensorInfo, outputTensorInfo,
2200 inputValues, expectedOutputValues);
2201}
2202
2203template<armnn::DataType ArmnnType, typename T>
2204LayerTestResult<T, 3> Rsqrt3dTest(
2205 armnn::IWorkloadFactory& workloadFactory,
2206 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
2207{
2208 const armnn::TensorShape inputShape{ 3, 1, 2 };
2209 const armnn::TensorShape outputShape{ 3, 1, 2 };
2210
nikraj010421e7f2019-06-14 09:40:34 +01002211 armnn::TensorInfo inputTensorInfo(inputShape, ArmnnType);
2212 inputTensorInfo.SetQuantizationScale(0.1f);
2213 inputTensorInfo.SetQuantizationOffset(0);
nikraj0193f84a92019-06-05 10:48:46 +01002214
nikraj010421e7f2019-06-14 09:40:34 +01002215 armnn::TensorInfo outputTensorInfo(outputShape, ArmnnType);
2216 outputTensorInfo.SetQuantizationScale(0.1f);
2217 outputTensorInfo.SetQuantizationOffset(0);
nikraj0193f84a92019-06-05 10:48:46 +01002218
nikraj010421e7f2019-06-14 09:40:34 +01002219 std::vector<float> inputValues
2220 {
2221 1.f, 4.f, 16.f,
2222 25.f, 64.f, 100.f
2223 };
nikraj0193f84a92019-06-05 10:48:46 +01002224
nikraj010421e7f2019-06-14 09:40:34 +01002225 std::vector<float> expectedOutputValues
2226 {
2227 1.f, 0.5f, 0.25f,
2228 0.2f, 0.125f, 0.1f
2229 };
2230
2231 auto inputTensor = MakeTensor<T, 3>(inputTensorInfo, ConvertToDataType<ArmnnType>(inputValues,inputTensorInfo));
nikraj0193f84a92019-06-05 10:48:46 +01002232
2233 LayerTestResult<T, 3> result(outputTensorInfo);
nikraj010421e7f2019-06-14 09:40:34 +01002234 result.outputExpected = MakeTensor<T, 3>(outputTensorInfo,
2235 ConvertToDataType<ArmnnType>(expectedOutputValues,outputTensorInfo));
nikraj0193f84a92019-06-05 10:48:46 +01002236
2237 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2238 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2239
2240 armnn::RsqrtQueueDescriptor descriptor;
2241
2242 armnn::WorkloadInfo info;
2243
2244 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
2245 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
2246
2247 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateRsqrt(descriptor, info);
2248
2249 inputHandle->Allocate();
2250 outputHandle->Allocate();
2251
2252 CopyDataToITensorHandle(inputHandle.get(), &inputTensor[0][0][0]);
2253
2254 workload->PostAllocationConfigure();
2255 workload->Execute();
2256
2257 CopyDataFromITensorHandle(&result.output[0][0][0], outputHandle.get());
2258
2259 return result;
2260}
2261
2262template<armnn::DataType ArmnnType, typename T>
2263LayerTestResult<T, 2> RsqrtZeroTest(
2264 armnn::IWorkloadFactory& workloadFactory,
2265 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
2266{
2267 const armnn::TensorShape inputShape{ 1, 2 };
2268 const armnn::TensorShape outputShape{ 1, 2 };
2269
nikraj010421e7f2019-06-14 09:40:34 +01002270 armnn::TensorInfo inputTensorInfo(inputShape, ArmnnType);
2271 inputTensorInfo.SetQuantizationScale(0.1f);
nikraj0193f84a92019-06-05 10:48:46 +01002272
nikraj010421e7f2019-06-14 09:40:34 +01002273 armnn::TensorInfo outputTensorInfo(outputShape, ArmnnType);
2274 outputTensorInfo.SetQuantizationScale(0.1f);
nikraj0193f84a92019-06-05 10:48:46 +01002275
nikraj010421e7f2019-06-14 09:40:34 +01002276 std::vector<float> inputValues
2277 {
2278 0.f, -0.f
2279 };
nikraj0193f84a92019-06-05 10:48:46 +01002280
nikraj010421e7f2019-06-14 09:40:34 +01002281 std::vector<float> expectedOutputValues
2282 {
2283 INFINITY, -INFINITY
2284 };
2285
2286 return Rsqrt2dTestCommon<ArmnnType>(workloadFactory, memoryManager,
nikraj0193f84a92019-06-05 10:48:46 +01002287 inputTensorInfo, outputTensorInfo,
2288 inputValues, expectedOutputValues);
2289}
2290
2291template<armnn::DataType ArmnnType, typename T>
2292LayerTestResult<T, 2> RsqrtNegativeTest(
2293 armnn::IWorkloadFactory& workloadFactory,
2294 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
2295{
2296 const armnn::TensorShape inputShape{ 1, 2 };
2297 const armnn::TensorShape outputShape{ 1, 2 };
2298
nikraj010421e7f2019-06-14 09:40:34 +01002299 armnn::TensorInfo inputTensorInfo(inputShape, ArmnnType);
2300 inputTensorInfo.SetQuantizationScale(0.1f);
2301 inputTensorInfo.SetQuantizationOffset(0);
nikraj0193f84a92019-06-05 10:48:46 +01002302
nikraj010421e7f2019-06-14 09:40:34 +01002303 armnn::TensorInfo outputTensorInfo(outputShape, ArmnnType);
2304 outputTensorInfo.SetQuantizationScale(0.1f);
2305 outputTensorInfo.SetQuantizationOffset(0);
nikraj0193f84a92019-06-05 10:48:46 +01002306
nikraj010421e7f2019-06-14 09:40:34 +01002307 std::vector<float> inputValues
2308 {
2309 -25.f, -16.f
2310 };
nikraj0193f84a92019-06-05 10:48:46 +01002311
nikraj010421e7f2019-06-14 09:40:34 +01002312 std::vector<float> expectedOutputValues
2313 {
2314 -NAN, -NAN
2315 };
2316
2317 return Rsqrt2dTestCommon<ArmnnType>(workloadFactory, memoryManager,
nikraj0193f84a92019-06-05 10:48:46 +01002318 inputTensorInfo, outputTensorInfo,
2319 inputValues, expectedOutputValues);
2320}
2321
2322template<typename T>
Nina Drozd8ed4b8c2019-05-29 10:41:04 +01002323LayerTestResult<T, 4> SimpleReshapeTestImpl(
2324 armnn::IWorkloadFactory& workloadFactory,
2325 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
2326 armnn::TensorInfo inputTensorInfo,
2327 armnn::TensorInfo outputTensorInfo,
2328 const std::vector<T>& inputData,
2329 const std::vector<T>& outputExpectedData)
2330{
2331 auto input = MakeTensor<T, 4>(inputTensorInfo, inputData);
2332
2333 LayerTestResult<T, 4> ret(outputTensorInfo);
2334 ret.outputExpected = MakeTensor<T, 4>(outputTensorInfo, outputExpectedData);
2335
2336 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2337 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2338
2339 armnn::ReshapeQueueDescriptor data;
2340 armnn::WorkloadInfo info;
2341 AddInputToWorkload(data, info, inputTensorInfo, inputHandle.get());
2342 AddOutputToWorkload(data, info, outputTensorInfo, outputHandle.get());
2343
2344 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateReshape(data, info);
2345
2346 inputHandle->Allocate();
2347 outputHandle->Allocate();
2348
2349 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
2350
2351 workload->Execute();
2352
2353 CopyDataFromITensorHandle(&ret.output[0][0][0][0], outputHandle.get());
2354
2355 return ret;
2356}
2357
Francis Murtagh46c09d02019-05-28 08:15:28 +01002358template<armnn::DataType ArmnnType, typename T>
2359LayerTestResult<T, 2> FullyConnectedTest(
2360 armnn::IWorkloadFactory& workloadFactory,
2361 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
2362 bool biasEnabled)
2363{
2364 constexpr static unsigned int inputWidth = 3u;
2365 constexpr static unsigned int inputHeight = 2u;
2366 constexpr static unsigned int inputChannels = 1u;
2367
2368 constexpr static unsigned int inputSize = inputWidth * inputHeight * inputChannels;
2369
2370 constexpr static unsigned int outputChannels = 2u;
2371
2372 armnn::TensorInfo inputTensorInfo({ 1, inputChannels, inputHeight, inputWidth }, ArmnnType);
2373 inputTensorInfo.SetQuantizationScale(0.1f);
2374 inputTensorInfo.SetQuantizationOffset(63);
2375
2376 armnn::TensorInfo outputTensorInfo({ 1, outputChannels }, ArmnnType);
2377 outputTensorInfo.SetQuantizationScale(5.f);
2378 outputTensorInfo.SetQuantizationOffset(biasEnabled ? -50 : 10);
2379
2380 armnn::TensorInfo weightsDesc({ outputChannels, inputSize }, ArmnnType);
2381 weightsDesc.SetQuantizationScale(0.2f);
2382 weightsDesc.SetQuantizationOffset(93);
2383
2384 armnn::TensorInfo biasesDesc({ outputChannels }, GetBiasTypeFromWeightsType(weightsDesc.GetDataType()).value());
2385 biasesDesc.SetQuantizationScale(inputTensorInfo.GetQuantizationScale() * weightsDesc.GetQuantizationScale());
2386 biasesDesc.SetQuantizationOffset(0);
2387
2388 LayerTestResult<T, 2> result(outputTensorInfo);
2389
2390 auto input = MakeTensor<T, 4>(inputTensorInfo, ConvertToDataType<ArmnnType>(
2391 {
2392 -1.2f, 6.1f, -3.5f,
2393 18.8f, -5.5f, 2.9f
2394 },
2395 inputTensorInfo));
2396
2397 auto weights = MakeTensor<T, 2>(weightsDesc, ConvertToDataType<ArmnnType>(
2398 {
2399 -8.4f, 20.0f, -10.4f, -8, 16.4f, -11.8f,
2400 23.4f, 10.4f, -14.0f, -3.8f, -11.8f, 11.4f
2401 },
2402 weightsDesc));
2403
2404 auto bias = MakeTensor<int32_t, 1>(biasesDesc, std::vector<int32_t>{9250, 67500});
2405
2406 result = SimpleFullyConnectedTestImpl<T>(
2407 workloadFactory,
2408 memoryManager,
2409 inputTensorInfo, outputTensorInfo,
2410 weightsDesc, biasesDesc,
2411 weights, bias, input,
2412 biasEnabled, true
2413 );
2414
2415 if (biasEnabled)
2416 {
2417 result.outputExpected = MakeTensor<T, 2>(outputTensorInfo,
2418 ConvertToDataType<ArmnnType>({80.f, 1460.f}, outputTensorInfo));
2419 }
2420 else
2421 {
2422 result.outputExpected = MakeTensor<T, 2>(outputTensorInfo,
2423 ConvertToDataType<ArmnnType>({-107.04f, 110.f}, outputTensorInfo));
2424 }
2425
2426 return result;
Nina Drozd8ed4b8c2019-05-29 10:41:04 +01002427}
2428
Nina Drozd8ed4b8c2019-05-29 10:41:04 +01002429template<armnn::DataType ArmnnType, typename T>
2430LayerTestResult<T, 4> SimpleReshapeTest(
2431 armnn::IWorkloadFactory& workloadFactory,
2432 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
2433{
2434 armnn::TensorInfo inputTensorInfo;
2435 armnn::TensorInfo outputTensorInfo;
2436
2437 unsigned int inputShape[] = { 2, 2, 3, 3 };
2438 unsigned int outputShape[] = { 2, 2, 9, 1 };
2439
2440 inputTensorInfo = armnn::TensorInfo(4, inputShape, ArmnnType);
2441 inputTensorInfo.SetQuantizationScale(1.0f);
2442 outputTensorInfo = armnn::TensorInfo(4, outputShape, ArmnnType);
2443 outputTensorInfo.SetQuantizationScale(1.0f);
2444
2445 auto input = ConvertToDataType<ArmnnType>(
2446 {
2447 0.0f, 1.0f, 2.0f,
2448 3.0f, 4.0f, 5.0f,
2449 6.0f, 7.0f, 8.0f,
2450
2451 9.0f, 10.0f, 11.0f,
2452 12.0f, 13.0f, 14.0f,
2453 15.0f, 16.0f, 17.0f,
2454
2455 18.0f, 19.0f, 20.0f,
2456 21.0f, 22.0f, 23.0f,
2457 24.0f, 25.0f, 26.0f,
2458
2459 27.0f, 28.0f, 29.0f,
2460 30.0f, 31.0f, 32.0f,
2461 33.0f, 34.0f, 35.0f,
2462 },
2463 inputTensorInfo);
2464
2465 auto outputExpected = ConvertToDataType<ArmnnType>(
2466 {
2467 0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f,
2468
2469 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f, 16.0f, 17.0f,
2470
2471 18.0f, 19.0f, 20.0f, 21.0f, 22.0f, 23.0f, 24.0f, 25.0f, 26.0f,
2472
2473 27.0f, 28.0f, 29.0f, 30.0f, 31.0f, 32.0f, 33.0f, 34.0f, 35.0f,
2474 },
2475 outputTensorInfo);
2476
2477 return SimpleReshapeTestImpl<T>(
2478 workloadFactory, memoryManager, inputTensorInfo, outputTensorInfo, input, outputExpected);
Matteo Martincigh42666a12019-05-29 08:53:41 +01002479}
James Conroy83735b12019-05-30 16:36:59 +01002480
2481template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
2482LayerTestResult<T, 4> SimpleFloorTest(
2483 armnn::IWorkloadFactory& workloadFactory,
2484 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
2485{
James Conroyb40d7102019-06-04 12:32:09 +01002486 armnn::TensorInfo inputTensorInfo({1, 3, 2, 3}, ArmnnType);
2487 inputTensorInfo.SetQuantizationScale(0.1f);
2488
2489 armnn::TensorInfo outputTensorInfo(inputTensorInfo);
2490 outputTensorInfo.SetQuantizationScale(0.1f);
James Conroy83735b12019-05-30 16:36:59 +01002491
2492 auto input = MakeTensor<T, 4>(inputTensorInfo, ConvertToDataType<ArmnnType>(
2493 { -37.5f, -15.2f, -8.76f, -2.0f, -1.5f, -1.3f, -0.5f, -0.4f, 0.0f,
2494 1.0f, 0.4f, 0.5f, 1.3f, 1.5f, 2.0f, 8.76f, 15.2f, 37.5f },
2495 inputTensorInfo));
2496
2497 LayerTestResult<T, 4> ret(outputTensorInfo);
2498 ret.outputExpected = MakeTensor<T, 4>(outputTensorInfo, ConvertToDataType<ArmnnType>(
2499 { -38.0f, -16.0f, -9.0f, -2.0f, -2.0f, -2.0f, -1.0f, -1.0f, 0.0f,
2500 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 2.0f, 8.0f, 15.0f, 37.0f },
2501 outputTensorInfo));
2502
2503 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2504 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2505
2506 armnn::FloorQueueDescriptor data;
2507 armnn::WorkloadInfo info;
2508 AddInputToWorkload(data, info, inputTensorInfo, inputHandle.get());
2509 AddOutputToWorkload(data, info, outputTensorInfo, outputHandle.get());
2510
2511 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateFloor(data, info);
2512
2513 inputHandle->Allocate();
2514 outputHandle->Allocate();
2515
2516 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
2517
2518 workload->Execute();
2519
2520 CopyDataFromITensorHandle(&ret.output[0][0][0][0], outputHandle.get());
2521
2522 return ret;
Matteo Martincighf5507132019-06-04 10:59:47 +01002523}
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002524
2525
2526template<armnn::DataType ArmnnType, typename T>
2527LayerTestResult<T, 4> ResizeBilinearNopTest(
2528 armnn::IWorkloadFactory& workloadFactory,
2529 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
2530 const armnn::DataLayout dataLayout)
2531{
2532 armnn::TensorInfo inputTensorInfo = armnn::IsQuantizedType<T>()
2533 ? armnnUtils::GetTensorInfo(1, 1, 4, 4, dataLayout, ArmnnType)
2534 : armnnUtils::GetTensorInfo(1, 2, 4, 4, dataLayout, ArmnnType);
2535 armnn::TensorInfo outputTensorInfo = armnn::IsQuantizedType<T>()
2536 ? armnnUtils::GetTensorInfo(1, 1, 4, 4, dataLayout, ArmnnType)
2537 : armnnUtils::GetTensorInfo(1, 2, 4, 4, dataLayout, ArmnnType);
2538 if (armnn::IsQuantizedType<T>())
2539 {
2540 inputTensorInfo.SetQuantizationScale(1.5f);
2541 inputTensorInfo.SetQuantizationOffset(-3);
2542 outputTensorInfo.SetQuantizationScale(1.5f);
2543 outputTensorInfo.SetQuantizationOffset(-3);
2544 }
2545
2546 std::vector<float> inputData = armnn::IsQuantizedType<T>()
2547 ? std::initializer_list<float>
2548 {
2549 1, 2, 3, 4,
2550 2, 3, 4, 5,
2551 3, 4, 5, 6,
2552 4, 5, 6, 7
2553 }
2554 : std::initializer_list<float>
2555 {
2556 1.0f, 2.0f, 3.0f, 4.0f,
2557 2.0f, 3.0f, 4.0f, 5.0f,
2558 3.0f, 4.0f, 5.0f, 6.0f,
2559 4.0f, 5.0f, 6.0f, 7.0f,
2560
2561 1.0f, 2.0f, 3.0f, 4.0f,
2562 2.0f, 3.0f, 4.0f, 5.0f,
2563 3.0f, 4.0f, 5.0f, 6.0f,
2564 4.0f, 5.0f, 6.0f, 7.0f
2565 };
2566
2567 const armnn::PermutationVector NCHWToNHWC = { 0, 3, 1, 2 };
2568 if (dataLayout == armnn::DataLayout::NHWC)
2569 {
2570 std::vector<float> tmp(inputData.size());
2571 armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(float));
2572 inputData = tmp;
2573 }
2574
2575 auto input = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(),
2576 inputTensorInfo.GetQuantizationOffset(),
2577 inputData));
2578
2579 LayerTestResult<T, 4> result(outputTensorInfo);
2580 result.outputExpected = input;
2581
2582 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2583 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2584
Aron Virginas-Tar169d2f12019-07-01 19:01:44 +01002585 armnn::ResizeQueueDescriptor descriptor;
2586 descriptor.m_Parameters.m_Method = armnn::ResizeMethod::Bilinear;
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002587 descriptor.m_Parameters.m_DataLayout = dataLayout;
Aron Virginas-Tar169d2f12019-07-01 19:01:44 +01002588
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002589 armnn::WorkloadInfo info;
2590 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
2591 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
2592
Aron Virginas-Tar169d2f12019-07-01 19:01:44 +01002593 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateResize(descriptor, info);
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002594
2595 inputHandle->Allocate();
2596 outputHandle->Allocate();
2597 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
2598
2599 workload->PostAllocationConfigure();
2600 workload->Execute();
2601
2602 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
2603 return result;
2604}
2605
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002606template<armnn::DataType ArmnnType, typename T>
2607LayerTestResult<T, 4> SimpleResizeBilinearTest(
2608 armnn::IWorkloadFactory& workloadFactory,
2609 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
2610 const armnn::DataLayout dataLayout)
2611{
2612 armnn::TensorInfo inputTensorInfo = armnn::IsQuantizedType<T>()
2613 ? armnnUtils::GetTensorInfo(1, 1, 2, 2, dataLayout, ArmnnType)
2614 : armnnUtils::GetTensorInfo(1, 2, 2, 2, dataLayout, ArmnnType);
2615 armnn::TensorInfo outputTensorInfo = armnn::IsQuantizedType<T>()
2616 ? armnnUtils::GetTensorInfo(1, 1, 1, 1, dataLayout, ArmnnType)
2617 : armnnUtils::GetTensorInfo(1, 2, 1, 1, dataLayout, ArmnnType);
2618
2619 if (armnn::IsQuantizedType<T>())
2620 {
2621 inputTensorInfo.SetQuantizationScale(0.1567f);
2622 inputTensorInfo.SetQuantizationOffset(1);
2623 outputTensorInfo.SetQuantizationScale(0.1567f);
2624 outputTensorInfo.SetQuantizationOffset(1);
2625 }
2626
2627 std::vector<float> inputData = armnn::IsQuantizedType<T>()
2628 ? std::initializer_list<float>
2629 {
2630 1, 255,
2631 200, 250
2632 }
2633 : std::initializer_list<float>
2634 {
2635 1.0f, 255.0f,
2636 200.0f, 250.0f,
2637
2638 250.0f, 200.0f,
2639 250.0f, 1.0f
2640 };
2641
2642 // The 'resize bilinear' operation projects the top-left corner of output texels into the input image,
2643 // then figures out the interpolants and weights. Note this is different to projecting the centre of the
2644 // output texel. Thus, for a input matrix of 2x2, we'll expect the output 1x1 matrix to contain, as
2645 // its single element, the value that was at position (0,0) of the input matrix (rather than an average,
2646 // which we would expect if projecting the centre).
2647
2648 std::vector<float> outputData = armnn::IsQuantizedType<T>()
2649 ? std::initializer_list<float>
2650 {
2651 1
2652 }
2653 : std::initializer_list<float>
2654 {
2655 1.0f,
2656
2657 250.0f
2658 };
2659
2660 const armnn::PermutationVector NCHWToNHWC = { 0, 3, 1, 2 };
2661 if (dataLayout == armnn::DataLayout::NHWC)
2662 {
2663 std::vector<float> tmp(inputData.size());
2664 armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(float));
2665 inputData = tmp;
2666
2667 std::vector<float> tmp1(outputData.size());
2668 armnnUtils::Permute(outputTensorInfo.GetShape(), NCHWToNHWC, outputData.data(), tmp1.data(), sizeof(float));
2669 outputData = tmp1;
2670 }
2671
2672 auto input = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(),
2673 inputTensorInfo.GetQuantizationOffset(),
2674 inputData));
2675
2676 LayerTestResult<T, 4> result(outputTensorInfo);
2677 result.outputExpected = MakeTensor<T, 4>(outputTensorInfo,
2678 QuantizedVector<T>(outputTensorInfo.GetQuantizationScale(),
2679 outputTensorInfo.GetQuantizationOffset(),
2680 outputData));
2681
2682 std::unique_ptr <armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2683 std::unique_ptr <armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2684
Aron Virginas-Tar169d2f12019-07-01 19:01:44 +01002685 armnn::ResizeQueueDescriptor descriptor;
2686 descriptor.m_Parameters.m_Method = armnn::ResizeMethod::Bilinear;
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002687 descriptor.m_Parameters.m_DataLayout = dataLayout;
Aron Virginas-Tar169d2f12019-07-01 19:01:44 +01002688
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002689 armnn::WorkloadInfo info;
2690 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
2691 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
2692
Aron Virginas-Tar169d2f12019-07-01 19:01:44 +01002693 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateResize(descriptor, info);
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002694
2695 inputHandle->Allocate();
2696 outputHandle->Allocate();
2697 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
2698
2699 workload->PostAllocationConfigure();
2700 workload->Execute();
2701
2702 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
2703 return result;
2704}
2705
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002706template<armnn::DataType ArmnnType, typename T>
2707LayerTestResult<T, 4> ResizeBilinearSqMinTest(
2708 armnn::IWorkloadFactory& workloadFactory,
2709 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
2710 const armnn::DataLayout dataLayout)
2711{
2712 armnn::TensorInfo inputTensorInfo = armnn::IsQuantizedType<T>()
2713 ? armnnUtils::GetTensorInfo(1, 1, 4, 4, dataLayout, ArmnnType)
2714 : armnnUtils::GetTensorInfo(1, 2, 4, 4, dataLayout, ArmnnType);
2715 armnn::TensorInfo outputTensorInfo = armnn::IsQuantizedType<T>()
2716 ? armnnUtils::GetTensorInfo(1, 1, 2, 2, dataLayout, ArmnnType)
2717 : armnnUtils::GetTensorInfo(1, 2, 2, 2, dataLayout, ArmnnType);
2718
2719 if (armnn::IsQuantizedType<T>())
2720 {
2721 inputTensorInfo.SetQuantizationScale(3.141592f);
2722 inputTensorInfo.SetQuantizationOffset(3);
2723 outputTensorInfo.SetQuantizationScale(3.141592f);
2724 outputTensorInfo.SetQuantizationOffset(3);
2725 }
2726
2727 std::vector<float> inputData = armnn::IsQuantizedType<T>()
2728 ? std::initializer_list<float>
2729 {
2730 1, 2, 3, 4,
2731 2, 3, 4, 5,
2732 3, 4, 5, 6,
2733 4, 5, 6, 7
2734 }
2735 : std::initializer_list<float>
2736 {
2737 1.0f, 2.0f, 3.0f, 4.0f,
2738 2.0f, 3.0f, 4.0f, 5.0f,
2739 3.0f, 4.0f, 5.0f, 6.0f,
2740 4.0f, 5.0f, 6.0f, 7.0f,
2741
2742 7.0f, 6.0f, 5.0f, 4.0f,
2743 6.0f, 5.0f, 4.0f, 3.0f,
2744 5.0f, 4.0f, 3.0f, 2.0f,
2745 4.0f, 3.0f, 2.0f, 1.0f
2746 };
2747
2748 std::vector<float> outputData = armnn::IsQuantizedType<T>()
2749 ? std::initializer_list<float>
2750 {
2751 1, 3,
2752 3, 5
2753 }
2754 : std::initializer_list<float>
2755 {
2756 1.0f, 3.0f,
2757 3.0f, 5.0f,
2758
2759 7.0f, 5.0f,
2760 5.0f, 3.0f
2761 };
2762
2763 const armnn::PermutationVector NCHWToNHWC = { 0, 3, 1, 2 };
2764 if (dataLayout == armnn::DataLayout::NHWC)
2765 {
2766 std::vector<float> tmp(inputData.size());
2767 armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(float));
2768 inputData = tmp;
2769
2770 std::vector<float> tmp1(outputData.size());
2771 armnnUtils::Permute(outputTensorInfo.GetShape(), NCHWToNHWC, outputData.data(), tmp1.data(), sizeof(float));
2772 outputData = tmp1;
2773 }
2774
2775 auto input = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(),
2776 inputTensorInfo.GetQuantizationOffset(),
2777 inputData));
2778
2779 LayerTestResult<T, 4> result(outputTensorInfo);
2780 result.outputExpected = MakeTensor<T, 4>(outputTensorInfo,
2781 QuantizedVector<T>(outputTensorInfo.GetQuantizationScale(),
2782 outputTensorInfo.GetQuantizationOffset(),
2783 outputData));
2784
2785 std::unique_ptr <armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2786 std::unique_ptr <armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2787
Aron Virginas-Tar169d2f12019-07-01 19:01:44 +01002788 armnn::ResizeQueueDescriptor descriptor;
2789 descriptor.m_Parameters.m_Method = armnn::ResizeMethod::Bilinear;
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002790 descriptor.m_Parameters.m_DataLayout = dataLayout;
Aron Virginas-Tar169d2f12019-07-01 19:01:44 +01002791
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002792 armnn::WorkloadInfo info;
2793 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
2794 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
2795
Aron Virginas-Tar169d2f12019-07-01 19:01:44 +01002796 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateResize(descriptor, info);
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002797
2798 inputHandle->Allocate();
2799 outputHandle->Allocate();
2800 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
2801
2802 workload->PostAllocationConfigure();
2803 workload->Execute();
2804
2805 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
2806 return result;
2807}
2808
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002809template<armnn::DataType ArmnnType, typename T>
2810LayerTestResult<T, 4> ResizeBilinearMinTest(
2811 armnn::IWorkloadFactory& workloadFactory,
2812 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
2813 const armnn::DataLayout dataLayout)
2814{
2815 armnn::TensorInfo inputTensorInfo = armnn::IsQuantizedType<T>()
2816 ? armnnUtils::GetTensorInfo(1, 1, 2, 3, dataLayout, ArmnnType)
2817 : armnnUtils::GetTensorInfo(1, 2, 3, 5, dataLayout, ArmnnType);
2818 armnn::TensorInfo outputTensorInfo = armnn::IsQuantizedType<T>()
2819 ? armnnUtils::GetTensorInfo(1, 1, 1, 2, dataLayout, ArmnnType)
2820 : armnnUtils::GetTensorInfo(1, 2, 2, 3, dataLayout, ArmnnType);
2821
2822 if (armnn::IsQuantizedType<T>())
2823 {
2824 inputTensorInfo.SetQuantizationScale(1.5f);
2825 inputTensorInfo.SetQuantizationOffset(-1);
2826 outputTensorInfo.SetQuantizationScale(1.5f);
2827 outputTensorInfo.SetQuantizationOffset(-1);
2828 }
2829
2830 std::vector<float> inputData = armnn::IsQuantizedType<T>()
2831 ? std::initializer_list<float>
2832 {
2833 3.0f, 4.5f, 6.0f, // 1, 2, 3, : Expected quantised values
2834 9.0f, 13.5f, 21.0f // 5, 8, 13
2835 }
2836 : std::initializer_list<float>
2837 {
2838 1.0f, 2.0f, 3.0f, 5.0f, 8.0f,
2839 13.0f, 21.0f, 34.0f, 55.0f, 89.0f,
2840 144.0f, 233.0f, 377.0f, 610.0f, 987.0f,
2841
2842 987.0f, 610.0f, 377.0f, 233.0f, 144.0f,
2843 89.0f, 55.0f, 34.0f, 21.0f, 13.0f,
2844 8.0f, 5.0f, 3.0f, 2.0f, 1.0f
2845 };
2846
2847 std::vector<float> outputData = armnn::IsQuantizedType<T>()
2848 ? std::initializer_list<float>
2849 {
2850 3.0f, 5.25f // 1, 3
2851 }
2852 : std::initializer_list<float>
2853 {
2854 1.0f, 2.6666f, 6.00f,
2855 78.5f, 179.3333f, 401.00f,
2856
2857 987.0f, 454.6670f, 203.33f,
2858 48.5f, 22.3333f, 10.00f
2859 };
2860
2861 const armnn::PermutationVector NCHWToNHWC = { 0, 3, 1, 2 };
2862 if (dataLayout == armnn::DataLayout::NHWC)
2863 {
2864 std::vector<float> tmp(inputData.size());
2865 armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(float));
2866 inputData = tmp;
2867
2868 std::vector<float> tmp1(outputData.size());
2869 armnnUtils::Permute(outputTensorInfo.GetShape(), NCHWToNHWC, outputData.data(), tmp1.data(), sizeof(float));
2870 outputData = tmp1;
2871 }
2872
2873 auto input = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(),
2874 inputTensorInfo.GetQuantizationOffset(),
2875 inputData));
2876
2877 LayerTestResult<T, 4> result(outputTensorInfo);
2878 result.outputExpected = MakeTensor<T, 4>(outputTensorInfo,
2879 QuantizedVector<T>(outputTensorInfo.GetQuantizationScale(),
2880 outputTensorInfo.GetQuantizationOffset(),
2881 outputData));
2882
2883 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2884 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2885
Aron Virginas-Tar169d2f12019-07-01 19:01:44 +01002886 armnn::ResizeQueueDescriptor descriptor;
2887 descriptor.m_Parameters.m_Method = armnn::ResizeMethod::Bilinear;
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002888 descriptor.m_Parameters.m_DataLayout = dataLayout;
Aron Virginas-Tar169d2f12019-07-01 19:01:44 +01002889
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002890 armnn::WorkloadInfo info;
2891 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
2892 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
2893
Aron Virginas-Tar169d2f12019-07-01 19:01:44 +01002894 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateResize(descriptor, info);
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002895
2896 inputHandle->Allocate();
2897 outputHandle->Allocate();
2898 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
2899
2900 workload->PostAllocationConfigure();
2901 workload->Execute();
2902
2903 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
2904 return result;
2905}
2906
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002907template<armnn::DataType ArmnnType, typename T>
2908LayerTestResult<T, 4> ResizeBilinearMagTest(
2909 armnn::IWorkloadFactory& workloadFactory,
2910 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
2911 const armnn::DataLayout dataLayout)
2912{
2913 armnn::TensorInfo inputTensorInfo = armnn::IsQuantizedType<T>()
2914 ? armnnUtils::GetTensorInfo(1, 1, 3, 2, dataLayout, ArmnnType)
2915 : armnnUtils::GetTensorInfo(1, 2, 3, 2, dataLayout, ArmnnType);
2916 armnn::TensorInfo outputTensorInfo = armnn::IsQuantizedType<T>()
2917 ? armnnUtils::GetTensorInfo(1, 1, 3, 5, dataLayout, ArmnnType)
2918 : armnnUtils::GetTensorInfo(1, 2, 3, 5, dataLayout, ArmnnType);
2919
2920 if (armnn::IsQuantizedType<T>())
2921 {
2922 inputTensorInfo.SetQuantizationScale(0.010765f);
2923 inputTensorInfo.SetQuantizationOffset(7);
2924 outputTensorInfo.SetQuantizationScale(0.010132f);
2925 outputTensorInfo.SetQuantizationOffset(-18);
2926 }
2927
2928 std::vector<float> inputData = armnn::IsQuantizedType<T>()
2929 ? std::initializer_list<float>
2930 {
2931 0.183005f, 2.379065f, // 24, 228, : Expected quantised values
2932 1.05497f, 1.302565f, // 105, 128,
2933 2.400595f, 0.68896f // 230, 71
2934 }
2935 : std::initializer_list<float>
2936 {
2937 1.0f, 2.0f,
2938 13.0f, 21.0f,
2939 144.0f, 233.0f,
2940
2941 233.0f, 144.0f,
2942 21.0f, 13.0f,
2943 2.0f, 1.0f
2944 };
2945 std::vector<float> outputData = armnn::IsQuantizedType<T>()
2946 ? std::initializer_list<float>
2947 {
2948 0.18300501f, 1.06142902f, 1.93985295f, 2.37906504f, 2.37906504f,
2949 1.05497003f, 1.15400803f, 1.25304604f, 1.30256498f, 1.30256498f,
2950 2.40059495f, 1.71594095f, 1.03128707f, 0.68896002f, 0.68896002f
2951 // 0, 87, 173, 217, 217, : Expected quantised values
2952 // 86, 96, 106, 111, 111,
2953 // 219, 151, 84, 50, 50
2954 }
2955 : std::initializer_list<float>
2956 {
2957 1.0f, 1.4f, 1.8f, 2.0f, 2.0f,
2958 13.0f, 16.2f, 19.4f, 21.0f, 21.0f,
2959 144.0f, 179.6f, 215.2f, 233.0f, 233.0f,
2960
2961 233.0f, 197.4f, 161.8f, 144.0f, 144.0f,
2962 21.0f, 17.8f, 14.6f, 13.0f, 13.0f,
2963 2.0f, 1.6f, 1.2f, 1.0f, 1.0f
2964 };
2965
2966 const armnn::PermutationVector NCHWToNHWC = { 0, 3, 1, 2 };
2967 if (dataLayout == armnn::DataLayout::NHWC)
2968 {
2969 std::vector<float> tmp(inputData.size());
2970 armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(float));
2971 inputData = tmp;
2972
2973 std::vector<float> tmp1(outputData.size());
2974 armnnUtils::Permute(outputTensorInfo.GetShape(), NCHWToNHWC, outputData.data(), tmp1.data(), sizeof(float));
2975 outputData = tmp1;
2976 }
2977
2978 auto input = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(),
2979 inputTensorInfo.GetQuantizationOffset(),
2980 inputData));
2981
2982 LayerTestResult<T, 4> result(outputTensorInfo);
2983 result.outputExpected = MakeTensor<T, 4>(outputTensorInfo,
2984 QuantizedVector<T>(outputTensorInfo.GetQuantizationScale(),
2985 outputTensorInfo.GetQuantizationOffset(),
2986 outputData));
2987
2988 std::unique_ptr <armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
2989 std::unique_ptr <armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
2990
Aron Virginas-Tar169d2f12019-07-01 19:01:44 +01002991 armnn::ResizeQueueDescriptor descriptor;
2992 descriptor.m_Parameters.m_Method = armnn::ResizeMethod::Bilinear;
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002993 descriptor.m_Parameters.m_DataLayout = dataLayout;
Aron Virginas-Tar169d2f12019-07-01 19:01:44 +01002994
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01002995 armnn::WorkloadInfo info;
2996 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
2997 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
2998
Aron Virginas-Tar169d2f12019-07-01 19:01:44 +01002999 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateResize(descriptor, info);
Ellen Norris-Thompsonc4223d12019-06-10 14:15:12 +01003000
3001 inputHandle->Allocate();
3002 outputHandle->Allocate();
3003 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
3004
3005 workload->PostAllocationConfigure();
3006 workload->Execute();
3007
3008 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
3009 return result;
3010}
3011
Teresa Charlin970f43b2019-07-01 13:51:07 +01003012
3013template<armnn::DataType ArmnnType, typename T>
3014LayerTestResult<T, 4> ResizeNearestNeighborNopTest(
3015 armnn::IWorkloadFactory& workloadFactory,
3016 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
3017 const armnn::DataLayout dataLayout)
3018{
3019 armnn::TensorInfo inputTensorInfo = armnn::IsQuantizedType<T>()
3020 ? armnnUtils::GetTensorInfo(1, 1, 4, 4, dataLayout, ArmnnType)
3021 : armnnUtils::GetTensorInfo(1, 2, 4, 4, dataLayout, ArmnnType);
3022 armnn::TensorInfo outputTensorInfo = armnn::IsQuantizedType<T>()
3023 ? armnnUtils::GetTensorInfo(1, 1, 4, 4, dataLayout, ArmnnType)
3024 : armnnUtils::GetTensorInfo(1, 2, 4, 4, dataLayout, ArmnnType);
3025 if (armnn::IsQuantizedType<T>())
3026 {
3027 inputTensorInfo.SetQuantizationScale(1.5f);
3028 inputTensorInfo.SetQuantizationOffset(-3);
3029 outputTensorInfo.SetQuantizationScale(1.5f);
3030 outputTensorInfo.SetQuantizationOffset(-3);
3031 }
3032
3033 std::vector<float> inputData = armnn::IsQuantizedType<T>()
3034 ? std::initializer_list<float>
3035 {
3036 1, 2, 3, 4,
3037 2, 3, 4, 5,
3038 3, 4, 5, 6,
3039 4, 5, 6, 7
3040 }
3041 : std::initializer_list<float>
3042 {
3043 1.0f, 2.0f, 3.0f, 4.0f,
3044 2.0f, 3.0f, 4.0f, 5.0f,
3045 3.0f, 4.0f, 5.0f, 6.0f,
3046 4.0f, 5.0f, 6.0f, 7.0f,
3047
3048 1.0f, 2.0f, 3.0f, 4.0f,
3049 2.0f, 3.0f, 4.0f, 5.0f,
3050 3.0f, 4.0f, 5.0f, 6.0f,
3051 4.0f, 5.0f, 6.0f, 7.0f
3052 };
3053
3054 const armnn::PermutationVector NCHWToNHWC = { 0, 3, 1, 2 };
3055 if (dataLayout == armnn::DataLayout::NHWC)
3056 {
3057 std::vector<float> tmp(inputData.size());
3058 armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(float));
3059 inputData = tmp;
3060 }
3061
3062 auto input = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(),
3063 inputTensorInfo.GetQuantizationOffset(),
3064 inputData));
3065
3066 LayerTestResult<T, 4> result(outputTensorInfo);
3067 result.outputExpected = input;
3068
3069 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
3070 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
3071
3072 armnn::ResizeQueueDescriptor descriptor;
3073 descriptor.m_Parameters.m_Method = armnn::ResizeMethod::NearestNeighbor;
3074 descriptor.m_Parameters.m_DataLayout = dataLayout;
3075 armnn::WorkloadInfo info;
3076 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
3077 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
3078
3079 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateResize(descriptor, info);
3080
3081 inputHandle->Allocate();
3082 outputHandle->Allocate();
3083 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
3084
3085 workload->PostAllocationConfigure();
3086 workload->Execute();
3087
3088 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
3089 return result;
3090}
3091
3092template<armnn::DataType ArmnnType, typename T>
3093LayerTestResult<T, 4> SimpleResizeNearestNeighborTest(
3094 armnn::IWorkloadFactory& workloadFactory,
3095 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
3096 const armnn::DataLayout dataLayout)
3097{
3098 armnn::TensorInfo inputTensorInfo = armnn::IsQuantizedType<T>()
3099 ? armnnUtils::GetTensorInfo(1, 1, 2, 2, dataLayout, ArmnnType)
3100 : armnnUtils::GetTensorInfo(1, 2, 2, 2, dataLayout, ArmnnType);
3101 armnn::TensorInfo outputTensorInfo = armnn::IsQuantizedType<T>()
3102 ? armnnUtils::GetTensorInfo(1, 1, 1, 1, dataLayout, ArmnnType)
3103 : armnnUtils::GetTensorInfo(1, 2, 1, 1, dataLayout, ArmnnType);
3104
3105 if (armnn::IsQuantizedType<T>())
3106 {
3107 inputTensorInfo.SetQuantizationScale(0.1567f);
3108 inputTensorInfo.SetQuantizationOffset(1);
3109 outputTensorInfo.SetQuantizationScale(0.1567f);
3110 outputTensorInfo.SetQuantizationOffset(1);
3111 }
3112
3113 std::vector<float> inputData = armnn::IsQuantizedType<T>()
3114 ? std::initializer_list<float>
3115 {
3116 1, 255,
3117 200, 250
3118 }
3119 : std::initializer_list<float>
3120 {
3121 1.0f, 255.0f,
3122 200.0f, 250.0f,
3123
3124 250.0f, 200.0f,
3125 250.0f, 1.0f
3126 };
3127
3128 // The 'resize' operation projects the top-left corner of output texels into the input image,
3129 // then figures out the interpolants and weights. Note this is different to projecting the centre of the
3130 // output texel. Thus, for a input matrix of 2x2, we'll expect the output 1x1 matrix to contain, as
3131 // its single element, the value that was at position (0,0) of the input matrix (rather than an average,
3132 // which we would expect if projecting the centre).
3133
3134 std::vector<float> outputData = armnn::IsQuantizedType<T>()
3135 ? std::initializer_list<float>
3136 {
3137 1
3138 }
3139 : std::initializer_list<float>
3140 {
3141 1.0f,
3142
3143 250.0f
3144 };
3145
3146 const armnn::PermutationVector NCHWToNHWC = { 0, 3, 1, 2 };
3147 if (dataLayout == armnn::DataLayout::NHWC)
3148 {
3149 std::vector<float> tmp(inputData.size());
3150 armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(float));
3151 inputData = tmp;
3152
3153 std::vector<float> tmp1(outputData.size());
3154 armnnUtils::Permute(outputTensorInfo.GetShape(), NCHWToNHWC, outputData.data(), tmp1.data(), sizeof(float));
3155 outputData = tmp1;
3156 }
3157
3158 auto input = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(),
3159 inputTensorInfo.GetQuantizationOffset(),
3160 inputData));
3161
3162 LayerTestResult<T, 4> result(outputTensorInfo);
3163 result.outputExpected = MakeTensor<T, 4>(outputTensorInfo,
3164 QuantizedVector<T>(outputTensorInfo.GetQuantizationScale(),
3165 outputTensorInfo.GetQuantizationOffset(),
3166 outputData));
3167
3168 std::unique_ptr <armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
3169 std::unique_ptr <armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
3170
3171 armnn::ResizeQueueDescriptor descriptor;
3172 descriptor.m_Parameters.m_DataLayout = dataLayout;
3173 descriptor.m_Parameters.m_Method = armnn::ResizeMethod::NearestNeighbor;
3174 armnn::WorkloadInfo info;
3175 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
3176 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
3177
3178 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateResize(descriptor, info);
3179
3180 inputHandle->Allocate();
3181 outputHandle->Allocate();
3182 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
3183
3184 workload->PostAllocationConfigure();
3185 workload->Execute();
3186
3187 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
3188 return result;
3189}
3190
3191template<armnn::DataType ArmnnType, typename T>
3192LayerTestResult<T, 4> ResizeNearestNeighborSqMinTest(
3193 armnn::IWorkloadFactory& workloadFactory,
3194 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
3195 const armnn::DataLayout dataLayout)
3196{
3197 armnn::TensorInfo inputTensorInfo = armnn::IsQuantizedType<T>()
3198 ? armnnUtils::GetTensorInfo(1, 1, 4, 4, dataLayout, ArmnnType)
3199 : armnnUtils::GetTensorInfo(1, 2, 4, 4, dataLayout, ArmnnType);
3200 armnn::TensorInfo outputTensorInfo = armnn::IsQuantizedType<T>()
3201 ? armnnUtils::GetTensorInfo(1, 1, 2, 2, dataLayout, ArmnnType)
3202 : armnnUtils::GetTensorInfo(1, 2, 2, 2, dataLayout, ArmnnType);
3203
3204 if (armnn::IsQuantizedType<T>())
3205 {
3206 inputTensorInfo.SetQuantizationScale(3.141592f);
3207 inputTensorInfo.SetQuantizationOffset(3);
3208 outputTensorInfo.SetQuantizationScale(3.141592f);
3209 outputTensorInfo.SetQuantizationOffset(3);
3210 }
3211
3212 std::vector<float> inputData = armnn::IsQuantizedType<T>()
3213 ? std::initializer_list<float>
3214 {
3215 1, 2, 3, 4,
3216 2, 3, 4, 5,
3217 3, 4, 5, 6,
3218 4, 5, 6, 7
3219 }
3220 : std::initializer_list<float>
3221 {
3222 1.0f, 2.0f, 3.0f, 4.0f,
3223 2.0f, 3.0f, 4.0f, 5.0f,
3224 3.0f, 4.0f, 5.0f, 6.0f,
3225 4.0f, 5.0f, 6.0f, 7.0f,
3226
3227 7.0f, 6.0f, 5.0f, 4.0f,
3228 6.0f, 5.0f, 4.0f, 3.0f,
3229 5.0f, 4.0f, 3.0f, 2.0f,
3230 4.0f, 3.0f, 2.0f, 1.0f
3231 };
3232
3233 std::vector<float> outputData = armnn::IsQuantizedType<T>()
3234 ? std::initializer_list<float>
3235 {
3236 1, 3,
3237 3, 5
3238 }
3239 : std::initializer_list<float>
3240 {
3241 1.0f, 3.0f,
3242 3.0f, 5.0f,
3243
3244 7.0f, 5.0f,
3245 5.0f, 3.0f
3246 };
3247
3248 const armnn::PermutationVector NCHWToNHWC = { 0, 3, 1, 2 };
3249 if (dataLayout == armnn::DataLayout::NHWC)
3250 {
3251 std::vector<float> tmp(inputData.size());
3252 armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(float));
3253 inputData = tmp;
3254
3255 std::vector<float> tmp1(outputData.size());
3256 armnnUtils::Permute(outputTensorInfo.GetShape(), NCHWToNHWC, outputData.data(), tmp1.data(), sizeof(float));
3257 outputData = tmp1;
3258 }
3259
3260 auto input = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(),
3261 inputTensorInfo.GetQuantizationOffset(),
3262 inputData));
3263
3264 LayerTestResult<T, 4> result(outputTensorInfo);
3265 result.outputExpected = MakeTensor<T, 4>(outputTensorInfo,
3266 QuantizedVector<T>(outputTensorInfo.GetQuantizationScale(),
3267 outputTensorInfo.GetQuantizationOffset(),
3268 outputData));
3269
3270 std::unique_ptr <armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
3271 std::unique_ptr <armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
3272
3273 armnn::ResizeQueueDescriptor descriptor;
3274 descriptor.m_Parameters.m_DataLayout = dataLayout;
3275 descriptor.m_Parameters.m_Method = armnn::ResizeMethod::NearestNeighbor;
3276 armnn::WorkloadInfo info;
3277 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
3278 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
3279
3280 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateResize(descriptor, info);
3281
3282 inputHandle->Allocate();
3283 outputHandle->Allocate();
3284 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
3285
3286 workload->PostAllocationConfigure();
3287 workload->Execute();
3288
3289 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
3290 return result;
3291}
3292
3293template<armnn::DataType ArmnnType, typename T>
3294LayerTestResult<T, 4> ResizeNearestNeighborMinTest(
3295 armnn::IWorkloadFactory& workloadFactory,
3296 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
3297 const armnn::DataLayout dataLayout)
3298{
3299 armnn::TensorInfo inputTensorInfo = armnn::IsQuantizedType<T>()
3300 ? armnnUtils::GetTensorInfo(1, 1, 2, 3, dataLayout, ArmnnType)
3301 : armnnUtils::GetTensorInfo(1, 2, 3, 5, dataLayout, ArmnnType);
3302 armnn::TensorInfo outputTensorInfo = armnn::IsQuantizedType<T>()
3303 ? armnnUtils::GetTensorInfo(1, 1, 1, 2, dataLayout, ArmnnType)
3304 : armnnUtils::GetTensorInfo(1, 2, 2, 3, dataLayout, ArmnnType);
3305
3306 if (armnn::IsQuantizedType<T>())
3307 {
3308 inputTensorInfo.SetQuantizationScale(1.5f);
3309 inputTensorInfo.SetQuantizationOffset(-1);
3310 outputTensorInfo.SetQuantizationScale(1.5f);
3311 outputTensorInfo.SetQuantizationOffset(-1);
3312 }
3313
3314 std::vector<float> inputData = armnn::IsQuantizedType<T>()
3315 ? std::initializer_list<float>
3316 {
3317 3.0f, 4.5f, 6.0f, // 1, 2, 3, : Expected quantised values
3318 9.0f, 13.5f, 21.0f // 5, 8, 13
3319 }
3320 : std::initializer_list<float>
3321 {
3322 1.0f, 2.0f, 3.0f, 5.0f, 8.0f,
3323 13.0f, 21.0f, 34.0f, 55.0f, 89.0f,
3324 144.0f, 233.0f, 377.0f, 610.0f, 987.0f,
3325
3326 987.0f, 610.0f, 377.0f, 233.0f, 144.0f,
3327 89.0f, 55.0f, 34.0f, 21.0f, 13.0f,
3328 8.0f, 5.0f, 3.0f, 2.0f, 1.0f
3329 };
3330
3331 std::vector<float> outputData = armnn::IsQuantizedType<T>()
3332 ? std::initializer_list<float>
3333 {
3334 3.0f, 4.5f // 1, 3
3335 }
3336 : std::initializer_list<float>
3337 {
3338 1.f, 2.f, 5.f,
3339 13.f, 21.f, 55.f,
3340
3341 987.f, 610.f, 233.f,
3342 89.f, 55.f, 21.f
3343 };
3344
3345 const armnn::PermutationVector NCHWToNHWC = { 0, 3, 1, 2 };
3346 if (dataLayout == armnn::DataLayout::NHWC)
3347 {
3348 std::vector<float> tmp(inputData.size());
3349 armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(float));
3350 inputData = tmp;
3351
3352 std::vector<float> tmp1(outputData.size());
3353 armnnUtils::Permute(outputTensorInfo.GetShape(), NCHWToNHWC, outputData.data(), tmp1.data(), sizeof(float));
3354 outputData = tmp1;
3355 }
3356
3357 auto input = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(),
3358 inputTensorInfo.GetQuantizationOffset(),
3359 inputData));
3360
3361 LayerTestResult<T, 4> result(outputTensorInfo);
3362 result.outputExpected = MakeTensor<T, 4>(outputTensorInfo,
3363 QuantizedVector<T>(outputTensorInfo.GetQuantizationScale(),
3364 outputTensorInfo.GetQuantizationOffset(),
3365 outputData));
3366
3367 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
3368 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
3369
3370 armnn::ResizeQueueDescriptor descriptor;
3371 descriptor.m_Parameters.m_DataLayout = dataLayout;
3372 descriptor.m_Parameters.m_Method = armnn::ResizeMethod::NearestNeighbor;
3373 armnn::WorkloadInfo info;
3374 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
3375 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
3376
3377 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateResize(descriptor, info);
3378
3379 inputHandle->Allocate();
3380 outputHandle->Allocate();
3381 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
3382
3383 workload->PostAllocationConfigure();
3384 workload->Execute();
3385
3386 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
3387 return result;
3388}
3389
3390template<armnn::DataType ArmnnType, typename T>
3391LayerTestResult<T, 4> ResizeNearestNeighborMagTest(
3392 armnn::IWorkloadFactory& workloadFactory,
3393 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
3394 const armnn::DataLayout dataLayout)
3395{
3396 armnn::TensorInfo inputTensorInfo = armnn::IsQuantizedType<T>()
3397 ? armnnUtils::GetTensorInfo(1, 1, 3, 2, dataLayout, ArmnnType)
3398 : armnnUtils::GetTensorInfo(1, 2, 3, 2, dataLayout, ArmnnType);
3399 armnn::TensorInfo outputTensorInfo = armnn::IsQuantizedType<T>()
3400 ? armnnUtils::GetTensorInfo(1, 1, 3, 5, dataLayout, ArmnnType)
3401 : armnnUtils::GetTensorInfo(1, 2, 3, 5, dataLayout, ArmnnType);
3402
3403 if (armnn::IsQuantizedType<T>())
3404 {
3405 inputTensorInfo.SetQuantizationScale(0.010765f);
3406 inputTensorInfo.SetQuantizationOffset(7);
3407 outputTensorInfo.SetQuantizationScale(0.010132f);
3408 outputTensorInfo.SetQuantizationOffset(-18);
3409 }
3410
3411 std::vector<float> inputData = armnn::IsQuantizedType<T>()
3412 ? std::initializer_list<float>
3413 {
3414 0.183005f, 2.379065f, // 24, 228, : Expected quantised values
3415 1.05497f, 1.302565f, // 105, 128,
3416 2.400595f, 0.68896f // 230, 71
3417 }
3418 : std::initializer_list<float>
3419 {
3420 1.0f, 2.0f,
3421 13.0f, 21.0f,
3422 144.0f, 233.0f,
3423
3424 233.0f, 144.0f,
3425 21.0f, 13.0f,
3426 2.0f, 1.0f
3427 };
3428 std::vector<float> outputData = armnn::IsQuantizedType<T>()
3429 ? std::initializer_list<float>
3430 {
3431 0.183005f, 0.183005f, 0.183005f, 2.379065f, 2.379065f,
3432 1.05497f, 1.05497f, 1.05497f, 1.302565f, 1.302565f,
3433 2.400595f, 2.400595f, 2.400595f, 0.68896f, 0.68896f
3434 }
3435 : std::initializer_list<float>
3436 {
3437 1.f, 1.f, 1.f, 2.f, 2.f,
3438 13.f, 13.f, 13.f, 21.f, 21.f,
3439 144.f, 144.f, 144.f, 233.f, 233.f,
3440
3441 233.f, 233.f, 233.f, 144.f, 144.f,
3442 21.f, 21.f, 21.f, 13.f, 13.f,
3443 2.f, 2.f, 2.f, 1.f, 1.f
3444 };
3445
3446 const armnn::PermutationVector NCHWToNHWC = { 0, 3, 1, 2 };
3447 if (dataLayout == armnn::DataLayout::NHWC)
3448 {
3449 std::vector<float> tmp(inputData.size());
3450 armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(float));
3451 inputData = tmp;
3452
3453 std::vector<float> tmp1(outputData.size());
3454 armnnUtils::Permute(outputTensorInfo.GetShape(), NCHWToNHWC, outputData.data(), tmp1.data(), sizeof(float));
3455 outputData = tmp1;
3456 }
3457
3458 auto input = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(),
3459 inputTensorInfo.GetQuantizationOffset(),
3460 inputData));
3461
3462 LayerTestResult<T, 4> result(outputTensorInfo);
3463 result.outputExpected = MakeTensor<T, 4>(outputTensorInfo,
3464 QuantizedVector<T>(outputTensorInfo.GetQuantizationScale(),
3465 outputTensorInfo.GetQuantizationOffset(),
3466 outputData));
3467
3468 std::unique_ptr <armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
3469 std::unique_ptr <armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
3470
3471 armnn::ResizeQueueDescriptor descriptor;
3472 descriptor.m_Parameters.m_DataLayout = dataLayout;
3473 descriptor.m_Parameters.m_Method = armnn::ResizeMethod::NearestNeighbor;
3474 armnn::WorkloadInfo info;
3475 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
3476 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
3477
3478 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateResize(descriptor, info);
3479
3480 inputHandle->Allocate();
3481 outputHandle->Allocate();
3482 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
3483
3484 workload->PostAllocationConfigure();
3485 workload->Execute();
3486
3487 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
3488 return result;
3489}
3490
3491
James Conroy4d1ff582019-06-10 17:06:39 +01003492template<armnn::DataType ArmnnType, typename T, std::size_t InputDim, std::size_t OutputDim>
3493LayerTestResult<T, OutputDim> MeanTestHelper(
3494 armnn::IWorkloadFactory& workloadFactory,
3495 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
3496 const unsigned int* inputShape,
3497 const std::vector<float>& inputData,
3498 const std::vector<unsigned int>& axis,
3499 bool keepDims,
3500 const unsigned int* outputShape,
3501 const std::vector<float>& outputData,
3502 float scale = 1.0f,
3503 int32_t offset = 0)
3504{
3505 armnn::TensorInfo inputTensorInfo(InputDim, inputShape, ArmnnType);
3506 armnn::TensorInfo outputTensorInfo(OutputDim, outputShape, ArmnnType);
3507
3508 inputTensorInfo.SetQuantizationScale(scale);
3509 inputTensorInfo.SetQuantizationOffset(offset);
3510
3511 outputTensorInfo.SetQuantizationScale(scale);
3512 outputTensorInfo.SetQuantizationOffset(offset);
3513
3514 auto input = MakeTensor<T, InputDim>(inputTensorInfo, ConvertToDataType<ArmnnType>(inputData, inputTensorInfo));
3515
3516 LayerTestResult<T, OutputDim> result(outputTensorInfo);
3517 result.outputExpected = MakeTensor<T, OutputDim>(
3518 outputTensorInfo, ConvertToDataType<ArmnnType>(outputData, outputTensorInfo));
3519
3520 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
3521 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
3522
3523 armnn::MeanQueueDescriptor data;
3524 data.m_Parameters.m_Axis = axis;
3525 data.m_Parameters.m_KeepDims = keepDims;
3526 armnn::WorkloadInfo info;
3527 AddInputToWorkload(data, info, inputTensorInfo, inputHandle.get());
3528 AddOutputToWorkload(data, info, outputTensorInfo, outputHandle.get());
3529
3530 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateMean(data, info);
3531
3532 inputHandle->Allocate();
3533 outputHandle->Allocate();
3534
3535 CopyDataToITensorHandle(inputHandle.get(), input.origin());
3536
3537 workload->PostAllocationConfigure();
3538 workload->Execute();
3539
3540 CopyDataFromITensorHandle(result.output.origin(), outputHandle.get());
3541
3542 return result;
3543}
3544
3545template<armnn::DataType ArmnnType, typename T>
3546LayerTestResult<T, 1> MeanSimpleTest(
3547 armnn::IWorkloadFactory& workloadFactory,
3548 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3549{
3550 const unsigned int inputShape[] = { 3, 2 };
3551 const unsigned int outputShape[] = { 1 };
3552
3553 std::vector<float> input({ 1.5f, 1.5f, 2.5f, 2.5f, 3.5f, 3.5f });
3554 std::vector<float> output({ 2.5f });
3555
3556 return MeanTestHelper<ArmnnType, T, 2, 1>(
3557 workloadFactory, memoryManager, inputShape, input, {}, false, outputShape, output);
3558}
3559
3560template<armnn::DataType ArmnnType, typename T>
3561LayerTestResult<T, 3> MeanSimpleAxisTest(
3562 armnn::IWorkloadFactory& workloadFactory,
3563 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3564{
3565 const unsigned int inputShape[] = { 2, 3, 1, 2 };
3566 const unsigned int outputShape[] = { 3, 1, 2 };
3567
3568 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 });
3569 std::vector<float> output({ 1.5f, 2.5f, 3.5f, 4.5f, 5.5f, 6.5f });
3570
3571 return MeanTestHelper<ArmnnType, T, 4, 3>(
3572 workloadFactory, memoryManager, inputShape, input, { 0 }, false, outputShape, output);
3573}
3574
3575template<armnn::DataType ArmnnType, typename T>
3576LayerTestResult<T, 4> MeanKeepDimsTest(
3577 armnn::IWorkloadFactory& workloadFactory,
3578 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3579{
3580 const unsigned int inputShape[] = { 1, 1, 3, 2 };
3581 const unsigned int outputShape[] = { 1, 1, 1, 2 };
3582
3583 std::vector<float> input({ 1.5f, 1.5f, 2.5f, 2.5f, 3.5f, 3.5f });
3584 std::vector<float> output({ 2.5f, 2.5f });
3585
3586 return MeanTestHelper<ArmnnType, T, 4, 4>(
3587 workloadFactory, memoryManager, inputShape, input, { 2 }, true, outputShape, output);
3588}
3589
3590template<armnn::DataType ArmnnType, typename T>
3591LayerTestResult<T, 4> MeanMultipleDimsTest(
3592 armnn::IWorkloadFactory& workloadFactory,
3593 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3594{
3595 const unsigned int inputShape[] = { 2, 3, 1, 2 };
3596 const unsigned int outputShape[] = { 1, 3, 1, 1 };
3597
3598 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 });
3599 std::vector<float> output({ 2.0f, 4.0f, 6.0f });
3600
3601 return MeanTestHelper<ArmnnType, T, 4, 4>(
3602 workloadFactory, memoryManager, inputShape, input, { 0, 3 }, true, outputShape, output);
3603}
3604
3605template<armnn::DataType ArmnnType, typename T>
3606LayerTestResult<T, 1> MeanVts1Test(
3607 armnn::IWorkloadFactory& workloadFactory,
3608 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3609{
3610 const unsigned int inputShape[] = { 4, 3, 2 };
3611 const unsigned int outputShape[] = { 2 };
3612
3613 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,
3614 15.0f, 16.0f, 17.0f, 18.0f, 19.0f, 20.0f, 21.0f, 22.0f, 23.0f, 24.0f });
3615 std::vector<float> output({ 12.0f, 13.0f });
3616
3617 return MeanTestHelper<ArmnnType, T, 3, 1>(
3618 workloadFactory, memoryManager, inputShape, input, { 0, 1 }, false, outputShape, output);
3619}
3620
3621template<armnn::DataType ArmnnType, typename T>
3622LayerTestResult<T, 3> MeanVts2Test(
3623 armnn::IWorkloadFactory& workloadFactory,
3624 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3625{
3626 const unsigned int inputShape[] = { 4, 3, 2 };
3627 const unsigned int outputShape[] = { 1, 3, 1 };
3628
3629 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,
3630 15.0f, 16.0f, 17.0f, 18.0f, 19.0f, 20.0f, 21.0f, 22.0f, 23.0f, 24.0f });
3631 std::vector<float> output({ 10.5f, 12.5f, 14.5f });
3632
3633 return MeanTestHelper<ArmnnType, T, 3, 3>(
3634 workloadFactory, memoryManager, inputShape, input, { 0, 2 }, true, outputShape, output);
3635}
3636
3637template<armnn::DataType ArmnnType, typename T>
3638LayerTestResult<T, 3> MeanVts3Test(
3639 armnn::IWorkloadFactory& workloadFactory,
3640 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3641{
3642 const unsigned int inputShape[] = { 1, 2, 2, 1 };
3643 const unsigned int outputShape[] = { 1, 2, 1 };
3644
3645 std::vector<float> input({ 1.0f, 2.0f, 3.0f, 4.0f });
3646 std::vector<float> output({ 1.5f, 3.5f });
3647
3648 return MeanTestHelper<ArmnnType, T, 4, 3>(
3649 workloadFactory, memoryManager, inputShape, input, { 2 }, false, outputShape, output);
3650}
Narumol Prangnawarat71c80b12019-06-17 17:45:43 +01003651
3652template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
3653LayerTestResult<T, 3> ConcatDifferentInputOutputQParamTest(
3654 armnn::IWorkloadFactory& workloadFactory,
3655 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
3656 bool useSubtensor)
3657{
3658 // Defines the tensor descriptors.
3659 armnn::TensorInfo outputTensorInfo({ 3, 6, 3 }, ArmnnType);
3660 armnn::TensorInfo inputTensorInfo1({ 3, 6, 2 }, ArmnnType);
3661 armnn::TensorInfo inputTensorInfo2({ 3, 6, 1 }, ArmnnType);
3662
3663 std::vector<armnn::TensorShape> inputTensorShapes({inputTensorInfo1.GetShape(), inputTensorInfo2.GetShape()});
3664
3665 // Quantized input1 tensor.
3666 const float inputScale1 = 0.5f;
3667 const int32_t inputOffset1 = 5;
3668
3669 auto input1 = MakeTensor<T, 3>(inputTensorInfo1, std::vector<T>(
3670 {
3671 1, 2, 3,
3672 4, 5, 6,
3673 7, 8, 9,
3674 10, 11, 12,
3675 13, 14, 15,
3676 16, 17, 18,
3677
3678 19, 20, 21,
3679 22, 23, 24,
3680 25, 26, 27,
3681 28, 29, 30,
3682 31, 32, 33,
3683 34, 35, 36
3684 }));
3685
3686 // Quatized input2 tensor.
3687 const float inputScale2 = 0.2f;
3688 const int32_t inputOffset2 = 10;
3689
3690 auto input2 = MakeTensor<T, 3>(inputTensorInfo2, std::vector<T>(
3691 {
3692 37, 38, 39,
3693 40, 41, 42,
3694 43, 44, 45,
3695 46, 47, 48,
3696 49, 50, 51,
3697 52, 53, 54
3698 }));
3699
3700 // Quantized output tensor.
3701 const float outputScale = 0.1f;
3702 const int32_t outputOffset = 20;
3703
3704 LayerTestResult<T, 3> ret(outputTensorInfo);
3705
3706 ret.outputExpected = MakeTensor<T, 3>(outputTensorInfo, std::vector<T>(
3707 {
3708 0, 5, 74,
3709 10, 15, 76,
3710 20, 25, 78,
3711 30, 35, 80,
3712 40, 45, 82,
3713 50, 55, 84,
3714
3715 60, 65, 86,
3716 70, 75, 88,
3717 80, 85, 90,
3718 90, 95, 92,
3719 100, 105, 94,
3720 110, 115, 96,
3721
3722 120, 125, 98,
3723 130, 135, 100,
3724 140, 145, 102,
3725 150, 155, 104,
3726 160, 165, 106,
3727 170, 175, 108
3728 }));
3729
3730 outputTensorInfo.SetQuantizationScale(outputScale);
3731 outputTensorInfo.SetQuantizationOffset(outputOffset);
3732 inputTensorInfo1.SetQuantizationScale(inputScale1);
3733 inputTensorInfo1.SetQuantizationOffset(inputOffset1);
3734 inputTensorInfo2.SetQuantizationScale(inputScale2);
3735 inputTensorInfo2.SetQuantizationOffset(inputOffset2);
3736
3737 std::vector<unsigned int> wOrigin1 = { 0, 0, 0 }; //Extent of the window is defined by size of input[0].
3738 armnn::ConcatQueueDescriptor::ViewOrigin window1(wOrigin1);
3739
3740 std::vector<unsigned int> wOrigin2 = { 0, 0, 2 }; //Extent of the window is defined by size of input[1].
3741 armnn::ConcatQueueDescriptor::ViewOrigin window2(wOrigin2);
3742
3743 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
3744
3745 bool subTensorsSupported = useSubtensor && workloadFactory.SupportsSubTensors();
3746
3747 std::unique_ptr<armnn::ITensorHandle> inputHandle1 =
3748 subTensorsSupported ?
3749 workloadFactory.CreateSubTensorHandle(*outputHandle, inputTensorInfo1.GetShape(), wOrigin1.data()) :
3750 workloadFactory.CreateTensorHandle(inputTensorInfo1);
3751
3752 std::unique_ptr<armnn::ITensorHandle> inputHandle2 =
3753 subTensorsSupported ?
3754 workloadFactory.CreateSubTensorHandle(*outputHandle, inputTensorInfo2.GetShape(), wOrigin2.data()) :
3755 workloadFactory.CreateTensorHandle(inputTensorInfo2);
3756
3757 armnn::ConcatQueueDescriptor data;
3758 armnn::OriginsDescriptor desc = armnn::CreateDescriptorForConcatenation(
3759 inputTensorShapes.begin(),inputTensorShapes.end(), 2);
3760 data.m_Parameters = desc;
3761
3762 armnn::WorkloadInfo info;
3763 AddInputToWorkload(data, info, inputTensorInfo1, inputHandle1.get());
3764 AddInputToWorkload(data, info, inputTensorInfo2, inputHandle2.get());
3765 AddOutputToWorkload(data, info, outputTensorInfo, outputHandle.get());
3766
3767 data.m_ViewOrigins.push_back(window1);
3768 data.m_ViewOrigins.push_back(window2);
3769
3770 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateConcat(data, info);
3771
3772 inputHandle1->Allocate();
3773 inputHandle2->Allocate();
3774 outputHandle->Allocate();
3775
3776 CopyDataToITensorHandle(inputHandle1.get(), &input1[0][0][0]);
3777 CopyDataToITensorHandle(inputHandle2.get(), &input2[0][0][0]);
3778
3779 workload->PostAllocationConfigure();
3780 workload->Execute();
3781
3782 CopyDataFromITensorHandle(&ret.output[0][0][0], outputHandle.get());
3783
3784 return ret;
3785}
Matteo Martincighab9e5252019-06-13 17:27:46 +01003786
3787template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
3788LayerTestResult<T, 4> PreluTest(
3789 armnn::IWorkloadFactory& workloadFactory,
3790 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3791{
3792 armnn::TensorInfo inputTensorInfo ({ 1, 2, 2, 3 }, ArmnnType);
3793 armnn::TensorInfo alphaTensorInfo ({ 1, 1, 1, 3 }, ArmnnType);
3794 armnn::TensorInfo outputTensorInfo({ 1, 2, 2, 3 }, ArmnnType);
3795
3796 if (armnn::IsQuantizedType<T>())
3797 {
3798 inputTensorInfo.SetQuantizationScale(0.25f);
3799 inputTensorInfo.SetQuantizationOffset(128);
3800 alphaTensorInfo.SetQuantizationScale(0.25f);
3801 alphaTensorInfo.SetQuantizationOffset(50);
3802 outputTensorInfo.SetQuantizationScale(0.5f);
3803 outputTensorInfo.SetQuantizationOffset(120);
3804 }
3805
3806 std::vector<float> inputData
3807 {
3808 // Expected quantized values:
3809 // 128, 128, 128, 132, 132, 132, 124, 124, 124, 120, 120, 120
3810 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, -1.0f, -1.0f, -1.0f, -2.0f, -2.0f, -2.0f
3811 };
3812 std::vector<float> alphaData
3813 {
3814 // Expected quantized values:
3815 // 50, 54, 58
3816 0.0f, 1.0f, 2.0f
3817 };
3818 std::vector<float> outputExpectedData =
3819 {
3820 // Expected quantized values:
3821 // 20, 120, 120, 122, 122, 122, 120, 118, 116, 120, 116, 112
3822 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, 0.0f, -1.0f, -2.0f, 0.0f, -2.0f, -4.0f
3823 };
3824
3825 auto input = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(),
3826 inputTensorInfo.GetQuantizationOffset(),
3827 inputData));
3828 auto alpha = MakeTensor<T, 4>(alphaTensorInfo, QuantizedVector<T>(alphaTensorInfo.GetQuantizationScale(),
3829 alphaTensorInfo.GetQuantizationOffset(),
3830 alphaData));
3831
3832 LayerTestResult<T, 4> result(outputTensorInfo);
3833 result.outputExpected = MakeTensor<T, 4>(outputTensorInfo,
3834 QuantizedVector<T>(outputTensorInfo.GetQuantizationScale(),
3835 outputTensorInfo.GetQuantizationOffset(),
3836 outputExpectedData));
3837
3838 std::unique_ptr <armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
3839 std::unique_ptr <armnn::ITensorHandle> alphaHandle = workloadFactory.CreateTensorHandle(alphaTensorInfo);
3840 std::unique_ptr <armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
3841
3842 armnn::PreluQueueDescriptor descriptor;
3843 armnn::WorkloadInfo info;
3844 AddInputToWorkload (descriptor, info, inputTensorInfo, inputHandle.get());
3845 AddInputToWorkload (descriptor, info, alphaTensorInfo, alphaHandle.get());
3846 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
3847
3848 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreatePrelu(descriptor, info);
3849
3850 inputHandle->Allocate();
3851 alphaHandle->Allocate();
3852 outputHandle->Allocate();
3853
3854 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
3855 CopyDataToITensorHandle(alphaHandle.get(), &alpha[0][0][0][0]);
3856
3857 workload->Execute();
3858
3859 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
3860
3861 return result;
3862}
3863
Francis Murtagh57f13d52019-06-24 14:24:36 +01003864template<armnn::DataType ArmnnType,
3865 std::size_t InputDim,
3866 std::size_t OutputDim,
3867 typename T = armnn::ResolveType<ArmnnType>>
3868LayerTestResult<T, OutputDim> BatchToSpaceNdHelper(
3869 armnn::IWorkloadFactory &workloadFactory,
3870 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
3871 const armnn::DataLayout& dataLayout,
3872 const unsigned int *inputShape,
3873 const std::vector<float> &inputData,
3874 const std::vector<unsigned int> &blockShape,
3875 const std::vector<std::pair<unsigned int, unsigned int>> &crops,
3876 const unsigned int *outputShape,
3877 const std::vector<float> &outputData,
3878 float scale = 1.0f,
3879 int32_t offset = 0)
3880{
3881 armnn::TensorInfo inputTensorInfo(InputDim, inputShape, ArmnnType);
3882 armnn::TensorInfo outputTensorInfo(OutputDim, outputShape, ArmnnType);
3883
3884 inputTensorInfo.SetQuantizationScale(scale);
3885 inputTensorInfo.SetQuantizationOffset(offset);
3886
3887 outputTensorInfo.SetQuantizationScale(scale);
3888 outputTensorInfo.SetQuantizationOffset(offset);
Francis Murtaghd0dfe172019-06-25 10:57:10 +01003889
Francis Murtagh57f13d52019-06-24 14:24:36 +01003890 auto input = MakeTensor<T, InputDim>(inputTensorInfo, ConvertToDataType<ArmnnType>(inputData, inputTensorInfo));
3891
3892 LayerTestResult<T, OutputDim> result(outputTensorInfo);
3893 result.outputExpected = MakeTensor<T, OutputDim>(outputTensorInfo,
3894 ConvertToDataType<ArmnnType>(outputData, outputTensorInfo));
3895
3896 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
3897 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
3898
3899 armnn::BatchToSpaceNdQueueDescriptor data;
3900 data.m_Parameters.m_DataLayout = dataLayout;
3901 data.m_Parameters.m_BlockShape = blockShape;
3902 data.m_Parameters.m_Crops = crops;
3903 armnn::WorkloadInfo info;
3904 AddInputToWorkload(data, info, inputTensorInfo, inputHandle.get());
3905 AddOutputToWorkload(data, info, outputTensorInfo, outputHandle.get());
3906
3907 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateBatchToSpaceNd(data, info);
3908
3909 inputHandle->Allocate();
3910 outputHandle->Allocate();
3911
3912 CopyDataToITensorHandle(inputHandle.get(), input.origin());
3913
3914 workload->PostAllocationConfigure();
3915 workload->Execute();
3916
3917 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
3918
3919 return result;
3920}
3921
3922template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
3923LayerTestResult<T, 4> BatchToSpaceNdNhwcTest1(
3924 armnn::IWorkloadFactory& workloadFactory,
3925 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3926{
3927 const unsigned int inputShape[] = {4, 2, 2, 1};
3928 const unsigned int outputShape[] = {1, 4, 4, 1};
3929
3930 std::vector<float> input({
3931 // Batch 0, Height 0, Width (2) x Channel (1)
3932 1.0f, 3.0f,
3933 // Batch 0, Height 1, Width (2) x Channel (1)
3934 9.0f, 11.0f,
3935
3936
3937 // Batch 1, Height 0, Width (2) x Channel (1)
3938 2.0f, 4.0f,
3939 // Batch 1, Height 1, Width (2) x Channel (1)
3940 10.0f, 12.0f,
3941
3942
3943 // Batch 2, Height 0, Width (2) x Channel (1)
3944 5.0f, 7.0f,
3945 // Batch 2, Height 1, Width (2) x Channel (1)
3946 13.0f, 15.0f,
3947
3948 // Batch 3, Height 0, Width (2) x Channel (3)
3949 6.0f, 8.0f,
3950 // Batch 3, Height 1, Width (2) x Channel (1)
3951 14.0f, 16.0f
3952 });
3953
3954 std::vector<float> expectedOutput({
3955 1.0f, 2.0f, 3.0f, 4.0f,
3956 5.0f, 6.0f, 7.0f, 8.0f,
3957 9.0f, 10.0f, 11.0f, 12.0f,
3958 13.0f, 14.0f, 15.0f, 16.0f
3959 });
3960
3961 std::vector<unsigned int> blockShape {2, 2};
3962 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
3963
3964 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
3965 armnn::DataLayout::NHWC, inputShape, input, blockShape,
3966 crops, outputShape, expectedOutput);
3967}
3968
3969template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
3970LayerTestResult<T, 4> BatchToSpaceNdNhwcTest2(
3971 armnn::IWorkloadFactory& workloadFactory,
3972 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3973{
3974 const unsigned int inputShape[] = {4, 1, 1, 1};
3975 const unsigned int outputShape[] = {1, 2, 2, 1};
3976
3977 std::vector<float> input({
3978 // Batch 0, Height 0, Width (2) x Channel (1)
3979 1.0f, 2.0f, 3.0f, 4.0f
3980 });
3981
3982 std::vector<float> expectedOutput({1.0f, 2.0f, 3.0f, 4.0f});
3983
3984 std::vector<unsigned int> blockShape({2, 2});
3985 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
3986
3987 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
3988 armnn::DataLayout::NHWC, inputShape, input, blockShape,
3989 crops, outputShape, expectedOutput);
3990}
3991
3992template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
3993LayerTestResult<T, 4> BatchToSpaceNdNhwcTest3(
3994 armnn::IWorkloadFactory& workloadFactory,
3995 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
3996{
3997 const unsigned int inputShape[] = {4, 1, 1, 3};
3998 const unsigned int outputShape[] = {1, 2, 2, 3};
3999
4000 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});
4001
4002 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});
4003
4004 std::vector<unsigned int> blockShape({2, 2});
4005 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
4006
4007 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
4008 armnn::DataLayout::NHWC, inputShape, input, blockShape,
4009 crops, outputShape, expectedOutput);
4010}
4011
4012template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
4013LayerTestResult<T, 4> BatchToSpaceNdNhwcTest4(
4014 armnn::IWorkloadFactory& workloadFactory,
4015 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
4016{
4017 const unsigned int inputShape[] = {8, 1, 3, 1};
4018 const unsigned int outputShape[] = {2, 2, 4, 1};
4019
4020 std::vector<float> input({
4021 0.0f, 1.0f, 3.0f,
4022 0.0f, 9.0f, 11.0f,
4023 0.0f, 2.0f, 4.0f,
4024 0.0f, 10.0f, 12.0f,
4025 0.0f, 5.0f, 7.0f,
4026 0.0f, 13.0f, 15.0f,
4027 0.0f, 6.0f, 8.0f,
4028 0.0f, 14.0f, 16.0f
4029 });
4030
4031 std::vector<float> expectedOutput({
4032 1.0f, 2.0f, 3.0f, 4.0f,
4033 5.0f, 6.0f, 7.0f, 8.0f,
4034 9.0f, 10.0f, 11.0f, 12.0f,
4035 13.0f, 14.0f, 15.0f, 16.0f
4036 });
4037
4038 std::vector<unsigned int> blockShape({2, 2});
4039 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {2, 0}};
4040
4041 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
4042 armnn::DataLayout::NHWC, inputShape, input, blockShape,
4043 crops, outputShape, expectedOutput);
4044}
4045
4046template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
4047LayerTestResult<T, 4> BatchToSpaceNdNhwcTest5(
4048 armnn::IWorkloadFactory& workloadFactory,
4049 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
4050{
4051 const unsigned int inputShape[] = {4, 2, 2, 1};
4052 const unsigned int outputShape[] = {1, 4, 4, 1};
4053
4054 std::vector<float> input({1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16});
4055 std::vector<float> expectedOutput({1, 5, 2, 6, 9, 13, 10, 14, 3, 7, 4, 8, 11, 15, 12, 16});
4056
4057 std::vector<unsigned int> blockShape({2, 2});
4058 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
4059
4060 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager, armnn::DataLayout::NHWC, inputShape,
4061 input, blockShape, crops, outputShape, expectedOutput);
4062}
4063
4064template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
4065LayerTestResult<T, 4> BatchToSpaceNdNhwcTest6(
4066 armnn::IWorkloadFactory& workloadFactory,
4067 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
4068{
4069 const unsigned int inputShape[] = {4, 1, 1, 1};
4070 const unsigned int outputShape[] = {1, 2, 2, 1};
4071
4072 std::vector<float> input({
4073 // Batch 0, Height 0, Width (2) x Channel (1)
4074 1, 2, 3, 4
4075 });
4076
4077 std::vector<float> expectedOutput({1, 2, 3, 4});
4078
4079 std::vector<unsigned int> blockShape({2, 2});
4080 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
4081
4082 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
4083 armnn::DataLayout::NHWC, inputShape, input, blockShape,
4084 crops, outputShape, expectedOutput);
4085}
4086
4087template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
4088LayerTestResult<T, 4> BatchToSpaceNdNhwcTest7(
4089 armnn::IWorkloadFactory& workloadFactory,
4090 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
4091{
4092 const unsigned int inputShape[] = {4, 1, 1, 3};
4093 const unsigned int outputShape[] = {1, 2, 2, 3};
4094
4095 std::vector<float> input({1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12});
4096
4097 std::vector<float> expectedOutput({1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12});
4098
4099 std::vector<unsigned int> blockShape({2, 2});
4100 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
4101
4102 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
4103 armnn::DataLayout::NHWC, inputShape, input, blockShape,
4104 crops, outputShape, expectedOutput);
4105}
4106
4107template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
4108LayerTestResult<T, 4> BatchToSpaceNdNchwTest1(
4109 armnn::IWorkloadFactory &workloadFactory,
4110 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
4111{
4112 const unsigned int inputShape[] = {4, 3, 1, 1};
4113 const unsigned int outputShape[] = {1, 3, 2, 2};
4114
4115 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});
4116
4117 std::vector<float> expectedOutput({
4118 // Batch 0, Channel 0, Height (2) x Width (2)
4119 1.0f, 4.0f,
4120 7.0f, 10.0f,
4121
4122 // Batch 0, Channel 1, Height (2) x Width (2)
4123 2.0f, 5.0f,
4124 8.0f, 11.0f,
4125
4126 // Batch 0, Channel 2, Height (2) x Width (2)
4127 3.0f, 6.0f,
4128 9.0f, 12.0f,
4129 });
4130
4131 std::vector<unsigned int> blockShape({2, 2});
4132 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
4133
4134 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
4135 armnn::DataLayout::NCHW, inputShape, input, blockShape,
4136 crops, outputShape, expectedOutput);
4137}
4138
4139template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
4140LayerTestResult<T, 4> BatchToSpaceNdNchwTest2(
4141 armnn::IWorkloadFactory& workloadFactory,
4142 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
4143{
4144 const unsigned int inputShape[] = {4, 1, 1, 1};
4145 const unsigned int outputShape[] = {1, 1, 2, 2};
4146
4147 std::vector<float> input({
4148 // Batch 0, Height 0, Width (2) x Channel (1)
4149 1.0f, 2.0f, 3.0f, 4.0f
4150 });
4151
4152 std::vector<float> expectedOutput({1.0f, 2.0f, 3.0f, 4.0f});
4153
4154 std::vector<unsigned int> blockShape({2, 2});
4155 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
4156
4157 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
4158 armnn::DataLayout::NCHW, inputShape, input, blockShape,
4159 crops, outputShape, expectedOutput);
4160}
4161
4162template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
4163LayerTestResult<T, 4> BatchToSpaceNdNchwTest3(
4164 armnn::IWorkloadFactory& workloadFactory,
4165 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
4166{
4167 const unsigned int inputShape[] = {4, 3, 1, 1};
4168 const unsigned int outputShape[] = {1, 3, 2, 2};
4169
4170 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});
4171
4172 std::vector<float> expectedOutput({
4173 // Batch 0, Channel 0, Height (2) x Width (2)
4174 1.0f, 7.0f,
4175 2.0f, 8.0f,
4176
4177 // Batch 0, Channel 1, Height (2) x Width (2)
4178 3.0f, 9.0f,
4179 4.0f, 10.0f,
4180
4181 // Batch 0, Channel 2, Height (2) x Width (2)
4182 5.0f, 11.0f,
4183 6.0f, 12.0f,
4184 });
4185
4186 std::vector<unsigned int> blockShape({2, 2});
4187 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
4188
4189 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
4190 armnn::DataLayout::NCHW, inputShape, input, blockShape,
4191 crops, outputShape, expectedOutput);
4192}
4193
4194template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
4195LayerTestResult<T, 4> BatchToSpaceNdNchwTest4(
4196 armnn::IWorkloadFactory &workloadFactory,
4197 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
4198{
4199 const unsigned int inputShape[] = {4, 3, 1, 1};
4200 const unsigned int outputShape[] = {1, 3, 2, 2};
4201
4202 std::vector<float> input({1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12});
4203
4204 std::vector<float> expectedOutput({
4205 // Batch 0, Channel 0, Height (2) x Width (2)
4206 1, 4,
4207 7, 10,
4208
4209 // Batch 0, Channel 1, Height (2) x Width (2)
4210 2, 5,
4211 8, 11,
4212
4213 // Batch 0, Channel 2, Height (2) x Width (2)
4214 3, 6,
4215 9, 12,
4216 });
4217
4218 std::vector<unsigned int> blockShape({2, 2});
4219 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
4220
4221 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
4222 armnn::DataLayout::NCHW, inputShape, input, blockShape,
4223 crops, outputShape, expectedOutput);
4224}
4225
4226template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
4227LayerTestResult<T, 4> BatchToSpaceNdNchwTest5(
4228 armnn::IWorkloadFactory& workloadFactory,
4229 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
4230{
4231 const unsigned int inputShape[] = {4, 1, 1, 1};
4232 const unsigned int outputShape[] = {1, 1, 2, 2};
4233
4234 std::vector<float> input({
4235 // Batch 0, Height 0, Width (2) x Channel (1)
4236 1, 2, 3, 4
4237 });
4238
4239 std::vector<float> expectedOutput({1, 2, 3, 4});
4240
4241 std::vector<unsigned int> blockShape({2, 2});
4242 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
4243
4244 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
4245 armnn::DataLayout::NCHW, inputShape, input, blockShape,
4246 crops, outputShape, expectedOutput);
4247}
4248
4249template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
4250LayerTestResult<T, 4> BatchToSpaceNdNchwTest6(
4251 armnn::IWorkloadFactory& workloadFactory,
4252 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
4253{
4254 const unsigned int inputShape[] = {4, 3, 1, 1};
4255 const unsigned int outputShape[] = {1, 3, 2, 2};
4256
4257 std::vector<float> input({1, 3, 5, 7, 9, 11, 2, 4, 6, 8, 10, 12});
4258
4259 std::vector<float> expectedOutput({
4260 // Batch 0, Channel 0, Height (2) x Width (2)
4261 1, 7,
4262 2, 8,
4263
4264 // Batch 0, Channel 1, Height (2) x Width (2)
4265 3, 9,
4266 4, 10,
4267
4268 // Batch 0, Channel 2, Height (2) x Width (2)
4269 5, 11,
4270 6, 12,
4271 });
4272
4273 std::vector<unsigned int> blockShape({2, 2});
4274 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}};
4275
4276 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
4277 armnn::DataLayout::NCHW, inputShape, input, blockShape,
4278 crops, outputShape, expectedOutput);
4279}
4280
4281template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
4282LayerTestResult<T, 4> BatchToSpaceNdNchwTest7(
4283 armnn::IWorkloadFactory& workloadFactory,
4284 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
4285{
4286 const unsigned int inputShape[] = {8, 1, 1, 3};
4287 const unsigned int outputShape[] = {2, 1, 2, 4};
4288
4289 std::vector<float> input({
4290 0, 1, 3, 0, 9, 11,
4291 0, 2, 4, 0, 10, 12,
4292 0, 5, 7, 0, 13, 15,
4293 0, 6, 8, 0, 14, 16
4294 });
4295
4296 std::vector<float> expectedOutput({
4297 1, 2, 3, 4,
4298 5, 6, 7, 8,
4299 9, 10, 11, 12,
4300 13, 14, 15, 16
4301 });
4302
4303 std::vector<unsigned int> blockShape({2, 2});
4304 std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {2, 0}};
4305
4306 return BatchToSpaceNdHelper<ArmnnType, 4, 4>(workloadFactory, memoryManager,
4307 armnn::DataLayout::NCHW, inputShape, input, blockShape,
4308 crops, outputShape, expectedOutput);
4309}
4310
Matteo Martincighab9e5252019-06-13 17:27:46 +01004311template LayerTestResult<typename armnn::ResolveType<armnn::DataType::Float32>, 4>
4312PreluTest<armnn::DataType::Float32>(
4313 armnn::IWorkloadFactory& workloadFactory,
4314 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4315
4316template LayerTestResult<typename armnn::ResolveType<armnn::DataType::QuantisedAsymm8>, 4>
4317PreluTest<armnn::DataType::QuantisedAsymm8>(
4318 armnn::IWorkloadFactory& workloadFactory,
4319 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4320
4321template LayerTestResult<typename armnn::ResolveType<armnn::DataType::QuantisedSymm16>, 4>
4322PreluTest<armnn::DataType::QuantisedSymm16>(
4323 armnn::IWorkloadFactory& workloadFactory,
4324 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
Aron Virginas-Tar735a4502019-06-26 15:02:47 +01004325
4326//
4327// TransposeConvolution2d
4328//
4329
4330// Simple biased
4331LayerTestResult<float, 4> SimpleTransposeConvolution2dFloatNchwTest(
4332 armnn::IWorkloadFactory& workloadFactory,
4333 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4334
4335LayerTestResult<float, 4> SimpleTransposeConvolution2dFloatNhwcTest(
4336 armnn::IWorkloadFactory& workloadFactory,
4337 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4338
4339LayerTestResult<uint8_t, 4> SimpleTransposeConvolution2dUint8NchwTest(
4340 armnn::IWorkloadFactory& workloadFactory,
4341 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4342
4343LayerTestResult<uint8_t, 4> SimpleTransposeConvolution2dUint8NhwcTest(
4344 armnn::IWorkloadFactory& workloadFactory,
4345 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4346
4347LayerTestResult<int16_t, 4> SimpleTransposeConvolution2dInt16NchwTest(
4348 armnn::IWorkloadFactory& workloadFactory,
4349 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4350
4351LayerTestResult<int16_t, 4> SimpleTransposeConvolution2dInt16NhwcTest(
4352 armnn::IWorkloadFactory& workloadFactory,
4353 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4354
4355// Simple unbiased
4356LayerTestResult<float, 4> UnbiasedSimpleTransposeConvolution2dFloatNchwTest(
4357 armnn::IWorkloadFactory& workloadFactory,
4358 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4359
4360LayerTestResult<float, 4> UnbiasedSimpleTransposeConvolution2dFloatNhwcTest(
4361 armnn::IWorkloadFactory& workloadFactory,
4362 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4363
4364LayerTestResult<uint8_t, 4> UnbiasedSimpleTransposeConvolution2dUint8NchwTest(
4365 armnn::IWorkloadFactory& workloadFactory,
4366 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4367
4368LayerTestResult<uint8_t, 4> UnbiasedSimpleTransposeConvolution2dUint8NhwcTest(
4369 armnn::IWorkloadFactory& workloadFactory,
4370 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4371
4372LayerTestResult<int16_t, 4> UnbiasedSimpleTransposeConvolution2dInt16NchwTest(
4373 armnn::IWorkloadFactory& workloadFactory,
4374 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4375
4376LayerTestResult<int16_t, 4> UnbiasedSimpleTransposeConvolution2dInt16NhwcTest(
4377 armnn::IWorkloadFactory& workloadFactory,
4378 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4379
4380// Padded biased
4381LayerTestResult<float, 4> PaddedTransposeConvolution2dFloatNchwTest(
4382 armnn::IWorkloadFactory& workloadFactory,
4383 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4384
4385LayerTestResult<float, 4> PaddedTransposeConvolution2dFloatNhwcTest(
4386 armnn::IWorkloadFactory& workloadFactory,
4387 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4388
4389LayerTestResult<uint8_t, 4> PaddedTransposeConvolution2dUint8NchwTest(
4390 armnn::IWorkloadFactory& workloadFactory,
4391 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4392
4393LayerTestResult<uint8_t, 4> PaddedTransposeConvolution2dUint8NhwcTest(
4394 armnn::IWorkloadFactory& workloadFactory,
4395 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4396
4397LayerTestResult<int16_t, 4> PaddedTransposeConvolution2dInt16NchwTest(
4398 armnn::IWorkloadFactory& workloadFactory,
4399 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4400
4401LayerTestResult<int16_t, 4> PaddedTransposeConvolution2dInt16NhwcTest(
4402 armnn::IWorkloadFactory& workloadFactory,
4403 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4404
4405// Padded unbiased
4406LayerTestResult<float, 4> UnbiasedPaddedTransposeConvolution2dFloatNchwTest(
4407 armnn::IWorkloadFactory& workloadFactory,
4408 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4409
4410LayerTestResult<float, 4> UnbiasedPaddedTransposeConvolution2dFloatNhwcTest(
4411 armnn::IWorkloadFactory& workloadFactory,
4412 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4413
4414LayerTestResult<uint8_t, 4> UnbiasedPaddedTransposeConvolution2dUint8NchwTest(
4415 armnn::IWorkloadFactory& workloadFactory,
4416 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4417
4418LayerTestResult<uint8_t, 4> UnbiasedPaddedTransposeConvolution2dUint8NhwcTest(
4419 armnn::IWorkloadFactory& workloadFactory,
4420 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4421
4422LayerTestResult<int16_t, 4> UnbiasedPaddedTransposeConvolution2dInt16NchwTest(
4423 armnn::IWorkloadFactory& workloadFactory,
4424 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4425
4426LayerTestResult<int16_t, 4> UnbiasedPaddedTransposeConvolution2dInt16NhwcTest(
4427 armnn::IWorkloadFactory& workloadFactory,
4428 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4429
4430// Strided biased
4431LayerTestResult<float, 4> StridedTransposeConvolution2dFloatNchwTest(
4432 armnn::IWorkloadFactory& workloadFactory,
4433 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4434
4435LayerTestResult<float, 4> StridedTransposeConvolution2dFloatNhwcTest(
4436 armnn::IWorkloadFactory& workloadFactory,
4437 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4438
4439LayerTestResult<uint8_t, 4> StridedTransposeConvolution2dUint8NchwTest(
4440 armnn::IWorkloadFactory& workloadFactory,
4441 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4442
4443LayerTestResult<uint8_t, 4> StridedTransposeConvolution2dUint8NhwcTest(
4444 armnn::IWorkloadFactory& workloadFactory,
4445 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4446
4447LayerTestResult<int16_t, 4> StridedTransposeConvolution2dInt16NchwTest(
4448 armnn::IWorkloadFactory& workloadFactory,
4449 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4450
4451LayerTestResult<int16_t, 4> StridedTransposeConvolution2dInt16NhwcTest(
4452 armnn::IWorkloadFactory& workloadFactory,
4453 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4454
4455// Strided unbiased
4456LayerTestResult<float, 4> UnbiasedStridedTransposeConvolution2dFloatNchwTest(
4457 armnn::IWorkloadFactory& workloadFactory,
4458 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4459
4460LayerTestResult<float, 4> UnbiasedStridedTransposeConvolution2dFloatNhwcTest(
4461 armnn::IWorkloadFactory& workloadFactory,
4462 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4463
4464LayerTestResult<uint8_t, 4> UnbiasedStridedTransposeConvolution2dUint8NchwTest(
4465 armnn::IWorkloadFactory& workloadFactory,
4466 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4467
4468LayerTestResult<uint8_t, 4> UnbiasedStridedTransposeConvolution2dUint8NhwcTest(
4469 armnn::IWorkloadFactory& workloadFactory,
4470 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4471
4472LayerTestResult<int16_t, 4> UnbiasedStridedTransposeConvolution2dInt16NchwTest(
4473 armnn::IWorkloadFactory& workloadFactory,
4474 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
4475
4476LayerTestResult<int16_t, 4> UnbiasedStridedTransposeConvolution2dInt16NhwcTest(
4477 armnn::IWorkloadFactory& workloadFactory,
Narumol Prangnawarate6eaf662019-07-08 08:57:17 +01004478 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);