【转置卷积Transposed Convolution】

目录

一、综合考虑步长,0填充卷积的转置卷积

二、单步长、无0填充卷积的转置卷积

三、单步长,0填充卷积的转置卷积

 四、half(same)padding卷积的转置卷积

五、full padding卷积的转置卷积

六、非单步长,无0填充卷积的转置卷积

七、非单步长,0填充卷积的转置卷积


转置卷积Transposed Convolution,也叫做微步卷积Fractionally Strided ConvolutionsDeconvolutions。卷积操作可以实现高维特征到低维特征的转换,设置步长大于1可以进一步降低输出特征维数。转置卷积可以将低位特征映射到高维特征。

Deconvolutions实际上是数学上Convolutions的逆运算,和转置卷积还是不一样的。

 转置卷积是可以转换为直接的卷积来运算的。

上来直接给出一个通用的计算转置卷积输出尺寸的公式和方法:

一、综合考虑步长,0填充卷积的转置卷积

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

在做正向卷积的时,一般需要以下参数:

  • kernel_size:卷积核大小
  • stride:步长
  • padding:对输入进行填充
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)

在做转置卷积时,这些参数是有相关性的。

如果卷积操作的步长s>1,对应的转置卷积步长为\frac{1}{s},需要在输入特征之间插入s-1个0来使移动速度变慢。

转置卷积实现步骤

  1. 对输入的每个元素之间填充stride-1的0
  2. 对填充后输入特征图的外部填充kernel\_size-1圈的0
  3. 用旋转180\degree后的卷积核对整个填充后的输入特征图进行stride=1的卷积
  4. 如果padding\neq 0,就对卷积后的结果的外围去除padding
  5. 如果out\_padding\neq 0,就对最后结果右侧和下方填充out\_padding的0
     

 注:如果第2步填充的kernel\_size-padding-1圈的0,就可以省略第4步

下面再给出一些具体的前向卷积操作对应的转置卷积操作参数设置样例和计算公式,可以按照上述方法进行验证:

如果转置卷积使用与卷积同样的参数可以将经过卷积后变小或不变的特征图尺寸恢复为原来的特征图尺寸。

二、单步长、无0填充卷积的转置卷积

aebfecde907a4531bdae7f430870f887.png

正向的卷积无0填充单步长卷积核大小为3输入特征图大小为4

f9304d89142d4d94878164acd49778ab.png

对应的转置卷积就是输入特征图大小为2卷积核大小为3单步长0填充2

转置卷积只能够回到具有相同宽和高的特征图,而不能恢复原来特征图中的信息。

卷积核大小、步长大小和卷积保持一致,但是转置卷积的输入是经过0填充的。

0填充背后的逻辑是考虑了转置卷积的连接模式,并以此来指导等价的卷积设计。例如,输入的左上角像素在直接卷积中只对输出的左上角像素有所贡献。

为了保持同样的连接模式,对输入进行0填充是有必要的。卷积核左上角应只接触输入的左上角像素,所以0填充应该为卷积核大小减1。

如果:卷积的步长gif.latex?s%3D1,0填充gif.latex?p%3D0,卷积核大小gif.latex?k;对应的转置卷积,卷积核大小为gif.latex?k%5E%5Cprime%3Dk,卷积步长gif.latex?s%5E%5Cprime%3Ds%3D1,0填充gif.latex?p%5E%5Cprime%3Dk-1。 

输出推导:gif.latex?o%5E%5Cprime%20%3D%20%5Cfrac%7Bi%5E%5Cprime+2p%5E%5Cprime-k%5E%5Cprime%7D%7Bs%5E%5Cprime%7D+1%3D%5Cfrac%7Bi%5E%5Cprime+2k-2-k%7D%7B1%7D+1%3Di%5E%5Cprime+k-1 

我们可以发现,这实际上就是单步长fully padded convolution。 

三、单步长,0填充卷积的转置卷积

3b37a15b7663441ab5f27ed197288987.png

正向的卷积0填充2单步长卷积核大小为4输入特征图大小为5

fa4dbfdec8eb40eca7768bfafbbb6184.png

对应的转置卷积就是输入特征图大小为6卷积核大小为4单步长0填充大小为1

如果:卷积的步长gif.latex?s%3D1,0填充gif.latex?p,卷积核大小gif.latex?k;对应的转置卷积,卷积核大小为gif.latex?k%5E%5Cprime%3Dk,卷积步长gif.latex?s%5E%5Cprime%3Ds%3D1,0填充gif.latex?p%5E%5Cprime%3Dk-p-1。 

