Mask R-CNN
author
Kaiming He Georgia Gkioxari Piotr Doll´ar Ross Girshick
Facebook 人工智能研究院 (FAIR)
摘要
我们提出概念上简单、灵活和通用的对象实例分割框架。我们的方法能够有效检测图像中的对象,同时生成每个实例的高质量分割掩膜。通过添加与现有的边界框识别分支平行的预测对象掩膜分支,这种被称作Mask R-CNN的方法拓展了Faster R-CNN的方法。Mask R-CNN易于训练,且仅稍微增加了Faster R-CNN的分支,运行帧率为5 fps。此外,Mask R-CNN还易于推广到其他任务中,例如,它能够使我们在同一个框架中预测人类的姿势。我们展示了COCO系列挑战的所有三个方向,包括实例分割、边界框对象检测以及人体关键点检测的最佳匹配结果。说实话,Mask R-CNN达成每项任务的效果确实胜过所有现有的单模型参赛作品,包括COCO 2016挑战获胜者的作品。我们希望,该简单有效的方法能够作为可靠的baseline,促进未来实例级识别研究的发展。相关代码即将公开。
1. Introduction 导论
视觉领域在短时间内快速发展,目标检测和语义分割都有了它们强大的baseline系统,如Faster R-CNN和FCN。它们的概念非常符合直觉,同时具备灵活性和鲁棒性,训练和推理时长较短。我们的目标是在实例分割领域提出一个可与之比肩的框架。
实例分割极具挑战性,因为它要求检测出图中所有物体的同时,需要精确地分割每个个体,从而融合了CV中两个经典任务,目标检测和语义分割的元素。目标检测的目的在于对单个对象进行分类并利用边界框定位每个对象,而语义分割的目的在于在不区分对象实例的条件下将每个像素归类到固定的类别集。有鉴于此,人们可能会认为要达到较好的效果需要复杂的方法。然而,本文表明,相当简单、灵活且快速的系统达到的效果可以胜过之前最先进的实例分割成果。
我们的方法称为Mask R-CNN,在Faster R-CNN的基础上为每个Region of Interest RoI增加了一个预测分割mask的分支,与原有的分类和回归分支并行(图1)。mask分支是应用于每个RoI的一个小FCN,为每个像素预测分割mask。有了Faster R-CNN,Mask R-CNN很容易实现并训练,而且Mask分支只有很小的计算消耗。
大体上,Mask R-CNN是Faster R-CNN(后文以FRCN代替)直觉式的扩展,但构造好的mask分支对结果很关键。而且FRCN并没有为输入输出设计像素级的对齐。这个问题在RoIPool最明显,它为了提取特征进行了粗糙的空间量化(注:把各种形状的RoI box投影到feature上,并调整到固定尺寸)。为了解决对不齐的问题,我们提出了一个简单的、无量化的层,称为RoIAlign,能够完好地保存提取的空间位置。尽管RoIAlign看起来似乎是很小的改变,但它却产生了很大的影响:它把mask准确率从10%提升到了50%。而且我们发现mask和分类预测的解耦非常有必要:我们为每个类独立的预测一个二元mask,类间没有竞争,依赖网络的RoI分类分支来预测类别。。与此相反,FCN通常会进行每个像素的多类分类,使分割和分类混合在一起,并且,根据我们的实验,FCN在实例分割方面的效果很差。
Mask R-CNN无需任何花哨的东西,就在COCO上超越了SOTA的实例分割模型。作为副产品,在目标检测上也获得了优异的结果。
我们的模型可在GPU上以200ms每帧的速度运行,并且在8个GPU的单个机器上进行关于COCO上的训练仅需耗时一到两天。我们认为,快速的训练、较高的测试速度以及框架的灵活性和准确度将有利于促进未来实例分割的研究。
我们还把模型泛化到人体姿态估计任务。把每个关键点看做一个独热二元mask。Mask R-CNN毫不费力地超越了2016年COCO关键点竞赛的获胜者,同时以5 fps的速度运行。因此,从更广泛的意义上来讲,Mask R-CNN经过一点改变后就能用于检测实例级的姿态。
我们将发布代码以方便将来的研究。
2. Related Work
R-CNN :基于区域的CNN(R-CNN)使用的bounding-box object detection通过RoI管理大量候选对象区域[38, 20]并独立计算[25, 24]。R-CNN经过拓展后[18, 12]可使用RoIPool在特征图上处理RoI,可达到较快的速度和更高的准确度。通过区域方案网络(RPN)学习注意力机制,Faster R-CNN[34]促进了这种流的发展。Faster R-CNN的灵活性和鲁棒性足以促进多种后续进展(比如[35, 27, 21])
**Instance Segmentation实例分割: **受R-CNN的启发,很多实例分割的方法都基于segment proposals
。早期方法[13,15,16,9]依靠自底向上的分割[42,2]。DeepMask[33]及其后续[34,8]训练以提出分割候选,然后使用Fast R-CNN进行分类。这些分割先行的方法慢而不准确。类似的,[10]提出了一个复杂的多阶段级联,从限位框proposal预测分割proposal,再进行分类。我们的方法是分割与分类并行预测,更简单也更灵活。
近期[26]结合了[8]的分割proposal系统和[11]的目标检测系统,得到一个“fully convolutional instance segmentation”(FCIS)。其主要思路是全卷积地预测位置敏感的channels输出集。这些channel同时处理物体类别、框和mask,让系统很快。但它对于有重叠的实例仍然处理不好。
另一类解决方案[23,4,3,29]受语义分割的成功所驱动。从每个像素分类结果开始,这些方法尝试把一类的像素分割为不同的实例。与这些先分割的方法不同,Mask R-CNN是先实例的策略。
3. Mask R-CNN
Mask R-CNN在概念上很简单:Faster R-CNN对每个候选对象都有两个输出,一个是类标签,另一个是限位框偏移。为此,我们添加了第三个分支,输出物体mask。但额外的mask输出与类和box不同,需要一个物体更精细的空间位置。接下来将介绍关键的组件,包括逐像素对齐,这也是Faster R-CNN所缺少的。
**Faster R-CNN: **Faster R-CNN包含两个阶段,第一阶段称为RPN,提出候选限位框。第二阶段的本质就是Fast R-CNN,从每个候选框使用RoIPooling提取特征,并进行分类和回归。两个阶段共用特征以提升速度。我们推荐[21],最新的一篇把Fast R-CNN与其余框架进行综合比较的文献。
Mask R-CNN: Mask R-CNN也是两步结构,第一步也与Faster R-CNN一样。在第二阶段增加了一个与分类和回归并行的分支,为每个RoI输出二元mask。与现有的分类依赖mask的方法相反。
训练中我们为每个RoI定义了一个多任务loss,L=L_{cls} + L_{box}+L_{mask},前两个loss与FRCN一致。mask分支为每个RoI输出一个Km^2的结果,以m \times m的分辨率编码了K个二元mask,每个对应一个类别。我们使用了一个sigmoid计算,并将L_{mask}定义为平均binary CE loss。对于与gt类k关联的RoI,L_{mask}仅在第k个mask定义。
这样的定义运行网络为每个类生产mask,而没有类间的竞争。我们依赖专业的分类分支来预测类标签,对输出的mask加以选择。这与常见的使用FCN进行语义分割不同,它们通常会为每个像素进行softmax及多项式CE loss,mask类间会进行竞争。我们会通过实验证明我们的方式是好的实例分割的关键。
**Mask Representation: **使用了FCN而不是fc输出mask。这也需要我们的RoI特征,它们本身就是小的特征图,得到很好的对齐。
**ROIAlign: **RoIPooling是从每个RoI提取一个小的特征图(如$7\times7)的标准操作。它首先把一个浮点数的RoI量化(quantize)为特征图的离散间隔(granularity),量化后的RoI再细分到空间bins中,这些bin本身也是量化,最终再聚合每个bin覆盖的特征值(通常为max pooling)。量化在一个连续坐标上计算,如从x计算[x/16]来得到,其中16是特征图stride,而[]$是取整操作。类似的,在分割到bin时,又进行了量化操作。这些操作为RoI与提取得到的特征间引入了不对齐。这也许不会影响对小的变化健壮的分类,但对预测每个像素精确的mask有很大不利。
为了解决这一问题,我们提出了ROIAlign层,移除了ROIPool里的粗糙量化。改变很简单,我们避免了任何对RoI边界或bin的量化操作(如使用x/16替代[x/16])。我们使用bilinear interpolation[22]来在每个bin里4个有规律的采样位置计算以提取输入的特征,并聚合结果(max或average),细节见图3。
3.1IMPLEMENTATION DETAILS
我们根据Fast/Faster R-CNN对超参数做如下设定[ 9,28,21 ]。虽然这些都是在物体检测的原始论文就提到[ 9,28,21 ],但是它们在实例分割中也起到了强大的作用。
Figure 4: More results of Mask R-CNN on COCO test images, using ResNet-101-FPN and running at 5