diff options
author | Sanghoon Lee <sanghoon.lee@arm.com> | 2018-01-12 16:19:10 +0000 |
---|---|---|
committer | Anthony Barbier <anthony.barbier@arm.com> | 2018-11-02 16:44:21 +0000 |
commit | c8d231626cc204034ab1053f9031ebbb631f1ba9 (patch) | |
tree | b15e9a0d9500d34beec61a9e2051dcc7de75ae03 /tests/validation/NEON/Convolution.cpp | |
parent | 503cec81c77eaa0d7f6b98358de287bbfe04bcb5 (diff) | |
download | ComputeLibrary-c8d231626cc204034ab1053f9031ebbb631f1ba9.tar.gz |
COMPMID-564: Implement reference and CL/NEON validation for CustomConvolution (output S16)
Change-Id: Ic099336f558e994210a59e14ec0171fae68ccb80
Reviewed-on: https://eu-gerrit-1.euhpc.arm.com/116663
Reviewed-by: Pablo Tello <pablo.tello@arm.com>
Tested-by: Jenkins <bsgcomp@arm.com>
Diffstat (limited to 'tests/validation/NEON/Convolution.cpp')
-rw-r--r-- | tests/validation/NEON/Convolution.cpp | 309 |
1 files changed, 279 insertions, 30 deletions
diff --git a/tests/validation/NEON/Convolution.cpp b/tests/validation/NEON/Convolution.cpp index 5af803010b..02c8abc419 100644 --- a/tests/validation/NEON/Convolution.cpp +++ b/tests/validation/NEON/Convolution.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017, 2018 ARM Limited. + * Copyright (c) 2017-2018 ARM Limited. * * SPDX-License-Identifier: MIT * @@ -49,21 +49,22 @@ namespace * while reference performs direct division with scale. */ constexpr AbsoluteTolerance<uint8_t> tolerance_u8(1); +constexpr AbsoluteTolerance<int16_t> tolerance_s16(1); } // namespace TEST_SUITE(NEON) TEST_SUITE(CustomConvolution) -TEST_SUITE(CustomConvolutionSuqare) -TEST_SUITE(CustomConvolution3x3) +TEST_SUITE(CustomConvolutionSquare) +TEST_SUITE(CustomConvolutionSquare3x3) -DATA_TEST_CASE(Configuration, framework::DatasetMode::ALL, combine(combine(combine(concat(datasets::SmallShapes(), datasets::LargeShapes()), framework::dataset::make("DataType", DataType::U8)), +DATA_TEST_CASE(Configuration, framework::DatasetMode::ALL, combine(combine(combine(concat(datasets::SmallShapes(), datasets::LargeShapes()), framework::dataset::make("DataType", { DataType::U8, DataType::S16 })), datasets::BorderModes()), framework::dataset::make("filter_size", { 3 })), - shape, data_type, border_mode, filter_size) + shape, output_data_type, border_mode, filter_size) { // Create tensors - Tensor src = create_tensor<Tensor>(shape, data_type); - Tensor dst = create_tensor<Tensor>(shape, data_type); + Tensor src = create_tensor<Tensor>(shape, DataType::U8); + Tensor dst = create_tensor<Tensor>(shape, output_data_type); // Create conv matrix int16_t conv[9]; @@ -98,6 +99,7 @@ DATA_TEST_CASE(Configuration, framework::DatasetMode::ALL, combine(combine(combi template <typename T> using NEConvolutionFixture = ConvolutionSquareValidationFixture<Tensor, Accessor, NEConvolution3x3, T>; +TEST_SUITE(CustomConvolutionSquare3x3_U8) FIXTURE_DATA_TEST_CASE(RunSmall, NEConvolutionFixture<uint8_t>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(datasets::SmallShapes(), framework::dataset::make("DataType", DataType::U8)), datasets::BorderModes()), @@ -115,17 +117,38 @@ FIXTURE_DATA_TEST_CASE(RunLarge, NEConvolutionFixture<uint8_t>, framework::Datas // Validate output validate(Accessor(_target), _reference, shape_to_valid_region(_reference.shape(), (_border_mode == BorderMode::UNDEFINED), BorderSize(_height / 2, _width / 2)), tolerance_u8); } +TEST_SUITE_END() + +TEST_SUITE(CustomConvolutionSquare3x3_S16) +FIXTURE_DATA_TEST_CASE(RunSmall, NEConvolutionFixture<int16_t>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(datasets::SmallShapes(), framework::dataset::make("DataType", + DataType::S16)), + datasets::BorderModes()), + framework::dataset::make("filter_size", { 3 }))) +{ + // Validate output + validate(Accessor(_target), _reference, shape_to_valid_region(_reference.shape(), (_border_mode == BorderMode::UNDEFINED), BorderSize(_height / 2, _width / 2)), tolerance_s16); +} + +FIXTURE_DATA_TEST_CASE(RunLarge, NEConvolutionFixture<int16_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(datasets::LargeShapes(), framework::dataset::make("DataType", + DataType::S16)), + datasets::BorderModes()), + framework::dataset::make("filter_size", { 3 }))) +{ + // Validate output + validate(Accessor(_target), _reference, shape_to_valid_region(_reference.shape(), (_border_mode == BorderMode::UNDEFINED), BorderSize(_height / 2, _width / 2)), tolerance_s16); +} +TEST_SUITE_END() TEST_SUITE_END() /* Custom Convolution3x3 */ -TEST_SUITE(CustomConvolution5x5) -DATA_TEST_CASE(Configuration, framework::DatasetMode::ALL, combine(combine(combine(concat(datasets::SmallShapes(), datasets::LargeShapes()), framework::dataset::make("DataType", DataType::U8)), +TEST_SUITE(CustomConvolutionSquare5x5) +DATA_TEST_CASE(Configuration, framework::DatasetMode::ALL, combine(combine(combine(concat(datasets::SmallShapes(), datasets::LargeShapes()), framework::dataset::make("DataType", { DataType::U8, DataType::S16 })), datasets::BorderModes()), framework::dataset::make("filter_size", { 5 })), - shape, data_type, border_mode, filter_size) + shape, output_data_type, border_mode, filter_size) { // Create tensors - Tensor src = create_tensor<Tensor>(shape, data_type); - Tensor dst = create_tensor<Tensor>(shape, data_type); + Tensor src = create_tensor<Tensor>(shape, DataType::U8); + Tensor dst = create_tensor<Tensor>(shape, output_data_type); // Create conv matrix int16_t conv[25]; @@ -160,6 +183,7 @@ DATA_TEST_CASE(Configuration, framework::DatasetMode::ALL, combine(combine(combi template <typename T> using NEConvolutionFixture = ConvolutionSquareValidationFixture<Tensor, Accessor, NEConvolution5x5, T>; +TEST_SUITE(CustomConvolutionSquare5x5_U8) FIXTURE_DATA_TEST_CASE(RunSmall, NEConvolutionFixture<uint8_t>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(datasets::SmallShapes(), framework::dataset::make("DataType", DataType::U8)), datasets::BorderModes()), @@ -177,17 +201,38 @@ FIXTURE_DATA_TEST_CASE(RunLarge, NEConvolutionFixture<uint8_t>, framework::Datas // Validate output validate(Accessor(_target), _reference, shape_to_valid_region(_reference.shape(), (_border_mode == BorderMode::UNDEFINED), BorderSize(_height / 2, _width / 2)), tolerance_u8); } +TEST_SUITE_END() + +TEST_SUITE(CustomConvolutionSquare5x5_S16) +FIXTURE_DATA_TEST_CASE(RunSmall, NEConvolutionFixture<int16_t>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(datasets::SmallShapes(), framework::dataset::make("DataType", + DataType::S16)), + datasets::BorderModes()), + framework::dataset::make("filter_size", { 5 }))) +{ + // Validate output + validate(Accessor(_target), _reference, shape_to_valid_region(_reference.shape(), (_border_mode == BorderMode::UNDEFINED), BorderSize(_height / 2, _width / 2)), tolerance_s16); +} + +FIXTURE_DATA_TEST_CASE(RunLarge, NEConvolutionFixture<int16_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(datasets::LargeShapes(), framework::dataset::make("DataType", + DataType::S16)), + datasets::BorderModes()), + framework::dataset::make("filter_size", { 5 }))) +{ + // Validate output + validate(Accessor(_target), _reference, shape_to_valid_region(_reference.shape(), (_border_mode == BorderMode::UNDEFINED), BorderSize(_height / 2, _width / 2)), tolerance_s16); +} +TEST_SUITE_END() TEST_SUITE_END() /* Custom Convolution 5x5 */ -TEST_SUITE(CustomConvolution7x7) -DATA_TEST_CASE(Configuration, framework::DatasetMode::ALL, combine(combine(combine(concat(datasets::SmallShapes(), datasets::LargeShapes()), framework::dataset::make("DataType", DataType::U8)), +TEST_SUITE(CustomConvolutionSquare7x7) +DATA_TEST_CASE(Configuration, framework::DatasetMode::ALL, combine(combine(combine(concat(datasets::SmallShapes(), datasets::LargeShapes()), framework::dataset::make("DataType", { DataType::U8, DataType::S16 })), datasets::BorderModes()), framework::dataset::make("filter_size", { 7 })), - shape, data_type, border_mode, filter_size) + shape, output_data_type, border_mode, filter_size) { // Create tensors - Tensor src = create_tensor<Tensor>(shape, data_type); - Tensor dst = create_tensor<Tensor>(shape, data_type); + Tensor src = create_tensor<Tensor>(shape, DataType::U8); + Tensor dst = create_tensor<Tensor>(shape, output_data_type); // Create conv matrix int16_t conv[49]; @@ -222,6 +267,7 @@ DATA_TEST_CASE(Configuration, framework::DatasetMode::ALL, combine(combine(combi template <typename T> using NEConvolutionFixture = ConvolutionSquareValidationFixture<Tensor, Accessor, NEConvolution7x7, T>; +TEST_SUITE(CustomConvolutionSquare7x7_U8) FIXTURE_DATA_TEST_CASE(RunSmall, NEConvolutionFixture<uint8_t>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(datasets::SmallShapes(), framework::dataset::make("DataType", DataType::U8)), datasets::BorderModes()), @@ -239,17 +285,38 @@ FIXTURE_DATA_TEST_CASE(RunLarge, NEConvolutionFixture<uint8_t>, framework::Datas // Validate output validate(Accessor(_target), _reference, shape_to_valid_region(_reference.shape(), (_border_mode == BorderMode::UNDEFINED), BorderSize(_height / 2, _width / 2)), tolerance_u8); } +TEST_SUITE_END() + +TEST_SUITE(CustomConvolutionSquare7x7_S16) +FIXTURE_DATA_TEST_CASE(RunSmall, NEConvolutionFixture<int16_t>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(datasets::SmallShapes(), framework::dataset::make("DataType", + DataType::S16)), + datasets::BorderModes()), + framework::dataset::make("filter_size", { 7 }))) +{ + // Validate output + validate(Accessor(_target), _reference, shape_to_valid_region(_reference.shape(), (_border_mode == BorderMode::UNDEFINED), BorderSize(_height / 2, _width / 2)), tolerance_s16); +} + +FIXTURE_DATA_TEST_CASE(RunLarge, NEConvolutionFixture<int16_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(datasets::LargeShapes(), framework::dataset::make("DataType", + DataType::S16)), + datasets::BorderModes()), + framework::dataset::make("filter_size", { 7 }))) +{ + // Validate output + validate(Accessor(_target), _reference, shape_to_valid_region(_reference.shape(), (_border_mode == BorderMode::UNDEFINED), BorderSize(_height / 2, _width / 2)), tolerance_s16); +} +TEST_SUITE_END() TEST_SUITE_END() /* Custom Convolution 7x7 */ -TEST_SUITE(CustomConvolution9x9) -DATA_TEST_CASE(Configuration, framework::DatasetMode::ALL, combine(combine(combine(concat(datasets::SmallShapes(), datasets::LargeShapes()), framework::dataset::make("DataType", DataType::U8)), +TEST_SUITE(CustomConvolutionSquare9x9) +DATA_TEST_CASE(Configuration, framework::DatasetMode::ALL, combine(combine(combine(concat(datasets::SmallShapes(), datasets::LargeShapes()), framework::dataset::make("DataType", { DataType::U8, DataType::S16 })), datasets::BorderModes()), framework::dataset::make("filter_size", { 9 })), - shape, data_type, border_mode, filter_size) + shape, output_data_type, border_mode, filter_size) { // Create tensors - Tensor src = create_tensor<Tensor>(shape, data_type); - Tensor dst = create_tensor<Tensor>(shape, data_type); + Tensor src = create_tensor<Tensor>(shape, DataType::U8); + Tensor dst = create_tensor<Tensor>(shape, output_data_type); // Create conv matrix int16_t conv[81]; @@ -284,6 +351,7 @@ DATA_TEST_CASE(Configuration, framework::DatasetMode::ALL, combine(combine(combi template <typename T> using NEConvolutionFixture = ConvolutionSquareValidationFixture<Tensor, Accessor, NEConvolution9x9, T>; +TEST_SUITE(CustomConvolutionSquare9x9_U8) FIXTURE_DATA_TEST_CASE(RunSmall, NEConvolutionFixture<uint8_t>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(datasets::SmallShapes(), framework::dataset::make("DataType", DataType::U8)), datasets::BorderModes()), @@ -301,21 +369,41 @@ FIXTURE_DATA_TEST_CASE(RunLarge, NEConvolutionFixture<uint8_t>, framework::Datas // Validate output validate(Accessor(_target), _reference, shape_to_valid_region(_reference.shape(), (_border_mode == BorderMode::UNDEFINED), BorderSize(_height / 2, _width / 2)), tolerance_u8); } +TEST_SUITE_END() + +TEST_SUITE(CustomConvolutionSquare9x9_S16) +FIXTURE_DATA_TEST_CASE(RunSmall, NEConvolutionFixture<int16_t>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(datasets::SmallShapes(), framework::dataset::make("DataType", + DataType::S16)), + datasets::BorderModes()), + framework::dataset::make("filter_size", { 9 }))) +{ + // Validate output + validate(Accessor(_target), _reference, shape_to_valid_region(_reference.shape(), (_border_mode == BorderMode::UNDEFINED), BorderSize(_height / 2, _width / 2)), tolerance_s16); +} + +FIXTURE_DATA_TEST_CASE(RunLarge, NEConvolutionFixture<int16_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(datasets::LargeShapes(), framework::dataset::make("DataType", + DataType::S16)), + datasets::BorderModes()), + framework::dataset::make("filter_size", { 9 }))) +{ + // Validate output + validate(Accessor(_target), _reference, shape_to_valid_region(_reference.shape(), (_border_mode == BorderMode::UNDEFINED), BorderSize(_height / 2, _width / 2)), tolerance_s16); +} +TEST_SUITE_END() TEST_SUITE_END() /* Custom Convolution 9x9 */ TEST_SUITE_END() /* Custom Convolution Square */ TEST_SUITE(CustomConvolutionRectangle) - DATA_TEST_CASE(Configuration, framework::DatasetMode::ALL, combine(combine(combine(combine(concat(datasets::SmallShapes(), datasets::LargeShapes()), framework::dataset::make("DataType", - DataType::U8)), - datasets::BorderModes()), - framework::dataset::make("filter_width", { 3, 5, 7, 9 })), - framework::dataset::make("filter_height", { 3, 5, 7, 9 })), - shape, data_type, border_mode, filter_width, filter_height) +{ DataType::U8, DataType::S16 })), +datasets::BorderModes()), +framework::dataset::make("filter_width", { 3, 5, 7, 9 })), +framework::dataset::make("filter_height", { 3, 5, 7, 9 })), +shape, output_data_type, border_mode, filter_width, filter_height) { // Create tensors - Tensor src = create_tensor<Tensor>(shape, data_type); - Tensor dst = create_tensor<Tensor>(shape, data_type); + Tensor src = create_tensor<Tensor>(shape, DataType::U8); + Tensor dst = create_tensor<Tensor>(shape, output_data_type); // Create conv matrix int16_t conv[filter_width * filter_height]; @@ -354,6 +442,7 @@ DATA_TEST_CASE(Configuration, framework::DatasetMode::ALL, combine(combine(combi template <typename T> using NEConvolutionFixture = ConvolutionRectangleValidationFixture<Tensor, Accessor, NEConvolutionRectangle, T>; +TEST_SUITE(CustomConvolutionRectangle_U8) FIXTURE_DATA_TEST_CASE(RunSmall, NEConvolutionFixture<uint8_t>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(combine(datasets::SmallShapes(), framework::dataset::make("DataType", DataType::U8)), datasets::BorderModes()), @@ -374,7 +463,167 @@ FIXTURE_DATA_TEST_CASE(RunLarge, NEConvolutionFixture<uint8_t>, framework::Datas validate(Accessor(_target), _reference, shape_to_valid_region(_reference.shape(), (_border_mode == BorderMode::UNDEFINED), BorderSize(_height / 2, _width / 2)), tolerance_u8); } TEST_SUITE_END() + +TEST_SUITE(CustomConvolutionRectangle_S16) +FIXTURE_DATA_TEST_CASE(RunSmall, NEConvolutionFixture<int16_t>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(combine(datasets::SmallShapes(), framework::dataset::make("DataType", + DataType::S16)), + datasets::BorderModes()), + framework::dataset::make("filter_width", { 3, 5, 7, 9 })), + framework::dataset::make("filter_height", { 3, 5, 7, 9 }))) +{ + // Validate output + validate(Accessor(_target), _reference, shape_to_valid_region(_reference.shape(), (_border_mode == BorderMode::UNDEFINED), BorderSize(_height / 2, _width / 2)), tolerance_s16); +} + +FIXTURE_DATA_TEST_CASE(RunLarge, NEConvolutionFixture<int16_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(combine(datasets::LargeShapes(), framework::dataset::make("DataType", + DataType::S16)), + datasets::BorderModes()), + framework::dataset::make("filter_width", { 3, 5, 7, 9 })), + framework::dataset::make("filter_height", { 3, 5, 7, 9 }))) +{ + // Validate output + validate(Accessor(_target), _reference, shape_to_valid_region(_reference.shape(), (_border_mode == BorderMode::UNDEFINED), BorderSize(_height / 2, _width / 2)), tolerance_s16); +} +TEST_SUITE_END() +TEST_SUITE_END() /* Custom Convolution Rectangle */ + +TEST_SUITE(CustomConvolutionSeparable) +TEST_SUITE(CustomConvolutionSeparable5x5) +template <typename T> +using NEConvolutionFixture = ConvolutionSeparableValidationFixture<Tensor, Accessor, NEConvolution5x5, T>; + +TEST_SUITE(CustomConvolutionSeparable5x5_U8) +FIXTURE_DATA_TEST_CASE(RunSmall, NEConvolutionFixture<uint8_t>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(datasets::SmallShapes(), framework::dataset::make("DataType", + DataType::U8)), + datasets::BorderModes()), + framework::dataset::make("filter_size", { 5 }))) +{ + // Validate output + validate(Accessor(_target), _reference, shape_to_valid_region(_reference.shape(), (_border_mode == BorderMode::UNDEFINED), BorderSize(_height / 2, _width / 2)), tolerance_u8); +} + +FIXTURE_DATA_TEST_CASE(RunLarge, NEConvolutionFixture<uint8_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(datasets::LargeShapes(), framework::dataset::make("DataType", + DataType::U8)), + datasets::BorderModes()), + framework::dataset::make("filter_size", { 5 }))) +{ + // Validate output + validate(Accessor(_target), _reference, shape_to_valid_region(_reference.shape(), (_border_mode == BorderMode::UNDEFINED), BorderSize(_height / 2, _width / 2)), tolerance_u8); +} +TEST_SUITE_END() + +TEST_SUITE(CustomConvolutionSeparable5x5_S16) +FIXTURE_DATA_TEST_CASE(RunSmall, NEConvolutionFixture<int16_t>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(datasets::SmallShapes(), framework::dataset::make("DataType", + DataType::S16)), + datasets::BorderModes()), + framework::dataset::make("filter_size", { 5 }))) +{ + // Validate output + validate(Accessor(_target), _reference, shape_to_valid_region(_reference.shape(), (_border_mode == BorderMode::UNDEFINED), BorderSize(_height / 2, _width / 2)), tolerance_s16); +} + +FIXTURE_DATA_TEST_CASE(RunLarge, NEConvolutionFixture<int16_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(datasets::LargeShapes(), framework::dataset::make("DataType", + DataType::S16)), + datasets::BorderModes()), + framework::dataset::make("filter_size", { 5 }))) +{ + // Validate output + validate(Accessor(_target), _reference, shape_to_valid_region(_reference.shape(), (_border_mode == BorderMode::UNDEFINED), BorderSize(_height / 2, _width / 2)), tolerance_s16); +} +TEST_SUITE_END() +TEST_SUITE_END() /* Custom Convolution Separable 5x5 */ + +TEST_SUITE(CustomConvolutionSeparable7x7) +template <typename T> +using NEConvolutionFixture = ConvolutionSeparableValidationFixture<Tensor, Accessor, NEConvolution7x7, T>; + +TEST_SUITE(CustomConvolutionSeparable7x7_U8) +FIXTURE_DATA_TEST_CASE(RunSmall, NEConvolutionFixture<uint8_t>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(datasets::SmallShapes(), framework::dataset::make("DataType", + DataType::U8)), + datasets::BorderModes()), + framework::dataset::make("filter_size", { 7 }))) +{ + // Validate output + validate(Accessor(_target), _reference, shape_to_valid_region(_reference.shape(), (_border_mode == BorderMode::UNDEFINED), BorderSize(_height / 2, _width / 2)), tolerance_u8); +} + +FIXTURE_DATA_TEST_CASE(RunLarge, NEConvolutionFixture<uint8_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(datasets::LargeShapes(), framework::dataset::make("DataType", + DataType::U8)), + datasets::BorderModes()), + framework::dataset::make("filter_size", { 7 }))) +{ + // Validate output + validate(Accessor(_target), _reference, shape_to_valid_region(_reference.shape(), (_border_mode == BorderMode::UNDEFINED), BorderSize(_height / 2, _width / 2)), tolerance_u8); +} +TEST_SUITE_END() + +TEST_SUITE(CustomConvolutionSeparablex7x7_S16) +FIXTURE_DATA_TEST_CASE(RunSmall, NEConvolutionFixture<int16_t>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(datasets::SmallShapes(), framework::dataset::make("DataType", + DataType::S16)), + datasets::BorderModes()), + framework::dataset::make("filter_size", { 7 }))) +{ + // Validate output + validate(Accessor(_target), _reference, shape_to_valid_region(_reference.shape(), (_border_mode == BorderMode::UNDEFINED), BorderSize(_height / 2, _width / 2)), tolerance_s16); +} + +FIXTURE_DATA_TEST_CASE(RunLarge, NEConvolutionFixture<int16_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(datasets::LargeShapes(), framework::dataset::make("DataType", + DataType::S16)), + datasets::BorderModes()), + framework::dataset::make("filter_size", { 7 }))) +{ + // Validate output + validate(Accessor(_target), _reference, shape_to_valid_region(_reference.shape(), (_border_mode == BorderMode::UNDEFINED), BorderSize(_height / 2, _width / 2)), tolerance_s16); +} +TEST_SUITE_END() +TEST_SUITE_END() /* Custom Convolution Separable 7x7 */ + +TEST_SUITE(CustomConvolutionSeparable9x9) +template <typename T> +using NEConvolutionFixture = ConvolutionSeparableValidationFixture<Tensor, Accessor, NEConvolution9x9, T>; + +TEST_SUITE(CustomConvolutionSeparable9x9_U8) +FIXTURE_DATA_TEST_CASE(RunSmall, NEConvolutionFixture<uint8_t>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(datasets::SmallShapes(), framework::dataset::make("DataType", + DataType::U8)), + datasets::BorderModes()), + framework::dataset::make("filter_size", { 9 }))) +{ + // Validate output + validate(Accessor(_target), _reference, shape_to_valid_region(_reference.shape(), (_border_mode == BorderMode::UNDEFINED), BorderSize(_height / 2, _width / 2)), tolerance_u8); +} + +FIXTURE_DATA_TEST_CASE(RunLarge, NEConvolutionFixture<uint8_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(datasets::LargeShapes(), framework::dataset::make("DataType", + DataType::U8)), + datasets::BorderModes()), + framework::dataset::make("filter_size", { 9 }))) +{ + // Validate output + validate(Accessor(_target), _reference, shape_to_valid_region(_reference.shape(), (_border_mode == BorderMode::UNDEFINED), BorderSize(_height / 2, _width / 2)), tolerance_u8); +} +TEST_SUITE_END() + +TEST_SUITE(CustomConvolutionSeparable9x9_S16) +FIXTURE_DATA_TEST_CASE(RunSmall, NEConvolutionFixture<int16_t>, framework::DatasetMode::PRECOMMIT, combine(combine(combine(datasets::SmallShapes(), framework::dataset::make("DataType", + DataType::S16)), + datasets::BorderModes()), + framework::dataset::make("filter_size", { 9 }))) +{ + // Validate output + validate(Accessor(_target), _reference, shape_to_valid_region(_reference.shape(), (_border_mode == BorderMode::UNDEFINED), BorderSize(_height / 2, _width / 2)), tolerance_s16); +} + +FIXTURE_DATA_TEST_CASE(RunLarge, NEConvolutionFixture<int16_t>, framework::DatasetMode::NIGHTLY, combine(combine(combine(datasets::LargeShapes(), framework::dataset::make("DataType", + DataType::S16)), + datasets::BorderModes()), + framework::dataset::make("filter_size", { 9 }))) +{ + // Validate output + validate(Accessor(_target), _reference, shape_to_valid_region(_reference.shape(), (_border_mode == BorderMode::UNDEFINED), BorderSize(_height / 2, _width / 2)), tolerance_s16); +} TEST_SUITE_END() +TEST_SUITE_END() /* Custom Convolution Separable 9x9 */ +TEST_SUITE_END() /* Custom Convolution Separable */ +TEST_SUITE_END() /* Custom Convolution */ TEST_SUITE_END() } // namespace validation } // namespace test |