From 3c520c5a6ca9352560828fdf389d31e38b85afeb Mon Sep 17 00:00:00 2001 From: Giorgio Arena Date: Tue, 1 May 2018 11:47:24 +0100 Subject: COMPMID-1089 CLPoolingLayer fix padding and add output shape computation to ShapeCalculator Change-Id: Ide83424e9fe6b8102ed9e3c355c099c3912e7e61 Reviewed-on: https://eu-gerrit-1.euhpc.arm.com/129635 Tested-by: Jenkins Reviewed-by: Michele DiGiorgio Reviewed-by: Georgios Pinitas Reviewed-by: Anthony Barbier --- arm_compute/core/utils/misc/ShapeCalculator.h | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) (limited to 'arm_compute/core/utils') diff --git a/arm_compute/core/utils/misc/ShapeCalculator.h b/arm_compute/core/utils/misc/ShapeCalculator.h index a0bc4eab54..757e423d4f 100644 --- a/arm_compute/core/utils/misc/ShapeCalculator.h +++ b/arm_compute/core/utils/misc/ShapeCalculator.h @@ -331,21 +331,22 @@ inline TensorShape compute_pool_shape(const ITensorInfo &input, PoolingLayerInfo unsigned int pooled_w = 0; unsigned int pooled_h = 0; + TensorShape output_shape{ input.tensor_shape() }; + const bool is_global_pooling = pool_info.is_global_pooling(); - const int idx_width = get_data_layout_dimension_index(input.data_layout(), DataLayoutDimension::WIDTH); - const int idx_height = get_data_layout_dimension_index(input.data_layout(), DataLayoutDimension::HEIGHT); - const unsigned int pool_size_x = is_global_pooling ? input.tensor_shape()[idx_width] : pool_info.pool_size().width; - const unsigned int pool_size_y = is_global_pooling ? input.tensor_shape()[idx_height] : pool_info.pool_size().height; + const unsigned int idx_width = get_data_layout_dimension_index(input.data_layout(), DataLayoutDimension::WIDTH); + const unsigned int idx_height = get_data_layout_dimension_index(input.data_layout(), DataLayoutDimension::HEIGHT); + const unsigned int pool_size_x = is_global_pooling ? output_shape[idx_width] : pool_info.pool_size().width; + const unsigned int pool_size_y = is_global_pooling ? output_shape[idx_height] : pool_info.pool_size().height; - std::tie(pooled_w, pooled_h) = scaled_dimensions(input.dimension(idx_width), - input.dimension(idx_height), + std::tie(pooled_w, pooled_h) = scaled_dimensions(output_shape[idx_width], + output_shape[idx_height], pool_size_x, pool_size_y, pool_info.pad_stride_info()); - TensorShape output_shape{ input.tensor_shape() }; - output_shape.set(get_data_layout_dimension_index(input.data_layout(), DataLayoutDimension::WIDTH), pooled_w); - output_shape.set(get_data_layout_dimension_index(input.data_layout(), DataLayoutDimension::HEIGHT), pooled_h); + output_shape.set(idx_width, pooled_w); + output_shape.set(idx_height, pooled_h); return output_shape; } -- cgit v1.2.1