DeeperLab: Single-Shot Image Parser 详解

论文连接:git

代码连接:https://github.com/Ixuanzhang/models/tree/master/research/deeplab/evaluationgithub

文章来自MIT,Google和Berkeley联合出品,研究的内容是全景图像的快速高效分割和解析任务。算法

摘要bootstrap

        本文提出了一种bottoom-up,single-shot的全景图像分析方法。全景图像分析包含"stuff"形式(类别)的语义分割及“thing”形式(区别不一样个体)的实例分割。目前,全景图像分析的经典方法是由语义分割任务及实例分割任务的独立的模块组成,同时其须要进行屡次inference操做。与之相反的是,本文提出了用相对简单的全卷积的方式对图像进行场景分析。以single-shot的方式同时处理语义分割及实例分割两种任务,从而获得一个处理速度较快的流线型模型。针对定量分析,本文使用了基于实例的全景质量-PQ度量及基于区域建议覆盖分析-PC度量,其能够更好的捕捉“stuff”类别及更大目标实例的图像分析质量。基于Mapillary Vistas 数据集进行实验,本文的单一模型基于GPU实现了31.95%(val)及31.6%(test)的PQ及55.26%(val)的PC。运行速度为3fps或者接近实时速度22.6fps,但准确率会有所降低。api

1  简介网络

    (1)DeeperLab简介app

                                          

  • DeeperLab基于single-pass的全卷积网络来产生语义及实例分割的预测mask。最后经过一个快速的算法将预测结果进行融合获得解析的结果最后经过一个快速的算法将预测结果进行融合获得解析的结果。
  • DeeperLab的运行时间几乎与检测到对象数目无关,这使得 DeeperLab更适合复杂场景的图像解析。
  • 使用 PQ 和 PC 指标做为质量评估的标准。
  • 实验数据集:Mapillary Vistas dataset(包含分辨率高达4000*6000的图像)、Cityscapes、Pascal VOC 20十二、 COCO

(2)文章主要贡献框架

  • 提出一些用于高效图像解析的神经网络设计策略,显著下降高分辨率输入的内存占用状况。这些创新包括深度可分离卷积的扩展应用使用带两层预测头的共享解码输出增大内核大小而不是使用更深的网络,使用空间到深度和深度到空间的变换而不是上采样操做,采用困难样本挖掘策略,详细的消融研究显示了实践中这些策略的影响;
  • 基于以上设计策略,提出了一种一次性高效,自底向上的图像解析网络,DeeperLab。在Mapillary Vistas数据集上,所提出的基本模型Xception-71达到31.95%的验证PQ、31.6%的测试PQ以及55.26%的验证PC,GPU上每秒能够处理3帧图像;加宽版本的MobileNetV2基础模型可以在CPU上达到接近实时的性能(22.61fps),准确率稍有降低;
  • 提出一种称为Parsing Covering的指标替代用于评估基于区域远景的图像解析结果。

2   相关工做ide

       Image parsing:Imae parsing的做用是将图像分解为连续的视觉模式,像纹理及检测目标等,其涵盖了分割,检测,识别等任务。首次使用基于贝叶斯框架进行Image parsing,后来基于AND-OR图, Exemplars及条件随机场等方法进行全场景理解任务。早期这些任务的评估标准是独立的,好比,检测有检测的评估标准,分割有分割的评估标准。随着基于实例的全景质量(PQ)评估引入多个benchmarks中,全景分割愈来愈受到关注。函数

        语义分割:大多数state-of-art的分割模型在基于FCN的基础上进行一些创新性改进获得的。好比,上下文信息对像素级的标记十分重要,所以,有些工做使用图像金字塔对不一样尺寸的输入图像进行编码操做。PSPNet提出了基于不一样网格尺寸的图像金字塔池化结构,DeepLab提出了使用不一样rate的并行的空洞卷积结构(ASPP)从而能够有效的利用上下文信息。另外一个有效的方法是使用encoder-decoder结构。在encoder阶段获得图像的上下文信息,而在解码阶段对边界进行恢复。DeeperLab利用FCN,ASPP,encoder-decoder等结构来最大化image parsing的准确率。

        实例分割:当前实例分割的方法能够归类为top-down及bottom-up的方法。top-down的方法经过加强state-of-the-art检测器获得的框得到instance masks。其中,FCIS使用位置敏感性score maps。Mask R-CNN基于FPN的基础上进行搭建,在Faster R-CNN上增长了另外一个分割分支,取得较好的效果。另外一方面,bottom-up的方法采用两阶段的处理过程,由分割模型获得的像素级预测按照实例预测的方式进行聚合。PersonLab预测人体的关键点及进行人体实例分割,而DeNet及CornerNet经过预测边界框的角点来检测实例。

        评价标准:语义分割的结果能够经过基于区域或者轮廓的指标来进行评估。基于区域的评估标准定量评价标记正确的像素所占比例,包括:overall pixel accuracy,mean class accuracy,mean IOU。而基于轮廓的度量则关注分割边界的标记精度。好比,在分割边界较窄的三角地带评估像素级的准确率及IOU。对于类别不可知的分割可使用covering 标准来度量。实例分割能够看做是mask检测,是边界框检测的加强。所以,此类任务一般使用APr进行度量,像计算mask的IOU而不是边界框的IOU。在0.5到0.95不一样重叠率阈值下计算AP的平均值进而评估分割结果。基于区域覆盖指标来评估实例分割结果,该方法适用于没法计算预测值重叠率的情形。图像解析结果能够经过Panoptic Quality(PQ)指标进行评估,同时将具备相同“stuff”类别的图像区域做为单个实例。而PQ度量存在的一个问题是,不管目标物的尺寸为多大,都视为相同的,所以,PQ度量可能会过分强调小的物体,像“thing”类别的而不是“stuff”类。

