空洞卷积
Dilated/Atrous Convolution(中文叫做空洞卷积或者膨胀卷积) 或者是 Convolution with holes 从字面上就很好理解,是在标准的 convolution map 里注入空洞,以此来增加 reception field。相比原来的正常convolution,dilated convolution 多了一个 hyper-parameter 称之为 dilation rate 指的是kernel的间隔数量(e.g. 正常的 convolution 是 dilatation rate 1)。 Dilated Convolution with a 3 x 3 kernel and dilation rate 2
Standard Convolution with a 3 x 3 kernel (and padding) Deep CNN 对于其他任务还有一些致命性的缺陷。较为著名的是 up-sampling 和 pooling layer 的设计。 主要问题有:
Up-sampling / pooling layer (e.g. bilinear interpolation) is deterministic. (参数不可学习) 内部数据结构丢失;空间层级化信息丢失。 小物体信息无法重建 (假设有四个pooling layer 则 任何小于 2^4 = 16 pixel 的物体信息将理论上无法重建。) 在这样问题的存在下,语义分割问题一直处在瓶颈期无法再明显提高精度, 而 dilated convolution 的设计就良好的避免了这些问题。
空洞卷积的两大优势:
扩大感受野: 在deep net中为了增加感受野且降低计算量,总要进行降采样(pooling或s2/conv),这样虽然可以增加感受野,但空间分辨率降低了。为了能不丢失分辨率,且仍然扩大感受野,可以使用空洞卷积。这在检测,分割任务中十分有用。一方面感受野大了可以检测分割大目标,另一方面分辨率高了可以精确定位目标。 捕获多尺度上下文信息:空洞卷积有一个参数可以设置dilation rate,具体含义就是在卷积核中填充dilation rate-1个0,因此,当设置不同dilation rate时,感受野就会不一样,也即获取了多尺度信息。多尺度信息在视觉任务中相当重要啊。
我们可以显而易见的看到,使用空洞卷积代替下采样/上采样可以很好的保留图像的空间特征,也不会损失图像信息。当网络层需要更大的感受野,但是由于计算资源有限无法提高卷积核数量或大小时,可以考虑使用空洞卷积。
空洞卷积存在的问题:
1.网格效应
当多次叠加扩张率为2的3*3 kernel时,会产生如下问题: 2.远距离信息可能不相关
需要注意的是,如果光采用大的扩张率的卷积可能只对一些大物体分割有效果。设计好空洞卷积层的关键在于如何同时处理不同大小物体的关系。
一个称为HDC(混合空洞卷积)的结构被设计出来解决卷积核不连续的问题,它具有如下几个特性:
1.叠加卷积的扩张率不能有大于1的公约数
2.将扩张率设计成锯齿状结构,如[1,2,5,1,2,5]
图(a)是连续做rate = 2的空洞卷积的结果,图(b)是分别做rate为1/2/3空洞卷积的结果。
后者的优势在于,从一开始就保留了完整连续的3*3区域,之后的几个rate设计又保证了感受野的连贯性,即使有重叠也密不透风。
|