目标分割Mask R-CNN
原文:Mask R-CNN
翻译:Mask R-CNN翻译
术语:分割掩模(segmentation mask)、解耦掩模(decouple mask)
ABSTRACT
- 提出了一个概念简单、灵活、通用的目标 实例分割 框架;
- 该方法有效地检测图像中的目标,同时为每一个实例生成高质量的 分割掩模;
- Mask R-CNN以Faster RCNN原型,对每个RoI(感兴趣区域)增加一个分割掩膜预测的分支。这个分支用的是简单的FCN,可以实现像素到像素产生分割掩膜。。
- Mask R-CNN很容易推广到其他任务,例如:实例分割、边框目标检测以及人体关键点检测。
※论文核心思想:
- Mask RCNN以Faster RCNN原型,添加第三条分支来输出目标掩模;
- 用RoIAlign解决RoIPooling层产生的量化误差。
1. INTRODUCTION
目标检测和语义分割的效果取得很大提升。例如用于目标检测的Fast / Faster R- CNN 和用于语义分割的 FCN 框架。这些方法在概念上很直观,提供灵活性和鲁棒性,并且训练和推理都很快速。而我们的目标则是为 实例分割 开发一个相对可用的框架。
实例分割 是有挑战性的,因为它除了要求正确检测一张图片中所有的目标,还需要同时精准的分割每个实例。它因此既结合了目标检测的功能(对每个目标进行分类),并且使用边框对每个目标进行定位,以及语义分割,通常来讲,目标检测使用边框而不是掩模来标定每一个目标检测,语义分割是指在没有区分实例的情况下对每个像素进行分类。但我们注意到, 实例分割 既是语义分割,又是一种目标检测的形式。其目标是将每个像素分类为一类固定的类别,而不区分对象。鉴于这种情况,人们可能认为需要一种复杂的方法才能取得较好的结果。然而,我们发现一种简单、灵活以及快速的系统能够超越之前最先进的实例分割的方法。
我们把这种方法称为 Mask R-CNN,它在Faster R-CNN基础上对每个感兴趣区域(RoI)上添加一个分支来预测分割掩模(segmentation mask),这个分支与现有的分类以及边框回归并行。如下图所示:
但是Faster R-CNN并不是为网络输入和输出之间的像素对齐而设计的。这一点在RoIPool中最为明显,它实际上是用于处理实例的核心操作,对特征提取执行粗的空间量化。为修正错位,我们提出了一个层叫做RoIAlign,可保留精确的空间位置。RoIAlign起了很大的作用:它能将掩模准确率提高到10%-50%。
(为了解决Faster R-CNN错位,提出RoIAlign层,能将掩模准确率提高)
再者,我们发现 解耦掩模 和 类预测 是非常必要的:在没有类间竞争时,我们独立地为每个类预测二进制掩模,并且依赖于网络的RoI分类分支来预测类别。相比之下,FCN通常采用逐像素多类分类,分割和分类结合起来,基于我们的实验,发现它实例分割的效果很差。
(FCN对于实例分割效果差,而我们用到解耦掩模以及类预测方法后,效果却大大提升)
最后,我们通过在COCO关键点数据集上的人体姿势估计任务来展示我们框架的通用性。通过把每个关键点视为一个one-hot二进制掩模(one-hot binary mask),只需很少修改,Mask R-CNN就可以应用于检测特定的姿势。
2. Related Work
R-CNN:它是通过找到一定数量的候选目标区域,并且在每个RoI上单独执行卷积网络来进行边框目标检测。基于R-CNN的改进,使用RoIPool在特征图上选取RoIs可以更快和更准确。Faster R-CNN通过使用区域建议网络(RPN)来产生候选框。
实例分割:在R-CNN有效的驱动下,实例分割的很多方法都基于分割建议(segment proposals)的。
- 早期的方法依赖自下而上的分割。DeepMask以及接下来的方法等则是通过学习提出分割候选区(segment candidates ),然后由Fast R-CNN进行分类。在这些方法中,分割先于识别,速度慢并且准确率低;
- Dai等人提出了一个复杂的多级级联,通过从边框建议中预测分割建议(segment proposals),然后进行分类。
- 但是我们的方法则是并行的进行掩模和类标签的预测,更简单和灵活。
3. Mask R-CNN
对于每个候选目标RoI,Faster R-CNN都有两个输出,一个类标签和一个边框偏移量。为此,我们添加第三条分支来输出目标掩模。但是附加的掩模输出与类输出和边框输出不同,需要提取对象更精细的空间布局。接下来,我们介绍Mask R-CNN的关键点—>像素到像素的对齐,这是之前所说的Fast / Faster R-CNN所不具备的关键点。
Faster R-CNN:Faster R-CNN由两级组成。第一级是区域建议网络(RPN),作用是提出候选目标边框。第二级,本质上是Fast R-CNN,使用RolPool从每个候选框中提取特征,并进行分类和边框回归。两级的特征可以共享使用,以便更快推理。
Mask R-CNN:Mask R-CNN也采用相同的两级,第一级是RPN,第二级,类和边框偏移量预测并行,除此之外,Mask R-CNN还会为每一个RoI输出一个二进制掩模。这与最近的其他系统相反,其分类取决于掩模预测。我们的方法遵循于Fast R-CNN[9],边框分类和回归并行。
在训练中,我们将每个采样后的RoI上的多任务损失函数定义为:
L = Lcls + Lbox + Lmask
其中 分类损失Lcls 和 边框损失Lbox 中定义相同,掩模分支对于每个RoI的输出维度为Km2 ,表示K个分辨率为m × m的二进制掩模,K表示类别数量,每个类别有一个分辨率为m × m的二进制掩模。而 Lmask 为平均二进制交叉熵损失。若某RoI真实类别标签是第i类,那么就只计算第i个mask输出的损失作为Lmask,其他K-1个掩膜输出对Lmask为0。
RoIAlign:RoIPool是从每个RoI提取特征图(例如7×7)的标准操作。RoIPool首先将浮点数表示的RoI量化到与特征图匹配的粒度,然后将量化后的RoI分块,最后汇总每个块覆盖的区域的特征值(通常使用最大池化)。量化是执行的。例如,对在连续坐标系上的x计算[x/16],其中16是特征图步幅,[ ]表示四舍五入。同样的,当对RoI分块时(例如7×7)也执行同样的计算。这些量化操作使RoI与提取的特征错位。虽然这可能不会影响分类,因为分类对小幅度的变换有一定的鲁棒性,但它对预测像素级精确的掩模有很大的负面影响。
为解决RoIPooling层产生的量化误差,提出了RoIAlign层,RoIAlign将直接保存浮点数,最终计算的时候根据双线性插值来计算。
上图虚线表示特征图,实线表示RoI(本例为2×2个bins),黑点表示每个bins中的4个采样点。RoIAlign通过双线性插值从特征图上邻近的网格点计算每个采样点的值。对RoI、其bin或采样点中涉及的任何坐标都不进行量化。
4. Network Architecture
为了证明我们方法通用性,我们构造多种不同结构的Mask R-CNN。
详细的说,我们使用不同的:(i)用于整个图像上的特征提取的卷积主干架构 (ii)用于边框识别(分类和回归)和掩模预测的上层网络,分别应用于每个RoI。
对于上层网络,我们基本遵循以前论文中提出的架构,我们 添加一个全卷积的掩模预测分支 。具体来说,我们扩展了ResNet 和FPN中提出的Faster R-CNN的上层网络。如上图所示:(上层架构:我们扩展了两种现有的Faster R-CNN上层架构,并分别添加了一个掩模分支。左/右分别显示了ResNet C4和FPN主干的上层架构。图中数字表示通道数和分辨率,箭头表示卷积、反卷积和全连接层(可以通过上下文推断,卷积减小维度,反卷积增加维度。)所有的卷积都是3×3的,除了输出层是1×1。反卷积是2×2,其步进为2,我们在隐藏层中使用ReLU[24]。在左图中,“res5”表示ResNet的第五级,简单起见,我们修改了第一个卷积操作,使用7×7,步长为1的RoI代替14×14,步长为2的RoI[14]。右图中的“×4 ”表示堆叠的4个连续的卷积。)ResNet-C4主干的上层网络包括ResNet的第5阶段(即9层的’res5’[14]),这是计算密集型的。但对于FPN,其主干已经包含了res5,因此可以使上层网络包含更少的卷积核而变的更加高效。