blob: 62f03352536e215f2d2ed3797901cec6d05b926f [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
Michele Di Giorgio881c6842019-02-27 14:26:51 +0000121const auto SmallWinogradFilterTransformDatasetNHWC_F16 =
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100122 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
Michele Di Giorgio881c6842019-02-27 14:26:51 +0000129const auto SmallWinogradFilterTransformDatasetNHWC_F32 =
130 framework::dataset::concat(SmallWinogradFilterTransformDatasetNHWC_F16,
131 framework::dataset::concat(combine(datasets::Small7x7Shapes(), framework::dataset::make("OutputTile", { Size2D(2U, 2U) })),
132 framework::dataset::concat(combine(datasets::Small7x1Shapes(), framework::dataset::make("OutputTile", { Size2D(2U, 1U) })),
133 combine(datasets::Small1x7Shapes(), framework::dataset::make("OutputTile", { Size2D(1U, 2U) })))));
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100134
135const auto LargeWinogradFilterTransformDatasetNCHW =
136 framework::dataset::concat(combine(datasets::Large3x3Shapes(), framework::dataset::make("OutputTile", { Size2D(2U, 2U), Size2D(4U, 4U) })),
137 framework::dataset::concat(combine(datasets::Large3x1Shapes(), framework::dataset::make("OutputTile", { Size2D(2U, 1U), Size2D(4U, 1U) })),
138 framework::dataset::concat(combine(datasets::Large1x3Shapes(), framework::dataset::make("OutputTile", { Size2D(1U, 2U), Size2D(1U, 4U) })),
Gian Marco Iodice876be2a2018-07-03 12:22:09 +0100139 framework::dataset::concat(combine(datasets::Large5x5Shapes(), framework::dataset::make("OutputTile", { Size2D(4U, 4U) })),
140 framework::dataset::concat(combine(datasets::Large5x1Shapes(), framework::dataset::make("OutputTile", { Size2D(4U, 1U) })),
141 combine(datasets::Large1x5Shapes(), framework::dataset::make("OutputTile", { Size2D(1U, 4U) })))))));
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100142
Michele Di Giorgio881c6842019-02-27 14:26:51 +0000143const auto LargeWinogradFilterTransformDatasetNHWC_F16 =
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100144 framework::dataset::concat(combine(datasets::Large3x3Shapes(), framework::dataset::make("OutputTile", { Size2D(4U, 4U) })),
Gian Marco Iodiced28b7512018-07-06 12:59:28 +0100145 framework::dataset::concat(combine(datasets::Large3x1Shapes(), framework::dataset::make("OutputTile", { Size2D(4U, 1U) })),
146 framework::dataset::concat(combine(datasets::Large1x3Shapes(), framework::dataset::make("OutputTile", { Size2D(1U, 4U) })),
147 framework::dataset::concat(combine(datasets::Large5x5Shapes(), framework::dataset::make("OutputTile", { Size2D(4U, 4U) })),
148 framework::dataset::concat(combine(datasets::Large5x1Shapes(), framework::dataset::make("OutputTile", { Size2D(4U, 1U) })),
149 combine(datasets::Large1x5Shapes(), framework::dataset::make("OutputTile", { Size2D(1U, 4U) })))))));
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100150
Michele Di Giorgio881c6842019-02-27 14:26:51 +0000151const auto LargeWinogradFilterTransformDatasetNHWC_F32 =
152 framework::dataset::concat(LargeWinogradFilterTransformDatasetNHWC_F16,
153 framework::dataset::concat(combine(datasets::Large7x7Shapes(), framework::dataset::make("OutputTile", { Size2D(2U, 2U) })),
154 framework::dataset::concat(combine(datasets::Large7x1Shapes(), framework::dataset::make("OutputTile", { Size2D(2U, 1U) })),
155 combine(datasets::Large1x7Shapes(), framework::dataset::make("OutputTile", { Size2D(1U, 2U) })))));
156
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100157// Output transform
158const auto SmallWinogradOutputTransformDatasetNCHW = datasets::SmallWinogradOutputTransformDatasetNCHW();
159
giuros013bfacb22019-04-01 12:07:02 +0100160const auto SmallWinogradOutputTransformDatasetNHWC_F16 = datasets::SmallWinogradOutputTransformDatasetNHWC_F16();
161
162const auto SmallWinogradOutputTransformDatasetNHWC_F32 = datasets::SmallWinogradOutputTransformDatasetNHWC_F32();
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100163
164const auto LargeWinogradOutputTransformDatasetNCHW = datasets::LargeWinogradOutputTransformDatasetNCHW();
165
giuros013bfacb22019-04-01 12:07:02 +0100166const auto LargeWinogradOutputTransformDatasetNHWC_F16 = datasets::LargeWinogradOutputTransformDatasetNHWC_F16();
167
168const auto LargeWinogradOutputTransformDatasetNHWC_F32 = datasets::LargeWinogradOutputTransformDatasetNHWC_F32();
Manuel Bottini0d0028c2018-10-02 16:41:52 +0100169
170//Activation Functions
171const auto ActivationFunctionsDataset = framework::dataset::make("ActivationInfo",
172{
173 ActivationLayerInfo(),
174 ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::RELU),
175 ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::BOUNDED_RELU),
176 ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::LU_BOUNDED_RELU),
Georgios Pinitas9d6a31c2019-02-25 14:33:25 +0000177 ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::LEAKY_RELU)
Manuel Bottini0d0028c2018-10-02 16:41:52 +0100178});
Michalis Spyrou80943252019-01-10 17:19:50 +0000179const auto ActivationFunctionsSmallDataset = framework::dataset::make("ActivationInfo",
180{
181 ActivationLayerInfo(),
182 ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::LU_BOUNDED_RELU),
Georgios Pinitas9d6a31c2019-02-25 14:33:25 +0000183 ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::LEAKY_RELU),
184 ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::SOFT_RELU)
Michalis Spyrou80943252019-01-10 17:19:50 +0000185});
Gian Marco Iodice7e4b2392018-02-22 16:17:20 +0000186} // namespace
187
188using namespace arm_compute::misc::shape_calculator;
189
Giorgio Arena1f9ca1d2018-03-01 11:13:45 +0000190TEST_SUITE(CL)
191TEST_SUITE(Winograd)
192
193TEST_SUITE(InputTransform)
Gian Marco Iodice247f52c2018-03-22 11:24:56 +0000194DATA_TEST_CASE(Validate, framework::DatasetMode::ALL, zip(zip(zip(
Giorgio Arena1f9ca1d2018-03-01 11:13:45 +0000195 framework::dataset::make("InputInfo",{
196 TensorInfo(TensorShape(53U, 21U, 5U, 3U), 1, DataType::F16), // F16 not supported
197 TensorInfo(TensorShape(53U, 21U, 5U, 3U), 1, DataType::QASYMM8), // QASYMM8 not supported
198 TensorInfo(TensorShape(53U, 21U, 5U, 3U), 1, DataType::F32), // Kernel size not supported
199 TensorInfo(TensorShape(53U, 21U, 5U, 3U), 1, DataType::F32), // Strides not supported
Gian Marco Iodiced2fab732018-03-02 11:18:12 +0000200 TensorInfo(TensorShape(53U, 33U, 4U), 1, DataType::F32), // Padding needed
201 TensorInfo(TensorShape(34U, 42U, 7U, 3U), 1, DataType::F32), // Padding needed
202 TensorInfo(TensorShape(31U, 37U, 37U), 1, DataType::F32) // Padding needed
Giorgio Arena1f9ca1d2018-03-01 11:13:45 +0000203 }),
204 framework::dataset::make("OutputInfo", {
205 TensorInfo(TensorShape(5U, 5U, 16U, 3U), 1, DataType::F16),
206 TensorInfo(TensorShape(5U, 5U, 16U, 3U), 1, DataType::QASYMM8),
207 TensorInfo(TensorShape(5U, 5U, 16U, 3U), 1, DataType::F32),
208 TensorInfo(TensorShape(5U, 1U, 16U, 3U), 1, DataType::F32),
209 TensorInfo(TensorShape(4U, 442U, 16U), 1, DataType::F32),
210 TensorInfo(TensorShape(7U, 320U, 16U, 3U), 1, DataType::F32),
211 TensorInfo(TensorShape(37U, 304U, 16U), 1, DataType::F32)
212 })),
Gian Marco Iodice247f52c2018-03-22 11:24:56 +0000213 framework::dataset::make("WinogradInfo", {
214 WinogradInfo(Size2D(2, 2), Size2D(3, 3), Size2D(53U, 21U), PadStrideInfo(1, 1, 1, 0), DataLayout::NCHW),
215 WinogradInfo(Size2D(2, 2), Size2D(3, 3), Size2D(53U, 21U), PadStrideInfo(1, 1, 0, 0), DataLayout::NCHW),
216 WinogradInfo(Size2D(2, 2), Size2D(3, 3), Size2D(53U, 21U), PadStrideInfo(1, 1, 1, 1), DataLayout::NCHW),
217 WinogradInfo(Size2D(2, 2), Size2D(3, 3), Size2D(53U, 21U), PadStrideInfo(2, 1, 1, 1), DataLayout::NCHW),
218 WinogradInfo(Size2D(2, 2), Size2D(3, 3), Size2D(53U, 33U), PadStrideInfo(1, 1, 0, 1), DataLayout::NCHW),
219 WinogradInfo(Size2D(2, 2), Size2D(3, 3), Size2D(34U, 42U), PadStrideInfo(1, 1, 0, 0), DataLayout::NCHW),
220 WinogradInfo(Size2D(2, 2), Size2D(3, 3), Size2D(31U, 37U), PadStrideInfo(1, 1, 1, 1), DataLayout::NCHW)
Giorgio Arena1f9ca1d2018-03-01 11:13:45 +0000221 })),
Gian Marco Iodiced2fab732018-03-02 11:18:12 +0000222 framework::dataset::make("Expected", { false, false, false, false, false, false, false })),
Gian Marco Iodice247f52c2018-03-22 11:24:56 +0000223 input_info, output_info, winograd_info, expected)
Giorgio Arena1f9ca1d2018-03-01 11:13:45 +0000224{
Gian Marco Iodice247f52c2018-03-22 11:24:56 +0000225 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 +0000226}
Giorgio Arena1f9ca1d2018-03-01 11:13:45 +0000227
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100228using CLWinogradInputTransformFixtureFP32 = WinogradInputTransformValidationFixture<CLTensor, CLAccessor, CLWinogradInputTransform, float>;
229using CLWinogradInputTransformFixtureFP16 = WinogradInputTransformValidationFixture<CLTensor, CLAccessor, CLWinogradInputTransform, half>;
Giorgio Arena1f9ca1d2018-03-01 11:13:45 +0000230
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100231TEST_SUITE(NCHW)
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100232TEST_SUITE(FP32)
233FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradInputTransformFixtureFP32, framework::DatasetMode::PRECOMMIT, combine(combine(SmallWinogradInputTransformDatasetNCHW,
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100234 framework::dataset::make("DataLayout", { DataLayout::NCHW })),
235 framework::dataset::make("DataType", { DataType::F32 })))
Giorgio Arena1f9ca1d2018-03-01 11:13:45 +0000236{
Giorgio Arenafe5ef382018-04-17 10:14:10 +0100237 validate(CLAccessor(_target), _reference, tolerance_f32);
Giorgio Arena1f9ca1d2018-03-01 11:13:45 +0000238}
239
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100240FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradInputTransformFixtureFP32, framework::DatasetMode::NIGHTLY, combine(combine(LargeWinogradInputTransformDatasetNCHW,
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100241 framework::dataset::make("DataLayout", { DataLayout::NCHW })),
242 framework::dataset::make("DataType", { DataType::F32 })))
Giorgio Arena1f9ca1d2018-03-01 11:13:45 +0000243{
Giorgio Arenafe5ef382018-04-17 10:14:10 +0100244 validate(CLAccessor(_target), _reference, tolerance_f32);
Giorgio Arena1f9ca1d2018-03-01 11:13:45 +0000245}
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100246TEST_SUITE_END() // FP32
247
248TEST_SUITE(FP16)
249FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradInputTransformFixtureFP16, framework::DatasetMode::PRECOMMIT, combine(combine(SmallWinogradInputTransformDatasetNCHW,
250 framework::dataset::make("DataLayout", { DataLayout::NCHW })),
251 framework::dataset::make("DataType", { DataType::F16 })))
252{
253 validate(CLAccessor(_target), _reference, tolerance_f16);
254}
255
256FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradInputTransformFixtureFP16, framework::DatasetMode::NIGHTLY, combine(combine(LargeWinogradInputTransformDatasetNCHW,
257 framework::dataset::make("DataLayout", { DataLayout::NCHW })),
258 framework::dataset::make("DataType", { DataType::F16 })))
259{
260 validate(CLAccessor(_target), _reference, tolerance_f16);
261}
262TEST_SUITE_END() // FP16
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100263TEST_SUITE_END() // NCHW
264
265TEST_SUITE(NHWC)
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100266TEST_SUITE(FP16)
267FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradInputTransformFixtureFP16, framework::DatasetMode::PRECOMMIT, combine(combine(SmallWinogradInputTransformDatasetNHWC,
268 framework::dataset::make("DataLayout", { DataLayout::NHWC })),
269 framework::dataset::make("DataType", { DataType::F16 })))
270{
271 validate(CLAccessor(_target), _reference, tolerance_f16);
272}
273
274FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradInputTransformFixtureFP16, framework::DatasetMode::NIGHTLY, combine(combine(LargeWinogradInputTransformDatasetNHWC,
275 framework::dataset::make("DataLayout", { DataLayout::NHWC })),
276 framework::dataset::make("DataType", { DataType::F16 })))
277{
278 validate(CLAccessor(_target), _reference, tolerance_f16);
279}
280TEST_SUITE_END() // FP16
281TEST_SUITE(FP32)
Michele Di Giorgiof955d512019-02-27 14:26:51 +0000282FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradInputTransformFixtureFP32, framework::DatasetMode::PRECOMMIT, combine(combine(SmallWinogradInputTransformDatasetNHWC_FP32,
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100283 framework::dataset::make("DataLayout", { DataLayout::NHWC })),
284 framework::dataset::make("DataType", { DataType::F32 })))
285{
286 validate(CLAccessor(_target), _reference, tolerance_f32);
287}
288
Michele Di Giorgiof955d512019-02-27 14:26:51 +0000289FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradInputTransformFixtureFP32, framework::DatasetMode::NIGHTLY, combine(combine(LargeWinogradInputTransformDatasetNHWC_FP32,
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100290 framework::dataset::make("DataLayout", { DataLayout::NHWC })),
291 framework::dataset::make("DataType", { DataType::F32 })))
292{
293 validate(CLAccessor(_target), _reference, tolerance_f32);
294}
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100295TEST_SUITE_END() // FP32
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100296TEST_SUITE_END() // NHWC
Gian Marco Iodice7e4b2392018-02-22 16:17:20 +0000297TEST_SUITE_END() // InputTransform
Giorgio Arena1f9ca1d2018-03-01 11:13:45 +0000298
Gian Marco Iodice7e4b2392018-02-22 16:17:20 +0000299TEST_SUITE(FilterTransform)
Giorgio Arena2d9de0a2018-03-15 17:58:20 +0000300DATA_TEST_CASE(Validate, framework::DatasetMode::ALL, zip(zip(zip(
Gian Marco Iodice7e4b2392018-02-22 16:17:20 +0000301 framework::dataset::make("InputInfo",{
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100302 TensorInfo(TensorShape(3U, 3U, 5U, 3U), 1, DataType::F16), // F16 supported
Gian Marco Iodice7e4b2392018-02-22 16:17:20 +0000303 TensorInfo(TensorShape(3U, 3U, 5U, 3U), 1, DataType::QASYMM8), // QASYMM8 not supported
304 TensorInfo(TensorShape(5U, 5U, 5U, 3U), 1, DataType::F32), // Kernel size not supported
Giorgio Arena2d9de0a2018-03-15 17:58:20 +0000305 TensorInfo(TensorShape(3U, 3U), 1, DataType::F32), // Output tile not supported
Gian Marco Iodice7e4b2392018-02-22 16:17:20 +0000306 TensorInfo(TensorShape(3U, 3U, 5U, 3U), 1, DataType::F32), // valid
307 TensorInfo(TensorShape(3U, 3U, 37U, 2U), 1, DataType::F32), // valid
308 TensorInfo(TensorShape(3U, 3U, 37U, 22U), 1, DataType::F32) // valid
309 }),
310 framework::dataset::make("OutputInfo", {
311 TensorInfo(TensorShape(3U, 5U, 16U), 1, DataType::F16),
312 TensorInfo(TensorShape(3U, 5U, 16U), 1, DataType::QASYMM8),
313 TensorInfo(TensorShape(3U, 5U, 16U), 1, DataType::F32),
314 TensorInfo(TensorShape(1U, 1U, 16U), 1, DataType::F32),
315 TensorInfo(TensorShape(3U, 5U, 16U), 1, DataType::F32),
316 TensorInfo(TensorShape(2U, 37U, 16U), 1, DataType::F32),
Giorgio Arena2d9de0a2018-03-15 17:58:20 +0000317 TensorInfo(TensorShape(22U, 37U, 36U), 1, DataType::F32)
Gian Marco Iodice7e4b2392018-02-22 16:17:20 +0000318 })),
Gian Marco Iodice247f52c2018-03-22 11:24:56 +0000319 framework::dataset::make("WinogradInfo", {
320 WinogradInfo(Size2D(2U, 2U), Size2D(3U, 3U), Size2D() /* Not needed */, PadStrideInfo() /* Not needed */, DataLayout::NCHW /* Not needed */ ),
321 WinogradInfo(Size2D(2U, 2U), Size2D(3U, 3U), Size2D() /* Not needed */, PadStrideInfo() /* Not needed */, DataLayout::NCHW /* Not needed */ ),
322 WinogradInfo(Size2D(2U, 2U), Size2D(3U, 3U), Size2D() /* Not needed */, PadStrideInfo() /* Not needed */, DataLayout::NCHW /* Not needed */ ),
323 WinogradInfo(Size2D(3U, 3U), Size2D(3U, 3U), Size2D() /* Not needed */, PadStrideInfo() /* Not needed */, DataLayout::NCHW /* Not needed */ ),
324 WinogradInfo(Size2D(2U, 2U), Size2D(3U, 3U), Size2D() /* Not needed */, PadStrideInfo() /* Not needed */, DataLayout::NCHW /* Not needed */ ),
325 WinogradInfo(Size2D(2U, 2U), Size2D(3U, 3U), Size2D() /* Not needed */, PadStrideInfo() /* Not needed */, DataLayout::NCHW /* Not needed */ ),
326 WinogradInfo(Size2D(4U, 4U), Size2D(3U, 3U), Size2D() /* Not needed */, PadStrideInfo() /* Not needed */, DataLayout::NCHW /* Not needed */ )
327 })),
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100328 framework::dataset::make("Expected", { true, false, false, false, true, true, true })),
Gian Marco Iodice247f52c2018-03-22 11:24:56 +0000329 input_info, output_info, winograd_info, expected)
Gian Marco Iodice7e4b2392018-02-22 16:17:20 +0000330{
Gian Marco Iodice247f52c2018-03-22 11:24:56 +0000331 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 +0000332}
Giorgio Arena1f9ca1d2018-03-01 11:13:45 +0000333
Gian Marco Iodice7e4b2392018-02-22 16:17:20 +0000334using CLWinogradFilterTransform = CLSynthetizeFunctionWithZeroConstantBorder<CLWinogradFilterTransformKernel, 0>;
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100335using CLWinogradFilterTransformFixtureFP32 = WinogradFilterTransformValidationFixture<CLTensor, CLAccessor, CLWinogradFilterTransform, float>;
336using CLWinogradFilterTransformFixtureFP16 = WinogradFilterTransformValidationFixture<CLTensor, CLAccessor, CLWinogradFilterTransform, half>;
Gian Marco Iodice7e4b2392018-02-22 16:17:20 +0000337
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100338TEST_SUITE(NCHW)
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100339TEST_SUITE(FP32)
340FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradFilterTransformFixtureFP32, framework::DatasetMode::PRECOMMIT,
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100341 combine(combine(SmallWinogradFilterTransformDatasetNCHW,
342 framework::dataset::make("DataLayout", { DataLayout::NCHW })),
343 framework::dataset::make("DataType", { DataType::F32 })))
Gian Marco Iodice7e4b2392018-02-22 16:17:20 +0000344{
345 // Validate output
346 validate(CLAccessor(_target), _reference, tolerance_f32);
347}
348
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100349FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradFilterTransformFixtureFP32, framework::DatasetMode::NIGHTLY,
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100350 combine(combine(LargeWinogradFilterTransformDatasetNCHW,
351 framework::dataset::make("DataLayout", { DataLayout::NCHW })),
352 framework::dataset::make("DataType", { DataType::F32 })))
353{
354 // Validate output
355 validate(CLAccessor(_target), _reference, tolerance_f32);
356}
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100357TEST_SUITE_END() // FP32
358TEST_SUITE(FP16)
359FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradFilterTransformFixtureFP16, framework::DatasetMode::PRECOMMIT,
360 combine(combine(SmallWinogradFilterTransformDatasetNCHW,
361 framework::dataset::make("DataLayout", { DataLayout::NCHW })),
362 framework::dataset::make("DataType", { DataType::F16 })))
363{
364 // Validate output
365 validate(CLAccessor(_target), _reference, tolerance_f16);
366}
367
368FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradFilterTransformFixtureFP16, framework::DatasetMode::NIGHTLY,
369 combine(combine(LargeWinogradFilterTransformDatasetNCHW,
370 framework::dataset::make("DataLayout", { DataLayout::NCHW })),
371 framework::dataset::make("DataType", { DataType::F16 })))
372{
373 // Validate output
374 validate(CLAccessor(_target), _reference, tolerance_f16);
375}
376TEST_SUITE_END() // FP16
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100377TEST_SUITE_END() // NCHW
378
379TEST_SUITE(NHWC)
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100380TEST_SUITE(FP16)
381FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradFilterTransformFixtureFP16, framework::DatasetMode::PRECOMMIT,
Michele Di Giorgio881c6842019-02-27 14:26:51 +0000382 combine(combine(SmallWinogradFilterTransformDatasetNHWC_F16,
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100383 framework::dataset::make("DataLayout", { DataLayout::NHWC })),
384 framework::dataset::make("DataType", { DataType::F16 })))
385{
386 // Validate output
387 validate(CLAccessor(_target), _reference, tolerance_f16);
388}
389
390FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradFilterTransformFixtureFP16, framework::DatasetMode::NIGHTLY,
Michele Di Giorgio881c6842019-02-27 14:26:51 +0000391 combine(combine(LargeWinogradFilterTransformDatasetNHWC_F16,
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100392 framework::dataset::make("DataLayout", { DataLayout::NHWC })),
393 framework::dataset::make("DataType", { DataType::F16 })))
394{
395 // Validate output
396 validate(CLAccessor(_target), _reference, tolerance_f16);
397}
398TEST_SUITE_END() // FP16
399TEST_SUITE(FP32)
400FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradFilterTransformFixtureFP32, framework::DatasetMode::PRECOMMIT,
Michele Di Giorgio881c6842019-02-27 14:26:51 +0000401 combine(combine(SmallWinogradFilterTransformDatasetNHWC_F32,
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100402 framework::dataset::make("DataLayout", { DataLayout::NHWC })),
403 framework::dataset::make("DataType", { DataType::F32 })))
Gian Marco Iodice7e4b2392018-02-22 16:17:20 +0000404{
405 // Validate output
406 validate(CLAccessor(_target), _reference, tolerance_f32);
407}
Gian Marco Iodiced2fab732018-03-02 11:18:12 +0000408
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100409FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradFilterTransformFixtureFP32, framework::DatasetMode::NIGHTLY,
Michele Di Giorgio881c6842019-02-27 14:26:51 +0000410 combine(combine(LargeWinogradFilterTransformDatasetNHWC_F32,
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100411 framework::dataset::make("DataLayout", { DataLayout::NHWC })),
412 framework::dataset::make("DataType", { DataType::F32 })))
413{
414 // Validate output
415 validate(CLAccessor(_target), _reference, tolerance_f32);
416}
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100417TEST_SUITE_END() // FP32
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100418TEST_SUITE_END() // NHWC
Gian Marco Iodice7e4b2392018-02-22 16:17:20 +0000419TEST_SUITE_END() // FilterTransform
420
Gian Marco Iodiced2fab732018-03-02 11:18:12 +0000421TEST_SUITE(OutputTransform)
Gian Marco Iodice247f52c2018-03-22 11:24:56 +0000422DATA_TEST_CASE(Validate, framework::DatasetMode::ALL, zip(zip(zip(zip(
Gian Marco Iodiced2fab732018-03-02 11:18:12 +0000423 framework::dataset::make("InputInfo",{
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100424 TensorInfo(TensorShape(512U, 49U, 16U, 5U), 1, DataType::F16), // F16 supported
Gian Marco Iodice247f52c2018-03-22 11:24:56 +0000425 TensorInfo(TensorShape(512U, 49U, 16U, 5U), 1, DataType::QASYMM8), // QASYMM8 not supported
426 TensorInfo(TensorShape(512U, 49U, 16U, 5U), 1, DataType::F32), // Kernel size not supported
427 TensorInfo(TensorShape(512U, 49U, 16U, 5U), 1, DataType::F32), // Valid
428 TensorInfo(TensorShape(13U, 108U, 16U, 4U), 1, DataType::F32), // Padding needed
429 TensorInfo(TensorShape(7U, 20U, 16U, 7U), 1, DataType::F32), // Valid
Gian Marco Iodicee52a3002018-04-11 15:59:10 +0100430 TensorInfo(TensorShape(7U, 20U, 16U, 7U), 1, DataType::F32), // Wrong WinogradInfo
431 TensorInfo(TensorShape(7U, 256U, 36U, 3U), 1, DataType::F32), // Valid
432 TensorInfo(TensorShape(7U, 256U, 16U, 3U), 1, DataType::F32) // Wrong number of batches
Gian Marco Iodiced2fab732018-03-02 11:18:12 +0000433 }),
434 framework::dataset::make("BiasInfo", {
Gian Marco Iodice247f52c2018-03-22 11:24:56 +0000435 TensorInfo(TensorShape(512U), 1, DataType::F16),
436 TensorInfo(TensorShape(512U), 1, DataType::QASYMM8),
437 TensorInfo(TensorShape(512U), 1, DataType::F32),
Gian Marco Iodiced2fab732018-03-02 11:18:12 +0000438 TensorInfo(TensorShape(512U), 1, DataType::F32),
439 TensorInfo(TensorShape(13U), 1, DataType::F32),
440 TensorInfo(TensorShape(7U), 1, DataType::F32),
Gian Marco Iodicee52a3002018-04-11 15:59:10 +0100441 TensorInfo(TensorShape(7U), 1, DataType::F32),
442 TensorInfo(TensorShape(7U), 1, DataType::F32),
Gian Marco Iodice247f52c2018-03-22 11:24:56 +0000443 TensorInfo(TensorShape(7U), 1, DataType::F32)
Gian Marco Iodiced2fab732018-03-02 11:18:12 +0000444 })),
445 framework::dataset::make("OutputInfo", {
Gian Marco Iodice247f52c2018-03-22 11:24:56 +0000446 TensorInfo(TensorShape(14U, 14U, 512U, 5U), 1, DataType::F16),
447 TensorInfo(TensorShape(14U, 14U, 512U, 5U), 1, DataType::QASYMM8),
448 TensorInfo(TensorShape(14U, 14U, 512U, 5U), 1, DataType::F32),
449 TensorInfo(TensorShape(14U, 14U, 512U, 5U), 1, DataType::F32),
450 TensorInfo(TensorShape(17U, 23U, 13U, 4U), 1, DataType::F32),
451 TensorInfo(TensorShape(8U, 10U, 7U, 7U), 1, DataType::F32),
Gian Marco Iodicee52a3002018-04-11 15:59:10 +0100452 TensorInfo(TensorShape(7U, 9U, 7U, 7U), 1, DataType::F32),
453 TensorInfo(TensorShape(64U, 64U, 7U, 3U), 1, DataType::F32),
454 TensorInfo(TensorShape(64U, 64U, 7U, 3U), 1, DataType::F32)
Gian Marco Iodiced2fab732018-03-02 11:18:12 +0000455 })),
Gian Marco Iodice247f52c2018-03-22 11:24:56 +0000456 framework::dataset::make("WinogradInfo", {
457 WinogradInfo(Size2D(2U, 2U), Size2D(3U, 3U), Size2D(14U, 14U), PadStrideInfo(1, 1, 1, 1), DataLayout::NCHW),
458 WinogradInfo(Size2D(2U, 2U), Size2D(3U, 3U), Size2D(14U, 14U), PadStrideInfo(1, 1, 1, 1), DataLayout::NCHW),
459 WinogradInfo(Size2D(2U, 2U), Size2D(5U, 5U), Size2D(14U, 14U), PadStrideInfo(1, 1, 1, 1), DataLayout::NCHW),
460 WinogradInfo(Size2D(2U, 2U), Size2D(3U, 3U), Size2D(14U, 14U), PadStrideInfo(1, 1, 1, 1), DataLayout::NCHW),
461 WinogradInfo(Size2D(2U, 2U), Size2D(3U, 3U), Size2D(17U, 23U), PadStrideInfo(1, 1, 1, 1), DataLayout::NCHW),
462 WinogradInfo(Size2D(2U, 2U), Size2D(3U, 3U), Size2D(8U, 10U), PadStrideInfo(1, 1, 1, 1), DataLayout::NCHW),
463 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 +0100464 WinogradInfo(Size2D(4U, 4U), Size2D(3U, 3U), Size2D(64U, 64U), PadStrideInfo(1, 1, 1, 1), DataLayout::NCHW),
465 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 +0000466 })),
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100467 framework::dataset::make("Expected", { true, false, false, true, false, true, false, true, false })),
Gian Marco Iodice247f52c2018-03-22 11:24:56 +0000468 input_info, bias_info, output_info, winograd_info, expected)
Gian Marco Iodiced2fab732018-03-02 11:18:12 +0000469{
Gian Marco Iodice247f52c2018-03-22 11:24:56 +0000470 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 +0000471}
Gian Marco Iodiced2fab732018-03-02 11:18:12 +0000472
473using CLWinogradOutputTransform = CLSynthetizeFunctionWithZeroConstantBorder<CLWinogradOutputTransformKernel, 0>;
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100474using CLWinogradOutputTransformFixtureFP32 = WinogradOutputTransformValidationFixture<CLTensor, CLAccessor, CLWinogradOutputTransform, float>;
475using CLWinogradOutputTransformFixtureFP16 = WinogradOutputTransformValidationFixture<CLTensor, CLAccessor, CLWinogradOutputTransform, half>;
Gian Marco Iodiced2fab732018-03-02 11:18:12 +0000476
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100477TEST_SUITE(NCHW)
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100478TEST_SUITE(FP16)
479FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradOutputTransformFixtureFP16, framework::DatasetMode::ALL,
Manuel Bottini0d0028c2018-10-02 16:41:52 +0100480 combine(combine(SmallWinogradOutputTransformDatasetNCHW,
481 framework::dataset::make("DataType", { DataType::F16 })),
482 framework::dataset::make("ActivationInfo",{ ActivationLayerInfo() }) ))
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100483{
484 // Validate output
485 validate(CLAccessor(_target), _reference, tolerance_f16);
486}
Gian Marco Iodiced2fab732018-03-02 11:18:12 +0000487
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100488FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradOutputTransformFixtureFP16, framework::DatasetMode::NIGHTLY,
Manuel Bottini0d0028c2018-10-02 16:41:52 +0100489 combine(combine(LargeWinogradOutputTransformDatasetNCHW,
490 framework::dataset::make("DataType", { DataType::F16 })),
491 framework::dataset::make("ActivationInfo",{ ActivationLayerInfo() }) ))
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100492{
493 // Validate output
494 validate(CLAccessor(_target), _reference, tolerance_f16);
495}
496TEST_SUITE_END() // FP16
497TEST_SUITE(FP32)
498FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradOutputTransformFixtureFP32, framework::DatasetMode::ALL,
Manuel Bottini0d0028c2018-10-02 16:41:52 +0100499 combine(combine(SmallWinogradOutputTransformDatasetNCHW,
500 framework::dataset::make("DataType", { DataType::F32 })),
501 framework::dataset::make("ActivationInfo",{ ActivationLayerInfo() }) ))
Gian Marco Iodiced2fab732018-03-02 11:18:12 +0000502{
503 // Validate output
504 validate(CLAccessor(_target), _reference, tolerance_f32);
505}
506
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100507FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradOutputTransformFixtureFP32, framework::DatasetMode::NIGHTLY,
Manuel Bottini0d0028c2018-10-02 16:41:52 +0100508 combine(combine(LargeWinogradOutputTransformDatasetNCHW,
509 framework::dataset::make("DataType", { DataType::F32 })),
510 framework::dataset::make("ActivationInfo",{ ActivationLayerInfo() }) ))
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100511{
512 // Validate output
513 validate(CLAccessor(_target), _reference, tolerance_f32);
514}
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100515TEST_SUITE_END() // FP32
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100516TEST_SUITE_END() // NCHW
517
518TEST_SUITE(NHWC)
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100519TEST_SUITE(FP16)
520FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradOutputTransformFixtureFP16, framework::DatasetMode::ALL,
giuros013bfacb22019-04-01 12:07:02 +0100521 combine(combine(SmallWinogradOutputTransformDatasetNHWC_F16,
Manuel Bottini0d0028c2018-10-02 16:41:52 +0100522 framework::dataset::make("DataType", { DataType::F16 })),
523 framework::dataset::make("ActivationInfo",{ ActivationLayerInfo() }) ))
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100524{
525 // Validate output
526 validate(CLAccessor(_target), _reference, tolerance_f16);
527}
528
529FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradOutputTransformFixtureFP16, framework::DatasetMode::NIGHTLY,
giuros013bfacb22019-04-01 12:07:02 +0100530 combine(combine(LargeWinogradOutputTransformDatasetNHWC_F16,
Manuel Bottini0d0028c2018-10-02 16:41:52 +0100531 framework::dataset::make("DataType", { DataType::F16 })),
532 framework::dataset::make("ActivationInfo",{ ActivationLayerInfo() }) ))
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100533{
534 // Validate output
535 validate(CLAccessor(_target), _reference, tolerance_f16);
536}
537TEST_SUITE_END() // FP16
538TEST_SUITE(FP32)
539FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradOutputTransformFixtureFP32, framework::DatasetMode::ALL,
giuros013bfacb22019-04-01 12:07:02 +0100540 combine(combine(SmallWinogradOutputTransformDatasetNHWC_F32,
Manuel Bottini0d0028c2018-10-02 16:41:52 +0100541 framework::dataset::make("DataType", { DataType::F32 })),
542 framework::dataset::make("ActivationInfo",{ ActivationLayerInfo() }) ))
Gian Marco Iodiced2fab732018-03-02 11:18:12 +0000543{
544 // Validate output
545 validate(CLAccessor(_target), _reference, tolerance_f32);
546}
547
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100548FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradOutputTransformFixtureFP32, framework::DatasetMode::NIGHTLY,
giuros013bfacb22019-04-01 12:07:02 +0100549 combine(combine(LargeWinogradOutputTransformDatasetNHWC_F32,
Manuel Bottini0d0028c2018-10-02 16:41:52 +0100550 framework::dataset::make("DataType", { DataType::F32 })),
551 framework::dataset::make("ActivationInfo",{ ActivationLayerInfo() }) ))
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100552{
553 // Validate output
554 validate(CLAccessor(_target), _reference, tolerance_f32);
555}
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100556TEST_SUITE_END() // FP32
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100557TEST_SUITE_END() // NHWC
Gian Marco Iodiced2fab732018-03-02 11:18:12 +0000558TEST_SUITE_END() // OutputTransform
559
560TEST_SUITE(ConvolutionLayer)
Gian Marco Iodiced2fab732018-03-02 11:18:12 +0000561DATA_TEST_CASE(Validate, framework::DatasetMode::ALL, zip(zip(zip(zip(zip(
562 framework::dataset::make("InputInfo", {
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100563 TensorInfo(TensorShape(17U, 31U, 2U), 1, DataType::F16), // Insufficient padding
Gian Marco Iodiced2fab732018-03-02 11:18:12 +0000564 TensorInfo(TensorShape(17U, 31U, 2U), 1, DataType::F32), // Datatype mismatch
565 TensorInfo(TensorShape(23U, 27U, 5U, 4U), 1, DataType::F32), // Stride y not supported
566 TensorInfo(TensorShape(16U, 16U, 8U), 1, DataType::F32), // Padding needed
567 TensorInfo(TensorShape(33U, 27U, 7U, 4U), 1, DataType::F32) // Kernel size not supported
568 }),
569 framework::dataset::make("WeightsInfo", {
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100570 TensorInfo(TensorShape(3U, 3U, 2U, 19U), 1, DataType::F16),
Gian Marco Iodiced2fab732018-03-02 11:18:12 +0000571 TensorInfo(TensorShape(3U, 3U, 2U, 19U), 1, DataType::QASYMM8),
572 TensorInfo(TensorShape(3U, 3U, 5U, 21U), 1, DataType::F32),
573 TensorInfo(TensorShape(3U, 3U, 8U, 16U), 1, DataType::F32),
574 TensorInfo(TensorShape(5U, 5U, 7U, 16U), 1, DataType::F16)
575 })),
576 framework::dataset::make("BiasesInfo", {
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100577 TensorInfo(TensorShape(19U), 1, DataType::F16),
Gian Marco Iodiced2fab732018-03-02 11:18:12 +0000578 TensorInfo(TensorShape(19U), 1, DataType::F32),
579 TensorInfo(TensorShape(21U), 1, DataType::F32),
580 TensorInfo(TensorShape(16U), 1, DataType::F32),
581 TensorInfo(TensorShape(16U), 1, DataType::F32)
582 })),
583 framework::dataset::make("OutputInfo", {
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100584 TensorInfo(TensorShape(17U, 31U, 19U), 1, DataType::F16),
Gian Marco Iodiced2fab732018-03-02 11:18:12 +0000585 TensorInfo(TensorShape(15U, 15U, 19U), 1, DataType::F32),
586 TensorInfo(TensorShape(21U, 25U, 21U, 4U), 1, DataType::F32),
587 TensorInfo(TensorShape(16U, 16U, 16U), 1, DataType::F32),
588 TensorInfo(TensorShape(11U, 12U, 16U, 4U), 1, DataType::F32)
589 })),
590 framework::dataset::make("ConvInfo", {
591 PadStrideInfo(1, 1, 1, 1),
592 PadStrideInfo(1, 1, 1, 1),
593 PadStrideInfo(1, 2, 0, 0),
594 PadStrideInfo(1, 1, 1, 1),
595 PadStrideInfo(1, 1, 1, 0)
596 })),
597 framework::dataset::make("Expected", { false, false, false, false, false })),
598 input_info, weights_info, bias_info, output_info, conv_info, expected)
599{
600 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);
601}
Gian Marco Iodiced2fab732018-03-02 11:18:12 +0000602
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100603TEST_SUITE(FP32)
Gian Marco Iodice2213d4b2018-04-27 10:39:06 +0100604using CLWinogradConvolutionLayerFastMathFixture = WinogradConvolutionLayerFastMathValidationFixture<CLTensor, CLAccessor, CLWinogradConvolutionLayer, float>;
Gian Marco Iodice6cf188c2018-05-04 16:36:50 +0100605TEST_SUITE(Conv3x3)
Gian Marco Iodice2213d4b2018-04-27 10:39:06 +0100606FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradConvolutionLayerFastMathFixture, framework::DatasetMode::PRECOMMIT,
Pablo Tello7282d562018-06-14 15:35:49 +0100607 combine(combine(combine(datasets::SmallWinogradConvolutionLayer3x3Dataset(),
608 framework::dataset::make("DataType", { DataType::F32 })),
Michalis Spyrou80943252019-01-10 17:19:50 +0000609 ActivationFunctionsSmallDataset),
Giorgio Arenaea55f912018-07-12 15:41:35 +0100610 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
Gian Marco Iodice2213d4b2018-04-27 10:39:06 +0100611{
612 // Validate output
Gian Marco Iodice4497e812018-05-08 16:36:52 +0100613 validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f32);
Gian Marco Iodice2213d4b2018-04-27 10:39:06 +0100614}
615
616FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradConvolutionLayerFastMathFixture, framework::DatasetMode::NIGHTLY,
Pablo Tello7282d562018-06-14 15:35:49 +0100617 combine(combine(combine(datasets::LargeWinogradConvolutionLayer3x3Dataset(),
618 framework::dataset::make("DataType", { DataType::F32 })),
Manuel Bottini0d0028c2018-10-02 16:41:52 +0100619 ActivationFunctionsDataset),
Giorgio Arenaea55f912018-07-12 15:41:35 +0100620 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
Gian Marco Iodice2213d4b2018-04-27 10:39:06 +0100621{
622 // Validate output
Gian Marco Iodice4497e812018-05-08 16:36:52 +0100623 validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f32);
Gian Marco Iodice2213d4b2018-04-27 10:39:06 +0100624}
Gian Marco Iodice6cf188c2018-05-04 16:36:50 +0100625TEST_SUITE_END() // Conv3x3
626
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100627TEST_SUITE(Conv3x1)
628FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradConvolutionLayerFastMathFixture, framework::DatasetMode::PRECOMMIT,
629 combine(combine(combine(datasets::SmallWinogradConvolutionLayer3x1Dataset(),
630 framework::dataset::make("DataType", { DataType::F32 })),
Michalis Spyrou80943252019-01-10 17:19:50 +0000631 ActivationFunctionsSmallDataset),
Giorgio Arenaea55f912018-07-12 15:41:35 +0100632 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100633{
634 // Validate output
635 validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f32);
636}
637
638FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradConvolutionLayerFastMathFixture, framework::DatasetMode::NIGHTLY,
639 combine(combine(combine(datasets::LargeWinogradConvolutionLayer3x1Dataset(),
640 framework::dataset::make("DataType", { DataType::F32 })),
Manuel Bottini0d0028c2018-10-02 16:41:52 +0100641 ActivationFunctionsDataset),
Giorgio Arenaea55f912018-07-12 15:41:35 +0100642 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100643{
644 // Validate output
645 validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f32);
646}
647TEST_SUITE_END() // Conv3x1
648
649TEST_SUITE(Conv1x3)
650FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradConvolutionLayerFastMathFixture, framework::DatasetMode::PRECOMMIT,
651 combine(combine(combine(datasets::SmallWinogradConvolutionLayer1x3Dataset(),
652 framework::dataset::make("DataType", { DataType::F32 })),
Michalis Spyrou80943252019-01-10 17:19:50 +0000653 ActivationFunctionsSmallDataset),
Giorgio Arenaea55f912018-07-12 15:41:35 +0100654 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100655{
656 // Validate output
657 validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f32);
658}
659
660FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradConvolutionLayerFastMathFixture, framework::DatasetMode::NIGHTLY,
661 combine(combine(combine(datasets::LargeWinogradConvolutionLayer1x3Dataset(),
662 framework::dataset::make("DataType", { DataType::F32 })),
Manuel Bottini0d0028c2018-10-02 16:41:52 +0100663 ActivationFunctionsDataset),
Giorgio Arenaea55f912018-07-12 15:41:35 +0100664 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
Gian Marco Iodicef1c2bf02018-06-13 14:05:54 +0100665{
666 // Validate output
667 validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f32);
668}
669TEST_SUITE_END() // Conv1x3
670
Gian Marco Iodice6cf188c2018-05-04 16:36:50 +0100671TEST_SUITE(Conv5x5)
672FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradConvolutionLayerFastMathFixture, framework::DatasetMode::PRECOMMIT,
Pablo Tello7282d562018-06-14 15:35:49 +0100673 combine(combine(combine(datasets::SmallWinogradConvolutionLayer5x5Dataset(),
674 framework::dataset::make("DataType", { DataType::F32 })),
Michalis Spyrou80943252019-01-10 17:19:50 +0000675 ActivationFunctionsSmallDataset ),
Giorgio Arenaea55f912018-07-12 15:41:35 +0100676 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
Pablo Tello7282d562018-06-14 15:35:49 +0100677
Gian Marco Iodice6cf188c2018-05-04 16:36:50 +0100678{
679 // Validate output
Gian Marco Iodice4497e812018-05-08 16:36:52 +0100680 validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f32);
Gian Marco Iodice6cf188c2018-05-04 16:36:50 +0100681}
682
683FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradConvolutionLayerFastMathFixture, framework::DatasetMode::NIGHTLY,
Pablo Tello7282d562018-06-14 15:35:49 +0100684 combine(combine(combine(datasets::LargeWinogradConvolutionLayer5x5Dataset(),
685 framework::dataset::make("DataType", { DataType::F32 })),
Manuel Bottini0d0028c2018-10-02 16:41:52 +0100686 ActivationFunctionsDataset ),
Giorgio Arenaea55f912018-07-12 15:41:35 +0100687 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
Pablo Tello7282d562018-06-14 15:35:49 +0100688
Gian Marco Iodice6cf188c2018-05-04 16:36:50 +0100689{
690 // Validate output
Gian Marco Iodice4497e812018-05-08 16:36:52 +0100691 validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f32);
Gian Marco Iodice6cf188c2018-05-04 16:36:50 +0100692}
693TEST_SUITE_END() // Conv5x5
Gian Marco Iodice2213d4b2018-04-27 10:39:06 +0100694
Gian Marco Iodice876be2a2018-07-03 12:22:09 +0100695TEST_SUITE(Conv5x1)
696FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradConvolutionLayerFastMathFixture, framework::DatasetMode::PRECOMMIT,
697 combine(combine(combine(datasets::SmallWinogradConvolutionLayer5x1Dataset(),
698 framework::dataset::make("DataType", { DataType::F32 })),
Michalis Spyrou80943252019-01-10 17:19:50 +0000699 ActivationFunctionsSmallDataset),
Giorgio Arenaea55f912018-07-12 15:41:35 +0100700 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
Gian Marco Iodice876be2a2018-07-03 12:22:09 +0100701
702{
703 // Validate output
704 validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f32);
705}
706
707FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradConvolutionLayerFastMathFixture, framework::DatasetMode::NIGHTLY,
708 combine(combine(combine(datasets::LargeWinogradConvolutionLayer5x1Dataset(),
709 framework::dataset::make("DataType", { DataType::F32 })),
Manuel Bottini0d0028c2018-10-02 16:41:52 +0100710 ActivationFunctionsDataset),
Giorgio Arenaea55f912018-07-12 15:41:35 +0100711 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
Gian Marco Iodice876be2a2018-07-03 12:22:09 +0100712
713{
714 // Validate output
715 validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f32);
716}
717TEST_SUITE_END() // Conv5x1
718
719TEST_SUITE(Conv1x5)
720FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradConvolutionLayerFastMathFixture, framework::DatasetMode::PRECOMMIT,
721 combine(combine(combine(datasets::SmallWinogradConvolutionLayer1x5Dataset(),
722 framework::dataset::make("DataType", { DataType::F32 })),
Michalis Spyrou80943252019-01-10 17:19:50 +0000723 ActivationFunctionsSmallDataset),
Giorgio Arenaea55f912018-07-12 15:41:35 +0100724 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
Gian Marco Iodice876be2a2018-07-03 12:22:09 +0100725
726{
727 // Validate output
728 validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f32);
729}
730
731FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradConvolutionLayerFastMathFixture, framework::DatasetMode::NIGHTLY,
732 combine(combine(combine(datasets::LargeWinogradConvolutionLayer1x5Dataset(),
733 framework::dataset::make("DataType", { DataType::F32 })),
Manuel Bottini0d0028c2018-10-02 16:41:52 +0100734 ActivationFunctionsDataset),
Giorgio Arenaea55f912018-07-12 15:41:35 +0100735 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
Gian Marco Iodice876be2a2018-07-03 12:22:09 +0100736
737{
738 // Validate output
739 validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f32);
740}
741TEST_SUITE_END() // Conv1x5
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100742TEST_SUITE_END() // FP32
743
Vidhya Sudhan Loganathana25d16c2018-11-16 11:33:12 +0000744
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100745TEST_SUITE(FP16)
746
Vidhya Sudhan Loganathana25d16c2018-11-16 11:33:12 +0000747using CLWinogradConvolutionLayerFastMathFixture16 = WinogradConvolutionLayerFastMathValidationFixture<CLTensor, CLAccessor, CLWinogradConvolutionLayer, half, float>;
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100748TEST_SUITE(Conv3x3)
749FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradConvolutionLayerFastMathFixture16, framework::DatasetMode::PRECOMMIT,
750 combine(combine(combine(datasets::SmallWinogradConvolutionLayer3x3Dataset(),
751 framework::dataset::make("DataType", { DataType::F16 })),
Michalis Spyrou80943252019-01-10 17:19:50 +0000752 ActivationFunctionsSmallDataset),
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100753 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
754{
755 // Validate output
756 validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f16);
757}
758
759FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradConvolutionLayerFastMathFixture16, framework::DatasetMode::NIGHTLY,
760 combine(combine(combine(datasets::LargeWinogradConvolutionLayer3x3Dataset(),
761 framework::dataset::make("DataType", { DataType::F16 })),
Manuel Bottini0d0028c2018-10-02 16:41:52 +0100762 ActivationFunctionsDataset),
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100763 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
764{
765 // Validate output
Vidhya Sudhan Loganathana25d16c2018-11-16 11:33:12 +0000766 validate(CLAccessor(_target), _reference, rel_tolerance_f16, tolerance_num, abs_tolerance_convolution_layer_f16);
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100767}
768TEST_SUITE_END() // Conv3x3
769
770TEST_SUITE(Conv3x1)
771FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradConvolutionLayerFastMathFixture16, framework::DatasetMode::PRECOMMIT,
772 combine(combine(combine(datasets::SmallWinogradConvolutionLayer3x1Dataset(),
773 framework::dataset::make("DataType", { DataType::F16 })),
Michalis Spyrou80943252019-01-10 17:19:50 +0000774 ActivationFunctionsSmallDataset),
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100775 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
776{
777 // Validate output
778 validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f16);
779}
780
781FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradConvolutionLayerFastMathFixture16, framework::DatasetMode::NIGHTLY,
782 combine(combine(combine(datasets::LargeWinogradConvolutionLayer3x1Dataset(),
783 framework::dataset::make("DataType", { DataType::F16 })),
Manuel Bottini0d0028c2018-10-02 16:41:52 +0100784 ActivationFunctionsDataset),
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100785 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
786{
787 // Validate output
Vidhya Sudhan Loganathana25d16c2018-11-16 11:33:12 +0000788 validate(CLAccessor(_target), _reference, rel_tolerance_f16, tolerance_num, abs_tolerance_convolution_layer_f16);
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100789}
790TEST_SUITE_END() // Conv3x1
791
792TEST_SUITE(Conv1x3)
793FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradConvolutionLayerFastMathFixture16, framework::DatasetMode::PRECOMMIT,
794 combine(combine(combine(datasets::SmallWinogradConvolutionLayer1x3Dataset(),
795 framework::dataset::make("DataType", { DataType::F16 })),
Michalis Spyrou80943252019-01-10 17:19:50 +0000796 ActivationFunctionsSmallDataset),
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100797 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
798{
799 // Validate output
800 validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f16);
801}
802
803FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradConvolutionLayerFastMathFixture16, framework::DatasetMode::NIGHTLY,
804 combine(combine(combine(datasets::LargeWinogradConvolutionLayer1x3Dataset(),
805 framework::dataset::make("DataType", { DataType::F16 })),
Manuel Bottini0d0028c2018-10-02 16:41:52 +0100806 ActivationFunctionsDataset),
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100807 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
808{
809 // Validate output
Vidhya Sudhan Loganathana25d16c2018-11-16 11:33:12 +0000810 validate(CLAccessor(_target), _reference, rel_tolerance_f16, tolerance_num, abs_tolerance_convolution_layer_f16);
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100811}
812TEST_SUITE_END() // Conv1x3
813
814TEST_SUITE(Conv5x5)
815FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradConvolutionLayerFastMathFixture16, framework::DatasetMode::PRECOMMIT,
816 combine(combine(combine(datasets::SmallWinogradConvolutionLayer5x5Dataset(),
817 framework::dataset::make("DataType", { DataType::F16 })),
Michalis Spyrou80943252019-01-10 17:19:50 +0000818 ActivationFunctionsSmallDataset),
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100819 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
820
821{
822 // Validate output
823 validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f16);
824}
825
826FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradConvolutionLayerFastMathFixture16, framework::DatasetMode::NIGHTLY,
827 combine(combine(combine(datasets::LargeWinogradConvolutionLayer5x5Dataset(),
828 framework::dataset::make("DataType", { DataType::F16 })),
Manuel Bottini0d0028c2018-10-02 16:41:52 +0100829 ActivationFunctionsDataset),
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100830 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
831
832{
833 // Validate output
Vidhya Sudhan Loganathana25d16c2018-11-16 11:33:12 +0000834 validate(CLAccessor(_target), _reference, rel_tolerance_f16, tolerance_num, abs_tolerance_convolution_layer_f16);
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100835}
836TEST_SUITE_END() // Conv5x5
837
838TEST_SUITE(Conv5x1)
839FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradConvolutionLayerFastMathFixture16, framework::DatasetMode::PRECOMMIT,
840 combine(combine(combine(datasets::SmallWinogradConvolutionLayer5x1Dataset(),
841 framework::dataset::make("DataType", { DataType::F16 })),
Michalis Spyrou80943252019-01-10 17:19:50 +0000842 ActivationFunctionsSmallDataset),
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100843 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
844
845{
846 // Validate output
847 validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f16);
848}
849
850FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradConvolutionLayerFastMathFixture16, framework::DatasetMode::NIGHTLY,
851 combine(combine(combine(datasets::LargeWinogradConvolutionLayer5x1Dataset(),
852 framework::dataset::make("DataType", { DataType::F16 })),
Manuel Bottini0d0028c2018-10-02 16:41:52 +0100853 ActivationFunctionsDataset),
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100854 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
855
856{
857 // Validate output
Vidhya Sudhan Loganathana25d16c2018-11-16 11:33:12 +0000858 validate(CLAccessor(_target), _reference, rel_tolerance_f16, tolerance_num, abs_tolerance_convolution_layer_f16);
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100859}
860TEST_SUITE_END() // Conv5x1
861
862TEST_SUITE(Conv1x5)
863FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradConvolutionLayerFastMathFixture16, framework::DatasetMode::PRECOMMIT,
864 combine(combine(combine(datasets::SmallWinogradConvolutionLayer1x5Dataset(),
865 framework::dataset::make("DataType", { DataType::F16 })),
Michalis Spyrou80943252019-01-10 17:19:50 +0000866 ActivationFunctionsSmallDataset),
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100867 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
868
869{
870 // Validate output
871 validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f16);
872}
873
874FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradConvolutionLayerFastMathFixture16, framework::DatasetMode::NIGHTLY,
875 combine(combine(combine(datasets::LargeWinogradConvolutionLayer1x5Dataset(),
876 framework::dataset::make("DataType", { DataType::F16 })),
Manuel Bottini0d0028c2018-10-02 16:41:52 +0100877 ActivationFunctionsDataset),
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100878 framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })))
879
880{
881 // Validate output
Vidhya Sudhan Loganathana25d16c2018-11-16 11:33:12 +0000882 validate(CLAccessor(_target), _reference, rel_tolerance_f16, tolerance_num, abs_tolerance_convolution_layer_f16);
Vidhya Sudhan Loganathan71ecf392018-08-31 16:10:16 +0100883}
884TEST_SUITE_END() // Conv1x5
885
886TEST_SUITE_END() // FP16
Vidhya Sudhan Loganathana25d16c2018-11-16 11:33:12 +0000887
Gian Marco Iodiced2fab732018-03-02 11:18:12 +0000888TEST_SUITE_END() // ConvolutionLayer
Gian Marco Iodice7e4b2392018-02-22 16:17:20 +0000889TEST_SUITE_END() // Winograd
890TEST_SUITE_END() // CL
Giorgio Arena1f9ca1d2018-03-01 11:13:45 +0000891} // namespace validation
892} // namespace test
893} // namespace arm_compute