blob: 8f87a7d6361d8e01896a9f4aa5afd8470aef00d3 [file] [log] [blame]
Anthony Barbier8140e1e2017-12-14 23:48:46 +00001/*
Anthony Barbierf45d5a92018-01-24 16:23:15 +00002 * Copyright (c) 2017-2018 ARM Limited.
Anthony Barbier8140e1e2017-12-14 23:48:46 +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 CONCLCTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22 * SOFTWARE.
23 */
24#include "arm_compute/core/Types.h"
Jenkinsb3a371b2018-05-23 11:36:53 +010025#include "arm_compute/core/utils/misc/ShapeCalculator.h"
Anthony Barbier8140e1e2017-12-14 23:48:46 +000026#include "arm_compute/runtime/NEON/functions/NEDepthwiseConvolutionLayer.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/DepthwiseConvolutionLayerDataset.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/DepthwiseConvolutionLayerFixture.h"
37
38namespace arm_compute
39{
40namespace test
41{
42namespace validation
43{
Jenkinsb3a371b2018-05-23 11:36:53 +010044using namespace arm_compute::misc::shape_calculator;
45
Anthony Barbier8140e1e2017-12-14 23:48:46 +000046namespace
47{
Jenkinsb9abeae2018-11-22 11:58:08 +000048RelativeTolerance<half_float::half> tolerance_f16(half_float::half(0.001)); /**< Tolerance value for comparing reference's output against implementation's output for DataType::F16 */
49constexpr RelativeTolerance<float> tolerance_f32(0.01f); /**< Tolerance value for comparing reference's output against implementation's output for DataType::F32 */
50constexpr AbsoluteTolerance<uint8_t> tolerance_qasymm8(1); /**< Tolerance value for comparing reference's output against implementation's output for DataType::QASYMM8 */
Jenkinsb3a371b2018-05-23 11:36:53 +010051
52const auto depth_multipliers = framework::dataset::make("DepthMultiplier", { 1, 2, 3 });
Anthony Barbier8140e1e2017-12-14 23:48:46 +000053} // namespace
54
55TEST_SUITE(NEON)
Anthony Barbierf45d5a92018-01-24 16:23:15 +000056TEST_SUITE(DepthwiseConvLayer)
Anthony Barbier8140e1e2017-12-14 23:48:46 +000057
Jenkins52ba29e2018-08-29 15:32:11 +000058// *INDENT-OFF*
59// clang-format off
60DATA_TEST_CASE(Validate3x3, framework::DatasetMode::ALL, zip(zip(zip(zip(zip(zip(
61 framework::dataset::make("InputInfo", { TensorInfo(TensorShape(32U, 18U, 2U), 1, DataType::F32), // Mismatching data type input/weights
62 TensorInfo(TensorShape(32U, 18U, 3U), 1, DataType::F32), // Mismatching input feature maps
63 TensorInfo(TensorShape(32U, 18U, 2U), 1, DataType::F32), // Unsupported weights dimensions
64 TensorInfo(TensorShape(32U, 18U, 2U), 1, DataType::F32), // Mismatching depth multiplier
65 TensorInfo(TensorShape(32U, 18U, 2U), 1, DataType::QASYMM8), // Invalid stride
66 TensorInfo(TensorShape(32U, 18U, 2U), 1, DataType::F32), // Invalid biases size
67 TensorInfo(TensorShape(32U, 18U, 2U), 1, DataType::F32), // Invalid biases dimensions
68 TensorInfo(TensorShape(32U, 18U, 2U), 1, DataType::F32), // Invalid output size
69 TensorInfo(TensorShape(27U, 13U, 2U), 1, DataType::F32),
70 }),
71 framework::dataset::make("WeightsInfo", { TensorInfo(TensorShape(3U, 3U, 2U, 2U), 1, DataType::F16),
72 TensorInfo(TensorShape(3U, 3U, 2U, 2U), 1, DataType::F32),
73 TensorInfo(TensorShape(5U, 5U, 2U, 2U), 1, DataType::F32),
74 TensorInfo(TensorShape(3U, 3U, 2U, 2U), 1, DataType::F32),
75 TensorInfo(TensorShape(3U, 3U, 2U, 2U), 1, DataType::QASYMM8),
76 TensorInfo(TensorShape(3U, 3U, 2U, 2U), 1, DataType::F32),
77 TensorInfo(TensorShape(3U, 3U, 2U, 2U), 1, DataType::F32),
78 TensorInfo(TensorShape(3U, 3U, 2U, 2U), 1, DataType::F32),
79 TensorInfo(TensorShape(3U, 3U, 2U, 2U), 1, DataType::F32),
80 })),
81 framework::dataset::make("BiasesInfo", { TensorInfo(TensorShape(2U), 1, DataType::F32),
82 TensorInfo(TensorShape(2U), 1, DataType::F32),
83 TensorInfo(TensorShape(2U), 1, DataType::F32),
84 TensorInfo(TensorShape(2U), 1, DataType::F32),
85 TensorInfo(TensorShape(2U), 1, DataType::S32),
86 TensorInfo(TensorShape(4U), 1, DataType::F32),
87 TensorInfo(TensorShape(2U, 2U), 1, DataType::F32),
88 TensorInfo(TensorShape(2U), 1, DataType::F32),
89 TensorInfo(TensorShape(2U), 1, DataType::F32),
90 })),
91 framework::dataset::make("OutputInfo", { TensorInfo(TensorShape(30U, 16U, 2U), 1, DataType::F32),
92 TensorInfo(TensorShape(30U, 16U, 2U), 1, DataType::F32),
93 TensorInfo(TensorShape(30U, 16U, 2U), 1, DataType::F32),
94 TensorInfo(TensorShape(30U, 16U, 2U), 1, DataType::F32),
95 TensorInfo(TensorShape(30U, 16U, 2U), 1, DataType::QASYMM8),
96 TensorInfo(TensorShape(30U, 16U, 2U), 1, DataType::F32),
97 TensorInfo(TensorShape(30U, 16U, 2U), 1, DataType::F32),
98 TensorInfo(TensorShape(32U, 18U, 2U), 1, DataType::F32),
99 TensorInfo(TensorShape(25U, 11U, 2U), 1, DataType::F32),
100 })),
101 framework::dataset::make("ConvInfo", { PadStrideInfo(1, 1, 0, 0),
102 PadStrideInfo(1, 1, 0, 0),
103 PadStrideInfo(1, 1, 0, 0),
104 PadStrideInfo(1, 1, 0, 0),
105 PadStrideInfo(4, 1, 0, 0),
106 PadStrideInfo(1, 1, 0, 0),
107 PadStrideInfo(1, 1, 0, 0),
108 PadStrideInfo(1, 1, 0, 0),
109 PadStrideInfo(1, 1, 0, 0),
110 })),
111 framework::dataset::make("DepthMultiplier", { 1,
112 1,
113 1,
114 3,
115 1,
116 1,
117 1,
118 1,
119 1,
120 })),
121 framework::dataset::make("Expected", { false, false, false, false, false, false, false, false, true })),
122 input_info, weights_info, biases_info, output_info, conv_info, depth_multiplier, expected)
Anthony Barbier8140e1e2017-12-14 23:48:46 +0000123{
Jenkins52ba29e2018-08-29 15:32:11 +0000124 bool is_valid = bool(NEDepthwiseConvolutionLayer3x3::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, depth_multiplier));
125 ARM_COMPUTE_EXPECT(is_valid == expected, framework::LogLevel::ERRORS);
Anthony Barbier8140e1e2017-12-14 23:48:46 +0000126}
127
Jenkins52ba29e2018-08-29 15:32:11 +0000128DATA_TEST_CASE(ValidateGeneric, framework::DatasetMode::ALL, zip(zip(zip(zip(zip(zip(
129 framework::dataset::make("InputInfo", { TensorInfo(TensorShape(27U, 13U, 2U), 1, DataType::F32), // Mismatching data type input/weights
130 TensorInfo(TensorShape(27U, 13U, 3U), 1, DataType::F32), // Mismatching input feature maps
131 TensorInfo(TensorShape(27U, 13U, 2U), 1, DataType::F32), // Mismatching depth multiplier
132 TensorInfo(TensorShape(27U, 13U, 2U), 1, DataType::F32), // Invalid biases size
133 TensorInfo(TensorShape(27U, 13U, 2U), 1, DataType::F32), // Invalid biases dimensions
134 TensorInfo(TensorShape(27U, 13U, 2U), 1, DataType::F32), // Invalid output size
135 TensorInfo(TensorShape(27U, 13U, 8U), 1, DataType::F32),
136 TensorInfo(TensorShape(32U, 13U, 8U), 1, DataType::QASYMM8),
137 }),
138 framework::dataset::make("WeightsInfo", { TensorInfo(TensorShape(3U, 3U, 2U), 1, DataType::F16),
139 TensorInfo(TensorShape(3U, 3U, 2U), 1, DataType::F32),
140 TensorInfo(TensorShape(3U, 3U, 2U), 1, DataType::F32),
141 TensorInfo(TensorShape(3U, 3U, 2U), 1, DataType::F32),
142 TensorInfo(TensorShape(3U, 3U, 2U), 1, DataType::F32),
143 TensorInfo(TensorShape(3U, 3U, 2U), 1, DataType::F32),
144 TensorInfo(TensorShape(3U, 3U, 16U), 1, DataType::F32),
145 TensorInfo(TensorShape(3U, 3U, 24U), 1, DataType::QASYMM8),
146 })),
147 framework::dataset::make("BiasesInfo", { TensorInfo(TensorShape(2U), 1, DataType::F32),
148 TensorInfo(TensorShape(2U), 1, DataType::F32),
149 TensorInfo(TensorShape(2U), 1, DataType::F32),
150 TensorInfo(TensorShape(4U), 1, DataType::F32),
151 TensorInfo(TensorShape(2U, 2U), 1, DataType::F32),
152 TensorInfo(TensorShape(2U), 1, DataType::F32),
153 TensorInfo(TensorShape(16U), 1, DataType::F32),
154 TensorInfo(TensorShape(24U), 1, DataType::S32),
155 })),
156 framework::dataset::make("OutputInfo", { TensorInfo(TensorShape(25U, 11U, 2U), 1, DataType::F32),
157 TensorInfo(TensorShape(25U, 11U, 2U), 1, DataType::F32),
158 TensorInfo(TensorShape(25U, 11U, 2U), 1, DataType::F32),
159 TensorInfo(TensorShape(25U, 11U, 2U), 1, DataType::F32),
160 TensorInfo(TensorShape(25U, 11U, 2U), 1, DataType::F32),
161 TensorInfo(TensorShape(27U, 13U, 2U), 1, DataType::F32),
162 TensorInfo(TensorShape(25U, 11U, 16U), 1, DataType::F32),
163 TensorInfo(TensorShape(32U, 11U, 24U), 1, DataType::QASYMM8),
164 })),
165 framework::dataset::make("ConvInfo", { PadStrideInfo(1, 1, 0, 0),
166 PadStrideInfo(1, 1, 0, 0),
167 PadStrideInfo(1, 1, 0, 0),
168 PadStrideInfo(1, 1, 0, 0),
169 PadStrideInfo(1, 1, 0, 0),
170 PadStrideInfo(1, 1, 0, 0),
171 PadStrideInfo(1, 1, 0, 0),
172 PadStrideInfo(1, 1, 1, 0),
173 })),
174 framework::dataset::make("DepthMultiplier", { 1,
175 1,
176 3,
177 1,
178 1,
179 1,
180 2,
181 3,
182 })),
183 framework::dataset::make("Expected", { false, false, false, false, false, false, true, true })),
184 input_info, weights_info, biases_info, output_info, conv_info, depth_multiplier, expected)
185{
186 bool is_valid = bool(NEDepthwiseConvolutionLayer::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, depth_multiplier));
187 ARM_COMPUTE_EXPECT(is_valid == expected, framework::LogLevel::ERRORS);
188}
189// clang-format on
190// *INDENT-ON*
191
Anthony Barbier8140e1e2017-12-14 23:48:46 +0000192TEST_SUITE(Float)
193TEST_SUITE(F32)
194TEST_SUITE(Generic)
195template <typename T>
196using NEDepthwiseConvolutionLayerFixture = DepthwiseConvolutionLayerValidationFixture<Tensor, Accessor, NEDepthwiseConvolutionLayer, T>;
Jenkinsb3a371b2018-05-23 11:36:53 +0100197FIXTURE_DATA_TEST_CASE(RunSmall, NEDepthwiseConvolutionLayerFixture<float>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(datasets::SmallDepthwiseConvolutionLayerDataset(),
198 depth_multipliers),
Anthony Barbier8140e1e2017-12-14 23:48:46 +0000199 framework::dataset::make("DataType",
Jenkinsb3a371b2018-05-23 11:36:53 +0100200 DataType::F32)),
Jenkins52ba29e2018-08-29 15:32:11 +0000201 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
Anthony Barbier8140e1e2017-12-14 23:48:46 +0000202{
203 validate(Accessor(_target), _reference, tolerance_f32);
204}
Jenkinsb3a371b2018-05-23 11:36:53 +0100205FIXTURE_DATA_TEST_CASE(RunLarge, NEDepthwiseConvolutionLayerFixture<float>, framework::DatasetMode::NIGHTLY, combine(combine(combine(datasets::LargeDepthwiseConvolutionLayerDataset(),
206 depth_multipliers),
Anthony Barbier8140e1e2017-12-14 23:48:46 +0000207 framework::dataset::make("DataType",
Jenkinsb3a371b2018-05-23 11:36:53 +0100208 DataType::F32)),
Jenkins52ba29e2018-08-29 15:32:11 +0000209 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
Anthony Barbier8140e1e2017-12-14 23:48:46 +0000210{
211 validate(Accessor(_target), _reference, tolerance_f32);
212}
Jenkinsb9abeae2018-11-22 11:58:08 +0000213TEST_SUITE_END() // Generic
Anthony Barbier8140e1e2017-12-14 23:48:46 +0000214
215TEST_SUITE(W3x3)
216template <typename T>
217using NEDepthwiseConvolutionLayerFixture3x3 = DepthwiseConvolutionLayerValidationFixture<Tensor, Accessor, NEDepthwiseConvolutionLayer3x3, T>;
Jenkinsb3a371b2018-05-23 11:36:53 +0100218FIXTURE_DATA_TEST_CASE(RunSmall, NEDepthwiseConvolutionLayerFixture3x3<float>, framework::DatasetMode::ALL, combine(combine(combine(datasets::SmallDepthwiseConvolutionLayerDataset3x3(),
219 depth_multipliers),
Anthony Barbier8140e1e2017-12-14 23:48:46 +0000220 framework::dataset::make("DataType",
Jenkinsb3a371b2018-05-23 11:36:53 +0100221 DataType::F32)),
Jenkins52ba29e2018-08-29 15:32:11 +0000222 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
Anthony Barbier8140e1e2017-12-14 23:48:46 +0000223{
224 validate(Accessor(_target), _reference, tolerance_f32);
225}
Jenkinsb3a371b2018-05-23 11:36:53 +0100226FIXTURE_DATA_TEST_CASE(RunLarge, NEDepthwiseConvolutionLayerFixture3x3<float>, framework::DatasetMode::NIGHTLY, combine(combine(combine(datasets::LargeDepthwiseConvolutionLayerDataset3x3(),
227 depth_multipliers),
Anthony Barbier8140e1e2017-12-14 23:48:46 +0000228 framework::dataset::make("DataType",
Jenkinsb3a371b2018-05-23 11:36:53 +0100229 DataType::F32)),
Jenkins52ba29e2018-08-29 15:32:11 +0000230 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
Anthony Barbier8140e1e2017-12-14 23:48:46 +0000231{
232 validate(Accessor(_target), _reference, tolerance_f32);
233}
Jenkinsb3a371b2018-05-23 11:36:53 +0100234FIXTURE_DATA_TEST_CASE(RunOptimized, NEDepthwiseConvolutionLayerFixture3x3<float>, framework::DatasetMode::ALL, combine(combine(combine(datasets::OptimizedDepthwiseConvolutionLayerDataset3x3(),
235 framework::dataset::make("DepthMultiplier", 1)),
Anthony Barbier06ea0482018-02-22 15:45:35 +0000236 framework::dataset::make("DataType",
Jenkinsb3a371b2018-05-23 11:36:53 +0100237 DataType::F32)),
238 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
Anthony Barbier06ea0482018-02-22 15:45:35 +0000239{
240 validate(Accessor(_target), _reference, tolerance_f32);
241}
Jenkinsb9abeae2018-11-22 11:58:08 +0000242TEST_SUITE_END() // W3x3
243TEST_SUITE_END() // F32
Anthony Barbier8140e1e2017-12-14 23:48:46 +0000244
Jenkinsb9abeae2018-11-22 11:58:08 +0000245#ifdef __ARM_FEATURE_FP16_VECTOR_ARITHMETIC
246TEST_SUITE(F16)
247TEST_SUITE(W3x3)
248template <typename T>
249using NEDepthwiseConvolutionLayerFixture3x3 = DepthwiseConvolutionLayerValidationFixture<Tensor, Accessor, NEDepthwiseConvolutionLayer3x3, T>;
250FIXTURE_DATA_TEST_CASE(RunSmall, NEDepthwiseConvolutionLayerFixture3x3<half>, framework::DatasetMode::ALL, combine(combine(combine(datasets::SmallDepthwiseConvolutionLayerDataset3x3(),
251 depth_multipliers),
252 framework::dataset::make("DataType",
253 DataType::F16)),
254 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
255{
256 validate(Accessor(_target), _reference, tolerance_f16);
257}
258FIXTURE_DATA_TEST_CASE(RunLarge, NEDepthwiseConvolutionLayerFixture3x3<half>, framework::DatasetMode::NIGHTLY, combine(combine(combine(datasets::LargeDepthwiseConvolutionLayerDataset3x3(),
259 depth_multipliers),
260 framework::dataset::make("DataType",
261 DataType::F16)),
262 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
263{
264 validate(Accessor(_target), _reference, tolerance_f16);
265}
266FIXTURE_DATA_TEST_CASE(RunOptimized, NEDepthwiseConvolutionLayerFixture3x3<half>, framework::DatasetMode::ALL, combine(combine(combine(datasets::OptimizedDepthwiseConvolutionLayerDataset3x3(),
267 framework::dataset::make("DepthMultiplier", 1)),
268 framework::dataset::make("DataType",
269 DataType::F16)),
270 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
271{
272 validate(Accessor(_target), _reference, tolerance_f16);
273}
274TEST_SUITE_END() // W3x3
275TEST_SUITE_END() // FP16
276#endif // __ARM_FEATURE_FP16_VECTOR_ARITHMETIC
277
278TEST_SUITE_END() // Float
Anthony Barbierf45d5a92018-01-24 16:23:15 +0000279
280template <typename T>
281using NEDepthwiseConvolutionLayerQuantizedFixture3x3 = DepthwiseConvolutionLayerValidationQuantizedFixture<Tensor, Accessor, NEDepthwiseConvolutionLayer3x3, T>;
Anthony Barbier06ea0482018-02-22 15:45:35 +0000282template <typename T>
283using NEDepthwiseConvolutionLayerQuantizedFixture = DepthwiseConvolutionLayerValidationQuantizedFixture<Tensor, Accessor, NEDepthwiseConvolutionLayer, T>;
Anthony Barbierf45d5a92018-01-24 16:23:15 +0000284
285TEST_SUITE(Quantized)
286TEST_SUITE(QASYMM8)
Anthony Barbier06ea0482018-02-22 15:45:35 +0000287TEST_SUITE(Generic)
Jenkinsb3a371b2018-05-23 11:36:53 +0100288FIXTURE_DATA_TEST_CASE(RunSmall, NEDepthwiseConvolutionLayerQuantizedFixture<uint8_t>, framework::DatasetMode::PRECOMMIT,
289 combine(combine(combine(combine(datasets::SmallDepthwiseConvolutionLayerDataset(),
290 depth_multipliers),
291 framework::dataset::make("DataType", DataType::QASYMM8)),
292 framework::dataset::make("QuantizationInfo", { QuantizationInfo(0.5f, 10) })),
Jenkins52ba29e2018-08-29 15:32:11 +0000293 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
Anthony Barbier06ea0482018-02-22 15:45:35 +0000294{
295 validate(Accessor(_target), _reference, tolerance_qasymm8);
296}
297TEST_SUITE_END()
Anthony Barbierf45d5a92018-01-24 16:23:15 +0000298TEST_SUITE(W3x3)
Jenkinsb3a371b2018-05-23 11:36:53 +0100299FIXTURE_DATA_TEST_CASE(RunSmall, NEDepthwiseConvolutionLayerQuantizedFixture3x3<uint8_t>, framework::DatasetMode::PRECOMMIT,
300 combine(combine(combine(combine(datasets::SmallDepthwiseConvolutionLayerDataset3x3(), depth_multipliers),
301 framework::dataset::make("DataType", DataType::QASYMM8)),
302 framework::dataset::make("QuantizationInfo", { QuantizationInfo(0.5f, 10) })),
Jenkins52ba29e2018-08-29 15:32:11 +0000303 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
Anthony Barbierf45d5a92018-01-24 16:23:15 +0000304{
305 validate(Accessor(_target), _reference, tolerance_qasymm8);
306}
Jenkinsb9abeae2018-11-22 11:58:08 +0000307FIXTURE_DATA_TEST_CASE(RunOptimized, NEDepthwiseConvolutionLayerQuantizedFixture3x3<uint8_t>, framework::DatasetMode::ALL,
308 combine(combine(combine(combine(datasets::OptimizedDepthwiseConvolutionLayerDataset3x3(),
309 framework::dataset::make("DepthMultiplier", 1)),
310 framework::dataset::make("DataType",
311 DataType::QASYMM8)),
312 framework::dataset::make("QuantizationInfo", { QuantizationInfo(0.5f, 10) })),
313 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
314{
315 validate(Accessor(_target), _reference, tolerance_qasymm8);
316}
Jenkinsb3a371b2018-05-23 11:36:53 +0100317FIXTURE_DATA_TEST_CASE(RunLarge, NEDepthwiseConvolutionLayerQuantizedFixture3x3<uint8_t>, framework::DatasetMode::NIGHTLY,
318 combine(combine(combine(combine(datasets::LargeDepthwiseConvolutionLayerDataset3x3(),
319 depth_multipliers),
320 framework::dataset::make("DataType", DataType::QASYMM8)),
321 framework::dataset::make("QuantizationInfo", { QuantizationInfo(0.5f, 10) })),
Jenkins52ba29e2018-08-29 15:32:11 +0000322 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
Anthony Barbierf45d5a92018-01-24 16:23:15 +0000323{
324 validate(Accessor(_target), _reference, tolerance_qasymm8);
325}
326TEST_SUITE_END()
327TEST_SUITE_END()
Anthony Barbier8140e1e2017-12-14 23:48:46 +0000328TEST_SUITE_END()
329
330TEST_SUITE_END()
331TEST_SUITE_END()
332} // namespace validation
333} // namespace test
334} // namespace arm_compute