blob: e9609b7b72fd8ff664ab9a53175624561b0059bf [file] [log] [blame]
Michalis Spyrou7362f0d2017-10-18 17:58:22 +01001/*
Omar Al Khatib0cba93f2024-02-01 14:42:37 +00002 * Copyright (c) 2017-2024 Arm Limited.
Michalis Spyrou7362f0d2017-10-18 17:58:22 +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,
Michalis Spyrouaeebe4a2019-01-09 14:21:03 +000021 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
Michalis Spyrou7362f0d2017-10-18 17:58:22 +010022 * SOFTWARE.
23 */
24#include "arm_compute/core/Types.h"
Giorgio Arena76572242018-04-04 17:44:26 +010025#include "arm_compute/core/utils/misc/ShapeCalculator.h"
Giorgio Arena04a8f8c2017-11-23 11:45:24 +000026#include "arm_compute/runtime/NEON/functions/NEDepthwiseConvolutionLayer.h"
Michalis Spyrou7362f0d2017-10-18 17:58:22 +010027#include "arm_compute/runtime/Tensor.h"
28#include "arm_compute/runtime/TensorAllocator.h"
29#include "tests/NEON/Accessor.h"
30#include "tests/PaddingCalculator.h"
Giorgio Arena04a8f8c2017-11-23 11:45:24 +000031#include "tests/datasets/DepthwiseConvolutionLayerDataset.h"
Usama Arif881f2de2019-04-12 10:29:17 +010032#include "tests/datasets/DilatedDepthwiseConvolutionLayerDataset.h"
Michalis Spyrou7362f0d2017-10-18 17:58:22 +010033#include "tests/framework/Asserts.h"
34#include "tests/framework/Macros.h"
35#include "tests/framework/datasets/Datasets.h"
36#include "tests/validation/Validation.h"
Giorgio Arena04a8f8c2017-11-23 11:45:24 +000037#include "tests/validation/fixtures/DepthwiseConvolutionLayerFixture.h"
Michalis Spyrou7362f0d2017-10-18 17:58:22 +010038
39namespace arm_compute
40{
41namespace test
42{
43namespace validation
44{
Gunes Bayir3af4c9b2023-10-08 17:51:28 +010045using framework::dataset::make;
Giorgio Arena76572242018-04-04 17:44:26 +010046using namespace arm_compute::misc::shape_calculator;
47
Michalis Spyrou7362f0d2017-10-18 17:58:22 +010048namespace
49{
Omar Al Khatib0cba93f2024-02-01 14:42:37 +000050constexpr RelativeTolerance<float> tolerance_f32(0.01f); /**< Tolerance value for comparing reference's output against implementation's output for DataType::F32 */
51constexpr AbsoluteTolerance<uint8_t> tolerance_qasymm8(1); /**< Tolerance value for comparing reference's output against implementation's output for DataType::QASYMM8 */
52constexpr AbsoluteTolerance<int8_t> tolerance_qasymm8_signed(1); /**< Tolerance value for comparing reference's output against implementation's output for DataType::QASYMM8_SIGNED */
Georgios Pinitas8cffcd62018-11-16 17:11:50 +000053#ifdef __ARM_FEATURE_FP16_VECTOR_ARITHMETIC
Manuel Bottinie5df1d52021-04-29 12:06:33 +010054RelativeTolerance<half_float::half> tolerance_f16(half_float::half(0.02)); /**< Tolerance value for comparing reference's output against implementation's output for DataType::F16 */
Georgios Pinitas8cffcd62018-11-16 17:11:50 +000055constexpr float tolerance_num = 0.05f; /**< Tolerance number */
Michalis Spyrouaeebe4a2019-01-09 14:21:03 +000056#endif // __ARM_FEATURE_FP16_VECTOR_ARITHMETIC
Giorgio Arena76572242018-04-04 17:44:26 +010057
Gunes Bayir3af4c9b2023-10-08 17:51:28 +010058const auto depth_multipliers = make("DepthMultiplier", { 1, 2, 8 });
59const auto large_depth_multipliers = make("DepthMultiplier", { 5, 32 });
Manuel Bottinia788c2f2019-04-08 13:18:00 +010060
Omar Al Khatib0cba93f2024-02-01 14:42:37 +000061// Activation Functions
62const auto NoActivation = make("ActivationInfo", ActivationLayerInfo());
63
Gunes Bayir3af4c9b2023-10-08 17:51:28 +010064const auto ActivationFunctionsDataset = make("ActivationInfo",
Manuel Bottinia788c2f2019-04-08 13:18:00 +010065{
66 ActivationLayerInfo(),
67 ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::RELU)
68});
Michele Di Giorgiof29d1b72019-10-29 10:58:13 +000069
Gunes Bayir3af4c9b2023-10-08 17:51:28 +010070const auto ActivationFunctionsDatasetNightly = make("ActivationInfo",
71{
72 ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::BOUNDED_RELU, 0.5f),
73 ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::LU_BOUNDED_RELU, 0.5f, -0.5f),
74 ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::LEAKY_RELU, 0.1f),
75 ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::SOFT_RELU),
76 ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::ELU),
77 ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::ABS),
78 ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::LOGISTIC),
79 ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::TANH),
80 ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::SQUARE),
81 ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::SWISH),
82 ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::HARD_SWISH),
83 ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::LINEAR, 2.f, 1.f),
84#ifdef __aarch64__
85 ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::GELU),
86#endif // __aarch64__
87});
88
Omar Al Khatib0cba93f2024-02-01 14:42:37 +000089const auto ActivationFunctionsQuantizedSmallDataset = make("ActivationInfo",
90{
91 ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::RELU)
92});
93
Gunes Bayir3af4c9b2023-10-08 17:51:28 +010094const auto ActivationFunctionsQuantizedDataset = make("ActivationInfo",
95{
96 ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::BOUNDED_RELU, 0.5f),
97 ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::LU_BOUNDED_RELU, 0.5f, -0.5f),
98});
99
Omar Al Khatib0cba93f2024-02-01 14:42:37 +0000100// This is only used when there is fused activation
Gunes Bayir3af4c9b2023-10-08 17:51:28 +0100101const auto input_qinfo_dataset = make("InputQInfo",
Michele Di Giorgiof29d1b72019-10-29 10:58:13 +0000102{
103 QuantizationInfo(0.3f, 10),
104 QuantizationInfo(2.2f, 10),
105});
Omar Al Khatib0cba93f2024-02-01 14:42:37 +0000106
107const auto IgnoredQuantizationInfo = make("IgnoredQuantizationInfo", QuantizationInfo());
108
Michalis Spyrou7362f0d2017-10-18 17:58:22 +0100109} // namespace
110
111TEST_SUITE(NEON)
Manuel Bottinia788c2f2019-04-08 13:18:00 +0100112TEST_SUITE(DepthwiseConvolutionLayer)
Michalis Spyrou7362f0d2017-10-18 17:58:22 +0100113
Abe Mbise7784c832018-05-31 16:48:41 +0100114// *INDENT-OFF*
115// clang-format off
Usama Arif881f2de2019-04-12 10:29:17 +0100116DATA_TEST_CASE(Validate3x3, framework::DatasetMode::ALL, zip(zip(zip(zip(zip(zip(zip(
Gunes Bayir3af4c9b2023-10-08 17:51:28 +0100117 make("InputInfo", { TensorInfo(TensorShape(32U, 18U, 2U), 1, DataType::F32), // Mismatching data type input/weights
Abe Mbise7784c832018-05-31 16:48:41 +0100118 TensorInfo(TensorShape(32U, 18U, 3U), 1, DataType::F32), // Mismatching input feature maps
119 TensorInfo(TensorShape(32U, 18U, 2U), 1, DataType::F32), // Unsupported weights dimensions
120 TensorInfo(TensorShape(32U, 18U, 2U), 1, DataType::F32), // Mismatching depth multiplier
Giorgio Arena66cbafb2018-08-23 14:51:00 +0100121 TensorInfo(TensorShape(32U, 18U, 2U), 1, DataType::QASYMM8), // Invalid stride
Abe Mbise7784c832018-05-31 16:48:41 +0100122 TensorInfo(TensorShape(32U, 18U, 2U), 1, DataType::F32), // Invalid biases size
123 TensorInfo(TensorShape(32U, 18U, 2U), 1, DataType::F32), // Invalid biases dimensions
124 TensorInfo(TensorShape(32U, 18U, 2U), 1, DataType::F32), // Invalid output size
Usama Arif881f2de2019-04-12 10:29:17 +0100125 TensorInfo(TensorShape(27U, 13U, 2U), 1, DataType::F32), // patch size bigger than input width
126 TensorInfo(TensorShape(27U, 13U, 2U), 1, DataType::F32), // dilation < 1
Giorgio Arena66cbafb2018-08-23 14:51:00 +0100127 TensorInfo(TensorShape(27U, 13U, 2U), 1, DataType::F32),
Abe Mbise7784c832018-05-31 16:48:41 +0100128 }),
Gunes Bayir3af4c9b2023-10-08 17:51:28 +0100129 make("WeightsInfo", { TensorInfo(TensorShape(3U, 3U, 2U, 2U), 1, DataType::F16),
Giorgio Arena66cbafb2018-08-23 14:51:00 +0100130 TensorInfo(TensorShape(3U, 3U, 2U, 2U), 1, DataType::F32),
131 TensorInfo(TensorShape(5U, 5U, 2U, 2U), 1, DataType::F32),
132 TensorInfo(TensorShape(3U, 3U, 2U, 2U), 1, DataType::F32),
133 TensorInfo(TensorShape(3U, 3U, 2U, 2U), 1, DataType::QASYMM8),
134 TensorInfo(TensorShape(3U, 3U, 2U, 2U), 1, DataType::F32),
135 TensorInfo(TensorShape(3U, 3U, 2U, 2U), 1, DataType::F32),
136 TensorInfo(TensorShape(3U, 3U, 2U, 2U), 1, DataType::F32),
137 TensorInfo(TensorShape(3U, 3U, 2U, 2U), 1, DataType::F32),
Usama Arif881f2de2019-04-12 10:29:17 +0100138 TensorInfo(TensorShape(3U, 3U, 2U, 2U), 1, DataType::F32),
139 TensorInfo(TensorShape(3U, 3U, 2U, 2U), 1, DataType::F32),
Abe Mbise7784c832018-05-31 16:48:41 +0100140 })),
Gunes Bayir3af4c9b2023-10-08 17:51:28 +0100141 make("BiasesInfo", { TensorInfo(TensorShape(2U), 1, DataType::F32),
Abe Mbise7784c832018-05-31 16:48:41 +0100142 TensorInfo(TensorShape(2U), 1, DataType::F32),
143 TensorInfo(TensorShape(2U), 1, DataType::F32),
144 TensorInfo(TensorShape(2U), 1, DataType::F32),
Giorgio Arena66cbafb2018-08-23 14:51:00 +0100145 TensorInfo(TensorShape(2U), 1, DataType::S32),
Abe Mbise7784c832018-05-31 16:48:41 +0100146 TensorInfo(TensorShape(4U), 1, DataType::F32),
147 TensorInfo(TensorShape(2U, 2U), 1, DataType::F32),
148 TensorInfo(TensorShape(2U), 1, DataType::F32),
149 TensorInfo(TensorShape(2U), 1, DataType::F32),
Usama Arif881f2de2019-04-12 10:29:17 +0100150 TensorInfo(TensorShape(2U), 1, DataType::F32),
151 TensorInfo(TensorShape(2U), 1, DataType::F32),
Abe Mbise7784c832018-05-31 16:48:41 +0100152 })),
Gunes Bayir3af4c9b2023-10-08 17:51:28 +0100153 make("OutputInfo", { TensorInfo(TensorShape(30U, 16U, 2U), 1, DataType::F32),
Abe Mbise7784c832018-05-31 16:48:41 +0100154 TensorInfo(TensorShape(30U, 16U, 2U), 1, DataType::F32),
155 TensorInfo(TensorShape(30U, 16U, 2U), 1, DataType::F32),
156 TensorInfo(TensorShape(30U, 16U, 2U), 1, DataType::F32),
Giorgio Arena66cbafb2018-08-23 14:51:00 +0100157 TensorInfo(TensorShape(30U, 16U, 2U), 1, DataType::QASYMM8),
Abe Mbise7784c832018-05-31 16:48:41 +0100158 TensorInfo(TensorShape(30U, 16U, 2U), 1, DataType::F32),
159 TensorInfo(TensorShape(30U, 16U, 2U), 1, DataType::F32),
160 TensorInfo(TensorShape(32U, 18U, 2U), 1, DataType::F32),
161 TensorInfo(TensorShape(25U, 11U, 2U), 1, DataType::F32),
Usama Arif881f2de2019-04-12 10:29:17 +0100162 TensorInfo(TensorShape(25U, 11U, 2U), 1, DataType::F32),
163 TensorInfo(TensorShape(25U, 11U, 2U), 1, DataType::F32),
Abe Mbise7784c832018-05-31 16:48:41 +0100164 })),
Gunes Bayir3af4c9b2023-10-08 17:51:28 +0100165 make("ConvInfo", { PadStrideInfo(1, 1, 0, 0),
Abe Mbise7784c832018-05-31 16:48:41 +0100166 PadStrideInfo(1, 1, 0, 0),
167 PadStrideInfo(1, 1, 0, 0),
168 PadStrideInfo(1, 1, 0, 0),
169 PadStrideInfo(4, 1, 0, 0),
170 PadStrideInfo(1, 1, 0, 0),
171 PadStrideInfo(1, 1, 0, 0),
172 PadStrideInfo(1, 1, 0, 0),
173 PadStrideInfo(1, 1, 0, 0),
Usama Arif881f2de2019-04-12 10:29:17 +0100174 PadStrideInfo(1, 1, 0, 0),
175 PadStrideInfo(1, 1, 0, 0),
Abe Mbise7784c832018-05-31 16:48:41 +0100176 })),
Gunes Bayir3af4c9b2023-10-08 17:51:28 +0100177 make("DepthMultiplier", { 1,
Abe Mbise7784c832018-05-31 16:48:41 +0100178 1,
179 1,
180 3,
181 1,
182 1,
183 1,
184 1,
185 1,
Usama Arif881f2de2019-04-12 10:29:17 +0100186 1,
187 1,
Abe Mbise7784c832018-05-31 16:48:41 +0100188 })),
Gunes Bayir3af4c9b2023-10-08 17:51:28 +0100189 make("Dilation", { Size2D(1U, 1U),
Usama Arif881f2de2019-04-12 10:29:17 +0100190 Size2D(1U, 1U),
191 Size2D(1U, 1U),
192 Size2D(1U, 1U),
193 Size2D(1U, 1U),
194 Size2D(1U, 1U),
195 Size2D(1U, 1U),
196 Size2D(1U, 1U),
197 Size2D(25U, 1U),
198 Size2D(0U, 1U),
199 Size2D(1U, 1U),
200 })),
Gunes Bayir3af4c9b2023-10-08 17:51:28 +0100201 make("Expected", { false, false, false, false, false, false, false, false, false, false, true })),
Usama Arif881f2de2019-04-12 10:29:17 +0100202 input_info, weights_info, biases_info, output_info, conv_info, depth_multiplier,dilation, expected)
Michalis Spyrou7362f0d2017-10-18 17:58:22 +0100203{
Manuel Bottini05069f02019-09-26 17:18:26 +0100204 bool is_valid = bool(NEDepthwiseConvolutionLayer::validate(&input_info.clone()->set_is_resizable(false),
Usama Arif881f2de2019-04-12 10:29:17 +0100205 &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));
Abe Mbise7784c832018-05-31 16:48:41 +0100206 ARM_COMPUTE_EXPECT(is_valid == expected, framework::LogLevel::ERRORS);
Michalis Spyrou7362f0d2017-10-18 17:58:22 +0100207}
208
Usama Arif881f2de2019-04-12 10:29:17 +0100209DATA_TEST_CASE(ValidateGeneric, framework::DatasetMode::ALL, zip(zip(zip(zip(zip(zip(zip(
Gunes Bayir3af4c9b2023-10-08 17:51:28 +0100210 make("InputInfo", { TensorInfo(TensorShape(27U, 13U, 2U), 1, DataType::F32), // Mismatching data type input/weights
Giorgio Arenad93e2632019-10-15 11:09:33 +0100211 TensorInfo(TensorShape(27U, 13U, 3U), 1, DataType::F32), // Mismatching input feature maps
212 TensorInfo(TensorShape(27U, 13U, 2U), 1, DataType::F32), // Mismatching depth multiplier
213 TensorInfo(TensorShape(27U, 13U, 2U), 1, DataType::F32), // Invalid biases size
214 TensorInfo(TensorShape(27U, 13U, 2U), 1, DataType::F32), // Invalid biases dimensions
215 TensorInfo(TensorShape(27U, 13U, 2U), 1, DataType::F32), // Invalid output size
216 TensorInfo(TensorShape(27U, 13U, 8U), 1, DataType::F32), // Patch size bigger than input width
217 TensorInfo(TensorShape(27U, 13U, 8U), 1, DataType::F32), // Dilation < 1
Abe Mbise7784c832018-05-31 16:48:41 +0100218 }),
Gunes Bayir3af4c9b2023-10-08 17:51:28 +0100219 make("WeightsInfo", { TensorInfo(TensorShape(3U, 3U, 2U), 1, DataType::F16),
Abe Mbise7784c832018-05-31 16:48:41 +0100220 TensorInfo(TensorShape(3U, 3U, 2U), 1, DataType::F32),
221 TensorInfo(TensorShape(3U, 3U, 2U), 1, DataType::F32),
222 TensorInfo(TensorShape(3U, 3U, 2U), 1, DataType::F32),
223 TensorInfo(TensorShape(3U, 3U, 2U), 1, DataType::F32),
224 TensorInfo(TensorShape(3U, 3U, 2U), 1, DataType::F32),
225 TensorInfo(TensorShape(3U, 3U, 16U), 1, DataType::F32),
Usama Arif881f2de2019-04-12 10:29:17 +0100226 TensorInfo(TensorShape(3U, 3U, 16U), 1, DataType::F32),
Abe Mbise7784c832018-05-31 16:48:41 +0100227 })),
Gunes Bayir3af4c9b2023-10-08 17:51:28 +0100228 make("BiasesInfo", { TensorInfo(TensorShape(2U), 1, DataType::F32),
Abe Mbise7784c832018-05-31 16:48:41 +0100229 TensorInfo(TensorShape(2U), 1, DataType::F32),
230 TensorInfo(TensorShape(2U), 1, DataType::F32),
231 TensorInfo(TensorShape(4U), 1, DataType::F32),
232 TensorInfo(TensorShape(2U, 2U), 1, DataType::F32),
233 TensorInfo(TensorShape(2U), 1, DataType::F32),
234 TensorInfo(TensorShape(16U), 1, DataType::F32),
Usama Arif881f2de2019-04-12 10:29:17 +0100235 TensorInfo(TensorShape(16U), 1, DataType::F32),
Abe Mbise7784c832018-05-31 16:48:41 +0100236 })),
Gunes Bayir3af4c9b2023-10-08 17:51:28 +0100237 make("OutputInfo", { TensorInfo(TensorShape(25U, 11U, 2U), 1, DataType::F32),
Abe Mbise7784c832018-05-31 16:48:41 +0100238 TensorInfo(TensorShape(25U, 11U, 2U), 1, DataType::F32),
239 TensorInfo(TensorShape(25U, 11U, 2U), 1, DataType::F32),
240 TensorInfo(TensorShape(25U, 11U, 2U), 1, DataType::F32),
241 TensorInfo(TensorShape(25U, 11U, 2U), 1, DataType::F32),
242 TensorInfo(TensorShape(27U, 13U, 2U), 1, DataType::F32),
243 TensorInfo(TensorShape(25U, 11U, 16U), 1, DataType::F32),
Usama Arif881f2de2019-04-12 10:29:17 +0100244 TensorInfo(TensorShape(25U, 11U, 16U), 1, DataType::F32),
Abe Mbise7784c832018-05-31 16:48:41 +0100245 })),
Gunes Bayir3af4c9b2023-10-08 17:51:28 +0100246 make("ConvInfo", { PadStrideInfo(1, 1, 0, 0),
Abe Mbise7784c832018-05-31 16:48:41 +0100247 PadStrideInfo(1, 1, 0, 0),
248 PadStrideInfo(1, 1, 0, 0),
249 PadStrideInfo(1, 1, 0, 0),
250 PadStrideInfo(1, 1, 0, 0),
251 PadStrideInfo(1, 1, 0, 0),
252 PadStrideInfo(1, 1, 0, 0),
Usama Arif881f2de2019-04-12 10:29:17 +0100253 PadStrideInfo(1, 1, 0, 0),
Abe Mbise7784c832018-05-31 16:48:41 +0100254 })),
Gunes Bayir3af4c9b2023-10-08 17:51:28 +0100255 make("DepthMultiplier", { 1,
Abe Mbise7784c832018-05-31 16:48:41 +0100256 1,
257 3,
258 1,
259 1,
260 1,
261 2,
Usama Arif881f2de2019-04-12 10:29:17 +0100262 2,
Abe Mbise7784c832018-05-31 16:48:41 +0100263 })),
Gunes Bayir3af4c9b2023-10-08 17:51:28 +0100264 make("Dilation", { Size2D(1U, 1U),
Usama Arif881f2de2019-04-12 10:29:17 +0100265 Size2D(1U, 1U),
266 Size2D(1U, 1U),
267 Size2D(1U, 1U),
268 Size2D(1U, 1U),
269 Size2D(1U, 1U),
270 Size2D(25U, 1U),
271 Size2D(0U, 1U),
Usama Arif881f2de2019-04-12 10:29:17 +0100272 })),
Gunes Bayir3af4c9b2023-10-08 17:51:28 +0100273 make("Expected", { false, false, false, false, false, false, false, false})),
Usama Arif881f2de2019-04-12 10:29:17 +0100274 input_info, weights_info, biases_info, output_info, conv_info, depth_multiplier,dilation, expected)
Abe Mbise7784c832018-05-31 16:48:41 +0100275{
Usama Arif881f2de2019-04-12 10:29:17 +0100276 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));
Abe Mbise7784c832018-05-31 16:48:41 +0100277 ARM_COMPUTE_EXPECT(is_valid == expected, framework::LogLevel::ERRORS);
278}
279// clang-format on
280// *INDENT-ON*
Manuel Bottini05069f02019-09-26 17:18:26 +0100281template <typename T>
282using NEDepthwiseConvolutionLayerFixture = DepthwiseConvolutionLayerValidationFixture<Tensor, Accessor, NEDepthwiseConvolutionLayer, T>;
Manuel Bottinica62c6f2021-03-23 11:50:34 +0000283template <typename T>
284using NEDepthwiseConvolutionLayerMixedDataLayoutFixture = DepthwiseConvolutionLayerValidationFixture<Tensor, Accessor, NEDepthwiseConvolutionLayer, T, true>;
Milos Puzovica7077e92022-10-28 16:49:15 +0100285template <typename T>
286using NEDepthwiseConvolutionLayerVariableWeightsFixture = DepthwiseConvolutionLayerValidationFixture<Tensor, Accessor, NEDepthwiseConvolutionLayer, T, false, false, true>;
Abe Mbise7784c832018-05-31 16:48:41 +0100287
Dmitry Savenkod7295b72017-11-20 22:00:08 +0700288TEST_SUITE(Float)
Michalis Spyrou7362f0d2017-10-18 17:58:22 +0100289TEST_SUITE(F32)
Gunes Bayir3af4c9b2023-10-08 17:51:28 +0100290
291FIXTURE_DATA_TEST_CASE_NEW(RunActivations, NEDepthwiseConvolutionLayerFixture<float>, framework::DatasetMode::NIGHTLY,
292 combine(
293 make("In", TensorShape(33U, 27U, 11U, 3U)),
294 make("Weights", Size2D(3U, 4U)),
295 make("Info", PadStrideInfo(1, 2, 0, 1)),
296 make("Dilation", Size2D(2U, 2U)),
297 make("DepthMultiplier", { 5 }),
298 make("DataType", DataType::F32),
299 make("DataLayout", { DataLayout::NHWC, DataLayout::NCHW }),
300 ActivationFunctionsDatasetNightly))
301{
302 validate(Accessor(_target), _reference, tolerance_f32);
303}
304
Michalis Spyroub7b31532017-11-23 12:10:21 +0000305TEST_SUITE(Generic)
Giorgio Arena68e29da2021-02-08 16:31:10 +0000306FIXTURE_DATA_TEST_CASE_NEW(RunSmall, NEDepthwiseConvolutionLayerFixture<float>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(combine(datasets::SmallDepthwiseConvolutionLayerDataset(),
307 depth_multipliers),
Gunes Bayir3af4c9b2023-10-08 17:51:28 +0100308 make("DataType", DataType::F32)),
309 make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })),
Giorgio Arena68e29da2021-02-08 16:31:10 +0000310 ActivationFunctionsDataset))
Michalis Spyroub7b31532017-11-23 12:10:21 +0000311{
312 validate(Accessor(_target), _reference, tolerance_f32);
313}
Manuel Bottinica62c6f2021-03-23 11:50:34 +0000314FIXTURE_DATA_TEST_CASE_NEW(RunMixedDataLayout, NEDepthwiseConvolutionLayerMixedDataLayoutFixture<float>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(combine(datasets::SmallDepthwiseConvolutionLayerDataset(),
Gunes Bayir3af4c9b2023-10-08 17:51:28 +0100315 make("DepthMultiplier", { 2 })),
316 make("DataType", DataType::F32)),
317 make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })),
318 make("ActivationInfo", ActivationLayerInfo())))
Manuel Bottinica62c6f2021-03-23 11:50:34 +0000319{
320 validate(Accessor(_target), _reference, tolerance_f32);
321}
Giorgio Arena68e29da2021-02-08 16:31:10 +0000322FIXTURE_DATA_TEST_CASE_NEW(RunLarge, NEDepthwiseConvolutionLayerFixture<float>, framework::DatasetMode::NIGHTLY, combine(combine(combine(combine(datasets::LargeDepthwiseConvolutionLayerDataset(),
323 large_depth_multipliers),
Gunes Bayir3af4c9b2023-10-08 17:51:28 +0100324 make("DataType", DataType::F32)),
325 make("DataLayout", { DataLayout::NHWC })),
326 make("ActivationInfo", { ActivationLayerInfo() })))
Michalis Spyroub7b31532017-11-23 12:10:21 +0000327{
328 validate(Accessor(_target), _reference, tolerance_f32);
329}
Usama Arif881f2de2019-04-12 10:29:17 +0100330TEST_SUITE(Dilation)
Giorgio Arena68e29da2021-02-08 16:31:10 +0000331FIXTURE_DATA_TEST_CASE_NEW(RunSmall, NEDepthwiseConvolutionLayerFixture<float>, framework::DatasetMode::PRECOMMIT,
332 combine(combine(combine(combine(datasets::SmallDepthwiseDilatedConvolutionLayerDataset(),
333 depth_multipliers),
Gunes Bayir3af4c9b2023-10-08 17:51:28 +0100334 make("DataType",
Giorgio Arena68e29da2021-02-08 16:31:10 +0000335 DataType::F32)),
Gunes Bayir3af4c9b2023-10-08 17:51:28 +0100336 make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })),
Giorgio Arena68e29da2021-02-08 16:31:10 +0000337 ActivationFunctionsDataset))
Usama Arif881f2de2019-04-12 10:29:17 +0100338{
339 validate(Accessor(_target), _reference, tolerance_f32);
340}
Giorgio Arena68e29da2021-02-08 16:31:10 +0000341FIXTURE_DATA_TEST_CASE_NEW(RunLarge, NEDepthwiseConvolutionLayerFixture<float>, framework::DatasetMode::NIGHTLY,
342 combine(combine(combine(combine(datasets::LargeDepthwiseDilatedConvolutionLayerDataset(),
343 large_depth_multipliers),
Gunes Bayir3af4c9b2023-10-08 17:51:28 +0100344 make("DataType",
Giorgio Arena68e29da2021-02-08 16:31:10 +0000345 DataType::F32)),
Gunes Bayir3af4c9b2023-10-08 17:51:28 +0100346 make("DataLayout", { DataLayout::NHWC })),
347 make("ActivationInfo", { ActivationLayerInfo() })))
Usama Arif881f2de2019-04-12 10:29:17 +0100348{
349 validate(Accessor(_target), _reference, tolerance_f32);
350}
351TEST_SUITE_END() // Dilation
Georgios Pinitas20c246a2018-09-12 16:45:53 +0100352TEST_SUITE_END() // Generic
Michalis Spyroub7b31532017-11-23 12:10:21 +0000353
Georgios Pinitas4c758512019-07-10 19:49:11 +0100354TEST_SUITE(W3x3)
Giorgio Arena68e29da2021-02-08 16:31:10 +0000355FIXTURE_DATA_TEST_CASE_NEW(RunSmall, NEDepthwiseConvolutionLayerFixture<float>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(combine(datasets::SmallDepthwiseConvolutionLayerDataset3x3(),
356 depth_multipliers),
Gunes Bayir3af4c9b2023-10-08 17:51:28 +0100357 make("DataType",
Giorgio Arena68e29da2021-02-08 16:31:10 +0000358 DataType::F32)),
Gunes Bayir3af4c9b2023-10-08 17:51:28 +0100359 make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })),
Giorgio Arena68e29da2021-02-08 16:31:10 +0000360 ActivationFunctionsDataset))
Michalis Spyrou7362f0d2017-10-18 17:58:22 +0100361{
362 validate(Accessor(_target), _reference, tolerance_f32);
363}
Giorgio Arena68e29da2021-02-08 16:31:10 +0000364FIXTURE_DATA_TEST_CASE_NEW(RunLarge, NEDepthwiseConvolutionLayerFixture<float>, framework::DatasetMode::NIGHTLY,
365 combine(combine(combine(combine(datasets::LargeDepthwiseConvolutionLayerDataset3x3(),
366 large_depth_multipliers),
Gunes Bayir3af4c9b2023-10-08 17:51:28 +0100367 make("DataType",
Giorgio Arena68e29da2021-02-08 16:31:10 +0000368 DataType::F32)),
Gunes Bayir3af4c9b2023-10-08 17:51:28 +0100369 make("DataLayout", { DataLayout::NHWC })),
370 make("ActivationInfo", { ActivationLayerInfo() })))
Michalis Spyrou7362f0d2017-10-18 17:58:22 +0100371{
372 validate(Accessor(_target), _reference, tolerance_f32);
373}
Usama Arif881f2de2019-04-12 10:29:17 +0100374TEST_SUITE(Dilation)
Giorgio Arena68e29da2021-02-08 16:31:10 +0000375FIXTURE_DATA_TEST_CASE_NEW(RunSmall, NEDepthwiseConvolutionLayerFixture<float>, framework::DatasetMode::PRECOMMIT,
376 combine(combine(combine(combine(datasets::SmallDepthwiseDilatedConvolutionLayerDataset3x3(),
377 depth_multipliers),
Gunes Bayir3af4c9b2023-10-08 17:51:28 +0100378 make("DataType",
Giorgio Arena68e29da2021-02-08 16:31:10 +0000379 DataType::F32)),
Gunes Bayir3af4c9b2023-10-08 17:51:28 +0100380 make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })),
Giorgio Arena68e29da2021-02-08 16:31:10 +0000381 ActivationFunctionsDataset))
Usama Arif881f2de2019-04-12 10:29:17 +0100382{
383 validate(Accessor(_target), _reference, tolerance_f32);
384}
Giorgio Arena68e29da2021-02-08 16:31:10 +0000385FIXTURE_DATA_TEST_CASE_NEW(RunLarge, NEDepthwiseConvolutionLayerFixture<float>, framework::DatasetMode::NIGHTLY,
386 combine(combine(combine(combine(datasets::LargeDepthwiseDilatedConvolutionLayerDataset3x3(),
387 large_depth_multipliers),
Gunes Bayir3af4c9b2023-10-08 17:51:28 +0100388 make("DataType",
Giorgio Arena68e29da2021-02-08 16:31:10 +0000389 DataType::F32)),
Gunes Bayir3af4c9b2023-10-08 17:51:28 +0100390 make("DataLayout", { DataLayout::NHWC })),
391 make("ActivationInfo", { ActivationLayerInfo() })))
Usama Arif881f2de2019-04-12 10:29:17 +0100392{
393 validate(Accessor(_target), _reference, tolerance_f32);
394}
395
396TEST_SUITE_END() // Dilation
Georgios Pinitas4c758512019-07-10 19:49:11 +0100397TEST_SUITE_END() // W3x3
Usama Arif881f2de2019-04-12 10:29:17 +0100398
Georgios Pinitas4c758512019-07-10 19:49:11 +0100399TEST_SUITE(Optimized)
Giorgio Arena68e29da2021-02-08 16:31:10 +0000400FIXTURE_DATA_TEST_CASE_NEW(RunSmall3x3, NEDepthwiseConvolutionLayerFixture<float>, framework::DatasetMode::PRECOMMIT,
401 combine(combine(combine(combine(datasets::SmallOptimizedDepthwiseConvolutionLayerDataset3x3(),
Gunes Bayir3af4c9b2023-10-08 17:51:28 +0100402 make("DepthMultiplier", 1)),
403 make("DataType",
Giorgio Arena68e29da2021-02-08 16:31:10 +0000404 DataType::F32)),
Gunes Bayir3af4c9b2023-10-08 17:51:28 +0100405 make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })),
Giorgio Arena68e29da2021-02-08 16:31:10 +0000406 ActivationFunctionsDataset))
Michalis Spyrouaeebe4a2019-01-09 14:21:03 +0000407{
408 validate(Accessor(_target), _reference, tolerance_f32);
409}
Milos Puzovica7077e92022-10-28 16:49:15 +0100410FIXTURE_DATA_TEST_CASE_NEW(RunVariableWeightsSmall3x3, NEDepthwiseConvolutionLayerVariableWeightsFixture<float>, framework::DatasetMode::PRECOMMIT,
411 combine(combine(combine(combine(datasets::SmallOptimizedDepthwiseConvolutionLayerDataset3x3(),
Gunes Bayir3af4c9b2023-10-08 17:51:28 +0100412 make("DepthMultiplier", 1)),
413 make("DataType",
Milos Puzovica7077e92022-10-28 16:49:15 +0100414 DataType::F32)),
Gunes Bayir3af4c9b2023-10-08 17:51:28 +0100415 make("DataLayout", { DataLayout::NHWC })),
Milos Puzovica7077e92022-10-28 16:49:15 +0100416 ActivationFunctionsDataset))
417{
418 validate(Accessor(_target), _reference, tolerance_f32);
419}
Manuel Bottinica62c6f2021-03-23 11:50:34 +0000420FIXTURE_DATA_TEST_CASE_NEW(RunMixedDataLayout3x3, NEDepthwiseConvolutionLayerMixedDataLayoutFixture<float>, framework::DatasetMode::PRECOMMIT,
421 combine(combine(combine(combine(datasets::SmallOptimizedDepthwiseConvolutionLayerDataset3x3(),
Gunes Bayir3af4c9b2023-10-08 17:51:28 +0100422 make("DepthMultiplier", 1)),
423 make("DataType", DataType::F32)),
424 make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })),
425 make("ActivationInfo", ActivationLayerInfo())))
Manuel Bottinica62c6f2021-03-23 11:50:34 +0000426{
427 validate(Accessor(_target), _reference, tolerance_f32);
428}
Giorgio Arena68e29da2021-02-08 16:31:10 +0000429FIXTURE_DATA_TEST_CASE_NEW(RunSmall5x5, NEDepthwiseConvolutionLayerFixture<float>, framework::DatasetMode::PRECOMMIT,
430 combine(combine(combine(combine(datasets::SmallOptimizedDepthwiseConvolutionLayerDataset5x5(),
Gunes Bayir3af4c9b2023-10-08 17:51:28 +0100431 make("DepthMultiplier", 1)),
432 make("DataType",
Giorgio Arena68e29da2021-02-08 16:31:10 +0000433 DataType::F32)),
Gunes Bayir3af4c9b2023-10-08 17:51:28 +0100434 make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })),
Giorgio Arena68e29da2021-02-08 16:31:10 +0000435 ActivationFunctionsDataset))
Georgios Pinitas4c758512019-07-10 19:49:11 +0100436{
437 validate(Accessor(_target), _reference, tolerance_f32);
438}
Milos Puzovica7077e92022-10-28 16:49:15 +0100439FIXTURE_DATA_TEST_CASE_NEW(RunVariableWeightsSmall5x5, NEDepthwiseConvolutionLayerVariableWeightsFixture<float>, framework::DatasetMode::PRECOMMIT,
440 combine(combine(combine(combine(datasets::SmallOptimizedDepthwiseConvolutionLayerDataset5x5(),
Gunes Bayir3af4c9b2023-10-08 17:51:28 +0100441 make("DepthMultiplier", 1)),
442 make("DataType",
Milos Puzovica7077e92022-10-28 16:49:15 +0100443 DataType::F32)),
Gunes Bayir3af4c9b2023-10-08 17:51:28 +0100444 make("DataLayout", { DataLayout::NHWC })),
Milos Puzovica7077e92022-10-28 16:49:15 +0100445 ActivationFunctionsDataset))
446{
447 validate(Accessor(_target), _reference, tolerance_f32);
448}
Giorgio Arena68e29da2021-02-08 16:31:10 +0000449FIXTURE_DATA_TEST_CASE_NEW(RunLarge3x3, NEDepthwiseConvolutionLayerFixture<float>, framework::DatasetMode::NIGHTLY,
450 combine(combine(combine(combine(datasets::LargeOptimizedDepthwiseConvolutionLayerDataset3x3(),
Gunes Bayir3af4c9b2023-10-08 17:51:28 +0100451 make("DepthMultiplier", 1)),
452 make("DataType",
Giorgio Arena68e29da2021-02-08 16:31:10 +0000453 DataType::F32)),
Gunes Bayir3af4c9b2023-10-08 17:51:28 +0100454 make("DataLayout", { DataLayout::NHWC })),
455 make("ActivationInfo", { ActivationLayerInfo() })))
Georgios Pinitas4074c992018-01-30 18:13:46 +0000456{
457 validate(Accessor(_target), _reference, tolerance_f32);
458}
Milos Puzovica7077e92022-10-28 16:49:15 +0100459FIXTURE_DATA_TEST_CASE_NEW(RunVariableWeightsLarge3x3, NEDepthwiseConvolutionLayerVariableWeightsFixture<float>, framework::DatasetMode::NIGHTLY,
460 combine(combine(combine(combine(datasets::LargeOptimizedDepthwiseConvolutionLayerDataset3x3(),
Gunes Bayir3af4c9b2023-10-08 17:51:28 +0100461 make("DepthMultiplier", 1)),
462 make("DataType",
Milos Puzovica7077e92022-10-28 16:49:15 +0100463 DataType::F32)),
Gunes Bayir3af4c9b2023-10-08 17:51:28 +0100464 make("DataLayout", { DataLayout::NHWC })),
465 make("ActivationInfo", { ActivationLayerInfo() })))
Milos Puzovica7077e92022-10-28 16:49:15 +0100466{
467 validate(Accessor(_target), _reference, tolerance_f32);
468}
Georgios Pinitas4c758512019-07-10 19:49:11 +0100469TEST_SUITE_END() // Optimized
Georgios Pinitas20c246a2018-09-12 16:45:53 +0100470TEST_SUITE_END() // F32
Pablo Tello941cd702017-12-12 14:35:00 +0000471
Georgios Pinitas20c246a2018-09-12 16:45:53 +0100472#ifdef __ARM_FEATURE_FP16_VECTOR_ARITHMETIC
473TEST_SUITE(F16)
Gunes Bayir3af4c9b2023-10-08 17:51:28 +0100474
475FIXTURE_DATA_TEST_CASE_NEW(RunActivations, NEDepthwiseConvolutionLayerFixture<half>, framework::DatasetMode::NIGHTLY,
476 combine(
477 make("In", TensorShape(33U, 27U, 11U, 3U)),
478 make("Weights", Size2D(3U, 4U)),
479 make("Info", PadStrideInfo(1, 2, 0, 1)),
480 make("Dilation", Size2D(2U, 2U)),
481 make("DepthMultiplier", { 5 }),
482 make("DataType", DataType::F16),
483 make("DataLayout", { DataLayout::NHWC, DataLayout::NCHW }),
484 ActivationFunctionsDatasetNightly))
485{
486 validate(Accessor(_target), _reference, tolerance_f16, tolerance_num);
487}
488
Georgios Pinitas8cffcd62018-11-16 17:11:50 +0000489TEST_SUITE(Generic)
Giorgio Arena68e29da2021-02-08 16:31:10 +0000490FIXTURE_DATA_TEST_CASE_NEW(RunSmall, NEDepthwiseConvolutionLayerFixture<half>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(combine(datasets::SmallDepthwiseConvolutionLayerDataset(),
491 depth_multipliers),
Gunes Bayir3af4c9b2023-10-08 17:51:28 +0100492 make("DataType",
Giorgio Arena68e29da2021-02-08 16:31:10 +0000493 DataType::F16)),
Gunes Bayir3af4c9b2023-10-08 17:51:28 +0100494 make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })),
Giorgio Arena68e29da2021-02-08 16:31:10 +0000495 ActivationFunctionsDataset))
Georgios Pinitas8cffcd62018-11-16 17:11:50 +0000496{
497 validate(Accessor(_target), _reference, tolerance_f16, tolerance_num);
498}
Giorgio Arena68e29da2021-02-08 16:31:10 +0000499FIXTURE_DATA_TEST_CASE_NEW(RunLarge, NEDepthwiseConvolutionLayerFixture<half>, framework::DatasetMode::NIGHTLY, combine(combine(combine(combine(datasets::LargeDepthwiseConvolutionLayerDataset(),
500 large_depth_multipliers),
Gunes Bayir3af4c9b2023-10-08 17:51:28 +0100501 make("DataType",
Giorgio Arena68e29da2021-02-08 16:31:10 +0000502 DataType::F16)),
Gunes Bayir3af4c9b2023-10-08 17:51:28 +0100503 make("DataLayout", { DataLayout::NHWC })),
504 make("ActivationInfo", { ActivationLayerInfo() })))
Georgios Pinitas8cffcd62018-11-16 17:11:50 +0000505{
506 validate(Accessor(_target), _reference, tolerance_f16, tolerance_num);
507}
Usama Arif881f2de2019-04-12 10:29:17 +0100508
509TEST_SUITE(Dilation)
Giorgio Arena68e29da2021-02-08 16:31:10 +0000510FIXTURE_DATA_TEST_CASE_NEW(RunSmall, NEDepthwiseConvolutionLayerFixture<half>, framework::DatasetMode::PRECOMMIT,
511 combine(combine(combine(combine(datasets::SmallDepthwiseDilatedConvolutionLayerDataset(),
512 depth_multipliers),
Gunes Bayir3af4c9b2023-10-08 17:51:28 +0100513 make("DataType", DataType::F16)),
514 make("DataLayout", { DataLayout::NHWC })),
Giorgio Arena68e29da2021-02-08 16:31:10 +0000515 ActivationFunctionsDataset))
Usama Arif881f2de2019-04-12 10:29:17 +0100516{
517 validate(Accessor(_target), _reference, tolerance_f16, tolerance_num);
518}
Giorgio Arena68e29da2021-02-08 16:31:10 +0000519FIXTURE_DATA_TEST_CASE_NEW(RunLarge, NEDepthwiseConvolutionLayerFixture<half>, framework::DatasetMode::NIGHTLY,
520 combine(combine(combine(combine(datasets::LargeDepthwiseDilatedConvolutionLayerDataset(),
521 large_depth_multipliers),
Gunes Bayir3af4c9b2023-10-08 17:51:28 +0100522 make("DataType", DataType::F16)),
523 make("DataLayout", { DataLayout::NHWC })),
524 make("ActivationInfo", { ActivationLayerInfo() })))
Usama Arif881f2de2019-04-12 10:29:17 +0100525{
526 validate(Accessor(_target), _reference, tolerance_f16, tolerance_num);
527}
528TEST_SUITE_END() // Dilation
529
Georgios Pinitas8cffcd62018-11-16 17:11:50 +0000530TEST_SUITE_END() // Generic
Georgios Pinitas20c246a2018-09-12 16:45:53 +0100531template <typename T>
Manuel Bottini05069f02019-09-26 17:18:26 +0100532using NEDepthwiseConvolutionLayerFixture = DepthwiseConvolutionLayerValidationFixture<Tensor, Accessor, NEDepthwiseConvolutionLayer, T>;
Georgios Pinitas4c758512019-07-10 19:49:11 +0100533TEST_SUITE(W3x3)
Giorgio Arena68e29da2021-02-08 16:31:10 +0000534FIXTURE_DATA_TEST_CASE_NEW(RunSmall, NEDepthwiseConvolutionLayerFixture<half>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(combine(datasets::SmallDepthwiseConvolutionLayerDataset3x3(),
535 depth_multipliers),
Gunes Bayir3af4c9b2023-10-08 17:51:28 +0100536 make("DataType",
Giorgio Arena68e29da2021-02-08 16:31:10 +0000537 DataType::F16)),
Gunes Bayir3af4c9b2023-10-08 17:51:28 +0100538 make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })),
Giorgio Arena68e29da2021-02-08 16:31:10 +0000539 ActivationFunctionsDataset))
Georgios Pinitas20c246a2018-09-12 16:45:53 +0100540{
541 validate(Accessor(_target), _reference, tolerance_f16);
542}
Giorgio Arena68e29da2021-02-08 16:31:10 +0000543FIXTURE_DATA_TEST_CASE_NEW(RunLarge, NEDepthwiseConvolutionLayerFixture<half>, framework::DatasetMode::NIGHTLY,
544 combine(combine(combine(combine(datasets::LargeDepthwiseConvolutionLayerDataset3x3(),
545 large_depth_multipliers),
Gunes Bayir3af4c9b2023-10-08 17:51:28 +0100546 make("DataType",
Giorgio Arena68e29da2021-02-08 16:31:10 +0000547 DataType::F16)),
Gunes Bayir3af4c9b2023-10-08 17:51:28 +0100548 make("DataLayout", { DataLayout::NHWC })),
549 make("ActivationInfo", { ActivationLayerInfo() })))
Georgios Pinitas20c246a2018-09-12 16:45:53 +0100550{
551 validate(Accessor(_target), _reference, tolerance_f16);
552}
Usama Arif881f2de2019-04-12 10:29:17 +0100553
554TEST_SUITE(Dilation)
555
Giorgio Arena68e29da2021-02-08 16:31:10 +0000556FIXTURE_DATA_TEST_CASE_NEW(RunSmall, NEDepthwiseConvolutionLayerFixture<half>, framework::DatasetMode::PRECOMMIT,
557 combine(combine(combine(combine(datasets::SmallDepthwiseDilatedConvolutionLayerDataset3x3(),
558 depth_multipliers),
Gunes Bayir3af4c9b2023-10-08 17:51:28 +0100559 make("DataType",
Giorgio Arena68e29da2021-02-08 16:31:10 +0000560 DataType::F16)),
Gunes Bayir3af4c9b2023-10-08 17:51:28 +0100561 make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })),
Giorgio Arena68e29da2021-02-08 16:31:10 +0000562 ActivationFunctionsDataset))
Usama Arif881f2de2019-04-12 10:29:17 +0100563{
564 validate(Accessor(_target), _reference, tolerance_f16);
565}
Giorgio Arena68e29da2021-02-08 16:31:10 +0000566FIXTURE_DATA_TEST_CASE_NEW(RunLarge, NEDepthwiseConvolutionLayerFixture<half>, framework::DatasetMode::NIGHTLY,
567 combine(combine(combine(combine(datasets::LargeDepthwiseDilatedConvolutionLayerDataset3x3(),
568 large_depth_multipliers),
Gunes Bayir3af4c9b2023-10-08 17:51:28 +0100569 make("DataType",
Giorgio Arena68e29da2021-02-08 16:31:10 +0000570 DataType::F16)),
Gunes Bayir3af4c9b2023-10-08 17:51:28 +0100571 make("DataLayout", { DataLayout::NHWC })),
572 make("ActivationInfo", { ActivationLayerInfo() })))
Usama Arif881f2de2019-04-12 10:29:17 +0100573{
574 validate(Accessor(_target), _reference, tolerance_f16);
575}
576
577TEST_SUITE_END() // Dilation
Georgios Pinitas4c758512019-07-10 19:49:11 +0100578TEST_SUITE_END() // W3x3
Usama Arif881f2de2019-04-12 10:29:17 +0100579
Georgios Pinitas4c758512019-07-10 19:49:11 +0100580TEST_SUITE(Optimized)
Giorgio Arena68e29da2021-02-08 16:31:10 +0000581FIXTURE_DATA_TEST_CASE_NEW(RunSmallW3x3, NEDepthwiseConvolutionLayerFixture<half>, framework::DatasetMode::PRECOMMIT,
582 combine(combine(combine(combine(datasets::SmallOptimizedDepthwiseConvolutionLayerDataset3x3(),
Gunes Bayir3af4c9b2023-10-08 17:51:28 +0100583 make("DepthMultiplier", 1)),
584 make("DataType",
Giorgio Arena68e29da2021-02-08 16:31:10 +0000585 DataType::F16)),
Gunes Bayir3af4c9b2023-10-08 17:51:28 +0100586 make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })),
Giorgio Arena68e29da2021-02-08 16:31:10 +0000587 ActivationFunctionsDataset))
Michalis Spyrouaeebe4a2019-01-09 14:21:03 +0000588{
589 validate(Accessor(_target), _reference, tolerance_f16);
590}
Giorgio Arena68e29da2021-02-08 16:31:10 +0000591FIXTURE_DATA_TEST_CASE_NEW(RunSmallW5x5, NEDepthwiseConvolutionLayerFixture<half>, framework::DatasetMode::PRECOMMIT,
592 combine(combine(combine(combine(datasets::SmallOptimizedDepthwiseConvolutionLayerDataset5x5(),
Gunes Bayir3af4c9b2023-10-08 17:51:28 +0100593 make("DepthMultiplier", 1)),
594 make("DataType",
Giorgio Arena68e29da2021-02-08 16:31:10 +0000595 DataType::F16)),
Gunes Bayir3af4c9b2023-10-08 17:51:28 +0100596 make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })),
Giorgio Arena68e29da2021-02-08 16:31:10 +0000597 ActivationFunctionsDataset))
Georgios Pinitas4c758512019-07-10 19:49:11 +0100598{
599 validate(Accessor(_target), _reference, tolerance_f16);
600}
Giorgio Arena68e29da2021-02-08 16:31:10 +0000601FIXTURE_DATA_TEST_CASE_NEW(RunLargeW3x3, NEDepthwiseConvolutionLayerFixture<half>, framework::DatasetMode::NIGHTLY,
602 combine(combine(combine(combine(datasets::LargeOptimizedDepthwiseConvolutionLayerDataset3x3(),
Gunes Bayir3af4c9b2023-10-08 17:51:28 +0100603 make("DepthMultiplier", 1)),
604 make("DataType",
Giorgio Arena68e29da2021-02-08 16:31:10 +0000605 DataType::F16)),
Gunes Bayir3af4c9b2023-10-08 17:51:28 +0100606 make("DataLayout", { DataLayout::NHWC })),
607 make("ActivationInfo", { ActivationLayerInfo() })))
Georgios Pinitas20c246a2018-09-12 16:45:53 +0100608{
609 validate(Accessor(_target), _reference, tolerance_f16);
610}
Georgios Pinitas4c758512019-07-10 19:49:11 +0100611TEST_SUITE_END() // Optimized
Georgios Pinitas20c246a2018-09-12 16:45:53 +0100612TEST_SUITE_END() // FP16
613#endif // __ARM_FEATURE_FP16_VECTOR_ARITHMETIC
614
615TEST_SUITE_END() // Float
Michalis Spyrou7362f0d2017-10-18 17:58:22 +0100616
Georgios Pinitasf72f9362018-01-12 16:29:45 +0000617template <typename T>
Giorgio Arenad93e2632019-10-15 11:09:33 +0100618using NEDepthwiseConvolutionLayerQuantizedFixture = DepthwiseConvolutionLayerValidationQuantizedFixture<Tensor, Accessor, NEDepthwiseConvolutionLayer, T>;
Manuel Bottinica62c6f2021-03-23 11:50:34 +0000619template <typename T>
620using NEDepthwiseConvolutionLayerQuantizedMixedDataLayoutFixture = DepthwiseConvolutionLayerValidationQuantizedFixture<Tensor, Accessor, NEDepthwiseConvolutionLayer, T, true>;
Giorgio Arenad93e2632019-10-15 11:09:33 +0100621using NEDepthwiseConvolutionLayerQuantizedSymmetricPerChannelFixture = DepthwiseConvolutionLayerValidationQuantizedPerChannelFixture<Tensor, Accessor, NEDepthwiseConvolutionLayer, uint8_t, int8_t>;
Georgios Pinitasf72f9362018-01-12 16:29:45 +0000622
623TEST_SUITE(Quantized)
624TEST_SUITE(QASYMM8)
Gunes Bayir3af4c9b2023-10-08 17:51:28 +0100625
626FIXTURE_DATA_TEST_CASE_NEW(RunActivations, NEDepthwiseConvolutionLayerQuantizedFixture<uint8_t>, framework::DatasetMode::NIGHTLY,
627 combine(
628 make("In", TensorShape(33U, 27U, 11U, 3U)),
629 make("Weights", Size2D(3U, 4U)),
630 make("Info", PadStrideInfo(1, 2, 0, 1)),
631 make("Dilation", Size2D(2U, 2U)),
632 make("DepthMultiplier", { 5 }),
633 make("DataType", DataType::QASYMM8),
634 make("SrcQuantizationInfo", { QuantizationInfo(0.3f, 10) }),
635 make("DstQuantizationInfo", { QuantizationInfo(0.05f, 4) }),
636 make("DataLayout", { DataLayout::NHWC, DataLayout::NCHW }),
637 ActivationFunctionsQuantizedDataset))
638{
639 validate(Accessor(_target), _reference, tolerance_qasymm8);
640}
641
Georgios Pinitasd05dce42018-01-22 16:29:17 +0000642TEST_SUITE(Generic)
Giorgio Arena68e29da2021-02-08 16:31:10 +0000643FIXTURE_DATA_TEST_CASE_NEW(RunSmall, NEDepthwiseConvolutionLayerQuantizedFixture<uint8_t>, framework::DatasetMode::PRECOMMIT,
Omar Al Khatib0cba93f2024-02-01 14:42:37 +0000644 combine(datasets::SmallDepthwiseConvolutionLayerDataset(),
645 depth_multipliers,
646 make("DataType", DataType::QASYMM8),
647 IgnoredQuantizationInfo,
648 IgnoredQuantizationInfo,
649 make("DataLayout", { DataLayout::NHWC }),
650 NoActivation))
651{
652 validate(Accessor(_target), _reference, tolerance_qasymm8);
653}
654FIXTURE_DATA_TEST_CASE_NEW(RunSmallWithActivation, NEDepthwiseConvolutionLayerQuantizedFixture<uint8_t>, framework::DatasetMode::PRECOMMIT,
655 combine(datasets::SmallDepthwiseConvolutionLayerDataset(),
656 depth_multipliers,
657 make("DataType", DataType::QASYMM8),
658 input_qinfo_dataset,
659 make("DstQuantizationInfo", { QuantizationInfo(0.5f, 4) }),
660 make("DataLayout", { DataLayout::NHWC }),
661 ActivationFunctionsQuantizedSmallDataset))
Georgios Pinitasf72f9362018-01-12 16:29:45 +0000662{
663 validate(Accessor(_target), _reference, tolerance_qasymm8);
664}
Manuel Bottinica62c6f2021-03-23 11:50:34 +0000665FIXTURE_DATA_TEST_CASE_NEW(RunMixedDataLayout, NEDepthwiseConvolutionLayerQuantizedMixedDataLayoutFixture<uint8_t>, framework::DatasetMode::PRECOMMIT,
Omar Al Khatib0cba93f2024-02-01 14:42:37 +0000666 combine(datasets::SmallDepthwiseConvolutionLayerDataset(),
667 make("DepthMultiplier", { 2 }),
668 make("DataType", DataType::QASYMM8),
669 IgnoredQuantizationInfo,
670 IgnoredQuantizationInfo,
671 make("DataLayout", { DataLayout::NHWC }),
672 NoActivation))
Manuel Bottinica62c6f2021-03-23 11:50:34 +0000673{
674 validate(Accessor(_target), _reference, tolerance_qasymm8);
675}
Usama Arif881f2de2019-04-12 10:29:17 +0100676TEST_SUITE(Dilation)
Giorgio Arena68e29da2021-02-08 16:31:10 +0000677FIXTURE_DATA_TEST_CASE_NEW(RunSmall, NEDepthwiseConvolutionLayerQuantizedFixture<uint8_t>, framework::DatasetMode::PRECOMMIT,
Omar Al Khatib0cba93f2024-02-01 14:42:37 +0000678 combine(datasets::SmallDepthwiseDilatedConvolutionLayerDataset(),
679 depth_multipliers,
680 make("DataType", DataType::QASYMM8),
681 IgnoredQuantizationInfo,
682 IgnoredQuantizationInfo,
683 make("DataLayout", { DataLayout::NHWC }),
684 NoActivation))
685{
686 validate(Accessor(_target), _reference, tolerance_qasymm8);
687}
688FIXTURE_DATA_TEST_CASE_NEW(RunSmallWithActivation, NEDepthwiseConvolutionLayerQuantizedFixture<uint8_t>, framework::DatasetMode::PRECOMMIT,
689 combine(datasets::SmallDepthwiseDilatedConvolutionLayerDataset(),
690 depth_multipliers,
691 make("DataType", DataType::QASYMM8),
692 input_qinfo_dataset,
693 make("DstQuantizationInfo", { QuantizationInfo(0.8f, 1) }),
694 make("DataLayout", { DataLayout::NHWC }),
695 ActivationFunctionsDataset))
Usama Arif881f2de2019-04-12 10:29:17 +0100696{
697 validate(Accessor(_target), _reference, tolerance_qasymm8);
698}
Giorgio Arena68e29da2021-02-08 16:31:10 +0000699FIXTURE_DATA_TEST_CASE_NEW(RunLarge, NEDepthwiseConvolutionLayerQuantizedFixture<uint8_t>, framework::DatasetMode::NIGHTLY,
Omar Al Khatib0cba93f2024-02-01 14:42:37 +0000700 combine(datasets::LargeDepthwiseDilatedConvolutionLayerDataset(),
701 large_depth_multipliers,
702 make("DataType", DataType::QASYMM8),
703 IgnoredQuantizationInfo,
704 IgnoredQuantizationInfo,
705 make("DataLayout", { DataLayout::NHWC }),
706 NoActivation))
Usama Arif881f2de2019-04-12 10:29:17 +0100707{
708 validate(Accessor(_target), _reference, tolerance_qasymm8);
709}
Georgios Pinitas4c758512019-07-10 19:49:11 +0100710TEST_SUITE_END() // Dilation
Michalis Spyrouaeebe4a2019-01-09 14:21:03 +0000711TEST_SUITE_END() // Generic
Giorgio Arena76572242018-04-04 17:44:26 +0100712TEST_SUITE(W3x3)
Manuel Bottinica62c6f2021-03-23 11:50:34 +0000713FIXTURE_DATA_TEST_CASE_NEW(RunSmall, NEDepthwiseConvolutionLayerQuantizedFixture<uint8_t>, framework::DatasetMode::PRECOMMIT,
Omar Al Khatib0cba93f2024-02-01 14:42:37 +0000714 combine(datasets::SmallDepthwiseConvolutionLayerDataset3x3(), depth_multipliers,
715 make("DataType", DataType::QASYMM8),
716 IgnoredQuantizationInfo,
717 IgnoredQuantizationInfo,
718 make("DataLayout", { DataLayout::NHWC }),
719 NoActivation))
720{
721 validate(Accessor(_target), _reference, tolerance_qasymm8);
722}
723FIXTURE_DATA_TEST_CASE_NEW(RunSmallWithActivation, NEDepthwiseConvolutionLayerQuantizedFixture<uint8_t>, framework::DatasetMode::PRECOMMIT,
724 combine(datasets::SmallDepthwiseConvolutionLayerDataset3x3(), depth_multipliers,
725 make("DataType", DataType::QASYMM8),
726 input_qinfo_dataset,
727 make("DstQuantizationInfo", { QuantizationInfo(0.5f, 10) }),
728 make("DataLayout", { DataLayout::NHWC }),
729 ActivationFunctionsQuantizedSmallDataset))
Giorgio Arena76572242018-04-04 17:44:26 +0100730{
731 validate(Accessor(_target), _reference, tolerance_qasymm8);
732}
Manuel Bottinica62c6f2021-03-23 11:50:34 +0000733FIXTURE_DATA_TEST_CASE_NEW(RunLarge, NEDepthwiseConvolutionLayerQuantizedFixture<uint8_t>, framework::DatasetMode::NIGHTLY,
Omar Al Khatib0cba93f2024-02-01 14:42:37 +0000734 combine(datasets::LargeDepthwiseConvolutionLayerDataset3x3(),
735 large_depth_multipliers,
736 make("DataType", DataType::QASYMM8),
737 IgnoredQuantizationInfo,
738 IgnoredQuantizationInfo,
739 make("DataLayout", { DataLayout::NHWC }),
740 NoActivation))
Georgios Pinitasf72f9362018-01-12 16:29:45 +0000741{
742 validate(Accessor(_target), _reference, tolerance_qasymm8);
743}
Usama Arif881f2de2019-04-12 10:29:17 +0100744
745TEST_SUITE(Dilation)
Manuel Bottinica62c6f2021-03-23 11:50:34 +0000746FIXTURE_DATA_TEST_CASE_NEW(RunSmall, NEDepthwiseConvolutionLayerQuantizedFixture<uint8_t>, framework::DatasetMode::PRECOMMIT,
Omar Al Khatib0cba93f2024-02-01 14:42:37 +0000747 combine(datasets::SmallDepthwiseDilatedConvolutionLayerDataset3x3(), depth_multipliers,
748 make("DataType", DataType::QASYMM8),
749 IgnoredQuantizationInfo,
750 IgnoredQuantizationInfo,
751 make("DataLayout", { DataLayout::NHWC }),
752 NoActivation))
753{
754 validate(Accessor(_target), _reference, tolerance_qasymm8);
755}
756FIXTURE_DATA_TEST_CASE_NEW(RunSmallWithActivation, NEDepthwiseConvolutionLayerQuantizedFixture<uint8_t>, framework::DatasetMode::PRECOMMIT,
757 combine(datasets::SmallDepthwiseDilatedConvolutionLayerDataset3x3(), depth_multipliers,
758 make("DataType", DataType::QASYMM8),
759 input_qinfo_dataset,
760 make("DstQuantizationInfo", { QuantizationInfo(0.7f, 10) }),
761 make("DataLayout", { DataLayout::NHWC }),
762 ActivationFunctionsQuantizedSmallDataset))
Usama Arif881f2de2019-04-12 10:29:17 +0100763{
764 validate(Accessor(_target), _reference, tolerance_qasymm8);
765}
Manuel Bottinica62c6f2021-03-23 11:50:34 +0000766FIXTURE_DATA_TEST_CASE_NEW(RunLarge, NEDepthwiseConvolutionLayerQuantizedFixture<uint8_t>, framework::DatasetMode::NIGHTLY,
Omar Al Khatib0cba93f2024-02-01 14:42:37 +0000767 combine(datasets::LargeDepthwiseDilatedConvolutionLayerDataset3x3(),
768 large_depth_multipliers,
769 make("DataType", DataType::QASYMM8),
770 IgnoredQuantizationInfo,
771 IgnoredQuantizationInfo,
772 make("DataLayout", { DataLayout::NHWC }),
773 NoActivation))
Usama Arif881f2de2019-04-12 10:29:17 +0100774{
775 validate(Accessor(_target), _reference, tolerance_qasymm8);
776}
777TEST_SUITE_END() // Dilation
Michalis Spyrouaeebe4a2019-01-09 14:21:03 +0000778TEST_SUITE_END() // W3x3
Georgios Pinitas4c758512019-07-10 19:49:11 +0100779
780TEST_SUITE(Optimized)
Manuel Bottinica62c6f2021-03-23 11:50:34 +0000781FIXTURE_DATA_TEST_CASE_NEW(RunSmall3x3, NEDepthwiseConvolutionLayerQuantizedFixture<uint8_t>, framework::DatasetMode::PRECOMMIT,
Omar Al Khatib0cba93f2024-02-01 14:42:37 +0000782 combine(datasets::SmallOptimizedDepthwiseConvolutionLayerDataset3x3(),
783 make("DepthMultiplier", 1),
784 make("DataType", DataType::QASYMM8),
785 IgnoredQuantizationInfo,
786 IgnoredQuantizationInfo,
787 make("DataLayout", { DataLayout::NHWC }),
788 NoActivation))
789{
790 validate(Accessor(_target), _reference, tolerance_qasymm8);
791}
792FIXTURE_DATA_TEST_CASE_NEW(RunSmall3x3WithActivation, NEDepthwiseConvolutionLayerQuantizedFixture<uint8_t>, framework::DatasetMode::PRECOMMIT,
793 combine(datasets::SmallOptimizedDepthwiseConvolutionLayerDataset3x3(),
794 make("DepthMultiplier", 1),
795 make("DataType", DataType::QASYMM8),
796 input_qinfo_dataset,
797 make("DstQuantizationInfo", { QuantizationInfo(0.5f, 10) }),
798 make("DataLayout", { DataLayout::NHWC }),
799 ActivationFunctionsQuantizedSmallDataset))
Georgios Pinitas4c758512019-07-10 19:49:11 +0100800{
801 validate(Accessor(_target), _reference, tolerance_qasymm8);
802}
Manuel Bottinica62c6f2021-03-23 11:50:34 +0000803FIXTURE_DATA_TEST_CASE_NEW(RunMixedDataLayout3x3, NEDepthwiseConvolutionLayerQuantizedMixedDataLayoutFixture<uint8_t>, framework::DatasetMode::PRECOMMIT,
Omar Al Khatib0cba93f2024-02-01 14:42:37 +0000804 combine(datasets::SmallOptimizedDepthwiseConvolutionLayerDataset3x3(),
805 make("DepthMultiplier", 1),
806 make("DataType", DataType::QASYMM8),
807 IgnoredQuantizationInfo,
808 IgnoredQuantizationInfo,
809 make("DataLayout", { DataLayout::NHWC }),
810 NoActivation))
Manuel Bottinica62c6f2021-03-23 11:50:34 +0000811{
812 validate(Accessor(_target), _reference, tolerance_qasymm8);
813}
814FIXTURE_DATA_TEST_CASE_NEW(RunSmall5x5, NEDepthwiseConvolutionLayerQuantizedFixture<uint8_t>, framework::DatasetMode::PRECOMMIT,
Omar Al Khatib0cba93f2024-02-01 14:42:37 +0000815 combine(datasets::SmallOptimizedDepthwiseConvolutionLayerDataset5x5(),
816 make("DepthMultiplier", 1),
817 make("DataType", DataType::QASYMM8),
818 IgnoredQuantizationInfo,
819 IgnoredQuantizationInfo,
820 make("DataLayout", { DataLayout::NHWC }),
821 NoActivation))
822{
823 validate(Accessor(_target), _reference, tolerance_qasymm8);
824}
825FIXTURE_DATA_TEST_CASE_NEW(RunSmall5x5WithActivation, NEDepthwiseConvolutionLayerQuantizedFixture<uint8_t>, framework::DatasetMode::PRECOMMIT,
826 combine(datasets::SmallOptimizedDepthwiseConvolutionLayerDataset5x5(),
827 make("DepthMultiplier", 1),
828 make("DataType", DataType::QASYMM8),
829 input_qinfo_dataset,
830 make("DstQuantizationInfo", { QuantizationInfo(0.5f, 10) }),
831 make("DataLayout", { DataLayout::NHWC }),
832 ActivationFunctionsQuantizedSmallDataset))
Georgios Pinitas4c758512019-07-10 19:49:11 +0100833{
834 validate(Accessor(_target), _reference, tolerance_qasymm8);
835}
Manuel Bottinica62c6f2021-03-23 11:50:34 +0000836FIXTURE_DATA_TEST_CASE_NEW(RunLarge3x3, NEDepthwiseConvolutionLayerQuantizedFixture<uint8_t>, framework::DatasetMode::NIGHTLY,
Omar Al Khatib0cba93f2024-02-01 14:42:37 +0000837 combine(datasets::LargeOptimizedDepthwiseConvolutionLayerDataset3x3(),
838 make("DepthMultiplier", 1),
839 make("DataType", DataType::QASYMM8),
840 IgnoredQuantizationInfo,
841 IgnoredQuantizationInfo,
842 make("DataLayout", { DataLayout::NHWC }),
843 NoActivation))
Georgios Pinitas4c758512019-07-10 19:49:11 +0100844{
845 validate(Accessor(_target), _reference, tolerance_qasymm8);
846}
847TEST_SUITE_END() // Optimized
Michalis Spyrouaeebe4a2019-01-09 14:21:03 +0000848TEST_SUITE_END() // QASYMM8
Michele Di Giorgio13ec5f02020-01-02 12:11:13 +0000849
850TEST_SUITE(QASYMM8_SIGNED)
Gunes Bayir3af4c9b2023-10-08 17:51:28 +0100851
852FIXTURE_DATA_TEST_CASE_NEW(RunActivations, NEDepthwiseConvolutionLayerQuantizedFixture<int8_t>, framework::DatasetMode::NIGHTLY,
853 combine(
854 make("In", TensorShape(33U, 27U, 11U, 3U)),
855 make("Weights", Size2D(3U, 4U)),
856 make("Info", PadStrideInfo(1, 2, 0, 1)),
857 make("Dilation", Size2D(2U, 2U)),
858 make("DepthMultiplier", { 5 }),
859 make("DataType", DataType::QASYMM8_SIGNED),
860 make("SrcQuantizationInfo", { QuantizationInfo(0.3f, 10) }),
861 make("DstQuantizationInfo", { QuantizationInfo(0.05f, 4) }),
862 make("DataLayout", { DataLayout::NHWC, DataLayout::NCHW }),
863 ActivationFunctionsQuantizedDataset))
864{
865 validate(Accessor(_target), _reference, tolerance_qasymm8);
866}
867
Michele Di Giorgio8c837ca2020-01-07 15:06:41 +0000868TEST_SUITE(Generic)
Giorgio Arena68e29da2021-02-08 16:31:10 +0000869FIXTURE_DATA_TEST_CASE_NEW(RunSmall, NEDepthwiseConvolutionLayerQuantizedFixture<int8_t>, framework::DatasetMode::PRECOMMIT,
Omar Al Khatib0cba93f2024-02-01 14:42:37 +0000870 combine(datasets::SmallDepthwiseConvolutionLayerDataset(),
871 depth_multipliers,
872 make("DataType", DataType::QASYMM8_SIGNED),
873 IgnoredQuantizationInfo,
874 IgnoredQuantizationInfo,
875 make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC }),
876 NoActivation))
Michele Di Giorgio8c837ca2020-01-07 15:06:41 +0000877{
Omar Al Khatib0cba93f2024-02-01 14:42:37 +0000878 validate(Accessor(_target), _reference, tolerance_qasymm8_signed);
Michele Di Giorgio8c837ca2020-01-07 15:06:41 +0000879}
Omar Al Khatib0cba93f2024-02-01 14:42:37 +0000880FIXTURE_DATA_TEST_CASE_NEW(RunSmallWithActivation, NEDepthwiseConvolutionLayerQuantizedFixture<int8_t>, framework::DatasetMode::PRECOMMIT,
881 combine(datasets::SmallDepthwiseConvolutionLayerDataset(),
882 depth_multipliers,
883 make("DataType", DataType::QASYMM8_SIGNED),
884 input_qinfo_dataset,
885 make("DstQuantizationInfo", { QuantizationInfo(0.5f, 4) }),
886 make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC }),
887 ActivationFunctionsQuantizedSmallDataset))
888{
889 validate(Accessor(_target), _reference, tolerance_qasymm8_signed);
890}
Michele Di Giorgio8c837ca2020-01-07 15:06:41 +0000891TEST_SUITE(Dilation)
Giorgio Arena68e29da2021-02-08 16:31:10 +0000892FIXTURE_DATA_TEST_CASE_NEW(RunSmall, NEDepthwiseConvolutionLayerQuantizedFixture<int8_t>, framework::DatasetMode::PRECOMMIT,
Omar Al Khatib0cba93f2024-02-01 14:42:37 +0000893 combine(datasets::SmallDepthwiseDilatedConvolutionLayerDataset(),
894 depth_multipliers,
895 make("DataType", DataType::QASYMM8_SIGNED),
896 IgnoredQuantizationInfo,
897 IgnoredQuantizationInfo,
898 make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC }),
899 NoActivation))
Michele Di Giorgio8c837ca2020-01-07 15:06:41 +0000900{
Omar Al Khatib0cba93f2024-02-01 14:42:37 +0000901 validate(Accessor(_target), _reference, tolerance_qasymm8_signed);
902}
903FIXTURE_DATA_TEST_CASE_NEW(RunSmallWithActivation, NEDepthwiseConvolutionLayerQuantizedFixture<int8_t>, framework::DatasetMode::PRECOMMIT,
904 combine(datasets::SmallDepthwiseDilatedConvolutionLayerDataset(),
905 depth_multipliers,
906 make("DataType", DataType::QASYMM8_SIGNED),
907 input_qinfo_dataset,
908 make("DstQuantizationInfo", { QuantizationInfo(0.8f, 1) }),
909 make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC }),
910 ActivationFunctionsQuantizedSmallDataset))
911{
912 validate(Accessor(_target), _reference, tolerance_qasymm8_signed);
Michele Di Giorgio8c837ca2020-01-07 15:06:41 +0000913}
Giorgio Arena68e29da2021-02-08 16:31:10 +0000914FIXTURE_DATA_TEST_CASE_NEW(RunLarge, NEDepthwiseConvolutionLayerQuantizedFixture<int8_t>, framework::DatasetMode::NIGHTLY,
Omar Al Khatib0cba93f2024-02-01 14:42:37 +0000915 combine(datasets::LargeDepthwiseDilatedConvolutionLayerDataset(),
916 large_depth_multipliers,
917 make("DataType", DataType::QASYMM8_SIGNED),
918 IgnoredQuantizationInfo,
919 IgnoredQuantizationInfo,
920 make("DataLayout", { DataLayout::NCHW }),
921 NoActivation))
Michele Di Giorgio8c837ca2020-01-07 15:06:41 +0000922{
Omar Al Khatib0cba93f2024-02-01 14:42:37 +0000923 validate(Accessor(_target), _reference, tolerance_qasymm8_signed);
Michele Di Giorgio8c837ca2020-01-07 15:06:41 +0000924}
925TEST_SUITE_END() // Dilation
926TEST_SUITE_END() // Generic
927
Michele Di Giorgio13ec5f02020-01-02 12:11:13 +0000928TEST_SUITE(W3x3)
Manuel Bottinica62c6f2021-03-23 11:50:34 +0000929FIXTURE_DATA_TEST_CASE_NEW(RunSmall, NEDepthwiseConvolutionLayerQuantizedFixture<int8_t>, framework::DatasetMode::PRECOMMIT,
Omar Al Khatib0cba93f2024-02-01 14:42:37 +0000930 combine(datasets::SmallDepthwiseConvolutionLayerDataset3x3(),
931 depth_multipliers,
932 make("DataType", DataType::QASYMM8_SIGNED),
933 IgnoredQuantizationInfo,
934 IgnoredQuantizationInfo,
935 make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC }),
936 NoActivation))
Michele Di Giorgio13ec5f02020-01-02 12:11:13 +0000937{
Omar Al Khatib0cba93f2024-02-01 14:42:37 +0000938 validate(Accessor(_target), _reference, tolerance_qasymm8_signed);
939}
940FIXTURE_DATA_TEST_CASE_NEW(RunSmallWithActivation, NEDepthwiseConvolutionLayerQuantizedFixture<int8_t>, framework::DatasetMode::PRECOMMIT,
941 combine(datasets::SmallDepthwiseConvolutionLayerDataset3x3(),
942 depth_multipliers,
943 make("DataType", DataType::QASYMM8_SIGNED),
944 input_qinfo_dataset,
945 make("DstQuantizationInfo", { QuantizationInfo(0.5f, 10) }),
946 make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC }),
947 ActivationFunctionsQuantizedSmallDataset))
948{
949 validate(Accessor(_target), _reference, tolerance_qasymm8_signed);
Michele Di Giorgio13ec5f02020-01-02 12:11:13 +0000950}
Manuel Bottinica62c6f2021-03-23 11:50:34 +0000951FIXTURE_DATA_TEST_CASE_NEW(RunLarge, NEDepthwiseConvolutionLayerQuantizedFixture<int8_t>, framework::DatasetMode::NIGHTLY,
Omar Al Khatib0cba93f2024-02-01 14:42:37 +0000952 combine(datasets::LargeDepthwiseConvolutionLayerDataset3x3(),
953 large_depth_multipliers,
954 make("DataType", DataType::QASYMM8_SIGNED),
955 IgnoredQuantizationInfo,
956 IgnoredQuantizationInfo,
957 make("DataLayout", { DataLayout::NCHW }),
958 NoActivation))
Michele Di Giorgio13ec5f02020-01-02 12:11:13 +0000959{
Omar Al Khatib0cba93f2024-02-01 14:42:37 +0000960 validate(Accessor(_target), _reference, tolerance_qasymm8_signed);
Michele Di Giorgio13ec5f02020-01-02 12:11:13 +0000961}
962
963TEST_SUITE(Dilation)
Manuel Bottinica62c6f2021-03-23 11:50:34 +0000964FIXTURE_DATA_TEST_CASE_NEW(RunSmall, NEDepthwiseConvolutionLayerQuantizedFixture<int8_t>, framework::DatasetMode::PRECOMMIT,
Omar Al Khatib0cba93f2024-02-01 14:42:37 +0000965 combine(datasets::SmallDepthwiseDilatedConvolutionLayerDataset3x3(),
966 depth_multipliers,
967 make("DataType", DataType::QASYMM8_SIGNED),
968 IgnoredQuantizationInfo,
969 IgnoredQuantizationInfo,
970 make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC }),
971 NoActivation))
Michele Di Giorgio13ec5f02020-01-02 12:11:13 +0000972{
Omar Al Khatib0cba93f2024-02-01 14:42:37 +0000973 validate(Accessor(_target), _reference, tolerance_qasymm8_signed);
974}
975FIXTURE_DATA_TEST_CASE_NEW(RunSmallWithActivation, NEDepthwiseConvolutionLayerQuantizedFixture<int8_t>, framework::DatasetMode::PRECOMMIT,
976 combine(datasets::SmallDepthwiseDilatedConvolutionLayerDataset3x3(),
977 depth_multipliers,
978 make("DataType", DataType::QASYMM8_SIGNED),
979 input_qinfo_dataset,
980 make("DstQuantizationInfo", { QuantizationInfo(0.7f, 10) }),
981 make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC }),
982 ActivationFunctionsQuantizedSmallDataset))
983{
984 validate(Accessor(_target), _reference, tolerance_qasymm8_signed);
Michele Di Giorgio13ec5f02020-01-02 12:11:13 +0000985}
Manuel Bottinica62c6f2021-03-23 11:50:34 +0000986FIXTURE_DATA_TEST_CASE_NEW(RunLarge, NEDepthwiseConvolutionLayerQuantizedFixture<int8_t>, framework::DatasetMode::NIGHTLY,
Omar Al Khatib0cba93f2024-02-01 14:42:37 +0000987 combine(datasets::LargeDepthwiseDilatedConvolutionLayerDataset3x3(),
988 large_depth_multipliers,
989 make("DataType", DataType::QASYMM8_SIGNED),
990 IgnoredQuantizationInfo,
991 IgnoredQuantizationInfo,
992 make("DataLayout", { DataLayout::NCHW }),
993 NoActivation))
Michele Di Giorgio13ec5f02020-01-02 12:11:13 +0000994{
Omar Al Khatib0cba93f2024-02-01 14:42:37 +0000995 validate(Accessor(_target), _reference, tolerance_qasymm8_signed);
Michele Di Giorgio13ec5f02020-01-02 12:11:13 +0000996}
997TEST_SUITE_END() // Dilation
998TEST_SUITE_END() // W3x3
Michele Di Giorgio8c837ca2020-01-07 15:06:41 +0000999
1000TEST_SUITE(Optimized)
Manuel Bottinica62c6f2021-03-23 11:50:34 +00001001FIXTURE_DATA_TEST_CASE_NEW(RunSmall3x3, NEDepthwiseConvolutionLayerQuantizedFixture<int8_t>, framework::DatasetMode::PRECOMMIT,
Omar Al Khatib0cba93f2024-02-01 14:42:37 +00001002 combine(datasets::SmallOptimizedDepthwiseConvolutionLayerDataset3x3(),
1003 make("DepthMultiplier", 1),
1004 make("DataType", DataType::QASYMM8_SIGNED),
1005 IgnoredQuantizationInfo,
1006 IgnoredQuantizationInfo,
1007 make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC }),
1008 NoActivation))
Michele Di Giorgio8c837ca2020-01-07 15:06:41 +00001009{
Omar Al Khatib0cba93f2024-02-01 14:42:37 +00001010 validate(Accessor(_target), _reference, tolerance_qasymm8_signed);
1011}
1012FIXTURE_DATA_TEST_CASE_NEW(RunSmall3x3WithActivation, NEDepthwiseConvolutionLayerQuantizedFixture<int8_t>, framework::DatasetMode::PRECOMMIT,
1013 combine(datasets::SmallOptimizedDepthwiseConvolutionLayerDataset3x3(),
1014 make("DepthMultiplier", 1),
1015 make("DataType", DataType::QASYMM8_SIGNED),
1016 input_qinfo_dataset,
1017 make("DstQuantizationInfo", { QuantizationInfo(0.5f, 10) }),
1018 make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC }),
1019 ActivationFunctionsQuantizedSmallDataset))
1020{
1021 validate(Accessor(_target), _reference, tolerance_qasymm8_signed);
Michele Di Giorgio8c837ca2020-01-07 15:06:41 +00001022}
Manuel Bottinica62c6f2021-03-23 11:50:34 +00001023FIXTURE_DATA_TEST_CASE_NEW(RunSmall5x5, NEDepthwiseConvolutionLayerQuantizedFixture<int8_t>, framework::DatasetMode::PRECOMMIT,
Omar Al Khatib0cba93f2024-02-01 14:42:37 +00001024 combine(datasets::SmallOptimizedDepthwiseConvolutionLayerDataset5x5(),
1025 make("DepthMultiplier", 1),
1026 make("DataType", DataType::QASYMM8_SIGNED),
1027 IgnoredQuantizationInfo,
1028 IgnoredQuantizationInfo,
1029 make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC }),
1030 NoActivation))
Michele Di Giorgio8c837ca2020-01-07 15:06:41 +00001031{
Omar Al Khatib0cba93f2024-02-01 14:42:37 +00001032 validate(Accessor(_target), _reference, tolerance_qasymm8_signed);
1033}
1034FIXTURE_DATA_TEST_CASE_NEW(RunSmall5x5WithActivation, NEDepthwiseConvolutionLayerQuantizedFixture<int8_t>, framework::DatasetMode::PRECOMMIT,
1035 combine(datasets::SmallOptimizedDepthwiseConvolutionLayerDataset5x5(),
1036 make("DepthMultiplier", 1),
1037 make("DataType", DataType::QASYMM8_SIGNED),
1038 input_qinfo_dataset,
1039 make("DstQuantizationInfo", { QuantizationInfo(0.5f, 10) }),
1040 make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC }),
1041 ActivationFunctionsQuantizedSmallDataset))
1042{
1043 validate(Accessor(_target), _reference, tolerance_qasymm8_signed);
Michele Di Giorgio8c837ca2020-01-07 15:06:41 +00001044}
Manuel Bottinica62c6f2021-03-23 11:50:34 +00001045FIXTURE_DATA_TEST_CASE_NEW(RunLarge3x3, NEDepthwiseConvolutionLayerQuantizedFixture<int8_t>, framework::DatasetMode::NIGHTLY,
Omar Al Khatib0cba93f2024-02-01 14:42:37 +00001046 combine(datasets::LargeOptimizedDepthwiseConvolutionLayerDataset3x3(),
1047 make("DepthMultiplier", 1),
1048 make("DataType", DataType::QASYMM8_SIGNED),
1049 IgnoredQuantizationInfo,
1050 IgnoredQuantizationInfo,
1051 make("DataLayout", { DataLayout::NCHW }),
1052 NoActivation))
Michele Di Giorgio8c837ca2020-01-07 15:06:41 +00001053{
Omar Al Khatib0cba93f2024-02-01 14:42:37 +00001054 validate(Accessor(_target), _reference, tolerance_qasymm8_signed);
Michele Di Giorgio8c837ca2020-01-07 15:06:41 +00001055}
1056TEST_SUITE_END() // Optimized
Michele Di Giorgio13ec5f02020-01-02 12:11:13 +00001057TEST_SUITE_END() // QASYMM8_SIGNED
1058
Giorgio Arenad93e2632019-10-15 11:09:33 +01001059TEST_SUITE(QSYMM8_PER_CHANNEL)
Gunes Bayir3af4c9b2023-10-08 17:51:28 +01001060
1061FIXTURE_DATA_TEST_CASE_NEW(RunActivations, NEDepthwiseConvolutionLayerQuantizedSymmetricPerChannelFixture, framework::DatasetMode::NIGHTLY,
1062 combine(
1063 make("In", TensorShape(33U, 27U, 11U, 3U)),
1064 make("Weights", Size2D(3U, 4U)),
1065 make("Info", PadStrideInfo(1, 2, 0, 1)),
1066 make("Dilation", Size2D(2U, 2U)),
1067 make("DepthMultiplier", { 5 }),
1068 make("InputDataType", DataType::QASYMM8),
1069 make("WeightsDataType", DataType::QSYMM8_PER_CHANNEL),
1070 make("SrcQuantizationInfo", { QuantizationInfo(0.3f, 10) }),
1071 make("DstQuantizationInfo", { QuantizationInfo(0.05f, 4) }),
1072 make("DataLayout", { DataLayout::NHWC, DataLayout::NCHW }),
1073 ActivationFunctionsQuantizedDataset))
1074{
1075 validate(Accessor(_target), _reference, tolerance_qasymm8);
1076}
1077
Giorgio Arenad93e2632019-10-15 11:09:33 +01001078TEST_SUITE(Generic)
Giorgio Arena68e29da2021-02-08 16:31:10 +00001079FIXTURE_DATA_TEST_CASE_NEW(RunSmall, NEDepthwiseConvolutionLayerQuantizedSymmetricPerChannelFixture, framework::DatasetMode::PRECOMMIT,
1080 combine(combine(combine(combine(combine(combine(combine(datasets::SmallDepthwiseConvolutionLayerDataset(),
1081 depth_multipliers),
Gunes Bayir3af4c9b2023-10-08 17:51:28 +01001082 make("InputDataType", DataType::QASYMM8)),
1083 make("WeightsDataType", DataType::QSYMM8_PER_CHANNEL)),
Giorgio Arena68e29da2021-02-08 16:31:10 +00001084 input_qinfo_dataset),
Gunes Bayir3af4c9b2023-10-08 17:51:28 +01001085 make("DstQuantizationInfo", { QuantizationInfo(0.5f, 4) })),
1086 make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })),
Giorgio Arena68e29da2021-02-08 16:31:10 +00001087 ActivationFunctionsDataset))
Giorgio Arenad93e2632019-10-15 11:09:33 +01001088{
1089 validate(Accessor(_target), _reference, tolerance_qasymm8);
1090}
1091
1092TEST_SUITE(Dilation)
Giorgio Arena68e29da2021-02-08 16:31:10 +00001093FIXTURE_DATA_TEST_CASE_NEW(RunSmall, NEDepthwiseConvolutionLayerQuantizedSymmetricPerChannelFixture, framework::DatasetMode::PRECOMMIT,
1094 combine(combine(combine(combine(combine(combine(combine(datasets::SmallDepthwiseDilatedConvolutionLayerDataset(),
1095 depth_multipliers),
Gunes Bayir3af4c9b2023-10-08 17:51:28 +01001096 make("InputDataType", DataType::QASYMM8)),
1097 make("WeightsDataType", DataType::QSYMM8_PER_CHANNEL)),
Giorgio Arena68e29da2021-02-08 16:31:10 +00001098 input_qinfo_dataset),
Gunes Bayir3af4c9b2023-10-08 17:51:28 +01001099 make("DstQuantizationInfo", { QuantizationInfo(0.5f, 4) })),
1100 make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })),
Giorgio Arena68e29da2021-02-08 16:31:10 +00001101 ActivationFunctionsDataset))
Giorgio Arenad93e2632019-10-15 11:09:33 +01001102{
1103 validate(Accessor(_target), _reference, tolerance_qasymm8);
1104}
Giorgio Arena68e29da2021-02-08 16:31:10 +00001105FIXTURE_DATA_TEST_CASE_NEW(RunLarge, NEDepthwiseConvolutionLayerQuantizedSymmetricPerChannelFixture, framework::DatasetMode::NIGHTLY,
1106 combine(combine(combine(combine(combine(combine(combine(datasets::LargeDepthwiseDilatedConvolutionLayerDataset(),
1107 depth_multipliers),
Gunes Bayir3af4c9b2023-10-08 17:51:28 +01001108 make("InputDataType", DataType::QASYMM8)),
1109 make("WeightsDataType", DataType::QSYMM8_PER_CHANNEL)),
Giorgio Arena68e29da2021-02-08 16:31:10 +00001110 input_qinfo_dataset),
Gunes Bayir3af4c9b2023-10-08 17:51:28 +01001111 make("DstQuantizationInfo", { QuantizationInfo(0.5f, 4) })),
1112 make("DataLayout", { DataLayout::NHWC })),
1113 make("ActivationInfo", { ActivationLayerInfo() })))
Giorgio Arenad93e2632019-10-15 11:09:33 +01001114{
1115 validate(Accessor(_target), _reference, tolerance_qasymm8);
1116}
1117TEST_SUITE_END() // Dilation
1118TEST_SUITE_END() // Generic
Giuseppe Rossinif01201a2019-11-06 14:57:49 +00001119
1120TEST_SUITE(Optimized)
Giorgio Arena68e29da2021-02-08 16:31:10 +00001121FIXTURE_DATA_TEST_CASE_NEW(RunSmall3x3, NEDepthwiseConvolutionLayerQuantizedSymmetricPerChannelFixture, framework::DatasetMode::PRECOMMIT,
1122 combine(combine(combine(combine(combine(combine(combine(datasets::SmallOptimizedDepthwiseConvolutionLayerDataset3x3(),
Gunes Bayir3af4c9b2023-10-08 17:51:28 +01001123 make("DepthMultiplier", 1)),
1124 make("InputDataType", DataType::QASYMM8)),
1125 make("WeightsDataType", DataType::QSYMM8_PER_CHANNEL)),
Giorgio Arena68e29da2021-02-08 16:31:10 +00001126 input_qinfo_dataset),
Gunes Bayir3af4c9b2023-10-08 17:51:28 +01001127 make("DstQuantizationInfo", { QuantizationInfo(0.5f, 4) })),
1128 make("DataLayout", { DataLayout::NHWC })),
Giorgio Arena68e29da2021-02-08 16:31:10 +00001129 ActivationFunctionsDataset))
Giuseppe Rossinif01201a2019-11-06 14:57:49 +00001130{
1131 validate(Accessor(_target), _reference, tolerance_qasymm8);
1132}
Giorgio Arena68e29da2021-02-08 16:31:10 +00001133FIXTURE_DATA_TEST_CASE_NEW(RunLarge3x3, NEDepthwiseConvolutionLayerQuantizedSymmetricPerChannelFixture, framework::DatasetMode::NIGHTLY,
1134 combine(combine(combine(combine(combine(combine(combine(datasets::LargeOptimizedDepthwiseConvolutionLayerDataset3x3(),
Gunes Bayir3af4c9b2023-10-08 17:51:28 +01001135 make("DepthMultiplier", 1)),
1136 make("InputDataType", DataType::QASYMM8)),
1137 make("WeightsDataType", DataType::QSYMM8_PER_CHANNEL)),
Giorgio Arena68e29da2021-02-08 16:31:10 +00001138 input_qinfo_dataset),
Gunes Bayir3af4c9b2023-10-08 17:51:28 +01001139 make("DstQuantizationInfo", { QuantizationInfo(0.5f, 4) })),
1140 make("DataLayout", { DataLayout::NHWC })),
1141 make("ActivationInfo", { ActivationLayerInfo() })))
Giuseppe Rossinif01201a2019-11-06 14:57:49 +00001142{
1143 validate(Accessor(_target), _reference, tolerance_qasymm8);
1144}
1145TEST_SUITE_END() // Optimized
Giorgio Arenad93e2632019-10-15 11:09:33 +01001146TEST_SUITE_END() // QSYMM8_PER_CHANNEL
Michalis Spyrouaeebe4a2019-01-09 14:21:03 +00001147TEST_SUITE_END() // Quantized
Georgios Pinitasf72f9362018-01-12 16:29:45 +00001148
Michalis Spyrouaeebe4a2019-01-09 14:21:03 +00001149TEST_SUITE_END() // DepthwiseConvLayer
Sheri Zhangac6499a2021-02-10 15:32:38 +00001150TEST_SUITE_END() // Neon
Michalis Spyrou7362f0d2017-10-18 17:58:22 +01001151} // namespace validation
1152} // namespace test
1153} // namespace arm_compute