From fe56edb4fd7a620fea4b6002d87a9763bdf8791a Mon Sep 17 00:00:00 2001 From: Sang-Hoon Park Date: Tue, 13 Apr 2021 20:21:11 +0100 Subject: Add padding consideration to pooling index computation Fix the pooling kernel which has been missing consideration of left padding, which can be implictly added by external kernels. Additionally, tests for FP16 have been added for the logic. Resolves: COMPMID-4363 Change-Id: I5655991cb80f749fb1ae9bbd3918b436a078f5d1 Signed-off-by: Sang-Hoon Park Reviewed-on: https://review.mlplatform.org/c/ml/ComputeLibrary/+/5421 Tested-by: Arm Jenkins Reviewed-by: Michele Di Giorgio Reviewed-by: Giorgio Arena Comments-Addressed: Arm Jenkins --- tests/validation/NEON/PoolingLayer.cpp | 57 ++++++++++++++++++++-------------- 1 file changed, 34 insertions(+), 23 deletions(-) (limited to 'tests/validation/NEON/PoolingLayer.cpp') diff --git a/tests/validation/NEON/PoolingLayer.cpp b/tests/validation/NEON/PoolingLayer.cpp index 9a6af49836..acc9c3e516 100644 --- a/tests/validation/NEON/PoolingLayer.cpp +++ b/tests/validation/NEON/PoolingLayer.cpp @@ -168,12 +168,12 @@ FIXTURE_DATA_TEST_CASE(RunSmall, NEPoolingLayerFixture, framework::Datase validate(Accessor(_target), _reference, tolerance_f32); } FIXTURE_DATA_TEST_CASE(RunMixedDataLayout, NEPoolingLayerMixedDataLayoutFixture, framework::DatasetMode::PRECOMMIT, combine(combine(datasets::SmallShapes(), - combine(combine(combine(combine(datasets::PoolingTypes(), - framework::dataset::make("PoolingSize", { Size2D(2, 2) })), - framework::dataset::make("PadStride", { PadStrideInfo(2, 1, 0, 0) })), - framework::dataset::make("ExcludePadding", { false })), - framework::dataset::make("DataType", DataType::F32))), - pool_data_layout_dataset)) + combine(combine(combine(combine(datasets::PoolingTypes(), + framework::dataset::make("PoolingSize", { Size2D(2, 2) })), + framework::dataset::make("PadStride", { PadStrideInfo(2, 1, 0, 0) })), + framework::dataset::make("ExcludePadding", { false })), + framework::dataset::make("DataType", DataType::F32))), + pool_data_layout_dataset)) { // Validate output validate(Accessor(_target), _reference, tolerance_f32); @@ -190,6 +190,17 @@ TEST_SUITE_END() // FP32 #ifdef __ARM_FEATURE_FP16_VECTOR_ARITHMETIC TEST_SUITE(FP16) +FIXTURE_DATA_TEST_CASE(RunIndices, NEPoolingLayerIndicesFixture, framework::DatasetMode::PRECOMMIT, combine(combine(datasets::SmallShapes(), combine(PoolingLayerIndicesDatasetFPSmall, + framework::dataset::make("DataType", + DataType::F16))), + framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC }) + + )) +{ + // Validate output + validate(Accessor(_target), _reference, tolerance_f16); + validate(Accessor(_target_indices), _ref_indices); +} FIXTURE_DATA_TEST_CASE(RunSmall, NEPoolingLayerFixture, framework::DatasetMode::PRECOMMIT, combine(combine(datasets::SmallShapes(), combine(PoolingLayerDatasetFPSmall, framework::dataset::make("DataType", DataType::F16))), pool_data_layout_dataset)) @@ -237,14 +248,14 @@ FIXTURE_DATA_TEST_CASE(RunSmall, NEPoolingLayerQuantizedFixture, framew validate(Accessor(_target), _reference, tolerance_qasymm8); } FIXTURE_DATA_TEST_CASE(RunMixedDataLayout, NEPoolingLayerQuantizedMixedDataLayoutFixture, framework::DatasetMode::PRECOMMIT, combine(combine(combine(combine(datasets::SmallShapes(), - combine(combine(combine(combine(framework::dataset::make("PoolingType", { PoolingType::MAX, PoolingType::AVG }), - framework::dataset::make("PoolingSize", { Size2D(2, 2) })), - framework::dataset::make("PadStride", { PadStrideInfo(1, 2, 1, 1) })), - framework::dataset::make("ExcludePadding", { true })), - framework::dataset::make("DataType", DataType::QASYMM8))), - framework::dataset::make("DataLayout", { DataLayout::NHWC, DataLayout::NCHW })), - framework::dataset::make("InputQuantInfo", { QuantizationInfo(1.f / 255.f, 10) })), - framework::dataset::make("OutputQuantInfo", { QuantizationInfo(1.f / 255.f, 5) }))) + combine(combine(combine(combine(framework::dataset::make("PoolingType", { PoolingType::MAX, PoolingType::AVG }), + framework::dataset::make("PoolingSize", { Size2D(2, 2) })), + framework::dataset::make("PadStride", { PadStrideInfo(1, 2, 1, 1) })), + framework::dataset::make("ExcludePadding", { true })), + framework::dataset::make("DataType", DataType::QASYMM8))), + framework::dataset::make("DataLayout", { DataLayout::NHWC, DataLayout::NCHW })), + framework::dataset::make("InputQuantInfo", { QuantizationInfo(1.f / 255.f, 10) })), + framework::dataset::make("OutputQuantInfo", { QuantizationInfo(1.f / 255.f, 5) }))) { // Validate output validate(Accessor(_target), _reference, tolerance_qasymm8); @@ -254,7 +265,7 @@ TEST_SUITE(QASYMM8_SIGNED) FIXTURE_DATA_TEST_CASE(RunSmall, NEPoolingLayerQuantizedFixture, framework::DatasetMode::PRECOMMIT, combine(combine(combine(combine(datasets::SmallShapes(), combine(PoolingLayerDatasetQASYMM8Small, framework::dataset::make("DataType", DataType::QASYMM8_SIGNED))), - framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })), + framework::dataset::make("DataLayout", { DataLayout::NCHW, DataLayout::NHWC })), qasymm8_signed_in_qinfo_dataset), qasymm8_signed_in_qinfo_dataset)) { @@ -262,14 +273,14 @@ FIXTURE_DATA_TEST_CASE(RunSmall, NEPoolingLayerQuantizedFixture, framewo validate(Accessor(_target), _reference, tolerance_qasymm8_s); } FIXTURE_DATA_TEST_CASE(RunMixedDataLayout, NEPoolingLayerQuantizedMixedDataLayoutFixture, framework::DatasetMode::PRECOMMIT, combine(combine(combine(combine(datasets::SmallShapes(), - combine(combine(combine(combine(framework::dataset::make("PoolingType", { PoolingType::MAX, PoolingType::AVG }), - framework::dataset::make("PoolingSize", { Size2D(2, 2) })), - framework::dataset::make("PadStride", { PadStrideInfo(1, 2, 1, 1) })), - framework::dataset::make("ExcludePadding", { true })), - framework::dataset::make("DataType", DataType::QASYMM8_SIGNED))), - framework::dataset::make("DataLayout", { DataLayout::NHWC, DataLayout::NCHW })), - framework::dataset::make("InputQuantInfo", { QuantizationInfo(1.f / 127.f, -10) })), - framework::dataset::make("OutputQuantInfo", { QuantizationInfo(1.f / 127.f, -10) }))) + combine(combine(combine(combine(framework::dataset::make("PoolingType", { PoolingType::MAX, PoolingType::AVG }), + framework::dataset::make("PoolingSize", { Size2D(2, 2) })), + framework::dataset::make("PadStride", { PadStrideInfo(1, 2, 1, 1) })), + framework::dataset::make("ExcludePadding", { true })), + framework::dataset::make("DataType", DataType::QASYMM8_SIGNED))), + framework::dataset::make("DataLayout", { DataLayout::NHWC, DataLayout::NCHW })), + framework::dataset::make("InputQuantInfo", { QuantizationInfo(1.f / 127.f, -10) })), + framework::dataset::make("OutputQuantInfo", { QuantizationInfo(1.f / 127.f, -10) }))) { // Validate output validate(Accessor(_target), _reference, tolerance_qasymm8_s); -- cgit v1.2.1