From 3a786a9717b709fa49acedecd4fcf32a85fa2989 Mon Sep 17 00:00:00 2001 From: =?utf8?q?=EB=B0=95=EC=A2=85=ED=98=84/=EB=8F=99=EC=9E=91=EC=A0=9C?= =?utf8?q?=EC=96=B4Lab=28SR=29/Staff=20Engineer/=EC=82=BC=EC=84=B1?= =?utf8?q?=EC=A0=84=EC=9E=90?= Date: Wed, 7 Nov 2018 16:18:09 +0900 Subject: [PATCH] [enco.caffe] Simplify code using padding helpers (#2151) This commit simplifies ConvolutionSpec and PoolingSpec code using build_raw_padding and build_spatial_padding helpers. Signed-off-by: Jonghyun Park --- .../enco/frontend/caffe/src/ConvolutionSpec.cpp | 27 +++-------------- contrib/enco/frontend/caffe/src/PoolingSpec.cpp | 35 +++++++--------------- 2 files changed, 15 insertions(+), 47 deletions(-) diff --git a/contrib/enco/frontend/caffe/src/ConvolutionSpec.cpp b/contrib/enco/frontend/caffe/src/ConvolutionSpec.cpp index 7d5b225..e13ada8 100644 --- a/contrib/enco/frontend/caffe/src/ConvolutionSpec.cpp +++ b/contrib/enco/frontend/caffe/src/ConvolutionSpec.cpp @@ -15,6 +15,7 @@ */ #include "ConvolutionSpec.h" +#include "PaddingUtils.h" #include "ShapeQuery.h" #include @@ -37,30 +38,10 @@ uint32_t ConvolutionSpec::pad(uint32_t spatial_axis) const { assert(spatial_axis < num_spatial_axes()); - if (_param.pad().size() == 0) - { - if (_param.has_pad_h() || _param.has_pad_w()) - { - assert(num_spatial_axes() == 2); - return (spatial_axis == 0) ? _param.pad_h() : _param.pad_w(); - } - // NOTE default pad is 0 - return 0; - } - - // NOTE pad and pad_h/pad_w cannot be specified at the same time - // Please refer to Caffe for details. You may find the relevant implementation - // from BaseConvolutionLayer::LayerSetUp in base_conv_layer.cpp. - assert(!_param.has_pad_h()); - assert(!_param.has_pad_w()); - - if (_param.pad().size() == 1) - { - return _param.pad(0); - } + auto raw_padding = build_raw_padding().with(_param); + auto spatial_padding = build_spatial_padding(num_spatial_axes()).with(raw_padding); - assert(_param.pad().size() == num_spatial_axes()); - return _param.pad(spatial_axis); + return spatial_padding.value(spatial_axis); } uint32_t ConvolutionSpec::stride(uint32_t spatial_axis) const diff --git a/contrib/enco/frontend/caffe/src/PoolingSpec.cpp b/contrib/enco/frontend/caffe/src/PoolingSpec.cpp index b5d71f4..36216a2 100644 --- a/contrib/enco/frontend/caffe/src/PoolingSpec.cpp +++ b/contrib/enco/frontend/caffe/src/PoolingSpec.cpp @@ -15,6 +15,7 @@ */ #include "PoolingSpec.h" +#include "PaddingUtils.h" #include #include @@ -76,34 +77,20 @@ uint32_t PoolingSpec::window_width(void) const uint32_t PoolingSpec::vertical_pad(void) const { - if (_param.has_pad_h()) - { - return _param.pad_h(); - } - - if (_param.has_pad()) - { - return _param.pad(); - } - - // NOTE Default padding is 0 - return 0; + // NOTE The input of Pooling SHOULD BE a rank-4 tensor. + // Reference: PoolingLayer::Reshape in pooling_layer.cpp + auto raw_padding = build_raw_padding().with(_param); + auto spatial_padding = build_spatial_padding(2 /* SPATIAL RANK */).with(raw_padding); + return spatial_padding.value(0 /* H */); } uint32_t PoolingSpec::horizontal_pad(void) const { - if (_param.has_pad_w()) - { - return _param.pad_w(); - } - - if (_param.has_pad()) - { - return _param.pad(); - } - - // NOTE Default padding is 0 - return 0; + // NOTE The input of Pooling SHOULD BE a rank-4 tensor. + // Reference: PoolingLayer::Reshape in pooling_layer.cpp + auto raw_padding = build_raw_padding().with(_param); + auto spatial_padding = build_spatial_padding(2 /* SPATIAL RANK */).with(raw_padding); + return spatial_padding.value(1 /* W */); } uint32_t PoolingSpec::vertical_stride(void) const -- 2.7.4