[mir] Change type of strides parameter (#7179)
authorСергей Баранников/AI Tools Lab /SRR/Engineer/삼성전자 <s.barannikov@samsung.com>
Wed, 4 Sep 2019 16:11:12 +0000 (19:11 +0300)
committerAlexander Efimov/AI Tools Lab/./Samsung Electronics <a.efimov@samsung.com>
Wed, 4 Sep 2019 16:11:12 +0000 (19:11 +0300)
Change the type of `strides` parameter of convolutional operations to `vector<int32_t>`.

Signed-off-by: Sergei Barannikov <s.barannikov@samsung.com>
compiler/mir/include/mir/ops/Conv2DOp.h
compiler/mir/include/mir/ops/Deconv2DOp.h
compiler/mir/include/mir/ops/DepthwiseConv2DOp.h
compiler/mir/src/ops/Conv2DOp.cpp
compiler/mir/src/ops/DeConv2DOp.cpp
compiler/mir/src/ops/DepthwiseConv2DOp.cpp

index 7acd2fd..f2de1f0 100644 (file)
@@ -29,7 +29,7 @@ namespace ops
 class Conv2DOp : public Operation
 {
 public:
-  Conv2DOp(Output *input, Output *kernel, const Shape &strides,
+  Conv2DOp(Output *input, Output *kernel, const std::vector<std::int32_t> &strides,
            const std::vector<std::int32_t> &padding_before,
            const std::vector<std::int32_t> &padding_after,
            DataFormat data_format = DataFormat::NHWC)
@@ -45,20 +45,20 @@ public:
                         _data_format);
   };
 
-  const Shape &getStrides() const { return _strides; }
+  const std::vector<std::int32_t> &getStrides() const { return _strides; }
 
-  const std::vector<int32_t> &getPaddingBefore() const { return _padding_before; }
+  const std::vector<std::int32_t> &getPaddingBefore() const { return _padding_before; }
 
-  const std::vector<int32_t> &getPaddingAfter() const { return _padding_after; }
+  const std::vector<std::int32_t> &getPaddingAfter() const { return _padding_after; }
 
   DataFormat getDataFormat() const { return _data_format; }
 
 private:
   void inferOutputShapes();
 
-  Shape _strides;
-  std::vector<int32_t> _padding_before;
-  std::vector<int32_t> _padding_after;
+  std::vector<std::int32_t> _strides;
+  std::vector<std::int32_t> _padding_before;
+  std::vector<std::int32_t> _padding_after;
   DataFormat _data_format;
 };
 
index 5108249..f5c247d 100644 (file)
@@ -30,8 +30,8 @@ namespace ops
 class DeConv2DOp : public Operation
 {
 public:
-  DeConv2DOp(Output *input, Output *kernel, const Shape &strides,
-             const std::vector<int32_t> &paddings, DataFormat data_format = DataFormat::NHWC)
+  DeConv2DOp(Output *input, Output *kernel, const std::vector<std::int32_t> &strides,
+             const std::vector<std::int32_t> &paddings, DataFormat data_format = DataFormat::NHWC)
       : Operation(Type::deConv2D, {input, kernel}), _strides(strides),
         _padding_type(PaddingType::Custom), _padding_before(paddings), _padding_after(paddings),
         _data_format(data_format)
@@ -39,8 +39,8 @@ public:
     inferOutputShapes();
   }
 
-  DeConv2DOp(Output *input, Output *kernel, const Shape &strides, PaddingType padding_type,
-             DataFormat data_format = DataFormat::NHWC)
+  DeConv2DOp(Output *input, Output *kernel, const std::vector<std::int32_t> &strides,
+             PaddingType padding_type, DataFormat data_format = DataFormat::NHWC)
       : Operation(Type::deConv2D, {input, kernel}), _strides(strides), _padding_type(padding_type),
         _padding_before(2), _padding_after(2), _data_format(data_format)
   {
@@ -48,8 +48,9 @@ public:
     inferOutputShapes();
   }
 
