【转置卷积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填充卷积的转置卷积

【转置卷积Transposed Convolution】_第1张图片

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

【转置卷积Transposed Convolution】_第2张图片

对应的转置卷积就是输入特征图大小为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

【转置卷积Transposed Convolution】_第3张图片

对应的转置卷积就是输入特征图大小为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卷积的转置卷积

【转置卷积Transposed Convolution】_第4张图片

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

【转置卷积Transposed Convolution】_第5张图片

对应的转置卷积就是输入特征图大小为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卷积的转置卷积

【转置卷积Transposed Convolution】_第6张图片

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

【转置卷积Transposed Convolution】_第7张图片

对应的转置卷积就是输入特征图大小为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填充卷积的转置卷积

【转置卷积Transposed Convolution】_第8张图片

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

【转置卷积Transposed Convolution】_第9张图片

 对应的转置卷积就是输入特征图大小为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得到的尺寸。 

输出推导:【转置卷积Transposed Convolution】_第10张图片

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

【转置卷积Transposed Convolution】_第11张图片

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

【转置卷积Transposed Convolution】_第12张图片

对应的转置卷积就是输入特征图大小为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得到的尺寸。 

输出推导:【转置卷积Transposed Convolution】_第13张图片


参考:

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

你可能感兴趣的:(深度学习基础知识,深度学习,人工智能,计算机视觉,cnn)