Dilated convolution空洞卷积的理解以及Pyto
1、Dilated convolution介绍
DilatedDilated convolution:空洞卷积或者扩张卷积(同 Atrous convolutionconvolution)
Dialted convolution最先在使用图像分割领域,图像输入到CNN中提取特征(如FCN),FCN先像传统的CNN那样对图像做卷积再pooling,降低图像尺寸的同时增大感受野,但是由于图像分割预测是pixel-wise的输出,所以要将pooling后较小的图像尺寸upsampling到原始的图像尺寸进行预测(upsampling一般采用deconv反卷积操作,deconv可参见知乎答案如何理解深度学习中的deconvolution networks?)总结来说:包括pooling操作增加感受野和Upsampling扩大至原图尺寸。但是此过程中会由于Pooling操作产生信息的损失,不利于分割或者目标检测。Dilated convolution就是为了在不是用pooling操作损失信息也能增加感受野。
Dilated 示意图如下:

概念介绍:空洞卷积的rate,代表传统卷积核的相邻之间插入rate-1个空洞数。当rate=1时,相当于传统的卷积核。
从两个角度考虑空洞卷积:
(1)从kernel(卷积核)角度:相当于在标准概念的kernel(卷积核)中,相邻点之间添加rate-1个0,然后使用扩张后的kernel(卷积核)与原图进行卷积。如下图rate=2,相当于标准的3*3卷积核变为5*5卷积核,每一行中间添加2-1个0
(2)从原图角度:使用标准概念的kernel(卷积核)在原图中每隔rate-1进行像素点卷积采样。如下图rate=2,在原图中每隔rate-1进行卷积。

F*F的Feature map经过kernel size(k),padding(p), stride(s), rate(r) Dilated convolution卷积输出的大小:
使用标准卷积的计算为:

使用Dilated卷积的计算公式为:

例子:7*7的feature map,kernel size = 3, padding = 0,stride = 1,rate =2
标准卷积后大小F为(7-3+0)/1+1 = 5,Dilated卷积后大小F为[7-(3+2*1)+0]/1+1=3
2、Dilated convolution在Pytorch实现
在Pytorch中可以在torch.nn.Conv2D(,,,,,,,dilated=rate)实现。
上述例子使用Pytorch实现过程如下:

Reference:
知乎:如何理解空洞卷积(dilated convolution)?
https://blog.csdn.net/silence2015/article/details/79748729