这次连续更新两篇,这篇是deeplab的作者又一新作。
本文主要提出使用带孔卷积(其实就是dilated卷积,下图)提取密集特征来进行语义分割。为了解决分割对象的多尺度问题,本文设计采用多比例的带孔卷积级联或并行来捕获多尺度背景。此外,本文将修改之前提出的带孔空间金字塔池化模块,该模块用于探索多尺度卷积特征,将全局背景基于图像层次进行编码获得特征(一般语义分割是像素层次的特征,图像层次可能是带有空间信息),进一步提升性能。
本文还介绍了四类提取多尺度背景信息的框架,如下图所示。
这里只重点介绍空间金字塔池化和带有带孔卷积的深度框架,其他结构大家有兴趣可以去看原文。
金字塔池化模型:该模型采用空间金字塔池化来捕捉在不同范围的上下文。该模型被广泛运用到各种语义分割模型中,比如:ParseNet利用图像层次的特征作为全局上下文信息。DeepLapv2提出了基于带孔卷积的空间金字塔池化(ASPP),其中具有不同比例(rates)的带孔卷积层通过并行捕获多尺度信息。PSPNet(香港中文大学贾佳亚团队,最近还提出了一个ICNet的语义分割框架)提出在几个不同的尺度上进行空间池化,在语义分割上表现出色。还有其他基于LSTM方法来捕获全局上下文信息。
在这项工作中,本文主要探讨将带孔卷积[1]作为捕获上下文信息的模块以及建立空间金字塔池化结构的工具。具体来说,复制ResNet中的最后几个block,将它们级联,同时使用包含多个带孔卷积并行的ASPP模块[1](如图d)。本文的级联模块直接应用于feature map而不是belief map(应该是softmax的最终结果)。对于给定的模块,本文在实验中发现加入batch normalization去训练的效果更好。为了更好地捕获全局上下文信息,本文提出使用图像层次的特征来强化ASPP。
本文方法:
在这里,本文将介绍带孔卷积层如何去提取语义分割中的密集特征(紧凑的特征,非稀疏)。然后集中讨论带孔卷积模块通过级联或者并行的方式运用到框架中。
利用带孔卷积去提取密集特征:
全卷积的深度卷积网络(DCNN)对于语义分割的效果表现的很好。然而,网络中的连续层重复使用max-pooling和striding(大于步长为1的卷积层)的组合会显著减少featuremap的空间分辨率,即在每个维度上缩小到原来的32倍。反卷积层已经被用来恢复空间分辨率。相反地,本文建议使用带孔卷积,最初是为了有效计算未变形的小波变换而加入到DCNN中。
假设一个二维信号,每个位置对应的输出为和卷积核为,带孔卷积在输入feature map上的计算如下:
其中孔的比例为对应我们采样输入信号的步长,这相当于将输入与通过在每个空间维度上两个连续的卷积核值之间插入个零点而产生的上采样滤波器进行卷积。标准的卷积是的情况,而带孔卷积能够通过改变比例值自适应地修改滤波器的感受域,见下图。
带孔卷积还可以控制计算全卷积网络中的特征密集度。这里,我们通过输出步长来表示输入图像空间分辨率与最终输出分辨率之间的比率。对于用于图像分类任务的DCNN,最终特征响应(在全连接层或全局池化之前)比输入图像的尺寸小32倍,因此输出步长等于32。如果要在DCNN中将计算特征响应的空间密度加倍(即输出步长等于16),将最后一个降低分辨率的pooling层或卷积层的步长设为1以避免信号抽取(我猜测是信号衰减的意思)。然后,所有后续的卷积层都被比率为的带孔卷积层代替。这使得网络能够提取更密集的特征而不需要学习任何额外的参数。具体内容可以看参考文献[1]。
基于带孔卷积建立深度框架:
首先探索带孔卷积级联模块的设计。具体来说,我们复制了ResNet最后一个block(如下图的 block4),并将复制的block进行级联。其中每个block有三个卷积,除了最后一个block其余block的最后一个卷积的步长都为2,类似于原来的ResNet。这种模型的动机是,引入的步长可以很容易地捕获较深blocks中的远程信息。例如,整个图像特征可以融合在最后一个小分辨率的特征图中,如下图(a)。然而,我们发现连续的跨越对语义分割是有害的,因为细节信息被破坏。因此,我们使用带孔卷积,其中孔的比例由期望的输出步长值来确定,如下图(b),其中输出步长等于16。
在这个给定的模型中,我们采用级联ResNet,级联block一直到block7(即额外的block5,block6,block7作为block4的复制),如果没有使用带孔卷积,其输出步长等于256。
-多重网格(Multigrid)
在采用不同大小的网格层次化的多网格方法的启发下,我们提出在block4到block7中采用不同的孔的比率。特别地,我们定义了多重网格在block4到block7内的三个卷积层的单位比率。卷积层的最终孔的比率等于单位比率和相应比率的乘积。例如,当输出步长等于16和多重网格,在block4中的三个卷积分别具有比率。
基于带孔卷积的空间金字塔池化:
本文回顾了[1]中提出的Atrous Spatial Pyramid Pooling(ASPP),其中在特征图上面应用了四个并行的具有不同孔的比率的带孔卷积。ASPP的灵感来自于空间金字塔池化的成功,其展现了有效地对不同尺度的特征进行重新采样,准确有效地对任意尺度的区域进行分类。 与[1]不同的是,作者在ASPP中加入batch normalization。
具有不同孔的比率的ASPP可以有效地捕获多尺度信息。然而,作者发现随着采样率变大,有效滤波器权重的数量(即权重施加到有效特征区域而不是填充零点的区域)变小。如当把一个3×3的具有不同孔的比率的卷积核应用到65×65特征图上时(效果如下图所示)。在比率值接近于特征图大小的极端情况下,3×3滤波器,不再是捕获整个图像上下文,而是退化为简单的1×1滤波器,因为只有中心滤波器的权重才有效。
为了克服上面这个问题并将全局上下文信息整合到模型中,作者采用了图像级特征。具体来说,作者在模型的最后一个特征图上采用了全局平均池化,将生成的图像级特征输入到256个1×1过滤器(加入batch normalization)中,然后将特征双向上采样到所需的空间维度。最后,作者改进ASPP,当输出步长等于16,ASPP包括一个1×1卷积和三个3×3卷积,其中3×3卷积的孔的比率(所有的滤波器个数为256且加入了batch normalization),和图像级特征,如下图所示。注意,当输出步长等于8时,比率加倍。在产生最终logits(不知道咋翻)的1×1卷积之前,所有分支的结果特征被连接并通过另一个1×1卷积(也有256个滤波器和加入了batch normalization)。
参考文献:[1] L.-C. Chen, G. Papandreou, I. Kokkinos, K. Murphy, and A. L. Yuille. Deeplab: Semantic image segmentation with deep convolutional nets, atrous convolution, and fully connected crfs. arXiv:1606.00915, 2016.
论文地址:https://arxiv.org/pdf/1706.05587.pdf