blob: e744473b3443198360515583a2b2a4cb4c99bf00 [file] [log] [blame]
Giorgio Arena1f9ca1d2018-03-01 11:13:45 +00001/*
Michalis Spyrou80943252019-01-10 17:19:50 +00002 * Copyright (c) 2018-2019 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 Iodice7e4b2392018-02-22 16:17:20 +000024#include "arm_compute/core/CL/kernels/CLWinogradFilterTransformKernel.h"
Gian Marco Iodiced2fab732018-03-02 11:18:12 +000025#include "arm_compute/core/CL/kernels/CLWinogradOutputTransformKernel.h"
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +010026#include "arm_compute/core/Helpers.h"
Giorgio Arena1f9ca1d2018-03-01 11:13:45 +000027#include "arm_compute/core/Types.h"
28#include "arm_compute/core/utils/misc/ShapeCalculator.h"
29#include "arm_compute/runtime/CL/CLTensor.h"
30#include "arm_compute/runtime/CL/CLTensorAllocator.h"
Gian Marco Iodiced2fab732018-03-02 11:18:12 +000031#include "arm_compute/runtime/CL/functions/CLWinogradConvolutionLayer.h"
Giorgio Arena1f9ca1d2018-03-01 11:13:45 +000032#include "arm_compute/runtime/CL/functions/CLWinogradInputTransform.h"
33#include "tests/CL/CLAccessor.h"
Gian Marco Iodice7e4b2392018-02-22 16:17:20 +000034#include "tests/CL/Helper.h"
35#include "tests/PaddingCalculator.h"
Gian Marco Iodiced2fab732018-03-02 11:18:12 +000036#include "tests/datasets/LargeConvolutionLayerDataset.h"
Gian Marco Iodice7e4b2392018-02-22 16:17:20 +000037#include "tests/datasets/ShapeDatasets.h"
Gian Marco Iodiced2fab732018-03-02 11:18:12 +000038#include "tests/datasets/SmallConvolutionLayerDataset.h"
Giorgio Arena1f9ca1d2018-03-01 11:13:45 +000039#include "tests/datasets/WinogradInputTransformDataset.h"
Gian Marco Iodiced2fab732018-03-02 11:18:12 +000040#include "tests/datasets/WinogradOutputTransformDataset.h"
Giorgio Arena1f9ca1d2018-03-01 11:13:45 +000041#include "tests/framework/Asserts.h"
42#include "tests/framework/Macros.h"
43#include "tests/framework/datasets/Datasets.h"
44#include "tests/validation/Validation.h"
Georgios Pinitas9fb11592018-04-26 20:34:58 +010045#include "tests/validation/fixtures/WinogradConvolutionLayerFixture.h"
Giorgio Arena1f9ca1d2018-03-01 11:13:45 +000046
47namespace arm_compute
48{
49namespace test
50{
51namespace validation
52{
Gian Marco Iodice7e4b2392018-02-22 16:17:20 +000053namespace
54{
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +010055// *INDENT-OFF*
56// clang-format off
Gian Marco Iodice6cf188c2018-05-04 16:36:50 +010057constexpr AbsoluteTolerance<float> tolerance_f32(0.001f);
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +010058const AbsoluteTolerance<half> tolerance_f16(half(0.5f));
Gian Marco Iodice4497e812018-05-08 16:36:52 +010059constexpr AbsoluteTolerance<float> tolerance_convolution_layer_f32(0.1f);
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +010060const AbsoluteTolerance<half> tolerance_convolution_layer_f16(half(0.4f));
Vidhya Sudhan Loganathana25d16c2018-11-16 11:33:12 +000061RelativeTolerance<half_float::half> rel_tolerance_f16(half(0.2)); /**< Tolerance value for comparing reference's output against implementation's output for FP16 data types */
62constexpr float tolerance_num = 0.05f; /**< Tolerance number */
63constexpr float abs_tolerance_convolution_layer_f16 = 2.5f; /**< Tolerance number */
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +010064
65// Input transform
66const auto SmallWinogradInputTransformDatasetNCHW =
67 framework::dataset::concat(datasets::SmallWinogradInputTransformDataset2x2_3x3(),
68 framework::dataset::concat(datasets::SmallWinogradInputTransformDataset2x1_3x1(),
69 framework::dataset::concat(datasets::SmallWinogradInputTransformDataset1x2_1x3(),
70 framework::dataset::concat(datasets::SmallWinogradInputTransformDataset4x4_3x3(),
71 framework::dataset::concat(datasets::SmallWinogradInputTransformDataset4x1_3x1(),
72 framework::dataset::concat(datasets::SmallWinogradInputTransformDataset1x4_1x3(),
Gian Marco Iodice876be2a2018-07-03 12:22:09 +010073 framework::dataset::concat(datasets::SmallWinogradInputTransformDataset4x4_5x5(),
74 framework::dataset::concat(datasets::SmallWinogradInputTransformDataset4x1_5x1(),
75 datasets::SmallWinogradInputTransformDataset1x4_1x5()))))))));
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +010076
77const auto SmallWinogradInputTransformDatasetNHWC = framework::dataset::concat(datasets::SmallWinogradInputTransformDataset4x4_3x3(),
Giorgio Arena149fdf32018-07-04 17:03:33 +010078 framework::dataset::concat(datasets::SmallWinogradInputTransformDataset4x1_3x1(),
79 framework::dataset::concat(datasets::SmallWinogradInputTransformDataset1x4_1x3(),
Gian Marco Iodiced28b7512018-07-06 12:59:28 +010080 framework::dataset::concat(datasets::SmallWinogradInputTransformDataset4x4_5x5(),
81 framework::dataset::concat(datasets::SmallWinogradInputTransformDataset4x1_5x1(),
82 datasets::SmallWinogradInputTransformDataset1x4_1x5())))));
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +010083
84const auto LargeWinogradInputTransformDatasetNCHW =
85 framework::dataset::concat(datasets::LargeWinogradInputTransformDataset2x2_3x3(),
86 framework::dataset::concat(datasets::LargeWinogradInputTransformDataset2x1_3x1(),
87 framework::dataset::concat(datasets::LargeWinogradInputTransformDataset1x2_1x3(),
88 framework::dataset::concat(datasets::LargeWinogradInputTransformDataset4x4_3x3(),
89 framework::dataset::concat(datasets::LargeWinogradInputTransformDataset4x1_3x1(),
90 framework::dataset::concat(datasets::LargeWinogradInputTransformDataset1x4_1x3(),
Gian Marco Iodice876be2a2018-07-03 12:22:09 +010091 framework::dataset::concat(datasets::LargeWinogradInputTransformDataset4x4_5x5(),
92 framework::dataset::concat(datasets::LargeWinogradInputTransformDataset4x1_5x1(),
93 datasets::LargeWinogradInputTransformDataset1x4_1x5()))))))));
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +010094
95const auto LargeWinogradInputTransformDatasetNHWC =
96 framework::dataset::concat(datasets::LargeWinogradInputTransformDataset4x4_3x3(),
Gian Marco Iodiced28b7512018-07-06 12:59:28 +010097 framework::dataset::concat(datasets::LargeWinogradInputTransformDataset4x4_5x5(),
98 framework::dataset::concat(datasets::LargeWinogradInputTransformDataset4x1_5x1(),
99 datasets::LargeWinogradInputTransformDataset1x4_1x5())));
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100100
101// Filter transform
102const auto SmallWinogradFilterTransformDatasetNCHW =
103 framework::dataset::concat(combine(datasets::Small3x3Shapes(), framework::dataset::make("OutputTile", { Size2D(2U, 2U), Size2D(4U, 4U) })),
104 framework::dataset::concat(combine(datasets::Small3x1Shapes(), framework::dataset::make("OutputTile", { Size2D(2U, 1U), Size2D(4U, 1U) })),
105 framework::dataset::concat(combine(datasets::Small1x3Shapes(), framework::dataset::make("OutputTile", { Size2D(1U, 2U), Size2D(1U, 4U) })),
Gian Marco Iodice876be2a2018-07-03 12:22:09 +0100106 framework::dataset::concat(combine(datasets::Small5x5Shapes(), framework::dataset::make("OutputTile", { Size2D(4U, 4U) })),
107 framework::dataset::concat(combine(datasets::Small5x1Shapes(), framework::dataset::make("OutputTile", { Size2D(4U, 1U) })),
108 combine(datasets::Small1x5Shapes(), framework::dataset::make("OutputTile", { Size2D(1U, 4U) })))))));
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100109
110const auto SmallWinogradFilterTransformDatasetNHWC =
111 framework::dataset::concat(combine(datasets::Small3x3Shapes(), framework::dataset::make("OutputTile", { Size2D(4U, 4U) })),
Giorgio Arena149fdf32018-07-04 17:03:33 +0100112 framework::dataset::concat(combine(datasets::Small3x1Shapes(), framework::dataset::make("OutputTile", { Size2D(4U, 1U) })),
113 framework::dataset::concat(combine(datasets::Small1x3Shapes(), framework::dataset::make("OutputTile", { Size2D(1U, 4U) })),
Gian Marco Iodiced28b7512018-07-06 12:59:28 +0100114 framework::dataset::concat(combine(datasets::Small5x5Shapes(), framework::dataset::make("OutputTile", { Size2D(4U, 4U) })),
115 framework::dataset::concat(combine(datasets::Small5x1Shapes(), framework::dataset::make("OutputTile", { Size2D(4U, 1U) })),
116 combine(datasets::Small1x5Shapes(), framework::dataset::make("OutputTile", { Size2D(1U, 4U) })))))));
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100117
118const auto LargeWinogradFilterTransformDatasetNCHW =
119 framework::dataset::concat(combine(datasets::Large3x3Shapes(), framework::dataset::make("OutputTile", { Size2D(2U, 2U), Size2D(4U, 4U) })),
120 framework::dataset::concat(combine(datasets::Large3x1Shapes(), framework::dataset::make("OutputTile", { Size2D(2U, 1U), Size2D(4U, 1U) })),
121 framework::dataset::concat(combine(datasets::Large1x3Shapes(), framework::dataset::make("OutputTile", { Size2D(1U, 2U), Size2D(1U, 4U) })),
Gian Marco Iodice876be2a2018-07-03 12:22:09 +0100122 framework::dataset::concat(combine(datasets::Large5x5Shapes(), framework::dataset::make("OutputTile", { Size2D(4U, 4U) })),
123 framework::dataset::concat(combine(datasets::Large5x1Shapes(), framework::dataset::make("OutputTile", { Size2D(4U, 1U) })),
124 combine(datasets::Large1x5Shapes(), framework::dataset::make("OutputTile", { Size2D(1U, 4U) })))))));
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100125
126const auto LargeWinogradFilterTransformDatasetNHWC =
127 framework::dataset::concat(combine(datasets::Large3x3Shapes(), framework::dataset::make("OutputTile", { Size2D(4U, 4U) })),
Gian Marco Iodiced28b7512018-07-06 12:59:28 +0100128 framework::dataset::concat(combine(datasets::Large3x1Shapes(), framework::dataset::make("OutputTile", { Size2D(4U, 1U) })),
129 framework::dataset::concat(combine(datasets::Large1x3Shapes(), framework::dataset::make("OutputTile", { Size2D(1U, 4U) })),
130 framework::dataset::concat(combine(datasets::Large5x5Shapes(), framework::dataset::make("OutputTile", { Size2D(4U, 4U) })),
131 framework::dataset::concat(combine(datasets::Large5x1Shapes(), framework::dataset::make("OutputTile", { Size2D(4U, 1U) })),
132 combine(datasets::Large1x5Shapes(), framework::dataset::make("OutputTile", { Size2D(1U, 4U) })))))));
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100133
134// Output transform
135const auto SmallWinogradOutputTransformDatasetNCHW = datasets::SmallWinogradOutputTransformDatasetNCHW();
136
137const auto SmallWinogradOutputTransformDatasetNHWC = datasets::SmallWinogradOutputTransformDatasetNHWC();
138
139const auto LargeWinogradOutputTransformDatasetNCHW = datasets::LargeWinogradOutputTransformDatasetNCHW();
140
141const auto LargeWinogradOutputTransformDatasetNHWC = datasets::LargeWinogradOutputTransformDatasetNHWC();
Manuel Bottini0d0028c2018-10-02 16:41:52 +0100142
143//Activation Functions
144const auto ActivationFunctionsDataset = framework::dataset::make("ActivationInfo",
145{
146 ActivationLayerInfo(),
147 ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::RELU),
148 ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::BOUNDED_RELU),
149 ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::LU_BOUNDED_RELU),
Georgios Pinitas9d6a31c2019-02-25 14:33:25 +0000150 ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::LEAKY_RELU)
Manuel Bottini0d0028c2018-10-02 16:41:52 +0100151});
Michalis Spyrou80943252019-01-10 17:19:50 +0000152const auto ActivationFunctionsSmallDataset = framework::dataset::make("ActivationInfo",
153{
154 ActivationLayerInfo(),
155 ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::LU_BOUNDED_RELU),
Georgios Pinitas9d6a31c2019-02-25 14:33:25 +0000156 ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::LEAKY_RELU),
157 ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::SOFT_RELU)
Michalis Spyrou80943252019-01-10 17:19:50 +0000158});
Gian Marco Iodice7e4b2392018-02-22 16:17:20 +0000159} // namespace
160
161using namespace arm_compute::misc::shape_calculator;
162
Giorgio Arena1f9ca1d2018-03-01 11:13:45 +0000163TEST_SUITE(CL)
164TEST_SUITE(Winograd)
165
166TEST_SUITE(InputTransform)
Gian Marco Iodice247f52c2018-03-22 11:24:56 +0000167DATA_TEST_CASE(Validate, framework::DatasetMode::ALL, zip(zip(zip(
Giorgio Arena1f9ca1d2018-03-01 11:13:45 +0000168 framework::dataset::make("InputInfo",{
169 TensorInfo(TensorShape(53U, 21U, 5U, 3U), 1, DataType::F16), // F16 not supported
170 TensorInfo(TensorShape(53U, 21U, 5U, 3U), 1, DataType::QASYMM8), // QASYMM8 not supported
171 TensorInfo(TensorShape(53U, 21U, 5U, 3U), 1, DataType::F32), // Kernel size not supported
172 TensorInfo(TensorShape(53U, 21U, 5U, 3U), 1, DataType::F32), // Strides not supported
Gian Marco Iodiced2fab732018-03-02 11:18:12 +0000173 TensorInfo(TensorShape(53U, 33U, 4U), 1, DataType::F32), // Padding needed
174 TensorInfo(TensorShape(34U, 42U, 7U, 3U), 1, DataType::F32), // Padding needed
175 TensorInfo(TensorShape(31U, 37U, 37U), 1, DataType::F32) // Padding needed
Giorgio Arena1f9ca1d2018-03-01 11:13:45 +0000176 }),
177 framework::dataset::make("OutputInfo", {
178 TensorInfo(TensorShape(5U, 5U, 16U, 3U), 1, DataType::F16),
179 TensorInfo(TensorShape(5U, 5U, 16U, 3U), 1, DataType::QASYMM8),
180 TensorInfo(TensorShape(5U, 5U, 16U, 3U), 1, DataType::F32),
181 TensorInfo(TensorShape(5U, 1U, 16U, 3U), 1, DataType::F32),
182 TensorInfo(TensorShape(4U, 442U, 16U), 1, DataType::F32),
183 TensorInfo(TensorShape(7U, 320U, 16U, 3U), 1, DataType::F32),
184 TensorInfo(TensorShape(37U, 304U, 16U), 1, DataType::F32)
185 })),
Gian Marco Iodice247f52c2018-03-22 11:24:56 +0000186 framework::dataset::make("WinogradInfo", {
187 WinogradInfo(Size2D(2, 2), Size2D(3, 3), Size2D(53U, 21U), PadStrideInfo(1, 1, 1, 0), DataLayout::NCHW),
188 WinogradInfo(Size2D(2, 2), Size2D(3, 3), Size2D(53U, 21U), PadStrideInfo(1, 1, 0, 0), DataLayout::NCHW),
189 WinogradInfo(Size2D(2, 2), Size2D(3, 3), Size2D(53U, 21U), PadStrideInfo(1, 1, 1, 1), DataLayout::NCHW),
190 WinogradInfo(Size2D(2, 2), Size2D(3, 3), Size2D(53U, 21U), PadStrideInfo(2, 1, 1, 1), DataLayout::NCHW),
191 WinogradInfo(Size2D(2, 2), Size2D(3, 3), Size2D(53U, 33U), PadStrideInfo(1, 1, 0, 1), DataLayout::NCHW),
192 WinogradInfo(Size2D(2, 2), Size2D(3, 3), Size2D(34U, 42U), PadStrideInfo(1, 1, 0, 0), DataLayout::NCHW),
193 WinogradInfo(Size2D(2, 2), Size2D(3, 3), Size2D(31U, 37U), PadStrideInfo(1, 1, 1, 1), DataLayout::NCHW)
Giorgio Arena1f9ca1d2018-03-01 11:13:45 +0000194 })),
Gian Marco Iodiced2fab732018-03-02 11:18:12 +0000195 framework::dataset::make("Expected", { false, false, false, false, false, false, false })),
Gian Marco Iodice247f52c2018-03-22 11:24:56 +0000196 input_info, output_info, winograd_info, expected)
Giorgio Arena1f9ca1d2018-03-01 11:13:45 +0000197{
Gian Marco Iodice247f52c2018-03-22 11:24:56 +0000198 ARM_COMPUTE_EXPECT(bool(CLWinogradInputTransform::validate(&input_info.clone()->set_is_resizable(false), &output_info.clone()->set_is_resizable(false), winograd_info)) == expected, framework::LogLevel::ERRORS);
Giorgio Arena1f9ca1d2018-03-01 11:13:45 +0000199}
Giorgio Arena1f9ca1d2018-03-01 11:13:45 +0000200
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100201using CLWinogradInputTransformFixtureFP32 = WinogradInputTransformValidationFixture<CLTensor, CLAccessor, CLWinogradInputTransform, float>;
202using CLWinogradInputTransformFixtureFP16 = WinogradInputTransformValidationFixture<CLTensor, CLAccessor, CLWinogradInputTransform, half>;
Giorgio Arena1f9ca1d2018-03-01 11:13:45 +0000203
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100204TEST_SUITE(NCHW)
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100205TEST_SUITE(FP32)
206FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradInputTransformFixtureFP32, framework::DatasetMode::PRECOMMIT, combine(combine(SmallWinogradInputTransformDatasetNCHW,
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100207 framework::dataset::make("DataLayout", { DataLayout::NCHW })),
208 framework::dataset::make("DataType", { DataType::F32 })))
Giorgio Arena1f9ca1d2018-03-01 11:13:45 +0000209{
Giorgio Arenafe5ef382018-04-17 10:14:10 +0100210 validate(CLAccessor(_target), _reference, tolerance_f32);
Giorgio Arena1f9ca1d2018-03-01 11:13:45 +0000211}
212
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100213FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradInputTransformFixtureFP32, framework::DatasetMode::NIGHTLY, combine(combine(LargeWinogradInputTransformDatasetNCHW,
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100214 framework::dataset::make("DataLayout", { DataLayout::NCHW })),
215 framework::dataset::make("DataType", { DataType::F32 })))
Giorgio Arena1f9ca1d2018-03-01 11:13:45 +0000216{
Giorgio Arenafe5ef382018-04-17 10:14:10 +0100217 validate(CLAccessor(_target), _reference, tolerance_f32);
Giorgio Arena1f9ca1d2018-03-01 11:13:45 +0000218}
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100219TEST_SUITE_END() // FP32
220
221TEST_SUITE(FP16)
222FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradInputTransformFixtureFP16, framework::DatasetMode::PRECOMMIT, combine(combine(SmallWinogradInputTransformDatasetNCHW,
223 framework::dataset::make("DataLayout", { DataLayout::NCHW })),
224 framework::dataset::make("DataType", { DataType::F16 })))
225{
226 validate(CLAccessor(_target), _reference, tolerance_f16);
227}
228
229FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradInputTransformFixtureFP16, framework::DatasetMode::NIGHTLY, combine(combine(LargeWinogradInputTransformDatasetNCHW,
230 framework::dataset::make("DataLayout", { DataLayout::NCHW })),
231 framework::dataset::make("DataType", { DataType::F16 })))
232{
233 validate(CLAccessor(_target), _reference, tolerance_f16);
234}
235TEST_SUITE_END() // FP16
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100236TEST_SUITE_END() // NCHW
237
238TEST_SUITE(NHWC)
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100239TEST_SUITE(FP16)
240FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradInputTransformFixtureFP16, framework::DatasetMode::PRECOMMIT, combine(combine(SmallWinogradInputTransformDatasetNHWC,
241 framework::dataset::make("DataLayout", { DataLayout::NHWC })),
242 framework::dataset::make("DataType", { DataType::F16 })))
243{
244 validate(CLAccessor(_target), _reference, tolerance_f16);
245}
246
247FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradInputTransformFixtureFP16, framework::DatasetMode::NIGHTLY, combine(combine(LargeWinogradInputTransformDatasetNHWC,
248 framework::dataset::make("DataLayout", { DataLayout::NHWC })),
249 framework::dataset::make("DataType", { DataType::F16 })))
250{
251 validate(CLAccessor(_target), _reference, tolerance_f16);
252}
253TEST_SUITE_END() // FP16
254TEST_SUITE(FP32)
255FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradInputTransformFixtureFP32, framework::DatasetMode::PRECOMMIT, combine(combine(SmallWinogradInputTransformDatasetNHWC,
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100256 framework::dataset::make("DataLayout", { DataLayout::NHWC })),
257 framework::dataset::make("DataType", { DataType::F32 })))
258{
259 validate(CLAccessor(_target), _reference, tolerance_f32);
260}
261
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100262FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradInputTransformFixtureFP32, framework::DatasetMode::NIGHTLY, combine(combine(LargeWinogradInputTransformDatasetNHWC,
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100263 framework::dataset::make("DataLayout", { DataLayout::NHWC })),
264 framework::dataset::make("DataType", { DataType::F32 })))
265{
266 validate(CLAccessor(_target), _reference, tolerance_f32);
267}
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100268TEST_SUITE_END() // FP32
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100269TEST_SUITE_END() // NHWC
Gian Marco Iodice7e4b2392018-02-22 16:17:20 +0000270TEST_SUITE_END() // InputTransform
Giorgio Arena1f9ca1d2018-03-01 11:13:45 +0000271
Gian Marco Iodice7e4b2392018-02-22 16:17:20 +0000272TEST_SUITE(FilterTransform)
Giorgio Arena2d9de0a2018-03-15 17:58:20 +0000273DATA_TEST_CASE(Validate, framework::DatasetMode::ALL, zip(zip(zip(
Gian Marco Iodice7e4b2392018-02-22 16:17:20 +0000274 framework::dataset::make("InputInfo",{
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100275 TensorInfo(TensorShape(3U, 3U, 5U, 3U), 1, DataType::F16), // F16 supported
Gian Marco Iodice7e4b2392018-02-22 16:17:20 +0000276 TensorInfo(TensorShape(3U, 3U, 5U, 3U), 1, DataType::QASYMM8), // QASYMM8 not supported
277 TensorInfo(TensorShape(5U, 5U, 5U, 3U), 1, DataType::F32), // Kernel size not supported
Giorgio Arena2d9de0a2018-03-15 17:58:20 +0000278 TensorInfo(TensorShape(3U, 3U), 1, DataType::F32), // Output tile not supported
Gian Marco Iodice7e4b2392018-02-22 16:17:20 +0000279 TensorInfo(TensorShape(3U, 3U, 5U, 3U), 1, DataType::F32), // valid
280 TensorInfo(TensorShape(3U, 3U, 37U, 2U), 1, DataType::F32), // valid
281 TensorInfo(TensorShape(3U, 3U, 37U, 22U), 1, DataType::F32) // valid
282 }),
283 framework::dataset::make("OutputInfo", {
284 TensorInfo(TensorShape(3U, 5U, 16U), 1, DataType::F16),
285 TensorInfo(TensorShape(3U, 5U, 16U), 1, DataType::QASYMM8),
286 TensorInfo(TensorShape(3U, 5U, 16U), 1, DataType::F32),
287 TensorInfo(TensorShape(1U, 1U, 16U), 1, DataType::F32),
288 TensorInfo(TensorShape(3U, 5U, 16U), 1, DataType::F32),
289 TensorInfo(TensorShape(2U, 37U, 16U), 1, DataType::F32),
Giorgio Arena2d9de0a2018-03-15 17:58:20 +0000290 TensorInfo(TensorShape(22U, 37U, 36U), 1, DataType::F32)
Gian Marco Iodice7e4b2392018-02-22 16:17:20 +0000291 })),
Gian Marco Iodice247f52c2018-03-22 11:24:56 +0000292 framework::dataset::make("WinogradInfo", {
293 WinogradInfo(Size2D(2U, 2U), Size2D(3U, 3U), Size2D() /* Not needed */, PadStrideInfo() /* Not needed */, DataLayout::NCHW /* Not needed */ ),
294 WinogradInfo(Size2D(2U, 2U), Size2D(3U, 3U), Size2D() /* Not needed */, PadStrideInfo() /* Not needed */, DataLayout::NCHW /* Not needed */ ),
295 WinogradInfo(Size2D(2U, 2U), Size2D(3U, 3U), Size2D() /* Not needed */, PadStrideInfo() /* Not needed */, DataLayout::NCHW /* Not needed */ ),
296 WinogradInfo(Size2D(3U, 3U), Size2D(3U, 3U), Size2D() /* Not needed */, PadStrideInfo() /* Not needed */, DataLayout::NCHW /* Not needed */ ),
297 WinogradInfo(Size2D(2U, 2U), Size2D(3U, 3U), Size2D() /* Not needed */, PadStrideInfo() /* Not needed */, DataLayout::NCHW /* Not needed */ ),
298 WinogradInfo(Size2D(2U, 2U), Size2D(3U, 3U), Size2D() /* Not needed */, PadStrideInfo() /* Not needed */, DataLayout::NCHW /* Not needed */ ),
299 WinogradInfo(Size2D(4U, 4U), Size2D(3U, 3U), Size2D() /* Not needed */, PadStrideInfo() /* Not needed */, DataLayout::NCHW /* Not needed */ )
300 })),
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100301 framework::dataset::make("Expected", { true, false, false, false, true, true, true })),
Gian Marco Iodice247f52c2018-03-22 11:24:56 +0000302 input_info, output_info, winograd_info, expected)
Gian Marco Iodice7e4b2392018-02-22 16:17:20 +0000303{
Gian Marco Iodice247f52c2018-03-22 11:24:56 +0000304 ARM_COMPUTE_EXPECT(bool(CLWinogradFilterTransformKernel::validate(&input_info.clone()->set_is_resizable(false), &output_info.clone()->set_is_resizable(false), winograd_info)) == expected, framework::LogLevel::ERRORS);
Gian Marco Iodice7e4b2392018-02-22 16:17:20 +0000305}
Giorgio Arena1f9ca1d2018-03-01 11:13:45 +0000306
Gian Marco Iodice7e4b2392018-02-22 16:17:20 +0000307using CLWinogradFilterTransform = CLSynthetizeFunctionWithZeroConstantBorder<CLWinogradFilterTransformKernel, 0>;
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100308using CLWinogradFilterTransformFixtureFP32 = WinogradFilterTransformValidationFixture<CLTensor, CLAccessor, CLWinogradFilterTransform, float>;
309using CLWinogradFilterTransformFixtureFP16 = WinogradFilterTransformValidationFixture<CLTensor, CLAccessor, CLWinogradFilterTransform, half>;
Gian Marco Iodice7e4b2392018-02-22 16:17:20 +0000310
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100311TEST_SUITE(NCHW)
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100312TEST_SUITE(FP32)
313FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradFilterTransformFixtureFP32, framework::DatasetMode::PRECOMMIT,
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100314 combine(combine(SmallWinogradFilterTransformDatasetNCHW,
315 framework::dataset::make("DataLayout", { DataLayout::NCHW })),
316 framework::dataset::make("DataType", { DataType::F32 })))
Gian Marco Iodice7e4b2392018-02-22 16:17:20 +0000317{
318 // Validate output
319 validate(CLAccessor(_target), _reference, tolerance_f32);
320}
321
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100322FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradFilterTransformFixtureFP32, framework::DatasetMode::NIGHTLY,
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100323 combine(combine(LargeWinogradFilterTransformDatasetNCHW,
324 framework::dataset::make("DataLayout", { DataLayout::NCHW })),
325 framework::dataset::make("DataType", { DataType::F32 })))
326{
327 // Validate output
328 validate(CLAccessor(_target), _reference, tolerance_f32);
329}
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100330TEST_SUITE_END() // FP32
331TEST_SUITE(FP16)
332FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradFilterTransformFixtureFP16, framework::DatasetMode::PRECOMMIT,
333 combine(combine(SmallWinogradFilterTransformDatasetNCHW,
334 framework::dataset::make("DataLayout", { DataLayout::NCHW })),
335 framework::dataset::make("DataType", { DataType::F16 })))
336{
337 // Validate output
338 validate(CLAccessor(_target), _reference, tolerance_f16);
339}
340
341FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradFilterTransformFixtureFP16, framework::DatasetMode::NIGHTLY,
342 combine(combine(LargeWinogradFilterTransformDatasetNCHW,
343 framework::dataset::make("DataLayout", { DataLayout::NCHW })),
344 framework::dataset::make("DataType", { DataType::F16 })))
345{
346 // Validate output
347 validate(CLAccessor(_target), _reference, tolerance_f16);
348}
349TEST_SUITE_END() // FP16
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100350TEST_SUITE_END() // NCHW
351
352TEST_SUITE(NHWC)
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100353TEST_SUITE(FP16)
354FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradFilterTransformFixtureFP16, framework::DatasetMode::PRECOMMIT,
355 combine(combine(SmallWinogradFilterTransformDatasetNHWC,
356 framework::dataset::make("DataLayout", { DataLayout::NHWC })),
357 framework::dataset::make("DataType", { DataType::F16 })))
358{
359 // Validate output
360 validate(CLAccessor(_target), _reference, tolerance_f16);
361}
362
363FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradFilterTransformFixtureFP16, framework::DatasetMode::NIGHTLY,
364 combine(combine(LargeWinogradFilterTransformDatasetNHWC,
365 framework::dataset::make("DataLayout", { DataLayout::NHWC })),
366 framework::dataset::make("DataType", { DataType::F16 })))
367{
368 // Validate output
369 validate(CLAccessor(_target), _reference, tolerance_f16);
370}
371TEST_SUITE_END() // FP16
372TEST_SUITE(FP32)
373FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradFilterTransformFixtureFP32, framework::DatasetMode::PRECOMMIT,
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100374 combine(combine(SmallWinogradFilterTransformDatasetNHWC,
375 framework::dataset::make("DataLayout", { DataLayout::NHWC })),
376 framework::dataset::make("DataType", { DataType::F32 })))
Gian Marco Iodice7e4b2392018-02-22 16:17:20 +0000377{
378 // Validate output
379 validate(CLAccessor(_target), _reference, tolerance_f32);
380}
Gian Marco Iodiced2fab732018-03-02 11:18:12 +0000381
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100382FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradFilterTransformFixtureFP32, framework::DatasetMode::NIGHTLY,
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100383 combine(combine(LargeWinogradFilterTransformDatasetNHWC,
384 framework::dataset::make("DataLayout", { DataLayout::NHWC })),
385 framework::dataset::make("DataType", { DataType::F32 })))
386{
387 // Validate output
388 validate(CLAccessor(_target), _reference, tolerance_f32);
389}
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100390TEST_SUITE_END() // FP32
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100391TEST_SUITE_END() // NHWC
Gian Marco Iodice7e4b2392018-02-22 16:17:20 +0000392TEST_SUITE_END() // FilterTransform
393
Gian Marco Iodiced2fab732018-03-02 11:18:12 +0000394TEST_SUITE(OutputTransform)
Gian Marco Iodice247f52c2018-03-22 11:24:56 +0000395DATA_TEST_CASE(Validate, framework::DatasetMode::ALL, zip(zip(zip(zip(
Gian Marco Iodiced2fab732018-03-02 11:18:12 +0000396 framework::dataset::make("InputInfo",{
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100397 TensorInfo(TensorShape(512U, 49U, 16U, 5U), 1, DataType::F16), // F16 supported
Gian Marco Iodice247f52c2018-03-22 11:24:56 +0000398 TensorInfo(TensorShape(512U, 49U, 16U, 5U), 1, DataType::QASYMM8), // QASYMM8 not supported
399 TensorInfo(TensorShape(512U, 49U, 16U, 5U), 1, DataType::F32), // Kernel size not supported
400 TensorInfo(TensorShape(512U, 49U, 16U, 5U), 1, DataType::F32), // Valid
401 TensorInfo(TensorShape(13U, 108U, 16U, 4U), 1, DataType::F32), // Padding needed
402 TensorInfo(TensorShape(7U, 20U, 16U, 7U), 1, DataType::F32), // Valid
Gian Marco Iodicee52a3002018-04-11 15:59:10 +0100403 TensorInfo(TensorShape(7U, 20U, 16U, 7U), 1, DataType::F32), // Wrong WinogradInfo
404 TensorInfo(TensorShape(7U, 256U, 36U, 3U), 1, DataType::F32), // Valid
405 TensorInfo(TensorShape(7U, 256U, 16U, 3U), 1, DataType::F32) // Wrong number of batches
Gian Marco Iodiced2fab732018-03-02 11:18:12 +0000406 }),
407 framework::dataset::make("BiasInfo", {
Gian Marco Iodice247f52c2018-03-22 11:24:56 +0000408 TensorInfo(TensorShape(512U), 1, DataType::F16),
409 TensorInfo(TensorShape(512U), 1, DataType::QASYMM8),
410 TensorInfo(TensorShape(512U), 1, DataType::F32),
Gian Marco Iodiced2fab732018-03-02 11:18:12 +0000411 TensorInfo(TensorShape(512U), 1, DataType::F32),
412 TensorInfo(TensorShape(13U), 1, DataType::F32),
413 TensorInfo(TensorShape(7U), 1, DataType::F32),
Gian Marco Iodicee52a3002018-04-11 15:59:10 +0100414 TensorInfo(TensorShape(7U), 1, DataType::F32),
415 TensorInfo(TensorShape(7U), 1, DataType::F32),
Gian Marco Iodice247f52c2018-03-22 11:24:56 +0000416 TensorInfo(TensorShape(7U), 1, DataType::F32)
Gian Marco Iodiced2fab732018-03-02 11:18:12 +0000417 })),
418 framework::dataset::make("OutputInfo", {
Gian Marco Iodice247f52c2018-03-22 11:24:56 +0000419 TensorInfo(TensorShape(14U, 14U, 512U, 5U), 1, DataType::F16),
420 TensorInfo(TensorShape(14U, 14U, 512U, 5U), 1, DataType::QASYMM8),
421 TensorInfo(TensorShape(14U, 14U, 512U, 5U), 1, DataType::F32),
422 TensorInfo(TensorShape(14U, 14U, 512U, 5U), 1, DataType::F32),
423 TensorInfo(TensorShape(17U, 23U, 13U, 4U), 1, DataType::F32),
424 TensorInfo(TensorShape(8U, 10U, 7U, 7U), 1, DataType::F32),
Gian Marco Iodicee52a3002018-04-11 15:59:10 +0100425 TensorInfo(TensorShape(7U, 9U, 7U, 7U), 1, DataType::F32),
426 TensorInfo(TensorShape(64U, 64U, 7U, 3U), 1, DataType::F32),
427 TensorInfo(TensorShape(64U, 64U, 7U, 3U), 1, DataType::F32)
Gian Marco Iodiced2fab732018-03-02 11:18:12 +0000428 })),
Gian Marco Iodice247f52c2018-03-22 11:24:56 +0000429 framework::dataset::make("WinogradInfo", {
430 WinogradInfo(Size2D(2U, 2U), Size2D(3U, 3U), Size2D(14U, 14U), PadStrideInfo(1, 1, 1, 1), DataLayout::NCHW),
431 WinogradInfo(Size2D(2U, 2U), Size2D(3U, 3U), Size2D(14U, 14U), PadStrideInfo(1, 1, 1, 1), DataLayout::NCHW),
432 WinogradInfo(Size2D(2U, 2U), Size2D(5U, 5U), Size2D(14U, 14U), PadStrideInfo(1, 1, 1, 1), DataLayout::NCHW),
433 WinogradInfo(Size2D(2U, 2U), Size2D(3U, 3U), Size2D(14U, 14U), PadStrideInfo(1, 1, 1, 1), DataLayout::NCHW),
434 WinogradInfo(Size2D(2U, 2U), Size2D(3U, 3U), Size2D(17U, 23U), PadStrideInfo(1, 1, 1, 1), DataLayout::NCHW),
435 WinogradInfo(Size2D(2U, 2U), Size2D(3U, 3U), Size2D(8U, 10U), PadStrideInfo(1, 1, 1, 1), DataLayout::NCHW),
436 WinogradInfo(Size2D(2U, 3U), Size2D(3U, 3U), Size2D(8U, 10U), PadStrideInfo(1, 1, 0, 0), DataLayout::NCHW),
Gian Marco Iodicee52a3002018-04-11 15:59:10 +0100437 WinogradInfo(Size2D(4U, 4U), Size2D(3U, 3U), Size2D(64U, 64U), PadStrideInfo(1, 1, 1, 1), DataLayout::NCHW),
438 WinogradInfo(Size2D(4U, 4U), Size2D(3U, 3U), Size2D(64U, 64U), PadStrideInfo(1, 1, 1, 1), DataLayout::NCHW)
Gian Marco Iodiced2fab732018-03-02 11:18:12 +0000439 })),
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100440 framework::dataset::make("Expected", { true, false, false, true, false, true, false, true, false })),
Gian Marco Iodice247f52c2018-03-22 11:24:56 +0000441 input_info, bias_info, output_info, winograd_info, expected)
Gian Marco Iodiced2fab732018-03-02 11:18:12 +0000442{
Gian Marco Iodice247f52c2018-03-22 11:24:56 +0000443 ARM_COMPUTE_EXPECT(bool(CLWinogradOutputTransformKernel::validate(&input_info.clone()->set_is_resizable(false), &bias_info.clone()->set_is_resizable(false), &output_info.clone()->set_is_resizable(false), winograd_info)) == expected, framework::LogLevel::ERRORS);
Gian Marco Iodiced2fab732018-03-02 11:18:12 +0000444}
Gian Marco Iodiced2fab732018-03-02 11:18:12 +0000445
446using CLWinogradOutputTransform = CLSynthetizeFunctionWithZeroConstantBorder<CLWinogradOutputTransformKernel, 0>;
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100447using CLWinogradOutputTransformFixtureFP32 = WinogradOutputTransformValidationFixture<CLTensor, CLAccessor, CLWinogradOutputTransform, float>;
448using CLWinogradOutputTransformFixtureFP16 = WinogradOutputTransformValidationFixture<CLTensor, CLAccessor, CLWinogradOutputTransform, half>;
Gian Marco Iodiced2fab732018-03-02 11:18:12 +0000449
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100450TEST_SUITE(NCHW)
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100451TEST_SUITE(FP16)
452FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradOutputTransformFixtureFP16, framework::DatasetMode::ALL,
Manuel Bottini0d0028c2018-10-02 16:41:52 +0100453 combine(combine(SmallWinogradOutputTransformDatasetNCHW,
454 framework::dataset::make("DataType", { DataType::F16 })),
455 framework::dataset::make("ActivationInfo",{ ActivationLayerInfo() }) ))
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100456{
457 // Validate output
458 validate(CLAccessor(_target), _reference, tolerance_f16);
459}
Gian Marco Iodiced2fab732018-03-02 11:18:12 +0000460
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100461FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradOutputTransformFixtureFP16, framework::DatasetMode::NIGHTLY,
Manuel Bottini0d0028c2018-10-02 16:41:52 +0100462 combine(combine(LargeWinogradOutputTransformDatasetNCHW,
463 framework::dataset::make("DataType", { DataType::F16 })),
464 framework::dataset::make("ActivationInfo",{ ActivationLayerInfo() }) ))
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100465{
466 // Validate output
467 validate(CLAccessor(_target), _reference, tolerance_f16);
468}
469TEST_SUITE_END() // FP16
470TEST_SUITE(FP32)
471FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradOutputTransformFixtureFP32, framework::DatasetMode::ALL,
Manuel Bottini0d0028c2018-10-02 16:41:52 +0100472 combine(combine(SmallWinogradOutputTransformDatasetNCHW,
473 framework::dataset::make("DataType", { DataType::F32 })),
474 framework::dataset::make("ActivationInfo",{ ActivationLayerInfo() }) ))
Gian Marco Iodiced2fab732018-03-02 11:18:12 +0000475{
476 // Validate output
477 validate(CLAccessor(_target), _reference, tolerance_f32);
478}
479
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100480FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradOutputTransformFixtureFP32, framework::DatasetMode::NIGHTLY,
Manuel Bottini0d0028c2018-10-02 16:41:52 +0100481 combine(combine(LargeWinogradOutputTransformDatasetNCHW,
482 framework::dataset::make("DataType", { DataType::F32 })),
483 framework::dataset::make("ActivationInfo",{ ActivationLayerInfo() }) ))
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100484{
485 // Validate output
486 validate(CLAccessor(_target), _reference, tolerance_f32);
487}
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100488TEST_SUITE_END() // FP32
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100489TEST_SUITE_END() // NCHW
490
491TEST_SUITE(NHWC)
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100492TEST_SUITE(FP16)
493FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradOutputTransformFixtureFP16, framework::DatasetMode::ALL,
Manuel Bottini0d0028c2018-10-02 16:41:52 +0100494 combine(combine(SmallWinogradOutputTransformDatasetNHWC,
495 framework::dataset::make("DataType", { DataType::F16 })),
496 framework::dataset::make("ActivationInfo",{ ActivationLayerInfo() }) ))
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100497{
498 // Validate output
499 validate(CLAccessor(_target), _reference, tolerance_f16);
500}
501
502FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradOutputTransformFixtureFP16, framework::DatasetMode::NIGHTLY,
Manuel Bottini0d0028c2018-10-02 16:41:52 +0100503 combine(combine(LargeWinogradOutputTransformDatasetNHWC,
504 framework::dataset::make("DataType", { DataType::F16 })),
505 framework::dataset::make("ActivationInfo",{ ActivationLayerInfo() }) ))
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100506{
507 // Validate output
508 validate(CLAccessor(_target), _reference, tolerance_f16);
509}
510TEST_SUITE_END() // FP16
511TEST_SUITE(FP32)
512FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradOutputTransformFixtureFP32, framework::DatasetMode::ALL,
Manuel Bottini0d0028c2018-10-02 16:41:52 +0100513 combine(combine(SmallWinogradOutputTransformDatasetNHWC,
514 framework::dataset::make("DataType", { DataType::F32 })),
515 framework::dataset::make("ActivationInfo",{ ActivationLayerInfo() }) ))
Gian Marco Iodiced2fab732018-03-02 11:18:12 +0000516{
517 // Validate output
518 validate(CLAccessor(_target), _reference, tolerance_f32);
519}
520
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100521FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradOutputTransformFixtureFP32, framework::DatasetMode::NIGHTLY,
Manuel Bottini0d0028c2018-10-02 16:41:52 +0100522 combine(combine(LargeWinogradOutputTransformDatasetNHWC,
523 framework::dataset::make("DataType", { DataType::F32 })),
524 framework::dataset::make("ActivationInfo",{ ActivationLayerInfo() }) ))
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100525{
526 // Validate output
527 validate(CLAccessor(_target), _reference, tolerance_f32);
528}
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100529TEST_SUITE_END() // FP32
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100530TEST_SUITE_END() // NHWC
Gian Marco Iodiced2fab732018-03-02 11:18:12 +0000531TEST_SUITE_END() // OutputTransform
532
533TEST_SUITE(ConvolutionLayer)
Gian Marco Iodiced2fab732018-03-02 11:18:12 +0000534DATA_TEST_CASE(Validate, framework::DatasetMode::ALL, zip(zip(zip(zip(zip(
535 framework::dataset::make("InputInfo", {
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100536 TensorInfo(TensorShape(17U, 31U, 2U), 1, DataType::F16), // Insufficient padding
Gian Marco Iodiced2fab732018-03-02 11:18:12 +0000537 TensorInfo(TensorShape(17U, 31U, 2U), 1, DataType::F32), // Datatype mismatch
538 TensorInfo(TensorShape(23U, 27U, 5U, 4U), 1, DataType::F32), // Stride y not supported
539 TensorInfo(TensorShape(16U, 16U, 8U), 1, DataType::F32), // Padding needed
540 TensorInfo(TensorShape(33U, 27U, 7U, 4U), 1, DataType::F32) // Kernel size not supported
541 }),
542 framework::dataset::make("WeightsInfo", {
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100543 TensorInfo(TensorShape(3U, 3U, 2U, 19U), 1, DataType::F16),
Gian Marco Iodiced2fab732018-03-02 11:18:12 +0000544 TensorInfo(TensorShape(3U, 3U, 2U, 19U), 1, DataType::QASYMM8),
545 TensorInfo(TensorShape(3U, 3U, 5U, 21U), 1, DataType::F32),
546 TensorInfo(TensorShape(3U, 3U, 8U, 16U), 1, DataType::F32),
547 TensorInfo(TensorShape(5U, 5U, 7U, 16U), 1, DataType::F16)
548 })),
549 framework::dataset::make("BiasesInfo", {
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100550 TensorInfo(TensorShape(19U), 1, DataType::F16),
Gian Marco Iodiced2fab732018-03-02 11:18:12 +0000551 TensorInfo(TensorShape(19U), 1, DataType::F32),
552 TensorInfo(TensorShape(21U), 1, DataType::F32),
553 TensorInfo(TensorShape(16U), 1, DataType::F32),
554 TensorInfo(TensorShape(16U), 1, DataType::F32)
555 })),
556 framework::dataset::make("OutputInfo", {
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100557 TensorInfo(TensorShape(17U, 31U, 19U), 1, DataType::F16),
Gian Marco Iodiced2fab732018-03-02 11:18:12 +0000558 TensorInfo(TensorShape(15U, 15U, 19U), 1, DataType::F32),
559 TensorInfo(TensorShape(21U, 25U, 21U, 4U), 1, DataType::F32),
560 TensorInfo(TensorShape(16U, 16U, 16U), 1, DataType::F32),
561 TensorInfo(TensorShape(11U, 12U, 16U, 4U), 1, DataType::F32)
562 })),
563 framework::dataset::make("ConvInfo", {
564 PadStrideInfo(1, 1, 1, 1),
565 PadStrideInfo(1, 1, 1, 1),
566 PadStrideInfo(1, 2, 0, 0),
567 PadStrideInfo(1, 1, 1, 1),
568 PadStrideInfo(1, 1, 1, 0)
569 })),
570 framework::dataset::make("Expected", { false, false, false, false, false })),
571 input_info, weights_info, bias_info, output_info, conv_info, expected)
572{
573 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);
574}
Gian Marco Iodiced2fab732018-03-02 11:18:12 +0000575
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100576TEST_SUITE(FP32)
Gian Marco Iodice2213d4b2018-04-27 10:39:06 +0100577using CLWinogradConvolutionLayerFastMathFixture = WinogradConvolutionLayerFastMathValidationFixture<CLTensor, CLAccessor, CLWinogradConvolutionLayer, float>;
Gian Marco Iodice6cf188c2018-05-04 16:36:50 +0100578TEST_SUITE(Conv3x3)
Gian Marco Iodice2213d4b2018-04-27 10:39:06 +0100579FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradConvolutionLayerFastMathFixture, framework::DatasetMode::PRECOMMIT,
Pablo Tello7282d562018-06-14 15:35:49 +0100580 combine(combine(combine(datasets::SmallWinogradConvolutionLayer3x3Dataset(),
581 framework::dataset::make("DataType", { DataType::F32 })),
Michalis Spyrou80943252019-01-10 17:19:50 +0000582 ActivationFunctionsSmallDataset),
Giorgio Arenaea55f912018-07-12 15:41:35 +0100583 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
Gian Marco Iodice2213d4b2018-04-27 10:39:06 +0100584{
585 // Validate output
Gian Marco Iodice4497e812018-05-08 16:36:52 +0100586 validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f32);
Gian Marco Iodice2213d4b2018-04-27 10:39:06 +0100587}
588
589FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradConvolutionLayerFastMathFixture, framework::DatasetMode::NIGHTLY,
Pablo Tello7282d562018-06-14 15:35:49 +0100590 combine(combine(combine(datasets::LargeWinogradConvolutionLayer3x3Dataset(),
591 framework::dataset::make("DataType", { DataType::F32 })),
Manuel Bottini0d0028c2018-10-02 16:41:52 +0100592 ActivationFunctionsDataset),
Giorgio Arenaea55f912018-07-12 15:41:35 +0100593 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
Gian Marco Iodice2213d4b2018-04-27 10:39:06 +0100594{
595 // Validate output
Gian Marco Iodice4497e812018-05-08 16:36:52 +0100596 validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f32);
Gian Marco Iodice2213d4b2018-04-27 10:39:06 +0100597}
Gian Marco Iodice6cf188c2018-05-04 16:36:50 +0100598TEST_SUITE_END() // Conv3x3
599
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100600TEST_SUITE(Conv3x1)
601FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradConvolutionLayerFastMathFixture, framework::DatasetMode::PRECOMMIT,
602 combine(combine(combine(datasets::SmallWinogradConvolutionLayer3x1Dataset(),
603 framework::dataset::make("DataType", { DataType::F32 })),
Michalis Spyrou80943252019-01-10 17:19:50 +0000604 ActivationFunctionsSmallDataset),
Giorgio Arenaea55f912018-07-12 15:41:35 +0100605 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100606{
607 // Validate output
608 validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f32);
609}
610
611FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradConvolutionLayerFastMathFixture, framework::DatasetMode::NIGHTLY,
612 combine(combine(combine(datasets::LargeWinogradConvolutionLayer3x1Dataset(),
613 framework::dataset::make("DataType", { DataType::F32 })),
Manuel Bottini0d0028c2018-10-02 16:41:52 +0100614 ActivationFunctionsDataset),
Giorgio Arenaea55f912018-07-12 15:41:35 +0100615 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100616{
617 // Validate output
618 validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f32);
619}
620TEST_SUITE_END() // Conv3x1
621
622TEST_SUITE(Conv1x3)
623FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradConvolutionLayerFastMathFixture, framework::DatasetMode::PRECOMMIT,
624 combine(combine(combine(datasets::SmallWinogradConvolutionLayer1x3Dataset(),
625 framework::dataset::make("DataType", { DataType::F32 })),
Michalis Spyrou80943252019-01-10 17:19:50 +0000626 ActivationFunctionsSmallDataset),
Giorgio Arenaea55f912018-07-12 15:41:35 +0100627 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100628{
629 // Validate output
630 validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f32);
631}
632
633FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradConvolutionLayerFastMathFixture, framework::DatasetMode::NIGHTLY,
634 combine(combine(combine(datasets::LargeWinogradConvolutionLayer1x3Dataset(),
635 framework::dataset::make("DataType", { DataType::F32 })),
Manuel Bottini0d0028c2018-10-02 16:41:52 +0100636 ActivationFunctionsDataset),
Giorgio Arenaea55f912018-07-12 15:41:35 +0100637 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100638{
639 // Validate output
640 validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f32);
641}
642TEST_SUITE_END() // Conv1x3
643
Gian Marco Iodice6cf188c2018-05-04 16:36:50 +0100644TEST_SUITE(Conv5x5)
645FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradConvolutionLayerFastMathFixture, framework::DatasetMode::PRECOMMIT,
Pablo Tello7282d562018-06-14 15:35:49 +0100646 combine(combine(combine(datasets::SmallWinogradConvolutionLayer5x5Dataset(),
647 framework::dataset::make("DataType", { DataType::F32 })),
Michalis Spyrou80943252019-01-10 17:19:50 +0000648 ActivationFunctionsSmallDataset ),
Giorgio Arenaea55f912018-07-12 15:41:35 +0100649 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
Pablo Tello7282d562018-06-14 15:35:49 +0100650
Gian Marco Iodice6cf188c2018-05-04 16:36:50 +0100651{
652 // Validate output
Gian Marco Iodice4497e812018-05-08 16:36:52 +0100653 validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f32);
Gian Marco Iodice6cf188c2018-05-04 16:36:50 +0100654}
655
656FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradConvolutionLayerFastMathFixture, framework::DatasetMode::NIGHTLY,
Pablo Tello7282d562018-06-14 15:35:49 +0100657 combine(combine(combine(datasets::LargeWinogradConvolutionLayer5x5Dataset(),
658 framework::dataset::make("DataType", { DataType::F32 })),
Manuel Bottini0d0028c2018-10-02 16:41:52 +0100659 ActivationFunctionsDataset ),
Giorgio Arenaea55f912018-07-12 15:41:35 +0100660 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
Pablo Tello7282d562018-06-14 15:35:49 +0100661
Gian Marco Iodice6cf188c2018-05-04 16:36:50 +0100662{
663 // Validate output
Gian Marco Iodice4497e812018-05-08 16:36:52 +0100664 validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f32);
Gian Marco Iodice6cf188c2018-05-04 16:36:50 +0100665}
666TEST_SUITE_END() // Conv5x5
Gian Marco Iodice2213d4b2018-04-27 10:39:06 +0100667
Gian Marco Iodice876be2a2018-07-03 12:22:09 +0100668TEST_SUITE(Conv5x1)
669FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradConvolutionLayerFastMathFixture, framework::DatasetMode::PRECOMMIT,
670 combine(combine(combine(datasets::SmallWinogradConvolutionLayer5x1Dataset(),
671 framework::dataset::make("DataType", { DataType::F32 })),
Michalis Spyrou80943252019-01-10 17:19:50 +0000672 ActivationFunctionsSmallDataset),
Giorgio Arenaea55f912018-07-12 15:41:35 +0100673 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
Gian Marco Iodice876be2a2018-07-03 12:22:09 +0100674
675{
676 // Validate output
677 validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f32);
678}
679
680FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradConvolutionLayerFastMathFixture, framework::DatasetMode::NIGHTLY,
681 combine(combine(combine(datasets::LargeWinogradConvolutionLayer5x1Dataset(),
682 framework::dataset::make("DataType", { DataType::F32 })),
Manuel Bottini0d0028c2018-10-02 16:41:52 +0100683 ActivationFunctionsDataset),
Giorgio Arenaea55f912018-07-12 15:41:35 +0100684 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
Gian Marco Iodice876be2a2018-07-03 12:22:09 +0100685
686{
687 // Validate output
688 validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f32);
689}
690TEST_SUITE_END() // Conv5x1
691
692TEST_SUITE(Conv1x5)
693FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradConvolutionLayerFastMathFixture, framework::DatasetMode::PRECOMMIT,
694 combine(combine(combine(datasets::SmallWinogradConvolutionLayer1x5Dataset(),
695 framework::dataset::make("DataType", { DataType::F32 })),
Michalis Spyrou80943252019-01-10 17:19:50 +0000696 ActivationFunctionsSmallDataset),
Giorgio Arenaea55f912018-07-12 15:41:35 +0100697 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
Gian Marco Iodice876be2a2018-07-03 12:22:09 +0100698
699{
700 // Validate output
701 validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f32);
702}
703
704FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradConvolutionLayerFastMathFixture, framework::DatasetMode::NIGHTLY,
705 combine(combine(combine(datasets::LargeWinogradConvolutionLayer1x5Dataset(),
706 framework::dataset::make("DataType", { DataType::F32 })),
Manuel Bottini0d0028c2018-10-02 16:41:52 +0100707 ActivationFunctionsDataset),
Giorgio Arenaea55f912018-07-12 15:41:35 +0100708 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
Gian Marco Iodice876be2a2018-07-03 12:22:09 +0100709
710{
711 // Validate output
712 validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f32);
713}
714TEST_SUITE_END() // Conv1x5
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100715TEST_SUITE_END() // FP32
716
Vidhya Sudhan Loganathana25d16c2018-11-16 11:33:12 +0000717
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100718TEST_SUITE(FP16)
719
Vidhya Sudhan Loganathana25d16c2018-11-16 11:33:12 +0000720using CLWinogradConvolutionLayerFastMathFixture16 = WinogradConvolutionLayerFastMathValidationFixture<CLTensor, CLAccessor, CLWinogradConvolutionLayer, half, float>;
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100721TEST_SUITE(Conv3x3)
722FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradConvolutionLayerFastMathFixture16, framework::DatasetMode::PRECOMMIT,
723 combine(combine(combine(datasets::SmallWinogradConvolutionLayer3x3Dataset(),
724 framework::dataset::make("DataType", { DataType::F16 })),
Michalis Spyrou80943252019-01-10 17:19:50 +0000725 ActivationFunctionsSmallDataset),
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100726 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
727{
728 // Validate output
729 validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f16);
730}
731
732FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradConvolutionLayerFastMathFixture16, framework::DatasetMode::NIGHTLY,
733 combine(combine(combine(datasets::LargeWinogradConvolutionLayer3x3Dataset(),
734 framework::dataset::make("DataType", { DataType::F16 })),
Manuel Bottini0d0028c2018-10-02 16:41:52 +0100735 ActivationFunctionsDataset),
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100736 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
737{
738 // Validate output
Vidhya Sudhan Loganathana25d16c2018-11-16 11:33:12 +0000739 validate(CLAccessor(_target), _reference, rel_tolerance_f16, tolerance_num, abs_tolerance_convolution_layer_f16);
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100740}
741TEST_SUITE_END() // Conv3x3
742
743TEST_SUITE(Conv3x1)
744FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradConvolutionLayerFastMathFixture16, framework::DatasetMode::PRECOMMIT,
745 combine(combine(combine(datasets::SmallWinogradConvolutionLayer3x1Dataset(),
746 framework::dataset::make("DataType", { DataType::F16 })),
Michalis Spyrou80943252019-01-10 17:19:50 +0000747 ActivationFunctionsSmallDataset),
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100748 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
749{
750 // Validate output
751 validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f16);
752}
753
754FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradConvolutionLayerFastMathFixture16, framework::DatasetMode::NIGHTLY,
755 combine(combine(combine(datasets::LargeWinogradConvolutionLayer3x1Dataset(),
756 framework::dataset::make("DataType", { DataType::F16 })),
Manuel Bottini0d0028c2018-10-02 16:41:52 +0100757 ActivationFunctionsDataset),
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100758 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
759{
760 // Validate output
Vidhya Sudhan Loganathana25d16c2018-11-16 11:33:12 +0000761 validate(CLAccessor(_target), _reference, rel_tolerance_f16, tolerance_num, abs_tolerance_convolution_layer_f16);
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100762}
763TEST_SUITE_END() // Conv3x1
764
765TEST_SUITE(Conv1x3)
766FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradConvolutionLayerFastMathFixture16, framework::DatasetMode::PRECOMMIT,
767 combine(combine(combine(datasets::SmallWinogradConvolutionLayer1x3Dataset(),
768 framework::dataset::make("DataType", { DataType::F16 })),
Michalis Spyrou80943252019-01-10 17:19:50 +0000769 ActivationFunctionsSmallDataset),
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100770 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
771{
772 // Validate output
773 validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f16);
774}
775
776FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradConvolutionLayerFastMathFixture16, framework::DatasetMode::NIGHTLY,
777 combine(combine(combine(datasets::LargeWinogradConvolutionLayer1x3Dataset(),
778 framework::dataset::make("DataType", { DataType::F16 })),
Manuel Bottini0d0028c2018-10-02 16:41:52 +0100779 ActivationFunctionsDataset),
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100780 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
781{
782 // Validate output
Vidhya Sudhan Loganathana25d16c2018-11-16 11:33:12 +0000783 validate(CLAccessor(_target), _reference, rel_tolerance_f16, tolerance_num, abs_tolerance_convolution_layer_f16);
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100784}
785TEST_SUITE_END() // Conv1x3
786
787TEST_SUITE(Conv5x5)
788FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradConvolutionLayerFastMathFixture16, framework::DatasetMode::PRECOMMIT,
789 combine(combine(combine(datasets::SmallWinogradConvolutionLayer5x5Dataset(),
790 framework::dataset::make("DataType", { DataType::F16 })),
Michalis Spyrou80943252019-01-10 17:19:50 +0000791 ActivationFunctionsSmallDataset),
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100792 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
793
794{
795 // Validate output
796 validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f16);
797}
798
799FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradConvolutionLayerFastMathFixture16, framework::DatasetMode::NIGHTLY,
800 combine(combine(combine(datasets::LargeWinogradConvolutionLayer5x5Dataset(),
801 framework::dataset::make("DataType", { DataType::F16 })),
Manuel Bottini0d0028c2018-10-02 16:41:52 +0100802 ActivationFunctionsDataset),
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100803 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
804
805{
806 // Validate output
Vidhya Sudhan Loganathana25d16c2018-11-16 11:33:12 +0000807 validate(CLAccessor(_target), _reference, rel_tolerance_f16, tolerance_num, abs_tolerance_convolution_layer_f16);
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100808}
809TEST_SUITE_END() // Conv5x5
810
811TEST_SUITE(Conv5x1)
812FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradConvolutionLayerFastMathFixture16, framework::DatasetMode::PRECOMMIT,
813 combine(combine(combine(datasets::SmallWinogradConvolutionLayer5x1Dataset(),
814 framework::dataset::make("DataType", { DataType::F16 })),
Michalis Spyrou80943252019-01-10 17:19:50 +0000815 ActivationFunctionsSmallDataset),
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100816 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
817
818{
819 // Validate output
820 validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f16);
821}
822
823FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradConvolutionLayerFastMathFixture16, framework::DatasetMode::NIGHTLY,
824 combine(combine(combine(datasets::LargeWinogradConvolutionLayer5x1Dataset(),
825 framework::dataset::make("DataType", { DataType::F16 })),
Manuel Bottini0d0028c2018-10-02 16:41:52 +0100826 ActivationFunctionsDataset),
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100827 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
828
829{
830 // Validate output
Vidhya Sudhan Loganathana25d16c2018-11-16 11:33:12 +0000831 validate(CLAccessor(_target), _reference, rel_tolerance_f16, tolerance_num, abs_tolerance_convolution_layer_f16);
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100832}
833TEST_SUITE_END() // Conv5x1
834
835TEST_SUITE(Conv1x5)
836FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradConvolutionLayerFastMathFixture16, framework::DatasetMode::PRECOMMIT,
837 combine(combine(combine(datasets::SmallWinogradConvolutionLayer1x5Dataset(),
838 framework::dataset::make("DataType", { DataType::F16 })),
Michalis Spyrou80943252019-01-10 17:19:50 +0000839 ActivationFunctionsSmallDataset),
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100840 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
841
842{
843 // Validate output
844 validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f16);
845}
846
847FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradConvolutionLayerFastMathFixture16, framework::DatasetMode::NIGHTLY,
848 combine(combine(combine(datasets::LargeWinogradConvolutionLayer1x5Dataset(),
849 framework::dataset::make("DataType", { DataType::F16 })),
Manuel Bottini0d0028c2018-10-02 16:41:52 +0100850 ActivationFunctionsDataset),
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100851 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
852
853{
854 // Validate output
Vidhya Sudhan Loganathana25d16c2018-11-16 11:33:12 +0000855 validate(CLAccessor(_target), _reference, rel_tolerance_f16, tolerance_num, abs_tolerance_convolution_layer_f16);
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100856}
857TEST_SUITE_END() // Conv1x5
858
859TEST_SUITE_END() // FP16
Vidhya Sudhan Loganathana25d16c2018-11-16 11:33:12 +0000860
Gian Marco Iodiced2fab732018-03-02 11:18:12 +0000861TEST_SUITE_END() // ConvolutionLayer
Gian Marco Iodice7e4b2392018-02-22 16:17:20 +0000862TEST_SUITE_END() // Winograd
863TEST_SUITE_END() // CL
Giorgio Arena1f9ca1d2018-03-01 11:13:45 +0000864} // namespace validation
865} // namespace test
866} // namespace arm_compute