From 16bd6dd97fb704e31cd96e404e8c4148fe24d834 Mon Sep 17 00:00:00 2001 From: Manuel Bottini Date: Mon, 1 Jun 2020 14:40:54 +0100 Subject: COMPMID-3167: Remove padding from NEROIPoolingLayerKernel and NEROIAlignLayerKernel Change-Id: I19106e4bb0f6886a23dccc5c71e864a8364f40f9 Signed-off-by: Manuel Bottini Reviewed-on: https://review.mlplatform.org/c/ml/ComputeLibrary/+/3288 Comments-Addressed: Arm Jenkins Reviewed-by: Georgios Pinitas Reviewed-by: Gian Marco Iodice Tested-by: Arm Jenkins --- .../runtime/NEON/functions/NEROIAlignLayer.h | 3 +- src/core/NEON/kernels/NEROIAlignLayerKernel.cpp | 47 +++++++--------------- src/core/NEON/kernels/NEROIPoolingLayerKernel.cpp | 13 ++---- 3 files changed, 20 insertions(+), 43 deletions(-) diff --git a/arm_compute/runtime/NEON/functions/NEROIAlignLayer.h b/arm_compute/runtime/NEON/functions/NEROIAlignLayer.h index 7a504961d5..04a24ac7ec 100644 --- a/arm_compute/runtime/NEON/functions/NEROIAlignLayer.h +++ b/arm_compute/runtime/NEON/functions/NEROIAlignLayer.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019 ARM Limited. + * Copyright (c) 2019-2020 ARM Limited. * * SPDX-License-Identifier: MIT * @@ -24,7 +24,6 @@ #ifndef ARM_COMPUTE_NEROIALIGNLAYER_H #define ARM_COMPUTE_NEROIALIGNLAYER_H -#include "arm_compute/core/NEON/kernels/NEROIPoolingLayerKernel.h" #include "arm_compute/runtime/NEON/INESimpleFunction.h" namespace arm_compute diff --git a/src/core/NEON/kernels/NEROIAlignLayerKernel.cpp b/src/core/NEON/kernels/NEROIAlignLayerKernel.cpp index 3b944ab8d0..5ad6ba2832 100644 --- a/src/core/NEON/kernels/NEROIAlignLayerKernel.cpp +++ b/src/core/NEON/kernels/NEROIAlignLayerKernel.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019 ARM Limited. + * Copyright (c) 2019-2020 ARM Limited. * * SPDX-License-Identifier: MIT * @@ -72,34 +72,6 @@ Status validate_arguments(const ITensorInfo *input, const ITensorInfo *rois, ITe return Status{}; } - -std::pair validate_and_configure_window(ITensorInfo *input, ITensorInfo *rois, ITensorInfo *output, const ROIPoolingLayerInfo &pool_info) -{ - ARM_COMPUTE_ERROR_ON_NULLPTR(input, output); - - // Output auto inizialitation if not yet initialized - const TensorShape output_shape = compute_roi_align_shape(*input, *rois, pool_info); - auto_init_if_empty((*output), output_shape, 1, input->data_type()); - output->set_data_layout(input->data_layout()); - - const unsigned int num_rois = rois->dimension(1); - Window window; - window.set(Window::DimX, Window::Dimension(0, num_rois)); - window.set(Window::DimY, Window::Dimension(0, 1)); - - AccessWindowStatic input_access(input, - input->valid_region().start(0), - input->valid_region().start(1), - input->valid_region().end(0), - input->valid_region().end(1)); - AccessWindowStatic output_access(output, 0, 0, pool_info.pooled_width(), pool_info.pooled_height()); - - const bool window_changed = update_window_and_padding(window, input_access, output_access); - output_access.set_valid_region(window, ValidRegion(Coordinates(), output->tensor_shape())); - - Status err = (window_changed) ? ARM_COMPUTE_CREATE_ERROR(ErrorCode::RUNTIME_ERROR, "Insufficient Padding!") : Status{}; - return std::make_pair(err, window); -} } // namespace NEROIAlignLayerKernel::NEROIAlignLayerKernel() @@ -111,9 +83,20 @@ void NEROIAlignLayerKernel::configure(const ITensor *input, const ITensor *rois, { ARM_COMPUTE_ERROR_ON_NULLPTR(input, output, rois); ARM_COMPUTE_ERROR_THROW_ON(validate_arguments(input->info(), rois->info(), output->info(), pool_info)); + // Output auto inizialitation if not yet initialized + const TensorShape output_shape = compute_roi_align_shape(*input->info(), *rois->info(), pool_info); + auto_init_if_empty((*output->info()), output_shape, 1, input->info()->data_type(), input->info()->quantization_info()); + output->info()->set_data_layout(input->info()->data_layout()); + // Configure kernel window - auto win_config = validate_and_configure_window(input->info(), rois->info(), output->info(), pool_info); - ARM_COMPUTE_ERROR_THROW_ON(win_config.first); + const unsigned int num_rois = rois->info()->dimension(1); + Window window; + window.set(Window::DimX, Window::Dimension(0, num_rois)); + window.set(Window::DimY, Window::Dimension(0, 1)); + + Coordinates coord; + coord.set_num_dimensions(output->info()->num_dimensions()); + output->info()->set_valid_region(ValidRegion(coord, output->info()->tensor_shape())); // Set instance variables _input = input; @@ -121,7 +104,7 @@ void NEROIAlignLayerKernel::configure(const ITensor *input, const ITensor *rois, _output = output; _pool_info = pool_info; - INEKernel::configure(win_config.second); + INEKernel::configure(window); } Status NEROIAlignLayerKernel::validate(const ITensorInfo *input, const ITensorInfo *rois, ITensorInfo *output, const ROIPoolingLayerInfo &pool_info) diff --git a/src/core/NEON/kernels/NEROIPoolingLayerKernel.cpp b/src/core/NEON/kernels/NEROIPoolingLayerKernel.cpp index 708420c67e..00c3f98334 100644 --- a/src/core/NEON/kernels/NEROIPoolingLayerKernel.cpp +++ b/src/core/NEON/kernels/NEROIPoolingLayerKernel.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017-2019 ARM Limited. + * Copyright (c) 2017-2020 ARM Limited. * * SPDX-License-Identifier: MIT * @@ -82,15 +82,10 @@ void NEROIPoolingLayerKernel::configure(const ITensor *input, const ITensor *roi window.set(Window::DimX, Window::Dimension(0, rois->info()->dimension(1))); window.set(Window::DimY, Window::Dimension(0, 1)); - AccessWindowStatic input_access(input->info(), - input->info()->valid_region().start(0), - input->info()->valid_region().start(1), - input->info()->valid_region().end(0), - input->info()->valid_region().end(1)); - AccessWindowStatic output_access(output->info(), 0, 0, pool_info.pooled_width(), pool_info.pooled_height()); + Coordinates coord; + coord.set_num_dimensions(output->info()->num_dimensions()); + output->info()->set_valid_region(ValidRegion(coord, output->info()->tensor_shape())); - ARM_COMPUTE_UNUSED(update_window_and_padding(window, input_access, output_access)); - output_access.set_valid_region(window, ValidRegion(Coordinates(), output->info()->tensor_shape())); INEKernel::configure(window); } -- cgit v1.2.1