ConvTranspose2d的理解和计算
DeConv是Convolution的逆过程,但是和在Pytorch中却和Conv共享相同的参数,所以较难计算和理解。本文分析ConvTranspose2d的计算过程。
过程
deconvolution反卷积在pytorch中的代码为ConvTranspose2d
,是将图像从模糊转变成清晰的过程。
进行2D卷积/反卷积时:
- same inputs$i_1=i _2=i=4$
- same kernel size$k_1=k_2=k=3$
- same strides$s_1=s_2=s=1$
- same zero padding$p_1=p_2=p=0$
- same outputs$o_1=o_2=o$
但是由右侧的反卷积可以看到实际的zero padding为2,这个zero padding是如何计算的?
计算
- 对于convolution,其output map和input map有如下关系
上式子可化为
令$i’=o+(s-1)(o-1), p’=\frac{(k-1)+(k-2p-1)}{2}=k-p-1, k’=k, s’=1, o’=\frac{i’+2p’-k’}{s’}+1$
一般取kernel_size k=2, strides s=2, padding p=0, 此时deconvolustion的作用是将矩阵的一边变为原来的两倍;当i为偶数时(即deconvolution的输出为偶数),也可取k=3,s=2,p=1(same padding),实现放大为原来的两倍的作用。
参考文章