3 文章所提出的方法

    受到DeepLab和PersonLab的启发,文章所提出的DeeperLab网络结构以下图所示。(采用encoder-decoder模式)

                                                                                               DeeperLab网络结构

从图中能够看出,网络结构包括如下三个模块:

3.1 编码模块

       backbone:Wider  MobileNet2 (用5*5卷积替换原MobileNet2中的3*3卷积)     +  ASPP

       本文基于高效的深度可分离卷积实验了两个网络结构:1)标准的Xception-71用于得到较高的准确率,2)更宽的MobileNetV2用于更快的推理。虽然标准的MobilenetV2在输入大小为224x224的ImageNet图像分类任务中表现较好。可是对于较高输入分辨率的图像解析任务,其有限的感觉野(491x491)没法捕捉大范围的上下文信息。正如Xception-71那样,叠加更多3x3的卷积是增大感觉野的一种方式,然而增长的额外的网络层会形成大量的内存占用。考虑到计算资源有限,将MobileNetV2中的全部3x3的卷积替换为5x5的卷积。这种方法在不增长内存占用的条件下有效的增长了感觉野的大小(981x981),计算量会稍有增长。本文称其为更宽的MobileNetV2。

        本文增长了网络中的ASPP结构(更增长感觉野),encoder输出的feature map stride为16,其空间分辨率为输入上每一个分辨率以16的倍数进行降采样获得的分辨率。   

3.2  解码模块

       解码模块目的:恢复物体边界的细节信息。参照DeepLabV3+的作法,文章将编码器输出与主干网络中步长为4的低层特征图相融合。其中,为了避免额外增长内存消耗,使用了以下图所示的空间到深度(space-to-depth)的变换操做。最后,获得4096个通道的特征图,再通过深度到空间的降维操做后变成256个通道(stride为4)的特征图。

                                     

                                                                                  深度到空间和空间到深度的变换示意图

       具体:ASPP的输出与低层feature map的通道数首先通过1x1的卷积进行降维处理来减小通道数。DeeplabV3+考虑到不一样分辨率的将降维后的ASPP输出进行基于双线性插值进行上采样(是DeeplabV3+中采用的,本文中并未采用该方法),然而上采样的操做会大大增长内存的消耗。本文对低层次的feature map采用了space-to-depth的操做,以下图,使占用的内存不会发生改变。与encoder类似,decoder使用大小为7x7的深度卷积来增长感觉野的范围。通道数为4096,而后,经过depth-to-space操做来实现上采样操做,获得一个通道数为256,stride为4的feature map,做为image parsing处理的输入。

3.3 图像解析预测头

       这里包括5个预测头,都是由两个卷积层(7×7和1×1各一个)组成。其中,一个预测头有256个滤波器(通道),用于语义分割;另外四个预测头有64个滤波器,用于类别无关的实例分割。

3.3.1 语义分割头   

       语义分割时采用最小化bootstrappe(引导性)交叉熵损失,而且借鉴难例挖掘(困难样本挖掘)的思路,仅选择损失值最大的K个像素进行反向传播。加权bootstrappe交叉熵损失函数的定义以下面公式所示。

                                              

                                                                                  bootstrappe交叉熵损失

      基于引导性交叉熵损失对分割进行训练,即将每一个像素按照其对应的交叉熵损失进行排序,只对其前K个位置的像素进行反向传播(hard example mining),本文设置K的大小为0.15xN,N为图像中全部像素的个数。此外,根据实例的大小,对像素的损失进行了加权重操做(wi=3(实例区域小于64*64,关注small instance)  or   wi=1(其余)),从而更加关注小样本和hard pixels。

