上采样(UpSampling)之转置卷积(Transposed Convolution)

文章目录

  • 前言
  • 转置卷积
  • Pytorch中的转置卷积函数
    • 1.参数说明
    • 2.代码
  • 总结


前言

对一个较小尺寸的矩阵进行变换,得到较大尺寸矩阵的过程就叫上采样(UpSampling)。在图像分割任务和GAN网络中,上采样都是必不可少的。

常用的上采样方式有:插值法,反池化,反卷积(转置卷积),本文着重介绍转置卷积原理和用法。


转置卷积

卷积不会增大输入矩阵的高宽,输入矩阵在进行卷积操作之后,高宽保持不变或者减小。

  • 使用padding的方式,虽然可以增大高宽,但是太多padding没有意义。

转置卷积可以用来增大高宽

转置卷积操作如下(示例stride = 1):
上采样(UpSampling)之转置卷积(Transposed Convolution)_第1张图片
等号右边的四个矩阵分别表示将Input矩阵中的所有元素与Kernel中的每个元素相乘,保留相对位置,滑动的距离根据步长来定,上图为每次滑动一步。

注:本文为转置卷积操作的简单介绍,也可以通过转换为卷积操作来计算转置卷积,详情见下篇文章。

Pytorch中的转置卷积函数

1.参数说明

Pytorch给出了转置卷积函数:

torch.nn.ConvTranspose2d(in_channels, out_channels, kernel_size, stride=1, padding=0, output_padding=0, groups=1, bias=True, dilation=1, padding_mode='zeros', device=None, dtype=None)

其中卷积步长(stride)默认值为1,padding默认值为0.

参数说明如下:

上采样(UpSampling)之转置卷积(Transposed Convolution)_第2张图片
详情可参见官方文档
https://pytorch.org/docs/stable/generated/torch.nn.ConvTranspose2d.html

2.代码

代码如下(示例):

transconv = nn.ConvTranspose2d(1,1,kernel_size=2,padding=1,stride=2,bias=False)
transconv.weight.data = k 
transconv(x)

其中,x为输入,k为核。


总结

转置卷积也是一种卷积

  • 同卷积一般做下采样不同,它通常用于做上采样
  • 如果卷积将输入从(h,w)变成了(h’,w’),那么同样超参数的设置下它会将(h’,w’)变回(h,w)
    • 注:只是形状变回原样,数值会发生改变

你可能感兴趣的:(深度学习,pytorch)