blob: a057f48c876b455062c07aee93d8870233f78e7d [file] [log] [blame]
Moritz Pflanzerb3d25792017-07-26 11:49:37 +01001/*
Gian Marco Iodice0841ca02021-02-01 14:37:02 +00002 * Copyright (c) 2017-2021 Arm Limited.
Moritz Pflanzerb3d25792017-07-26 11:49:37 +01003 *
4 * SPDX-License-Identifier: MIT
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a copy
7 * of this software and associated documentation files (the "Software"), to
8 * deal in the Software without restriction, including without limitation the
9 * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
10 * sell copies of the Software, and to permit persons to whom the Software is
11 * furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be included in all
14 * copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22 * SOFTWARE.
23 */
24#include "arm_compute/core/Types.h"
25#include "arm_compute/runtime/CL/CLTensor.h"
26#include "arm_compute/runtime/CL/CLTensorAllocator.h"
27#include "arm_compute/runtime/CL/functions/CLDirectConvolutionLayer.h"
Moritz Pflanzerb3d25792017-07-26 11:49:37 +010028#include "tests/CL/CLAccessor.h"
29#include "tests/PaddingCalculator.h"
Jaroslaw Rzepecki2ecbada2017-11-29 13:51:34 +000030#include "tests/datasets/DirectConvolutionLayerDataset.h"
Moritz Pflanzera09de0c2017-09-01 20:41:12 +010031#include "tests/datasets/ShapeDatasets.h"
32#include "tests/framework/Asserts.h"
33#include "tests/framework/Macros.h"
34#include "tests/framework/datasets/Datasets.h"
35#include "tests/validation/Validation.h"
36#include "tests/validation/fixtures/DirectConvolutionLayerFixture.h"
Moritz Pflanzerb3d25792017-07-26 11:49:37 +010037
38namespace arm_compute
39{
40namespace test
41{
42namespace validation
43{
44namespace
45{
Giorgio Arena89de1182021-02-04 15:59:03 +000046RelativeTolerance<half> tolerance_fp16(half(0.2)); /**< Tolerance for floating point tests */
47RelativeTolerance<float> tolerance_fp32(0.05f); /**< Tolerance for floating point tests */
48constexpr float tolerance_num = 0.07f; /**< Tolerance number */
49constexpr AbsoluteTolerance<uint8_t> tolerance_qasymm8(1); /**< Tolerance for quantized tests */
Moritz Pflanzerb3d25792017-07-26 11:49:37 +010050
Michalis Spyrou45091732019-05-13 17:41:01 +010051const auto data_strides = combine(framework::dataset::make("StrideX", 1, 3), framework::dataset::make("StrideY", 1, 3));
52const auto data_strides_small = combine(framework::dataset::make("StrideX", 1), framework::dataset::make("StrideY", 1));
53const auto data_ksize_one = combine(framework::dataset::make("PadX", 0, 1), combine(framework::dataset::make("PadY", 0, 1), framework::dataset::make("KernelSize", 1)));
54const auto data_ksize_one_small = combine(framework::dataset::make("PadX", 0), combine(framework::dataset::make("PadY", 0), framework::dataset::make("KernelSize", 1)));
55const auto data_ksize_three = combine(framework::dataset::make("PadX", 0, 2), combine(framework::dataset::make("PadY", 0, 2), framework::dataset::make("KernelSize", 3)));
56const auto data_ksize_five = combine(framework::dataset::make("PadX", 0, 3), combine(framework::dataset::make("PadY", 0, 3), framework::dataset::make("KernelSize", 5)));
57const auto data_ksize_nine = combine(framework::dataset::make("PadX", 0, 3), combine(framework::dataset::make("PadY", 0, 3), framework::dataset::make("KernelSize", 9)));
58const auto data_ksize_nine_small = combine(framework::dataset::make("PadX", 0, 1), combine(framework::dataset::make("PadY", 0, 1), framework::dataset::make("KernelSize", 9)));
Michalis Spyroudef665a2017-08-14 11:26:37 +010059
Michalis Spyrou45091732019-05-13 17:41:01 +010060const auto data_all_kernels = concat(concat(data_ksize_one, data_ksize_three), data_ksize_five);
61
62const auto data = combine(datasets::SmallDirectConvolutionShapes(), combine(data_strides, data_all_kernels));
63const auto data9x9 = combine(datasets::SmallDirectConvolutionShapes(), combine(data_strides, data_ksize_nine));
64const auto data_small = combine(datasets::SmallDirectConvolutionShapes(), combine(data_strides_small, data_ksize_one_small));
65const auto data_small9x9 = combine(datasets::SmallDirectConvolutionShapes(), combine(data_strides_small, data_ksize_nine_small));
Michalis Spyrou064add62018-11-01 18:14:27 +000066
67/** Direct convolution nightly data set. */
Michele Di Giorgioba2cc1a2020-07-15 17:39:30 +010068const auto data_nightly = combine(data, framework::dataset::make("NumKernels", { 1, 4 }));
69const auto data_nightly_9x9 = combine(data9x9, framework::dataset::make("NumKernels", { 1, 4 }));
70const auto data_nightly_usecase = combine(framework::dataset::make("InputShape", { TensorShape{ 3U, 800U, 800U } }),
71 combine(framework::dataset::make("StrideX", { 1 }),
72 combine(framework::dataset::make("StrideY", { 1 }),
73 combine(framework::dataset::make("PadX", { 4 }),
74 combine(framework::dataset::make("PadY", { 4 }),
75 combine(framework::dataset::make("KernelSize", 9),
76 framework::dataset::make("NumKernels", { 16 })))))));
77
Michalis Spyrou064add62018-11-01 18:14:27 +000078/** Direct convolution precommit data set. */
Michalis Spyrou45091732019-05-13 17:41:01 +010079const auto data_precommit = combine(data_small, framework::dataset::make("NumKernels", { 1 }));
80const auto data_precommit_9x9 = combine(data_small9x9, framework::dataset::make("NumKernels", { 1 }));
Vidhya Sudhan Loganathan7485d5a2018-07-04 09:34:00 +010081
Isabella Gottardi3f217ec2018-02-12 14:59:19 +000082/** Activation function Dataset*/
83const auto ActivationFunctionsDataset = framework::dataset::make("ActivationInfo",
Michalis Spyrou5ce99a22019-01-25 14:17:49 +000084{ ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::LU_BOUNDED_RELU, 0.5f) });
Moritz Pflanzerb3d25792017-07-26 11:49:37 +010085} // namespace
86
87TEST_SUITE(CL)
88TEST_SUITE(DirectConvolutionLayer)
89
Michele Di Giorgio97e25802021-03-25 12:37:45 +000090/** Check whether the configuration of a Direct Convolution layer with no
91 * bias leads to a successful execution.
92 */
93TEST_CASE(NoBias, framework::DatasetMode::PRECOMMIT)
94{
95 const auto src_shape = TensorShape(27U, 13U, 2U);
96 const auto weights_shape = TensorShape(3U, 3U, 2U, 4U);
97 const auto bias_shape = TensorShape(4U);
98 const auto dst_shape = TensorShape(25U, 11U, 4U);
99 constexpr auto dt = DataType::F32;
100
101 auto src = create_tensor<CLTensor>(src_shape, dt);
102 auto weights = create_tensor<CLTensor>(weights_shape, dt);
103 auto dst = create_tensor<CLTensor>(dst_shape, dt);
104
105 const auto conv_info = PadStrideInfo(1, 1, 0, 0);
106
107 // Create Direct Convolution function
108 CLDirectConvolutionLayer conv{};
109 conv.configure(&src, &weights, nullptr, &dst, conv_info);
110
111 src.allocator()->allocate();
112 weights.allocator()->allocate();
113 dst.allocator()->allocate();
114
115 library->fill_tensor_value(CLAccessor(src), 1.f);
116 library->fill_tensor_value(CLAccessor(weights), 1.f);
117
118 conv.run();
119
120 // Compute reference to compare
121 SimpleTensor<float> ref_src{ src_shape, dt };
122 SimpleTensor<float> ref_weights{ weights_shape, dt };
123 SimpleTensor<float> ref_bias{ bias_shape, dt };
124 library->fill_tensor_value(ref_src, 1.f);
125 library->fill_tensor_value(ref_weights, 1.f);
126 // No bias
127 library->fill_tensor_value(ref_bias, 0.f);
128 auto ref_dst = reference::convolution_layer<float>(ref_src, ref_weights, ref_bias, dst_shape, conv_info);
129
130 validate(CLAccessor(dst), ref_dst);
131}
132
Georgios Pinitas30902ed2017-11-14 15:32:57 +0000133// *INDENT-OFF*
134// clang-format off
Isabella Gottardi3f217ec2018-02-12 14:59:19 +0000135DATA_TEST_CASE(Validate, framework::DatasetMode::ALL, zip(zip(zip(zip(zip(zip(
Vidhya Sudhan Loganathan7485d5a2018-07-04 09:34:00 +0100136 framework::dataset::make("InputInfo", { TensorInfo(TensorShape(27U, 13U, 2U), 1, DataType::F32), // Mismatching data type input/weights
137 TensorInfo(TensorShape(27U, 13U, 2U), 1, DataType::F32), // Mismatching input feature maps
138 TensorInfo(TensorShape(27U, 13U, 2U), 1, DataType::F32), // Unsupported kernel width
139 TensorInfo(TensorShape(27U, 13U, 2U), 1, DataType::F32), // Non-rectangular weights dimensions
140 TensorInfo(TensorShape(27U, 13U, 2U), 1, DataType::F32), // Invalid weights dimensions
141 TensorInfo(TensorShape(27U, 13U, 2U), 1, DataType::F32), // Invalid stride
142 TensorInfo(TensorShape(27U, 13U, 2U), 1, DataType::F32), // Invalid biases size
143 TensorInfo(TensorShape(27U, 13U, 2U), 1, DataType::F32), // Invalid biases dimensions
144 TensorInfo(TensorShape(27U, 13U, 2U), 1, DataType::F32), // Invalid output size
145 TensorInfo(TensorShape(27U, 13U, 2U), 1, DataType::F32), // Window shrink
146 TensorInfo(TensorShape(32U, 16U, 2U), 1, DataType::F32),
Georgios Pinitas30902ed2017-11-14 15:32:57 +0000147 }),
Vidhya Sudhan Loganathan7485d5a2018-07-04 09:34:00 +0100148 framework::dataset::make("WeightsInfo",{ TensorInfo(TensorShape(3U, 3U, 2U, 4U), 1, DataType::F16),
149 TensorInfo(TensorShape(3U, 3U, 3U, 4U), 1, DataType::F32),
Michalis Spyrou45091732019-05-13 17:41:01 +0100150 TensorInfo(TensorShape(11U, 11U, 2U, 4U), 1, DataType::F32),
Vidhya Sudhan Loganathan7485d5a2018-07-04 09:34:00 +0100151 TensorInfo(TensorShape(5U, 3U, 2U, 4U), 1, DataType::F32),
152 TensorInfo(TensorShape(3U, 3U, 2U, 4U, 3U), 1, DataType::F32),
153 TensorInfo(TensorShape(3U, 3U, 2U, 4U), 1, DataType::F32),
154 TensorInfo(TensorShape(3U, 3U, 2U, 4U), 1, DataType::F32),
155 TensorInfo(TensorShape(3U, 3U, 2U, 4U), 1, DataType::F32),
156 TensorInfo(TensorShape(3U, 3U, 2U, 4U), 1, DataType::F32),
157 TensorInfo(TensorShape(3U, 3U, 2U, 4U), 1, DataType::F32),
158 TensorInfo(TensorShape(1U, 1U, 2U, 4U), 1, DataType::F32),
Georgios Pinitas30902ed2017-11-14 15:32:57 +0000159 })),
Vidhya Sudhan Loganathan7485d5a2018-07-04 09:34:00 +0100160 framework::dataset::make("BiasesInfo",{ TensorInfo(TensorShape(4U), 1, DataType::F32),
161 TensorInfo(TensorShape(4U), 1, DataType::F32),
162 TensorInfo(TensorShape(4U), 1, DataType::F32),
163 TensorInfo(TensorShape(4U), 1, DataType::F32),
164 TensorInfo(TensorShape(4U), 1, DataType::F32),
165 TensorInfo(TensorShape(4U), 1, DataType::F32),
166 TensorInfo(TensorShape(3U), 1, DataType::F32),
167 TensorInfo(TensorShape(4U, 2U), 1, DataType::F32),
168 TensorInfo(TensorShape(4U), 1, DataType::F32),
169 TensorInfo(TensorShape(4U), 1, DataType::F32),
170 TensorInfo(TensorShape(4U), 1, DataType::F32),
Georgios Pinitas30902ed2017-11-14 15:32:57 +0000171 })),
Vidhya Sudhan Loganathan7485d5a2018-07-04 09:34:00 +0100172 framework::dataset::make("OutputInfo",{ TensorInfo(TensorShape(25U, 11U, 4U), 1, DataType::F32),
173 TensorInfo(TensorShape(25U, 11U, 4U), 1, DataType::F32),
174 TensorInfo(TensorShape(25U, 11U, 4U), 1, DataType::F32),
175 TensorInfo(TensorShape(25U, 11U, 4U), 1, DataType::F32),
176 TensorInfo(TensorShape(25U, 11U, 4U), 1, DataType::F32),
177 TensorInfo(TensorShape(25U, 11U, 4U), 1, DataType::F32),
178 TensorInfo(TensorShape(25U, 11U, 4U), 1, DataType::F32),
179 TensorInfo(TensorShape(25U, 11U, 4U), 1, DataType::F32),
180 TensorInfo(TensorShape(26U, 11U, 4U), 1, DataType::F32),
181 TensorInfo(TensorShape(25U, 11U, 4U), 1, DataType::F32),
182 TensorInfo(TensorShape(32U, 16U, 4U), 1, DataType::F32),
Georgios Pinitas30902ed2017-11-14 15:32:57 +0000183 })),
184 framework::dataset::make("ConvInfo", { PadStrideInfo(1, 1, 0, 0),
185 PadStrideInfo(1, 1, 0, 0),
186 PadStrideInfo(1, 1, 0, 0),
187 PadStrideInfo(1, 1, 0, 0),
188 PadStrideInfo(1, 1, 0, 0),
189 PadStrideInfo(3, 3, 0, 0),
190 PadStrideInfo(1, 1, 0, 0),
191 PadStrideInfo(1, 1, 0, 0),
192 PadStrideInfo(1, 1, 0, 0),
193 PadStrideInfo(1, 1, 0, 0),
Giorgio Arena59486342017-12-01 10:42:47 +0000194 PadStrideInfo(1, 1, 0, 0),
Georgios Pinitas30902ed2017-11-14 15:32:57 +0000195 })),
Isabella Gottardi3f217ec2018-02-12 14:59:19 +0000196 framework::dataset::make("ActivationInfo",
Georgios Pinitas30902ed2017-11-14 15:32:57 +0000197{
Isabella Gottardi3f217ec2018-02-12 14:59:19 +0000198 ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::RELU)
199})),
200 framework::dataset::make("Expected", { false, false, false, false, false, false, false, false, false, false, true })),
201 input_info, weights_info, biases_info, output_info, conv_info, act_info, expected)
202{
203 bool is_valid = bool(CLDirectConvolutionLayer::validate(&input_info.clone()->set_is_resizable(false), &weights_info.clone()->set_is_resizable(false), &biases_info.clone()->set_is_resizable(false), &output_info.clone()->set_is_resizable(false), conv_info, act_info));
Georgios Pinitas631c41a2017-12-06 11:53:03 +0000204 ARM_COMPUTE_EXPECT(is_valid == expected, framework::LogLevel::ERRORS);
Georgios Pinitas30902ed2017-11-14 15:32:57 +0000205}
Georgios Pinitas30902ed2017-11-14 15:32:57 +0000206
Moritz Pflanzerb3d25792017-07-26 11:49:37 +0100207template <typename T>
208using CLDirectConvolutionLayerFixture = DirectConvolutionValidationFixture<CLTensor, CLAccessor, CLDirectConvolutionLayer, T>;
Jaroslaw Rzepecki2ecbada2017-11-29 13:51:34 +0000209template <typename T>
Manuel Bottinica62c6f2021-03-23 11:50:34 +0000210using CLDirectConvolutionLayerMixedDataLayoutFixture = DirectConvolutionValidationFixture<CLTensor, CLAccessor, CLDirectConvolutionLayer, T, true>;
211template <typename T>
Jaroslaw Rzepecki2ecbada2017-11-29 13:51:34 +0000212using CLDirectConvolutionValidationWithTensorShapesFixture = DirectConvolutionValidationWithTensorShapesFixture<CLTensor, CLAccessor, CLDirectConvolutionLayer, T>;
Gian Marco Iodice0841ca02021-02-01 14:37:02 +0000213template <typename T>
214using CLDirectConvolutionLayerQuantizedFixture = DirectConvolutionValidationQuantizedFixture<CLTensor, CLAccessor, CLDirectConvolutionLayer, T>;
215template <typename T>
Manuel Bottinica62c6f2021-03-23 11:50:34 +0000216using CLDirectConvolutionLayerQuantizedMixedDataLayoutFixture = DirectConvolutionValidationQuantizedFixture<CLTensor, CLAccessor, CLDirectConvolutionLayer, T, true>;
217template <typename T>
Gian Marco Iodice0841ca02021-02-01 14:37:02 +0000218using CLDirectConvolutionValidationWithTensorShapesQuantizedFixture = DirectConvolutionValidationWithTensorShapesQuantizedFixture<CLTensor, CLAccessor, CLDirectConvolutionLayer, T>;
Moritz Pflanzerb3d25792017-07-26 11:49:37 +0100219
Gian Marco Iodice0841ca02021-02-01 14:37:02 +0000220TEST_SUITE(NHWC)
221TEST_SUITE(FP16)
222FIXTURE_DATA_TEST_CASE(RunSmall, CLDirectConvolutionLayerFixture<half>, framework::DatasetMode::PRECOMMIT,
223 combine(combine(combine(zip(zip(zip(zip(zip(zip(
Gian Marco Iodice2ba39b62021-05-07 09:21:47 +0100224 framework::dataset::make("InputShape", { TensorShape(27U, 13U, 23U),
225 TensorShape(19U, 5U, 16U, 4U),
226 TensorShape(13U, 5U, 17U, 2U),
227 TensorShape(32U, 37U, 13U) } ),
Gian Marco Iodice0841ca02021-02-01 14:37:02 +0000228 framework::dataset::make("StrideX", { 1, 3, 1, 1 })),
229 framework::dataset::make("StrideY", { 1, 3, 2, 1 })),
230 framework::dataset::make("PadX", { 1, 3, 0, 4 })),
231 framework::dataset::make("PadY", { 1, 3, 0, 4 })),
232 framework::dataset::make("KernelSize", { 3, 8, 1, 9 })),
Gian Marco Iodice5c9eed82021-03-19 11:26:20 +0000233 framework::dataset::make("NumKernels", { 17, 3, 1, 19 })),
Gian Marco Iodice0841ca02021-02-01 14:37:02 +0000234 framework::dataset::make("DataType", DataType::F16)),
235 framework::dataset::make("ActivationInfo", ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::RELU) )),
236 framework::dataset::make("DataLayout", DataLayout::NHWC)))
237{
238 validate(CLAccessor(_target), _reference, tolerance_fp16, tolerance_num);
239}
240
241FIXTURE_DATA_TEST_CASE(RunLarge, CLDirectConvolutionLayerFixture<half>, framework::DatasetMode::NIGHTLY,
242 combine(combine(combine(zip(zip(zip(zip(zip(zip(
243 framework::dataset::make("InputShape", { TensorShape(800U, 800U, 3U) } ),
244 framework::dataset::make("StrideX", { 1 })),
245 framework::dataset::make("StrideY", { 1 })),
246 framework::dataset::make("PadX", { 1 })),
247 framework::dataset::make("PadY", { 1 })),
248 framework::dataset::make("KernelSize", { 9 })),
249 framework::dataset::make("NumKernels", { 3 })),
250 framework::dataset::make("DataType", DataType::F16)),
251 framework::dataset::make("ActivationInfo", ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::IDENTITY) )),
252 framework::dataset::make("DataLayout", DataLayout::NHWC)))
253{
254 validate(CLAccessor(_target), _reference, tolerance_fp16, tolerance_num);
255}
256
257TEST_SUITE_END() // FP16
258
259TEST_SUITE(FP32)
260FIXTURE_DATA_TEST_CASE(RunSmall, CLDirectConvolutionLayerFixture<float>, framework::DatasetMode::PRECOMMIT,
261 combine(combine(combine(zip(zip(zip(zip(zip(zip(
Gian Marco Iodice2ba39b62021-05-07 09:21:47 +0100262 framework::dataset::make("InputShape", { TensorShape(27U, 13U, 23U),
263 TensorShape(19U, 5U, 16U, 4U),
264 TensorShape(13U, 5U, 17U, 2U),
265 TensorShape(32U, 37U, 13U) } ),
Gian Marco Iodice0841ca02021-02-01 14:37:02 +0000266 framework::dataset::make("StrideX", { 1, 3, 1, 1 })),
267 framework::dataset::make("StrideY", { 1, 3, 2, 1 })),
268 framework::dataset::make("PadX", { 1, 3, 0, 4 })),
269 framework::dataset::make("PadY", { 1, 3, 0, 4 })),
270 framework::dataset::make("KernelSize", { 3, 8, 1, 9 })),
Gian Marco Iodice5c9eed82021-03-19 11:26:20 +0000271 framework::dataset::make("NumKernels", { 17, 3, 1, 19 })),
Gian Marco Iodice0841ca02021-02-01 14:37:02 +0000272 framework::dataset::make("DataType", DataType::F32)),
273 framework::dataset::make("ActivationInfo", ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::RELU) )),
274 framework::dataset::make("DataLayout", DataLayout::NHWC)))
275{
276 validate(CLAccessor(_target), _reference, tolerance_fp32);
277}
Manuel Bottinica62c6f2021-03-23 11:50:34 +0000278FIXTURE_DATA_TEST_CASE(RunMixedDataLayout, CLDirectConvolutionLayerMixedDataLayoutFixture<float>, framework::DatasetMode::PRECOMMIT,
279 combine(combine(combine(zip(zip(zip(zip(zip(zip(
Gian Marco Iodice2ba39b62021-05-07 09:21:47 +0100280 framework::dataset::make("InputShape", { TensorShape(27U, 13U, 23U),
281 TensorShape(19U, 5U, 16U, 4U),
282 TensorShape(13U, 5U, 17U, 2U),
283 TensorShape(32U, 37U, 13U) } ),
Manuel Bottinica62c6f2021-03-23 11:50:34 +0000284 framework::dataset::make("StrideX", { 1 })),
285 framework::dataset::make("StrideY", { 2 })),
286 framework::dataset::make("PadX", { 1 })),
287 framework::dataset::make("PadY", { 3 })),
288 framework::dataset::make("KernelSize", { 3 })),
289 framework::dataset::make("NumKernels", { 3 })),
290 framework::dataset::make("DataType", DataType::F32)),
291 framework::dataset::make("ActivationInfo", ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::RELU) )),
292 framework::dataset::make("DataLayout", DataLayout::NHWC)))
293{
294 validate(CLAccessor(_target), _reference, tolerance_fp32);
295}
Gian Marco Iodice0841ca02021-02-01 14:37:02 +0000296FIXTURE_DATA_TEST_CASE(RunLarge, CLDirectConvolutionLayerFixture<float>, framework::DatasetMode::NIGHTLY,
297 combine(combine(combine(zip(zip(zip(zip(zip(zip(
298 framework::dataset::make("InputShape", { TensorShape(800U, 800U, 3U) } ),
299 framework::dataset::make("StrideX", { 1 })),
300 framework::dataset::make("StrideY", { 1 })),
301 framework::dataset::make("PadX", { 1 })),
302 framework::dataset::make("PadY", { 1 })),
303 framework::dataset::make("KernelSize", { 9 })),
304 framework::dataset::make("NumKernels", { 3 })),
305 framework::dataset::make("DataType", DataType::F32)),
306 framework::dataset::make("ActivationInfo", ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::IDENTITY) )),
307 framework::dataset::make("DataLayout", DataLayout::NHWC)))
308{
309 validate(CLAccessor(_target), _reference, tolerance_fp32);
310}
Gian Marco Iodice0841ca02021-02-01 14:37:02 +0000311TEST_SUITE_END() // FP32
312
313TEST_SUITE(Quantized)
314TEST_SUITE(QASYMM8)
315FIXTURE_DATA_TEST_CASE(RunSmall, CLDirectConvolutionLayerQuantizedFixture<uint8_t>, framework::DatasetMode::PRECOMMIT,
316 combine(combine(combine(combine(zip(zip(zip(zip(zip(zip(
Gian Marco Iodice2ba39b62021-05-07 09:21:47 +0100317 framework::dataset::make("InputShape", { TensorShape(27U, 13U, 23U),
318 TensorShape(19U, 5U, 16U, 4U),
319 TensorShape(13U, 5U, 17U, 2U),
320 TensorShape(32U, 37U, 13U) } ),
Gian Marco Iodice0841ca02021-02-01 14:37:02 +0000321 framework::dataset::make("StrideX", { 1, 3, 1, 1 })),
322 framework::dataset::make("StrideY", { 1, 3, 2, 1 })),
323 framework::dataset::make("PadX", { 1, 3, 0, 4 })),
324 framework::dataset::make("PadY", { 1, 3, 0, 4 })),
325 framework::dataset::make("KernelSize", { 3, 8, 1, 9 })),
326 framework::dataset::make("NumKernels", { 7, 3, 1, 3 })),
327 framework::dataset::make("DataType", DataType::QASYMM8)),
328 framework::dataset::make("QuantizationInfo", QuantizationInfo(1.1f / 255, 10))),
329 framework::dataset::make("ActivationInfo", ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::RELU) )),
330 framework::dataset::make("DataLayout", DataLayout::NHWC)))
331{
332 validate(CLAccessor(_target), _reference, tolerance_qasymm8);
333}
Manuel Bottinica62c6f2021-03-23 11:50:34 +0000334FIXTURE_DATA_TEST_CASE(RunMixedDataLayout, CLDirectConvolutionLayerQuantizedMixedDataLayoutFixture<uint8_t>, framework::DatasetMode::PRECOMMIT,
335 combine(combine(combine(combine(zip(zip(zip(zip(zip(zip(
Gian Marco Iodice2ba39b62021-05-07 09:21:47 +0100336 framework::dataset::make("InputShape", { TensorShape(27U, 13U, 23U),
337 TensorShape(19U, 5U, 16U, 4U),
338 TensorShape(13U, 5U, 17U, 2U),
339 TensorShape(32U, 37U, 13U) } ),
Manuel Bottinica62c6f2021-03-23 11:50:34 +0000340 framework::dataset::make("StrideX", { 1 })),
341 framework::dataset::make("StrideY", { 2 })),
342 framework::dataset::make("PadX", { 1 })),
343 framework::dataset::make("PadY", { 1 })),
344 framework::dataset::make("KernelSize", { 3 })),
345 framework::dataset::make("NumKernels", { 3 })),
346 framework::dataset::make("DataType", DataType::QASYMM8)),
347 framework::dataset::make("QuantizationInfo", QuantizationInfo(1.1f / 255, 10))),
348 framework::dataset::make("ActivationInfo", ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::RELU) )),
349 framework::dataset::make("DataLayout", DataLayout::NHWC)))
350{
351 validate(CLAccessor(_target), _reference, tolerance_qasymm8);
352}
Gian Marco Iodice0841ca02021-02-01 14:37:02 +0000353FIXTURE_DATA_TEST_CASE(RunLarge, CLDirectConvolutionLayerQuantizedFixture<uint8_t>, framework::DatasetMode::NIGHTLY,
354 combine(combine(combine(combine(zip(zip(zip(zip(zip(zip(
355 framework::dataset::make("InputShape", { TensorShape(800U, 800U, 3U) } ),
356 framework::dataset::make("StrideX", { 1 })),
357 framework::dataset::make("StrideY", { 1 })),
358 framework::dataset::make("PadX", { 1 })),
359 framework::dataset::make("PadY", { 1 })),
360 framework::dataset::make("KernelSize", { 9 })),
361 framework::dataset::make("NumKernels", { 3 })),
362 framework::dataset::make("DataType", DataType::QASYMM8)),
363 framework::dataset::make("QuantizationInfo", QuantizationInfo(2.f / 255, 10))),
364 framework::dataset::make("ActivationInfo", ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::RELU) )),
365 framework::dataset::make("DataLayout", DataLayout::NHWC)))
366{
367 validate(CLAccessor(_target), _reference, tolerance_qasymm8);
368}
369
370TEST_SUITE_END() // QASYMM8
Gian Marco Iodice0841ca02021-02-01 14:37:02 +0000371TEST_SUITE(QASYMM8_SIGNED)
372FIXTURE_DATA_TEST_CASE(RunSmall, CLDirectConvolutionLayerQuantizedFixture<int8_t>, framework::DatasetMode::PRECOMMIT,
373 combine(combine(combine(combine(zip(zip(zip(zip(zip(zip(
Gian Marco Iodice2ba39b62021-05-07 09:21:47 +0100374 framework::dataset::make("InputShape", { TensorShape(27U, 13U, 23U),
375 TensorShape(19U, 5U, 16U, 4U),
376 TensorShape(13U, 5U, 17U, 2U),
377 TensorShape(32U, 37U, 13U) } ),
Gian Marco Iodice0841ca02021-02-01 14:37:02 +0000378 framework::dataset::make("StrideX", { 1, 3, 1, 1 })),
379 framework::dataset::make("StrideY", { 1, 3, 2, 1 })),
380 framework::dataset::make("PadX", { 1, 3, 0, 4 })),
381 framework::dataset::make("PadY", { 1, 3, 0, 4 })),
382 framework::dataset::make("KernelSize", { 3, 8, 1, 9 })),
383 framework::dataset::make("NumKernels", { 7, 3, 1, 3 })),
384 framework::dataset::make("DataType", DataType::QASYMM8_SIGNED)),
385 framework::dataset::make("QuantizationInfo", QuantizationInfo(2.f / 255, 10))),
386 framework::dataset::make("ActivationInfo", ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::RELU) )),
387 framework::dataset::make("DataLayout", DataLayout::NHWC)))
388{
389 validate(CLAccessor(_target), _reference, tolerance_qasymm8);
390}
Manuel Bottinica62c6f2021-03-23 11:50:34 +0000391FIXTURE_DATA_TEST_CASE(RunMixedDataLayout, CLDirectConvolutionLayerQuantizedMixedDataLayoutFixture<int8_t>, framework::DatasetMode::PRECOMMIT,
392 combine(combine(combine(combine(zip(zip(zip(zip(zip(zip(
Gian Marco Iodice2ba39b62021-05-07 09:21:47 +0100393 framework::dataset::make("InputShape", { TensorShape(27U, 13U, 23U),
394 TensorShape(19U, 5U, 16U, 4U),
395 TensorShape(13U, 5U, 17U, 2U),
396 TensorShape(32U, 37U, 13U) } ),
Manuel Bottinica62c6f2021-03-23 11:50:34 +0000397 framework::dataset::make("StrideX", { 1 })),
398 framework::dataset::make("StrideY", { 1 })),
399 framework::dataset::make("PadX", { 1 })),
400 framework::dataset::make("PadY", { 1 })),
401 framework::dataset::make("KernelSize", { 3 })),
402 framework::dataset::make("NumKernels", { 3 })),
403 framework::dataset::make("DataType", DataType::QASYMM8_SIGNED)),
404 framework::dataset::make("QuantizationInfo", QuantizationInfo(2.f / 255, 10))),
405 framework::dataset::make("ActivationInfo", ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::RELU) )),
406 framework::dataset::make("DataLayout", DataLayout::NHWC)))
407{
408 validate(CLAccessor(_target), _reference, tolerance_qasymm8);
409}
Gian Marco Iodice0841ca02021-02-01 14:37:02 +0000410FIXTURE_DATA_TEST_CASE(RunLarge, CLDirectConvolutionLayerQuantizedFixture<int8_t>, framework::DatasetMode::NIGHTLY,
411 combine(combine(combine(combine(zip(zip(zip(zip(zip(zip(
412 framework::dataset::make("InputShape", { TensorShape(800U, 800U, 3U) } ),
413 framework::dataset::make("StrideX", { 1 })),
414 framework::dataset::make("StrideY", { 1 })),
415 framework::dataset::make("PadX", { 1 })),
416 framework::dataset::make("PadY", { 1 })),
417 framework::dataset::make("KernelSize", { 9 })),
418 framework::dataset::make("NumKernels", { 3 })),
419 framework::dataset::make("DataType", DataType::QASYMM8_SIGNED)),
420 framework::dataset::make("QuantizationInfo", QuantizationInfo(2.f / 255, 10))),
421 framework::dataset::make("ActivationInfo", ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::RELU) )),
422 framework::dataset::make("DataLayout", DataLayout::NHWC)))
423{
424 validate(CLAccessor(_target), _reference, tolerance_qasymm8);
425}
426TEST_SUITE_END() // QASYMM8_SIGNED
427TEST_SUITE_END() // Quantized
428TEST_SUITE_END() // NHWC
429
430// clang-format on
431// *INDENT-ON*
432TEST_SUITE(NCHW)
Moritz Pflanzerb3d25792017-07-26 11:49:37 +0100433TEST_SUITE(Float)
434TEST_SUITE(FP16)
Michalis Spyrou064add62018-11-01 18:14:27 +0000435FIXTURE_DATA_TEST_CASE(RunSmall, CLDirectConvolutionLayerFixture<half>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(data_precommit, framework::dataset::make("DataType", DataType::F16)),
436 ActivationFunctionsDataset),
437 framework::dataset::make("DataLayout", DataLayout::NCHW)))
Moritz Pflanzerb3d25792017-07-26 11:49:37 +0100438{
439 // Validate output
steniu013e05e4e2017-08-25 17:18:01 +0100440 validate(CLAccessor(_target), _reference, tolerance_fp16, tolerance_num);
Moritz Pflanzerb3d25792017-07-26 11:49:37 +0100441}
Michalis Spyrou064add62018-11-01 18:14:27 +0000442FIXTURE_DATA_TEST_CASE(RunLarge, CLDirectConvolutionLayerFixture<half>, framework::DatasetMode::NIGHTLY, combine(combine(combine(data_nightly, framework::dataset::make("DataType", DataType::F16)),
443 ActivationFunctionsDataset),
444 framework::dataset::make("DataLayout", DataLayout::NCHW)))
445{
446 // Validate output
447 validate(CLAccessor(_target), _reference, tolerance_fp16, tolerance_num);
448}
449TEST_SUITE_END() // FP16
Moritz Pflanzerb3d25792017-07-26 11:49:37 +0100450
451TEST_SUITE(FP32)
Michalis Spyrou064add62018-11-01 18:14:27 +0000452FIXTURE_DATA_TEST_CASE(RunSmall, CLDirectConvolutionLayerFixture<float>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(data_precommit, framework::dataset::make("DataType",
453 DataType::F32)),
454 ActivationFunctionsDataset),
Gian Marco Iodice0841ca02021-02-01 14:37:02 +0000455 framework::dataset::make("DataLayout", { DataLayout::NCHW })))
Moritz Pflanzerb3d25792017-07-26 11:49:37 +0100456{
Moritz Pflanzerb3d25792017-07-26 11:49:37 +0100457 validate(CLAccessor(_target), _reference, tolerance_fp32);
458}
Manuel Bottinica62c6f2021-03-23 11:50:34 +0000459FIXTURE_DATA_TEST_CASE(RunMixedDataLayout, CLDirectConvolutionLayerMixedDataLayoutFixture<float>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(data_precommit, framework::dataset::make("DataType",
460 DataType::F32)),
461 ActivationFunctionsDataset),
462 framework::dataset::make("DataLayout", { DataLayout::NCHW })))
463{
464 validate(CLAccessor(_target), _reference, tolerance_fp32);
465}
Michalis Spyrou064add62018-11-01 18:14:27 +0000466FIXTURE_DATA_TEST_CASE(RunLarge, CLDirectConvolutionLayerFixture<float>, framework::DatasetMode::NIGHTLY, combine(combine(combine(data_nightly, framework::dataset::make("DataType", DataType::F32)),
467 ActivationFunctionsDataset),
Gian Marco Iodice0841ca02021-02-01 14:37:02 +0000468 framework::dataset::make("DataLayout", { DataLayout::NCHW })))
Michalis Spyrou064add62018-11-01 18:14:27 +0000469{
470 validate(CLAccessor(_target), _reference, tolerance_fp32);
471}
472TEST_SUITE_END() // FP32
Jaroslaw Rzepecki2ecbada2017-11-29 13:51:34 +0000473
474TEST_SUITE(FP32_CustomDataset)
Michalis Spyrou80943252019-01-10 17:19:50 +0000475FIXTURE_DATA_TEST_CASE(Run, CLDirectConvolutionValidationWithTensorShapesFixture<float>, framework::DatasetMode::NIGHTLY, combine(combine(datasets::DirectConvolutionLayerDataset(),
Isabella Gottardi3f217ec2018-02-12 14:59:19 +0000476 framework::dataset::make("DataType", DataType::F32)),
477 ActivationFunctionsDataset))
Jaroslaw Rzepecki2ecbada2017-11-29 13:51:34 +0000478{
479 // Validate output
480 validate(CLAccessor(_target), _reference, tolerance_fp32);
481}
Michalis Spyrou064add62018-11-01 18:14:27 +0000482TEST_SUITE_END() // FP32_CustomDataset
483TEST_SUITE_END() // Float
Moritz Pflanzerb3d25792017-07-26 11:49:37 +0100484
Isabella Gottardi3f217ec2018-02-12 14:59:19 +0000485const auto QuantizedActivationFunctionsDataset = framework::dataset::make("ActivationInfo",
486{
487 ActivationLayerInfo(),
488 ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::RELU),
489 ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::LU_BOUNDED_RELU, 6.f)
490});
Chunosovd621bca2017-11-03 17:33:15 +0700491TEST_SUITE(Quantized)
492TEST_SUITE(QASYMM8)
Manuel Bottinica62c6f2021-03-23 11:50:34 +0000493FIXTURE_DATA_TEST_CASE(RunMixedDataLayout, CLDirectConvolutionLayerQuantizedMixedDataLayoutFixture<uint8_t>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(combine(data_precommit,
494 framework::dataset::make("DataType", DataType::QASYMM8)),
495 framework::dataset::make("QuantizationInfo", { QuantizationInfo(2.f / 255, 10)})),
496 QuantizedActivationFunctionsDataset),
497 framework::dataset::make("DataLayout", { DataLayout::NCHW })))
498{
499 // Validate output
500 validate(CLAccessor(_target), _reference, tolerance_qasymm8);
501}
Giorgio Arenae620a832020-02-17 16:33:20 +0000502FIXTURE_DATA_TEST_CASE(RunSmall, CLDirectConvolutionLayerQuantizedFixture<uint8_t>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(combine(data_precommit,
Manuel Bottinica62c6f2021-03-23 11:50:34 +0000503 framework::dataset::make("DataType", DataType::QASYMM8)),
Michele Di Giorgio14cbfb22019-10-23 10:53:10 +0100504 framework::dataset::make("QuantizationInfo", { QuantizationInfo(2.f / 255, 10), QuantizationInfo(1.1f, 10) })),
Giorgio Arenae620a832020-02-17 16:33:20 +0000505 QuantizedActivationFunctionsDataset),
Gian Marco Iodice0841ca02021-02-01 14:37:02 +0000506 framework::dataset::make("DataLayout", { DataLayout::NCHW })))
Sang-Hoon Parkab5b1a22019-10-15 09:29:13 +0100507{
508 // Validate output
509 validate(CLAccessor(_target), _reference, tolerance_qasymm8);
510}
Giorgio Arenae620a832020-02-17 16:33:20 +0000511FIXTURE_DATA_TEST_CASE(RunSmall9x9, CLDirectConvolutionLayerQuantizedFixture<uint8_t>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(combine(data_precommit_9x9,
512 framework::dataset::make("DataType",
513 DataType::QASYMM8)),
Manuel Bottini136174a2020-11-24 13:04:19 +0000514 framework::dataset::make("QuantizationInfo", { QuantizationInfo(3.f / 255, 10), QuantizationInfo(1.1f, 10) })),
Giorgio Arenae620a832020-02-17 16:33:20 +0000515 QuantizedActivationFunctionsDataset),
Gian Marco Iodice0841ca02021-02-01 14:37:02 +0000516 framework::dataset::make("DataLayout", { DataLayout::NCHW })))
Michalis Spyrou064add62018-11-01 18:14:27 +0000517{
518 // Validate output
519 validate(CLAccessor(_target), _reference, tolerance_qasymm8);
520}
Giorgio Arenae620a832020-02-17 16:33:20 +0000521FIXTURE_DATA_TEST_CASE(RunLarge, CLDirectConvolutionLayerQuantizedFixture<uint8_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(combine(data_nightly, framework::dataset::make("DataType",
Sang-Hoon Parkab5b1a22019-10-15 09:29:13 +0100522 DataType::QASYMM8)),
Michele Di Giorgio14cbfb22019-10-23 10:53:10 +0100523 framework::dataset::make("QuantizationInfo", { QuantizationInfo(2.f / 255, 10), QuantizationInfo(1.1f, 10) })),
Giorgio Arenae620a832020-02-17 16:33:20 +0000524 QuantizedActivationFunctionsDataset),
Gian Marco Iodice0841ca02021-02-01 14:37:02 +0000525 framework::dataset::make("DataLayout", { DataLayout::NCHW })))
Giorgio Arenae620a832020-02-17 16:33:20 +0000526{
527 // Validate output
528 validate(CLAccessor(_target), _reference, tolerance_qasymm8);
529}
530FIXTURE_DATA_TEST_CASE(RunLarge9x9, CLDirectConvolutionLayerQuantizedFixture<uint8_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(combine(data_nightly_9x9,
531 framework::dataset::make("DataType",
532 DataType::QASYMM8)),
Manuel Bottini136174a2020-11-24 13:04:19 +0000533 framework::dataset::make("QuantizationInfo", { QuantizationInfo(3.f / 255, 10), QuantizationInfo(1.1f, 10) })),
Giorgio Arenae620a832020-02-17 16:33:20 +0000534 QuantizedActivationFunctionsDataset),
535 framework::dataset::make("DataLayout", { DataLayout::NCHW })))
Sang-Hoon Parkab5b1a22019-10-15 09:29:13 +0100536{
537 // Validate output
538 validate(CLAccessor(_target), _reference, tolerance_qasymm8);
539}
540
Michalis Spyrou064add62018-11-01 18:14:27 +0000541TEST_SUITE_END() // QASYMM8
Jaroslaw Rzepecki2ecbada2017-11-29 13:51:34 +0000542
543TEST_SUITE(QASYMM8_CustomDataset)
Giorgio Arenae620a832020-02-17 16:33:20 +0000544FIXTURE_DATA_TEST_CASE(Run, CLDirectConvolutionValidationWithTensorShapesQuantizedFixture<uint8_t>, framework::DatasetMode::NIGHTLY,
545 combine(combine(combine(combine(datasets::DirectConvolutionLayerDataset(),
546 framework::dataset::make("DataType", DataType::QASYMM8)),
547 framework::dataset::make("QuantizationInfo", { QuantizationInfo(2.f / 255, 127), QuantizationInfo(1.1f, 10) })),
548 QuantizedActivationFunctionsDataset),
Gian Marco Iodice0841ca02021-02-01 14:37:02 +0000549 framework::dataset::make("DataLayout", { DataLayout::NCHW })))
Jaroslaw Rzepecki2ecbada2017-11-29 13:51:34 +0000550{
551 // Validate output
552 validate(CLAccessor(_target), _reference, tolerance_qasymm8);
553}
Michalis Spyrou064add62018-11-01 18:14:27 +0000554TEST_SUITE_END() // QASYMM8_CustomDataset
Sheri Zhang681f2d42020-02-20 11:23:08 +0000555
556TEST_SUITE(QASYMM8_SIGNED)
557
Giorgio Arenae620a832020-02-17 16:33:20 +0000558FIXTURE_DATA_TEST_CASE(RunSmall, CLDirectConvolutionLayerQuantizedFixture<int8_t>, framework::DatasetMode::ALL, combine(combine(combine(combine(data_precommit, framework::dataset::make("DataType",
Sheri Zhang681f2d42020-02-20 11:23:08 +0000559 DataType::QASYMM8_SIGNED)),
560 framework::dataset::make("QuantizationInfo", { QuantizationInfo(2.f / 255, 10), QuantizationInfo(1.1f, -10) })),
Giorgio Arenae620a832020-02-17 16:33:20 +0000561 QuantizedActivationFunctionsDataset),
562 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
Sheri Zhang681f2d42020-02-20 11:23:08 +0000563{
564 // Validate output
565 validate(CLAccessor(_target), _reference, tolerance_qasymm8);
566}
Manuel Bottinica62c6f2021-03-23 11:50:34 +0000567FIXTURE_DATA_TEST_CASE(RunMixedDataLayout, CLDirectConvolutionLayerQuantizedMixedDataLayoutFixture<int8_t>, framework::DatasetMode::ALL, combine(combine(combine(combine(data_precommit, framework::dataset::make("DataType",
568 DataType::QASYMM8_SIGNED)),
569 framework::dataset::make("QuantizationInfo", { QuantizationInfo(1.1f, -10) })),
570 QuantizedActivationFunctionsDataset),
571 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
572{
573 // Validate output
574 validate(CLAccessor(_target), _reference, tolerance_qasymm8);
575}
Giorgio Arenae620a832020-02-17 16:33:20 +0000576FIXTURE_DATA_TEST_CASE(RunSmall9x9, CLDirectConvolutionLayerQuantizedFixture<int8_t>, framework::DatasetMode::ALL, combine(combine(combine(combine(data_precommit_9x9,
Sheri Zhang681f2d42020-02-20 11:23:08 +0000577 framework::dataset::make("DataType",
578 DataType::QASYMM8_SIGNED)),
579 framework::dataset::make("QuantizationInfo", { QuantizationInfo(2.f / 255, 10), QuantizationInfo(1.1f, 10) })),
Giorgio Arenae620a832020-02-17 16:33:20 +0000580 QuantizedActivationFunctionsDataset),
581 framework::dataset::make("DataLayout", { DataLayout::NCHW })))
Sheri Zhang681f2d42020-02-20 11:23:08 +0000582{
583 // Validate output
584 validate(CLAccessor(_target), _reference, tolerance_qasymm8);
585}
586
587FIXTURE_DATA_TEST_CASE(RunCustomDataset, CLDirectConvolutionValidationWithTensorShapesQuantizedFixture<int8_t>, framework::DatasetMode::NIGHTLY,
Giorgio Arenae620a832020-02-17 16:33:20 +0000588 combine(combine(combine(combine(datasets::DirectConvolutionLayerDataset(),
589 framework::dataset::make("DataType", DataType::QASYMM8_SIGNED)),
590 framework::dataset::make("QuantizationInfo", { QuantizationInfo(2.f / 255, 127), QuantizationInfo(1.1f, 10) })),
591 QuantizedActivationFunctionsDataset),
Gian Marco Iodice0841ca02021-02-01 14:37:02 +0000592 framework::dataset::make("DataLayout", { DataLayout::NCHW })))
Sheri Zhang681f2d42020-02-20 11:23:08 +0000593{
594 // Validate output
595 validate(CLAccessor(_target), _reference, tolerance_qasymm8);
596}
597
598TEST_SUITE_END() // QASYMM8_SIGNED
Michalis Spyrou064add62018-11-01 18:14:27 +0000599TEST_SUITE_END() // Quantized
Gian Marco Iodice0841ca02021-02-01 14:37:02 +0000600TEST_SUITE_END() // NCHW
Michalis Spyrou064add62018-11-01 18:14:27 +0000601TEST_SUITE_END() // DirectConvolutionLayer
Gian Marco Iodice0841ca02021-02-01 14:37:02 +0000602TEST_SUITE_END() // CL
603
Moritz Pflanzerb3d25792017-07-26 11:49:37 +0100604} // namespace validation
605} // namespace test
Anthony Barbier1c0d0ff2018-01-31 13:05:09 +0000606} // namespace arm_compute