Dilated Convolution的产生是为了解决全卷积网络(FCN)在图像分割领域的问题,图像分割需要输入和输出在像素的shape保持一致,但由于池化层的存在导致FCN需要通过上采样扩增size,但是上采样并不能将丢失的信息无损的找回所以存在不足。
Dilated Convolution想法很粗暴,既然池化的下采样操作会带来信息损失,那么就把池化层去掉。但是池化层去掉随之带来的是网络各层的感受野变小,这样会降低整个模型的预测精度。Dilated convolution的主要贡献就是,如何在去掉池化下采样操作的同时,而不降低网络的感受野。
以3×3的卷积核为例,传统卷积核在做卷积操作时,是将卷积核与输入张量中“连续”的3×3的patch逐点相乘再求和。而dilated convolution中的卷积核则是将输入张量的3×3patch隔一定的像素进行卷积运算。去掉一层池化层后,需要在去掉的池化层后将传统卷积层换做一个“dilation=2”的dilated convolution层,此时卷积核将输入张量每隔一个“像素”的位置作为输入patch进行卷积计算,可以发现这时对应到原输入的感知野已经扩大(dilate)为7×7;同理,如果再去掉一个池化层,就要将其之后的卷积层换成“dilation=4”的dilated convolution层。这样一来,即使去掉池化层也能保证网络的感受野,从而确保图像语义分割的精度。
文章指出dilated convolution既可以以指数的速度扩大感受野且不会降低特征的分辨率和大小。dilated convolution感受野指数级计算的公式如下:F^(i+1)=(2^(i+2) − 1)×(2^(i+2) − 1)
上下文模型:
通过聚合多尺度上下文信息来提高密集预测框架的性能,该模块可以插入到front-end架构中。在上下文模型中,每个层都有C个通道。每个层中的表示是相同的,可用于直接获得一个密集的每类预测(C类),虽然特征映射没有归一化,模块内也没有定义损失。直观地说,该模块让特征通过多个dilated层可以增加特征映射的精度,从而揭示上下文(单张图的上下文)信息。
另外一种扩大感受野的方法:一个5*5的卷积层可以由两个相邻的3*3的卷积层来代替,以增强网络的表现力,同时保持感受野的大小,同样的,一个7*7的卷积层可以由三个3*3的卷积层来代替。
对于感受野的理解,感受野主要是卷积得到的特征中每个像素在原来特征中的范围,比如一个4*4大小的pool层得到的特征,新特征的像素占原始特征的16个像素的范围,而传统的卷积都是相邻像素进行卷积,3*3大小的感受野就是9个像素,虽然卷积核变大也能扩大感受野,但是会带来更多的参数,计算变慢,所以dilated卷积通过不增加模型参数的同时建立每个像素和更远像素之间关系,也就是扩大了感受野,纯属个人理解,不知道有没有大牛有很好的解释,希望能够互相交流。