参考conv_arithmetic上的动图
符号约定: i,o,k,p,s分别表示:卷积的输入大小input size,输出大小 output size,卷积核大小 kernel size, padding , stride 。
下面的图片蓝色(底部)为输入,绿色(顶部)为输出。
1、常规卷积:
(1)、i=4,o=2,k=3,p=0,s=1, "VALID模式"

(2)、
i=5,o=5,k=3,p=1,s=1 "SAME模式"或者"HALF模式" 
(3)、
i=5,o=7,k=3,p=2,s=1 "FULL模式"
(4)、
i=5,o=2,k=3,p=0,s=2
(5)、
i=5,o=3,k=3,p=1,s=2
2、反卷积/转置卷积:
(1)、i=2,o=4,k=3,no_padding,s=1

(2)、
i=5,o=5,k=3,same_padding,s=1 
(3)、
i=7,o=5,k=3,full_padding,s=1 
(4)、
i=2,o=5,k=3,no_padding,s=2
(5)、
i=3,o=5,k=3,padding,s=2
实际上通过反卷积操作并不能还原出卷积之前的图片,只能还原出卷积之前图片的尺寸。
反卷积(转置卷积)通常用在以下几个方面:
- CNN可视化,通过反卷积将卷积得到的
feature map还原到像素空间,来观察feature map对哪些pattern相应最大,即可视化哪些特征是卷积操作提取出来的; - FCN全卷积网络中,由于要对图像进行像素级的分割,需要将图像尺寸还原到原来的大小,类似
upsampling的操作,所以需要采用反卷积; - GAN对抗式生成网络中,由于需要从输入图像到生成图像,自然需要将提取的特征图还原到和原图同样尺寸的大小,即也需要反卷积操作。
当反卷积的s = 1时,反卷积和一般的卷积并没有什么不同,只是padding的称呼方式有所变化,方向和卷积相反。由反卷积的图5可以看到反卷积的一些缺点,在s > 1时,会降低图片的分辨率,并且不同于一般的convolution,反而增大了输出的feature map的size。
对于s = 2、padding=1、k=4的反卷积,输入AXA图像,输出为2AX2A。
3、膨胀卷积:
又称为空洞卷积、扩张卷积英文为:Dilation[daɪ'leɪʃn] Convolution/Atrous['ətrəs] Convolution/Convolution with holes
作用:
首先膨胀卷积的目的是为了在扩大感受野的同时,不降低图片分辨率和不引入额外参数及计算量(一般在CNN中扩大感受野都需要使用s>1的conv或者pooling,导致分辨率降低,减少了feature map的信息。如果使用大卷积核,确实可以达到增大感受野,但是会引入额外的参数及计算量)。
膨胀卷积多了一个参数dilation rate, 指的是kernel的间隔数量(e.g. 一般的convolution的 dilatation rate = 1)。把dilation rate简记为r。
图像参考:i = 7,o = 3,k = 3,p = 0,s = 1,r = 2

扩充后的卷积核
size = k + (k-1) x (r-1),特别地,对于3*3的卷积核,如果p = r,则特征图尺寸大小不改变。既然膨胀卷积的初衷之一就是不降低图片分辨率,那么我们可以认定膨胀卷积的s = 1。总起来说,dilation conv是对卷积核进行upsample,deconv是对feature map进行upsample;或者说,dilation conv是skip掉map中的一些元素,而deconv是对map中的元素进行补0操作。
参考:
1、反卷积/转置卷积: transposed conv/deconv
2、彻底搞懂CNN中的卷积和反卷积
3、谈谈膨胀卷积
4、dilation conv 和 deconv
5、如何理解空洞卷积(dilated convolution)?-知乎