输出推导:gif.latex?o%5E%5Cprime%20%3D%20%5Cfrac%7Bi%5E%5Cprime+2p%5E%5Cprime-k%5E%5Cprime%7D%7Bs%5E%5Cprime%7D+1%3D%5Cfrac%7Bi%5E%5Cprime+2k-2p-2-k%7D%7B1%7D+1%3Di%5E%5Cprime+k-1-2p 

 四、half(same)padding卷积的转置卷积

c8b90da623f24c2481443afca5a915ec.png

正向的卷积0填充1单步长卷积核大小为3输入特征图大小为5

fe599241608a4b7a9b38d64388858258.png

对应的转置卷积就是输入特征图大小为5卷积核大小为3单步长0填充大小为1

如果:卷积的步长gif.latex?s%3D1,卷积核大小gif.latex?k%3D2n+1%28n%5Cin%20N%29 ,0填充2%29%3Dn;对应的转置卷积,卷积核大小为gif.latex?k%5E%5Cprime%3Dk,卷积步长gif.latex?s%5E%5Cprime%3Ds%3D1,0填充gif.latex?p%5E%5Cprime%3Dp。 

输出推导:gif.latex?o%5E%5Cprime%20%3D%20%5Cfrac%7Bi%5E%5Cprime+2p%5E%5Cprime-k%5E%5Cprime%7D%7Bs%5E%5Cprime%7D+1%3D%5Cfrac%7Bi%5E%5Cprime+2p-k%7D%7B1%7D+1%3Di%5E%5Cprime

五、full padding卷积的转置卷积

5c0f460f7a474dd795f6ab0407b46384.png

正向的卷积0填充2单步长卷积核大小为3输入特征图大小为5

5fbb1393cf6642b2897d46fd49565258.png

对应的转置卷积就是输入特征图大小为7卷积核大小为3单步长0填充大小为0

如果:卷积的步长gif.latex?s%3D1,卷积核大小gif.latex?k,0填充gif.latex?p%3Dk-1;对应的转置卷积,卷积核大小为gif.latex?k%5E%5Cprime%3Dk,卷积步长gif.latex?s%5E%5Cprime%3Ds%3D1,0填充gif.latex?p%5E%5Cprime%3D0。 

输出推导:gif.latex?o%5E%5Cprime%20%3D%20%5Cfrac%7Bi%5E%5Cprime-k%5E%5Cprime%7D%7Bs%5E%5Cprime%7D+1%3D%5Cfrac%7Bi%5E%5Cprime-k%7D%7B1%7D+1%3Di%5E%5Cprime-k+1

六、非单步长,无0填充卷积的转置卷积

 正向的卷积无0填充步长为2卷积核大小为3输入特征图大小为5

 对应的转置卷积就是输入特征图大小为2,(中间插入1个0值),输入特征图大小变为3,卷积核大小为3单步长0填充大小为2

如果:卷积的步长s,卷积核大小gif.latex?k,0填充p=0,输入特征图尺寸大小满足i-ks的整数倍;对应的转置卷积,卷积核大小为gif.latex?k%5E%5Cprime%3Dk,卷积步长s^\prime=1,0填充p^\prime=k-1,输入特征图尺寸大小为\tilde{i}^\prime,是对每个输入单元中间添加s-1个0得到的尺寸。 

输出推导:o^\prime = \frac{(i^\prime-1)\times(s-1)+i^\prime+2p^\prime-k^\prime}{s^\prime}+1\\=\frac{si^\prime-i^\prime-s+1+i^\prime+2k-2-k}{1}+1\\=si^\prime-s+k\\=s(i^\prime-1)+k

七、非单步长,0填充卷积的转置卷积

  正向的卷积0填充为1步长为2卷积核大小为3输入特征图大小为5

对应的转置卷积就是输入特征图大小为3,(输入中间插入1个0值),输入特征图大小变为5,卷积核大小为3单步长0填充大小为1

如果:卷积的步长s,卷积核大小gif.latex?k,0填充p,输入特征图尺寸大小满足i+2p-ks的整数倍;对应的转置卷积,卷积核大小为gif.latex?k%5E%5Cprime%3Dk,卷积步长s^\prime=1,0填充p^\prime=k-p-1,输入特征图尺寸大小为\tilde{i}^\prime,是对每个输入单元中间添加s-1个0得到的尺寸。 

输出推导:o^\prime = \frac{(i^\prime-1)\times(s-1)+i^\prime+2p^\prime-k^\prime}{s^\prime}+1\\=\frac{si^\prime-i^\prime-s+1+i^\prime+2k-2p-2-k}{1}+1\\=si^\prime-s+k-2p\\=s(i^\prime-1)+k-2p


参考:

GitHub - vdumoulin/conv_arithmetic: A technical report on convolution arithmetic in the context of deep learning

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值