0%

ConvTranspose2d

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),实现放大为原来的两倍的作用。
参考文章