3.3.2  实例分割头

                             

      实例分割使用基于关键点的目标实例表示法,选择目标边界框的四个角和质心做为5个关键点。参照PersonLab的作法,文章定义了四种不一样的预测头,在计算损失函数时的规则不一样,目的就是学习更好的实例分割结果,四种头分别是关健点图、远程偏移量图、短程偏移量图以及中程偏移量图。最后,将四个预测合并为一个与类别无关的实例分割图,给定预测的语义和实例分割结果,将语义和实例标签分配给图像中每个像素。

  • The keypoint heatmap(图a):用于预测像素是否位于以对应关键点为中心半径为R的disks中。若是在其中,则目标激活值为1,不然为0。不管实例多大,统一设置R为25(因此网络对large和small实例的关注度是相同的)。预测获得的kepoint heatmap通道数为P,每一个通道对应一个关键点,基于标准的sigmoid交叉熵损失对偏差进行惩罚。
  • The long-range offset map(图b):用于预测一个像素相对于全部关键点的偏移,编码每一个像素的长距离信息。获得的长偏移map通道数为2P。每两个通道用于预测每一个关键点水平及垂直方向上的偏移,使用L1损失,只激活属于目标实例的像素。
  • The short-range offset map(图c):与 long-range offset map类似,半径仍为25。获得的短偏移map通道数为2P,被用来提升关键点的位置。使用L1损失,只激活在半径范围内的像素。
  • The middle-range offset map(图d):用于预测有向关键点练习图(DKRG)中定义的关键点对之间的偏移。该map用于组合来自相同objects实例的关键点。本文采用star-graph,质心点与四角的点双向链接。预测获得的map通道数为2E,其中E为DKRG中有向边的数量(E=8)。使用L1损失,只激活在半径范围内的像素。

3.4 预测融合(Fusion)

3.4.1 实例预测

      与PersonLab相相似,根据实例相关的四个预测maps生成实例分割map。

  • Recursive offset refinement:本文观察到距离关键点越近则预测的准确率就越高,所以,像PersonLab同样递归的加强(细化)偏移maps.
  • Keypoint localization:对于每一个关键点,在short-range偏移map上使用霍夫投票,同时使用对应关键点heatmap的激活值做为投票权重,从而生成short-range score map。一样,在long-range偏移map上使用霍夫投票,权重都为1,生成long-range的score map。两个score maps按照(每一个像素)权重相加进行融合。经过在融合后的score maps中寻找局部最大值从而定位关键点。最后,使用 Expected-OKS对全部关键点从新打分。
  • Instance detection:为了实例检测,基于一个快速的贪婪算法对关键点进行聚合。首先,全部关键点被推入一个优先队列中,一次pop一个。若是被pop的关键点已经在检测的实例中存在,则丢弃继续执行。不然,根据middle-range offsets 来确认保留四个关键点的位置,从而造成一个新的检测实例。新检测实例的置信分数为各个关键点分数的平均值。检测完全部实例后使用NMS去除重叠较大的实例。
  • Assignment of pixels to instances:最后,对检测到的实例经过使用long-range offset map进行label操做。将每一个像素分配到检测到的实例中,该实例中的关键点与该像素预测到的关键点两者之间的L2距离最短。

3.4.2  语义、实例融合

      本文选择简单的融合方法。先从语义分割开始,分别考虑“stuff”类别(像天空)及“thing”类别(人)。对于预测的像素为“stuff”类的则标记一个独一无二的实例Label。对于其余像素(除被定义为stuff的像素外),实例标签由实例分割结果肯定,而语义标签,则由语义分割中投票数较多的状况决定。(即先由考虑stuff,由语义分割分支得,再考虑thing类,由实例分割分支得,再辅助语义分割的结果(投票))。

3.5  文章使用的评估标准

      本文全部实验结果都采用了Panoptic Quality(PQ)全景质量和Parsing Covering(PC)解析覆盖两个度量标准。其中,PQ将相同“东西“类别的全部区域看成一个实例,不会考虑实例的尺寸大小;PC是考虑到实例尺寸大小的覆盖指标。 

      PQ的上述特色,使得10x10大小的实例与1000x1000大小的实例的效果是等价的。所以,PQ对于小区域的误报会很敏感,经过删除一些小区域等启发式方法能够提升性能。所以,PQ适用关心实例解析质量、但不关心实例大小的应用。

      一些应用中,会更关注大的物体(例如:肖像分割(大的人像应该被更好的分割)、自动驾驶(临近的物体比远处的物体更重要)),所以,本文考虑了实例的大小,扩展了已经存在的 Covering metric用来评估图像解析质量。Parsing Covering (PC),定义以下。

    本文发现因为Covering没法计算背景类别,同时受其余类别假样本的影响,所以没法惩罚假样本。而在图像解析中须要考虑每一个像素及类别,所以,上述情形是不存在的。

     PQ与本文提出的PC的不一样点在于,PC不进行匹配,所以也就不涉及匹配阈值,尝试将“stuff”与“thing”类同等对待,则若是分割的部分为正确的,则分割的“stuff”类仍能够部分接受PC score。好比,有三个大小相同的树,其中一棵被完美分割,则不管将树看做是“stuff”类仍是“thing”类,使用PC进行评估,两者的分数是相同的。

