pytorch 转置卷积api
nn.ConvTranspose2d(in_channels, out_channels, kernel_size=3, stride=2, padding=1, dilation=1, output_padding=1)
作用:进行转置卷积,用于上采样
设原本图像大小为,图像的padding为1,经过一个为_为3,卷积的为1的给定卷积核,得到一个特征图大小为,而这个转置卷积就是用于将当前的特征图上采样成,_size,dilation 都是指原来的图像经过的卷积操作的参数,从而变成大小当前的特征图。out_padding用于防止stride大于1的时候1对多的现象。
什么是dilation?
卷积运算时,卷积核元素之间的距离,如果dilation不为1,卷积核的作用点更加分散,最后输出的特征图会更小,大小等于用**kernel_size+(dilation-1)*(kernel_size-1)**大小的卷积核得到的特征图
卷积多对一现象
假设现在有一个卷积核3*3,stride = 2;那么一个5x5的图,经过卷积得到的大小为2x2,一个6x6的图经过卷积也是2x2,那给定2x2的特征图,经过转置卷积要恢复到哪个size呢?
卷积输出的特征图计算公式为
这里的除法一般都是下取整,所以导致上面的问题。
现在逆卷积要做的是给定out和卷积核的参数,恢复in,那么将公式变换一下
但是为了防止上面的现象,多加了一个out_padding参数,可以自己指定恢复的大小,新的公式变成
因此现在无论原来是否发生下整除现象,我们都可以指定恢复原来的大小。
就上述的例子,如果原来是5x5,那么我们令out_padding为0(原来是刚好整除的),如果原来是6x6,那么我们令out_padding为1,就代入公式就得到6了。这里的out_padding最多是,
因为进行下取整最多舍去stride-1,因此有了这个参数一定可以恢复成原来指定的大小。
一般为了保持卷积same模式(),我们令padding = (kernelsize-1)/2,out_padding = kersize - 1,带入式子就可以得到