diff options
-rw-r--r-- | src/core/NEON/kernels/NEPriorBoxLayerKernel.cpp | 28 | ||||
-rw-r--r-- | tests/validation/NEON/PriorBoxLayer.cpp | 16 |
2 files changed, 14 insertions, 30 deletions
diff --git a/src/core/NEON/kernels/NEPriorBoxLayerKernel.cpp b/src/core/NEON/kernels/NEPriorBoxLayerKernel.cpp index 365fc83fd0..d830d0db67 100644 --- a/src/core/NEON/kernels/NEPriorBoxLayerKernel.cpp +++ b/src/core/NEON/kernels/NEPriorBoxLayerKernel.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018 ARM Limited. + * Copyright (c) 2018-2020 ARM Limited. * * SPDX-License-Identifier: MIT * @@ -72,20 +72,6 @@ Status validate_arguments(const ITensorInfo *input1, const ITensorInfo *input2, return Status{}; } - -std::pair<Status, Window> validate_and_configure_window(const ITensorInfo *input1, const ITensorInfo *input2, ITensorInfo *output, const PriorBoxLayerInfo &info) -{ - ARM_COMPUTE_UNUSED(input1, input2); - - const int num_priors = info.aspect_ratios().size() * info.min_sizes().size() + info.max_sizes().size(); - const unsigned int num_elems_processed_per_iteration = 4 * num_priors; - Window win = calculate_max_window(*output, Steps(num_elems_processed_per_iteration)); - AccessWindowHorizontal output_access(output, 0, num_elems_processed_per_iteration); - bool window_changed = update_window_and_padding(win, output_access); - - Status err = (window_changed) ? ARM_COMPUTE_CREATE_ERROR(ErrorCode::RUNTIME_ERROR, "Insufficient Padding!") : Status{}; - return std::make_pair(err, win); -} } // namespace NEPriorBoxLayerKernel::NEPriorBoxLayerKernel() @@ -221,17 +207,19 @@ void NEPriorBoxLayerKernel::configure(const ITensor *input1, const ITensor *inpu _output = output; // Configure kernel window - auto win_config = validate_and_configure_window(input1->info(), input2->info(), output->info(), info); - ARM_COMPUTE_ERROR_THROW_ON(win_config.first); - INEKernel::configure(win_config.second); + const int num_priors = info.aspect_ratios().size() * info.min_sizes().size() + info.max_sizes().size(); + Window win = calculate_max_window(*output->info(), Steps(num_priors * 4)); + Coordinates coord; + coord.set_num_dimensions(output->info()->num_dimensions()); + output->info()->set_valid_region(ValidRegion(coord, output->info()->tensor_shape())); + + INEKernel::configure(win); } Status NEPriorBoxLayerKernel::validate(const ITensorInfo *input1, const ITensorInfo *input2, const ITensorInfo *output, const PriorBoxLayerInfo &info) { ARM_COMPUTE_RETURN_ERROR_ON_NULLPTR(input1, input2, output); ARM_COMPUTE_RETURN_ON_ERROR(validate_arguments(input1, input2, output, info)); - ARM_COMPUTE_RETURN_ON_ERROR(validate_and_configure_window(input1->clone().get(), input2->clone().get(), output->clone().get(), info) - .first); return Status{}; } diff --git a/tests/validation/NEON/PriorBoxLayer.cpp b/tests/validation/NEON/PriorBoxLayer.cpp index ed11120a10..5659b9f3ae 100644 --- a/tests/validation/NEON/PriorBoxLayer.cpp +++ b/tests/validation/NEON/PriorBoxLayer.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018 ARM Limited. + * Copyright (c) 2018-2020 ARM Limited. * * SPDX-License-Identifier: MIT * @@ -53,19 +53,15 @@ using NEPriorBoxLayerFixture = PriorBoxLayerValidationFixture<Tensor, Accessor, // *INDENT-OFF* // clang-format off DATA_TEST_CASE(Validate, framework::DatasetMode::ALL, zip(zip(zip(zip( - framework::dataset::make("Input1Info", { TensorInfo(TensorShape(10U, 10U, 2U), 1, DataType::F32), - TensorInfo(TensorShape(10U, 10U, 2U), 1, DataType::F32), // Window shrink + framework::dataset::make("Input1Info", { TensorInfo(TensorShape(10U, 10U, 2U), 1, DataType::F32) }), - framework::dataset::make("Input2Info", { TensorInfo(TensorShape(10U, 10U, 2U), 1, DataType::F32), - TensorInfo(TensorShape(10U, 10U, 2U), 1, DataType::F32), + framework::dataset::make("Input2Info", { TensorInfo(TensorShape(10U, 10U, 2U), 1, DataType::F32) })), - framework::dataset::make("OutputInfo",{ TensorInfo(TensorShape(1200U, 2U), 1, DataType::F32), - TensorInfo(TensorShape(1000U, 2U), 1, DataType::F32), + framework::dataset::make("OutputInfo",{ TensorInfo(TensorShape(1200U, 2U), 1, DataType::F32) })), - framework::dataset::make("PriorBoxInfo",{ PriorBoxLayerInfo(std::vector<float>(1), std::vector<float>(1), 0, true, true, std::vector<float>(1), std::vector<float>(1), Coordinates2D{8, 8}, std::array<float, 2>()), - PriorBoxLayerInfo(std::vector<float>(1), std::vector<float>(1), 0, true, true, std::vector<float>(1), std::vector<float>(1), Coordinates2D{8, 8}, std::array<float, 2>()), + framework::dataset::make("PriorBoxInfo",{ PriorBoxLayerInfo(std::vector<float>(1), std::vector<float>(1), 0, true, true, std::vector<float>(1), std::vector<float>(1), Coordinates2D{8, 8}, std::array<float, 2>()) })), - framework::dataset::make("Expected", { true, false})), + framework::dataset::make("Expected", { true})), input1_info, input2_info, output_info, info, expected) { bool has_error = bool(NEPriorBoxLayer::validate(&input1_info.clone()->set_is_resizable(false), &input2_info.clone()->set_is_resizable(false), &output_info.clone()->set_is_resizable(false), info)); |