blob: 6b12fc01a10666c7c0c37e1ab77ed24a7550751d [file] [log] [blame]
Michalis Spyrou780db4e2017-11-23 09:49:51 +00001/*
Viet-Hoa Do019a7d92023-06-27 16:33:57 +01002 * Copyright (c) 2017-2023 Arm Limited.
Michalis Spyrou780db4e2017-11-23 09:49:51 +00003 *
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 */
Michalis Spyrou780db4e2017-11-23 09:49:51 +000024#include "arm_compute/core/Types.h"
Michele Di Giorgioed5a4922018-09-13 16:22:01 +010025#include "arm_compute/core/utils/misc/ShapeCalculator.h"
Michalis Spyrou780db4e2017-11-23 09:49:51 +000026#include "arm_compute/runtime/CL/CLTensor.h"
27#include "arm_compute/runtime/CL/CLTensorAllocator.h"
28#include "arm_compute/runtime/CL/functions/CLDeconvolutionLayer.h"
29#include "tests/CL/CLAccessor.h"
30#include "tests/PaddingCalculator.h"
31#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/DeconvolutionLayerFixture.h"
37
38namespace arm_compute
39{
40namespace test
41{
42namespace validation
43{
44namespace
45{
Georgios Pinitas793f87d2018-05-18 20:08:58 +010046constexpr AbsoluteTolerance<float> tolerance_fp32(0.001f); /**< Tolerance for floating point tests */
47RelativeTolerance<half_float::half> tolerance_f16(half_float::half(0.2)); /**< Tolerance value for comparing reference's for DataType::F16 */
Giuseppe Rossini0a958cb2020-01-16 16:38:56 +000048constexpr AbsoluteTolerance<float> tolerance_qasymm8(1.0); /**< Tolerance value for comparing reference's output against implementation's output for quantized data types */
Georgios Pinitas793f87d2018-05-18 20:08:58 +010049constexpr float tolerance_num = 0.07f; /**< Tolerance number */
Michalis Spyrou780db4e2017-11-23 09:49:51 +000050
Manuel Bottini6e10aa32020-04-30 13:28:23 +010051const auto data9x9_small_asymm = framework::dataset::make("InputShape", TensorShape{ 10U, 10U, 1U, 1U }) *framework::dataset::make("StrideX", 2) *framework::dataset::make("StrideY",
52 2)
53 *framework::dataset::make("PadLeft", 3)
54 *framework::dataset::make("PadRight", 4) *framework::dataset::make("PadTop", 3) *framework::dataset::make("PadBottom", 4) *framework::dataset::make("NumKernels", { 1 });
55
56const auto data9x9_large_asymm = framework::dataset::make("InputShape", TensorShape{ 640U, 360U, 56U, 1U }) *framework::dataset::make("StrideX", 2) *framework::dataset::make("StrideY",
57 2)
58 *framework::dataset::make("PadLeft", 3)
59 *framework::dataset::make("PadRight", 4) *framework::dataset::make("PadTop", 3) *framework::dataset::make("PadBottom", 4) *framework::dataset::make("NumKernels", { 1 });
60
Michalis Spyrou5ce99a22019-01-25 14:17:49 +000061const auto data4x4 = datasets::SmallDeconvolutionShapes() * framework::dataset::make("StrideX", 1, 4) * framework::dataset::make("StrideY", 1, 4) * framework::dataset::make("PadX", 0, 3)
giuros01a69a88b2019-01-31 16:29:19 +000062 * framework::dataset::make("PadY", 0, 3) * framework::dataset::make("NumKernels", { 3 });
Georgios Pinitasced7a8d2018-02-01 16:31:33 +000063
Michalis Spyrou780db4e2017-11-23 09:49:51 +000064const auto data3x3 = datasets::SmallDeconvolutionShapes() * framework::dataset::make("StrideX", 1, 4) * framework::dataset::make("StrideY", 1, 4) * framework::dataset::make("PadX", 0, 2)
giuros01a69a88b2019-01-31 16:29:19 +000065 * framework::dataset::make("PadY", 0, 2) * framework::dataset::make("NumKernels", { 3 });
Michalis Spyrou780db4e2017-11-23 09:49:51 +000066
Matthew Jacksonb9070a42019-08-22 16:13:27 +010067const auto data3x3_asymm = datasets::SmallDeconvolutionShapes() * framework::dataset::make("StrideX", 1, 2) * framework::dataset::make("StrideY", 1, 2) * framework::dataset::make("PadLeft", 0, 1)
68 * framework::dataset::make("PadRight", 0, 1) * framework::dataset::make("PadTop", 0, 1) * framework::dataset::make("PadBottom", 0, 1) * framework::dataset::make("NumKernels", { 3 });
69
Michalis Spyrou064add62018-11-01 18:14:27 +000070const auto data3x3_precommit = datasets::SmallDeconvolutionShapes() * framework::dataset::make("StrideX", 1, 2) * framework::dataset::make("StrideY", 1, 2) * framework::dataset::make("PadX", 0, 2)
giuros01a69a88b2019-01-31 16:29:19 +000071 * framework::dataset::make("PadY", 0, 2) * framework::dataset::make("NumKernels", { 3 });
Michalis Spyrou064add62018-11-01 18:14:27 +000072
Gunes Bayirec0113d2022-11-09 09:26:27 +000073const auto data3x3_precommit_large_channels = datasets::SmallDeconvolutionShapesWithLargerChannels() * framework::dataset::make("StrideX", 2) * framework::dataset::make("StrideY",
Gunes Bayir59450702022-12-12 09:29:06 +000074 2)
75 * framework::dataset::make("PadX", 1)
Gunes Bayirec0113d2022-11-09 09:26:27 +000076 * framework::dataset::make("PadY", 2) * framework::dataset::make("NumKernels", { 5 });
77
giuros0146a49a02019-04-01 13:50:22 +010078const auto data2x2_precommit = datasets::SmallDeconvolutionShapes() * framework::dataset::make("StrideX", 2) * framework::dataset::make("StrideY", 2) * framework::dataset::make("PadX", 1)
79 * framework::dataset::make("PadY", 1) * framework::dataset::make("NumKernels", { 3 });
80
Michalis Spyrou780db4e2017-11-23 09:49:51 +000081const auto data1x1 = datasets::SmallDeconvolutionShapes() * framework::dataset::make("StrideX", 1, 4) * framework::dataset::make("StrideY", 1, 4) * framework::dataset::make("PadX", 0, 1)
giuros01a69a88b2019-01-31 16:29:19 +000082 * framework::dataset::make("PadY", 0, 1) * framework::dataset::make("NumKernels", { 3 });
Michalis Spyrou780db4e2017-11-23 09:49:51 +000083
Viet-Hoa Do019a7d92023-06-27 16:33:57 +010084const auto data5x1 = datasets::SmallDeconvolutionShapes() * framework::dataset::make("StrideX", 1, 4) * framework::dataset::make("StrideY", 1, 4) * framework::dataset::make("PadX", 0, 1)
85 * framework::dataset::make("PadY", 0, 1) * framework::dataset::make("NumKernels", { 3 });
86
giuros0146a49a02019-04-01 13:50:22 +010087const auto data_layouts_dataset = framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC });
Manuel Bottini9f0d5ec2019-08-19 13:31:38 +010088
89const auto add_bias_dataset = framework::dataset::make("AddBias", { true, false });
Michalis Spyrou780db4e2017-11-23 09:49:51 +000090} // namespace
91
92TEST_SUITE(CL)
93TEST_SUITE(DeconvolutionLayer)
94
Michalis Spyrou780db4e2017-11-23 09:49:51 +000095// *INDENT-OFF*
96// clang-format off
Manuel Bottinic1b76fa2019-06-17 12:04:40 +010097DATA_TEST_CASE(Validate, framework::DatasetMode::ALL, zip(zip(zip(zip(zip(
Freddie Liardete92b0452021-04-22 14:55:17 +010098 framework::dataset::make("InputInfo", { TensorInfo(TensorShape(27U, 13U, 2U), 1, DataType::F32), // Mismatching data type
99 TensorInfo(TensorShape(27U, 13U, 2U), 1, DataType::F32), // Invalid weights shape
100 TensorInfo(TensorShape(27U, 13U, 2U), 1, DataType::F16), // Non supported data type
Gunes Bayirec0113d2022-11-09 09:26:27 +0000101 TensorInfo(TensorShape(27U, 13U, 2U), 1, DataType::F32), // Invalid bias shape
Freddie Liardete92b0452021-04-22 14:55:17 +0100102 TensorInfo(TensorShape(13U, 11U, 4U, 3U), 1, DataType::F32), // Window shrink
103 TensorInfo(TensorShape(32U, 16U, 2U), 1, DataType::F32),
Gunes Bayirec0113d2022-11-09 09:26:27 +0000104 TensorInfo(TensorShape(2U, 13U, 27U), 1, DataType::F32, DataLayout::NHWC), // Mismatching data type
105 TensorInfo(TensorShape(2U, 13U, 27U), 1, DataType::F32, DataLayout::NHWC), // Invalid weights shape
106 TensorInfo(TensorShape(27U, 13U, 2U), 1, DataType::F16, DataLayout::NHWC), // Non supported data type
107 TensorInfo(TensorShape(2U, 13U, 27U), 1, DataType::F32, DataLayout::NHWC), // Invalid bias shape
108 TensorInfo(TensorShape(4U, 11U, 13U, 3U), 1, DataType::F32, DataLayout::NHWC), // Window shrink
109 TensorInfo(TensorShape(2U, 16U, 32U), 1, DataType::F32, DataLayout::NHWC),
Freddie Liardete92b0452021-04-22 14:55:17 +0100110 }),
Vidhya Sudhan Loganathan7485d5a2018-07-04 09:34:00 +0100111 framework::dataset::make("WeightsInfo", { TensorInfo(TensorShape(3U, 3U, 2U, 2U), 1, DataType::F16),
Freddie Liardete92b0452021-04-22 14:55:17 +0100112 TensorInfo(TensorShape(3U, 3U, 2U, 4U), 1, DataType::F32),
113 TensorInfo(TensorShape(3U, 3U, 2U, 2U), 1, DataType::F16),
114 TensorInfo(TensorShape(3U, 2U, 2U, 2U), 1, DataType::F32),
115 TensorInfo(TensorShape(3U, 3U, 4U), 1, DataType::F32),
Vidhya Sudhan Loganathan7485d5a2018-07-04 09:34:00 +0100116 TensorInfo(TensorShape(1U, 1U, 2U, 4U), 1, DataType::F32),
Gunes Bayirec0113d2022-11-09 09:26:27 +0000117 TensorInfo(TensorShape(2U, 3U, 3U, 2U), 1, DataType::F16, DataLayout::NHWC),
118 TensorInfo(TensorShape(2U, 3U, 3U, 4U), 1, DataType::F32, DataLayout::NHWC),
119 TensorInfo(TensorShape(3U, 3U, 2U, 2U), 1, DataType::F16, DataLayout::NHWC),
120 TensorInfo(TensorShape(2U, 2U, 3U, 2U), 1, DataType::F32, DataLayout::NHWC),
121 TensorInfo(TensorShape(4U, 3U, 3U), 1, DataType::F32, DataLayout::NHWC),
122 TensorInfo(TensorShape(2U, 2U, 2U, 4U), 1, DataType::F32, DataLayout::NHWC),
Freddie Liardete92b0452021-04-22 14:55:17 +0100123 })),
124 framework::dataset::make("BiasInfo", { TensorInfo(TensorShape(1U), 1, DataType::F16),
125 TensorInfo(TensorShape(1U), 1, DataType::F32),
126 TensorInfo(TensorShape(1U), 1, DataType::F32),
127 TensorInfo(TensorShape(25U, 11U), 1, DataType::F32),
128 TensorInfo(TensorShape(1U), 1, DataType::F32),
129 TensorInfo(TensorShape(4U), 1, DataType::F32),
Gunes Bayirec0113d2022-11-09 09:26:27 +0000130 TensorInfo(TensorShape(1U), 1, DataType::F16, DataLayout::NHWC),
131 TensorInfo(TensorShape(1U), 1, DataType::F32, DataLayout::NHWC),
132 TensorInfo(TensorShape(1U), 1, DataType::F32, DataLayout::NHWC),
133 TensorInfo(TensorShape(25U, 11U), 1, DataType::F32, DataLayout::NHWC),
134 TensorInfo(TensorShape(1U), 1, DataType::F32, DataLayout::NHWC),
135 TensorInfo(TensorShape(4U), 1, DataType::F32, DataLayout::NHWC),
Freddie Liardete92b0452021-04-22 14:55:17 +0100136 })),
137 framework::dataset::make("OutputInfo", { TensorInfo(TensorShape(25U, 11U, 2U), 1, DataType::F16),
138 TensorInfo(TensorShape(25U, 10U, 2U), 1, DataType::F32),
139 TensorInfo(TensorShape(25U, 11U, 2U), 1, DataType::F32),
140 TensorInfo(TensorShape(13U, 13U, 2U), 1, DataType::F32),
141 TensorInfo(TensorShape(11U, 9U, 1U, 3U), 1, DataType::F32),
142 TensorInfo(TensorShape(32U, 16U, 4U), 1, DataType::F32),
Gunes Bayirec0113d2022-11-09 09:26:27 +0000143 TensorInfo(TensorShape(2U, 11U, 25U), 1, DataType::F16, DataLayout::NHWC),
144 TensorInfo(TensorShape(2U, 10U, 25U), 1, DataType::F32, DataLayout::NHWC),
145 TensorInfo(TensorShape(25U, 11U, 2U), 1, DataType::F32, DataLayout::NHWC),
146 TensorInfo(TensorShape(2U, 13U, 13U), 1, DataType::F32, DataLayout::NHWC),
147 TensorInfo(TensorShape(1U, 9U, 11U, 3U), 1, DataType::F32, DataLayout::NHWC),
148 TensorInfo(TensorShape(4U, 43U, 91U), 1, DataType::F32, DataLayout::NHWC),
Freddie Liardete92b0452021-04-22 14:55:17 +0100149 })),
Michalis Spyrou780db4e2017-11-23 09:49:51 +0000150 framework::dataset::make("PadStrideInfo", { PadStrideInfo(1, 1, 0, 0),
151 PadStrideInfo(1, 1, 0, 0),
152 PadStrideInfo(1, 1, 0, 0),
Manuel Bottinic1b76fa2019-06-17 12:04:40 +0100153 PadStrideInfo(1, 1, 0, 0),
Michalis Spyrou780db4e2017-11-23 09:49:51 +0000154 PadStrideInfo(1, 1, 1, 1),
155 PadStrideInfo(1, 1, 0, 0),
Gunes Bayirec0113d2022-11-09 09:26:27 +0000156 PadStrideInfo(1, 1, 0, 0),
157 PadStrideInfo(1, 1, 0, 0),
158 PadStrideInfo(1, 1, 0, 0),
159 PadStrideInfo(1, 1, 0, 0),
160 PadStrideInfo(1, 1, 1, 1),
161 PadStrideInfo(3, 3, 2, 2),
Michalis Spyrou780db4e2017-11-23 09:49:51 +0000162 })),
Gunes Bayirec0113d2022-11-09 09:26:27 +0000163 framework::dataset::make("Expected", { false, false, false, false, false, true, // NCHW
164 false, false, false, false, false, true })), // NHWC
Manuel Bottinic1b76fa2019-06-17 12:04:40 +0100165 input_info, weights_info, bias_info, output_info, pad_info, expected)
Michalis Spyrou780db4e2017-11-23 09:49:51 +0000166{
Manuel Bottinic1b76fa2019-06-17 12:04:40 +0100167 bool is_valid = bool(CLDeconvolutionLayer::validate(&input_info.clone()->set_is_resizable(false), &weights_info.clone()->set_is_resizable(false), &bias_info.clone()->set_is_resizable(false), &output_info.clone()->set_is_resizable(false), pad_info));
Michalis Spyrou780db4e2017-11-23 09:49:51 +0000168 ARM_COMPUTE_EXPECT(is_valid == expected, framework::LogLevel::ERRORS);
169}
170// clang-format on
171// *INDENT-ON*
172
173template <typename T>
Michele Di Giorgio14cbfb22019-10-23 10:53:10 +0100174using CLDeconvolutionLayerFixture4x4 = DeconvolutionValidationFixture<CLTensor, CLAccessor, CLDeconvolutionLayer, T, 4, 4>;
Georgios Pinitasced7a8d2018-02-01 16:31:33 +0000175
176template <typename T>
Michele Di Giorgio14cbfb22019-10-23 10:53:10 +0100177using CLDeconvolutionLayerFixture3x3 = DeconvolutionValidationFixture<CLTensor, CLAccessor, CLDeconvolutionLayer, T, 3, 3>;
Michalis Spyrou780db4e2017-11-23 09:49:51 +0000178
179template <typename T>
Matthew Jacksonb9070a42019-08-22 16:13:27 +0100180using CLDeconvolutionLayerAsymmFixture3x3 = DeconvolutionValidationAsymmFixture<CLTensor, CLAccessor, CLDeconvolutionLayer, T, 3, 3>;
giuros0146a49a02019-04-01 13:50:22 +0100181
182template <typename T>
Michele Di Giorgio14cbfb22019-10-23 10:53:10 +0100183using CLDeconvolutionLayerFixture2x2 = DeconvolutionValidationFixture<CLTensor, CLAccessor, CLDeconvolutionLayer, T, 2, 2>;
Matthew Jacksonb9070a42019-08-22 16:13:27 +0100184
185template <typename T>
Michele Di Giorgio14cbfb22019-10-23 10:53:10 +0100186using CLDeconvolutionLayerFixture1x1 = DeconvolutionValidationFixture<CLTensor, CLAccessor, CLDeconvolutionLayer, T, 1, 1>;
Michalis Spyrou780db4e2017-11-23 09:49:51 +0000187
Manuel Bottini6e10aa32020-04-30 13:28:23 +0100188template <typename T>
189using CLDeconvolutionLayerAsymmFixture9x9 = DeconvolutionValidationAsymmFixture<CLTensor, CLAccessor, CLDeconvolutionLayer, T, 9, 9>;
190
Viet-Hoa Do019a7d92023-06-27 16:33:57 +0100191template <typename T>
192using CLDeconvolutionLayerFixture5x1 = DeconvolutionValidationFixture<CLTensor, CLAccessor, CLDeconvolutionLayer, T, 5, 1>;
193
Michalis Spyrou780db4e2017-11-23 09:49:51 +0000194TEST_SUITE(Float)
Michalis Spyrou780db4e2017-11-23 09:49:51 +0000195TEST_SUITE(FP32)
Georgios Pinitasced7a8d2018-02-01 16:31:33 +0000196
Georgios Pinitas793f87d2018-05-18 20:08:58 +0100197TEST_SUITE(W4x4)
Manuel Bottini9f0d5ec2019-08-19 13:31:38 +0100198FIXTURE_DATA_TEST_CASE(Run, CLDeconvolutionLayerFixture4x4<float>, framework::DatasetMode::NIGHTLY, combine(combine(combine(data4x4, framework::dataset::make("DataType", DataType::F32)),
199 data_layouts_dataset),
200 add_bias_dataset))
Georgios Pinitasced7a8d2018-02-01 16:31:33 +0000201{
202 // Validate output
203 validate(CLAccessor(_target), _reference, tolerance_fp32);
204}
Michalis Spyrou064add62018-11-01 18:14:27 +0000205TEST_SUITE_END() // W4x4
Georgios Pinitasced7a8d2018-02-01 16:31:33 +0000206
Michalis Spyrou780db4e2017-11-23 09:49:51 +0000207TEST_SUITE(W3x3)
Manuel Bottini9f0d5ec2019-08-19 13:31:38 +0100208FIXTURE_DATA_TEST_CASE(RunSmall, CLDeconvolutionLayerFixture3x3<float>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(data3x3_precommit, framework::dataset::make("DataType",
209 DataType::F32)),
210 data_layouts_dataset),
211 add_bias_dataset))
Michalis Spyrou780db4e2017-11-23 09:49:51 +0000212{
213 // Validate output
214 validate(CLAccessor(_target), _reference, tolerance_fp32);
215}
Gunes Bayirec0113d2022-11-09 09:26:27 +0000216
217FIXTURE_DATA_TEST_CASE(RunSmallWithLargeChannels, CLDeconvolutionLayerFixture3x3<float>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(data3x3_precommit_large_channels,
218 framework::dataset::make("DataType",
219 DataType::F32)),
220 data_layouts_dataset),
221 framework::dataset::make("AddBias", { true })))
222{
223 // Validate output
224 validate(CLAccessor(_target), _reference, tolerance_fp32);
225}
226
Matthew Jacksonb9070a42019-08-22 16:13:27 +0100227FIXTURE_DATA_TEST_CASE(RunAsymm, CLDeconvolutionLayerAsymmFixture3x3<float>, framework::DatasetMode::NIGHTLY, combine(combine(combine(data3x3_asymm, framework::dataset::make("DataType",
228 DataType::F32)),
229 data_layouts_dataset),
230 add_bias_dataset))
231{
232 // Validate output
233 validate(CLAccessor(_target), _reference, tolerance_fp32);
234}
Manuel Bottini9f0d5ec2019-08-19 13:31:38 +0100235FIXTURE_DATA_TEST_CASE(RunLarge, CLDeconvolutionLayerFixture3x3<float>, framework::DatasetMode::NIGHTLY, combine(combine(combine(data3x3, framework::dataset::make("DataType", DataType::F32)),
236 data_layouts_dataset),
237 add_bias_dataset))
Michalis Spyrou064add62018-11-01 18:14:27 +0000238{
239 // Validate output
240 validate(CLAccessor(_target), _reference, tolerance_fp32);
241}
242TEST_SUITE_END() // W3x3
Michalis Spyrou780db4e2017-11-23 09:49:51 +0000243
giuros0146a49a02019-04-01 13:50:22 +0100244TEST_SUITE(W2x2)
Manuel Bottini9f0d5ec2019-08-19 13:31:38 +0100245FIXTURE_DATA_TEST_CASE(RunSmall, CLDeconvolutionLayerFixture2x2<float>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(data2x2_precommit, framework::dataset::make("DataType",
246 DataType::F32)),
247 data_layouts_dataset),
248 add_bias_dataset))
giuros0146a49a02019-04-01 13:50:22 +0100249{
250 // Validate output
251 validate(CLAccessor(_target), _reference, tolerance_fp32);
252}
253TEST_SUITE_END() // W2x2
254
Michalis Spyrou780db4e2017-11-23 09:49:51 +0000255TEST_SUITE(W1x1)
Manuel Bottini9f0d5ec2019-08-19 13:31:38 +0100256FIXTURE_DATA_TEST_CASE(Run, CLDeconvolutionLayerFixture1x1<float>, framework::DatasetMode::NIGHTLY, combine(combine(combine(data1x1, framework::dataset::make("DataType", DataType::F32)),
257 data_layouts_dataset),
258 add_bias_dataset))
Michalis Spyrou780db4e2017-11-23 09:49:51 +0000259{
260 // Validate output
261 validate(CLAccessor(_target), _reference, tolerance_fp32);
262}
Michalis Spyrou064add62018-11-01 18:14:27 +0000263TEST_SUITE_END() // W1x1
Manuel Bottini6e10aa32020-04-30 13:28:23 +0100264TEST_SUITE(W9x9)
265FIXTURE_DATA_TEST_CASE(RunSmall, CLDeconvolutionLayerAsymmFixture9x9<float>, framework::DatasetMode::ALL, combine(combine(combine(data9x9_small_asymm, framework::dataset::make("DataType",
266 DataType::F32)),
267 framework::dataset::make("DataLayout", { DataLayout::NHWC })),
268 framework::dataset::make("AddBias", { false })))
269{
270 // Validate output
271 validate(CLAccessor(_target), _reference, tolerance_fp32);
272}
273TEST_SUITE_END() // W9x9
Viet-Hoa Do019a7d92023-06-27 16:33:57 +0100274
275TEST_SUITE(W5x1)
276FIXTURE_DATA_TEST_CASE(Run, CLDeconvolutionLayerFixture5x1<float>, framework::DatasetMode::NIGHTLY, combine(combine(combine(data5x1, framework::dataset::make("DataType", DataType::F32)),
277 data_layouts_dataset),
278 add_bias_dataset))
279{
280 // Validate output
281 validate(CLAccessor(_target), _reference, tolerance_fp32);
282}
283TEST_SUITE_END() // W5x1
284
Michalis Spyrou064add62018-11-01 18:14:27 +0000285TEST_SUITE_END() // FP32
Georgios Pinitas793f87d2018-05-18 20:08:58 +0100286
287TEST_SUITE(FP16)
288
289TEST_SUITE(W4x4)
Manuel Bottini9f0d5ec2019-08-19 13:31:38 +0100290FIXTURE_DATA_TEST_CASE(Run, CLDeconvolutionLayerFixture4x4<half>, framework::DatasetMode::NIGHTLY, combine(combine(combine(data4x4, framework::dataset::make("DataType", DataType::F16)),
291 data_layouts_dataset),
292 add_bias_dataset))
Georgios Pinitas793f87d2018-05-18 20:08:58 +0100293{
294 // Validate output
295 validate(CLAccessor(_target), _reference, tolerance_f16, tolerance_num);
296}
Michalis Spyrou064add62018-11-01 18:14:27 +0000297TEST_SUITE_END() // W4x4
Georgios Pinitas793f87d2018-05-18 20:08:58 +0100298
299TEST_SUITE(W3x3)
Manuel Bottini9f0d5ec2019-08-19 13:31:38 +0100300FIXTURE_DATA_TEST_CASE(RunSmall, CLDeconvolutionLayerFixture3x3<half>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(data3x3_precommit, framework::dataset::make("DataType",
301 DataType::F16)),
302 data_layouts_dataset),
303 add_bias_dataset))
Georgios Pinitas793f87d2018-05-18 20:08:58 +0100304{
305 // Validate output
306 validate(CLAccessor(_target), _reference, tolerance_f16, tolerance_num);
307}
Manuel Bottini9f0d5ec2019-08-19 13:31:38 +0100308FIXTURE_DATA_TEST_CASE(RunLarge, CLDeconvolutionLayerFixture3x3<half>, framework::DatasetMode::NIGHTLY, combine(combine(combine(data3x3, framework::dataset::make("DataType", DataType::F16)),
309 data_layouts_dataset),
310 add_bias_dataset))
Michalis Spyrou064add62018-11-01 18:14:27 +0000311{
312 // Validate output
313 validate(CLAccessor(_target), _reference, tolerance_f16, tolerance_num);
314}
315TEST_SUITE_END() // W3x3
Georgios Pinitas793f87d2018-05-18 20:08:58 +0100316
giuros0146a49a02019-04-01 13:50:22 +0100317TEST_SUITE(W2x2)
Manuel Bottini9f0d5ec2019-08-19 13:31:38 +0100318FIXTURE_DATA_TEST_CASE(RunSmall, CLDeconvolutionLayerFixture2x2<half>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(data2x2_precommit, framework::dataset::make("DataType",
319 DataType::F16)),
320 data_layouts_dataset),
321 add_bias_dataset))
giuros0146a49a02019-04-01 13:50:22 +0100322{
323 // Validate output
giuros01b56d0cd2019-05-13 13:24:55 +0100324 validate(CLAccessor(_target), _reference, tolerance_f16);
giuros0146a49a02019-04-01 13:50:22 +0100325}
326TEST_SUITE_END() // W2x2
327
Georgios Pinitas793f87d2018-05-18 20:08:58 +0100328TEST_SUITE(W1x1)
Manuel Bottini9f0d5ec2019-08-19 13:31:38 +0100329FIXTURE_DATA_TEST_CASE(Run, CLDeconvolutionLayerFixture1x1<half>, framework::DatasetMode::NIGHTLY, combine(combine(combine(data1x1, framework::dataset::make("DataType", DataType::F16)),
330 data_layouts_dataset),
331 add_bias_dataset))
Georgios Pinitas793f87d2018-05-18 20:08:58 +0100332{
333 // Validate output
334 validate(CLAccessor(_target), _reference, tolerance_f16, tolerance_num);
335}
Michalis Spyrou064add62018-11-01 18:14:27 +0000336TEST_SUITE_END() // W1x1
Georgios Pinitas793f87d2018-05-18 20:08:58 +0100337
Viet-Hoa Do019a7d92023-06-27 16:33:57 +0100338TEST_SUITE(W5x1)
339FIXTURE_DATA_TEST_CASE(Run, CLDeconvolutionLayerFixture5x1<half>, framework::DatasetMode::NIGHTLY, combine(combine(combine(data5x1, framework::dataset::make("DataType", DataType::F16)),
340 data_layouts_dataset),
341 add_bias_dataset))
342{
343 // Validate output
344 validate(CLAccessor(_target), _reference, tolerance_f16, tolerance_num);
345}
346TEST_SUITE_END() // W5x1
347
Michalis Spyrou064add62018-11-01 18:14:27 +0000348TEST_SUITE_END() // FP16
349TEST_SUITE_END() // Float
Michalis Spyrou780db4e2017-11-23 09:49:51 +0000350
Michele Di Giorgio9fef38a2018-07-06 18:06:58 +0100351template <typename T>
352using CLDeconvolutionLayerQuantizedFixture4x4 = DeconvolutionValidationQuantizedFixture<CLTensor, CLAccessor, CLDeconvolutionLayer, T, 4, 4>;
353
354template <typename T>
355using CLDeconvolutionLayerQuantizedFixture3x3 = DeconvolutionValidationQuantizedFixture<CLTensor, CLAccessor, CLDeconvolutionLayer, T, 3, 3>;
356
357template <typename T>
giuros0146a49a02019-04-01 13:50:22 +0100358using CLDeconvolutionLayerQuantizedFixture2x2 = DeconvolutionValidationQuantizedFixture<CLTensor, CLAccessor, CLDeconvolutionLayer, T, 2, 2>;
359
360template <typename T>
Michele Di Giorgio9fef38a2018-07-06 18:06:58 +0100361using CLDeconvolutionLayerQuantizedFixture1x1 = DeconvolutionValidationQuantizedFixture<CLTensor, CLAccessor, CLDeconvolutionLayer, T, 1, 1>;
362
Freddie Liardete92b0452021-04-22 14:55:17 +0100363template <typename T>
Viet-Hoa Do019a7d92023-06-27 16:33:57 +0100364using CLDeconvolutionLayerQuantizedFixture5x1 = DeconvolutionValidationQuantizedFixture<CLTensor, CLAccessor, CLDeconvolutionLayer, T, 5, 1>;
365
366template <typename T>
Freddie Liardete92b0452021-04-22 14:55:17 +0100367using CLDeconvolutionLayerQuantizedPerChannelFixture4x4 = DeconvolutionValidationQuantizedPerChannelFixture<CLTensor, CLAccessor, CLDeconvolutionLayer, T, int8_t, 4, 4>;
368
369template <typename T>
370using CLDeconvolutionLayerQuantizedPerChannelFixture3x3 = DeconvolutionValidationQuantizedPerChannelFixture<CLTensor, CLAccessor, CLDeconvolutionLayer, T, int8_t, 3, 3>;
371
372template <typename T>
373using CLDeconvolutionLayerQuantizedPerChannelFixture2x2 = DeconvolutionValidationQuantizedPerChannelFixture<CLTensor, CLAccessor, CLDeconvolutionLayer, T, int8_t, 2, 2>;
374
375template <typename T>
376using CLDeconvolutionLayerQuantizedPerChannelFixture1x1 = DeconvolutionValidationQuantizedPerChannelFixture<CLTensor, CLAccessor, CLDeconvolutionLayer, T, int8_t, 1, 1>;
377
Viet-Hoa Do019a7d92023-06-27 16:33:57 +0100378template <typename T>
379using CLDeconvolutionLayerQuantizedPerChannelFixture5x1 = DeconvolutionValidationQuantizedPerChannelFixture<CLTensor, CLAccessor, CLDeconvolutionLayer, T, int8_t, 5, 1>;
380
Michele Di Giorgio9fef38a2018-07-06 18:06:58 +0100381TEST_SUITE(Quantized)
382TEST_SUITE(QASYMM8)
383
384TEST_SUITE(W4x4)
Manuel Bottini279814b2019-10-25 10:28:28 +0100385FIXTURE_DATA_TEST_CASE(Run, CLDeconvolutionLayerQuantizedFixture4x4<uint8_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(combine(combine(data4x4, framework::dataset::make("DataType",
Michalis Spyrou064add62018-11-01 18:14:27 +0000386 DataType::QASYMM8)),
387 data_layouts_dataset),
Giuseppe Rossini0a958cb2020-01-16 16:38:56 +0000388 framework::dataset::make("InputQuantizationInfo", { QuantizationInfo(1.f / 255.f, 10), QuantizationInfo(2.f / 255.f, 5) })),
389 framework::dataset::make("OutputQuantizationInfo", { QuantizationInfo(3.f / 255.f, 5), QuantizationInfo(4.f / 255.f, 10) })),
Manuel Bottini9f0d5ec2019-08-19 13:31:38 +0100390 add_bias_dataset))
Michele Di Giorgio9fef38a2018-07-06 18:06:58 +0100391{
392 // Validate output
393 validate(CLAccessor(_target), _reference, tolerance_qasymm8, tolerance_num);
394}
Michalis Spyrou064add62018-11-01 18:14:27 +0000395TEST_SUITE_END() // W4x4
Michele Di Giorgio9fef38a2018-07-06 18:06:58 +0100396
397TEST_SUITE(W3x3)
Manuel Bottini279814b2019-10-25 10:28:28 +0100398FIXTURE_DATA_TEST_CASE(RunSmall, CLDeconvolutionLayerQuantizedFixture3x3<uint8_t>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(combine(combine(data3x3_precommit,
Manuel Bottini9f0d5ec2019-08-19 13:31:38 +0100399 framework::dataset::make("DataType",
400 DataType::QASYMM8)),
Michalis Spyrou064add62018-11-01 18:14:27 +0000401 data_layouts_dataset),
Giuseppe Rossini0a958cb2020-01-16 16:38:56 +0000402 framework::dataset::make("InputQuantizationInfo", { QuantizationInfo(1.f / 255.f, 10), QuantizationInfo(2.f / 255.f, 4) })),
403 framework::dataset::make("OutputQuantizationInfo", { QuantizationInfo(3.f / 255.f, 10), QuantizationInfo(4.f / 255.f, 5) })),
Manuel Bottini9f0d5ec2019-08-19 13:31:38 +0100404 add_bias_dataset))
Michele Di Giorgio9fef38a2018-07-06 18:06:58 +0100405{
406 // Validate output
407 validate(CLAccessor(_target), _reference, tolerance_qasymm8, tolerance_num);
408}
Manuel Bottini279814b2019-10-25 10:28:28 +0100409FIXTURE_DATA_TEST_CASE(RunLarge, CLDeconvolutionLayerQuantizedFixture3x3<uint8_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(combine(combine(data3x3,
410 framework::dataset::make("DataType",
411 DataType::QASYMM8)),
Michalis Spyrou064add62018-11-01 18:14:27 +0000412 data_layouts_dataset),
Giuseppe Rossini0a958cb2020-01-16 16:38:56 +0000413 framework::dataset::make("InputQuantizationInfo", { QuantizationInfo(1.f / 255.f, 10), QuantizationInfo(2.f / 255.f, 128) })),
414 framework::dataset::make("OutputQuantizationInfo", { QuantizationInfo(3.f / 255.f, 128), QuantizationInfo(4.f / 255.f, 128) })),
Manuel Bottini9f0d5ec2019-08-19 13:31:38 +0100415 add_bias_dataset))
Michalis Spyrou064add62018-11-01 18:14:27 +0000416{
417 // Validate output
418 validate(CLAccessor(_target), _reference, tolerance_qasymm8, tolerance_num);
419}
420TEST_SUITE_END() // W3x3
Michele Di Giorgio9fef38a2018-07-06 18:06:58 +0100421
giuros0146a49a02019-04-01 13:50:22 +0100422TEST_SUITE(W2x2)
Manuel Bottini279814b2019-10-25 10:28:28 +0100423FIXTURE_DATA_TEST_CASE(RunSmall, CLDeconvolutionLayerQuantizedFixture2x2<uint8_t>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(combine(combine(data2x2_precommit,
424 framework::dataset::make("DataType", DataType::QASYMM8)),
giuros0146a49a02019-04-01 13:50:22 +0100425 data_layouts_dataset),
Giuseppe Rossini0a958cb2020-01-16 16:38:56 +0000426 framework::dataset::make("InputQuantizationInfo", { QuantizationInfo(1.f / 255.f, 128), QuantizationInfo(2.f / 255.f, 128) })),
427 framework::dataset::make("OutputQuantizationInfo", { QuantizationInfo(3.f / 255.f, 64), QuantizationInfo(4.f / 255.f, 128) })),
Manuel Bottini9f0d5ec2019-08-19 13:31:38 +0100428 add_bias_dataset))
giuros0146a49a02019-04-01 13:50:22 +0100429{
430 // Validate output
Giuseppe Rossini0a958cb2020-01-16 16:38:56 +0000431 validate(CLAccessor(_target), _reference, tolerance_qasymm8, tolerance_num);
giuros0146a49a02019-04-01 13:50:22 +0100432}
433TEST_SUITE_END() // W2x2
434
Michele Di Giorgio9fef38a2018-07-06 18:06:58 +0100435TEST_SUITE(W1x1)
Manuel Bottini279814b2019-10-25 10:28:28 +0100436FIXTURE_DATA_TEST_CASE(Run, CLDeconvolutionLayerQuantizedFixture1x1<uint8_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(combine(combine(data1x1, framework::dataset::make("DataType",
Michalis Spyrou064add62018-11-01 18:14:27 +0000437 DataType::QASYMM8)),
438 data_layouts_dataset),
Giuseppe Rossini0a958cb2020-01-16 16:38:56 +0000439 framework::dataset::make("InputQuantizationInfo", { QuantizationInfo(1.f / 255.f, 0), QuantizationInfo(2.f / 255.f, 0) })),
440 framework::dataset::make("OutputQuantizationInfo", { QuantizationInfo(3.f / 255.f, 0), QuantizationInfo(4.f / 255.f, 0) })),
Manuel Bottini9f0d5ec2019-08-19 13:31:38 +0100441 add_bias_dataset))
Michele Di Giorgio9fef38a2018-07-06 18:06:58 +0100442{
443 // Validate output
444 validate(CLAccessor(_target), _reference, tolerance_qasymm8, tolerance_num);
445}
Michalis Spyrou064add62018-11-01 18:14:27 +0000446TEST_SUITE_END() // W1x1
Michele Di Giorgio9fef38a2018-07-06 18:06:58 +0100447
Viet-Hoa Do019a7d92023-06-27 16:33:57 +0100448TEST_SUITE(W5x1)
449FIXTURE_DATA_TEST_CASE(Run, CLDeconvolutionLayerQuantizedFixture5x1<uint8_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(combine(combine(data5x1, framework::dataset::make("DataType",
450 DataType::QASYMM8)),
451 data_layouts_dataset),
452 framework::dataset::make("InputQuantizationInfo", { QuantizationInfo(1.f / 255.f, 10), QuantizationInfo(2.f / 255.f, 5) })),
453 framework::dataset::make("OutputQuantizationInfo", { QuantizationInfo(3.f / 255.f, 5), QuantizationInfo(4.f / 255.f, 10) })),
454 add_bias_dataset))
455{
456 // Validate output
457 validate(CLAccessor(_target), _reference, tolerance_qasymm8, tolerance_num);
458}
459TEST_SUITE_END() // W5x1
460
Michalis Spyrou064add62018-11-01 18:14:27 +0000461TEST_SUITE_END() // QASYMM8
Sheri Zhanga14817a2020-02-26 10:30:15 +0000462
463TEST_SUITE(QASYMM8_SIGNED)
464
465// QASYMM8_SIGNED: zero-point in range [-128, 127]
466// QASYMM8 : zero-point in range [0 , 255]
467
468TEST_SUITE(W4x4)
469FIXTURE_DATA_TEST_CASE(Run, CLDeconvolutionLayerQuantizedFixture4x4<int8_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(combine(combine(data4x4, framework::dataset::make("DataType",
470 DataType::QASYMM8_SIGNED)),
471 data_layouts_dataset),
472 framework::dataset::make("InputQuantizationInfo", { QuantizationInfo(1.f / 255.f, 10), QuantizationInfo(2.f / 255.f, 5) })),
473 framework::dataset::make("OutputQuantizationInfo", { QuantizationInfo(3.f / 255.f, 5), QuantizationInfo(4.f / 255.f, 10) })),
474 add_bias_dataset))
475{
476 // Validate output
477 validate(CLAccessor(_target), _reference, tolerance_qasymm8, tolerance_num);
478}
479TEST_SUITE_END() // W4x4
480
481TEST_SUITE(W3x3)
482// DirectDeconvolution
483FIXTURE_DATA_TEST_CASE(RunSmall, CLDeconvolutionLayerQuantizedFixture3x3<int8_t>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(combine(combine(data3x3_precommit,
484 framework::dataset::make("DataType",
485 DataType::QASYMM8_SIGNED)),
486 data_layouts_dataset),
487 framework::dataset::make("InputQuantizationInfo", { QuantizationInfo(1.f / 255.f, 10), QuantizationInfo(2.f / 255.f, 4) })),
488 framework::dataset::make("OutputQuantizationInfo", { QuantizationInfo(3.f / 255.f, 10), QuantizationInfo(4.f / 255.f, 5) })),
489 add_bias_dataset))
490{
491 // Validate output
492 validate(CLAccessor(_target), _reference, tolerance_qasymm8, tolerance_num);
493}
494
495FIXTURE_DATA_TEST_CASE(RunLarge, CLDeconvolutionLayerQuantizedFixture3x3<int8_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(combine(combine(data3x3,
496 framework::dataset::make("DataType",
497 DataType::QASYMM8_SIGNED)),
498 data_layouts_dataset),
499 framework::dataset::make("InputQuantizationInfo", { QuantizationInfo(1.f / 255.f, -10), QuantizationInfo(2.f / 255.f, 127) })),
500 framework::dataset::make("OutputQuantizationInfo", { QuantizationInfo(3.f / 255.f, 64), QuantizationInfo(4.f / 255.f, -128) })),
501 add_bias_dataset))
502{
503 // Validate output
504 validate(CLAccessor(_target), _reference, tolerance_qasymm8, tolerance_num);
505}
506TEST_SUITE_END() // W3x3
507
508TEST_SUITE(W2x2) // GEMMDeconvolution
509FIXTURE_DATA_TEST_CASE(RunSmall, CLDeconvolutionLayerQuantizedFixture2x2<int8_t>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(combine(combine(data2x2_precommit,
510 framework::dataset::make("DataType", DataType::QASYMM8_SIGNED)),
511 data_layouts_dataset),
512 framework::dataset::make("InputQuantizationInfo", { QuantizationInfo(1.f / 255.f, 127), QuantizationInfo(2.f / 255.f, -128) })),
513 framework::dataset::make("OutputQuantizationInfo", { QuantizationInfo(3.f / 255.f, -10), QuantizationInfo(4.f / 255.f, 64) })),
514 add_bias_dataset))
515{
516 // Validate output
517 validate(CLAccessor(_target), _reference, tolerance_qasymm8, tolerance_num);
518}
519TEST_SUITE_END() // W2x2
520
521TEST_SUITE(W1x1) // DirectDeconvolution and GEMMDeconvolution
Freddie Liardete92b0452021-04-22 14:55:17 +0100522FIXTURE_DATA_TEST_CASE(Run, CLDeconvolutionLayerQuantizedFixture1x1<int8_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(combine(combine(data1x1,
523 framework::dataset::make("DataType", DataType::QASYMM8_SIGNED)),
Sheri Zhanga14817a2020-02-26 10:30:15 +0000524 data_layouts_dataset),
525 framework::dataset::make("InputQuantizationInfo", { QuantizationInfo(1.f / 255.f, 0), QuantizationInfo(2.f / 255.f, 0) })),
526 framework::dataset::make("OutputQuantizationInfo", { QuantizationInfo(3.f / 255.f, 0), QuantizationInfo(4.f / 255.f, 0) })),
527 add_bias_dataset))
528{
529 // Validate output
530 validate(CLAccessor(_target), _reference, tolerance_qasymm8, tolerance_num);
531}
532TEST_SUITE_END() // W1x1
533
Viet-Hoa Do019a7d92023-06-27 16:33:57 +0100534TEST_SUITE(W5x1)
535FIXTURE_DATA_TEST_CASE(Run, CLDeconvolutionLayerQuantizedFixture5x1<int8_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(combine(combine(data5x1, framework::dataset::make("DataType",
536 DataType::QASYMM8_SIGNED)),
537 data_layouts_dataset),
538 framework::dataset::make("InputQuantizationInfo", { QuantizationInfo(1.f / 255.f, 10), QuantizationInfo(2.f / 255.f, 5) })),
539 framework::dataset::make("OutputQuantizationInfo", { QuantizationInfo(3.f / 255.f, 5), QuantizationInfo(4.f / 255.f, 10) })),
540 add_bias_dataset))
541{
542 // Validate output
543 validate(CLAccessor(_target), _reference, tolerance_qasymm8, tolerance_num);
544}
545TEST_SUITE_END() // W5x1
546
Sheri Zhanga14817a2020-02-26 10:30:15 +0000547TEST_SUITE_END() // QASYMM8_SIGNED
548
Freddie Liardete92b0452021-04-22 14:55:17 +0100549const auto input_qinfo_dataset = framework::dataset::make("InputQuantizationInfo", { QuantizationInfo(1.f / 255.f, 10) });
550const auto output_qinfo_dataset = framework::dataset::make("OutputQuantizationInfo", { QuantizationInfo(3.f / 255.f, 0) });
551const auto input_signed_qinfo_dataset = framework::dataset::make("InputQuantizationInfo", { QuantizationInfo(1.f / 255.f, -10) });
552const auto output_signed_qinfo_dataset = framework::dataset::make("OutputQuantizationInfo", { QuantizationInfo(3.f / 255.f, 10) });
553
554TEST_SUITE(QSYMM8_PER_CHANNEL)
555
556TEST_SUITE(W4x4)
Gunes Bayir59450702022-12-12 09:29:06 +0000557FIXTURE_DATA_TEST_CASE(RunSmall, CLDeconvolutionLayerQuantizedPerChannelFixture4x4<uint8_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(combine(combine(combine(data4x4,
Freddie Liardete92b0452021-04-22 14:55:17 +0100558 framework::dataset::make("DataType", DataType::QASYMM8)),
559 data_layouts_dataset),
560 input_qinfo_dataset),
561 output_qinfo_dataset),
562 add_bias_dataset),
563 framework::dataset::make("WeightsDataType", { DataType::QSYMM8_PER_CHANNEL })))
564{
565 // Validate output
566 validate(CLAccessor(_target), _reference, tolerance_qasymm8, tolerance_num);
567}
Gunes Bayir59450702022-12-12 09:29:06 +0000568FIXTURE_DATA_TEST_CASE(RunSmallSigned, CLDeconvolutionLayerQuantizedPerChannelFixture4x4<int8_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(combine(combine(combine(data4x4,
Freddie Liardete92b0452021-04-22 14:55:17 +0100569 framework::dataset::make("DataType", DataType::QASYMM8_SIGNED)),
570 data_layouts_dataset),
571 input_signed_qinfo_dataset),
572 output_signed_qinfo_dataset),
573 add_bias_dataset),
574 framework::dataset::make("WeightsDataType", { DataType::QSYMM8_PER_CHANNEL })))
575{
576 // Validate output
577 validate(CLAccessor(_target), _reference, tolerance_qasymm8, tolerance_num);
578}
579TEST_SUITE_END() // W4x4
580
581TEST_SUITE(W3x3)
Gunes Bayir59450702022-12-12 09:29:06 +0000582FIXTURE_DATA_TEST_CASE(RunSmall, CLDeconvolutionLayerQuantizedPerChannelFixture3x3<uint8_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(combine(combine(combine(data3x3,
Freddie Liardete92b0452021-04-22 14:55:17 +0100583 framework::dataset::make("DataType", DataType::QASYMM8)),
584 data_layouts_dataset),
585 input_qinfo_dataset),
586 output_qinfo_dataset),
587 add_bias_dataset),
588 framework::dataset::make("WeightsDataType", { DataType::QSYMM8_PER_CHANNEL })))
589{
590 // Validate output
591 validate(CLAccessor(_target), _reference, tolerance_qasymm8, tolerance_num);
592}
Gunes Bayir59450702022-12-12 09:29:06 +0000593FIXTURE_DATA_TEST_CASE(RunSmallSigned, CLDeconvolutionLayerQuantizedPerChannelFixture3x3<int8_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(combine(combine(combine(data3x3,
Freddie Liardete92b0452021-04-22 14:55:17 +0100594 framework::dataset::make("DataType", DataType::QASYMM8_SIGNED)),
595 data_layouts_dataset),
596 input_signed_qinfo_dataset),
597 output_signed_qinfo_dataset),
598 add_bias_dataset),
599 framework::dataset::make("WeightsDataType", { DataType::QSYMM8_PER_CHANNEL })))
600{
601 // Validate output
602 validate(CLAccessor(_target), _reference, tolerance_qasymm8, tolerance_num);
603}
Gunes Bayir59450702022-12-12 09:29:06 +0000604
605FIXTURE_DATA_TEST_CASE(RunSmallSignedPrecommit, CLDeconvolutionLayerQuantizedPerChannelFixture2x2<int8_t>, framework::DatasetMode::PRECOMMIT,
606 combine(combine(combine(combine(combine(combine(data3x3_precommit,
607 framework::dataset::make("DataType", DataType::QASYMM8_SIGNED)),
608 data_layouts_dataset),
609 input_signed_qinfo_dataset),
610 output_signed_qinfo_dataset),
611 add_bias_dataset),
612 framework::dataset::make("WeightsDataType", { DataType::QSYMM8_PER_CHANNEL })))
613{
614 // Validate output
615 validate(CLAccessor(_target), _reference, tolerance_qasymm8, tolerance_num);
616}
Freddie Liardete92b0452021-04-22 14:55:17 +0100617TEST_SUITE_END() // W3x3
618
Gunes Bayir59450702022-12-12 09:29:06 +0000619FIXTURE_DATA_TEST_CASE(RunSmall, CLDeconvolutionLayerQuantizedPerChannelFixture2x2<uint8_t>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(combine(combine(combine(data3x3_precommit,
Freddie Liardete92b0452021-04-22 14:55:17 +0100620 framework::dataset::make("DataType", DataType::QASYMM8)),
621 data_layouts_dataset),
622 input_qinfo_dataset),
623 output_qinfo_dataset),
624 add_bias_dataset),
625 framework::dataset::make("WeightsDataType", { DataType::QSYMM8_PER_CHANNEL })))
626{
627 // Validate output
628 validate(CLAccessor(_target), _reference, tolerance_qasymm8, tolerance_num);
629}
Gunes Bayir59450702022-12-12 09:29:06 +0000630
631TEST_SUITE(W2x2)
632FIXTURE_DATA_TEST_CASE(RunSmall, CLDeconvolutionLayerQuantizedPerChannelFixture2x2<uint8_t>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(combine(combine(combine(data2x2_precommit,
633 framework::dataset::make("DataType", DataType::QASYMM8)),
634 data_layouts_dataset),
635 input_qinfo_dataset),
636 output_qinfo_dataset),
637 add_bias_dataset),
638 framework::dataset::make("WeightsDataType", { DataType::QSYMM8_PER_CHANNEL })))
639{
640 // Validate output
641 validate(CLAccessor(_target), _reference, tolerance_qasymm8, tolerance_num);
642}
643FIXTURE_DATA_TEST_CASE(RunSmallSigned, CLDeconvolutionLayerQuantizedPerChannelFixture2x2<int8_t>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(combine(combine(combine(data2x2_precommit,
Freddie Liardete92b0452021-04-22 14:55:17 +0100644 framework::dataset::make("DataType", DataType::QASYMM8_SIGNED)),
645 data_layouts_dataset),
646 input_signed_qinfo_dataset),
647 output_signed_qinfo_dataset),
648 add_bias_dataset),
649 framework::dataset::make("WeightsDataType", { DataType::QSYMM8_PER_CHANNEL })))
650{
651 // Validate output
652 validate(CLAccessor(_target), _reference, tolerance_qasymm8, tolerance_num);
653}
654TEST_SUITE_END() // W2x2
655
656TEST_SUITE(W1x1)
Gunes Bayir59450702022-12-12 09:29:06 +0000657FIXTURE_DATA_TEST_CASE(RunSmall, CLDeconvolutionLayerQuantizedPerChannelFixture1x1<uint8_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(combine(combine(combine(data1x1,
Freddie Liardete92b0452021-04-22 14:55:17 +0100658 framework::dataset::make("DataType", DataType::QASYMM8)),
659 data_layouts_dataset),
660 input_qinfo_dataset),
661 output_qinfo_dataset),
662 add_bias_dataset),
663 framework::dataset::make("WeightsDataType", { DataType::QSYMM8_PER_CHANNEL })))
664{
665 // Validate output
666 validate(CLAccessor(_target), _reference, tolerance_qasymm8, tolerance_num);
667}
Gunes Bayir59450702022-12-12 09:29:06 +0000668FIXTURE_DATA_TEST_CASE(RunSmallSigned, CLDeconvolutionLayerQuantizedPerChannelFixture1x1<int8_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(combine(combine(combine(data1x1,
Freddie Liardete92b0452021-04-22 14:55:17 +0100669 framework::dataset::make("DataType", DataType::QASYMM8_SIGNED)),
670 data_layouts_dataset),
671 input_signed_qinfo_dataset),
672 output_signed_qinfo_dataset),
673 add_bias_dataset),
674 framework::dataset::make("WeightsDataType", { DataType::QSYMM8_PER_CHANNEL })))
675{
676 // Validate output
677 validate(CLAccessor(_target), _reference, tolerance_qasymm8, tolerance_num);
678}
679TEST_SUITE_END() // W1x1
680
Viet-Hoa Do019a7d92023-06-27 16:33:57 +0100681TEST_SUITE(W5x1)
682FIXTURE_DATA_TEST_CASE(RunSmall, CLDeconvolutionLayerQuantizedPerChannelFixture5x1<uint8_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(combine(combine(combine(data5x1,
683 framework::dataset::make("DataType", DataType::QASYMM8)),
684 data_layouts_dataset),
685 input_qinfo_dataset),
686 output_qinfo_dataset),
687 add_bias_dataset),
688 framework::dataset::make("WeightsDataType", { DataType::QSYMM8_PER_CHANNEL })))
689{
690 // Validate output
691 validate(CLAccessor(_target), _reference, tolerance_qasymm8, tolerance_num);
692}
693FIXTURE_DATA_TEST_CASE(RunSmallSigned, CLDeconvolutionLayerQuantizedPerChannelFixture5x1<int8_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(combine(combine(combine(data5x1,
694 framework::dataset::make("DataType", DataType::QASYMM8_SIGNED)),
695 data_layouts_dataset),
696 input_signed_qinfo_dataset),
697 output_signed_qinfo_dataset),
698 add_bias_dataset),
699 framework::dataset::make("WeightsDataType", { DataType::QSYMM8_PER_CHANNEL })))
700{
701 // Validate output
702 validate(CLAccessor(_target), _reference, tolerance_qasymm8, tolerance_num);
703}
704TEST_SUITE_END() // W5x1
705
Freddie Liardete92b0452021-04-22 14:55:17 +0100706TEST_SUITE_END() // QSYMM8_PER_CHANNEL
707
Michalis Spyrou064add62018-11-01 18:14:27 +0000708TEST_SUITE_END() // Quantized
Michele Di Giorgio9fef38a2018-07-06 18:06:58 +0100709
Michalis Spyrou064add62018-11-01 18:14:27 +0000710TEST_SUITE_END() // DeconvolutionLayer
711TEST_SUITE_END() // CL
Michalis Spyrou780db4e2017-11-23 09:49:51 +0000712} // namespace validation
713} // namespace test
714} // namespace arm_compute