目录
一、综合考虑步长,0填充卷积的转置卷积
二、单步长、无0填充卷积的转置卷积
三、单步长,0填充卷积的转置卷积
四、half(same)padding卷积的转置卷积
五、full padding卷积的转置卷积
六、非单步长,无0填充卷积的转置卷积
七、非单步长,0填充卷积的转置卷积
转置卷积Transposed Convolution,也叫做微步卷积Fractionally Strided Convolutions或Deconvolutions。卷积操作可以实现高维特征到低维特征的转换,设置步长大于1可以进一步降低输出特征维数。转置卷积可以将低位特征映射到高维特征。
Deconvolutions实际上是数学上Convolutions的逆运算,和转置卷积还是不一样的。
转置卷积是可以转换为直接的卷积来运算的。
上来直接给出一个通用的计算转置卷积输出尺寸的公式和方法:
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)
在做正向卷积的时,一般需要以下参数:
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)
在做转置卷积时,这些参数是有相关性的。
如果卷积操作的步长,对应的转置卷积步长为
,需要在输入特征之间插入
个0来使移动速度变慢。
转置卷积实现步骤:
注:如果第2步填充的
圈的0,就可以省略第4步
下面再给出一些具体的前向卷积操作对应的转置卷积操作参数设置样例和计算公式,可以按照上述方法进行验证:
如果转置卷积使用与卷积同样的参数可以将经过卷积后变小或不变的特征图尺寸恢复为原来的特征图尺寸。
正向的卷积是无0填充,单步长,卷积核大小为3,输入特征图大小为4。
对应的转置卷积就是输入特征图大小为2,卷积核大小为3,单步长,0填充为2。
转置卷积只能够回到具有相同宽和高的特征图,而不能恢复原来特征图中的信息。
卷积核大小、步长大小和卷积保持一致,但是转置卷积的输入是经过0填充的。
0填充背后的逻辑是考虑了转置卷积的连接模式,并以此来指导等价的卷积设计。例如,输入的左上角像素在直接卷积中只对输出的左上角像素有所贡献。
为了保持同样的连接模式,对输入进行0填充是有必要的。卷积核左上角应只接触输入的左上角像素,所以0填充应该为卷积核大小减1。
如果:卷积的步长,0填充
,卷积核大小
;对应的转置卷积,卷积核大小为
,卷积步长
,0填充
。
我们可以发现,这实际上就是单步长的fully padded convolution。
正向的卷积是0填充2,单步长,卷积核大小为4,输入特征图大小为5。
对应的转置卷积就是输入特征图大小为6,卷积核大小为4,单步长,0填充大小为1。
如果:卷积的步长,0填充
,卷积核大小
;对应的转置卷积,卷积核大小为
,卷积步长
,0填充
。
正向的卷积是0填充1,单步长,卷积核大小为3,输入特征图大小为5。
对应的转置卷积就是输入特征图大小为5,卷积核大小为3,单步长,0填充大小为1。
如果:卷积的步长,卷积核大小
,0填充
;对应的转置卷积,卷积核大小为
,卷积步长
,0填充
。
正向的卷积是0填充2,单步长,卷积核大小为3,输入特征图大小为5。
对应的转置卷积就是输入特征图大小为7,卷积核大小为3,单步长,0填充大小为0。
如果:卷积的步长,卷积核大小
,0填充
;对应的转置卷积,卷积核大小为
,卷积步长
,0填充
。
正向的卷积是无0填充,步长为2,卷积核大小为3,输入特征图大小为5。
对应的转置卷积就是输入特征图大小为2,(中间插入1个0值),输入特征图大小变为3,卷积核大小为3,单步长,0填充大小为2。
如果:卷积的步长,卷积核大小
,0填充
,输入特征图尺寸大小满足
是
的整数倍;对应的转置卷积,卷积核大小为
,卷积步长
,0填充
,输入特征图尺寸大小为
,是对每个输入单元中间添加
个0得到的尺寸。
正向的卷积是0填充为1,步长为2,卷积核大小为3,输入特征图大小为5。
对应的转置卷积就是输入特征图大小为3,(输入中间插入1个0值),输入特征图大小变为5,卷积核大小为3,单步长,0填充大小为1。
如果:卷积的步长,卷积核大小
,0填充
,输入特征图尺寸大小满足
是
的整数倍;对应的转置卷积,卷积核大小为
,卷积步长
,0填充
,输入特征图尺寸大小为
,是对每个输入单元中间添加
个0得到的尺寸。
参考:
GitHub - vdumoulin/conv_arithmetic: A technical report on convolution arithmetic in the context of deep learning