Change the type of `strides` parameter of convolutional operations to `vector<int32_t>`.
Signed-off-by: Sergei Barannikov <s.barannikov@samsung.com>
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)
_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;
};
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)
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)
{
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)
{
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; }
*/
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;
};
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)
_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;
};
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);
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);
{
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];
{
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;
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);
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);