1、Dilated convolution(空洞卷积)
传统的CNN通常采用pooling或up-sampling来整合多尺度的上下文信息,这种方式会损失分辨率。FCN的做法是先像传统的CNN那样对图像做卷积再pooling,降低图像尺寸的同时增大感受野,但是由于图像分割预测是pixel-wise的输出,所以将pooling后较小的图像尺寸up-sampling到原始的图像尺寸进行预测,up-sampling一般采用反卷积(deconv)操作。但是在先缩小再放大尺寸的过程中,肯定有一些信息损失掉了。Dilated convolution就是用来解决这个问题,它没有pooling或up-sampling,不需要分析重新放缩的图像,能看到较大感受野信息(感受野指数级增长),不损失分辨率。
空洞卷积比正常卷积多了一个空洞率(dilation rate)参数,主要用来表示扩张的大小。空洞率为1的空洞卷积就是正常卷积,卷积核大小为3x3,padding为1,步长为2,对输入为5x5的特征图进行卷积,生成3x3的特征图,如图1所示。
卷积核大小为3x3,空洞率(dilated rate)为2,步长为1,对输入为7x7的特征图进行空洞卷积,生成3x3的特征图,如图2所示。
具体分析空洞卷积能够扩大感受野并且保持分辨率,用图3来说明。
其中,红色圆点为卷积核对应的输入“像素”,绿色为其在原输入中的感受野。图(a)对应3x3的1-dilated conv,和普通的卷积操作一样。图(b)对应3x3的空洞率为2的卷积,实际的卷积核还是3x3,但空洞率为2。对于一个7x7的图像块,只有9个红色的点即3x3的卷积核发生卷积操作,其余的点略过。也可以理解为卷积核的大小为7x7,但是只有图中的9个点的权重不为0,其余都为0。可以看到虽然卷积核的大小只有3x3,但是这个卷积的感受野已经增大到了7x7。如果考虑到这个2-dilated convolution的前一层有一个1-dilated convolution的话,那么每个红点就是1-dilated的卷积输出,感受野为3x3,所以1-dilated和2-dilated合起来就能达到7x7的卷积。图(c)图是4-dilated convolution操作,同理跟在1-dilated和2-dilated convolution的后面,能达到15x15的感受野。对比传统的卷积操作,3层3x3的卷积加起来,stride为1的话,只能达到(kernel-1)xlayer+1=7的感受野,也就是和层数layer成线性关系,而空洞卷积的感受野是指数级的增长。
Dilated convolution在不做pooling损失信息的情况下,加大了感受野,让每个卷积输出都包含较大范围的信息。
2.Deformable convolution(可变卷积)
可变卷积来源于微软亚洲研究院在2017年ICCV发表的论文《Deformable Convolutional Networks》。
当前的卷积神经网络(CNN)所用的模块中几何结构是固定不变的,对于物体在大小、姿态、角度上的几何变换,CNN网络是很难处理的(通俗点说一个物体由于拍摄角度、位置远近等因素,最终呈现出的效果可能不一样,对于人来说很好分辨,计算机就很难分辨是同一物体)。于是就有了Deformable convolution可变卷积(论文中还提到了deformable POI pooling,都是用额外的偏置来增强空间采样的位置,原理相似),从而实现动态调节感受野。图4中展示了卷积核为3×3的正常卷积和可变卷积的采样方式。
其中,(a)是正常卷积网络。(b)是变换后的卷积采样点分布,绿色是原采样点,蓝色是变换后的采样点。(c)是(b)的特例,采样尺寸放大的情况。(d)也是(b)的特例,采样尺寸放大+旋转的情况。
在2D卷积中,卷积核在输入feature map上采样,将采样值和对应的权重对应相乘在求和。R表示感受野大小(dilation=1):
原输入特征中点卷积后的值,即采样点的值×卷积核权重之和:
可变卷积操作并没有改变卷积的计算操作,而是在卷积操作的作用区域上,加一个可学习的参数,即对于每一个采样点,增加一个偏移量,where 。可变卷积公式如下:
可变卷积就是对每个采样点做偏置,对输入feature map的每个位置学习一个offset。在给每个采样点增加偏置量后,由于一般很小,得到的新坐标不一定落在整数坐标点上(需要对不连续的位置变量求导),这里使用了双线性插值将任何位置的输出,转换成对于feature map的插值操作。具体结构如图5所示。
其中,offset field是通过conv层学到的偏置。输入一张feature map,每个点都需要一个偏置offset(x上的偏置,y上的偏置),则offset field的长宽和输入的feature map是相同的,但channel是输入feature map的两倍(x,y两个方向的偏置)。这样就可以通过可变卷积公式,得到输出的feature map。
3.Partial Convolutional(部分卷积)
部分卷积来源于英伟达在ECCV2018发表的论文《Image Inpainting for Irregular Holes Using Partial Convolutions》,适用于image inpainting任务。论文值得好好看一下。
之前的image inpainting任务中,只在第一层使用mask,mask不会得到更新 。而文中将部分卷积运算和mask更新函数联合成为部分卷积层。部分卷积运算可以表示为:
其中,表示卷积层滤波器的权重;是相应的偏差;是当前卷积(滑动)窗口的特征值(像素值);是相应的二进制mask; 表示element-wise点乘运算;是缩放因子,即应用适当的缩放比例来调整有效(unmasked)输入的变化量;是输入图片经过卷积后的输出(仅取决于unmasked的输入)。
在partial convolutions后,每次都使用更新后的mask。mask更新原则为:
如果原来mask中有已知区域,即,那么卷积后的mask会变成1。随着网络层数的增加,mask输出为0的像素值越来越少,输出的结果中有效区域的面积越来越大,mask对整体loss的影响也会越来越小。