From adaae7e453cc4cc07905daca68fa7b938555d581 Mon Sep 17 00:00:00 2001 From: Georgios Pinitas Date: Mon, 30 Oct 2017 15:56:32 +0000 Subject: COMPMID-647: Exclude padding pixels from averaging factor. Adds support for excluding the padding pixels from the average scaling factor calculation. Change-Id: Ia13fbfeae235aff564db74191613921848231a01 Reviewed-on: http://mpd-gerrit.cambridge.arm.com/93715 Reviewed-by: Robert Hughes Reviewed-by: Anthony Barbier Tested-by: Kaizen --- tests/validation/CPP/PoolingLayer.cpp | 36 +++++++++++++++++++++++------------ 1 file changed, 24 insertions(+), 12 deletions(-) (limited to 'tests/validation/CPP') diff --git a/tests/validation/CPP/PoolingLayer.cpp b/tests/validation/CPP/PoolingLayer.cpp index 85a8343d87..4f755ce2c4 100644 --- a/tests/validation/CPP/PoolingLayer.cpp +++ b/tests/validation/CPP/PoolingLayer.cpp @@ -54,12 +54,13 @@ TensorShape calculate_output_shape(TensorShape shape, PoolingLayerInfo info) template ::value, int>::type> SimpleTensor pooling_layer(const SimpleTensor &src, PoolingLayerInfo info) { - const int pool_size = info.pool_size(); - PoolingType type = info.pool_type(); - int pool_stride_x = info.pad_stride_info().stride().first; - int pool_stride_y = info.pad_stride_info().stride().second; - int pad_x = info.pad_stride_info().pad().first; - int pad_y = info.pad_stride_info().pad().second; + const int pool_size = info.pool_size(); + PoolingType type = info.pool_type(); + int pool_stride_x = info.pad_stride_info().stride().first; + int pool_stride_y = info.pad_stride_info().stride().second; + int pad_x = info.pad_stride_info().pad().first; + int pad_y = info.pad_stride_info().pad().second; + bool exclude_padding = info.exclude_padding(); const auto w_src = static_cast(src.shape()[0]); const auto h_src = static_cast(src.shape()[1]); @@ -122,6 +123,11 @@ SimpleTensor pooling_layer(const SimpleTensor &src, PoolingLayerInfo info) hstart = std::max(hstart, 0); wend = std::min(wend, w_src); hend = std::min(hend, h_src); + // Exclude padding pixels from the average + if(exclude_padding) + { + pool = (hend - hstart) * (wend - wstart); + } if(type == PoolingType::AVG) { @@ -157,12 +163,13 @@ SimpleTensor pooling_layer(const SimpleTensor &src, PoolingLayerInfo info) template ::value, int>::type> SimpleTensor pooling_layer(const SimpleTensor &src, PoolingLayerInfo info) { - const int pool_size = info.pool_size(); - PoolingType type = info.pool_type(); - int pool_stride_x = info.pad_stride_info().stride().first; - int pool_stride_y = info.pad_stride_info().stride().second; - int pad_x = info.pad_stride_info().pad().first; - int pad_y = info.pad_stride_info().pad().second; + const int pool_size = info.pool_size(); + PoolingType type = info.pool_type(); + int pool_stride_x = info.pad_stride_info().stride().first; + int pool_stride_y = info.pad_stride_info().stride().second; + int pad_x = info.pad_stride_info().pad().first; + int pad_y = info.pad_stride_info().pad().second; + bool exclude_padding = info.exclude_padding(); const auto w_src = static_cast(src.shape()[0]); const auto h_src = static_cast(src.shape()[1]); @@ -224,6 +231,11 @@ SimpleTensor pooling_layer(const SimpleTensor &src, PoolingLayerInfo info) hstart = std::max(hstart, 0); wend = std::min(wend, w_src); hend = std::min(hend, h_src); + // Exclude padding pixels from the average + if(exclude_padding) + { + pool = (hend - hstart) * (wend - wstart); + } using namespace fixed_point_arithmetic; -- cgit v1.2.1