[enco] Support convolution layer with pad_h and pad_w (#1418)
author박종현/동작제어Lab(SR)/Staff Engineer/삼성전자 <jh1302.park@samsung.com>
Mon, 10 Sep 2018 02:08:39 +0000 (11:08 +0900)
committerGitHub Enterprise <noreply-CODE@samsung.com>
Mon, 10 Sep 2018 02:08:39 +0000 (11:08 +0900)
* [enco] Support convolution layer with pad_h and pad_w

This commit extends caffe frontend to support convolution layer with
pad_h and pad_w parameters.

Signed-off-by: Jonghyun Park <jh1302.park@samsung.com>
* Update comment

contrib/enco/frontend/caffe/src/ConvolutionSpec.cpp

index 0088ce3..c06678c 100644 (file)
@@ -53,16 +53,23 @@ uint32_t ConvolutionSpec::pad(uint32_t spatial_axis) const
 {
   assert(spatial_axis < num_spatial_axes());
 
-  // TODO Support pad_h/pad_w parameters
-  assert(!_param.has_pad_h());
-  assert(!_param.has_pad_w());
-
   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);