空洞卷积(atrous convolution)又叫扩张卷积(dilated convolution),其实就是向卷积层引入了一个称为“扩张率(dilation rate)”的新参数,这个参数定义了卷积核处理数据时各值的间距。普通卷积和空洞卷积图示如下(以3*3卷积为例)
(普通卷积)
(空洞卷积)
那么这样的结构是为了解决什么问题呢?
这又不得不提起传统网络VGG,在VGG的设计中,作者发现了卷积叠加过程中的一个巧妙规律,即7*7的卷积层正则等效于3个3*3卷积层的叠加,在减少参数的同时,这样的结构更容易学到一个可生成的、表现力良好的特征空间,这也是为什么我们现在看到的网络结构几乎都是3*3,5*5的卷积层的原因。
但与此同时,伴随产生了对于deep cnn中上采样和下采样的一系列问题,一方面是pooling导致的内部数据结构和空间层级化的信息丢失,另一方面,小物体(在一定条件下)经过下采样之后数据会丢失,导致信息无法重建。这个问题在语义分割中尤其显著,而空洞卷积的设计很好的避免了这些问题。
空洞卷积的两大优势:
1.特征图相同情况下,空洞卷积可以得到更大的感受野,从而获得更加密集的数据
2.特征图相同情况下,更大的感受野可以提高在目标检测和语义分割的任务中的小物体识别分割的的效果。
我们可以显而易见的看到,使用空洞卷积代替下采样/上采样可以很好的保留图像的空间特征,也不会损失图像信息。当网络层需要更大的感受野,但是由于计算资源有限无法提高卷积核数量或大小时,可以考虑使用空洞卷积。
空洞卷积存在的问题:
1.网格效应
当多次叠加扩张率为2的3*3 kernel时,会产生如下问题:
由此可见,并不是所有的pixel都用来计算了,这样的方式会损失信息的连续性,这对于像素级的任务来说是致命的。
2.远距离信息可能不相关
需要注意的是,如果光采用大的扩张率的卷积可能只对一些大物体分割有效果。设计好空洞卷积层的关键在于如何同时处理不同大小物体的关系。
一个称为HDC(混合空洞卷积)的结构被设计出来解决卷积核不连续的问题,它具有如下几个特性:
1.叠加卷积的扩张率不能有大于1的公约数
2.将扩张率设计成锯齿状结构,如[1,2,5,1,2,5]
图(a)是连续做rate = 2的空洞卷积的结果,图(b)是分别做rate为1/2/3空洞卷积的结果。
后者的优势在于,从一开始就保留了完整连续的3*3区域,之后的几个rate设计又保证了感受野的连贯性,即使有重叠也密不透风。