-  DeConv2DOp(Output *input, Output *kernel, const Shape &strides, PaddingType padding_type,
-             const Shape &output_shape, DataFormat data_format = DataFormat::NHWC)
+  DeConv2DOp(Output *input, Output *kernel, const std::vector<std::int32_t> &strides,
+             PaddingType padding_type, const Shape &output_shape,
+             DataFormat data_format = DataFormat::NHWC)
       : Operation(Type::deConv2D, {input, kernel}), _strides(strides), _padding_type(padding_type),
         _padding_before(2), _padding_after(2), _data_format(data_format)
   {
@@ -61,15 +62,15 @@ public:
   Operation *copyWithInputs(const std::vector<Output *> &inputs) override
   {
     return new DeConv2DOp(inputs[0], inputs[1], _strides, _padding_after, _data_format);
-  };
+  }
 
-  const Shape &getStrides() const { return _strides; }
+  const std::vector<std::int32_t> &getStrides() const { return _strides; }
 
   PaddingType getPaddingType() const { return _padding_type; }
 
-  const std::vector<int32_t> &getPaddingBefore() const { return _padding_before; }
+  const std::vector<std::int32_t> &getPaddingBefore() const { return _padding_before; }
 
-  const std::vector<int32_t> &getPaddingAfter() const { return _padding_after; }
+  const std::vector<std::int32_t> &getPaddingAfter() const { return _padding_after; }
 
   DataFormat getDataFormat() const { return _data_format; }
 
@@ -81,10 +82,10 @@ private:
    */
   void inferPaddings();
 
-  Shape _strides;
+  std::vector<std::int32_t> _strides;
   PaddingType _padding_type;
-  std::vector<int32_t> _padding_before;
-  std::vector<int32_t> _padding_after;
+  std::vector<std::int32_t> _padding_before;
+  std::vector<std::int32_t> _padding_after;
   DataFormat _data_format;
 };
 
index e4c9790..3227e2a 100644 (file)
@@ -29,7 +29,7 @@ namespace ops
 class DepthwiseConv2DOp : public Operation
 {
 public:
-  DepthwiseConv2DOp(Output *input, Output *kernel, const Shape &strides,
+  DepthwiseConv2DOp(Output *input, Output *kernel, const std::vector<std::int32_t> &strides,
                     const std::vector<std::int32_t> &padding_before,
                     const std::vector<std::int32_t> &padding_after,
                     DataFormat data_format = DataFormat::NHWC)
@@ -45,20 +45,20 @@ public:
                                  _data_format);
   }
 
-  const Shape &getStrides() const { return _strides; }
+  const std::vector<std::int32_t> &getStrides() const { return _strides; }
 
-  const std::vector<int32_t> &getPaddingBefore() const { return _padding_before; }
+  const std::vector<std::int32_t> &getPaddingBefore() const { return _padding_before; }
 
-  const std::vector<int32_t> &getPaddingAfter() const { return _padding_after; }
+  const std::vector<std::int32_t> &getPaddingAfter() const { return _padding_after; }
 
   DataFormat getDataFormat() const { return _data_format; }
 
 private:
   void inferOutputShapes();
 
-  Shape _strides;
-  std::vector<int32_t> _padding_before;
-  std::vector<int32_t> _padding_after;
+  std::vector<std::int32_t> _strides;
+  std::vector<std::int32_t> _padding_before;
+  std::vector<std::int32_t> _padding_after;
   DataFormat _data_format;
 };
 
index e7325f2..9967aa5 100644 (file)
@@ -32,7 +32,7 @@ void Conv2DOp::inferOutputShapes()
   assert(input_shape.rank() == 4);
   assert(kernel_shape.rank() == 4);
   assert(kernel_shape.dim(3) == input_shape.dim(channel_dim_index));
-  assert(_strides.rank() == 2);
+  assert(_strides.size() == 2);
   assert(_padding_before.size() == 2);
   assert(_padding_after.size() == 2);
 
@@ -44,13 +44,13 @@ void Conv2DOp::inferOutputShapes()
   for (int i = 0; i < 2; i++)
   {
     const int spatial_dim_index = getDataSpatialDimIndex(_data_format, i);
-    const int32_t padded_input =
+    const std::int32_t padded_input =
         input_shape.dim(spatial_dim_index) + _padding_before[i] + _padding_after[i];
     // out_size = ceil((in_size - kernel_size + 1) / stride) =
     //   (in_size - kernel_size + 1 + stride - 1) / stride =
     //   (in_size - kernel_size) / stride + 1
     output_shape.dim(spatial_dim_index) =
-        (padded_input - kernel_shape.dim(1 + i)) / _strides.dim(i) + 1;
+        (padded_input - kernel_shape.dim(1 + i)) / _strides[i] + 1;
   }
 
   setOutputShape(0, output_shape);
