36 #include "tests/datasets/LargeConvolutionLayerDataset.h" 37 #include "tests/datasets/ShapeDatasets.h" 38 #include "tests/datasets/SmallConvolutionLayerDataset.h" 39 #include "tests/datasets/WinogradInputTransformDataset.h" 40 #include "tests/datasets/WinogradOutputTransformDataset.h" 45 #include "tests/validation/fixtures/WinogradConvolutionLayerFixture.h" 59 constexpr AbsoluteTolerance<float> tolerance_convolution_layer_f32(0.1f);
60 const AbsoluteTolerance<half> tolerance_convolution_layer_f16(
half(0.4f));
61 RelativeTolerance<half_float::half> rel_tolerance_f16(
half(0.2));
62 constexpr
float tolerance_num = 0.05f;
63 constexpr
float abs_tolerance_f32_nightly = 0.003f;
64 constexpr
float abs_tolerance_convolution_layer_f16 = 2.5f;
68 const auto SmallWinogradInputTransformDatasetNCHW =
77 datasets::SmallWinogradInputTransformDataset1x4_1x5()))))))));
79 const auto SmallWinogradInputTransformDatasetNHWC =
framework::dataset::concat(datasets::SmallWinogradInputTransformDataset4x4_3x3(),
86 datasets::SmallWinogradInputTransformDataset1x2_1x7())))))));
89 datasets::SmallWinogradInputTransformDataset2x2_7x7());
91 const auto LargeWinogradInputTransformDatasetNCHW =
100 datasets::LargeWinogradInputTransformDataset1x4_1x5()))))))));
102 const auto LargeWinogradInputTransformDatasetNHWC =
106 datasets::LargeWinogradInputTransformDataset1x4_1x5())));
108 const auto LargeWinogradInputTransformDatasetNHWC_FP32 =
110 (datasets::LargeWinogradInputTransformDataset2x2_7x7()));
113 const auto SmallWinogradFilterTransformDatasetNCHW =
121 const auto SmallWinogradFilterTransformDatasetNHWC_F16 =
131 const auto SmallWinogradFilterTransformDatasetNHWC_F32 =
135 const auto LargeWinogradFilterTransformDatasetNCHW =
143 const auto LargeWinogradFilterTransformDatasetNHWC_F16 =
153 const auto LargeWinogradFilterTransformDatasetNHWC_F32 =
158 const auto SmallWinogradOutputTransformDatasetNCHW = datasets::SmallWinogradOutputTransformDatasetNCHW();
160 const auto SmallWinogradOutputTransformDatasetNHWC_F16 = datasets::SmallWinogradOutputTransformDatasetNHWC_F16();
162 const auto SmallWinogradOutputTransformDatasetNHWC_F32 = datasets::SmallWinogradOutputTransformDatasetNHWC_F32();
164 const auto LargeWinogradOutputTransformDatasetNCHW = datasets::LargeWinogradOutputTransformDatasetNCHW();
166 const auto LargeWinogradOutputTransformDatasetNHWC_F16 = datasets::LargeWinogradOutputTransformDatasetNHWC_F16();
168 const auto LargeWinogradOutputTransformDatasetNHWC_F32 = datasets::LargeWinogradOutputTransformDatasetNHWC_F32();
173 ActivationLayerInfo(),
181 ActivationLayerInfo(),
197 framework::dataset::
make("InputInfo",{
216 WinogradInfo(
Size2D(2, 2),
Size2D(3, 3),
Size2D(53U, 21U),
PadStrideInfo(1, 1, 1, 0),
DataLayout::NCHW),
217 WinogradInfo(
Size2D(2, 2),
Size2D(3, 3),
Size2D(53U, 21U),
PadStrideInfo(1, 1, 0, 0),
DataLayout::NCHW),
218 WinogradInfo(
Size2D(2, 2),
Size2D(3, 3),
Size2D(53U, 21U),
PadStrideInfo(1, 1, 1, 1),
DataLayout::NCHW),
219 WinogradInfo(
Size2D(2, 2),
Size2D(3, 3),
Size2D(53U, 21U),
PadStrideInfo(2, 1, 1, 1),
DataLayout::NCHW),
220 WinogradInfo(
Size2D(2, 2),
Size2D(3, 3),
Size2D(53U, 33U),
PadStrideInfo(1, 1, 0, 1),
DataLayout::NCHW),
221 WinogradInfo(
Size2D(2, 2),
Size2D(3, 3),
Size2D(34U, 42U),
PadStrideInfo(1, 1, 0, 0),
DataLayout::NCHW),
222 WinogradInfo(
Size2D(2, 2),
Size2D(3, 3),
Size2D(31U, 37U),
PadStrideInfo(1, 1, 1, 1),
DataLayout::NCHW)
243 datasets::SmallWinogradInputTransformDataset2x2_3x3(),
298 datasets::SmallWinogradInputTransformDataset4x4_3x3(),
316 framework::dataset::
make("InputInfo",{
335 WinogradInfo(Size2D(2U, 2U), Size2D(3U, 3U), Size2D() , PadStrideInfo() ,
DataLayout::NCHW ),
336 WinogradInfo(Size2D(2U, 2U), Size2D(3U, 3U), Size2D() , PadStrideInfo() ,
DataLayout::NCHW ),
337 WinogradInfo(Size2D(2U, 2U), Size2D(3U, 3U), Size2D() , PadStrideInfo() ,
DataLayout::NCHW ),
338 WinogradInfo(Size2D(3U, 3U), Size2D(3U, 3U), Size2D() , PadStrideInfo() ,
DataLayout::NCHW ),
339 WinogradInfo(Size2D(2U, 2U), Size2D(3U, 3U), Size2D() , PadStrideInfo() ,
DataLayout::NCHW ),
340 WinogradInfo(Size2D(2U, 2U), Size2D(3U, 3U), Size2D() , PadStrideInfo() ,
DataLayout::NCHW ),
341 WinogradInfo(Size2D(4U, 4U), Size2D(3U, 3U), Size2D() , PadStrideInfo() ,
DataLayout::NCHW )
455 framework::dataset::
make("InputInfo",{
456 TensorInfo(TensorShape(512U, 49U, 16U, 5U), 1,
DataType::F16),
458 TensorInfo(TensorShape(512U, 49U, 16U, 5U), 1,
DataType::F32),
459 TensorInfo(TensorShape(512U, 49U, 16U, 5U), 1,
DataType::F32),
460 TensorInfo(TensorShape(13U, 108U, 16U, 4U), 1,
DataType::F32),
463 TensorInfo(TensorShape(7U, 256U, 36U, 3U), 1,
DataType::F32),
478 TensorInfo(TensorShape(14U, 14U, 512U, 5U), 1,
DataType::F16),
480 TensorInfo(TensorShape(14U, 14U, 512U, 5U), 1,
DataType::F32),
481 TensorInfo(TensorShape(14U, 14U, 512U, 5U), 1,
DataType::F32),
482 TensorInfo(TensorShape(17U, 23U, 13U, 4U), 1,
DataType::F32),
489 WinogradInfo(Size2D(2U, 2U), Size2D(3U, 3U), Size2D(14U, 14U), PadStrideInfo(1, 1, 1, 1),
DataLayout::NCHW),
490 WinogradInfo(Size2D(2U, 2U), Size2D(3U, 3U), Size2D(14U, 14U), PadStrideInfo(1, 1, 1, 1),
DataLayout::NCHW),
491 WinogradInfo(Size2D(2U, 2U), Size2D(5U, 5U), Size2D(14U, 14U), PadStrideInfo(1, 1, 1, 1),
DataLayout::NCHW),
492 WinogradInfo(Size2D(2U, 2U), Size2D(3U, 3U), Size2D(14U, 14U), PadStrideInfo(1, 1, 1, 1),
DataLayout::NCHW),
493 WinogradInfo(Size2D(2U, 2U), Size2D(3U, 3U), Size2D(17U, 23U), PadStrideInfo(1, 1, 1, 1),
DataLayout::NCHW),
494 WinogradInfo(Size2D(2U, 2U), Size2D(3U, 3U), Size2D(8U, 10U), PadStrideInfo(1, 1, 1, 1),
DataLayout::NCHW),
495 WinogradInfo(Size2D(2U, 3U), Size2D(3U, 3U), Size2D(8U, 10U), PadStrideInfo(1, 1, 0, 0),
DataLayout::NCHW),
496 WinogradInfo(Size2D(4U, 4U), Size2D(3U, 3U), Size2D(64U, 64U), PadStrideInfo(1, 1, 1, 1),
DataLayout::NCHW),
497 WinogradInfo(Size2D(4U, 4U), Size2D(3U, 3U), Size2D(64U, 64U), PadStrideInfo(1, 1, 1, 1),
DataLayout::NCHW)
499 framework::dataset::make(
"Expected", {
true,
false,
false,
true,
false,
true,
false,
true,
false })),
541 framework::dataset::make(
"WinogradInfo",
WinogradInfo(
Size2D(2U, 2U),
Size2D(3U, 3U),
Size2D(7U, 6U),
PadStrideInfo(1, 1, 0, 0),
DataLayout::NCHW))),
590 framework::dataset::make(
"WinogradInfo",
WinogradInfo(
Size2D(2U, 2U),
Size2D(7U, 7U),
Size2D(9U, 9U),
PadStrideInfo(1, 1, 0, 0),
DataLayout::NHWC))),
611 framework::dataset::
make("InputInfo", {
635 TensorInfo(TensorShape(21U, 25U, 21U, 4U), 1,
DataType::F32),
640 PadStrideInfo(1, 1, 1, 1),
641 PadStrideInfo(1, 1, 1, 1),
642 PadStrideInfo(1, 2, 0, 0),
643 PadStrideInfo(1, 1, 1, 1),
644 PadStrideInfo(1, 1, 1, 0)
659 ActivationFunctionsSmallDataset),
663 validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f32);
674 ActivationFunctionsSmallDataset),
678 validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f32);
683 ActivationFunctionsDataset),
687 validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f32);
695 ActivationFunctionsSmallDataset),
699 validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f32);
705 ActivationFunctionsDataset),
709 validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f32);
717 ActivationFunctionsSmallDataset),
721 validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f32);
727 ActivationFunctionsDataset),
731 validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f32);
739 ActivationFunctionsSmallDataset ),
744 validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f32);
750 ActivationFunctionsDataset ),
755 validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f32);
763 ActivationFunctionsSmallDataset),
768 validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f32);
774 ActivationFunctionsDataset),
779 validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f32);
787 ActivationFunctionsSmallDataset),
792 validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f32);
798 ActivationFunctionsDataset),
803 validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f32);
816 ActivationFunctionsSmallDataset),
826 ActivationFunctionsDataset),
830 validate(CLAccessor(_target), _reference, rel_tolerance_f16, tolerance_num, abs_tolerance_convolution_layer_f16);
838 ActivationFunctionsSmallDataset),
848 ActivationFunctionsDataset),
852 validate(CLAccessor(_target), _reference, rel_tolerance_f16, tolerance_num, abs_tolerance_convolution_layer_f16);
860 ActivationFunctionsSmallDataset),
870 ActivationFunctionsDataset),
874 validate(CLAccessor(_target), _reference, rel_tolerance_f16, tolerance_num, abs_tolerance_convolution_layer_f16);
882 ActivationFunctionsSmallDataset),
893 ActivationFunctionsDataset),
898 validate(CLAccessor(_target), _reference, rel_tolerance_f16, tolerance_num, abs_tolerance_convolution_layer_f16);
906 ActivationFunctionsSmallDataset),
917 ActivationFunctionsDataset),
922 validate(CLAccessor(_target), _reference, rel_tolerance_f16, tolerance_num, abs_tolerance_convolution_layer_f16);
930 ActivationFunctionsSmallDataset),
941 ActivationFunctionsDataset),
946 validate(CLAccessor(_target), _reference, rel_tolerance_f16, tolerance_num, abs_tolerance_convolution_layer_f16);
954 ActivationFunctionsSmallDataset),
965 ActivationFunctionsDataset),
970 validate(CLAccessor(_target), _reference, rel_tolerance_f16, tolerance_num, abs_tolerance_convolution_layer_f16);
WinogradFilterTransformValidationFixture< CLTensor, CLAccessor, CLWinogradFilterTransform, float > CLWinogradFilterTransformFixtureFP32
WinogradConvolutionLayerFastMathValidationFixture< CLTensor, CLAccessor, CLWinogradConvolutionLayer, float, float, true, true > CLWinogradConvolutionLayerFastMathMixedDataLayoutFixture
RelativeTolerance< float > tolerance_f32(0.001f)
F32 Tolerance value for comparing reference's output against implementation's output for floating poi...
constexpr float tolerance_num_f16
F16 Tolerance number.
half_float::half half
16-bit floating point type
1 channel, 1 F32 per channel
ARM_COMPUTE_EXPECT(has_error==expected, framework::LogLevel::ERRORS)
WinogradConvolutionLayerFastMathValidationFixture< CLTensor, CLAccessor, CLWinogradConvolutionLayer, float > CLWinogradConvolutionLayerFastMathFixture
As above but this also setups a Zero border on the input tensor of the specified bordersize.
std::enable_if< is_container< T >::value, ContainerDataset< T > >::type make(std::string name, T &&values)
Helper function to create a ContainerDataset.
Activation Layer Information class.
Copyright (c) 2017-2021 Arm Limited.
1 channel, 1 F16 per channel
WinogradInputTransformValidationFixture< CLTensor, CLAccessor, CLWinogradInputTransform, float > CLWinogradInputTransformFixtureFP32
WinogradFilterTransformValidationFixture< CLTensor, CLAccessor, CLWinogradFilterTransform, half > CLWinogradFilterTransformFixtureFP16
DATA_TEST_CASE(Validate, framework::DatasetMode::ALL, zip(zip(zip(framework::dataset::make("InputInfo", { TensorInfo(TensorShape(27U, 13U, 2U), 1, DataType::F32), TensorInfo(TensorShape(27U, 13U, 2U), 1, DataType::F32), TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::F32), TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::QASYMM8), TensorInfo(TensorShape(27U, 13U, 2U), 1, DataType::QASYMM8), TensorInfo(TensorShape(27U, 13U, 2U), 1, DataType::F32), TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::QSYMM16), TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::QSYMM16), TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::QSYMM16), }), framework::dataset::make("OutputInfo",{ TensorInfo(TensorShape(27U, 13U, 2U), 1, DataType::F16), TensorInfo(TensorShape(27U, 13U, 2U), 1, DataType::F32), TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::F32), TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::QASYMM8), TensorInfo(TensorShape(27U, 13U, 2U), 1, DataType::QASYMM8), TensorInfo(TensorShape(30U, 11U, 2U), 1, DataType::F32), TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::QSYMM16, QuantizationInfo(1.f/32768.f, 0)), TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::QSYMM16, QuantizationInfo(1.f/32768.f, 0)), TensorInfo(TensorShape(32U, 13U, 2U), 1, DataType::QSYMM16, QuantizationInfo(1.f/32768.f, 0)), })), framework::dataset::make("ActivationInfo", { ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::RELU), ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::RELU), ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::RELU), ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::LU_BOUNDED_RELU), ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::TANH), ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::RELU), ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::TANH), ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::LOGISTIC), ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::SQRT), })), framework::dataset::make("Expected", { false, true, true, true, false, false, true, true, false })), input_info, output_info, act_info, expected)
WinogradOutputTransformValidationFixture< CLTensor, CLAccessor, CLWinogradOutputTransform, float > CLWinogradOutputTransformFixtureFP32
DatasetMode
Possible dataset modes.
TEST_SUITE_END() FIXTURE_DATA_TEST_CASE(RunSmall
[CLActivationLayer Test snippet]
WinogradOutputTransformValidationFixture< CLTensor, CLAccessor, CLWinogradOutputTransform, half > CLWinogradOutputTransformFixtureFP16
quantized, asymmetric fixed-point 8-bit number unsigned
Accessor implementation for CLTensor objects.
TEST_SUITE(U8_to_S8) FIXTURE_DATA_TEST_CASE(RunSmall
Padding and stride information class.
WinogradFilterTransformValidationFixture< CLTensor, CLAccessor, CLWinogradFilterTransform, float, true > CLWinogradFilterTransformMixedDataLayoutFixtureFP32
validate(CLAccessor(output_state), expected_output)
static Status validate(const ITensorInfo *input, const ITensorInfo *weights, const ITensorInfo *biases, const ITensorInfo *output, const PadStrideInfo &conv_info, const ActivationLayerInfo &act_info=ActivationLayerInfo(), bool enable_fast_math=false)
Static function to check if given info will lead to a valid configuration of CLWinogradConvolutionLay...
WinogradOutputTransformValidationFixture< CLTensor, CLAccessor, CLWinogradOutputTransform, float, true > CLWinogradOutputTransformMixedDataLayoutFixtureFP32
Num samples, channels, height, width.
Lower and Upper Bounded Rectifier ( )
FIXTURE_DATA_TEST_CASE(RunSmall, CLAbsLayerFixture< half >, framework::DatasetMode::PRECOMMIT, combine(datasets::SmallShapes(), framework::dataset::make("DataType", DataType::F16)))
Upper Bounded Rectifier ( )
Class for specifying the size of an image or rectangle.
Num samples, height, width, channels.
WinogradInputTransformValidationFixture< CLTensor, CLAccessor, CLWinogradInputTransform, half > CLWinogradInputTransformFixtureFP16
Store the tensor's metadata.
JoinDataset< T, U > concat(T &&dataset1, U &&dataset2)
Helper function to create a JoinDataset.
RelativeTolerance< half_float::half > tolerance_f16(half(0.2))
F16 Tolerance value for comparing reference's output against implementation's output for floating poi...
Basic function to execute Winograd-based convolution on OpenCL.
zip(zip(framework::dataset::make("Weights", { TensorInfo(TensorShape(32U, 13U, 2U, 2U), 1, DataType::F32), TensorInfo(TensorShape(32U, 13U, 2U, 2U), 1, DataType::F32), TensorInfo(TensorShape(32U, 13U, 2U, 1U), 1, DataType::F32), }), framework::dataset::make("MVBGInfo",{ TensorInfo(TensorShape(2U), 1, DataType::F32), TensorInfo(TensorShape(2U), 1, DataType::F16), TensorInfo(TensorShape(5U), 1, DataType::F32), })), framework::dataset::make("Expected", { true, false, false}))
DataType
Available data types.
WinogradInputTransformValidationFixture< CLTensor, CLAccessor, CLWinogradInputTransform, float, true > CLWinogradInputTransformMixedDataLayoutFixtureFP32
DataLayout
[DataLayout enum definition]
combine(datasets::SmallShapes(), framework::dataset::make("DataType", DataType::F32)))
CLWinogradConvolutionLayerFastMathFixture16
Basic implementation of the OpenCL tensor interface.