diff options
Diffstat (limited to 'tests/validation')
-rw-r--r-- | tests/validation/CL/Im2Col.cpp | 91 | ||||
-rw-r--r-- | tests/validation/fixtures/Im2ColFixture.h | 7 |
2 files changed, 86 insertions, 12 deletions
diff --git a/tests/validation/CL/Im2Col.cpp b/tests/validation/CL/Im2Col.cpp index d4d6bda1f2..12b082fe13 100644 --- a/tests/validation/CL/Im2Col.cpp +++ b/tests/validation/CL/Im2Col.cpp @@ -122,6 +122,16 @@ TEST_CASE(Negative, framework::DatasetMode::ALL) const auto status = CLIm2ColKernel::validate(&input, &output, conv_size, PadStrideInfo(), has_bias); ARM_COMPUTE_EXPECT(bool(status) == false, framework::LogLevel::ERRORS); } + + // Kernel dimensions are too big + { + const auto input = TensorInfo(TensorShape(1U, 9U, 5U, 2U), 1, DataType::F32, DataLayout::NHWC); + const auto output = TensorInfo(TensorShape(1U, 1U, 1U, 2U), 1, DataType::F32, DataLayout::NHWC); + const auto conv_size = Size2D(9, 9); + const bool has_bias = false; + const auto status = CLIm2ColKernel::validate(&input, &output, conv_size, PadStrideInfo(), has_bias); + ARM_COMPUTE_EXPECT(bool(status) == false, framework::LogLevel::ERRORS); + } } template <typename T> @@ -129,6 +139,45 @@ using CLIm2ColFixture = Im2ColValidationFixture<CLTensor, CLAccessor, CLIm2Col, TEST_SUITE(NHWC) +/** Test that there's no padding added to input or output as part of configure + * + * @note 2 elements processed per iteration + * + * Three tests will be run: + * - Channels are multiple of elements processed + * - Channels larger and non multiple of elements used + * - Channels smaller and not multiple of elements used + * + */ +DATA_TEST_CASE(ValidateZeroPaddingNumElemsPerIterEqual2, framework::DatasetMode::ALL, + combine(combine(combine(combine(combine( + framework::dataset::make("InputChannel", +{ + 2, 9, 1, +}), +framework::dataset::make("DataType", { DataType::F32 })), +framework::dataset::make("Kernel", { Size2D(3, 4) })), +framework::dataset::make("PadStride", { PadStrideInfo(2, 1, 1, 2) })), +framework::dataset::make("QInfo", { QuantizationInfo() })), +framework::dataset::make("DataLayout", { DataLayout::NHWC })), +input_channel, data_type, conv_size, pad_stride_info, qinfo, data_layout) +{ + TensorShape input_shape(input_channel, 10U, 30U, 3U); + const bool has_bias = false; + + const auto input_info = TensorInfo(input_shape, 1, data_type, data_layout); + const auto output_shape = compute_im2col_conv_shape(&input_info, conv_size, pad_stride_info, has_bias, Size2D(1U, 1U), true); + + CLTensor input = create_tensor<CLTensor>(input_shape, data_type, 1, qinfo, data_layout); + CLTensor output = create_tensor<CLTensor>(output_shape, data_type, 1, qinfo, data_layout); + + CLIm2ColKernel im2col; + im2col.configure(&input, &output, conv_size, pad_stride_info, has_bias); + + // Ensure there're no paddings added at all + const bool no_padding = input.info()->padding().empty() && output.info()->padding().empty(); + ARM_COMPUTE_EXPECT(no_padding, framework::LogLevel::ERRORS); +} /** Test special kernel used for NHWC for 3x3 kernels * * @note 2 elements processed per iteration @@ -150,7 +199,7 @@ FIXTURE_DATA_TEST_CASE(W3x3, }), framework::dataset::make("DataType", DataType::F32)), framework::dataset::make("Kernel", Size2D(3, 3))), -framework::dataset::make("PadStride", PadStrideInfo(1, 2, 1, 2))), +framework::dataset::make("PadStride", { PadStrideInfo(1, 2, 1, 2), PadStrideInfo(1, 1, 0, 0) })), framework::dataset::make("QInfo", QuantizationInfo())), framework::dataset::make("DataLayout", DataLayout::NHWC)), framework::dataset::make("Groups", 1))) @@ -176,11 +225,41 @@ FIXTURE_DATA_TEST_CASE(W9x9, combine(combine(combine(combine(combine(combine( framework::dataset::make("InputShape", { - TensorShape(2U, 13U, 15U, 2U), TensorShape(3U, 15U, 12U, 2U), TensorShape(1U, 1U, 2U, 2U), + TensorShape(2U, 13U, 15U, 2U), TensorShape(3U, 15U, 12U, 2U), TensorShape(1U, 13U, 22U, 2U), }), framework::dataset::make("DataType", DataType::F32)), framework::dataset::make("Kernel", Size2D(9, 9))), -framework::dataset::make("PadStride", PadStrideInfo(2, 2, 1, 2))), +framework::dataset::make("PadStride", { PadStrideInfo(2, 2, 1, 2), PadStrideInfo(1, 1, 0, 0) })), +framework::dataset::make("QInfo", QuantizationInfo())), +framework::dataset::make("DataLayout", DataLayout::NHWC)), +framework::dataset::make("Groups", 1))) +{ + // Validate output + validate(CLAccessor(_target), _reference); +} + +/** Test generic kernel used for NHWC + * + * @note 2 elements processed per iteration + * + * Three tests will be run: + * - Channels are multiple of elements processed + * - Channels larger and non multiple of elements used + * - Channels smaller and not multiple of elements used + * + * Kernel tested im2col_generic_nhwc + */ +FIXTURE_DATA_TEST_CASE(Generic, + CLIm2ColFixture<float>, + framework::DatasetMode::ALL, + combine(combine(combine(combine(combine(combine( + framework::dataset::make("InputShape", +{ + TensorShape(4U, 13U, 15U, 2U), TensorShape(7U, 15U, 12U, 1U), TensorShape(1U, 5U, 3U, 1U), +}), +framework::dataset::make("DataType", DataType::F32)), +framework::dataset::make("Kernel", Size2D(5, 3))), +framework::dataset::make("PadStride", { PadStrideInfo(2, 2, 1, 2), PadStrideInfo(1, 1, 0, 0) })), framework::dataset::make("QInfo", QuantizationInfo())), framework::dataset::make("DataLayout", DataLayout::NHWC)), framework::dataset::make("Groups", 1))) @@ -331,7 +410,7 @@ FIXTURE_DATA_TEST_CASE(Generic, CLIm2ColFixture<float>, framework::DatasetMode::ALL, combine(combine(combine(combine(combine(combine( - framework::dataset::make("InputShape", TensorShape(13U, 11U, 2U, 2U)), + framework::dataset::make("InputShape", TensorShape(13U, 11U, 5U, 2U)), framework::dataset::make("DataType", DataType::F32)), framework::dataset::make("Kernel", { Size2D(3, 2), Size2D(3, 5) })), framework::dataset::make("PadStride", PadStrideInfo(2, 1, 2, 1))), @@ -357,7 +436,7 @@ FIXTURE_DATA_TEST_CASE(Quantized, CLIm2ColFixture<uint8_t>, framework::DatasetMode::ALL, combine(combine(combine(combine(combine(combine( - framework::dataset::make("InputShape", TensorShape(13U, 11U, 2U, 2U)), + framework::dataset::make("InputShape", TensorShape(13U, 11U, 11U, 2U)), framework::dataset::make("DataType", DataType::QASYMM8)), framework::dataset::make("Kernel", { Size2D(1, 1), Size2D(3, 3), Size2D(5, 5), Size2D(3, 5), Size2D(9, 9) })), framework::dataset::make("PadStride", { PadStrideInfo(1, 2, 1, 1) })), @@ -383,7 +462,7 @@ FIXTURE_DATA_TEST_CASE(FP16, CLIm2ColFixture<half>, framework::DatasetMode::ALL, combine(combine(combine(combine(combine(combine( - framework::dataset::make("InputShape", TensorShape(13U, 11U, 2U, 2U)), + framework::dataset::make("InputShape", TensorShape(13U, 11U, 11U, 2U)), framework::dataset::make("DataType", DataType::F16)), framework::dataset::make("Kernel", { Size2D(1, 1), Size2D(3, 3), Size2D(5, 5), Size2D(3, 5), Size2D(9, 9) })), framework::dataset::make("PadStride", { PadStrideInfo(1, 2, 1, 1) })), diff --git a/tests/validation/fixtures/Im2ColFixture.h b/tests/validation/fixtures/Im2ColFixture.h index f680da7ae9..e1f33a3575 100644 --- a/tests/validation/fixtures/Im2ColFixture.h +++ b/tests/validation/fixtures/Im2ColFixture.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017-2018 Arm Limited. + * Copyright (c) 2017-2020 Arm Limited. * * SPDX-License-Identifier: MIT * @@ -59,11 +59,6 @@ public: _has_bias = data_type != DataType::QASYMM8; _num_groups = num_groups; - if(_data_layout == DataLayout::NHWC) - { - permute(input_shape, PermutationVector(2U, 0U, 1U)); - } - TensorInfo input_info(input_shape, 1, data_type); input_info.set_data_layout(_data_layout); |