4 实验结果

      Mapillary数据集: 66个语义类别(各类和交通相关的的图像)   分辨率从1024*768 最大到4000*6000     该数据集上进行ablation studies。还在其余数据集上测试:Cityscapes  Pas-cal VOC 2012, and COCO

       backbone:ImageNet-1K(预训练的)   初始学习速率=0.01   fine-tune 全部层的batch normalization参数   训练过程当中使用随机尺度的数据加强     (当backbone使用MoblileNetV2时,训练的batch sizes是28   当backbone使用Xception-71时,训练的batch sizes是16)      咱们将图像的最大长度调整为1441个像素,以处理大的输入变化,在训练期间随机裁剪721*721块图像。  没有使用任何启发式的后处理,如小区域删除或对低置信度预测分配空标签。

4.1 在Mapillary Vistas数据集上的表现

      DeeperLab目的:实现精度、速度的平衡

      验证集上的表现:

      迭代次数比后边的消融实验长(500k,消融实验迭代次数:200k次)。backbone为(1)Xception-71  PQ、PC以下 ,精度高  (2)Wider MobileNetV2:速度快     (3)Light Wider MobileNetV2:解码阶段用3*3的卷积核  更好的filter(128,而不是256)   速度更快,但精度不高(精度drop很少,但速度提高了不少)

                               

                                                                          验证集上的实验结果

      测试集上的表现

                                  

                                                                                测试集上的实验结果

      4.2 消融实验

      正文中报告的是本文提出的Xception-7一、Wider MobileNetV2以及Light Wider MobileNetV2三种网络在Mapillary Vistas数据集上进行的消融实验,并无与其余算法进行对比的实验结果。全部模型参数都是端到端训练没有采用分段预训练每一个组件的过程,除了主干网络使用ImageNet-1K预训练以外。

      (1) Wider MobileNetV2 backbone设计:由原始的3*3  实验不一样卷积核大小,例如:5*5 或 7*7   ---》目的:扩大感觉野大小。由下图可看出,改变卷积核大小事提升精度颇有效的一种方式采用ASPP模型,更进一步的提升了精度。

 

                                                                 

                                                                                                 卷积核大小消融实验

      (2)Decoder and prediction head design:backbone为:带有ASPP木块的Wider MobileNetV2。第一行baseline直接对feature maps仅使用1*1卷积获得的结果。a、使用BU(双线性插值上采样)减小ASPP、low-feature 的feature输出:PQ提升0.93%,PC提升0.85%     b、使用BU(双线性插值上采样)减小ASPP、low-feature 的feature输出,并在全部的预测头前加一个3*3的卷积层,较a PQ提升0.81%,PC提升1.12%     c、使用BU(双线性插值上采样)减小ASPP、low-feature 的feature输出,decoder部分将卷积核由3*3扩大为7*7,在heads中增长了一个额外的卷积, PQ达到22.31%%,PC达到44.62%          d、用S2D/D2S策略替换bilinear upsampling策略,PQ达到23.48%%,PC达到46.33%

                                                                    

                                                                                 解码器与预测头的设计消融实验

      (3)Hard pixel mining:a、增长HPM,根据损失对像素进行排序,只对前15%的像素进行反向传播,PQ增长0.75。   b、增长SI(设小于64*64的实例的权重为原权重的3倍),PQ提升0.2%   c、前二者都用,PQ提升0.92%,PC提升1%

                                                                     

                                                                                       难例挖掘消融实验

      (4)Directed keypoint relation graph(有向关键点关系图):两种不一样的有向关键点关系图:star graph、rectangular graph(关键点以矩形链接,没有质心关键点)。结论:质心关键点对实例分割是重要的

                                                                       

                                                                                         关键点关联图建模方法

         (5)Deeper network backbone:以Xception-71做为网路的backbone的消融研究

                                                                                     主干网络深度消融实验

        上面,文章分别从主干网络卷积核大小、解码器和预测头的设计、难例挖掘、关键点关联图建模方法、主干网络深度等五个方面进行了消融实验,数据仍是很是详细且有说服力的。

5 总结

       提出的模型设计在精度和速度之间取得了很好的平衡。这经过采用single-shot、自底向上和单推理范式,并集成各类设计创新来实现。这些创新包括扩展应用深度可分离卷积使用具备简单两层预测头的共享解码器输出扩大内核大小而不是使网络更深使用空间到深度和深度到空间而不是向上采样,以及执行困难数据挖掘。此外,咱们还提出了PC度量。