diff options
author | Gunes Bayir <gunes.bayir@arm.com> | 2021-08-04 12:45:33 +0100 |
---|---|---|
committer | Gunes Bayir <gunes.bayir@arm.com> | 2021-08-04 14:45:38 +0000 |
commit | 38ce29d5dce9a09769b55b2717d105f984247e31 (patch) | |
tree | 2efbed1caa028a18467fc492151f0c44d2559114 | |
parent | 663419457b02238687cb329afcddc73719bdb8fa (diff) | |
download | ComputeLibrary-38ce29d5dce9a09769b55b2717d105f984247e31.tar.gz |
Fix CL direct conv layer test FP32 absolute tolerance issue
In CL/DirectConvolutionLayer tests, only relative tolerance was
being used, and this was causing issues for some small numbers.
Resolves: COMPMID-4755
Signed-off-by: Gunes Bayir <gunes.bayir@arm.com>
Change-Id: I976b70d393a0c196daf37047852eaf8894951e78
Reviewed-on: https://review.mlplatform.org/c/ml/ComputeLibrary/+/6037
Reviewed-by: Michele Di Giorgio <michele.digiorgio@arm.com>
Comments-Addressed: Arm Jenkins <bsgcomp@arm.com>
Tested-by: Arm Jenkins <bsgcomp@arm.com>
-rw-r--r-- | tests/validation/CL/DirectConvolutionLayer.cpp | 46 |
1 files changed, 25 insertions, 21 deletions
diff --git a/tests/validation/CL/DirectConvolutionLayer.cpp b/tests/validation/CL/DirectConvolutionLayer.cpp index a057f48c87..324b076482 100644 --- a/tests/validation/CL/DirectConvolutionLayer.cpp +++ b/tests/validation/CL/DirectConvolutionLayer.cpp @@ -43,10 +43,12 @@ namespace validation { namespace { -RelativeTolerance<half> tolerance_fp16(half(0.2)); /**< Tolerance for floating point tests */ -RelativeTolerance<float> tolerance_fp32(0.05f); /**< Tolerance for floating point tests */ -constexpr float tolerance_num = 0.07f; /**< Tolerance number */ -constexpr AbsoluteTolerance<uint8_t> tolerance_qasymm8(1); /**< Tolerance for quantized tests */ +RelativeTolerance<half> tolerance_fp16(half(0.2)); /**< Tolerance for floating point tests */ +RelativeTolerance<float> tolerance_fp32(0.05f); /**< Tolerance for floating point tests */ +constexpr float abs_tolerance_f32(0.0001f); /**< Absolute tolerance for FP32 tests*/ + +constexpr float tolerance_num = 0.07f; /**< Tolerance number */ +constexpr AbsoluteTolerance<uint8_t> tolerance_qasymm8(1); /**< Tolerance for quantized tests */ const auto data_strides = combine(framework::dataset::make("StrideX", 1, 3), framework::dataset::make("StrideY", 1, 3)); const auto data_strides_small = combine(framework::dataset::make("StrideX", 1), framework::dataset::make("StrideY", 1)); @@ -273,7 +275,7 @@ FIXTURE_DATA_TEST_CASE(RunSmall, CLDirectConvolutionLayerFixture<float>, framewo framework::dataset::make("ActivationInfo", ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::RELU) )), framework::dataset::make("DataLayout", DataLayout::NHWC))) { - validate(CLAccessor(_target), _reference, tolerance_fp32); + validate(CLAccessor(_target), _reference, tolerance_fp32, 0.0, abs_tolerance_f32); } FIXTURE_DATA_TEST_CASE(RunMixedDataLayout, CLDirectConvolutionLayerMixedDataLayoutFixture<float>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(zip(zip(zip(zip(zip(zip( @@ -291,7 +293,7 @@ FIXTURE_DATA_TEST_CASE(RunMixedDataLayout, CLDirectConvolutionLayerMixedDataLayo framework::dataset::make("ActivationInfo", ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::RELU) )), framework::dataset::make("DataLayout", DataLayout::NHWC))) { - validate(CLAccessor(_target), _reference, tolerance_fp32); + validate(CLAccessor(_target), _reference, tolerance_fp32, 0.0, abs_tolerance_f32); } FIXTURE_DATA_TEST_CASE(RunLarge, CLDirectConvolutionLayerFixture<float>, framework::DatasetMode::NIGHTLY, combine(combine(combine(zip(zip(zip(zip(zip(zip( @@ -306,7 +308,7 @@ FIXTURE_DATA_TEST_CASE(RunLarge, CLDirectConvolutionLayerFixture<float>, framewo framework::dataset::make("ActivationInfo", ActivationLayerInfo(ActivationLayerInfo::ActivationFunction::IDENTITY) )), framework::dataset::make("DataLayout", DataLayout::NHWC))) { - validate(CLAccessor(_target), _reference, tolerance_fp32); + validate(CLAccessor(_target), _reference, tolerance_fp32, 0.0, abs_tolerance_f32); } TEST_SUITE_END() // FP32 @@ -454,20 +456,21 @@ FIXTURE_DATA_TEST_CASE(RunSmall, CLDirectConvolutionLayerFixture<float>, framewo ActivationFunctionsDataset), framework::dataset::make("DataLayout", { DataLayout::NCHW }))) { - validate(CLAccessor(_target), _reference, tolerance_fp32); + validate(CLAccessor(_target), _reference, tolerance_fp32, 0.0, abs_tolerance_f32); } -FIXTURE_DATA_TEST_CASE(RunMixedDataLayout, CLDirectConvolutionLayerMixedDataLayoutFixture<float>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(data_precommit, framework::dataset::make("DataType", - DataType::F32)), - ActivationFunctionsDataset), - framework::dataset::make("DataLayout", { DataLayout::NCHW }))) +FIXTURE_DATA_TEST_CASE(RunMixedDataLayout, CLDirectConvolutionLayerMixedDataLayoutFixture<float>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(data_precommit, + framework::dataset::make("DataType", + DataType::F32)), + ActivationFunctionsDataset), + framework::dataset::make("DataLayout", { DataLayout::NCHW }))) { - validate(CLAccessor(_target), _reference, tolerance_fp32); + validate(CLAccessor(_target), _reference, tolerance_fp32, 0.0, abs_tolerance_f32); } FIXTURE_DATA_TEST_CASE(RunLarge, CLDirectConvolutionLayerFixture<float>, framework::DatasetMode::NIGHTLY, combine(combine(combine(data_nightly, framework::dataset::make("DataType", DataType::F32)), ActivationFunctionsDataset), framework::dataset::make("DataLayout", { DataLayout::NCHW }))) { - validate(CLAccessor(_target), _reference, tolerance_fp32); + validate(CLAccessor(_target), _reference, tolerance_fp32, 0.0, abs_tolerance_f32); } TEST_SUITE_END() // FP32 @@ -477,7 +480,7 @@ FIXTURE_DATA_TEST_CASE(Run, CLDirectConvolutionValidationWithTensorShapesFixture ActivationFunctionsDataset)) { // Validate output - validate(CLAccessor(_target), _reference, tolerance_fp32); + validate(CLAccessor(_target), _reference, tolerance_fp32, 0.0, abs_tolerance_f32); } TEST_SUITE_END() // FP32_CustomDataset TEST_SUITE_END() // Float @@ -492,7 +495,7 @@ TEST_SUITE(Quantized) TEST_SUITE(QASYMM8) FIXTURE_DATA_TEST_CASE(RunMixedDataLayout, CLDirectConvolutionLayerQuantizedMixedDataLayoutFixture<uint8_t>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(combine(data_precommit, framework::dataset::make("DataType", DataType::QASYMM8)), - framework::dataset::make("QuantizationInfo", { QuantizationInfo(2.f / 255, 10)})), + framework::dataset::make("QuantizationInfo", { QuantizationInfo(2.f / 255, 10) })), QuantizedActivationFunctionsDataset), framework::dataset::make("DataLayout", { DataLayout::NCHW }))) { @@ -564,11 +567,12 @@ FIXTURE_DATA_TEST_CASE(RunSmall, CLDirectConvolutionLayerQuantizedFixture<int8_t // Validate output validate(CLAccessor(_target), _reference, tolerance_qasymm8); } -FIXTURE_DATA_TEST_CASE(RunMixedDataLayout, CLDirectConvolutionLayerQuantizedMixedDataLayoutFixture<int8_t>, framework::DatasetMode::ALL, combine(combine(combine(combine(data_precommit, framework::dataset::make("DataType", - DataType::QASYMM8_SIGNED)), - framework::dataset::make("QuantizationInfo", { QuantizationInfo(1.1f, -10) })), - QuantizedActivationFunctionsDataset), - framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC }))) +FIXTURE_DATA_TEST_CASE(RunMixedDataLayout, CLDirectConvolutionLayerQuantizedMixedDataLayoutFixture<int8_t>, framework::DatasetMode::ALL, combine(combine(combine(combine(data_precommit, + framework::dataset::make("DataType", + DataType::QASYMM8_SIGNED)), + framework::dataset::make("QuantizationInfo", { QuantizationInfo(1.1f, -10) })), + QuantizedActivationFunctionsDataset), + framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC }))) { // Validate output validate(CLAccessor(_target), _reference, tolerance_qasymm8); |