From: 박종현/동작제어Lab(SR)/Staff Engineer/삼성전자 Date: Wed, 7 Nov 2018 07:18:09 +0000 (+0900) Subject: [enco.caffe] Simplify code using padding helpers (#2151) X-Git-Tag: nncc_backup~1401 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=3a786a9717b709fa49acedecd4fcf32a85fa2989;p=platform%2Fcore%2Fml%2Fnnfw.git [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 --- 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