1*c217d954SCole Faust /*
2*c217d954SCole Faust * Copyright (c) 2017-2022 Arm Limited.
3*c217d954SCole Faust *
4*c217d954SCole Faust * SPDX-License-Identifier: MIT
5*c217d954SCole Faust *
6*c217d954SCole Faust * Permission is hereby granted, free of charge, to any person obtaining a copy
7*c217d954SCole Faust * of this software and associated documentation files (the "Software"), to
8*c217d954SCole Faust * deal in the Software without restriction, including without limitation the
9*c217d954SCole Faust * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
10*c217d954SCole Faust * sell copies of the Software, and to permit persons to whom the Software is
11*c217d954SCole Faust * furnished to do so, subject to the following conditions:
12*c217d954SCole Faust *
13*c217d954SCole Faust * The above copyright notice and this permission notice shall be included in all
14*c217d954SCole Faust * copies or substantial portions of the Software.
15*c217d954SCole Faust *
16*c217d954SCole Faust * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17*c217d954SCole Faust * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18*c217d954SCole Faust * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19*c217d954SCole Faust * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20*c217d954SCole Faust * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21*c217d954SCole Faust * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22*c217d954SCole Faust * SOFTWARE.
23*c217d954SCole Faust */
24*c217d954SCole Faust #include "arm_compute/core/Types.h"
25*c217d954SCole Faust #include "arm_compute/core/utils/misc/ShapeCalculator.h"
26*c217d954SCole Faust #include "arm_compute/runtime/NEON/functions/NEDepthwiseConvolutionLayer.h"
27*c217d954SCole Faust #include "arm_compute/runtime/Tensor.h"
28*c217d954SCole Faust #include "arm_compute/runtime/TensorAllocator.h"
29*c217d954SCole Faust #include "tests/NEON/Accessor.h"
30*c217d954SCole Faust #include "tests/PaddingCalculator.h"
31*c217d954SCole Faust #include "tests/datasets/DepthwiseConvolutionLayerDataset.h"
32*c217d954SCole Faust #include "tests/datasets/DilatedDepthwiseConvolutionLayerDataset.h"
33*c217d954SCole Faust #include "tests/framework/Asserts.h"
34*c217d954SCole Faust #include "tests/framework/Macros.h"
35*c217d954SCole Faust #include "tests/framework/datasets/Datasets.h"
36*c217d954SCole Faust #include "tests/validation/Validation.h"
37*c217d954SCole Faust #include "tests/validation/fixtures/DepthwiseConvolutionLayerFixture.h"
38*c217d954SCole Faust
39*c217d954SCole Faust namespace arm_compute
40*c217d954SCole Faust {
41*c217d954SCole Faust namespace test
42*c217d954SCole Faust {
43*c217d954SCole Faust namespace validation
44*c217d954SCole Faust {
45*c217d954SCole Faust using namespace arm_compute::misc::shape_calculator;
46*c217d954SCole Faust
47*c217d954SCole Faust namespace
48*c217d954SCole Faust {
49*c217d954SCole Faust constexpr RelativeTolerance<float> tolerance_f32(0.01f); /**< Tolerance value for comparing reference's output against implementation's output for DataType::F32 */
50*c217d954SCole Faust constexpr AbsoluteTolerance<uint8_t> tolerance_qasymm8(1); /**< Tolerance value for comparing reference's output against implementation's output for DataType::QASYMM8 */
51*c217d954SCole Faust #ifdef __ARM_FEATURE_FP16_VECTOR_ARITHMETIC
52*c217d954SCole Faust RelativeTolerance<half_float::half> tolerance_f16(half_float::half(0.02)); /**< Tolerance value for comparing reference's output against implementation's output for DataType::F16 */
53*c217d954SCole Faust constexpr float tolerance_num = 0.05f; /**< Tolerance number */
54*c217d954SCole Faust #endif // __ARM_FEATURE_FP16_VECTOR_ARITHMETIC
55*c217d954SCole Faust
56*c217d954SCole Faust const auto depth_multipliers = framework::dataset::make("DepthMultiplier", { 1, 2, 8 });
57*c217d954SCole Faust const auto large_depth_multipliers = framework::dataset::make("DepthMultiplier", { 1, 2, 5, 32 });
58*c217d954SCole Faust
59*c217d954SCole Faust //Activation Functions
60*c217d954SCole Faust const auto ActivationFunctionsDataset = framework::dataset::make("ActivationInfo",
61*c217d954SCole Faust {
62*c217d954SCole Faust ActivationLayerInfo(),
63*c217d954SCole Faust ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::RELU)
64*c217d954SCole Faust });
65*c217d954SCole Faust
66*c217d954SCole Faust const auto input_qinfo_dataset = framework::dataset::make("InputQInfo",
67*c217d954SCole Faust {
68*c217d954SCole Faust QuantizationInfo(0.3f, 10),
69*c217d954SCole Faust QuantizationInfo(2.2f, 10),
70*c217d954SCole Faust });
71*c217d954SCole Faust } // namespace
72*c217d954SCole Faust
73*c217d954SCole Faust TEST_SUITE(NEON)
TEST_SUITE(DepthwiseConvolutionLayer)74*c217d954SCole Faust TEST_SUITE(DepthwiseConvolutionLayer)
75*c217d954SCole Faust
76*c217d954SCole Faust // *INDENT-OFF*
77*c217d954SCole Faust // clang-format off
78*c217d954SCole Faust DATA_TEST_CASE(Validate3x3, framework::DatasetMode::ALL, zip(zip(zip(zip(zip(zip(zip(
79*c217d954SCole Faust framework::dataset::make("InputInfo", { TensorInfo(TensorShape(32U, 18U, 2U), 1, DataType::F32), // Mismatching data type input/weights
80*c217d954SCole Faust TensorInfo(TensorShape(32U, 18U, 3U), 1, DataType::F32), // Mismatching input feature maps
81*c217d954SCole Faust TensorInfo(TensorShape(32U, 18U, 2U), 1, DataType::F32), // Unsupported weights dimensions
82*c217d954SCole Faust TensorInfo(TensorShape(32U, 18U, 2U), 1, DataType::F32), // Mismatching depth multiplier
83*c217d954SCole Faust TensorInfo(TensorShape(32U, 18U, 2U), 1, DataType::QASYMM8), // Invalid stride
84*c217d954SCole Faust TensorInfo(TensorShape(32U, 18U, 2U), 1, DataType::F32), // Invalid biases size
85*c217d954SCole Faust TensorInfo(TensorShape(32U, 18U, 2U), 1, DataType::F32), // Invalid biases dimensions
86*c217d954SCole Faust TensorInfo(TensorShape(32U, 18U, 2U), 1, DataType::F32), // Invalid output size
87*c217d954SCole Faust TensorInfo(TensorShape(27U, 13U, 2U), 1, DataType::F32), // patch size bigger than input width
88*c217d954SCole Faust TensorInfo(TensorShape(27U, 13U, 2U), 1, DataType::F32), // dilation < 1
89*c217d954SCole Faust TensorInfo(TensorShape(27U, 13U, 2U), 1, DataType::F32),
90*c217d954SCole Faust }),
91*c217d954SCole Faust framework::dataset::make("WeightsInfo", { TensorInfo(TensorShape(3U, 3U, 2U, 2U), 1, DataType::F16),
92*c217d954SCole Faust TensorInfo(TensorShape(3U, 3U, 2U, 2U), 1, DataType::F32),
93*c217d954SCole Faust TensorInfo(TensorShape(5U, 5U, 2U, 2U), 1, DataType::F32),
94*c217d954SCole Faust TensorInfo(TensorShape(3U, 3U, 2U, 2U), 1, DataType::F32),
95*c217d954SCole Faust TensorInfo(TensorShape(3U, 3U, 2U, 2U), 1, DataType::QASYMM8),
96*c217d954SCole Faust TensorInfo(TensorShape(3U, 3U, 2U, 2U), 1, DataType::F32),
97*c217d954SCole Faust TensorInfo(TensorShape(3U, 3U, 2U, 2U), 1, DataType::F32),
98*c217d954SCole Faust TensorInfo(TensorShape(3U, 3U, 2U, 2U), 1, DataType::F32),
99*c217d954SCole Faust TensorInfo(TensorShape(3U, 3U, 2U, 2U), 1, DataType::F32),
100*c217d954SCole Faust TensorInfo(TensorShape(3U, 3U, 2U, 2U), 1, DataType::F32),
101*c217d954SCole Faust TensorInfo(TensorShape(3U, 3U, 2U, 2U), 1, DataType::F32),
102*c217d954SCole Faust })),
103*c217d954SCole Faust framework::dataset::make("BiasesInfo", { TensorInfo(TensorShape(2U), 1, DataType::F32),
104*c217d954SCole Faust TensorInfo(TensorShape(2U), 1, DataType::F32),
105*c217d954SCole Faust TensorInfo(TensorShape(2U), 1, DataType::F32),
106*c217d954SCole Faust TensorInfo(TensorShape(2U), 1, DataType::F32),
107*c217d954SCole Faust TensorInfo(TensorShape(2U), 1, DataType::S32),
108*c217d954SCole Faust TensorInfo(TensorShape(4U), 1, DataType::F32),
109*c217d954SCole Faust TensorInfo(TensorShape(2U, 2U), 1, DataType::F32),
110*c217d954SCole Faust TensorInfo(TensorShape(2U), 1, DataType::F32),
111*c217d954SCole Faust TensorInfo(TensorShape(2U), 1, DataType::F32),
112*c217d954SCole Faust TensorInfo(TensorShape(2U), 1, DataType::F32),
113*c217d954SCole Faust TensorInfo(TensorShape(2U), 1, DataType::F32),
114*c217d954SCole Faust })),
115*c217d954SCole Faust framework::dataset::make("OutputInfo", { TensorInfo(TensorShape(30U, 16U, 2U), 1, DataType::F32),
116*c217d954SCole Faust TensorInfo(TensorShape(30U, 16U, 2U), 1, DataType::F32),
117*c217d954SCole Faust TensorInfo(TensorShape(30U, 16U, 2U), 1, DataType::F32),
118*c217d954SCole Faust TensorInfo(TensorShape(30U, 16U, 2U), 1, DataType::F32),
119*c217d954SCole Faust TensorInfo(TensorShape(30U, 16U, 2U), 1, DataType::QASYMM8),
120*c217d954SCole Faust TensorInfo(TensorShape(30U, 16U, 2U), 1, DataType::F32),
121*c217d954SCole Faust TensorInfo(TensorShape(30U, 16U, 2U), 1, DataType::F32),
122*c217d954SCole Faust TensorInfo(TensorShape(32U, 18U, 2U), 1, DataType::F32),
123*c217d954SCole Faust TensorInfo(TensorShape(25U, 11U, 2U), 1, DataType::F32),
124*c217d954SCole Faust TensorInfo(TensorShape(25U, 11U, 2U), 1, DataType::F32),
125*c217d954SCole Faust TensorInfo(TensorShape(25U, 11U, 2U), 1, DataType::F32),
126*c217d954SCole Faust })),
127*c217d954SCole Faust framework::dataset::make("ConvInfo", { PadStrideInfo(1, 1, 0, 0),
128*c217d954SCole Faust PadStrideInfo(1, 1, 0, 0),
129*c217d954SCole Faust PadStrideInfo(1, 1, 0, 0),
130*c217d954SCole Faust PadStrideInfo(1, 1, 0, 0),
131*c217d954SCole Faust PadStrideInfo(4, 1, 0, 0),
132*c217d954SCole Faust PadStrideInfo(1, 1, 0, 0),
133*c217d954SCole Faust PadStrideInfo(1, 1, 0, 0),
134*c217d954SCole Faust PadStrideInfo(1, 1, 0, 0),
135*c217d954SCole Faust PadStrideInfo(1, 1, 0, 0),
136*c217d954SCole Faust PadStrideInfo(1, 1, 0, 0),
137*c217d954SCole Faust PadStrideInfo(1, 1, 0, 0),
138*c217d954SCole Faust })),
139*c217d954SCole Faust framework::dataset::make("DepthMultiplier", { 1,
140*c217d954SCole Faust 1,
141*c217d954SCole Faust 1,
142*c217d954SCole Faust 3,
143*c217d954SCole Faust 1,
144*c217d954SCole Faust 1,
145*c217d954SCole Faust 1,
146*c217d954SCole Faust 1,
147*c217d954SCole Faust 1,
148*c217d954SCole Faust 1,
149*c217d954SCole Faust 1,
150*c217d954SCole Faust })),
151*c217d954SCole Faust framework::dataset::make("Dilation", { Size2D(1U, 1U),
152*c217d954SCole Faust Size2D(1U, 1U),
153*c217d954SCole Faust Size2D(1U, 1U),
154*c217d954SCole Faust Size2D(1U, 1U),
155*c217d954SCole Faust Size2D(1U, 1U),
156*c217d954SCole Faust Size2D(1U, 1U),
157*c217d954SCole Faust Size2D(1U, 1U),
158*c217d954SCole Faust Size2D(1U, 1U),
159*c217d954SCole Faust Size2D(25U, 1U),
160*c217d954SCole Faust Size2D(0U, 1U),
161*c217d954SCole Faust Size2D(1U, 1U),
162*c217d954SCole Faust })),
163*c217d954SCole Faust framework::dataset::make("Expected", { false, false, false, false, false, false, false, false, false, false, true })),
164*c217d954SCole Faust input_info, weights_info, biases_info, output_info, conv_info, depth_multiplier,dilation, expected)
165*c217d954SCole Faust {
166*c217d954SCole Faust bool is_valid = bool(NEDepthwiseConvolutionLayer::validate(&input_info.clone()->set_is_resizable(false),
167*c217d954SCole Faust &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, ActivationLayerInfo(), dilation));
168*c217d954SCole Faust ARM_COMPUTE_EXPECT(is_valid == expected, framework::LogLevel::ERRORS);
169*c217d954SCole Faust }
170*c217d954SCole Faust
171*c217d954SCole Faust DATA_TEST_CASE(ValidateGeneric, framework::DatasetMode::ALL, zip(zip(zip(zip(zip(zip(zip(
172*c217d954SCole Faust framework::dataset::make("InputInfo", { TensorInfo(TensorShape(27U, 13U, 2U), 1, DataType::F32), // Mismatching data type input/weights
173*c217d954SCole Faust TensorInfo(TensorShape(27U, 13U, 3U), 1, DataType::F32), // Mismatching input feature maps
174*c217d954SCole Faust TensorInfo(TensorShape(27U, 13U, 2U), 1, DataType::F32), // Mismatching depth multiplier
175*c217d954SCole Faust TensorInfo(TensorShape(27U, 13U, 2U), 1, DataType::F32), // Invalid biases size
176*c217d954SCole Faust TensorInfo(TensorShape(27U, 13U, 2U), 1, DataType::F32), // Invalid biases dimensions
177*c217d954SCole Faust TensorInfo(TensorShape(27U, 13U, 2U), 1, DataType::F32), // Invalid output size
178*c217d954SCole Faust TensorInfo(TensorShape(27U, 13U, 8U), 1, DataType::F32), // Patch size bigger than input width
179*c217d954SCole Faust TensorInfo(TensorShape(27U, 13U, 8U), 1, DataType::F32), // Dilation < 1
180*c217d954SCole Faust }),
181*c217d954SCole Faust framework::dataset::make("WeightsInfo", { TensorInfo(TensorShape(3U, 3U, 2U), 1, DataType::F16),
182*c217d954SCole Faust TensorInfo(TensorShape(3U, 3U, 2U), 1, DataType::F32),
183*c217d954SCole Faust TensorInfo(TensorShape(3U, 3U, 2U), 1, DataType::F32),
184*c217d954SCole Faust TensorInfo(TensorShape(3U, 3U, 2U), 1, DataType::F32),
185*c217d954SCole Faust TensorInfo(TensorShape(3U, 3U, 2U), 1, DataType::F32),
186*c217d954SCole Faust TensorInfo(TensorShape(3U, 3U, 2U), 1, DataType::F32),
187*c217d954SCole Faust TensorInfo(TensorShape(3U, 3U, 16U), 1, DataType::F32),
188*c217d954SCole Faust TensorInfo(TensorShape(3U, 3U, 16U), 1, DataType::F32),
189*c217d954SCole Faust })),
190*c217d954SCole Faust framework::dataset::make("BiasesInfo", { TensorInfo(TensorShape(2U), 1, DataType::F32),
191*c217d954SCole Faust TensorInfo(TensorShape(2U), 1, DataType::F32),
192*c217d954SCole Faust TensorInfo(TensorShape(2U), 1, DataType::F32),
193*c217d954SCole Faust TensorInfo(TensorShape(4U), 1, DataType::F32),
194*c217d954SCole Faust TensorInfo(TensorShape(2U, 2U), 1, DataType::F32),
195*c217d954SCole Faust TensorInfo(TensorShape(2U), 1, DataType::F32),
196*c217d954SCole Faust TensorInfo(TensorShape(16U), 1, DataType::F32),
197*c217d954SCole Faust TensorInfo(TensorShape(16U), 1, DataType::F32),
198*c217d954SCole Faust })),
199*c217d954SCole Faust framework::dataset::make("OutputInfo", { TensorInfo(TensorShape(25U, 11U, 2U), 1, DataType::F32),
200*c217d954SCole Faust TensorInfo(TensorShape(25U, 11U, 2U), 1, DataType::F32),
201*c217d954SCole Faust TensorInfo(TensorShape(25U, 11U, 2U), 1, DataType::F32),
202*c217d954SCole Faust TensorInfo(TensorShape(25U, 11U, 2U), 1, DataType::F32),
203*c217d954SCole Faust TensorInfo(TensorShape(25U, 11U, 2U), 1, DataType::F32),
204*c217d954SCole Faust TensorInfo(TensorShape(27U, 13U, 2U), 1, DataType::F32),
205*c217d954SCole Faust TensorInfo(TensorShape(25U, 11U, 16U), 1, DataType::F32),
206*c217d954SCole Faust TensorInfo(TensorShape(25U, 11U, 16U), 1, DataType::F32),
207*c217d954SCole Faust })),
208*c217d954SCole Faust framework::dataset::make("ConvInfo", { PadStrideInfo(1, 1, 0, 0),
209*c217d954SCole Faust PadStrideInfo(1, 1, 0, 0),
210*c217d954SCole Faust PadStrideInfo(1, 1, 0, 0),
211*c217d954SCole Faust PadStrideInfo(1, 1, 0, 0),
212*c217d954SCole Faust PadStrideInfo(1, 1, 0, 0),
213*c217d954SCole Faust PadStrideInfo(1, 1, 0, 0),
214*c217d954SCole Faust PadStrideInfo(1, 1, 0, 0),
215*c217d954SCole Faust PadStrideInfo(1, 1, 0, 0),
216*c217d954SCole Faust })),
217*c217d954SCole Faust framework::dataset::make("DepthMultiplier", { 1,
218*c217d954SCole Faust 1,
219*c217d954SCole Faust 3,
220*c217d954SCole Faust 1,
221*c217d954SCole Faust 1,
222*c217d954SCole Faust 1,
223*c217d954SCole Faust 2,
224*c217d954SCole Faust 2,
225*c217d954SCole Faust })),
226*c217d954SCole Faust framework::dataset::make("Dilation", { Size2D(1U, 1U),
227*c217d954SCole Faust Size2D(1U, 1U),
228*c217d954SCole Faust Size2D(1U, 1U),
229*c217d954SCole Faust Size2D(1U, 1U),
230*c217d954SCole Faust Size2D(1U, 1U),
231*c217d954SCole Faust Size2D(1U, 1U),
232*c217d954SCole Faust Size2D(25U, 1U),
233*c217d954SCole Faust Size2D(0U, 1U),
234*c217d954SCole Faust })),
235*c217d954SCole Faust framework::dataset::make("Expected", { false, false, false, false, false, false, false, false})),
236*c217d954SCole Faust input_info, weights_info, biases_info, output_info, conv_info, depth_multiplier,dilation, expected)
237*c217d954SCole Faust {
238*c217d954SCole Faust 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, ActivationLayerInfo(), dilation));
239*c217d954SCole Faust ARM_COMPUTE_EXPECT(is_valid == expected, framework::LogLevel::ERRORS);
240*c217d954SCole Faust }
241*c217d954SCole Faust // clang-format on
242*c217d954SCole Faust // *INDENT-ON*
243*c217d954SCole Faust template <typename T>
244*c217d954SCole Faust using NEDepthwiseConvolutionLayerFixture = DepthwiseConvolutionLayerValidationFixture<Tensor, Accessor, NEDepthwiseConvolutionLayer, T>;
245*c217d954SCole Faust template <typename T>
246*c217d954SCole Faust using NEDepthwiseConvolutionLayerMixedDataLayoutFixture = DepthwiseConvolutionLayerValidationFixture<Tensor, Accessor, NEDepthwiseConvolutionLayer, T, true>;
247*c217d954SCole Faust template <typename T>
248*c217d954SCole Faust using NEDepthwiseConvolutionLayerVariableWeightsFixture = DepthwiseConvolutionLayerValidationFixture<Tensor, Accessor, NEDepthwiseConvolutionLayer, T, false, false, true>;
249*c217d954SCole Faust
250*c217d954SCole Faust TEST_SUITE(Float)
TEST_SUITE(F32)251*c217d954SCole Faust TEST_SUITE(F32)
252*c217d954SCole Faust TEST_SUITE(Generic)
253*c217d954SCole Faust FIXTURE_DATA_TEST_CASE_NEW(RunSmall, NEDepthwiseConvolutionLayerFixture<float>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(combine(datasets::SmallDepthwiseConvolutionLayerDataset(),
254*c217d954SCole Faust depth_multipliers),
255*c217d954SCole Faust framework::dataset::make("DataType", DataType::F32)),
256*c217d954SCole Faust framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })),
257*c217d954SCole Faust ActivationFunctionsDataset))
258*c217d954SCole Faust {
259*c217d954SCole Faust validate(Accessor(_target), _reference, tolerance_f32);
260*c217d954SCole Faust }
261*c217d954SCole Faust FIXTURE_DATA_TEST_CASE_NEW(RunMixedDataLayout, NEDepthwiseConvolutionLayerMixedDataLayoutFixture<float>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(combine(datasets::SmallDepthwiseConvolutionLayerDataset(),
262*c217d954SCole Faust framework::dataset::make("DepthMultiplier", { 2 })),
263*c217d954SCole Faust framework::dataset::make("DataType", DataType::F32)),
264*c217d954SCole Faust framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })),
265*c217d954SCole Faust framework::dataset::make("ActivationInfo", ActivationLayerInfo())))
266*c217d954SCole Faust {
267*c217d954SCole Faust validate(Accessor(_target), _reference, tolerance_f32);
268*c217d954SCole Faust }
269*c217d954SCole Faust FIXTURE_DATA_TEST_CASE_NEW(RunLarge, NEDepthwiseConvolutionLayerFixture<float>, framework::DatasetMode::NIGHTLY, combine(combine(combine(combine(datasets::LargeDepthwiseConvolutionLayerDataset(),
270*c217d954SCole Faust large_depth_multipliers),
271*c217d954SCole Faust framework::dataset::make("DataType",
272*c217d954SCole Faust DataType::F32)),
273*c217d954SCole Faust framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })),
274*c217d954SCole Faust ActivationFunctionsDataset))
275*c217d954SCole Faust {
276*c217d954SCole Faust validate(Accessor(_target), _reference, tolerance_f32);
277*c217d954SCole Faust }
278*c217d954SCole Faust
279*c217d954SCole Faust TEST_SUITE(Dilation)
280*c217d954SCole Faust FIXTURE_DATA_TEST_CASE_NEW(RunSmall, NEDepthwiseConvolutionLayerFixture<float>, framework::DatasetMode::PRECOMMIT,
281*c217d954SCole Faust combine(combine(combine(combine(datasets::SmallDepthwiseDilatedConvolutionLayerDataset(),
282*c217d954SCole Faust depth_multipliers),
283*c217d954SCole Faust framework::dataset::make("DataType",
284*c217d954SCole Faust DataType::F32)),
285*c217d954SCole Faust framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })),
286*c217d954SCole Faust ActivationFunctionsDataset))
287*c217d954SCole Faust {
288*c217d954SCole Faust validate(Accessor(_target), _reference, tolerance_f32);
289*c217d954SCole Faust }
290*c217d954SCole Faust FIXTURE_DATA_TEST_CASE_NEW(RunLarge, NEDepthwiseConvolutionLayerFixture<float>, framework::DatasetMode::NIGHTLY,
291*c217d954SCole Faust combine(combine(combine(combine(datasets::LargeDepthwiseDilatedConvolutionLayerDataset(),
292*c217d954SCole Faust large_depth_multipliers),
293*c217d954SCole Faust framework::dataset::make("DataType",
294*c217d954SCole Faust DataType::F32)),
295*c217d954SCole Faust framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })),
296*c217d954SCole Faust ActivationFunctionsDataset))
297*c217d954SCole Faust {
298*c217d954SCole Faust validate(Accessor(_target), _reference, tolerance_f32);
299*c217d954SCole Faust }
300*c217d954SCole Faust TEST_SUITE_END() // Dilation
TEST_SUITE_END()301*c217d954SCole Faust TEST_SUITE_END() // Generic
302*c217d954SCole Faust
303*c217d954SCole Faust TEST_SUITE(W3x3)
304*c217d954SCole Faust FIXTURE_DATA_TEST_CASE_NEW(RunSmall, NEDepthwiseConvolutionLayerFixture<float>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(combine(datasets::SmallDepthwiseConvolutionLayerDataset3x3(),
305*c217d954SCole Faust depth_multipliers),
306*c217d954SCole Faust framework::dataset::make("DataType",
307*c217d954SCole Faust DataType::F32)),
308*c217d954SCole Faust framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })),
309*c217d954SCole Faust ActivationFunctionsDataset))
310*c217d954SCole Faust {
311*c217d954SCole Faust validate(Accessor(_target), _reference, tolerance_f32);
312*c217d954SCole Faust }
313*c217d954SCole Faust FIXTURE_DATA_TEST_CASE_NEW(RunLarge, NEDepthwiseConvolutionLayerFixture<float>, framework::DatasetMode::NIGHTLY,
314*c217d954SCole Faust combine(combine(combine(combine(datasets::LargeDepthwiseConvolutionLayerDataset3x3(),
315*c217d954SCole Faust large_depth_multipliers),
316*c217d954SCole Faust framework::dataset::make("DataType",
317*c217d954SCole Faust DataType::F32)),
318*c217d954SCole Faust framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })),
319*c217d954SCole Faust ActivationFunctionsDataset))
320*c217d954SCole Faust {
321*c217d954SCole Faust validate(Accessor(_target), _reference, tolerance_f32);
322*c217d954SCole Faust }
323*c217d954SCole Faust TEST_SUITE(Dilation)
324*c217d954SCole Faust FIXTURE_DATA_TEST_CASE_NEW(RunSmall, NEDepthwiseConvolutionLayerFixture<float>, framework::DatasetMode::PRECOMMIT,
325*c217d954SCole Faust combine(combine(combine(combine(datasets::SmallDepthwiseDilatedConvolutionLayerDataset3x3(),
326*c217d954SCole Faust depth_multipliers),
327*c217d954SCole Faust framework::dataset::make("DataType",
328*c217d954SCole Faust DataType::F32)),
329*c217d954SCole Faust framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })),
330*c217d954SCole Faust ActivationFunctionsDataset))
331*c217d954SCole Faust {
332*c217d954SCole Faust validate(Accessor(_target), _reference, tolerance_f32);
333*c217d954SCole Faust }
334*c217d954SCole Faust FIXTURE_DATA_TEST_CASE_NEW(RunLarge, NEDepthwiseConvolutionLayerFixture<float>, framework::DatasetMode::NIGHTLY,
335*c217d954SCole Faust combine(combine(combine(combine(datasets::LargeDepthwiseDilatedConvolutionLayerDataset3x3(),
336*c217d954SCole Faust large_depth_multipliers),
337*c217d954SCole Faust framework::dataset::make("DataType",
338*c217d954SCole Faust DataType::F32)),
339*c217d954SCole Faust framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })),
340*c217d954SCole Faust ActivationFunctionsDataset))
341*c217d954SCole Faust {
342*c217d954SCole Faust validate(Accessor(_target), _reference, tolerance_f32);
343*c217d954SCole Faust }
344*c217d954SCole Faust
345*c217d954SCole Faust TEST_SUITE_END() // Dilation
TEST_SUITE_END()346*c217d954SCole Faust TEST_SUITE_END() // W3x3
347*c217d954SCole Faust
348*c217d954SCole Faust TEST_SUITE(Optimized)
349*c217d954SCole Faust FIXTURE_DATA_TEST_CASE_NEW(RunSmall3x3, NEDepthwiseConvolutionLayerFixture<float>, framework::DatasetMode::PRECOMMIT,
350*c217d954SCole Faust combine(combine(combine(combine(datasets::SmallOptimizedDepthwiseConvolutionLayerDataset3x3(),
351*c217d954SCole Faust framework::dataset::make("DepthMultiplier", 1)),
352*c217d954SCole Faust framework::dataset::make("DataType",
353*c217d954SCole Faust DataType::F32)),
354*c217d954SCole Faust framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })),
355*c217d954SCole Faust ActivationFunctionsDataset))
356*c217d954SCole Faust {
357*c217d954SCole Faust validate(Accessor(_target), _reference, tolerance_f32);
358*c217d954SCole Faust }
359*c217d954SCole Faust FIXTURE_DATA_TEST_CASE_NEW(RunVariableWeightsSmall3x3, NEDepthwiseConvolutionLayerVariableWeightsFixture<float>, framework::DatasetMode::PRECOMMIT,
360*c217d954SCole Faust combine(combine(combine(combine(datasets::SmallOptimizedDepthwiseConvolutionLayerDataset3x3(),
361*c217d954SCole Faust framework::dataset::make("DepthMultiplier", 1)),
362*c217d954SCole Faust framework::dataset::make("DataType",
363*c217d954SCole Faust DataType::F32)),
364*c217d954SCole Faust framework::dataset::make("DataLayout", { DataLayout::NHWC })),
365*c217d954SCole Faust ActivationFunctionsDataset))
366*c217d954SCole Faust {
367*c217d954SCole Faust validate(Accessor(_target), _reference, tolerance_f32);
368*c217d954SCole Faust }
369*c217d954SCole Faust FIXTURE_DATA_TEST_CASE_NEW(RunMixedDataLayout3x3, NEDepthwiseConvolutionLayerMixedDataLayoutFixture<float>, framework::DatasetMode::PRECOMMIT,
370*c217d954SCole Faust combine(combine(combine(combine(datasets::SmallOptimizedDepthwiseConvolutionLayerDataset3x3(),
371*c217d954SCole Faust framework::dataset::make("DepthMultiplier", 1)),
372*c217d954SCole Faust framework::dataset::make("DataType", DataType::F32)),
373*c217d954SCole Faust framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })),
374*c217d954SCole Faust framework::dataset::make("ActivationInfo", ActivationLayerInfo())))
375*c217d954SCole Faust {
376*c217d954SCole Faust validate(Accessor(_target), _reference, tolerance_f32);
377*c217d954SCole Faust }
378*c217d954SCole Faust FIXTURE_DATA_TEST_CASE_NEW(RunSmall5x5, NEDepthwiseConvolutionLayerFixture<float>, framework::DatasetMode::PRECOMMIT,
379*c217d954SCole Faust combine(combine(combine(combine(datasets::SmallOptimizedDepthwiseConvolutionLayerDataset5x5(),
380*c217d954SCole Faust framework::dataset::make("DepthMultiplier", 1)),
381*c217d954SCole Faust framework::dataset::make("DataType",
382*c217d954SCole Faust DataType::F32)),
383*c217d954SCole Faust framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })),
384*c217d954SCole Faust ActivationFunctionsDataset))
385*c217d954SCole Faust {
386*c217d954SCole Faust validate(Accessor(_target), _reference, tolerance_f32);
387*c217d954SCole Faust }
388*c217d954SCole Faust FIXTURE_DATA_TEST_CASE_NEW(RunVariableWeightsSmall5x5, NEDepthwiseConvolutionLayerVariableWeightsFixture<float>, framework::DatasetMode::PRECOMMIT,
389*c217d954SCole Faust combine(combine(combine(combine(datasets::SmallOptimizedDepthwiseConvolutionLayerDataset5x5(),
390*c217d954SCole Faust framework::dataset::make("DepthMultiplier", 1)),
391*c217d954SCole Faust framework::dataset::make("DataType",
392*c217d954SCole Faust DataType::F32)),
393*c217d954SCole Faust framework::dataset::make("DataLayout", { DataLayout::NHWC })),
394*c217d954SCole Faust ActivationFunctionsDataset))
395*c217d954SCole Faust {
396*c217d954SCole Faust validate(Accessor(_target), _reference, tolerance_f32);
397*c217d954SCole Faust }
398*c217d954SCole Faust FIXTURE_DATA_TEST_CASE_NEW(RunLarge3x3, NEDepthwiseConvolutionLayerFixture<float>, framework::DatasetMode::NIGHTLY,
399*c217d954SCole Faust combine(combine(combine(combine(datasets::LargeOptimizedDepthwiseConvolutionLayerDataset3x3(),
400*c217d954SCole Faust framework::dataset::make("DepthMultiplier", 1)),
401*c217d954SCole Faust framework::dataset::make("DataType",
402*c217d954SCole Faust DataType::F32)),
403*c217d954SCole Faust framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })),
404*c217d954SCole Faust ActivationFunctionsDataset))
405*c217d954SCole Faust {
406*c217d954SCole Faust validate(Accessor(_target), _reference, tolerance_f32);
407*c217d954SCole Faust }
408*c217d954SCole Faust FIXTURE_DATA_TEST_CASE_NEW(RunVariableWeightsLarge3x3, NEDepthwiseConvolutionLayerVariableWeightsFixture<float>, framework::DatasetMode::NIGHTLY,
409*c217d954SCole Faust combine(combine(combine(combine(datasets::LargeOptimizedDepthwiseConvolutionLayerDataset3x3(),
410*c217d954SCole Faust framework::dataset::make("DepthMultiplier", 1)),
411*c217d954SCole Faust framework::dataset::make("DataType",
412*c217d954SCole Faust DataType::F32)),
413*c217d954SCole Faust framework::dataset::make("DataLayout", { DataLayout::NHWC })),
414*c217d954SCole Faust ActivationFunctionsDataset))
415*c217d954SCole Faust {
416*c217d954SCole Faust validate(Accessor(_target), _reference, tolerance_f32);
417*c217d954SCole Faust }
418*c217d954SCole Faust TEST_SUITE_END() // Optimized
TEST_SUITE_END()419*c217d954SCole Faust TEST_SUITE_END() // F32
420*c217d954SCole Faust
421*c217d954SCole Faust #ifdef __ARM_FEATURE_FP16_VECTOR_ARITHMETIC
422*c217d954SCole Faust TEST_SUITE(F16)
423*c217d954SCole Faust TEST_SUITE(Generic)
424*c217d954SCole Faust FIXTURE_DATA_TEST_CASE_NEW(RunSmall, NEDepthwiseConvolutionLayerFixture<half>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(combine(datasets::SmallDepthwiseConvolutionLayerDataset(),
425*c217d954SCole Faust depth_multipliers),
426*c217d954SCole Faust framework::dataset::make("DataType",
427*c217d954SCole Faust DataType::F16)),
428*c217d954SCole Faust framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })),
429*c217d954SCole Faust ActivationFunctionsDataset))
430*c217d954SCole Faust {
431*c217d954SCole Faust validate(Accessor(_target), _reference, tolerance_f16, tolerance_num);
432*c217d954SCole Faust }
433*c217d954SCole Faust FIXTURE_DATA_TEST_CASE_NEW(RunLarge, NEDepthwiseConvolutionLayerFixture<half>, framework::DatasetMode::NIGHTLY, combine(combine(combine(combine(datasets::LargeDepthwiseConvolutionLayerDataset(),
434*c217d954SCole Faust large_depth_multipliers),
435*c217d954SCole Faust framework::dataset::make("DataType",
436*c217d954SCole Faust DataType::F16)),
437*c217d954SCole Faust framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })),
438*c217d954SCole Faust ActivationFunctionsDataset))
439*c217d954SCole Faust {
440*c217d954SCole Faust validate(Accessor(_target), _reference, tolerance_f16, tolerance_num);
441*c217d954SCole Faust }
442*c217d954SCole Faust
443*c217d954SCole Faust TEST_SUITE(Dilation)
444*c217d954SCole Faust FIXTURE_DATA_TEST_CASE_NEW(RunSmall, NEDepthwiseConvolutionLayerFixture<half>, framework::DatasetMode::PRECOMMIT,
445*c217d954SCole Faust combine(combine(combine(combine(datasets::SmallDepthwiseDilatedConvolutionLayerDataset(),
446*c217d954SCole Faust depth_multipliers),
447*c217d954SCole Faust framework::dataset::make("DataType",
448*c217d954SCole Faust DataType::F16)),
449*c217d954SCole Faust framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })),
450*c217d954SCole Faust ActivationFunctionsDataset))
451*c217d954SCole Faust {
452*c217d954SCole Faust validate(Accessor(_target), _reference, tolerance_f16, tolerance_num);
453*c217d954SCole Faust }
454*c217d954SCole Faust FIXTURE_DATA_TEST_CASE_NEW(RunLarge, NEDepthwiseConvolutionLayerFixture<half>, framework::DatasetMode::NIGHTLY,
455*c217d954SCole Faust combine(combine(combine(combine(datasets::LargeDepthwiseDilatedConvolutionLayerDataset(),
456*c217d954SCole Faust large_depth_multipliers),
457*c217d954SCole Faust framework::dataset::make("DataType",
458*c217d954SCole Faust DataType::F16)),
459*c217d954SCole Faust framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })),
460*c217d954SCole Faust ActivationFunctionsDataset))
461*c217d954SCole Faust {
462*c217d954SCole Faust validate(Accessor(_target), _reference, tolerance_f16, tolerance_num);
463*c217d954SCole Faust }
464*c217d954SCole Faust TEST_SUITE_END() // Dilation
465*c217d954SCole Faust
466*c217d954SCole Faust TEST_SUITE_END() // Generic
467*c217d954SCole Faust template <typename T>
468*c217d954SCole Faust using NEDepthwiseConvolutionLayerFixture = DepthwiseConvolutionLayerValidationFixture<Tensor, Accessor, NEDepthwiseConvolutionLayer, T>;
469*c217d954SCole Faust TEST_SUITE(W3x3)
470*c217d954SCole Faust FIXTURE_DATA_TEST_CASE_NEW(RunSmall, NEDepthwiseConvolutionLayerFixture<half>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(combine(datasets::SmallDepthwiseConvolutionLayerDataset3x3(),
471*c217d954SCole Faust depth_multipliers),
472*c217d954SCole Faust framework::dataset::make("DataType",
473*c217d954SCole Faust DataType::F16)),
474*c217d954SCole Faust framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })),
475*c217d954SCole Faust ActivationFunctionsDataset))
476*c217d954SCole Faust {
477*c217d954SCole Faust validate(Accessor(_target), _reference, tolerance_f16);
478*c217d954SCole Faust }
479*c217d954SCole Faust FIXTURE_DATA_TEST_CASE_NEW(RunLarge, NEDepthwiseConvolutionLayerFixture<half>, framework::DatasetMode::NIGHTLY,
480*c217d954SCole Faust combine(combine(combine(combine(datasets::LargeDepthwiseConvolutionLayerDataset3x3(),
481*c217d954SCole Faust large_depth_multipliers),
482*c217d954SCole Faust framework::dataset::make("DataType",
483*c217d954SCole Faust DataType::F16)),
484*c217d954SCole Faust framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })),
485*c217d954SCole Faust ActivationFunctionsDataset))
486*c217d954SCole Faust {
487*c217d954SCole Faust validate(Accessor(_target), _reference, tolerance_f16);
488*c217d954SCole Faust }
489*c217d954SCole Faust
490*c217d954SCole Faust TEST_SUITE(Dilation)
491*c217d954SCole Faust
492*c217d954SCole Faust FIXTURE_DATA_TEST_CASE_NEW(RunSmall, NEDepthwiseConvolutionLayerFixture<half>, framework::DatasetMode::PRECOMMIT,
493*c217d954SCole Faust combine(combine(combine(combine(datasets::SmallDepthwiseDilatedConvolutionLayerDataset3x3(),
494*c217d954SCole Faust depth_multipliers),
495*c217d954SCole Faust framework::dataset::make("DataType",
496*c217d954SCole Faust DataType::F16)),
497*c217d954SCole Faust framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })),
498*c217d954SCole Faust ActivationFunctionsDataset))
499*c217d954SCole Faust {
500*c217d954SCole Faust validate(Accessor(_target), _reference, tolerance_f16);
501*c217d954SCole Faust }
502*c217d954SCole Faust FIXTURE_DATA_TEST_CASE_NEW(RunLarge, NEDepthwiseConvolutionLayerFixture<half>, framework::DatasetMode::NIGHTLY,
503*c217d954SCole Faust combine(combine(combine(combine(datasets::LargeDepthwiseDilatedConvolutionLayerDataset3x3(),
504*c217d954SCole Faust large_depth_multipliers),
505*c217d954SCole Faust framework::dataset::make("DataType",
506*c217d954SCole Faust DataType::F16)),
507*c217d954SCole Faust framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })),
508*c217d954SCole Faust ActivationFunctionsDataset))
509*c217d954SCole Faust {
510*c217d954SCole Faust validate(Accessor(_target), _reference, tolerance_f16);
511*c217d954SCole Faust }
512*c217d954SCole Faust
513*c217d954SCole Faust TEST_SUITE_END() // Dilation
TEST_SUITE_END()514*c217d954SCole Faust TEST_SUITE_END() // W3x3
515*c217d954SCole Faust
516*c217d954SCole Faust TEST_SUITE(Optimized)
517*c217d954SCole Faust FIXTURE_DATA_TEST_CASE_NEW(RunSmallW3x3, NEDepthwiseConvolutionLayerFixture<half>, framework::DatasetMode::PRECOMMIT,
518*c217d954SCole Faust combine(combine(combine(combine(datasets::SmallOptimizedDepthwiseConvolutionLayerDataset3x3(),
519*c217d954SCole Faust framework::dataset::make("DepthMultiplier", 1)),
520*c217d954SCole Faust framework::dataset::make("DataType",
521*c217d954SCole Faust DataType::F16)),
522*c217d954SCole Faust framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })),
523*c217d954SCole Faust ActivationFunctionsDataset))
524*c217d954SCole Faust {
525*c217d954SCole Faust validate(Accessor(_target), _reference, tolerance_f16);
526*c217d954SCole Faust }
527*c217d954SCole Faust FIXTURE_DATA_TEST_CASE_NEW(RunSmallW5x5, NEDepthwiseConvolutionLayerFixture<half>, framework::DatasetMode::PRECOMMIT,
528*c217d954SCole Faust combine(combine(combine(combine(datasets::SmallOptimizedDepthwiseConvolutionLayerDataset5x5(),
529*c217d954SCole Faust framework::dataset::make("DepthMultiplier", 1)),
530*c217d954SCole Faust framework::dataset::make("DataType",
531*c217d954SCole Faust DataType::F16)),
532*c217d954SCole Faust framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })),
533*c217d954SCole Faust ActivationFunctionsDataset))
534*c217d954SCole Faust {
535*c217d954SCole Faust validate(Accessor(_target), _reference, tolerance_f16);
536*c217d954SCole Faust }
537*c217d954SCole Faust FIXTURE_DATA_TEST_CASE_NEW(RunLargeW3x3, NEDepthwiseConvolutionLayerFixture<half>, framework::DatasetMode::NIGHTLY,
538*c217d954SCole Faust combine(combine(combine(combine(datasets::LargeOptimizedDepthwiseConvolutionLayerDataset3x3(),
539*c217d954SCole Faust framework::dataset::make("DepthMultiplier", 1)),
540*c217d954SCole Faust framework::dataset::make("DataType",
541*c217d954SCole Faust DataType::F16)),
542*c217d954SCole Faust framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })),
543*c217d954SCole Faust ActivationFunctionsDataset))
544*c217d954SCole Faust {
545*c217d954SCole Faust validate(Accessor(_target), _reference, tolerance_f16);
546*c217d954SCole Faust }
547*c217d954SCole Faust TEST_SUITE_END() // Optimized
548*c217d954SCole Faust TEST_SUITE_END() // FP16
549*c217d954SCole Faust #endif // __ARM_FEATURE_FP16_VECTOR_ARITHMETIC
550*c217d954SCole Faust
551*c217d954SCole Faust TEST_SUITE_END() // Float
552*c217d954SCole Faust
553*c217d954SCole Faust template <typename T>
554*c217d954SCole Faust using NEDepthwiseConvolutionLayerQuantizedFixture = DepthwiseConvolutionLayerValidationQuantizedFixture<Tensor, Accessor, NEDepthwiseConvolutionLayer, T>;
555*c217d954SCole Faust template <typename T>
556*c217d954SCole Faust using NEDepthwiseConvolutionLayerQuantizedMixedDataLayoutFixture = DepthwiseConvolutionLayerValidationQuantizedFixture<Tensor, Accessor, NEDepthwiseConvolutionLayer, T, true>;
557*c217d954SCole Faust using NEDepthwiseConvolutionLayerQuantizedSymmetricPerChannelFixture = DepthwiseConvolutionLayerValidationQuantizedPerChannelFixture<Tensor, Accessor, NEDepthwiseConvolutionLayer, uint8_t, int8_t>;
558*c217d954SCole Faust
559*c217d954SCole Faust TEST_SUITE(Quantized)
TEST_SUITE(QASYMM8)560*c217d954SCole Faust TEST_SUITE(QASYMM8)
561*c217d954SCole Faust TEST_SUITE(Generic)
562*c217d954SCole Faust FIXTURE_DATA_TEST_CASE_NEW(RunSmall, NEDepthwiseConvolutionLayerQuantizedFixture<uint8_t>, framework::DatasetMode::PRECOMMIT,
563*c217d954SCole Faust combine(combine(combine(combine(combine(combine(datasets::SmallDepthwiseConvolutionLayerDataset(),
564*c217d954SCole Faust depth_multipliers),
565*c217d954SCole Faust framework::dataset::make("DataType", DataType::QASYMM8)),
566*c217d954SCole Faust input_qinfo_dataset),
567*c217d954SCole Faust framework::dataset::make("DstQuantizationInfo", { QuantizationInfo(0.5f, 4) })),
568*c217d954SCole Faust framework::dataset::make("DataLayout", { DataLayout::NHWC })),
569*c217d954SCole Faust ActivationFunctionsDataset))
570*c217d954SCole Faust {
571*c217d954SCole Faust validate(Accessor(_target), _reference, tolerance_qasymm8);
572*c217d954SCole Faust }
573*c217d954SCole Faust FIXTURE_DATA_TEST_CASE_NEW(RunMixedDataLayout, NEDepthwiseConvolutionLayerQuantizedMixedDataLayoutFixture<uint8_t>, framework::DatasetMode::PRECOMMIT,
574*c217d954SCole Faust combine(combine(combine(combine(combine(combine(datasets::SmallDepthwiseConvolutionLayerDataset(),
575*c217d954SCole Faust framework::dataset::make("DepthMultiplier", { 2 })),
576*c217d954SCole Faust framework::dataset::make("DataType", DataType::QASYMM8)),
577*c217d954SCole Faust input_qinfo_dataset),
578*c217d954SCole Faust framework::dataset::make("DstQuantizationInfo", { QuantizationInfo(0.5f, 4) })),
579*c217d954SCole Faust framework::dataset::make("DataLayout", { DataLayout::NHWC })),
580*c217d954SCole Faust framework::dataset::make("ActivationInfo", ActivationLayerInfo())))
581*c217d954SCole Faust {
582*c217d954SCole Faust validate(Accessor(_target), _reference, tolerance_qasymm8);
583*c217d954SCole Faust }
584*c217d954SCole Faust TEST_SUITE(Dilation)
585*c217d954SCole Faust FIXTURE_DATA_TEST_CASE_NEW(RunSmall, NEDepthwiseConvolutionLayerQuantizedFixture<uint8_t>, framework::DatasetMode::PRECOMMIT,
586*c217d954SCole Faust combine(combine(combine(combine(combine(combine(datasets::SmallDepthwiseDilatedConvolutionLayerDataset(),
587*c217d954SCole Faust depth_multipliers),
588*c217d954SCole Faust framework::dataset::make("DataType", DataType::QASYMM8)),
589*c217d954SCole Faust input_qinfo_dataset),
590*c217d954SCole Faust framework::dataset::make("DstQuantizationInfo", { QuantizationInfo(0.8f, 1) })),
591*c217d954SCole Faust framework::dataset::make("DataLayout", { DataLayout::NHWC })),
592*c217d954SCole Faust ActivationFunctionsDataset))
593*c217d954SCole Faust {
594*c217d954SCole Faust validate(Accessor(_target), _reference, tolerance_qasymm8);
595*c217d954SCole Faust }
596*c217d954SCole Faust FIXTURE_DATA_TEST_CASE_NEW(RunLarge, NEDepthwiseConvolutionLayerQuantizedFixture<uint8_t>, framework::DatasetMode::NIGHTLY,
597*c217d954SCole Faust combine(combine(combine(combine(combine(combine(datasets::LargeDepthwiseDilatedConvolutionLayerDataset(),
598*c217d954SCole Faust large_depth_multipliers),
599*c217d954SCole Faust framework::dataset::make("DataType", DataType::QASYMM8)),
600*c217d954SCole Faust input_qinfo_dataset),
601*c217d954SCole Faust framework::dataset::make("DstQuantizationInfo", { QuantizationInfo(0.9f, 11) })),
602*c217d954SCole Faust framework::dataset::make("DataLayout", { DataLayout::NHWC })),
603*c217d954SCole Faust ActivationFunctionsDataset))
604*c217d954SCole Faust {
605*c217d954SCole Faust validate(Accessor(_target), _reference, tolerance_qasymm8);
606*c217d954SCole Faust }
607*c217d954SCole Faust TEST_SUITE_END() // Dilation
TEST_SUITE_END()608*c217d954SCole Faust TEST_SUITE_END() // Generic
609*c217d954SCole Faust TEST_SUITE(W3x3)
610*c217d954SCole Faust FIXTURE_DATA_TEST_CASE_NEW(RunSmall, NEDepthwiseConvolutionLayerQuantizedFixture<uint8_t>, framework::DatasetMode::PRECOMMIT,
611*c217d954SCole Faust combine(combine(combine(combine(combine(combine(datasets::SmallDepthwiseConvolutionLayerDataset3x3(), depth_multipliers),
612*c217d954SCole Faust framework::dataset::make("DataType", DataType::QASYMM8)),
613*c217d954SCole Faust input_qinfo_dataset),
614*c217d954SCole Faust framework::dataset::make("DstQuantizationInfo", { QuantizationInfo(0.5f, 10) })),
615*c217d954SCole Faust framework::dataset::make("DataLayout", { DataLayout::NHWC })),
616*c217d954SCole Faust ActivationFunctionsDataset))
617*c217d954SCole Faust {
618*c217d954SCole Faust validate(Accessor(_target), _reference, tolerance_qasymm8);
619*c217d954SCole Faust }
620*c217d954SCole Faust FIXTURE_DATA_TEST_CASE_NEW(RunLarge, NEDepthwiseConvolutionLayerQuantizedFixture<uint8_t>, framework::DatasetMode::NIGHTLY,
621*c217d954SCole Faust combine(combine(combine(combine(combine(combine(datasets::LargeDepthwiseConvolutionLayerDataset3x3(),
622*c217d954SCole Faust large_depth_multipliers),
623*c217d954SCole Faust framework::dataset::make("DataType", DataType::QASYMM8)),
624*c217d954SCole Faust input_qinfo_dataset),
625*c217d954SCole Faust framework::dataset::make("DstQuantizationInfo", { QuantizationInfo(0.5f, 10) })),
626*c217d954SCole Faust framework::dataset::make("DataLayout", { DataLayout::NHWC })),
627*c217d954SCole Faust ActivationFunctionsDataset))
628*c217d954SCole Faust {
629*c217d954SCole Faust validate(Accessor(_target), _reference, tolerance_qasymm8);
630*c217d954SCole Faust }
631*c217d954SCole Faust
632*c217d954SCole Faust TEST_SUITE(Dilation)
633*c217d954SCole Faust
634*c217d954SCole Faust FIXTURE_DATA_TEST_CASE_NEW(RunSmall, NEDepthwiseConvolutionLayerQuantizedFixture<uint8_t>, framework::DatasetMode::PRECOMMIT,
635*c217d954SCole Faust combine(combine(combine(combine(combine(combine(datasets::SmallDepthwiseDilatedConvolutionLayerDataset3x3(), depth_multipliers),
636*c217d954SCole Faust framework::dataset::make("DataType", DataType::QASYMM8)),
637*c217d954SCole Faust input_qinfo_dataset),
638*c217d954SCole Faust framework::dataset::make("DstQuantizationInfo", { QuantizationInfo(0.7f, 10) })),
639*c217d954SCole Faust framework::dataset::make("DataLayout", { DataLayout::NHWC })),
640*c217d954SCole Faust ActivationFunctionsDataset))
641*c217d954SCole Faust {
642*c217d954SCole Faust validate(Accessor(_target), _reference, tolerance_qasymm8);
643*c217d954SCole Faust }
644*c217d954SCole Faust FIXTURE_DATA_TEST_CASE_NEW(RunLarge, NEDepthwiseConvolutionLayerQuantizedFixture<uint8_t>, framework::DatasetMode::NIGHTLY,
645*c217d954SCole Faust combine(combine(combine(combine(combine(combine(datasets::LargeDepthwiseDilatedConvolutionLayerDataset3x3(),
646*c217d954SCole Faust large_depth_multipliers),
647*c217d954SCole Faust framework::dataset::make("DataType", DataType::QASYMM8)),
648*c217d954SCole Faust input_qinfo_dataset),
649*c217d954SCole Faust framework::dataset::make("DstQuantizationInfo", { QuantizationInfo(0.5f, 10) })),
650*c217d954SCole Faust framework::dataset::make("DataLayout", { DataLayout::NHWC })),
651*c217d954SCole Faust ActivationFunctionsDataset))
652*c217d954SCole Faust {
653*c217d954SCole Faust validate(Accessor(_target), _reference, tolerance_qasymm8);
654*c217d954SCole Faust }
655*c217d954SCole Faust TEST_SUITE_END() // Dilation
TEST_SUITE_END()656*c217d954SCole Faust TEST_SUITE_END() // W3x3
657*c217d954SCole Faust
658*c217d954SCole Faust TEST_SUITE(Optimized)
659*c217d954SCole Faust FIXTURE_DATA_TEST_CASE_NEW(RunSmall3x3, NEDepthwiseConvolutionLayerQuantizedFixture<uint8_t>, framework::DatasetMode::PRECOMMIT,
660*c217d954SCole Faust combine(combine(combine(combine(combine(combine(datasets::SmallOptimizedDepthwiseConvolutionLayerDataset3x3(),
661*c217d954SCole Faust framework::dataset::make("DepthMultiplier", 1)),
662*c217d954SCole Faust framework::dataset::make("DataType", DataType::QASYMM8)),
663*c217d954SCole Faust input_qinfo_dataset),
664*c217d954SCole Faust framework::dataset::make("DstQuantizationInfo", { QuantizationInfo(0.5f, 10) })),
665*c217d954SCole Faust framework::dataset::make("DataLayout", { DataLayout::NHWC })),
666*c217d954SCole Faust ActivationFunctionsDataset))
667*c217d954SCole Faust {
668*c217d954SCole Faust validate(Accessor(_target), _reference, tolerance_qasymm8);
669*c217d954SCole Faust }
670*c217d954SCole Faust FIXTURE_DATA_TEST_CASE_NEW(RunMixedDataLayout3x3, NEDepthwiseConvolutionLayerQuantizedMixedDataLayoutFixture<uint8_t>, framework::DatasetMode::PRECOMMIT,
671*c217d954SCole Faust combine(combine(combine(combine(combine(combine(datasets::SmallOptimizedDepthwiseConvolutionLayerDataset3x3(),
672*c217d954SCole Faust framework::dataset::make("DepthMultiplier", 1)),
673*c217d954SCole Faust framework::dataset::make("DataType", DataType::QASYMM8)),
674*c217d954SCole Faust input_qinfo_dataset),
675*c217d954SCole Faust framework::dataset::make("DstQuantizationInfo", { QuantizationInfo(0.5f, 10) })),
676*c217d954SCole Faust framework::dataset::make("DataLayout", { DataLayout::NHWC })),
677*c217d954SCole Faust framework::dataset::make("ActivationInfo", ActivationLayerInfo())))
678*c217d954SCole Faust {
679*c217d954SCole Faust validate(Accessor(_target), _reference, tolerance_qasymm8);
680*c217d954SCole Faust }
681*c217d954SCole Faust FIXTURE_DATA_TEST_CASE_NEW(RunSmall5x5, NEDepthwiseConvolutionLayerQuantizedFixture<uint8_t>, framework::DatasetMode::PRECOMMIT,
682*c217d954SCole Faust combine(combine(combine(combine(combine(combine(datasets::SmallOptimizedDepthwiseConvolutionLayerDataset5x5(),
683*c217d954SCole Faust framework::dataset::make("DepthMultiplier", 1)),
684*c217d954SCole Faust framework::dataset::make("DataType",
685*c217d954SCole Faust DataType::QASYMM8)),
686*c217d954SCole Faust input_qinfo_dataset),
687*c217d954SCole Faust framework::dataset::make("DstQuantizationInfo", { QuantizationInfo(0.5f, 10) })),
688*c217d954SCole Faust framework::dataset::make("DataLayout", { DataLayout::NHWC })),
689*c217d954SCole Faust ActivationFunctionsDataset))
690*c217d954SCole Faust {
691*c217d954SCole Faust validate(Accessor(_target), _reference, tolerance_qasymm8);
692*c217d954SCole Faust }
693*c217d954SCole Faust FIXTURE_DATA_TEST_CASE_NEW(RunLarge3x3, NEDepthwiseConvolutionLayerQuantizedFixture<uint8_t>, framework::DatasetMode::NIGHTLY,
694*c217d954SCole Faust combine(combine(combine(combine(combine(combine(datasets::LargeOptimizedDepthwiseConvolutionLayerDataset3x3(),
695*c217d954SCole Faust framework::dataset::make("DepthMultiplier", 1)),
696*c217d954SCole Faust framework::dataset::make("DataType",
697*c217d954SCole Faust DataType::QASYMM8)),
698*c217d954SCole Faust input_qinfo_dataset),
699*c217d954SCole Faust framework::dataset::make("DstQuantizationInfo", { QuantizationInfo(0.5f, 10) })),
700*c217d954SCole Faust framework::dataset::make("DataLayout", { DataLayout::NHWC })),
701*c217d954SCole Faust ActivationFunctionsDataset))
702*c217d954SCole Faust {
703*c217d954SCole Faust validate(Accessor(_target), _reference, tolerance_qasymm8);
704*c217d954SCole Faust }
705*c217d954SCole Faust TEST_SUITE_END() // Optimized
TEST_SUITE_END()706*c217d954SCole Faust TEST_SUITE_END() // QASYMM8
707*c217d954SCole Faust
708*c217d954SCole Faust TEST_SUITE(QASYMM8_SIGNED)
709*c217d954SCole Faust TEST_SUITE(Generic)
710*c217d954SCole Faust FIXTURE_DATA_TEST_CASE_NEW(RunSmall, NEDepthwiseConvolutionLayerQuantizedFixture<int8_t>, framework::DatasetMode::PRECOMMIT,
711*c217d954SCole Faust combine(combine(combine(combine(combine(combine(datasets::SmallDepthwiseConvolutionLayerDataset(),
712*c217d954SCole Faust depth_multipliers),
713*c217d954SCole Faust framework::dataset::make("DataType", DataType::QASYMM8_SIGNED)),
714*c217d954SCole Faust input_qinfo_dataset),
715*c217d954SCole Faust framework::dataset::make("DstQuantizationInfo", { QuantizationInfo(0.5f, 4) })),
716*c217d954SCole Faust framework::dataset::make("DataLayout", { DataLayout::NCHW })),
717*c217d954SCole Faust ActivationFunctionsDataset))
718*c217d954SCole Faust {
719*c217d954SCole Faust validate(Accessor(_target), _reference, tolerance_qasymm8);
720*c217d954SCole Faust }
721*c217d954SCole Faust
722*c217d954SCole Faust TEST_SUITE(Dilation)
723*c217d954SCole Faust FIXTURE_DATA_TEST_CASE_NEW(RunSmall, NEDepthwiseConvolutionLayerQuantizedFixture<int8_t>, framework::DatasetMode::PRECOMMIT,
724*c217d954SCole Faust combine(combine(combine(combine(combine(combine(datasets::SmallDepthwiseDilatedConvolutionLayerDataset(),
725*c217d954SCole Faust depth_multipliers),
726*c217d954SCole Faust framework::dataset::make("DataType", DataType::QASYMM8_SIGNED)),
727*c217d954SCole Faust input_qinfo_dataset),
728*c217d954SCole Faust framework::dataset::make("DstQuantizationInfo", { QuantizationInfo(0.8f, 1) })),
729*c217d954SCole Faust framework::dataset::make("DataLayout", { DataLayout::NCHW })),
730*c217d954SCole Faust ActivationFunctionsDataset))
731*c217d954SCole Faust {
732*c217d954SCole Faust validate(Accessor(_target), _reference, tolerance_qasymm8);
733*c217d954SCole Faust }
734*c217d954SCole Faust FIXTURE_DATA_TEST_CASE_NEW(RunLarge, NEDepthwiseConvolutionLayerQuantizedFixture<int8_t>, framework::DatasetMode::NIGHTLY,
735*c217d954SCole Faust combine(combine(combine(combine(combine(combine(datasets::LargeDepthwiseDilatedConvolutionLayerDataset(),
736*c217d954SCole Faust large_depth_multipliers),
737*c217d954SCole Faust framework::dataset::make("DataType", DataType::QASYMM8_SIGNED)),
738*c217d954SCole Faust input_qinfo_dataset),
739*c217d954SCole Faust framework::dataset::make("DstQuantizationInfo", { QuantizationInfo(0.9f, 11) })),
740*c217d954SCole Faust framework::dataset::make("DataLayout", { DataLayout::NCHW })),
741*c217d954SCole Faust ActivationFunctionsDataset))
742*c217d954SCole Faust {
743*c217d954SCole Faust validate(Accessor(_target), _reference, tolerance_qasymm8);
744*c217d954SCole Faust }
745*c217d954SCole Faust TEST_SUITE_END() // Dilation
TEST_SUITE_END()746*c217d954SCole Faust TEST_SUITE_END() // Generic
747*c217d954SCole Faust
748*c217d954SCole Faust TEST_SUITE(W3x3)
749*c217d954SCole Faust FIXTURE_DATA_TEST_CASE_NEW(RunSmall, NEDepthwiseConvolutionLayerQuantizedFixture<int8_t>, framework::DatasetMode::PRECOMMIT,
750*c217d954SCole Faust combine(combine(combine(combine(combine(combine(datasets::SmallDepthwiseConvolutionLayerDataset3x3(), depth_multipliers),
751*c217d954SCole Faust framework::dataset::make("DataType", DataType::QASYMM8_SIGNED)),
752*c217d954SCole Faust input_qinfo_dataset),
753*c217d954SCole Faust framework::dataset::make("DstQuantizationInfo", { QuantizationInfo(0.5f, 10) })),
754*c217d954SCole Faust framework::dataset::make("DataLayout", { DataLayout::NCHW })),
755*c217d954SCole Faust ActivationFunctionsDataset))
756*c217d954SCole Faust {
757*c217d954SCole Faust validate(Accessor(_target), _reference, tolerance_qasymm8);
758*c217d954SCole Faust }
759*c217d954SCole Faust FIXTURE_DATA_TEST_CASE_NEW(RunLarge, NEDepthwiseConvolutionLayerQuantizedFixture<int8_t>, framework::DatasetMode::NIGHTLY,
760*c217d954SCole Faust combine(combine(combine(combine(combine(combine(datasets::LargeDepthwiseConvolutionLayerDataset3x3(),
761*c217d954SCole Faust large_depth_multipliers),
762*c217d954SCole Faust framework::dataset::make("DataType", DataType::QASYMM8_SIGNED)),
763*c217d954SCole Faust input_qinfo_dataset),
764*c217d954SCole Faust framework::dataset::make("DstQuantizationInfo", { QuantizationInfo(0.5f, 10) })),
765*c217d954SCole Faust framework::dataset::make("DataLayout", { DataLayout::NCHW })),
766*c217d954SCole Faust ActivationFunctionsDataset))
767*c217d954SCole Faust {
768*c217d954SCole Faust validate(Accessor(_target), _reference, tolerance_qasymm8);
769*c217d954SCole Faust }
770*c217d954SCole Faust
771*c217d954SCole Faust TEST_SUITE(Dilation)
772*c217d954SCole Faust FIXTURE_DATA_TEST_CASE_NEW(RunSmall, NEDepthwiseConvolutionLayerQuantizedFixture<int8_t>, framework::DatasetMode::PRECOMMIT,
773*c217d954SCole Faust combine(combine(combine(combine(combine(combine(datasets::SmallDepthwiseDilatedConvolutionLayerDataset3x3(), depth_multipliers),
774*c217d954SCole Faust framework::dataset::make("DataType", DataType::QASYMM8_SIGNED)),
775*c217d954SCole Faust input_qinfo_dataset),
776*c217d954SCole Faust framework::dataset::make("DstQuantizationInfo", { QuantizationInfo(0.7f, 10) })),
777*c217d954SCole Faust framework::dataset::make("DataLayout", { DataLayout::NCHW })),
778*c217d954SCole Faust ActivationFunctionsDataset))
779*c217d954SCole Faust {
780*c217d954SCole Faust validate(Accessor(_target), _reference, tolerance_qasymm8);
781*c217d954SCole Faust }
782*c217d954SCole Faust FIXTURE_DATA_TEST_CASE_NEW(RunLarge, NEDepthwiseConvolutionLayerQuantizedFixture<int8_t>, framework::DatasetMode::NIGHTLY,
783*c217d954SCole Faust combine(combine(combine(combine(combine(combine(datasets::LargeDepthwiseDilatedConvolutionLayerDataset3x3(),
784*c217d954SCole Faust large_depth_multipliers),
785*c217d954SCole Faust framework::dataset::make("DataType", DataType::QASYMM8_SIGNED)),
786*c217d954SCole Faust input_qinfo_dataset),
787*c217d954SCole Faust framework::dataset::make("DstQuantizationInfo", { QuantizationInfo(0.5f, 10) })),
788*c217d954SCole Faust framework::dataset::make("DataLayout", { DataLayout::NCHW })),
789*c217d954SCole Faust ActivationFunctionsDataset))
790*c217d954SCole Faust {
791*c217d954SCole Faust validate(Accessor(_target), _reference, tolerance_qasymm8);
792*c217d954SCole Faust }
793*c217d954SCole Faust TEST_SUITE_END() // Dilation
TEST_SUITE_END()794*c217d954SCole Faust TEST_SUITE_END() // W3x3
795*c217d954SCole Faust
796*c217d954SCole Faust TEST_SUITE(Optimized)
797*c217d954SCole Faust FIXTURE_DATA_TEST_CASE_NEW(RunSmall3x3, NEDepthwiseConvolutionLayerQuantizedFixture<int8_t>, framework::DatasetMode::PRECOMMIT,
798*c217d954SCole Faust combine(combine(combine(combine(combine(combine(datasets::SmallOptimizedDepthwiseConvolutionLayerDataset3x3(),
799*c217d954SCole Faust framework::dataset::make("DepthMultiplier", 1)),
800*c217d954SCole Faust framework::dataset::make("DataType",
801*c217d954SCole Faust DataType::QASYMM8_SIGNED)),
802*c217d954SCole Faust input_qinfo_dataset),
803*c217d954SCole Faust framework::dataset::make("DstQuantizationInfo", { QuantizationInfo(0.5f, 10) })),
804*c217d954SCole Faust framework::dataset::make("DataLayout", { DataLayout::NCHW })),
805*c217d954SCole Faust ActivationFunctionsDataset))
806*c217d954SCole Faust {
807*c217d954SCole Faust validate(Accessor(_target), _reference, tolerance_qasymm8);
808*c217d954SCole Faust }
809*c217d954SCole Faust FIXTURE_DATA_TEST_CASE_NEW(RunSmall5x5, NEDepthwiseConvolutionLayerQuantizedFixture<int8_t>, framework::DatasetMode::PRECOMMIT,
810*c217d954SCole Faust combine(combine(combine(combine(combine(combine(datasets::SmallOptimizedDepthwiseConvolutionLayerDataset5x5(),
811*c217d954SCole Faust framework::dataset::make("DepthMultiplier", 1)),
812*c217d954SCole Faust framework::dataset::make("DataType",
813*c217d954SCole Faust DataType::QASYMM8_SIGNED)),
814*c217d954SCole Faust input_qinfo_dataset),
815*c217d954SCole Faust framework::dataset::make("DstQuantizationInfo", { QuantizationInfo(0.5f, 10) })),
816*c217d954SCole Faust framework::dataset::make("DataLayout", { DataLayout::NCHW })),
817*c217d954SCole Faust ActivationFunctionsDataset))
818*c217d954SCole Faust {
819*c217d954SCole Faust validate(Accessor(_target), _reference, tolerance_qasymm8);
820*c217d954SCole Faust }
821*c217d954SCole Faust FIXTURE_DATA_TEST_CASE_NEW(RunLarge3x3, NEDepthwiseConvolutionLayerQuantizedFixture<int8_t>, framework::DatasetMode::NIGHTLY,
822*c217d954SCole Faust combine(combine(combine(combine(combine(combine(datasets::LargeOptimizedDepthwiseConvolutionLayerDataset3x3(),
823*c217d954SCole Faust framework::dataset::make("DepthMultiplier", 1)),
824*c217d954SCole Faust framework::dataset::make("DataType",
825*c217d954SCole Faust DataType::QASYMM8_SIGNED)),
826*c217d954SCole Faust input_qinfo_dataset),
827*c217d954SCole Faust framework::dataset::make("DstQuantizationInfo", { QuantizationInfo(0.5f, 10) })),
828*c217d954SCole Faust framework::dataset::make("DataLayout", { DataLayout::NCHW })),
829*c217d954SCole Faust ActivationFunctionsDataset))
830*c217d954SCole Faust {
831*c217d954SCole Faust validate(Accessor(_target), _reference, tolerance_qasymm8);
832*c217d954SCole Faust }
833*c217d954SCole Faust TEST_SUITE_END() // Optimized
TEST_SUITE_END()834*c217d954SCole Faust TEST_SUITE_END() // QASYMM8_SIGNED
835*c217d954SCole Faust
836*c217d954SCole Faust TEST_SUITE(QSYMM8_PER_CHANNEL)
837*c217d954SCole Faust TEST_SUITE(Generic)
838*c217d954SCole Faust FIXTURE_DATA_TEST_CASE_NEW(RunSmall, NEDepthwiseConvolutionLayerQuantizedSymmetricPerChannelFixture, framework::DatasetMode::PRECOMMIT,
839*c217d954SCole Faust combine(combine(combine(combine(combine(combine(combine(datasets::SmallDepthwiseConvolutionLayerDataset(),
840*c217d954SCole Faust depth_multipliers),
841*c217d954SCole Faust framework::dataset::make("InputDataType", DataType::QASYMM8)),
842*c217d954SCole Faust framework::dataset::make("WeightsDataType", DataType::QSYMM8_PER_CHANNEL)),
843*c217d954SCole Faust input_qinfo_dataset),
844*c217d954SCole Faust framework::dataset::make("DstQuantizationInfo", { QuantizationInfo(0.5f, 4) })),
845*c217d954SCole Faust framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })),
846*c217d954SCole Faust ActivationFunctionsDataset))
847*c217d954SCole Faust {
848*c217d954SCole Faust validate(Accessor(_target), _reference, tolerance_qasymm8);
849*c217d954SCole Faust }
850*c217d954SCole Faust
851*c217d954SCole Faust TEST_SUITE(Dilation)
852*c217d954SCole Faust FIXTURE_DATA_TEST_CASE_NEW(RunSmall, NEDepthwiseConvolutionLayerQuantizedSymmetricPerChannelFixture, framework::DatasetMode::PRECOMMIT,
853*c217d954SCole Faust combine(combine(combine(combine(combine(combine(combine(datasets::SmallDepthwiseDilatedConvolutionLayerDataset(),
854*c217d954SCole Faust depth_multipliers),
855*c217d954SCole Faust framework::dataset::make("InputDataType", DataType::QASYMM8)),
856*c217d954SCole Faust framework::dataset::make("WeightsDataType", DataType::QSYMM8_PER_CHANNEL)),
857*c217d954SCole Faust input_qinfo_dataset),
858*c217d954SCole Faust framework::dataset::make("DstQuantizationInfo", { QuantizationInfo(0.5f, 4) })),
859*c217d954SCole Faust framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })),
860*c217d954SCole Faust ActivationFunctionsDataset))
861*c217d954SCole Faust {
862*c217d954SCole Faust validate(Accessor(_target), _reference, tolerance_qasymm8);
863*c217d954SCole Faust }
864*c217d954SCole Faust FIXTURE_DATA_TEST_CASE_NEW(RunLarge, NEDepthwiseConvolutionLayerQuantizedSymmetricPerChannelFixture, framework::DatasetMode::NIGHTLY,
865*c217d954SCole Faust combine(combine(combine(combine(combine(combine(combine(datasets::LargeDepthwiseDilatedConvolutionLayerDataset(),
866*c217d954SCole Faust depth_multipliers),
867*c217d954SCole Faust framework::dataset::make("InputDataType", DataType::QASYMM8)),
868*c217d954SCole Faust framework::dataset::make("WeightsDataType", DataType::QSYMM8_PER_CHANNEL)),
869*c217d954SCole Faust input_qinfo_dataset),
870*c217d954SCole Faust framework::dataset::make("DstQuantizationInfo", { QuantizationInfo(0.5f, 4) })),
871*c217d954SCole Faust framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })),
872*c217d954SCole Faust ActivationFunctionsDataset))
873*c217d954SCole Faust {
874*c217d954SCole Faust validate(Accessor(_target), _reference, tolerance_qasymm8);
875*c217d954SCole Faust }
876*c217d954SCole Faust TEST_SUITE_END() // Dilation
TEST_SUITE_END()877*c217d954SCole Faust TEST_SUITE_END() // Generic
878*c217d954SCole Faust
879*c217d954SCole Faust TEST_SUITE(Optimized)
880*c217d954SCole Faust FIXTURE_DATA_TEST_CASE_NEW(RunSmall3x3, NEDepthwiseConvolutionLayerQuantizedSymmetricPerChannelFixture, framework::DatasetMode::PRECOMMIT,
881*c217d954SCole Faust combine(combine(combine(combine(combine(combine(combine(datasets::SmallOptimizedDepthwiseConvolutionLayerDataset3x3(),
882*c217d954SCole Faust framework::dataset::make("DepthMultiplier", 1)),
883*c217d954SCole Faust framework::dataset::make("InputDataType", DataType::QASYMM8)),
884*c217d954SCole Faust framework::dataset::make("WeightsDataType", DataType::QSYMM8_PER_CHANNEL)),
885*c217d954SCole Faust input_qinfo_dataset),
886*c217d954SCole Faust framework::dataset::make("DstQuantizationInfo", { QuantizationInfo(0.5f, 4) })),
887*c217d954SCole Faust framework::dataset::make("DataLayout", { DataLayout::NHWC })),
888*c217d954SCole Faust ActivationFunctionsDataset))
889*c217d954SCole Faust {
890*c217d954SCole Faust validate(Accessor(_target), _reference, tolerance_qasymm8);
891*c217d954SCole Faust }
892*c217d954SCole Faust FIXTURE_DATA_TEST_CASE_NEW(RunLarge3x3, NEDepthwiseConvolutionLayerQuantizedSymmetricPerChannelFixture, framework::DatasetMode::NIGHTLY,
893*c217d954SCole Faust combine(combine(combine(combine(combine(combine(combine(datasets::LargeOptimizedDepthwiseConvolutionLayerDataset3x3(),
894*c217d954SCole Faust framework::dataset::make("DepthMultiplier", 1)),
895*c217d954SCole Faust framework::dataset::make("InputDataType", DataType::QASYMM8)),
896*c217d954SCole Faust framework::dataset::make("WeightsDataType", DataType::QSYMM8_PER_CHANNEL)),
897*c217d954SCole Faust input_qinfo_dataset),
898*c217d954SCole Faust framework::dataset::make("DstQuantizationInfo", { QuantizationInfo(0.5f, 4) })),
899*c217d954SCole Faust framework::dataset::make("DataLayout", { DataLayout::NHWC })),
900*c217d954SCole Faust ActivationFunctionsDataset))
901*c217d954SCole Faust {
902*c217d954SCole Faust validate(Accessor(_target), _reference, tolerance_qasymm8);
903*c217d954SCole Faust }
904*c217d954SCole Faust TEST_SUITE_END() // Optimized
905*c217d954SCole Faust TEST_SUITE_END() // QSYMM8_PER_CHANNEL
906*c217d954SCole Faust TEST_SUITE_END() // Quantized
907*c217d954SCole Faust
908*c217d954SCole Faust TEST_SUITE_END() // DepthwiseConvLayer
909*c217d954SCole Faust TEST_SUITE_END() // Neon
910*c217d954SCole Faust } // namespace validation
911*c217d954SCole Faust } // namespace test
912*c217d954SCole Faust } // namespace arm_compute
913