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_convolution_layer_f16 = 2.5f;
67 const auto SmallWinogradInputTransformDatasetNCHW =
76 datasets::SmallWinogradInputTransformDataset1x4_1x5()))))))));
78 const auto SmallWinogradInputTransformDatasetNHWC =
framework::dataset::concat(datasets::SmallWinogradInputTransformDataset4x4_3x3(),
85 datasets::SmallWinogradInputTransformDataset1x2_1x7())))))));
88 datasets::SmallWinogradInputTransformDataset2x2_7x7());
90 const auto LargeWinogradInputTransformDatasetNCHW =
99 datasets::LargeWinogradInputTransformDataset1x4_1x5()))))))));
101 const auto LargeWinogradInputTransformDatasetNHWC =
105 datasets::LargeWinogradInputTransformDataset1x4_1x5())));
107 const auto LargeWinogradInputTransformDatasetNHWC_FP32 =
109 (datasets::LargeWinogradInputTransformDataset2x2_7x7()));
112 const auto SmallWinogradFilterTransformDatasetNCHW =
120 const auto SmallWinogradFilterTransformDatasetNHWC_F16 =
130 const auto SmallWinogradFilterTransformDatasetNHWC_F32 =
134 const auto LargeWinogradFilterTransformDatasetNCHW =
142 const auto LargeWinogradFilterTransformDatasetNHWC_F16 =
152 const auto LargeWinogradFilterTransformDatasetNHWC_F32 =
157 const auto SmallWinogradOutputTransformDatasetNCHW = datasets::SmallWinogradOutputTransformDatasetNCHW();
159 const auto SmallWinogradOutputTransformDatasetNHWC_F16 = datasets::SmallWinogradOutputTransformDatasetNHWC_F16();
161 const auto SmallWinogradOutputTransformDatasetNHWC_F32 = datasets::SmallWinogradOutputTransformDatasetNHWC_F32();
163 const auto LargeWinogradOutputTransformDatasetNCHW = datasets::LargeWinogradOutputTransformDatasetNCHW();
165 const auto LargeWinogradOutputTransformDatasetNHWC_F16 = datasets::LargeWinogradOutputTransformDatasetNHWC_F16();
167 const auto LargeWinogradOutputTransformDatasetNHWC_F32 = datasets::LargeWinogradOutputTransformDatasetNHWC_F32();
172 ActivationLayerInfo(),
180 ActivationLayerInfo(),
196 framework::dataset::
make("InputInfo",{
215 WinogradInfo(
Size2D(2, 2),
Size2D(3, 3),
Size2D(53
U, 21
U),
PadStrideInfo(1, 1, 1, 0),
DataLayout::NCHW),
216 WinogradInfo(
Size2D(2, 2),
Size2D(3, 3),
Size2D(53
U, 21
U),
PadStrideInfo(1, 1, 0, 0),
DataLayout::NCHW),
217 WinogradInfo(
Size2D(2, 2),
Size2D(3, 3),
Size2D(53
U, 21
U),
PadStrideInfo(1, 1, 1, 1),
DataLayout::NCHW),
218 WinogradInfo(
Size2D(2, 2),
Size2D(3, 3),
Size2D(53
U, 21
U),
PadStrideInfo(2, 1, 1, 1),
DataLayout::NCHW),
219 WinogradInfo(
Size2D(2, 2),
Size2D(3, 3),
Size2D(53
U, 33
U),
PadStrideInfo(1, 1, 0, 1),
DataLayout::NCHW),
220 WinogradInfo(
Size2D(2, 2),
Size2D(3, 3),
Size2D(34
U, 42
U),
PadStrideInfo(1, 1, 0, 0),
DataLayout::NCHW),
221 WinogradInfo(
Size2D(2, 2),
Size2D(3, 3),
Size2D(31
U, 37
U),
PadStrideInfo(1, 1, 1, 1),
DataLayout::NCHW)
458 WinogradInfo(
Size2D(2
U, 2
U),
Size2D(3
U, 3
U),
Size2D(14
U, 14
U),
PadStrideInfo(1, 1, 1, 1),
DataLayout::NCHW),
459 WinogradInfo(
Size2D(2
U, 2
U),
Size2D(3
U, 3
U),
Size2D(14
U, 14
U),
PadStrideInfo(1, 1, 1, 1),
DataLayout::NCHW),
460 WinogradInfo(
Size2D(2
U, 2
U),
Size2D(5
U, 5
U),
Size2D(14
U, 14
U),
PadStrideInfo(1, 1, 1, 1),
DataLayout::NCHW),
461 WinogradInfo(
Size2D(2
U, 2
U),
Size2D(3
U, 3
U),
Size2D(14
U, 14
U),
PadStrideInfo(1, 1, 1, 1),
DataLayout::NCHW),
462 WinogradInfo(
Size2D(2
U, 2
U),
Size2D(3
U, 3
U),
Size2D(17
U, 23
U),
PadStrideInfo(1, 1, 1, 1),
DataLayout::NCHW),
463 WinogradInfo(
Size2D(2
U, 2
U),
Size2D(3
U, 3
U),
Size2D(8
U, 10
U),
PadStrideInfo(1, 1, 1, 1),
DataLayout::NCHW),
464 WinogradInfo(
Size2D(2
U, 3
U),
Size2D(3
U, 3
U),
Size2D(8
U, 10
U),
PadStrideInfo(1, 1, 0, 0),
DataLayout::NCHW),
465 WinogradInfo(
Size2D(4
U, 4
U),
Size2D(3
U, 3
U),
Size2D(64
U, 64
U),
PadStrideInfo(1, 1, 1, 1),
DataLayout::NCHW),
466 WinogradInfo(
Size2D(4
U, 4
U),
Size2D(3
U, 3
U),
Size2D(64
U, 64
U),
PadStrideInfo(1, 1, 1, 1),
DataLayout::NCHW)
468 framework::dataset::make(
"Expected", {
true,
false,
false,
true,
false,
true,
false,
true,
false })),
610 ActivationFunctionsSmallDataset),
620 ActivationFunctionsDataset),
632 ActivationFunctionsSmallDataset),
642 ActivationFunctionsDataset),
654 ActivationFunctionsSmallDataset),
664 ActivationFunctionsDataset),
676 ActivationFunctionsSmallDataset ),
687 ActivationFunctionsDataset ),
700 ActivationFunctionsSmallDataset),
711 ActivationFunctionsDataset),
724 ActivationFunctionsSmallDataset),
735 ActivationFunctionsDataset),
753 ActivationFunctionsSmallDataset),
757 validate(
CLAccessor(_target), _reference, tolerance_convolution_layer_f16, tolerance_num_f16);
763 ActivationFunctionsDataset),
767 validate(
CLAccessor(_target), _reference, rel_tolerance_f16, tolerance_num, abs_tolerance_convolution_layer_f16);
775 ActivationFunctionsSmallDataset),
779 validate(
CLAccessor(_target), _reference, tolerance_convolution_layer_f16, tolerance_num_f16);
785 ActivationFunctionsDataset),
789 validate(
CLAccessor(_target), _reference, rel_tolerance_f16, tolerance_num, abs_tolerance_convolution_layer_f16);
797 ActivationFunctionsSmallDataset),
801 validate(
CLAccessor(_target), _reference, tolerance_convolution_layer_f16, tolerance_num_f16);
807 ActivationFunctionsDataset),
811 validate(
CLAccessor(_target), _reference, rel_tolerance_f16, tolerance_num, abs_tolerance_convolution_layer_f16);
819 ActivationFunctionsSmallDataset),
824 validate(
CLAccessor(_target), _reference, tolerance_convolution_layer_f16, tolerance_num_f16);
830 ActivationFunctionsDataset),
835 validate(
CLAccessor(_target), _reference, rel_tolerance_f16, tolerance_num, abs_tolerance_convolution_layer_f16);
843 ActivationFunctionsSmallDataset),
848 validate(
CLAccessor(_target), _reference, tolerance_convolution_layer_f16, tolerance_num_f16);
854 ActivationFunctionsDataset),
859 validate(
CLAccessor(_target), _reference, rel_tolerance_f16, tolerance_num, abs_tolerance_convolution_layer_f16);
867 ActivationFunctionsSmallDataset),
872 validate(
CLAccessor(_target), _reference, tolerance_convolution_layer_f16, tolerance_num_f16);
878 ActivationFunctionsDataset),
883 validate(
CLAccessor(_target), _reference, rel_tolerance_f16, tolerance_num, abs_tolerance_convolution_layer_f16);
891 ActivationFunctionsSmallDataset),
896 validate(
CLAccessor(_target), _reference, tolerance_convolution_layer_f16, tolerance_num_f16);
902 ActivationFunctionsDataset),
907 validate(
CLAccessor(_target), _reference, rel_tolerance_f16, tolerance_num, abs_tolerance_convolution_layer_f16);
WinogradFilterTransformValidationFixture< CLTensor, CLAccessor, CLWinogradFilterTransform, float > CLWinogradFilterTransformFixtureFP32
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.
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...
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.
DataLayout
[DataLayout enum definition]
combine(datasets::SmallShapes(), framework::dataset::make("DataType", DataType::F32)))
CLWinogradConvolutionLayerFastMathFixture16
Basic implementation of the OpenCL tensor interface.