From bd0e61238b2126e990d7811750ad4511ec2ccbd1 Mon Sep 17 00:00:00 2001 From: Michalis Spyrou Date: Tue, 23 Jan 2018 09:52:16 +0000 Subject: COMPMID-848 NEPoolingLayerKernel incorrectly reports it supports asymmetric padding Add asymmetric padding support for NEPoolingLayer Change-Id: Ia5cc660aeca636c3c45df4916a28974cc2b7f2f4 Reviewed-on: https://eu-gerrit-1.euhpc.arm.com/117275 Tested-by: Jenkins Reviewed-by: Georgios Pinitas Reviewed-by: Anthony Barbier --- tests/validation/reference/PoolingLayer.cpp | 38 ++++++++++++++++------------- 1 file changed, 21 insertions(+), 17 deletions(-) (limited to 'tests/validation/reference/PoolingLayer.cpp') diff --git a/tests/validation/reference/PoolingLayer.cpp b/tests/validation/reference/PoolingLayer.cpp index 1a7dd4cbb7..d05c0403ff 100644 --- a/tests/validation/reference/PoolingLayer.cpp +++ b/tests/validation/reference/PoolingLayer.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017 ARM Limited. + * Copyright (c) 2017-2018 ARM Limited. * * SPDX-License-Identifier: MIT * @@ -62,8 +62,10 @@ SimpleTensor pooling_layer(const SimpleTensor &src, PoolingLayerInfo info) 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; + int pad_left = info.pad_stride_info().pad_left(); + int pad_top = info.pad_stride_info().pad_top(); + int pad_right = info.pad_stride_info().pad_right(); + int pad_bottom = info.pad_stride_info().pad_bottom(); bool exclude_padding = info.exclude_padding(); const auto w_src = static_cast(src.shape()[0]); @@ -84,8 +86,8 @@ SimpleTensor pooling_layer(const SimpleTensor &src, PoolingLayerInfo info) { for(int w = 0; w < w_dst; ++w) { - int wstart = w * pool_stride_x - pad_x; - int hstart = h * pool_stride_y - pad_y; + int wstart = w * pool_stride_x - pad_left; + int hstart = h * pool_stride_y - pad_top; int wend = std::min(wstart + pool_size, w_src); int hend = std::min(hstart + pool_size, h_src); wstart = std::max(wstart, 0); @@ -118,10 +120,10 @@ SimpleTensor pooling_layer(const SimpleTensor &src, PoolingLayerInfo info) for(int w = 0; w < w_dst; ++w) { T avg_val(0); - int wstart = w * pool_stride_x - pad_x; - int hstart = h * pool_stride_y - pad_y; - int wend = std::min(wstart + pool_size, w_src + pad_x); - int hend = std::min(hstart + pool_size, h_src + pad_y); + int wstart = w * pool_stride_x - pad_left; + int hstart = h * pool_stride_y - pad_top; + int wend = std::min(wstart + pool_size, w_src + pad_right); + int hend = std::min(hstart + pool_size, h_src + pad_bottom); int pool = (hend - hstart) * (wend - wstart); wstart = std::max(wstart, 0); hstart = std::max(hstart, 0); @@ -173,8 +175,10 @@ SimpleTensor pooling_layer(const SimpleTensor &src, PoolingLayerInfo info) 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; + int pad_left = info.pad_stride_info().pad_left(); + int pad_top = info.pad_stride_info().pad_top(); + int pad_right = info.pad_stride_info().pad_right(); + int pad_bottom = info.pad_stride_info().pad_bottom(); bool exclude_padding = info.exclude_padding(); const auto w_src = static_cast(src.shape()[0]); @@ -195,8 +199,8 @@ SimpleTensor pooling_layer(const SimpleTensor &src, PoolingLayerInfo info) { for(int w = 0; w < w_dst; ++w) { - int wstart = w * pool_stride_x - pad_x; - int hstart = h * pool_stride_y - pad_y; + int wstart = w * pool_stride_x - pad_left; + int hstart = h * pool_stride_y - pad_top; int wend = std::min(wstart + pool_size, w_src); int hend = std::min(hstart + pool_size, h_src); wstart = std::max(wstart, 0); @@ -228,10 +232,10 @@ SimpleTensor pooling_layer(const SimpleTensor &src, PoolingLayerInfo info) { for(int w = 0; w < w_dst; ++w) { - int wstart = w * pool_stride_x - pad_x; - int hstart = h * pool_stride_y - pad_y; - int wend = std::min(wstart + pool_size, w_src + pad_x); - int hend = std::min(hstart + pool_size, h_src + pad_y); + int wstart = w * pool_stride_x - pad_left; + int hstart = h * pool_stride_y - pad_top; + int wend = std::min(wstart + pool_size, w_src + pad_right); + int hend = std::min(hstart + pool_size, h_src + pad_bottom); int pool = (hend - hstart) * (wend - wstart); wstart = std::max(wstart, 0); hstart = std::max(hstart, 0); -- cgit v1.2.1