空洞卷积(扩张卷积,带孔卷积,atrous convolution)的一些总结与理解

空洞卷积(扩张卷积,带孔卷积,atrous convolution)是一种区别于普通卷积的卷积方式,从字面理解,就是卷积层中有洞。

1.一维理解

以一维为例:

图中(a)Input feature表示输入特征,Output feature表示输出特征,这是一个正常的kernel = 3; stride = 1; pad = 1的卷积操作。

图中(b)下面为Input feature,上面为Output feature,与图(a)不同的是pad = 2,同时引入了一个rate = 2,这个rate是一个超参数,表示卷积核中参数之间的间隔(中间插入10)。这个就是空洞卷积的一维解释,如果还不清楚看下面这张图。

这张图的本质上上一张一样,不过更加好看一些,同时(a)(c)对比可以看出改变stride参数和增加rate(hole size)参数的区别:stride是卷积核参数一起移动,rate则是在卷积核参数中间插入间隔。

 

2.二维理解

二维理解我觉得下面两个动图就能说明问题,其中蓝色为输入,绿色为输出。

正常的卷积操作,kernel = 2; stride = 1; pad = 0;

空洞卷积操作,kernel = 3; stride = 1; pad = 0; rate = 1;

链接:https://github.com/vdumoulin/conv_arithmetic

里面有很多卷积的动图,对理解卷积操作有很大的帮助。

空洞卷积有两种实现方式,第一,卷积核填充0,第二,输入等间隔采样。

 

3.空洞卷积的优势与应用

需要注意的是我们认为图片中相邻的像素点信息冗余,基于此才有了下面两点优势。

1)扩大感受野:在深度神经网络中为了增加感受野且降低计算量,总要进行降采样(poolingstride=2conv),这样虽然可以增加感受野,但空间分辨率降低了。为了能不丢失分辨率,并仍能扩大感受野,可以使用空洞卷积。这在检测,分割任务中十分有用。一方面感受野大了可以检测分割大目标,另一方面分辨率高了可以精确定位目标。

以上图为例,一个3*3的卷积核感受野是5,参数为3*3+1(rate),而同样感受野的正常卷积操作有5*5=25个参数,这就造成了计算量的差距。

2)捕获多尺度上下文信息:空洞卷积有一个参数可以设置dilation rate,具体含义就是在卷积核中填充dilation rate-10,因此,当设置不同dilation rate时,感受野就会不一样,也即获取了多尺度信息。多尺度信息在视觉任务中相当重要啊。

空洞卷积在DeepLab系列中被提出,也广泛应用于语义分割与目标检测等任务中。语义分割由于需要获得较大的分辨率图,因此经常在网络的最后两个stage,取消降采样操作,之后采用空洞卷积弥补丢失的感受野。

 

4.空洞卷积的问题

因为空洞卷积得到的某一层的结果中,邻近的像素是从相互独立的子集中卷积得到的,相互之间缺少依赖。

局部信息丢失:由于空洞卷积的计算方式类似于棋盘格式,某一层得到的卷积结果,来自上一层的独立的集合,没有相互依赖,因此该层的卷积结果之间没有相关性,即局部信息丢失。

远距离获取的信息没有相关性:由于空洞卷积稀疏的采样输入信号,使得远距离卷积得到的信息之间没有相关性,影响分类结果。

 

5.空洞卷积问题的解决

这个问题有很多的解决办法,可以参考下面链接,如果有时间后面会进行详细的整理。

https://zhuanlan.zhihu.com/p/50369448

 

 

 

参考链接:

https://blog.csdn.net/qq_30159015/article/details/89148608

https://www.zhihu.com/question/49630217

https://zhuanlan.zhihu.com/p/50369448

 

猜你喜欢

转载自blog.csdn.net/lipengfei0427/article/details/108968914