[enco.caffe] Simplify code using padding helpers (#2151)
author박종현/동작제어Lab(SR)/Staff Engineer/삼성전자 <jh1302.park@samsung.com>
Wed, 7 Nov 2018 07:18:09 +0000 (16:18 +0900)
committerGitHub Enterprise <noreply-CODE@samsung.com>
Wed, 7 Nov 2018 07:18:09 +0000 (16:18 +0900)
This commit simplifies ConvolutionSpec and PoolingSpec code using
build_raw_padding and build_spatial_padding helpers.

Signed-off-by: Jonghyun Park <jh1302.park@samsung.com>
contrib/enco/frontend/caffe/src/ConvolutionSpec.cpp
contrib/enco/frontend/caffe/src/PoolingSpec.cpp

index 7d5b225..e13ada8 100644 (file)
@@ -15,6 +15,7 @@
  */
 
 #include "ConvolutionSpec.h"
+#include "PaddingUtils.h"
 #include "ShapeQuery.h"
 
 #include <cassert>
@@ -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<Dtype>::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
index b5d71f4..36216a2 100644 (file)
@@ -15,6 +15,7 @@
  */
 
 #include "PoolingSpec.h"
+#include "PaddingUtils.h"
 
 #include <map>
 #include <cassert>
@@ -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<Dtype>::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<Dtype>::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