index e2918c9..111fb0d 100644 (file)
@@ -33,8 +33,8 @@ void DeConv2DOp::inferPaddings()
   {
     const int spatial_dim_index = getDataSpatialDimIndex(_data_format, i);
     // See `ComputePadding` in tflite sources.
-    const int32_t pad = (input_shape.dim(spatial_dim_index) - 1) * _strides.dim(i) +
-                        kernel_shape.dim(i) - output_shape.dim(spatial_dim_index);
+    const std::int32_t pad = (input_shape.dim(spatial_dim_index) - 1) * _strides[i] +
+                             kernel_shape.dim(i) - output_shape.dim(spatial_dim_index);
 
     _padding_before[i] = pad / 2;
     _padding_after[i] = pad - _padding_before[i];
@@ -68,23 +68,23 @@ void DeConv2DOp::inferOutputShapes()
       {
         const int spatial_dim_index = getDataSpatialDimIndex(_data_format, i);
         output_shape.dim(spatial_dim_index) =
-            input_shape.dim(spatial_dim_index) * _strides.dim(i) - _strides.dim(i) + 1;
+            input_shape.dim(spatial_dim_index) * _strides[i] - _strides[i] + 1;
       }
       break;
     case ops::PaddingType::Valid:
       for (int i = 0; i < 2; i++)
       {
         const int spatial_dim_index = getDataSpatialDimIndex(_data_format, i);
-        output_shape.dim(spatial_dim_index) = input_shape.dim(spatial_dim_index) * _strides.dim(i) +
-                                              kernel_shape.dim(i) - _strides.dim(i);
+        output_shape.dim(spatial_dim_index) =
+            input_shape.dim(spatial_dim_index) * _strides[i] + kernel_shape.dim(i) - _strides[i];
       }
       break;
     case ops::PaddingType::Custom:
       for (int i = 0; i < 2; i++)
       {
         const int spatial_dim_index = getDataSpatialDimIndex(_data_format, i);
-        output_shape.dim(spatial_dim_index) = input_shape.dim(spatial_dim_index) * _strides.dim(i) +
-                                              kernel_shape.dim(i) - _strides.dim(i) -
+        output_shape.dim(spatial_dim_index) = input_shape.dim(spatial_dim_index) * _strides[i] +
+                                              kernel_shape.dim(i) - _strides[i] -
                                               (_padding_before.at(i) + _padding_after.at(i));
       }
       break;
index 9e21951..ff128b3 100644 (file)
@@ -32,7 +32,7 @@ void DepthwiseConv2DOp::inferOutputShapes()
   assert(input_shape.rank() == 4);
   assert(kernel_shape.rank() == 4);
   assert(input_shape.dim(channel_dim_index) == kernel_shape.dim(2));
-  assert(_strides.rank() == 2);
+  assert(_strides.size() == 2);
   assert(_padding_before.size() == 2);
   assert(_padding_after.size() == 2);
 
@@ -44,13 +44,12 @@ void DepthwiseConv2DOp::inferOutputShapes()
   for (int i = 0; i < 2; i++)
   {
     const int spatial_dim_index = getDataSpatialDimIndex(_data_format, i);
-    const int32_t padded_input =
+    const std::int32_t padded_input =
         input_shape.dim(spatial_dim_index) + _padding_before[i] + _padding_after[i];
     // out_size = ceil((in_size - kernel_size + 1) / stride) =
     //   (in_size - kernel_size + 1 + stride - 1) / stride =
     //   (in_size - kernel_size) / stride + 1
-    output_shape.dim(spatial_dim_index) =
-        (padded_input - kernel_shape.dim(i)) / _strides.dim(i) + 1;
+    output_shape.dim(spatial_dim_index) = (padded_input - kernel_shape.dim(i)) / _strides[i] + 1;
   }
 
   setOutputShape(0, output_shape);