blob: 6ac37d14755ef00475de652d00e0cd40689b6364 [file] [log] [blame]
Giorgio Arena1f9ca1d2018-03-01 11:13:45 +00001/*
Manuel Bottini35981ca2021-02-09 16:34:54 +00002 * Copyright (c) 2018-2021 Arm Limited.
Giorgio Arena1f9ca1d2018-03-01 11:13:45 +00003 *
4 * SPDX-License-Identifier: MIT
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a copy
7 * of this software and associated documentation files (the "Software"), to
8 * deal in the Software without restriction, including without limitation the
9 * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
10 * sell copies of the Software, and to permit persons to whom the Software is
11 * furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be included in all
14 * copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
Gian Marco Iodice7e4b2392018-02-22 16:17:20 +000021 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
Giorgio Arena1f9ca1d2018-03-01 11:13:45 +000022 * SOFTWARE.
23 */
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +010024#include "arm_compute/core/Helpers.h"
Giorgio Arena1f9ca1d2018-03-01 11:13:45 +000025#include "arm_compute/core/Types.h"
26#include "arm_compute/core/utils/misc/ShapeCalculator.h"
27#include "arm_compute/runtime/CL/CLTensor.h"
28#include "arm_compute/runtime/CL/CLTensorAllocator.h"
Gian Marco Iodiced2fab732018-03-02 11:18:12 +000029#include "arm_compute/runtime/CL/functions/CLWinogradConvolutionLayer.h"
Giorgio Arena1f9ca1d2018-03-01 11:13:45 +000030#include "tests/CL/CLAccessor.h"
Gian Marco Iodice7e4b2392018-02-22 16:17:20 +000031#include "tests/CL/Helper.h"
32#include "tests/PaddingCalculator.h"
Gian Marco Iodiced2fab732018-03-02 11:18:12 +000033#include "tests/datasets/LargeConvolutionLayerDataset.h"
Gian Marco Iodice7e4b2392018-02-22 16:17:20 +000034#include "tests/datasets/ShapeDatasets.h"
Gian Marco Iodiced2fab732018-03-02 11:18:12 +000035#include "tests/datasets/SmallConvolutionLayerDataset.h"
Giorgio Arena1f9ca1d2018-03-01 11:13:45 +000036#include "tests/datasets/WinogradInputTransformDataset.h"
Gian Marco Iodiced2fab732018-03-02 11:18:12 +000037#include "tests/datasets/WinogradOutputTransformDataset.h"
Giorgio Arena1f9ca1d2018-03-01 11:13:45 +000038#include "tests/framework/Asserts.h"
39#include "tests/framework/Macros.h"
40#include "tests/framework/datasets/Datasets.h"
41#include "tests/validation/Validation.h"
Georgios Pinitas9fb11592018-04-26 20:34:58 +010042#include "tests/validation/fixtures/WinogradConvolutionLayerFixture.h"
Giorgio Arena1f9ca1d2018-03-01 11:13:45 +000043
44namespace arm_compute
45{
46namespace test
47{
48namespace validation
49{
Gian Marco Iodice7e4b2392018-02-22 16:17:20 +000050namespace
51{
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +010052// *INDENT-OFF*
53// clang-format off
Manuel Bottini35981ca2021-02-09 16:34:54 +000054const AbsoluteTolerance<half> tolerance_f16(half(1.f));
Gian Marco Iodice4497e812018-05-08 16:36:52 +010055constexpr AbsoluteTolerance<float> tolerance_convolution_layer_f32(0.1f);
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +010056const AbsoluteTolerance<half> tolerance_convolution_layer_f16(half(0.4f));
Vidhya Sudhan Loganathana25d16c2018-11-16 11:33:12 +000057RelativeTolerance<half_float::half> rel_tolerance_f16(half(0.2)); /**< Tolerance value for comparing reference's output against implementation's output for FP16 data types */
58constexpr float tolerance_num = 0.05f; /**< Tolerance number */
59constexpr float abs_tolerance_convolution_layer_f16 = 2.5f; /**< Tolerance number */
Pablo Tellof1cf3942019-09-19 16:39:04 +010060constexpr float tolerance_num_f16 = 0.15f; /**< Tolerance number */
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +010061
Manuel Bottini0d0028c2018-10-02 16:41:52 +010062//Activation Functions
63const auto ActivationFunctionsDataset = framework::dataset::make("ActivationInfo",
64{
65 ActivationLayerInfo(),
66 ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::RELU),
67 ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::BOUNDED_RELU),
68 ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::LU_BOUNDED_RELU),
Georgios Pinitas9d6a31c2019-02-25 14:33:25 +000069 ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::LEAKY_RELU)
Manuel Bottini0d0028c2018-10-02 16:41:52 +010070});
Michalis Spyrou80943252019-01-10 17:19:50 +000071const auto ActivationFunctionsSmallDataset = framework::dataset::make("ActivationInfo",
72{
73 ActivationLayerInfo(),
74 ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::LU_BOUNDED_RELU),
Georgios Pinitas9d6a31c2019-02-25 14:33:25 +000075 ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::LEAKY_RELU),
76 ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::SOFT_RELU)
Michalis Spyrou80943252019-01-10 17:19:50 +000077});
Gian Marco Iodicebc6c3742020-10-19 12:49:44 +010078
Gian Marco Iodice7e4b2392018-02-22 16:17:20 +000079} // namespace
80
81using namespace arm_compute::misc::shape_calculator;
82
Giorgio Arena1f9ca1d2018-03-01 11:13:45 +000083TEST_SUITE(CL)
84TEST_SUITE(Winograd)
85
Gian Marco Iodiced2fab732018-03-02 11:18:12 +000086TEST_SUITE(ConvolutionLayer)
Gian Marco Iodiced2fab732018-03-02 11:18:12 +000087DATA_TEST_CASE(Validate, framework::DatasetMode::ALL, zip(zip(zip(zip(zip(
88 framework::dataset::make("InputInfo", {
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +010089 TensorInfo(TensorShape(17U, 31U, 2U), 1, DataType::F16), // Insufficient padding
Gian Marco Iodiced2fab732018-03-02 11:18:12 +000090 TensorInfo(TensorShape(17U, 31U, 2U), 1, DataType::F32), // Datatype mismatch
91 TensorInfo(TensorShape(23U, 27U, 5U, 4U), 1, DataType::F32), // Stride y not supported
92 TensorInfo(TensorShape(16U, 16U, 8U), 1, DataType::F32), // Padding needed
93 TensorInfo(TensorShape(33U, 27U, 7U, 4U), 1, DataType::F32) // Kernel size not supported
94 }),
95 framework::dataset::make("WeightsInfo", {
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +010096 TensorInfo(TensorShape(3U, 3U, 2U, 19U), 1, DataType::F16),
Gian Marco Iodiced2fab732018-03-02 11:18:12 +000097 TensorInfo(TensorShape(3U, 3U, 2U, 19U), 1, DataType::QASYMM8),
98 TensorInfo(TensorShape(3U, 3U, 5U, 21U), 1, DataType::F32),
99 TensorInfo(TensorShape(3U, 3U, 8U, 16U), 1, DataType::F32),
100 TensorInfo(TensorShape(5U, 5U, 7U, 16U), 1, DataType::F16)
101 })),
102 framework::dataset::make("BiasesInfo", {
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100103 TensorInfo(TensorShape(19U), 1, DataType::F16),
Gian Marco Iodiced2fab732018-03-02 11:18:12 +0000104 TensorInfo(TensorShape(19U), 1, DataType::F32),
105 TensorInfo(TensorShape(21U), 1, DataType::F32),
106 TensorInfo(TensorShape(16U), 1, DataType::F32),
107 TensorInfo(TensorShape(16U), 1, DataType::F32)
108 })),
109 framework::dataset::make("OutputInfo", {
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100110 TensorInfo(TensorShape(17U, 31U, 19U), 1, DataType::F16),
Gian Marco Iodiced2fab732018-03-02 11:18:12 +0000111 TensorInfo(TensorShape(15U, 15U, 19U), 1, DataType::F32),
112 TensorInfo(TensorShape(21U, 25U, 21U, 4U), 1, DataType::F32),
113 TensorInfo(TensorShape(16U, 16U, 16U), 1, DataType::F32),
114 TensorInfo(TensorShape(11U, 12U, 16U, 4U), 1, DataType::F32)
115 })),
116 framework::dataset::make("ConvInfo", {
117 PadStrideInfo(1, 1, 1, 1),
118 PadStrideInfo(1, 1, 1, 1),
119 PadStrideInfo(1, 2, 0, 0),
120 PadStrideInfo(1, 1, 1, 1),
121 PadStrideInfo(1, 1, 1, 0)
122 })),
123 framework::dataset::make("Expected", { false, false, false, false, false })),
124 input_info, weights_info, bias_info, output_info, conv_info, expected)
125{
126 ARM_COMPUTE_EXPECT(bool(CLWinogradConvolutionLayer::validate(&input_info.clone()->set_is_resizable(false), &weights_info.clone()->set_is_resizable(false), &bias_info.clone()->set_is_resizable(false), &output_info.clone()->set_is_resizable(false), conv_info)) == expected, framework::LogLevel::ERRORS);
127}
Gian Marco Iodiced2fab732018-03-02 11:18:12 +0000128
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100129TEST_SUITE(FP32)
Gian Marco Iodice2213d4b2018-04-27 10:39:06 +0100130using CLWinogradConvolutionLayerFastMathFixture = WinogradConvolutionLayerFastMathValidationFixture<CLTensor, CLAccessor, CLWinogradConvolutionLayer, float>;
Manuel Bottinica62c6f2021-03-23 11:50:34 +0000131using CLWinogradConvolutionLayerFastMathMixedDataLayoutFixture = WinogradConvolutionLayerFastMathValidationFixture<CLTensor, CLAccessor, CLWinogradConvolutionLayer, float, float, true, true>;
Gian Marco Iodice6cf188c2018-05-04 16:36:50 +0100132TEST_SUITE(Conv3x3)
Gian Marco Iodice2213d4b2018-04-27 10:39:06 +0100133FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradConvolutionLayerFastMathFixture, framework::DatasetMode::PRECOMMIT,
Pablo Tello7282d562018-06-14 15:35:49 +0100134 combine(combine(combine(datasets::SmallWinogradConvolutionLayer3x3Dataset(),
135 framework::dataset::make("DataType", { DataType::F32 })),
Michalis Spyrou80943252019-01-10 17:19:50 +0000136 ActivationFunctionsSmallDataset),
Giorgio Arenaea55f912018-07-12 15:41:35 +0100137 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
Gian Marco Iodice2213d4b2018-04-27 10:39:06 +0100138{
139 // Validate output
Gian Marco Iodice4497e812018-05-08 16:36:52 +0100140 validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f32);
Gian Marco Iodice2213d4b2018-04-27 10:39:06 +0100141}
Manuel Bottinica62c6f2021-03-23 11:50:34 +0000142FIXTURE_DATA_TEST_CASE(RunMixedDataLayout, CLWinogradConvolutionLayerFastMathMixedDataLayoutFixture, framework::DatasetMode::PRECOMMIT,
143 combine(combine(combine(combine(combine(combine(combine(combine(
144 framework::dataset::make("Input", TensorShape(8U, 8U, 32U)),
145 framework::dataset::make("Weight", TensorShape(1U, 3U, 32U, 1U))),
146 framework::dataset::make("Bias", TensorShape(1U))),
147 framework::dataset::make("Output", TensorShape(8U, 6U, 1U))),
148 framework::dataset::make("PadStrideInfo", PadStrideInfo(1, 1, 0, 0))),
149 framework::dataset::make("Dilation", Size2D(1U, 1U))),
150 framework::dataset::make("DataType", { DataType::F32 })),
151 ActivationFunctionsSmallDataset),
152 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
153{
154 // Validate output
155 validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f32);
156}
Gian Marco Iodice2213d4b2018-04-27 10:39:06 +0100157FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradConvolutionLayerFastMathFixture, framework::DatasetMode::NIGHTLY,
Pablo Tello7282d562018-06-14 15:35:49 +0100158 combine(combine(combine(datasets::LargeWinogradConvolutionLayer3x3Dataset(),
159 framework::dataset::make("DataType", { DataType::F32 })),
Manuel Bottini0d0028c2018-10-02 16:41:52 +0100160 ActivationFunctionsDataset),
Giorgio Arenaea55f912018-07-12 15:41:35 +0100161 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
Gian Marco Iodice2213d4b2018-04-27 10:39:06 +0100162{
163 // Validate output
Gian Marco Iodice4497e812018-05-08 16:36:52 +0100164 validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f32);
Gian Marco Iodice2213d4b2018-04-27 10:39:06 +0100165}
Gian Marco Iodice6cf188c2018-05-04 16:36:50 +0100166TEST_SUITE_END() // Conv3x3
167
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100168TEST_SUITE(Conv3x1)
169FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradConvolutionLayerFastMathFixture, framework::DatasetMode::PRECOMMIT,
170 combine(combine(combine(datasets::SmallWinogradConvolutionLayer3x1Dataset(),
171 framework::dataset::make("DataType", { DataType::F32 })),
Michalis Spyrou80943252019-01-10 17:19:50 +0000172 ActivationFunctionsSmallDataset),
Giorgio Arenaea55f912018-07-12 15:41:35 +0100173 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100174{
175 // Validate output
176 validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f32);
177}
178
179FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradConvolutionLayerFastMathFixture, framework::DatasetMode::NIGHTLY,
180 combine(combine(combine(datasets::LargeWinogradConvolutionLayer3x1Dataset(),
181 framework::dataset::make("DataType", { DataType::F32 })),
Manuel Bottini0d0028c2018-10-02 16:41:52 +0100182 ActivationFunctionsDataset),
Giorgio Arenaea55f912018-07-12 15:41:35 +0100183 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100184{
185 // Validate output
186 validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f32);
187}
188TEST_SUITE_END() // Conv3x1
189
190TEST_SUITE(Conv1x3)
191FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradConvolutionLayerFastMathFixture, framework::DatasetMode::PRECOMMIT,
192 combine(combine(combine(datasets::SmallWinogradConvolutionLayer1x3Dataset(),
193 framework::dataset::make("DataType", { DataType::F32 })),
Michalis Spyrou80943252019-01-10 17:19:50 +0000194 ActivationFunctionsSmallDataset),
Giorgio Arenaea55f912018-07-12 15:41:35 +0100195 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100196{
197 // Validate output
198 validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f32);
199}
200
201FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradConvolutionLayerFastMathFixture, framework::DatasetMode::NIGHTLY,
202 combine(combine(combine(datasets::LargeWinogradConvolutionLayer1x3Dataset(),
203 framework::dataset::make("DataType", { DataType::F32 })),
Manuel Bottini0d0028c2018-10-02 16:41:52 +0100204 ActivationFunctionsDataset),
Giorgio Arenaea55f912018-07-12 15:41:35 +0100205 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100206{
207 // Validate output
208 validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f32);
209}
210TEST_SUITE_END() // Conv1x3
211
Gian Marco Iodice6cf188c2018-05-04 16:36:50 +0100212TEST_SUITE(Conv5x5)
213FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradConvolutionLayerFastMathFixture, framework::DatasetMode::PRECOMMIT,
Pablo Tello7282d562018-06-14 15:35:49 +0100214 combine(combine(combine(datasets::SmallWinogradConvolutionLayer5x5Dataset(),
215 framework::dataset::make("DataType", { DataType::F32 })),
Michalis Spyrou80943252019-01-10 17:19:50 +0000216 ActivationFunctionsSmallDataset ),
Giorgio Arenaea55f912018-07-12 15:41:35 +0100217 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
Pablo Tello7282d562018-06-14 15:35:49 +0100218
Gian Marco Iodice6cf188c2018-05-04 16:36:50 +0100219{
220 // Validate output
Gian Marco Iodice4497e812018-05-08 16:36:52 +0100221 validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f32);
Gian Marco Iodice6cf188c2018-05-04 16:36:50 +0100222}
223
224FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradConvolutionLayerFastMathFixture, framework::DatasetMode::NIGHTLY,
Pablo Tello7282d562018-06-14 15:35:49 +0100225 combine(combine(combine(datasets::LargeWinogradConvolutionLayer5x5Dataset(),
226 framework::dataset::make("DataType", { DataType::F32 })),
Manuel Bottini0d0028c2018-10-02 16:41:52 +0100227 ActivationFunctionsDataset ),
Giorgio Arenaea55f912018-07-12 15:41:35 +0100228 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
Pablo Tello7282d562018-06-14 15:35:49 +0100229
Gian Marco Iodice6cf188c2018-05-04 16:36:50 +0100230{
231 // Validate output
Gian Marco Iodice4497e812018-05-08 16:36:52 +0100232 validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f32);
Gian Marco Iodice6cf188c2018-05-04 16:36:50 +0100233}
234TEST_SUITE_END() // Conv5x5
Gian Marco Iodice2213d4b2018-04-27 10:39:06 +0100235
Gian Marco Iodice876be2a2018-07-03 12:22:09 +0100236TEST_SUITE(Conv5x1)
237FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradConvolutionLayerFastMathFixture, framework::DatasetMode::PRECOMMIT,
238 combine(combine(combine(datasets::SmallWinogradConvolutionLayer5x1Dataset(),
239 framework::dataset::make("DataType", { DataType::F32 })),
Michalis Spyrou80943252019-01-10 17:19:50 +0000240 ActivationFunctionsSmallDataset),
Giorgio Arenaea55f912018-07-12 15:41:35 +0100241 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
Gian Marco Iodice876be2a2018-07-03 12:22:09 +0100242
243{
244 // Validate output
245 validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f32);
246}
247
248FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradConvolutionLayerFastMathFixture, framework::DatasetMode::NIGHTLY,
249 combine(combine(combine(datasets::LargeWinogradConvolutionLayer5x1Dataset(),
250 framework::dataset::make("DataType", { DataType::F32 })),
Manuel Bottini0d0028c2018-10-02 16:41:52 +0100251 ActivationFunctionsDataset),
Giorgio Arenaea55f912018-07-12 15:41:35 +0100252 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
Gian Marco Iodice876be2a2018-07-03 12:22:09 +0100253
254{
255 // Validate output
256 validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f32);
257}
258TEST_SUITE_END() // Conv5x1
259
260TEST_SUITE(Conv1x5)
261FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradConvolutionLayerFastMathFixture, framework::DatasetMode::PRECOMMIT,
262 combine(combine(combine(datasets::SmallWinogradConvolutionLayer1x5Dataset(),
263 framework::dataset::make("DataType", { DataType::F32 })),
Michalis Spyrou80943252019-01-10 17:19:50 +0000264 ActivationFunctionsSmallDataset),
Giorgio Arenaea55f912018-07-12 15:41:35 +0100265 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
Gian Marco Iodice876be2a2018-07-03 12:22:09 +0100266
267{
268 // Validate output
269 validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f32);
270}
271
272FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradConvolutionLayerFastMathFixture, framework::DatasetMode::NIGHTLY,
273 combine(combine(combine(datasets::LargeWinogradConvolutionLayer1x5Dataset(),
274 framework::dataset::make("DataType", { DataType::F32 })),
Manuel Bottini0d0028c2018-10-02 16:41:52 +0100275 ActivationFunctionsDataset),
Giorgio Arenaea55f912018-07-12 15:41:35 +0100276 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
Gian Marco Iodice876be2a2018-07-03 12:22:09 +0100277
278{
279 // Validate output
280 validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f32);
281}
282TEST_SUITE_END() // Conv1x5
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100283TEST_SUITE_END() // FP32
284
Vidhya Sudhan Loganathana25d16c2018-11-16 11:33:12 +0000285
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100286TEST_SUITE(FP16)
287
Vidhya Sudhan Loganathana25d16c2018-11-16 11:33:12 +0000288using CLWinogradConvolutionLayerFastMathFixture16 = WinogradConvolutionLayerFastMathValidationFixture<CLTensor, CLAccessor, CLWinogradConvolutionLayer, half, float>;
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100289TEST_SUITE(Conv3x3)
290FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradConvolutionLayerFastMathFixture16, framework::DatasetMode::PRECOMMIT,
291 combine(combine(combine(datasets::SmallWinogradConvolutionLayer3x3Dataset(),
292 framework::dataset::make("DataType", { DataType::F16 })),
Michalis Spyrou80943252019-01-10 17:19:50 +0000293 ActivationFunctionsSmallDataset),
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100294 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
295{
296 // Validate output
Pablo Tellof1cf3942019-09-19 16:39:04 +0100297 validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f16, tolerance_num_f16);
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100298}
299
300FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradConvolutionLayerFastMathFixture16, framework::DatasetMode::NIGHTLY,
301 combine(combine(combine(datasets::LargeWinogradConvolutionLayer3x3Dataset(),
302 framework::dataset::make("DataType", { DataType::F16 })),
Manuel Bottini0d0028c2018-10-02 16:41:52 +0100303 ActivationFunctionsDataset),
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100304 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
305{
306 // Validate output
Vidhya Sudhan Loganathana25d16c2018-11-16 11:33:12 +0000307 validate(CLAccessor(_target), _reference, rel_tolerance_f16, tolerance_num, abs_tolerance_convolution_layer_f16);
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100308}
309TEST_SUITE_END() // Conv3x3
310
311TEST_SUITE(Conv3x1)
312FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradConvolutionLayerFastMathFixture16, framework::DatasetMode::PRECOMMIT,
313 combine(combine(combine(datasets::SmallWinogradConvolutionLayer3x1Dataset(),
314 framework::dataset::make("DataType", { DataType::F16 })),
Michalis Spyrou80943252019-01-10 17:19:50 +0000315 ActivationFunctionsSmallDataset),
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100316 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
317{
318 // Validate output
Pablo Tellof1cf3942019-09-19 16:39:04 +0100319 validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f16, tolerance_num_f16);
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100320}
321
322FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradConvolutionLayerFastMathFixture16, framework::DatasetMode::NIGHTLY,
323 combine(combine(combine(datasets::LargeWinogradConvolutionLayer3x1Dataset(),
324 framework::dataset::make("DataType", { DataType::F16 })),
Manuel Bottini0d0028c2018-10-02 16:41:52 +0100325 ActivationFunctionsDataset),
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100326 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
327{
328 // Validate output
Vidhya Sudhan Loganathana25d16c2018-11-16 11:33:12 +0000329 validate(CLAccessor(_target), _reference, rel_tolerance_f16, tolerance_num, abs_tolerance_convolution_layer_f16);
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100330}
331TEST_SUITE_END() // Conv3x1
332
333TEST_SUITE(Conv1x3)
334FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradConvolutionLayerFastMathFixture16, framework::DatasetMode::PRECOMMIT,
335 combine(combine(combine(datasets::SmallWinogradConvolutionLayer1x3Dataset(),
336 framework::dataset::make("DataType", { DataType::F16 })),
Michalis Spyrou80943252019-01-10 17:19:50 +0000337 ActivationFunctionsSmallDataset),
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100338 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
339{
340 // Validate output
Pablo Tellof1cf3942019-09-19 16:39:04 +0100341 validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f16, tolerance_num_f16);
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100342}
343
344FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradConvolutionLayerFastMathFixture16, framework::DatasetMode::NIGHTLY,
345 combine(combine(combine(datasets::LargeWinogradConvolutionLayer1x3Dataset(),
346 framework::dataset::make("DataType", { DataType::F16 })),
Manuel Bottini0d0028c2018-10-02 16:41:52 +0100347 ActivationFunctionsDataset),
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100348 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
349{
350 // Validate output
Vidhya Sudhan Loganathana25d16c2018-11-16 11:33:12 +0000351 validate(CLAccessor(_target), _reference, rel_tolerance_f16, tolerance_num, abs_tolerance_convolution_layer_f16);
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100352}
353TEST_SUITE_END() // Conv1x3
354
355TEST_SUITE(Conv5x5)
356FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradConvolutionLayerFastMathFixture16, framework::DatasetMode::PRECOMMIT,
357 combine(combine(combine(datasets::SmallWinogradConvolutionLayer5x5Dataset(),
358 framework::dataset::make("DataType", { DataType::F16 })),
Michalis Spyrou80943252019-01-10 17:19:50 +0000359 ActivationFunctionsSmallDataset),
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100360 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
361
362{
363 // Validate output
Pablo Tellof1cf3942019-09-19 16:39:04 +0100364 validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f16, tolerance_num_f16);
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100365}
366
367FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradConvolutionLayerFastMathFixture16, framework::DatasetMode::NIGHTLY,
368 combine(combine(combine(datasets::LargeWinogradConvolutionLayer5x5Dataset(),
369 framework::dataset::make("DataType", { DataType::F16 })),
Manuel Bottini0d0028c2018-10-02 16:41:52 +0100370 ActivationFunctionsDataset),
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100371 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
372
373{
374 // Validate output
Vidhya Sudhan Loganathana25d16c2018-11-16 11:33:12 +0000375 validate(CLAccessor(_target), _reference, rel_tolerance_f16, tolerance_num, abs_tolerance_convolution_layer_f16);
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100376}
377TEST_SUITE_END() // Conv5x5
378
379TEST_SUITE(Conv5x1)
380FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradConvolutionLayerFastMathFixture16, framework::DatasetMode::PRECOMMIT,
381 combine(combine(combine(datasets::SmallWinogradConvolutionLayer5x1Dataset(),
382 framework::dataset::make("DataType", { DataType::F16 })),
Michalis Spyrou80943252019-01-10 17:19:50 +0000383 ActivationFunctionsSmallDataset),
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100384 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
385
386{
387 // Validate output
Pablo Tellof1cf3942019-09-19 16:39:04 +0100388 validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f16, tolerance_num_f16);
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100389}
390
391FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradConvolutionLayerFastMathFixture16, framework::DatasetMode::NIGHTLY,
392 combine(combine(combine(datasets::LargeWinogradConvolutionLayer5x1Dataset(),
393 framework::dataset::make("DataType", { DataType::F16 })),
Manuel Bottini0d0028c2018-10-02 16:41:52 +0100394 ActivationFunctionsDataset),
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100395 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
396
397{
398 // Validate output
Vidhya Sudhan Loganathana25d16c2018-11-16 11:33:12 +0000399 validate(CLAccessor(_target), _reference, rel_tolerance_f16, tolerance_num, abs_tolerance_convolution_layer_f16);
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100400}
401TEST_SUITE_END() // Conv5x1
402
403TEST_SUITE(Conv1x5)
404FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradConvolutionLayerFastMathFixture16, framework::DatasetMode::PRECOMMIT,
405 combine(combine(combine(datasets::SmallWinogradConvolutionLayer1x5Dataset(),
406 framework::dataset::make("DataType", { DataType::F16 })),
Michalis Spyrou80943252019-01-10 17:19:50 +0000407 ActivationFunctionsSmallDataset),
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100408 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
409
410{
411 // Validate output
Pablo Tellof1cf3942019-09-19 16:39:04 +0100412 validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f16, tolerance_num_f16);
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100413}
414
415FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradConvolutionLayerFastMathFixture16, framework::DatasetMode::NIGHTLY,
416 combine(combine(combine(datasets::LargeWinogradConvolutionLayer1x5Dataset(),
417 framework::dataset::make("DataType", { DataType::F16 })),
Manuel Bottini0d0028c2018-10-02 16:41:52 +0100418 ActivationFunctionsDataset),
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100419 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
420
421{
422 // Validate output
Vidhya Sudhan Loganathana25d16c2018-11-16 11:33:12 +0000423 validate(CLAccessor(_target), _reference, rel_tolerance_f16, tolerance_num, abs_tolerance_convolution_layer_f16);
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100424}
425TEST_SUITE_END() // Conv1x5
426
Pablo Tellof1cf3942019-09-19 16:39:04 +0100427TEST_SUITE(Conv1x7)
428FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradConvolutionLayerFastMathFixture16, framework::DatasetMode::PRECOMMIT,
429 combine(combine(combine(datasets::SmallWinogradConvolutionLayer1x7Dataset(),
430 framework::dataset::make("DataType", { DataType::F16 })),
431 ActivationFunctionsSmallDataset),
432 framework::dataset::make("DataLayout", { DataLayout::NHWC })))
433
434{
435 // Validate output
436 validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f16, tolerance_num_f16);
437}
438
439FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradConvolutionLayerFastMathFixture16, framework::DatasetMode::NIGHTLY,
440 combine(combine(combine(datasets::LargeWinogradConvolutionLayer1x7Dataset(),
441 framework::dataset::make("DataType", { DataType::F16 })),
442 ActivationFunctionsDataset),
443 framework::dataset::make("DataLayout", { DataLayout::NHWC })))
444
445{
446 // Validate output
447 validate(CLAccessor(_target), _reference, rel_tolerance_f16, tolerance_num, abs_tolerance_convolution_layer_f16);
448}
449TEST_SUITE_END() // Conv1x7
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100450TEST_SUITE_END() // FP16
Gian Marco Iodiced2fab732018-03-02 11:18:12 +0000451TEST_SUITE_END() // ConvolutionLayer
Gian Marco Iodice7e4b2392018-02-22 16:17:20 +0000452TEST_SUITE_END() // Winograd
453TEST_SUITE_END() // CL
Giorgio Arena1f9ca1d2018-03-01 11:13:45 +0000454} // namespace validation
455} // namespace test
456} // namespace arm_compute