blob: 734e24fbeab47d8afd91e522b2c36668fca5afe0 [file] [log] [blame]
Pablo Tellof5f34bb2017-08-22 13:34:13 +01001/*
Michele Di Giorgiod9eaf612020-07-08 11:12:57 +01002 * Copyright (c) 2017-2020 Arm Limited.
Pablo Tellof5f34bb2017-08-22 13:34:13 +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"
Michele Di Giorgioed5a4922018-09-13 16:22:01 +010025#include "arm_compute/core/utils/misc/ShapeCalculator.h"
Pablo Tellof5f34bb2017-08-22 13:34:13 +010026#include "arm_compute/runtime/NEON/functions/NEDeconvolutionLayer.h"
27#include "arm_compute/runtime/Tensor.h"
28#include "arm_compute/runtime/TensorAllocator.h"
29#include "tests/NEON/Accessor.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{
Luca Foschianifedefc32020-02-17 17:02:49 +000046constexpr AbsoluteTolerance<float> tolerance_fp32(0.001f); /**< Tolerance for floating point tests */
47constexpr AbsoluteTolerance<float> tolerance_quantized(1.0f); /**< Tolerance value for comparing reference's output against implementation's output for quantized data types */
Manuel Bottinif391fff2019-05-15 13:01:26 +010048#ifdef __ARM_FEATURE_FP16_VECTOR_ARITHMETIC
Manuel Bottinic1b76fa2019-06-17 12:04:40 +010049const RelativeTolerance<half_float::half> tolerance_fp16(half_float::half(0.2f)); /**< Relative tolerance value for comparing reference's output against implementation's output for DataType::F16 */
50#endif /* __ARM_FEATURE_FP16_VECTOR_ARITHMETIC*/
51constexpr float tolerance_num = 0.07f; /**< Tolerance number */
Pablo Tellof5f34bb2017-08-22 13:34:13 +010052
Georgios Pinitasced7a8d2018-02-01 16:31:33 +000053const 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 +000054 * framework::dataset::make("PadY", 0, 3) * framework::dataset::make("NumKernels", { 3 });
Georgios Pinitasced7a8d2018-02-01 16:31:33 +000055
Michalis Spyrou780db4e2017-11-23 09:49:51 +000056const 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 +000057 * framework::dataset::make("PadY", 0, 2) * framework::dataset::make("NumKernels", { 3 });
Pablo Tellof5f34bb2017-08-22 13:34:13 +010058
Matthew Jacksonb9070a42019-08-22 16:13:27 +010059const auto data3x3_asymm = datasets::SmallDeconvolutionShapes() * framework::dataset::make("StrideX", 1, 2) * framework::dataset::make("StrideY", 1, 2) * framework::dataset::make("PadLeft", 0, 1)
60 * framework::dataset::make("PadRight", 0, 1) * framework::dataset::make("PadTop", 0, 1) * framework::dataset::make("PadBottom", 0, 1) * framework::dataset::make("NumKernels", { 3 });
61
Manuel Bottini6e10aa32020-04-30 13:28:23 +010062const auto data9x9_small_asymm = framework::dataset::make("InputShape", TensorShape{ 10U, 10U, 1U, 1U }) *framework::dataset::make("StrideX", 2) *framework::dataset::make("StrideY",
63 2)
64 *framework::dataset::make("PadLeft", 3)
65 *framework::dataset::make("PadRight", 4) *framework::dataset::make("PadTop", 3) *framework::dataset::make("PadBottom", 4) *framework::dataset::make("NumKernels", { 1 });
66
67const auto data9x9_large_asymm = framework::dataset::make("InputShape", TensorShape{ 640U, 360U, 56U, 1U }) *framework::dataset::make("StrideX", 2) *framework::dataset::make("StrideY",
68 2)
69 *framework::dataset::make("PadLeft", 3)
70 *framework::dataset::make("PadRight", 4) *framework::dataset::make("PadTop", 3) *framework::dataset::make("PadBottom", 4) *framework::dataset::make("NumKernels", { 1 });
71
Michalis Spyrou064add62018-11-01 18:14:27 +000072const 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 +000073 * framework::dataset::make("PadY", 0, 2) * framework::dataset::make("NumKernels", { 3 });
Michalis Spyrou064add62018-11-01 18:14:27 +000074
Michalis Spyrou780db4e2017-11-23 09:49:51 +000075const 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 +000076 * framework::dataset::make("PadY", 0, 1) * framework::dataset::make("NumKernels", { 3 });
Pablo Tellof5f34bb2017-08-22 13:34:13 +010077
Manuel Bottinid25af672019-07-10 17:06:12 +010078const auto data_layouts_dataset = framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC });
Manuel Bottini9f0d5ec2019-08-19 13:31:38 +010079
80const auto add_bias_dataset = framework::dataset::make("AddBias", { true, false });
Michele Di Giorgiof29d1b72019-10-29 10:58:13 +000081
82const auto input_qinfo_dataset = framework::dataset::make("InputQInfo",
83{
84 QuantizationInfo(1.f / 255.f, 0),
85 QuantizationInfo(2.f, 0),
86});
87
88const auto output_qinfo_dataset = framework::dataset::make("OutputQInfo",
89{
90 QuantizationInfo(3.f / 255.f, 0),
91 QuantizationInfo(4.f, 0),
92});
Pablo Tellof5f34bb2017-08-22 13:34:13 +010093} // namespace
94
95TEST_SUITE(NEON)
96TEST_SUITE(DeconvolutionLayer)
97
Alex Gilday27c08ab2018-02-22 11:36:16 +000098// *INDENT-OFF*
99// clang-format off
Manuel Bottinic1b76fa2019-06-17 12:04:40 +0100100DATA_TEST_CASE(Validate, framework::DatasetMode::ALL, zip(zip(zip(zip(zip(
Vidhya Sudhan Loganathan7485d5a2018-07-04 09:34:00 +0100101 framework::dataset::make("InputInfo", { TensorInfo(TensorShape(27U, 13U, 2U), 1, DataType::F32), // Mismatching data type
102 TensorInfo(TensorShape(27U, 13U, 2U), 1, DataType::F32), // Invalid weights shape
103 TensorInfo(TensorShape(27U, 13U, 2U), 1, DataType::F16), // Non supported data type
104 TensorInfo(TensorShape(27U, 13U, 2U), 1, DataType::F32), // Invalid bias shape
105 TensorInfo(TensorShape(13U, 11U, 4U, 3U), 1, DataType::F32), // Window shrink
106 TensorInfo(TensorShape(32U, 16U, 2U), 1, DataType::F32),
Alex Gilday27c08ab2018-02-22 11:36:16 +0000107 }),
Vidhya Sudhan Loganathan7485d5a2018-07-04 09:34:00 +0100108 framework::dataset::make("WeightsInfo", { TensorInfo(TensorShape(3U, 3U, 2U, 2U), 1, DataType::F16),
109 TensorInfo(TensorShape(3U, 3U, 2U, 4U), 1, DataType::F32),
110 TensorInfo(TensorShape(3U, 3U, 2U, 2U), 1, DataType::F16),
111 TensorInfo(TensorShape(3U, 2U, 2U, 2U), 1, DataType::F32),
112 TensorInfo(TensorShape(3U, 3U, 4U), 1, DataType::F32),
113 TensorInfo(TensorShape(1U, 1U, 2U, 4U), 1, DataType::F32),
Alex Gilday27c08ab2018-02-22 11:36:16 +0000114 })),
Vidhya Sudhan Loganathan7485d5a2018-07-04 09:34:00 +0100115 framework::dataset::make("BiasInfo", { TensorInfo(TensorShape(1U), 1, DataType::F16),
116 TensorInfo(TensorShape(1U), 1, DataType::F32),
117 TensorInfo(TensorShape(1U), 1, DataType::F32),
118 TensorInfo(TensorShape(25U, 11U), 1, DataType::F32),
119 TensorInfo(TensorShape(1U), 1, DataType::F32),
120 TensorInfo(TensorShape(4U), 1, DataType::F32),
Alex Gilday27c08ab2018-02-22 11:36:16 +0000121 })),
Vidhya Sudhan Loganathan7485d5a2018-07-04 09:34:00 +0100122 framework::dataset::make("OutputInfo",{ TensorInfo(TensorShape(25U, 11U, 2U), 1, DataType::F16),
123 TensorInfo(TensorShape(25U, 10U, 2U), 1, DataType::F32),
124 TensorInfo(TensorShape(25U, 11U, 2U), 1, DataType::F32),
125 TensorInfo(TensorShape(13U, 13U, 2U), 1, DataType::F32),
126 TensorInfo(TensorShape(11U, 9U, 1U, 3U), 1, DataType::F32),
127 TensorInfo(TensorShape(32U, 16U, 4U), 1, DataType::F32),
Alex Gilday27c08ab2018-02-22 11:36:16 +0000128 })),
129 framework::dataset::make("PadStrideInfo", { PadStrideInfo(1, 1, 0, 0),
130 PadStrideInfo(1, 1, 0, 0),
131 PadStrideInfo(1, 1, 0, 0),
132 PadStrideInfo(1, 1, 0, 0),
133 PadStrideInfo(1, 1, 1, 1),
134 PadStrideInfo(1, 1, 0, 0),
135 })),
Alex Gilday27c08ab2018-02-22 11:36:16 +0000136 framework::dataset::make("Expected", { false, false, false, false, false, true })),
Manuel Bottinic1b76fa2019-06-17 12:04:40 +0100137 input_info, weights_info, bias_info, output_info, pad_info, expected)
Alex Gilday27c08ab2018-02-22 11:36:16 +0000138{
Manuel Bottinic1b76fa2019-06-17 12:04:40 +0100139 bool is_valid = bool(NEDeconvolutionLayer::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));
Alex Gilday27c08ab2018-02-22 11:36:16 +0000140 ARM_COMPUTE_EXPECT(is_valid == expected, framework::LogLevel::ERRORS);
141}
142// clang-format on
143// *INDENT-ON*
144
Pablo Tellof5f34bb2017-08-22 13:34:13 +0100145template <typename T>
Michele Di Giorgiof29d1b72019-10-29 10:58:13 +0000146using NEDeconvolutionLayerFixture4x4 = DeconvolutionValidationFixture<Tensor, Accessor, NEDeconvolutionLayer, T, 4, 4>;
Georgios Pinitasced7a8d2018-02-01 16:31:33 +0000147
148template <typename T>
Michele Di Giorgiof29d1b72019-10-29 10:58:13 +0000149using NEDeconvolutionLayerFixture3x3 = DeconvolutionValidationFixture<Tensor, Accessor, NEDeconvolutionLayer, T, 3, 3>;
Pablo Tellof5f34bb2017-08-22 13:34:13 +0100150
151template <typename T>
Matthew Jacksonb9070a42019-08-22 16:13:27 +0100152using NEDeconvolutionLayerAsymmFixture3x3 = DeconvolutionValidationAsymmFixture<Tensor, Accessor, NEDeconvolutionLayer, T, 3, 3>;
153
154template <typename T>
Manuel Bottini6e10aa32020-04-30 13:28:23 +0100155using NEDeconvolutionLayerAsymmFixture9x9 = DeconvolutionValidationAsymmFixture<Tensor, Accessor, NEDeconvolutionLayer, T, 9, 9>;
156
157template <typename T>
Michele Di Giorgiof29d1b72019-10-29 10:58:13 +0000158using NEDeconvolutionLayerFixture1x1 = DeconvolutionValidationFixture<Tensor, Accessor, NEDeconvolutionLayer, T, 1, 1>;
Pablo Tellof5f34bb2017-08-22 13:34:13 +0100159
160TEST_SUITE(Float)
Pablo Tellof5f34bb2017-08-22 13:34:13 +0100161TEST_SUITE(FP32)
Georgios Pinitasced7a8d2018-02-01 16:31:33 +0000162TEST_SUITE(W4x4)
Manuel Bottini9f0d5ec2019-08-19 13:31:38 +0100163FIXTURE_DATA_TEST_CASE(Run, NEDeconvolutionLayerFixture4x4<float>, framework::DatasetMode::NIGHTLY, combine(combine(combine(data4x4, framework::dataset::make("DataType", DataType::F32)),
164 data_layouts_dataset),
165 add_bias_dataset))
Georgios Pinitasced7a8d2018-02-01 16:31:33 +0000166{
167 // Validate output
168 validate(Accessor(_target), _reference, tolerance_fp32);
169}
Michalis Spyrou064add62018-11-01 18:14:27 +0000170TEST_SUITE_END() // W4x4
Pablo Tellof5f34bb2017-08-22 13:34:13 +0100171TEST_SUITE(W3x3)
Manuel Bottini9f0d5ec2019-08-19 13:31:38 +0100172FIXTURE_DATA_TEST_CASE(RunSmall, NEDeconvolutionLayerFixture3x3<float>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(data3x3_precommit, framework::dataset::make("DataType",
173 DataType::F32)),
174 data_layouts_dataset),
175 add_bias_dataset))
Pablo Tellof5f34bb2017-08-22 13:34:13 +0100176{
177 // Validate output
178 validate(Accessor(_target), _reference, tolerance_fp32);
179}
Matthew Jacksonb9070a42019-08-22 16:13:27 +0100180FIXTURE_DATA_TEST_CASE(RunAsymm, NEDeconvolutionLayerAsymmFixture3x3<float>, framework::DatasetMode::NIGHTLY, combine(combine(combine(data3x3_asymm, framework::dataset::make("DataType",
181 DataType::F32)),
182 data_layouts_dataset),
183 add_bias_dataset))
184{
185 // Validate output
186 validate(Accessor(_target), _reference, tolerance_fp32);
187}
Manuel Bottini9f0d5ec2019-08-19 13:31:38 +0100188FIXTURE_DATA_TEST_CASE(RunLarge, NEDeconvolutionLayerFixture3x3<float>, framework::DatasetMode::NIGHTLY, combine(combine(combine(data3x3, framework::dataset::make("DataType", DataType::F32)),
189 data_layouts_dataset),
190 add_bias_dataset))
Michalis Spyrou064add62018-11-01 18:14:27 +0000191{
192 // Validate output
193 validate(Accessor(_target), _reference, tolerance_fp32);
194}
195TEST_SUITE_END() // W3x3
Pablo Tellof5f34bb2017-08-22 13:34:13 +0100196TEST_SUITE(W1x1)
Manuel Bottini9f0d5ec2019-08-19 13:31:38 +0100197FIXTURE_DATA_TEST_CASE(Run, NEDeconvolutionLayerFixture1x1<float>, framework::DatasetMode::NIGHTLY, combine(combine(combine(data1x1, framework::dataset::make("DataType", DataType::F32)),
198 data_layouts_dataset),
199 add_bias_dataset))
Pablo Tellof5f34bb2017-08-22 13:34:13 +0100200{
201 // Validate output
202 validate(Accessor(_target), _reference, tolerance_fp32);
203}
Michalis Spyrou064add62018-11-01 18:14:27 +0000204TEST_SUITE_END() // W1x1
Manuel Bottini6e10aa32020-04-30 13:28:23 +0100205TEST_SUITE(W9x9)
206FIXTURE_DATA_TEST_CASE(RunSmall, NEDeconvolutionLayerAsymmFixture9x9<float>, framework::DatasetMode::ALL, combine(combine(combine(data9x9_small_asymm, framework::dataset::make("DataType",
207 DataType::F32)),
208 framework::dataset::make("DataLayout", { DataLayout::NHWC })),
209 framework::dataset::make("AddBias", { false })))
210{
211 // Validate output
212 validate(Accessor(_target), _reference, tolerance_fp32);
213}
214FIXTURE_DATA_TEST_CASE(RunLarge, NEDeconvolutionLayerAsymmFixture9x9<float>, framework::DatasetMode::NIGHTLY, combine(combine(combine(data9x9_large_asymm, framework::dataset::make("DataType",
215 DataType::F32)),
216 framework::dataset::make("DataLayout", { DataLayout::NHWC })),
217 framework::dataset::make("AddBias", { false })))
218{
219 // Validate output
220 validate(Accessor(_target), _reference, tolerance_fp32);
221}
222TEST_SUITE_END() // W9x9
Michalis Spyrou064add62018-11-01 18:14:27 +0000223TEST_SUITE_END() // FP32
Manuel Bottinif391fff2019-05-15 13:01:26 +0100224
225#ifdef __ARM_FEATURE_FP16_VECTOR_ARITHMETIC
226TEST_SUITE(FP16)
227TEST_SUITE(W4x4)
Manuel Bottini9f0d5ec2019-08-19 13:31:38 +0100228FIXTURE_DATA_TEST_CASE(Run, NEDeconvolutionLayerFixture4x4<half>, framework::DatasetMode::NIGHTLY, combine(combine(combine(data4x4, framework::dataset::make("DataType", DataType::F16)),
229 data_layouts_dataset),
230 add_bias_dataset))
Manuel Bottinif391fff2019-05-15 13:01:26 +0100231{
232 // Validate output
233 validate(Accessor(_target), _reference, tolerance_fp16);
234}
235TEST_SUITE_END() // W4x4
236TEST_SUITE(W3x3)
Manuel Bottini9f0d5ec2019-08-19 13:31:38 +0100237FIXTURE_DATA_TEST_CASE(RunSmall, NEDeconvolutionLayerFixture3x3<half>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(data3x3_precommit, framework::dataset::make("DataType",
238 DataType::F16)),
239 data_layouts_dataset),
240 add_bias_dataset))
Manuel Bottinif391fff2019-05-15 13:01:26 +0100241{
242 // Validate output
243 validate(Accessor(_target), _reference, tolerance_fp16);
244}
Manuel Bottini9f0d5ec2019-08-19 13:31:38 +0100245FIXTURE_DATA_TEST_CASE(RunLarge, NEDeconvolutionLayerFixture3x3<half>, framework::DatasetMode::NIGHTLY, combine(combine(combine(data3x3, framework::dataset::make("DataType", DataType::F16)),
246 data_layouts_dataset),
247 add_bias_dataset))
Manuel Bottinif391fff2019-05-15 13:01:26 +0100248{
249 // Validate output
250 validate(Accessor(_target), _reference, tolerance_fp16);
251}
252TEST_SUITE_END() // W3x3
253TEST_SUITE(W1x1)
Manuel Bottini9f0d5ec2019-08-19 13:31:38 +0100254FIXTURE_DATA_TEST_CASE(Run, NEDeconvolutionLayerFixture1x1<half>, framework::DatasetMode::NIGHTLY, combine(combine(combine(data1x1, framework::dataset::make("DataType", DataType::F16)),
255 data_layouts_dataset),
256 add_bias_dataset))
Manuel Bottinif391fff2019-05-15 13:01:26 +0100257{
258 // Validate output
259 validate(Accessor(_target), _reference, tolerance_fp16);
260}
261TEST_SUITE_END() // W1x1
262TEST_SUITE_END() // FP16
263#endif /* __ARM_FEATURE_FP16_VECTOR_ARITHMETIC */
264
Michalis Spyrou064add62018-11-01 18:14:27 +0000265TEST_SUITE_END() // Float
Pablo Tellof5f34bb2017-08-22 13:34:13 +0100266
Usama Arif2899e002019-04-16 14:32:25 +0100267template <typename T>
268using NEDeconvolutionLayerQuantizedFixture4x4 = DeconvolutionValidationQuantizedFixture<Tensor, Accessor, NEDeconvolutionLayer, T, 4, 4>;
269
270template <typename T>
271using NEDeconvolutionLayerQuantizedFixture3x3 = DeconvolutionValidationQuantizedFixture<Tensor, Accessor, NEDeconvolutionLayer, T, 3, 3>;
272
273template <typename T>
274using NEDeconvolutionLayerQuantizedFixture1x1 = DeconvolutionValidationQuantizedFixture<Tensor, Accessor, NEDeconvolutionLayer, T, 1, 1>;
275
276TEST_SUITE(Quantized)
277TEST_SUITE(QASYMM8)
278
279TEST_SUITE(W4x4)
Manuel Bottini279814b2019-10-25 10:28:28 +0100280FIXTURE_DATA_TEST_CASE(Run, NEDeconvolutionLayerQuantizedFixture4x4<uint8_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(combine(combine(data4x4, framework::dataset::make("DataType",
Usama Arif2899e002019-04-16 14:32:25 +0100281 DataType::QASYMM8)),
282 data_layouts_dataset),
Michele Di Giorgiof29d1b72019-10-29 10:58:13 +0000283 input_qinfo_dataset),
284 output_qinfo_dataset),
Manuel Bottini9f0d5ec2019-08-19 13:31:38 +0100285 add_bias_dataset))
Usama Arif2899e002019-04-16 14:32:25 +0100286{
287 // Validate output
Luca Foschianifedefc32020-02-17 17:02:49 +0000288 validate(Accessor(_target), _reference, tolerance_quantized, tolerance_num);
Usama Arif2899e002019-04-16 14:32:25 +0100289}
290TEST_SUITE_END() // W4x4
291
292TEST_SUITE(W3x3)
Manuel Bottini279814b2019-10-25 10:28:28 +0100293FIXTURE_DATA_TEST_CASE(RunSmall, NEDeconvolutionLayerQuantizedFixture3x3<uint8_t>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(combine(combine(data3x3_precommit,
Manuel Bottini9f0d5ec2019-08-19 13:31:38 +0100294 framework::dataset::make("DataType",
295 DataType::QASYMM8)),
Usama Arif2899e002019-04-16 14:32:25 +0100296 data_layouts_dataset),
Michele Di Giorgiof29d1b72019-10-29 10:58:13 +0000297 input_qinfo_dataset),
298 output_qinfo_dataset),
Manuel Bottini9f0d5ec2019-08-19 13:31:38 +0100299 add_bias_dataset))
Usama Arif2899e002019-04-16 14:32:25 +0100300{
301 // Validate output
Luca Foschianifedefc32020-02-17 17:02:49 +0000302 validate(Accessor(_target), _reference, tolerance_quantized, tolerance_num);
Usama Arif2899e002019-04-16 14:32:25 +0100303}
Manuel Bottini279814b2019-10-25 10:28:28 +0100304FIXTURE_DATA_TEST_CASE(RunLarge, NEDeconvolutionLayerQuantizedFixture3x3<uint8_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(combine(combine(data3x3,
305 framework::dataset::make("DataType",
306 DataType::QASYMM8)),
Usama Arif2899e002019-04-16 14:32:25 +0100307 data_layouts_dataset),
Michele Di Giorgiof29d1b72019-10-29 10:58:13 +0000308 input_qinfo_dataset),
309 output_qinfo_dataset),
Manuel Bottini9f0d5ec2019-08-19 13:31:38 +0100310 add_bias_dataset))
Usama Arif2899e002019-04-16 14:32:25 +0100311{
312 // Validate output
Luca Foschianifedefc32020-02-17 17:02:49 +0000313 validate(Accessor(_target), _reference, tolerance_quantized, tolerance_num);
Usama Arif2899e002019-04-16 14:32:25 +0100314}
315TEST_SUITE_END() // W3x3
316
317TEST_SUITE(W1x1)
Manuel Bottini279814b2019-10-25 10:28:28 +0100318FIXTURE_DATA_TEST_CASE(Run, NEDeconvolutionLayerQuantizedFixture1x1<uint8_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(combine(combine(data1x1, framework::dataset::make("DataType",
Usama Arif2899e002019-04-16 14:32:25 +0100319 DataType::QASYMM8)),
320 data_layouts_dataset),
Michele Di Giorgiof29d1b72019-10-29 10:58:13 +0000321 input_qinfo_dataset),
322 output_qinfo_dataset),
Manuel Bottini9f0d5ec2019-08-19 13:31:38 +0100323 add_bias_dataset))
Usama Arif2899e002019-04-16 14:32:25 +0100324{
325 // Validate output
Luca Foschianifedefc32020-02-17 17:02:49 +0000326 validate(Accessor(_target), _reference, tolerance_quantized, tolerance_num);
Usama Arif2899e002019-04-16 14:32:25 +0100327}
328TEST_SUITE_END() // W1x1
329
330TEST_SUITE_END() // QASYMM8
Luca Foschianifedefc32020-02-17 17:02:49 +0000331
332TEST_SUITE(QASYMM8_SIGNED)
333
334TEST_SUITE(W4x4)
335FIXTURE_DATA_TEST_CASE(Run, NEDeconvolutionLayerQuantizedFixture4x4<int8_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(combine(combine(data4x4, framework::dataset::make("DataType",
336 DataType::QASYMM8_SIGNED)),
337 data_layouts_dataset),
338 input_qinfo_dataset),
339 output_qinfo_dataset),
340 add_bias_dataset))
341{
342 // Validate output
343 validate(Accessor(_target), _reference, tolerance_quantized, tolerance_num);
344}
345TEST_SUITE_END() // W4x4
346
347TEST_SUITE(W3x3)
348FIXTURE_DATA_TEST_CASE(RunSmall, NEDeconvolutionLayerQuantizedFixture3x3<int8_t>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(combine(combine(data3x3_precommit,
349 framework::dataset::make("DataType",
350 DataType::QASYMM8_SIGNED)),
351 data_layouts_dataset),
352 input_qinfo_dataset),
353 output_qinfo_dataset),
354 add_bias_dataset))
355{
356 // Validate output
357 validate(Accessor(_target), _reference, tolerance_quantized, tolerance_num);
358}
359FIXTURE_DATA_TEST_CASE(RunLarge, NEDeconvolutionLayerQuantizedFixture3x3<int8_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(combine(combine(data3x3,
360 framework::dataset::make("DataType",
361 DataType::QASYMM8_SIGNED)),
362 data_layouts_dataset),
363 input_qinfo_dataset),
364 output_qinfo_dataset),
365 add_bias_dataset))
366{
367 // Validate output
368 validate(Accessor(_target), _reference, tolerance_quantized, tolerance_num);
369}
370TEST_SUITE_END() // W3x3
371
372TEST_SUITE(W1x1)
373FIXTURE_DATA_TEST_CASE(Run, NEDeconvolutionLayerQuantizedFixture1x1<int8_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(combine(combine(data1x1, framework::dataset::make("DataType",
374 DataType::QASYMM8_SIGNED)),
375 data_layouts_dataset),
376 input_qinfo_dataset),
377 output_qinfo_dataset),
378 add_bias_dataset))
379{
380 // Validate output
381 validate(Accessor(_target), _reference, tolerance_quantized, tolerance_num);
382}
383TEST_SUITE_END() // W1x1
384
385TEST_SUITE_END() // QASYMM8_SIGNED
Usama Arif2899e002019-04-16 14:32:25 +0100386TEST_SUITE_END() // Quantized
387
Michalis Spyrou064add62018-11-01 18:14:27 +0000388TEST_SUITE_END() // DeconvolutionLayer
389TEST_SUITE_END() // NEON
Pablo Tellof5f34bb2017-08-22 13:34:13 +0100390} // namespace validation
391} // namespace test
392} // namespace arm_compute