blob: f933a287cc8d0e8ff586db7b67cf46427e335671 [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
Michele Di Giorgio875a7512019-02-27 14:26:51 +000057constexpr AbsoluteTolerance<float> tolerance_f32(0.002f);
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
Michele Di Giorgiof955d512019-02-27 14:26:51 +000084const auto SmallWinogradInputTransformDatasetNHWC_FP32 = framework::dataset::concat(SmallWinogradInputTransformDatasetNHWC,
85 framework::dataset::concat(datasets::SmallWinogradInputTransformDataset1x2_1x7(),
86 framework::dataset::concat(datasets::SmallWinogradInputTransformDataset2x1_7x1(),
87 datasets::SmallWinogradInputTransformDataset2x2_7x7())));
88
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +010089const auto LargeWinogradInputTransformDatasetNCHW =
90 framework::dataset::concat(datasets::LargeWinogradInputTransformDataset2x2_3x3(),
91 framework::dataset::concat(datasets::LargeWinogradInputTransformDataset2x1_3x1(),
92 framework::dataset::concat(datasets::LargeWinogradInputTransformDataset1x2_1x3(),
93 framework::dataset::concat(datasets::LargeWinogradInputTransformDataset4x4_3x3(),
94 framework::dataset::concat(datasets::LargeWinogradInputTransformDataset4x1_3x1(),
95 framework::dataset::concat(datasets::LargeWinogradInputTransformDataset1x4_1x3(),
Gian Marco Iodice876be2a2018-07-03 12:22:09 +010096 framework::dataset::concat(datasets::LargeWinogradInputTransformDataset4x4_5x5(),
97 framework::dataset::concat(datasets::LargeWinogradInputTransformDataset4x1_5x1(),
98 datasets::LargeWinogradInputTransformDataset1x4_1x5()))))))));
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +010099
100const auto LargeWinogradInputTransformDatasetNHWC =
101 framework::dataset::concat(datasets::LargeWinogradInputTransformDataset4x4_3x3(),
Gian Marco Iodiced28b7512018-07-06 12:59:28 +0100102 framework::dataset::concat(datasets::LargeWinogradInputTransformDataset4x4_5x5(),
103 framework::dataset::concat(datasets::LargeWinogradInputTransformDataset4x1_5x1(),
104 datasets::LargeWinogradInputTransformDataset1x4_1x5())));
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100105
Michele Di Giorgiof955d512019-02-27 14:26:51 +0000106const auto LargeWinogradInputTransformDatasetNHWC_FP32 =
107 framework::dataset::concat(LargeWinogradInputTransformDatasetNHWC,
108 framework::dataset::concat(datasets::LargeWinogradInputTransformDataset1x2_1x7(),
109 framework::dataset::concat(datasets::LargeWinogradInputTransformDataset2x1_7x1(),
110 (datasets::LargeWinogradInputTransformDataset2x2_7x7()))));
111
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100112// Filter transform
113const auto SmallWinogradFilterTransformDatasetNCHW =
114 framework::dataset::concat(combine(datasets::Small3x3Shapes(), framework::dataset::make("OutputTile", { Size2D(2U, 2U), Size2D(4U, 4U) })),
115 framework::dataset::concat(combine(datasets::Small3x1Shapes(), framework::dataset::make("OutputTile", { Size2D(2U, 1U), Size2D(4U, 1U) })),
116 framework::dataset::concat(combine(datasets::Small1x3Shapes(), framework::dataset::make("OutputTile", { Size2D(1U, 2U), Size2D(1U, 4U) })),
Gian Marco Iodice876be2a2018-07-03 12:22:09 +0100117 framework::dataset::concat(combine(datasets::Small5x5Shapes(), framework::dataset::make("OutputTile", { Size2D(4U, 4U) })),
118 framework::dataset::concat(combine(datasets::Small5x1Shapes(), framework::dataset::make("OutputTile", { Size2D(4U, 1U) })),
119 combine(datasets::Small1x5Shapes(), framework::dataset::make("OutputTile", { Size2D(1U, 4U) })))))));
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100120
121const auto SmallWinogradFilterTransformDatasetNHWC =
122 framework::dataset::concat(combine(datasets::Small3x3Shapes(), framework::dataset::make("OutputTile", { Size2D(4U, 4U) })),
Giorgio Arena149fdf32018-07-04 17:03:33 +0100123 framework::dataset::concat(combine(datasets::Small3x1Shapes(), framework::dataset::make("OutputTile", { Size2D(4U, 1U) })),
124 framework::dataset::concat(combine(datasets::Small1x3Shapes(), framework::dataset::make("OutputTile", { Size2D(1U, 4U) })),
Gian Marco Iodiced28b7512018-07-06 12:59:28 +0100125 framework::dataset::concat(combine(datasets::Small5x5Shapes(), framework::dataset::make("OutputTile", { Size2D(4U, 4U) })),
126 framework::dataset::concat(combine(datasets::Small5x1Shapes(), framework::dataset::make("OutputTile", { Size2D(4U, 1U) })),
Michele Di Giorgiof955d512019-02-27 14:26:51 +0000127 (combine(datasets::Small1x5Shapes(), framework::dataset::make("OutputTile", { Size2D(1U, 4U) }))))))));
128
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100129
130const auto LargeWinogradFilterTransformDatasetNCHW =
131 framework::dataset::concat(combine(datasets::Large3x3Shapes(), framework::dataset::make("OutputTile", { Size2D(2U, 2U), Size2D(4U, 4U) })),
132 framework::dataset::concat(combine(datasets::Large3x1Shapes(), framework::dataset::make("OutputTile", { Size2D(2U, 1U), Size2D(4U, 1U) })),
133 framework::dataset::concat(combine(datasets::Large1x3Shapes(), framework::dataset::make("OutputTile", { Size2D(1U, 2U), Size2D(1U, 4U) })),
Gian Marco Iodice876be2a2018-07-03 12:22:09 +0100134 framework::dataset::concat(combine(datasets::Large5x5Shapes(), framework::dataset::make("OutputTile", { Size2D(4U, 4U) })),
135 framework::dataset::concat(combine(datasets::Large5x1Shapes(), framework::dataset::make("OutputTile", { Size2D(4U, 1U) })),
136 combine(datasets::Large1x5Shapes(), framework::dataset::make("OutputTile", { Size2D(1U, 4U) })))))));
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100137
138const auto LargeWinogradFilterTransformDatasetNHWC =
139 framework::dataset::concat(combine(datasets::Large3x3Shapes(), framework::dataset::make("OutputTile", { Size2D(4U, 4U) })),
Gian Marco Iodiced28b7512018-07-06 12:59:28 +0100140 framework::dataset::concat(combine(datasets::Large3x1Shapes(), framework::dataset::make("OutputTile", { Size2D(4U, 1U) })),
141 framework::dataset::concat(combine(datasets::Large1x3Shapes(), framework::dataset::make("OutputTile", { Size2D(1U, 4U) })),
142 framework::dataset::concat(combine(datasets::Large5x5Shapes(), framework::dataset::make("OutputTile", { Size2D(4U, 4U) })),
143 framework::dataset::concat(combine(datasets::Large5x1Shapes(), framework::dataset::make("OutputTile", { Size2D(4U, 1U) })),
144 combine(datasets::Large1x5Shapes(), framework::dataset::make("OutputTile", { Size2D(1U, 4U) })))))));
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100145
146// Output transform
147const auto SmallWinogradOutputTransformDatasetNCHW = datasets::SmallWinogradOutputTransformDatasetNCHW();
148
149const auto SmallWinogradOutputTransformDatasetNHWC = datasets::SmallWinogradOutputTransformDatasetNHWC();
150
151const auto LargeWinogradOutputTransformDatasetNCHW = datasets::LargeWinogradOutputTransformDatasetNCHW();
152
153const auto LargeWinogradOutputTransformDatasetNHWC = datasets::LargeWinogradOutputTransformDatasetNHWC();
Manuel Bottini0d0028c2018-10-02 16:41:52 +0100154
155//Activation Functions
156const auto ActivationFunctionsDataset = framework::dataset::make("ActivationInfo",
157{
158 ActivationLayerInfo(),
159 ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::RELU),
160 ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::BOUNDED_RELU),
161 ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::LU_BOUNDED_RELU),
Georgios Pinitas9d6a31c2019-02-25 14:33:25 +0000162 ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::LEAKY_RELU)
Manuel Bottini0d0028c2018-10-02 16:41:52 +0100163});
Michalis Spyrou80943252019-01-10 17:19:50 +0000164const auto ActivationFunctionsSmallDataset = framework::dataset::make("ActivationInfo",
165{
166 ActivationLayerInfo(),
167 ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::LU_BOUNDED_RELU),
Georgios Pinitas9d6a31c2019-02-25 14:33:25 +0000168 ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::LEAKY_RELU),
169 ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::SOFT_RELU)
Michalis Spyrou80943252019-01-10 17:19:50 +0000170});
Gian Marco Iodice7e4b2392018-02-22 16:17:20 +0000171} // namespace
172
173using namespace arm_compute::misc::shape_calculator;
174
Giorgio Arena1f9ca1d2018-03-01 11:13:45 +0000175TEST_SUITE(CL)
176TEST_SUITE(Winograd)
177
178TEST_SUITE(InputTransform)
Gian Marco Iodice247f52c2018-03-22 11:24:56 +0000179DATA_TEST_CASE(Validate, framework::DatasetMode::ALL, zip(zip(zip(
Giorgio Arena1f9ca1d2018-03-01 11:13:45 +0000180 framework::dataset::make("InputInfo",{
181 TensorInfo(TensorShape(53U, 21U, 5U, 3U), 1, DataType::F16), // F16 not supported
182 TensorInfo(TensorShape(53U, 21U, 5U, 3U), 1, DataType::QASYMM8), // QASYMM8 not supported
183 TensorInfo(TensorShape(53U, 21U, 5U, 3U), 1, DataType::F32), // Kernel size not supported
184 TensorInfo(TensorShape(53U, 21U, 5U, 3U), 1, DataType::F32), // Strides not supported
Gian Marco Iodiced2fab732018-03-02 11:18:12 +0000185 TensorInfo(TensorShape(53U, 33U, 4U), 1, DataType::F32), // Padding needed
186 TensorInfo(TensorShape(34U, 42U, 7U, 3U), 1, DataType::F32), // Padding needed
187 TensorInfo(TensorShape(31U, 37U, 37U), 1, DataType::F32) // Padding needed
Giorgio Arena1f9ca1d2018-03-01 11:13:45 +0000188 }),
189 framework::dataset::make("OutputInfo", {
190 TensorInfo(TensorShape(5U, 5U, 16U, 3U), 1, DataType::F16),
191 TensorInfo(TensorShape(5U, 5U, 16U, 3U), 1, DataType::QASYMM8),
192 TensorInfo(TensorShape(5U, 5U, 16U, 3U), 1, DataType::F32),
193 TensorInfo(TensorShape(5U, 1U, 16U, 3U), 1, DataType::F32),
194 TensorInfo(TensorShape(4U, 442U, 16U), 1, DataType::F32),
195 TensorInfo(TensorShape(7U, 320U, 16U, 3U), 1, DataType::F32),
196 TensorInfo(TensorShape(37U, 304U, 16U), 1, DataType::F32)
197 })),
Gian Marco Iodice247f52c2018-03-22 11:24:56 +0000198 framework::dataset::make("WinogradInfo", {
199 WinogradInfo(Size2D(2, 2), Size2D(3, 3), Size2D(53U, 21U), PadStrideInfo(1, 1, 1, 0), DataLayout::NCHW),
200 WinogradInfo(Size2D(2, 2), Size2D(3, 3), Size2D(53U, 21U), PadStrideInfo(1, 1, 0, 0), DataLayout::NCHW),
201 WinogradInfo(Size2D(2, 2), Size2D(3, 3), Size2D(53U, 21U), PadStrideInfo(1, 1, 1, 1), DataLayout::NCHW),
202 WinogradInfo(Size2D(2, 2), Size2D(3, 3), Size2D(53U, 21U), PadStrideInfo(2, 1, 1, 1), DataLayout::NCHW),
203 WinogradInfo(Size2D(2, 2), Size2D(3, 3), Size2D(53U, 33U), PadStrideInfo(1, 1, 0, 1), DataLayout::NCHW),
204 WinogradInfo(Size2D(2, 2), Size2D(3, 3), Size2D(34U, 42U), PadStrideInfo(1, 1, 0, 0), DataLayout::NCHW),
205 WinogradInfo(Size2D(2, 2), Size2D(3, 3), Size2D(31U, 37U), PadStrideInfo(1, 1, 1, 1), DataLayout::NCHW)
Giorgio Arena1f9ca1d2018-03-01 11:13:45 +0000206 })),
Gian Marco Iodiced2fab732018-03-02 11:18:12 +0000207 framework::dataset::make("Expected", { false, false, false, false, false, false, false })),
Gian Marco Iodice247f52c2018-03-22 11:24:56 +0000208 input_info, output_info, winograd_info, expected)
Giorgio Arena1f9ca1d2018-03-01 11:13:45 +0000209{
Gian Marco Iodice247f52c2018-03-22 11:24:56 +0000210 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 +0000211}
Giorgio Arena1f9ca1d2018-03-01 11:13:45 +0000212
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100213using CLWinogradInputTransformFixtureFP32 = WinogradInputTransformValidationFixture<CLTensor, CLAccessor, CLWinogradInputTransform, float>;
214using CLWinogradInputTransformFixtureFP16 = WinogradInputTransformValidationFixture<CLTensor, CLAccessor, CLWinogradInputTransform, half>;
Giorgio Arena1f9ca1d2018-03-01 11:13:45 +0000215
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100216TEST_SUITE(NCHW)
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100217TEST_SUITE(FP32)
218FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradInputTransformFixtureFP32, framework::DatasetMode::PRECOMMIT, combine(combine(SmallWinogradInputTransformDatasetNCHW,
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100219 framework::dataset::make("DataLayout", { DataLayout::NCHW })),
220 framework::dataset::make("DataType", { DataType::F32 })))
Giorgio Arena1f9ca1d2018-03-01 11:13:45 +0000221{
Giorgio Arenafe5ef382018-04-17 10:14:10 +0100222 validate(CLAccessor(_target), _reference, tolerance_f32);
Giorgio Arena1f9ca1d2018-03-01 11:13:45 +0000223}
224
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100225FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradInputTransformFixtureFP32, framework::DatasetMode::NIGHTLY, combine(combine(LargeWinogradInputTransformDatasetNCHW,
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100226 framework::dataset::make("DataLayout", { DataLayout::NCHW })),
227 framework::dataset::make("DataType", { DataType::F32 })))
Giorgio Arena1f9ca1d2018-03-01 11:13:45 +0000228{
Giorgio Arenafe5ef382018-04-17 10:14:10 +0100229 validate(CLAccessor(_target), _reference, tolerance_f32);
Giorgio Arena1f9ca1d2018-03-01 11:13:45 +0000230}
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100231TEST_SUITE_END() // FP32
232
233TEST_SUITE(FP16)
234FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradInputTransformFixtureFP16, framework::DatasetMode::PRECOMMIT, combine(combine(SmallWinogradInputTransformDatasetNCHW,
235 framework::dataset::make("DataLayout", { DataLayout::NCHW })),
236 framework::dataset::make("DataType", { DataType::F16 })))
237{
238 validate(CLAccessor(_target), _reference, tolerance_f16);
239}
240
241FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradInputTransformFixtureFP16, framework::DatasetMode::NIGHTLY, combine(combine(LargeWinogradInputTransformDatasetNCHW,
242 framework::dataset::make("DataLayout", { DataLayout::NCHW })),
243 framework::dataset::make("DataType", { DataType::F16 })))
244{
245 validate(CLAccessor(_target), _reference, tolerance_f16);
246}
247TEST_SUITE_END() // FP16
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100248TEST_SUITE_END() // NCHW
249
250TEST_SUITE(NHWC)
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100251TEST_SUITE(FP16)
252FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradInputTransformFixtureFP16, framework::DatasetMode::PRECOMMIT, combine(combine(SmallWinogradInputTransformDatasetNHWC,
253 framework::dataset::make("DataLayout", { DataLayout::NHWC })),
254 framework::dataset::make("DataType", { DataType::F16 })))
255{
256 validate(CLAccessor(_target), _reference, tolerance_f16);
257}
258
259FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradInputTransformFixtureFP16, framework::DatasetMode::NIGHTLY, combine(combine(LargeWinogradInputTransformDatasetNHWC,
260 framework::dataset::make("DataLayout", { DataLayout::NHWC })),
261 framework::dataset::make("DataType", { DataType::F16 })))
262{
263 validate(CLAccessor(_target), _reference, tolerance_f16);
264}
265TEST_SUITE_END() // FP16
266TEST_SUITE(FP32)
Michele Di Giorgiof955d512019-02-27 14:26:51 +0000267FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradInputTransformFixtureFP32, framework::DatasetMode::PRECOMMIT, combine(combine(SmallWinogradInputTransformDatasetNHWC_FP32,
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100268 framework::dataset::make("DataLayout", { DataLayout::NHWC })),
269 framework::dataset::make("DataType", { DataType::F32 })))
270{
271 validate(CLAccessor(_target), _reference, tolerance_f32);
272}
273
Michele Di Giorgiof955d512019-02-27 14:26:51 +0000274FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradInputTransformFixtureFP32, framework::DatasetMode::NIGHTLY, combine(combine(LargeWinogradInputTransformDatasetNHWC_FP32,
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100275 framework::dataset::make("DataLayout", { DataLayout::NHWC })),
276 framework::dataset::make("DataType", { DataType::F32 })))
277{
278 validate(CLAccessor(_target), _reference, tolerance_f32);
279}
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100280TEST_SUITE_END() // FP32
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100281TEST_SUITE_END() // NHWC
Gian Marco Iodice7e4b2392018-02-22 16:17:20 +0000282TEST_SUITE_END() // InputTransform
Giorgio Arena1f9ca1d2018-03-01 11:13:45 +0000283
Gian Marco Iodice7e4b2392018-02-22 16:17:20 +0000284TEST_SUITE(FilterTransform)
Giorgio Arena2d9de0a2018-03-15 17:58:20 +0000285DATA_TEST_CASE(Validate, framework::DatasetMode::ALL, zip(zip(zip(
Gian Marco Iodice7e4b2392018-02-22 16:17:20 +0000286 framework::dataset::make("InputInfo",{
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100287 TensorInfo(TensorShape(3U, 3U, 5U, 3U), 1, DataType::F16), // F16 supported
Gian Marco Iodice7e4b2392018-02-22 16:17:20 +0000288 TensorInfo(TensorShape(3U, 3U, 5U, 3U), 1, DataType::QASYMM8), // QASYMM8 not supported
289 TensorInfo(TensorShape(5U, 5U, 5U, 3U), 1, DataType::F32), // Kernel size not supported
Giorgio Arena2d9de0a2018-03-15 17:58:20 +0000290 TensorInfo(TensorShape(3U, 3U), 1, DataType::F32), // Output tile not supported
Gian Marco Iodice7e4b2392018-02-22 16:17:20 +0000291 TensorInfo(TensorShape(3U, 3U, 5U, 3U), 1, DataType::F32), // valid
292 TensorInfo(TensorShape(3U, 3U, 37U, 2U), 1, DataType::F32), // valid
293 TensorInfo(TensorShape(3U, 3U, 37U, 22U), 1, DataType::F32) // valid
294 }),
295 framework::dataset::make("OutputInfo", {
296 TensorInfo(TensorShape(3U, 5U, 16U), 1, DataType::F16),
297 TensorInfo(TensorShape(3U, 5U, 16U), 1, DataType::QASYMM8),
298 TensorInfo(TensorShape(3U, 5U, 16U), 1, DataType::F32),
299 TensorInfo(TensorShape(1U, 1U, 16U), 1, DataType::F32),
300 TensorInfo(TensorShape(3U, 5U, 16U), 1, DataType::F32),
301 TensorInfo(TensorShape(2U, 37U, 16U), 1, DataType::F32),
Giorgio Arena2d9de0a2018-03-15 17:58:20 +0000302 TensorInfo(TensorShape(22U, 37U, 36U), 1, DataType::F32)
Gian Marco Iodice7e4b2392018-02-22 16:17:20 +0000303 })),
Gian Marco Iodice247f52c2018-03-22 11:24:56 +0000304 framework::dataset::make("WinogradInfo", {
305 WinogradInfo(Size2D(2U, 2U), Size2D(3U, 3U), Size2D() /* Not needed */, PadStrideInfo() /* Not needed */, DataLayout::NCHW /* Not needed */ ),
306 WinogradInfo(Size2D(2U, 2U), Size2D(3U, 3U), Size2D() /* Not needed */, PadStrideInfo() /* Not needed */, DataLayout::NCHW /* Not needed */ ),
307 WinogradInfo(Size2D(2U, 2U), Size2D(3U, 3U), Size2D() /* Not needed */, PadStrideInfo() /* Not needed */, DataLayout::NCHW /* Not needed */ ),
308 WinogradInfo(Size2D(3U, 3U), Size2D(3U, 3U), Size2D() /* Not needed */, PadStrideInfo() /* Not needed */, DataLayout::NCHW /* Not needed */ ),
309 WinogradInfo(Size2D(2U, 2U), Size2D(3U, 3U), Size2D() /* Not needed */, PadStrideInfo() /* Not needed */, DataLayout::NCHW /* Not needed */ ),
310 WinogradInfo(Size2D(2U, 2U), Size2D(3U, 3U), Size2D() /* Not needed */, PadStrideInfo() /* Not needed */, DataLayout::NCHW /* Not needed */ ),
311 WinogradInfo(Size2D(4U, 4U), Size2D(3U, 3U), Size2D() /* Not needed */, PadStrideInfo() /* Not needed */, DataLayout::NCHW /* Not needed */ )
312 })),
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100313 framework::dataset::make("Expected", { true, false, false, false, true, true, true })),
Gian Marco Iodice247f52c2018-03-22 11:24:56 +0000314 input_info, output_info, winograd_info, expected)
Gian Marco Iodice7e4b2392018-02-22 16:17:20 +0000315{
Gian Marco Iodice247f52c2018-03-22 11:24:56 +0000316 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 +0000317}
Giorgio Arena1f9ca1d2018-03-01 11:13:45 +0000318
Gian Marco Iodice7e4b2392018-02-22 16:17:20 +0000319using CLWinogradFilterTransform = CLSynthetizeFunctionWithZeroConstantBorder<CLWinogradFilterTransformKernel, 0>;
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100320using CLWinogradFilterTransformFixtureFP32 = WinogradFilterTransformValidationFixture<CLTensor, CLAccessor, CLWinogradFilterTransform, float>;
321using CLWinogradFilterTransformFixtureFP16 = WinogradFilterTransformValidationFixture<CLTensor, CLAccessor, CLWinogradFilterTransform, half>;
Gian Marco Iodice7e4b2392018-02-22 16:17:20 +0000322
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100323TEST_SUITE(NCHW)
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100324TEST_SUITE(FP32)
325FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradFilterTransformFixtureFP32, framework::DatasetMode::PRECOMMIT,
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100326 combine(combine(SmallWinogradFilterTransformDatasetNCHW,
327 framework::dataset::make("DataLayout", { DataLayout::NCHW })),
328 framework::dataset::make("DataType", { DataType::F32 })))
Gian Marco Iodice7e4b2392018-02-22 16:17:20 +0000329{
330 // Validate output
331 validate(CLAccessor(_target), _reference, tolerance_f32);
332}
333
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100334FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradFilterTransformFixtureFP32, framework::DatasetMode::NIGHTLY,
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100335 combine(combine(LargeWinogradFilterTransformDatasetNCHW,
336 framework::dataset::make("DataLayout", { DataLayout::NCHW })),
337 framework::dataset::make("DataType", { DataType::F32 })))
338{
339 // Validate output
340 validate(CLAccessor(_target), _reference, tolerance_f32);
341}
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100342TEST_SUITE_END() // FP32
343TEST_SUITE(FP16)
344FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradFilterTransformFixtureFP16, framework::DatasetMode::PRECOMMIT,
345 combine(combine(SmallWinogradFilterTransformDatasetNCHW,
346 framework::dataset::make("DataLayout", { DataLayout::NCHW })),
347 framework::dataset::make("DataType", { DataType::F16 })))
348{
349 // Validate output
350 validate(CLAccessor(_target), _reference, tolerance_f16);
351}
352
353FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradFilterTransformFixtureFP16, framework::DatasetMode::NIGHTLY,
354 combine(combine(LargeWinogradFilterTransformDatasetNCHW,
355 framework::dataset::make("DataLayout", { DataLayout::NCHW })),
356 framework::dataset::make("DataType", { DataType::F16 })))
357{
358 // Validate output
359 validate(CLAccessor(_target), _reference, tolerance_f16);
360}
361TEST_SUITE_END() // FP16
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100362TEST_SUITE_END() // NCHW
363
364TEST_SUITE(NHWC)
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100365TEST_SUITE(FP16)
366FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradFilterTransformFixtureFP16, framework::DatasetMode::PRECOMMIT,
367 combine(combine(SmallWinogradFilterTransformDatasetNHWC,
368 framework::dataset::make("DataLayout", { DataLayout::NHWC })),
369 framework::dataset::make("DataType", { DataType::F16 })))
370{
371 // Validate output
372 validate(CLAccessor(_target), _reference, tolerance_f16);
373}
374
375FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradFilterTransformFixtureFP16, framework::DatasetMode::NIGHTLY,
376 combine(combine(LargeWinogradFilterTransformDatasetNHWC,
377 framework::dataset::make("DataLayout", { DataLayout::NHWC })),
378 framework::dataset::make("DataType", { DataType::F16 })))
379{
380 // Validate output
381 validate(CLAccessor(_target), _reference, tolerance_f16);
382}
383TEST_SUITE_END() // FP16
384TEST_SUITE(FP32)
385FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradFilterTransformFixtureFP32, framework::DatasetMode::PRECOMMIT,
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100386 combine(combine(SmallWinogradFilterTransformDatasetNHWC,
387 framework::dataset::make("DataLayout", { DataLayout::NHWC })),
388 framework::dataset::make("DataType", { DataType::F32 })))
Gian Marco Iodice7e4b2392018-02-22 16:17:20 +0000389{
390 // Validate output
391 validate(CLAccessor(_target), _reference, tolerance_f32);
392}
Gian Marco Iodiced2fab732018-03-02 11:18:12 +0000393
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100394FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradFilterTransformFixtureFP32, framework::DatasetMode::NIGHTLY,
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100395 combine(combine(LargeWinogradFilterTransformDatasetNHWC,
396 framework::dataset::make("DataLayout", { DataLayout::NHWC })),
397 framework::dataset::make("DataType", { DataType::F32 })))
398{
399 // Validate output
400 validate(CLAccessor(_target), _reference, tolerance_f32);
401}
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100402TEST_SUITE_END() // FP32
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100403TEST_SUITE_END() // NHWC
Gian Marco Iodice7e4b2392018-02-22 16:17:20 +0000404TEST_SUITE_END() // FilterTransform
405
Gian Marco Iodiced2fab732018-03-02 11:18:12 +0000406TEST_SUITE(OutputTransform)
Gian Marco Iodice247f52c2018-03-22 11:24:56 +0000407DATA_TEST_CASE(Validate, framework::DatasetMode::ALL, zip(zip(zip(zip(
Gian Marco Iodiced2fab732018-03-02 11:18:12 +0000408 framework::dataset::make("InputInfo",{
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100409 TensorInfo(TensorShape(512U, 49U, 16U, 5U), 1, DataType::F16), // F16 supported
Gian Marco Iodice247f52c2018-03-22 11:24:56 +0000410 TensorInfo(TensorShape(512U, 49U, 16U, 5U), 1, DataType::QASYMM8), // QASYMM8 not supported
411 TensorInfo(TensorShape(512U, 49U, 16U, 5U), 1, DataType::F32), // Kernel size not supported
412 TensorInfo(TensorShape(512U, 49U, 16U, 5U), 1, DataType::F32), // Valid
413 TensorInfo(TensorShape(13U, 108U, 16U, 4U), 1, DataType::F32), // Padding needed
414 TensorInfo(TensorShape(7U, 20U, 16U, 7U), 1, DataType::F32), // Valid
Gian Marco Iodicee52a3002018-04-11 15:59:10 +0100415 TensorInfo(TensorShape(7U, 20U, 16U, 7U), 1, DataType::F32), // Wrong WinogradInfo
416 TensorInfo(TensorShape(7U, 256U, 36U, 3U), 1, DataType::F32), // Valid
417 TensorInfo(TensorShape(7U, 256U, 16U, 3U), 1, DataType::F32) // Wrong number of batches
Gian Marco Iodiced2fab732018-03-02 11:18:12 +0000418 }),
419 framework::dataset::make("BiasInfo", {
Gian Marco Iodice247f52c2018-03-22 11:24:56 +0000420 TensorInfo(TensorShape(512U), 1, DataType::F16),
421 TensorInfo(TensorShape(512U), 1, DataType::QASYMM8),
422 TensorInfo(TensorShape(512U), 1, DataType::F32),
Gian Marco Iodiced2fab732018-03-02 11:18:12 +0000423 TensorInfo(TensorShape(512U), 1, DataType::F32),
424 TensorInfo(TensorShape(13U), 1, DataType::F32),
425 TensorInfo(TensorShape(7U), 1, DataType::F32),
Gian Marco Iodicee52a3002018-04-11 15:59:10 +0100426 TensorInfo(TensorShape(7U), 1, DataType::F32),
427 TensorInfo(TensorShape(7U), 1, DataType::F32),
Gian Marco Iodice247f52c2018-03-22 11:24:56 +0000428 TensorInfo(TensorShape(7U), 1, DataType::F32)
Gian Marco Iodiced2fab732018-03-02 11:18:12 +0000429 })),
430 framework::dataset::make("OutputInfo", {
Gian Marco Iodice247f52c2018-03-22 11:24:56 +0000431 TensorInfo(TensorShape(14U, 14U, 512U, 5U), 1, DataType::F16),
432 TensorInfo(TensorShape(14U, 14U, 512U, 5U), 1, DataType::QASYMM8),
433 TensorInfo(TensorShape(14U, 14U, 512U, 5U), 1, DataType::F32),
434 TensorInfo(TensorShape(14U, 14U, 512U, 5U), 1, DataType::F32),
435 TensorInfo(TensorShape(17U, 23U, 13U, 4U), 1, DataType::F32),
436 TensorInfo(TensorShape(8U, 10U, 7U, 7U), 1, DataType::F32),
Gian Marco Iodicee52a3002018-04-11 15:59:10 +0100437 TensorInfo(TensorShape(7U, 9U, 7U, 7U), 1, DataType::F32),
438 TensorInfo(TensorShape(64U, 64U, 7U, 3U), 1, DataType::F32),
439 TensorInfo(TensorShape(64U, 64U, 7U, 3U), 1, DataType::F32)
Gian Marco Iodiced2fab732018-03-02 11:18:12 +0000440 })),
Gian Marco Iodice247f52c2018-03-22 11:24:56 +0000441 framework::dataset::make("WinogradInfo", {
442 WinogradInfo(Size2D(2U, 2U), Size2D(3U, 3U), Size2D(14U, 14U), PadStrideInfo(1, 1, 1, 1), DataLayout::NCHW),
443 WinogradInfo(Size2D(2U, 2U), Size2D(3U, 3U), Size2D(14U, 14U), PadStrideInfo(1, 1, 1, 1), DataLayout::NCHW),
444 WinogradInfo(Size2D(2U, 2U), Size2D(5U, 5U), Size2D(14U, 14U), PadStrideInfo(1, 1, 1, 1), DataLayout::NCHW),
445 WinogradInfo(Size2D(2U, 2U), Size2D(3U, 3U), Size2D(14U, 14U), PadStrideInfo(1, 1, 1, 1), DataLayout::NCHW),
446 WinogradInfo(Size2D(2U, 2U), Size2D(3U, 3U), Size2D(17U, 23U), PadStrideInfo(1, 1, 1, 1), DataLayout::NCHW),
447 WinogradInfo(Size2D(2U, 2U), Size2D(3U, 3U), Size2D(8U, 10U), PadStrideInfo(1, 1, 1, 1), DataLayout::NCHW),
448 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 +0100449 WinogradInfo(Size2D(4U, 4U), Size2D(3U, 3U), Size2D(64U, 64U), PadStrideInfo(1, 1, 1, 1), DataLayout::NCHW),
450 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 +0000451 })),
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100452 framework::dataset::make("Expected", { true, false, false, true, false, true, false, true, false })),
Gian Marco Iodice247f52c2018-03-22 11:24:56 +0000453 input_info, bias_info, output_info, winograd_info, expected)
Gian Marco Iodiced2fab732018-03-02 11:18:12 +0000454{
Gian Marco Iodice247f52c2018-03-22 11:24:56 +0000455 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 +0000456}
Gian Marco Iodiced2fab732018-03-02 11:18:12 +0000457
458using CLWinogradOutputTransform = CLSynthetizeFunctionWithZeroConstantBorder<CLWinogradOutputTransformKernel, 0>;
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100459using CLWinogradOutputTransformFixtureFP32 = WinogradOutputTransformValidationFixture<CLTensor, CLAccessor, CLWinogradOutputTransform, float>;
460using CLWinogradOutputTransformFixtureFP16 = WinogradOutputTransformValidationFixture<CLTensor, CLAccessor, CLWinogradOutputTransform, half>;
Gian Marco Iodiced2fab732018-03-02 11:18:12 +0000461
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100462TEST_SUITE(NCHW)
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100463TEST_SUITE(FP16)
464FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradOutputTransformFixtureFP16, framework::DatasetMode::ALL,
Manuel Bottini0d0028c2018-10-02 16:41:52 +0100465 combine(combine(SmallWinogradOutputTransformDatasetNCHW,
466 framework::dataset::make("DataType", { DataType::F16 })),
467 framework::dataset::make("ActivationInfo",{ ActivationLayerInfo() }) ))
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100468{
469 // Validate output
470 validate(CLAccessor(_target), _reference, tolerance_f16);
471}
Gian Marco Iodiced2fab732018-03-02 11:18:12 +0000472
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100473FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradOutputTransformFixtureFP16, framework::DatasetMode::NIGHTLY,
Manuel Bottini0d0028c2018-10-02 16:41:52 +0100474 combine(combine(LargeWinogradOutputTransformDatasetNCHW,
475 framework::dataset::make("DataType", { DataType::F16 })),
476 framework::dataset::make("ActivationInfo",{ ActivationLayerInfo() }) ))
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100477{
478 // Validate output
479 validate(CLAccessor(_target), _reference, tolerance_f16);
480}
481TEST_SUITE_END() // FP16
482TEST_SUITE(FP32)
483FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradOutputTransformFixtureFP32, framework::DatasetMode::ALL,
Manuel Bottini0d0028c2018-10-02 16:41:52 +0100484 combine(combine(SmallWinogradOutputTransformDatasetNCHW,
485 framework::dataset::make("DataType", { DataType::F32 })),
486 framework::dataset::make("ActivationInfo",{ ActivationLayerInfo() }) ))
Gian Marco Iodiced2fab732018-03-02 11:18:12 +0000487{
488 // Validate output
489 validate(CLAccessor(_target), _reference, tolerance_f32);
490}
491
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100492FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradOutputTransformFixtureFP32, framework::DatasetMode::NIGHTLY,
Manuel Bottini0d0028c2018-10-02 16:41:52 +0100493 combine(combine(LargeWinogradOutputTransformDatasetNCHW,
494 framework::dataset::make("DataType", { DataType::F32 })),
495 framework::dataset::make("ActivationInfo",{ ActivationLayerInfo() }) ))
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100496{
497 // Validate output
498 validate(CLAccessor(_target), _reference, tolerance_f32);
499}
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100500TEST_SUITE_END() // FP32
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100501TEST_SUITE_END() // NCHW
502
503TEST_SUITE(NHWC)
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100504TEST_SUITE(FP16)
505FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradOutputTransformFixtureFP16, framework::DatasetMode::ALL,
Manuel Bottini0d0028c2018-10-02 16:41:52 +0100506 combine(combine(SmallWinogradOutputTransformDatasetNHWC,
507 framework::dataset::make("DataType", { DataType::F16 })),
508 framework::dataset::make("ActivationInfo",{ ActivationLayerInfo() }) ))
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100509{
510 // Validate output
511 validate(CLAccessor(_target), _reference, tolerance_f16);
512}
513
514FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradOutputTransformFixtureFP16, framework::DatasetMode::NIGHTLY,
Manuel Bottini0d0028c2018-10-02 16:41:52 +0100515 combine(combine(LargeWinogradOutputTransformDatasetNHWC,
516 framework::dataset::make("DataType", { DataType::F16 })),
517 framework::dataset::make("ActivationInfo",{ ActivationLayerInfo() }) ))
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100518{
519 // Validate output
520 validate(CLAccessor(_target), _reference, tolerance_f16);
521}
522TEST_SUITE_END() // FP16
523TEST_SUITE(FP32)
524FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradOutputTransformFixtureFP32, framework::DatasetMode::ALL,
Manuel Bottini0d0028c2018-10-02 16:41:52 +0100525 combine(combine(SmallWinogradOutputTransformDatasetNHWC,
526 framework::dataset::make("DataType", { DataType::F32 })),
527 framework::dataset::make("ActivationInfo",{ ActivationLayerInfo() }) ))
Gian Marco Iodiced2fab732018-03-02 11:18:12 +0000528{
529 // Validate output
530 validate(CLAccessor(_target), _reference, tolerance_f32);
531}
532
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100533FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradOutputTransformFixtureFP32, framework::DatasetMode::NIGHTLY,
Manuel Bottini0d0028c2018-10-02 16:41:52 +0100534 combine(combine(LargeWinogradOutputTransformDatasetNHWC,
535 framework::dataset::make("DataType", { DataType::F32 })),
536 framework::dataset::make("ActivationInfo",{ ActivationLayerInfo() }) ))
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100537{
538 // Validate output
539 validate(CLAccessor(_target), _reference, tolerance_f32);
540}
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100541TEST_SUITE_END() // FP32
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100542TEST_SUITE_END() // NHWC
Gian Marco Iodiced2fab732018-03-02 11:18:12 +0000543TEST_SUITE_END() // OutputTransform
544
545TEST_SUITE(ConvolutionLayer)
Gian Marco Iodiced2fab732018-03-02 11:18:12 +0000546DATA_TEST_CASE(Validate, framework::DatasetMode::ALL, zip(zip(zip(zip(zip(
547 framework::dataset::make("InputInfo", {
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100548 TensorInfo(TensorShape(17U, 31U, 2U), 1, DataType::F16), // Insufficient padding
Gian Marco Iodiced2fab732018-03-02 11:18:12 +0000549 TensorInfo(TensorShape(17U, 31U, 2U), 1, DataType::F32), // Datatype mismatch
550 TensorInfo(TensorShape(23U, 27U, 5U, 4U), 1, DataType::F32), // Stride y not supported
551 TensorInfo(TensorShape(16U, 16U, 8U), 1, DataType::F32), // Padding needed
552 TensorInfo(TensorShape(33U, 27U, 7U, 4U), 1, DataType::F32) // Kernel size not supported
553 }),
554 framework::dataset::make("WeightsInfo", {
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100555 TensorInfo(TensorShape(3U, 3U, 2U, 19U), 1, DataType::F16),
Gian Marco Iodiced2fab732018-03-02 11:18:12 +0000556 TensorInfo(TensorShape(3U, 3U, 2U, 19U), 1, DataType::QASYMM8),
557 TensorInfo(TensorShape(3U, 3U, 5U, 21U), 1, DataType::F32),
558 TensorInfo(TensorShape(3U, 3U, 8U, 16U), 1, DataType::F32),
559 TensorInfo(TensorShape(5U, 5U, 7U, 16U), 1, DataType::F16)
560 })),
561 framework::dataset::make("BiasesInfo", {
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100562 TensorInfo(TensorShape(19U), 1, DataType::F16),
Gian Marco Iodiced2fab732018-03-02 11:18:12 +0000563 TensorInfo(TensorShape(19U), 1, DataType::F32),
564 TensorInfo(TensorShape(21U), 1, DataType::F32),
565 TensorInfo(TensorShape(16U), 1, DataType::F32),
566 TensorInfo(TensorShape(16U), 1, DataType::F32)
567 })),
568 framework::dataset::make("OutputInfo", {
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100569 TensorInfo(TensorShape(17U, 31U, 19U), 1, DataType::F16),
Gian Marco Iodiced2fab732018-03-02 11:18:12 +0000570 TensorInfo(TensorShape(15U, 15U, 19U), 1, DataType::F32),
571 TensorInfo(TensorShape(21U, 25U, 21U, 4U), 1, DataType::F32),
572 TensorInfo(TensorShape(16U, 16U, 16U), 1, DataType::F32),
573 TensorInfo(TensorShape(11U, 12U, 16U, 4U), 1, DataType::F32)
574 })),
575 framework::dataset::make("ConvInfo", {
576 PadStrideInfo(1, 1, 1, 1),
577 PadStrideInfo(1, 1, 1, 1),
578 PadStrideInfo(1, 2, 0, 0),
579 PadStrideInfo(1, 1, 1, 1),
580 PadStrideInfo(1, 1, 1, 0)
581 })),
582 framework::dataset::make("Expected", { false, false, false, false, false })),
583 input_info, weights_info, bias_info, output_info, conv_info, expected)
584{
585 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);
586}
Gian Marco Iodiced2fab732018-03-02 11:18:12 +0000587
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100588TEST_SUITE(FP32)
Gian Marco Iodice2213d4b2018-04-27 10:39:06 +0100589using CLWinogradConvolutionLayerFastMathFixture = WinogradConvolutionLayerFastMathValidationFixture<CLTensor, CLAccessor, CLWinogradConvolutionLayer, float>;
Gian Marco Iodice6cf188c2018-05-04 16:36:50 +0100590TEST_SUITE(Conv3x3)
Gian Marco Iodice2213d4b2018-04-27 10:39:06 +0100591FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradConvolutionLayerFastMathFixture, framework::DatasetMode::PRECOMMIT,
Pablo Tello7282d562018-06-14 15:35:49 +0100592 combine(combine(combine(datasets::SmallWinogradConvolutionLayer3x3Dataset(),
593 framework::dataset::make("DataType", { DataType::F32 })),
Michalis Spyrou80943252019-01-10 17:19:50 +0000594 ActivationFunctionsSmallDataset),
Giorgio Arenaea55f912018-07-12 15:41:35 +0100595 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
Gian Marco Iodice2213d4b2018-04-27 10:39:06 +0100596{
597 // Validate output
Gian Marco Iodice4497e812018-05-08 16:36:52 +0100598 validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f32);
Gian Marco Iodice2213d4b2018-04-27 10:39:06 +0100599}
600
601FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradConvolutionLayerFastMathFixture, framework::DatasetMode::NIGHTLY,
Pablo Tello7282d562018-06-14 15:35:49 +0100602 combine(combine(combine(datasets::LargeWinogradConvolutionLayer3x3Dataset(),
603 framework::dataset::make("DataType", { DataType::F32 })),
Manuel Bottini0d0028c2018-10-02 16:41:52 +0100604 ActivationFunctionsDataset),
Giorgio Arenaea55f912018-07-12 15:41:35 +0100605 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
Gian Marco Iodice2213d4b2018-04-27 10:39:06 +0100606{
607 // Validate output
Gian Marco Iodice4497e812018-05-08 16:36:52 +0100608 validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f32);
Gian Marco Iodice2213d4b2018-04-27 10:39:06 +0100609}
Gian Marco Iodice6cf188c2018-05-04 16:36:50 +0100610TEST_SUITE_END() // Conv3x3
611
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100612TEST_SUITE(Conv3x1)
613FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradConvolutionLayerFastMathFixture, framework::DatasetMode::PRECOMMIT,
614 combine(combine(combine(datasets::SmallWinogradConvolutionLayer3x1Dataset(),
615 framework::dataset::make("DataType", { DataType::F32 })),
Michalis Spyrou80943252019-01-10 17:19:50 +0000616 ActivationFunctionsSmallDataset),
Giorgio Arenaea55f912018-07-12 15:41:35 +0100617 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100618{
619 // Validate output
620 validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f32);
621}
622
623FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradConvolutionLayerFastMathFixture, framework::DatasetMode::NIGHTLY,
624 combine(combine(combine(datasets::LargeWinogradConvolutionLayer3x1Dataset(),
625 framework::dataset::make("DataType", { DataType::F32 })),
Manuel Bottini0d0028c2018-10-02 16:41:52 +0100626 ActivationFunctionsDataset),
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}
632TEST_SUITE_END() // Conv3x1
633
634TEST_SUITE(Conv1x3)
635FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradConvolutionLayerFastMathFixture, framework::DatasetMode::PRECOMMIT,
636 combine(combine(combine(datasets::SmallWinogradConvolutionLayer1x3Dataset(),
637 framework::dataset::make("DataType", { DataType::F32 })),
Michalis Spyrou80943252019-01-10 17:19:50 +0000638 ActivationFunctionsSmallDataset),
Giorgio Arenaea55f912018-07-12 15:41:35 +0100639 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100640{
641 // Validate output
642 validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f32);
643}
644
645FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradConvolutionLayerFastMathFixture, framework::DatasetMode::NIGHTLY,
646 combine(combine(combine(datasets::LargeWinogradConvolutionLayer1x3Dataset(),
647 framework::dataset::make("DataType", { DataType::F32 })),
Manuel Bottini0d0028c2018-10-02 16:41:52 +0100648 ActivationFunctionsDataset),
Giorgio Arenaea55f912018-07-12 15:41:35 +0100649 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100650{
651 // Validate output
652 validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f32);
653}
654TEST_SUITE_END() // Conv1x3
655
Gian Marco Iodice6cf188c2018-05-04 16:36:50 +0100656TEST_SUITE(Conv5x5)
657FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradConvolutionLayerFastMathFixture, framework::DatasetMode::PRECOMMIT,
Pablo Tello7282d562018-06-14 15:35:49 +0100658 combine(combine(combine(datasets::SmallWinogradConvolutionLayer5x5Dataset(),
659 framework::dataset::make("DataType", { DataType::F32 })),
Michalis Spyrou80943252019-01-10 17:19:50 +0000660 ActivationFunctionsSmallDataset ),
Giorgio Arenaea55f912018-07-12 15:41:35 +0100661 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
Pablo Tello7282d562018-06-14 15:35:49 +0100662
Gian Marco Iodice6cf188c2018-05-04 16:36:50 +0100663{
664 // Validate output
Gian Marco Iodice4497e812018-05-08 16:36:52 +0100665 validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f32);
Gian Marco Iodice6cf188c2018-05-04 16:36:50 +0100666}
667
668FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradConvolutionLayerFastMathFixture, framework::DatasetMode::NIGHTLY,
Pablo Tello7282d562018-06-14 15:35:49 +0100669 combine(combine(combine(datasets::LargeWinogradConvolutionLayer5x5Dataset(),
670 framework::dataset::make("DataType", { DataType::F32 })),
Manuel Bottini0d0028c2018-10-02 16:41:52 +0100671 ActivationFunctionsDataset ),
Giorgio Arenaea55f912018-07-12 15:41:35 +0100672 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
Pablo Tello7282d562018-06-14 15:35:49 +0100673
Gian Marco Iodice6cf188c2018-05-04 16:36:50 +0100674{
675 // Validate output
Gian Marco Iodice4497e812018-05-08 16:36:52 +0100676 validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f32);
Gian Marco Iodice6cf188c2018-05-04 16:36:50 +0100677}
678TEST_SUITE_END() // Conv5x5
Gian Marco Iodice2213d4b2018-04-27 10:39:06 +0100679
Gian Marco Iodice876be2a2018-07-03 12:22:09 +0100680TEST_SUITE(Conv5x1)
681FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradConvolutionLayerFastMathFixture, framework::DatasetMode::PRECOMMIT,
682 combine(combine(combine(datasets::SmallWinogradConvolutionLayer5x1Dataset(),
683 framework::dataset::make("DataType", { DataType::F32 })),
Michalis Spyrou80943252019-01-10 17:19:50 +0000684 ActivationFunctionsSmallDataset),
Giorgio Arenaea55f912018-07-12 15:41:35 +0100685 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
Gian Marco Iodice876be2a2018-07-03 12:22:09 +0100686
687{
688 // Validate output
689 validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f32);
690}
691
692FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradConvolutionLayerFastMathFixture, framework::DatasetMode::NIGHTLY,
693 combine(combine(combine(datasets::LargeWinogradConvolutionLayer5x1Dataset(),
694 framework::dataset::make("DataType", { DataType::F32 })),
Manuel Bottini0d0028c2018-10-02 16:41:52 +0100695 ActivationFunctionsDataset),
Giorgio Arenaea55f912018-07-12 15:41:35 +0100696 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
Gian Marco Iodice876be2a2018-07-03 12:22:09 +0100697
698{
699 // Validate output
700 validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f32);
701}
702TEST_SUITE_END() // Conv5x1
703
704TEST_SUITE(Conv1x5)
705FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradConvolutionLayerFastMathFixture, framework::DatasetMode::PRECOMMIT,
706 combine(combine(combine(datasets::SmallWinogradConvolutionLayer1x5Dataset(),
707 framework::dataset::make("DataType", { DataType::F32 })),
Michalis Spyrou80943252019-01-10 17:19:50 +0000708 ActivationFunctionsSmallDataset),
Giorgio Arenaea55f912018-07-12 15:41:35 +0100709 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
Gian Marco Iodice876be2a2018-07-03 12:22:09 +0100710
711{
712 // Validate output
713 validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f32);
714}
715
716FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradConvolutionLayerFastMathFixture, framework::DatasetMode::NIGHTLY,
717 combine(combine(combine(datasets::LargeWinogradConvolutionLayer1x5Dataset(),
718 framework::dataset::make("DataType", { DataType::F32 })),
Manuel Bottini0d0028c2018-10-02 16:41:52 +0100719 ActivationFunctionsDataset),
Giorgio Arenaea55f912018-07-12 15:41:35 +0100720 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
Gian Marco Iodice876be2a2018-07-03 12:22:09 +0100721
722{
723 // Validate output
724 validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f32);
725}
726TEST_SUITE_END() // Conv1x5
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100727TEST_SUITE_END() // FP32
728
Vidhya Sudhan Loganathana25d16c2018-11-16 11:33:12 +0000729
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100730TEST_SUITE(FP16)
731
Vidhya Sudhan Loganathana25d16c2018-11-16 11:33:12 +0000732using CLWinogradConvolutionLayerFastMathFixture16 = WinogradConvolutionLayerFastMathValidationFixture<CLTensor, CLAccessor, CLWinogradConvolutionLayer, half, float>;
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100733TEST_SUITE(Conv3x3)
734FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradConvolutionLayerFastMathFixture16, framework::DatasetMode::PRECOMMIT,
735 combine(combine(combine(datasets::SmallWinogradConvolutionLayer3x3Dataset(),
736 framework::dataset::make("DataType", { DataType::F16 })),
Michalis Spyrou80943252019-01-10 17:19:50 +0000737 ActivationFunctionsSmallDataset),
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100738 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
739{
740 // Validate output
741 validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f16);
742}
743
744FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradConvolutionLayerFastMathFixture16, framework::DatasetMode::NIGHTLY,
745 combine(combine(combine(datasets::LargeWinogradConvolutionLayer3x3Dataset(),
746 framework::dataset::make("DataType", { DataType::F16 })),
Manuel Bottini0d0028c2018-10-02 16:41:52 +0100747 ActivationFunctionsDataset),
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100748 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
749{
750 // Validate output
Vidhya Sudhan Loganathana25d16c2018-11-16 11:33:12 +0000751 validate(CLAccessor(_target), _reference, rel_tolerance_f16, tolerance_num, abs_tolerance_convolution_layer_f16);
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100752}
753TEST_SUITE_END() // Conv3x3
754
755TEST_SUITE(Conv3x1)
756FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradConvolutionLayerFastMathFixture16, framework::DatasetMode::PRECOMMIT,
757 combine(combine(combine(datasets::SmallWinogradConvolutionLayer3x1Dataset(),
758 framework::dataset::make("DataType", { DataType::F16 })),
Michalis Spyrou80943252019-01-10 17:19:50 +0000759 ActivationFunctionsSmallDataset),
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100760 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
761{
762 // Validate output
763 validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f16);
764}
765
766FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradConvolutionLayerFastMathFixture16, framework::DatasetMode::NIGHTLY,
767 combine(combine(combine(datasets::LargeWinogradConvolutionLayer3x1Dataset(),
768 framework::dataset::make("DataType", { DataType::F16 })),
Manuel Bottini0d0028c2018-10-02 16:41:52 +0100769 ActivationFunctionsDataset),
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100770 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
771{
772 // Validate output
Vidhya Sudhan Loganathana25d16c2018-11-16 11:33:12 +0000773 validate(CLAccessor(_target), _reference, rel_tolerance_f16, tolerance_num, abs_tolerance_convolution_layer_f16);
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100774}
775TEST_SUITE_END() // Conv3x1
776
777TEST_SUITE(Conv1x3)
778FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradConvolutionLayerFastMathFixture16, framework::DatasetMode::PRECOMMIT,
779 combine(combine(combine(datasets::SmallWinogradConvolutionLayer1x3Dataset(),
780 framework::dataset::make("DataType", { DataType::F16 })),
Michalis Spyrou80943252019-01-10 17:19:50 +0000781 ActivationFunctionsSmallDataset),
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100782 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
783{
784 // Validate output
785 validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f16);
786}
787
788FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradConvolutionLayerFastMathFixture16, framework::DatasetMode::NIGHTLY,
789 combine(combine(combine(datasets::LargeWinogradConvolutionLayer1x3Dataset(),
790 framework::dataset::make("DataType", { DataType::F16 })),
Manuel Bottini0d0028c2018-10-02 16:41:52 +0100791 ActivationFunctionsDataset),
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100792 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
793{
794 // Validate output
Vidhya Sudhan Loganathana25d16c2018-11-16 11:33:12 +0000795 validate(CLAccessor(_target), _reference, rel_tolerance_f16, tolerance_num, abs_tolerance_convolution_layer_f16);
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100796}
797TEST_SUITE_END() // Conv1x3
798
799TEST_SUITE(Conv5x5)
800FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradConvolutionLayerFastMathFixture16, framework::DatasetMode::PRECOMMIT,
801 combine(combine(combine(datasets::SmallWinogradConvolutionLayer5x5Dataset(),
802 framework::dataset::make("DataType", { DataType::F16 })),
Michalis Spyrou80943252019-01-10 17:19:50 +0000803 ActivationFunctionsSmallDataset),
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100804 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
805
806{
807 // Validate output
808 validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f16);
809}
810
811FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradConvolutionLayerFastMathFixture16, framework::DatasetMode::NIGHTLY,
812 combine(combine(combine(datasets::LargeWinogradConvolutionLayer5x5Dataset(),
813 framework::dataset::make("DataType", { DataType::F16 })),
Manuel Bottini0d0028c2018-10-02 16:41:52 +0100814 ActivationFunctionsDataset),
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100815 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
816
817{
818 // Validate output
Vidhya Sudhan Loganathana25d16c2018-11-16 11:33:12 +0000819 validate(CLAccessor(_target), _reference, rel_tolerance_f16, tolerance_num, abs_tolerance_convolution_layer_f16);
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100820}
821TEST_SUITE_END() // Conv5x5
822
823TEST_SUITE(Conv5x1)
824FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradConvolutionLayerFastMathFixture16, framework::DatasetMode::PRECOMMIT,
825 combine(combine(combine(datasets::SmallWinogradConvolutionLayer5x1Dataset(),
826 framework::dataset::make("DataType", { DataType::F16 })),
Michalis Spyrou80943252019-01-10 17:19:50 +0000827 ActivationFunctionsSmallDataset),
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100828 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
829
830{
831 // Validate output
832 validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f16);
833}
834
835FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradConvolutionLayerFastMathFixture16, framework::DatasetMode::NIGHTLY,
836 combine(combine(combine(datasets::LargeWinogradConvolutionLayer5x1Dataset(),
837 framework::dataset::make("DataType", { DataType::F16 })),
Manuel Bottini0d0028c2018-10-02 16:41:52 +0100838 ActivationFunctionsDataset),
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100839 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
840
841{
842 // Validate output
Vidhya Sudhan Loganathana25d16c2018-11-16 11:33:12 +0000843 validate(CLAccessor(_target), _reference, rel_tolerance_f16, tolerance_num, abs_tolerance_convolution_layer_f16);
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100844}
845TEST_SUITE_END() // Conv5x1
846
847TEST_SUITE(Conv1x5)
848FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradConvolutionLayerFastMathFixture16, framework::DatasetMode::PRECOMMIT,
849 combine(combine(combine(datasets::SmallWinogradConvolutionLayer1x5Dataset(),
850 framework::dataset::make("DataType", { DataType::F16 })),
Michalis Spyrou80943252019-01-10 17:19:50 +0000851 ActivationFunctionsSmallDataset),
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100852 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
853
854{
855 // Validate output
856 validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f16);
857}
858
859FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradConvolutionLayerFastMathFixture16, framework::DatasetMode::NIGHTLY,
860 combine(combine(combine(datasets::LargeWinogradConvolutionLayer1x5Dataset(),
861 framework::dataset::make("DataType", { DataType::F16 })),
Manuel Bottini0d0028c2018-10-02 16:41:52 +0100862 ActivationFunctionsDataset),
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100863 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
864
865{
866 // Validate output
Vidhya Sudhan Loganathana25d16c2018-11-16 11:33:12 +0000867 validate(CLAccessor(_target), _reference, rel_tolerance_f16, tolerance_num, abs_tolerance_convolution_layer_f16);
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100868}
869TEST_SUITE_END() // Conv1x5
870
871TEST_SUITE_END() // FP16
Vidhya Sudhan Loganathana25d16c2018-11-16 11:33:12 +0000872
Gian Marco Iodiced2fab732018-03-02 11:18:12 +0000873TEST_SUITE_END() // ConvolutionLayer
Gian Marco Iodice7e4b2392018-02-22 16:17:20 +0000874TEST_SUITE_END() // Winograd
875TEST_SUITE_END() // CL
Giorgio Arena1f9ca1d2018-03-01 11:13:45 +0000876} // namespace validation
877} // namespace test
878} // namespace arm_compute