Mask R-CNN 阅读笔记

Mask R-CNN 阅读笔记

2017

论文链接
代码链接

摘要: 本文提出了一个概念简单、灵活、通用的对象实例分割框架 Mask R-CNN。我们的方法能有效检测图像中的对象,同时为每个实例生成高质量的分割掩码。Mask R-CNN 通过添加一个预测对象 mask的分支与现有的 bounding box 识别分支相并行,扩展了 Faster R-CNN。Mask R-CNN训练简单,只为Faster R-CNN增加了一小部分开销,运行速度为5fps。此外,Mask R-CNN易于推广到其他任务,例如,可以用相同的框架估计人体姿态。 我们在COCO的三个挑战性任务上实现了最佳结果,包括实例分割、bounding box 目标检测和人体关键点检测。没有华丽的点缀,Mask R-CNN在每项任务上都优于所有现有的 single-model entries ,包括2016年COCO挑战赛的winners。我们希望我们简单有效的方法能成为坚实的baseline,并帮助简化未来 instance-level recognition 的研究。



1. Introduction

视觉界在短期内迅速改进了目标检测和语义分割结果。很大程度上,这些进步是由强大的 baseline 推动的,例如用于目标检测的 Fast/Faster R-CNN 和用于语义分割的全卷积网络(FCN)。这些方法概念直观,具有灵活性和鲁棒性,能快速训练和推理。本工作旨在为实例分割开发相对有利的框架。
实例分割具有挑战性,它需要正确检测图像中的所有对象并精确分割每个实例。因此,它结合了经典计算机视觉任务:目标检测与语义分割,目标检测旨在对每个物体进行分类并使用 bounding box 进行定位,语义分割旨在不区分对象实例的情况下将每个像素分入固定的类别集(遵循常用术语,我们使用目标检测来表示通过 bounding box 而非 mask 的检测,并使用语义分割来表示不区分实例情况下的每像素分类。但我们也注意到实例分割既是语义的,又是检测的一种形式。)。鉴于此,人们可能会认为需要一种复杂的方法才能获得良好的结果,但我们展示了一个简单、灵活、快速的系统,超越了现有的 sota 实例分割结果。
Mask R-CNN 通过在每个 Region of Interest(RoI)上添加一个与现有的分类和 bounding box 回归分支相平行的预测分割 mask 的分支,扩展了Faster R-CNN(图1)。Mask 分支是应用于每个RoI的小FCN,以 pixel-to-pixel 方式预测分割掩码。Mask R-CNN由于扩展了 Faster R-CNN框架,易于实现和训练,是广泛的灵活架构设计。此外,掩码分支只增加了较小的计算开销,实现了快速系统和快速实验。
在这里插入图片描述

图1. 实例分割 Mask R-CNN框架。


原则上,Mask R-CNN是Faster R-CNN的直观扩展,但正确构造 mask 分支对获得良好结果至关重要。最重要的是,Faster RCNN不是为网络输入和输出间的 pixel-to-pixel alignment 而设计的,这在 RoIPool(实际处理实例的核心操作)如何执行粗糙的 spatial quantization(空间量化)提取特征中最为明显。为修复错位,我们提出了一个简单的无量化层:RoIAlign,它保留了精确的空间位置。尽管这只是一个看似微不足道的变化,但 RoIAlign 有很大的影响:它将 mask 精度提高了10%-50%,在更严格的定位指标下展示了更大的增益。其次,我们发现解耦 mask 和类预测至关重要:我们独立地为每个类别预测一个二进制掩码,类别之间没有竞争,依赖网络的 RoI 分类分支来预测类别。 相比之下,FCNs 通常执行每像素多类分类,将分割和分类耦合在一起,我们的实验表明这样的分割效果很差。
没有华丽的点缀,Mask R-CNN在COCO实例分割任务中超越了之前所有的sota 模型,包括2016年的竞赛冠军。作为一个附带产生的结果,我们的方法在COCO目标检测任务上也表现优越。消融实验评估了多个基本实例,分析了核心因素的影响,并验证了模型的鲁棒性。
我们的模型可以在GPU上以每帧约200ms的速度运行,在单个8-GPU机器上需要一到两天训练COCO。我们相信,快速的训练和测试速度,以及框架的灵活性和准确性,将利于并简化实例分割的未来研究。
最后,我们在 COCO 关键点数据集的人体姿态估计任务上展示了框架的通用性。 通过将每个关键点视为一个 one-hot binary mask,对Mask R-CNN进行微小的修改可以检测特定实例的姿态。Mask R-CNN超越了2016年COCO关键点竞赛的 winner,以5帧/秒(fps)的速度运行。因此,Mask R-CNN可以视为一个 instance-level recognition 的广泛灵活框架,且可以很容易地扩展到更复杂的任务。

在这里插入图片描述

图2:Mask R-CNN在COCO test set 上的结果。这些结果基于ResNet-101,达到 35.7 mask AP ,以每秒5帧的速度运行。Mask 以颜色显示,图中还显示了 bounding box, category 和 confidences。

2. Related Work

R-CNN: Region-based CNN(R-CNN)bounding-box 目标检测方法关注可管理数量的候选对象区域,并在每个RoI上独立评估卷积网络。Fast R-CNN 和 SPP 扩展了R-CNN,使用 RoIPool 关注特征图上的ROI,从而提高了速度和准确性。Faster R-CNN 通过使用一个 Region
Proposal Network(RPN)学习注意力机制,推进了该stream。Faster R-CNN灵活且稳健,是目前几个基准的领先框架。

实例分割: 在R-CNN的有效推动下,许多实例分割方法都基于 segment proposals。早期的方法采用自底向上的分割。DeepMask 和其后续工作学习提出 segment candidates,然后由Fast R-CNN分类。在这些方法中,分割先于认知,速度慢且准确性低。同样,Daiet等人提出了一个复杂的多阶段级联,该级联从 bounding-box proposals 中预测 segment proposals ,然后进行分类。相反,我们的方法并行预测 mask 和 class label,这更简单、更灵活。
最近,Liet等人将(Instance-sensitive fully convolutional networks)中的segment proposal 系统和 R-FCN 中的目标检测系统相结合,用于“全卷积实例分割”(FCIS),三者的共同思想是完全卷积地预测一组位置敏感的输出通道,这些通道同时处理 object classes,boxes 和 masks,使系统速度更快。但FCIS在重叠实例上会产生系统误差和虚假边缘(图6),因此它无法应对分割实例的基本挑战。
实例分割的另一系列解决方案(Instancecut,Deep watershed transform for instance segmentation,Pixelwise instance segmentation with a dynamically instantiated network,SGN)是由语义分割的成功推动的。这些方法从每像素分类结果(例如FCN输出)开始,尝试将同一类别的像素切割成不同的实例。不同于这些方法的 segmentation-first 策略,Mask R-CNN基于一种 instance-first 策略。我们期望未来研究这两种策略的深入结合。

3. Mask R-CNN

Mask R-CNN 概念简单:Faster R-CNN对每个 candidate object 有两个输出:一个类标签和一个bounding-box offset;我们添加了第三个object mask 输出分支。因此,Mask R-CNN是一个自然而直观的想法。额外的 mask 输出不同于类和 box 输出,需要提取一个对象更精细的空间布局。接下来,我们介绍 Mak R-CNN的关键元素,包括 Fast/Faster R-CNN 主要缺失的 pixel-to-pixel 对齐

Faster R-CNN: 我们先简要回顾 Faster R-CNN检测器。Faster R-CNN由两阶段组成:① 一个Region Proposal Network(RPN):生成候选对象边界框;② 第二阶段本质上是Fast R-CNN,使用 RoIPool 从每个candidate box 中提取特征,并执行分类和 bounding box 回归。两阶段使用的特征可以共享,以便更快地进行推理。请读者参考(Speed/accuracy trade-offs for modern convolutional object detectors)以获取 Faster R-CNN和其他框架之间的最新、全面的比较。

Mask R-CNN: Mask R-CNN 同样采用 two-stage 过程,第一阶段是相同的 RPN。在第二阶段,Mask R-CNN在预测类和 box offset 的同时为每个RoI 输出一个二进制掩码。这与依赖掩码预测分类的系统不同。我们的方法遵循了 Fast R-CNN 的思想,即并行应用bounding-box 分类和回归(这在很大程度上简化了原始R-CNN 的 multi-stage pipeline)。
形式上,在训练期间,将每个采样RoI上的多任务 loss 定义为: L = L c l s + L b o x + L m a s k L=L_{cls}+L_{box}+L_{mask} L=Lcls+Lbox+Lmask L c l s 和 L b o x L_{cls} 和 L_{box} LclsLbox 与 Fast R-CNN 中的定义相同。mask 分支为每个RoI生成一个 K m 2 − Km^2- Km2 维输出,K类各一个mask,二进制 mask 分辨率为 m×m。为此,我们采用了一个per-pixel sigmoid,并将 L m a s k L_{mask} Lmask定义为 average binary cross-entropy loss。对于与 ground truth 类 k 相关的RoI, L m a s k L_{mask} Lmask 仅定义在第k个 mask 上(其他 mask 输出不会导致损失)。
L m a s k L_{mask} Lmask 的定义允许网络为每个类生成 mask ,而不需要类之间的竞争;我们依靠专门分类分支来预测用于选择输出 mask 的类标签,这解耦了 mask 和类预测。这与应用 FCNs 的语义分割的常见做法不同,后者通常使用一个 per-pixel softmax 和一个 multinomial cross-entropy loss,这种情况下,不同类之间相互竞争 mask ,而我们的 per-pixel sigmoid和 binary loss 不会这样。实验表明,该公式是获得良好实例分割结果的关键。

Mask Representation: 一个 mask 编码一个输入对象的空间布局,因此,与被全连接层 collapsed 成短输出向量的 class labels 或 box offsets 不同,mask 空间结构的提取能通过卷积提供的 pixel-to-pixel 对应关系自然而然地解决。
具体而言,使用 FCN 从每个 RoI 中预测一个 mask,这使掩码分支中的每一层保持显式的 m×m 对象空间布局,而不会将其折叠为缺乏空间维度的向量表示。不同于先前借助 fc(全连接) 进行掩码预测,完全卷积表示需要更少的参数,且结果更精确
这种 pixel-to-pixel 的行为要求RoI特征(其本身是小的特征图)必须很好地对齐,来保持显式的 per-pixel 空间对应。这促使我们开发在 mask 预测中起关键作用的 ROI Alling 层。

RoIAlign: RoIPool 是从每个RoI中提取小特征图(例如7×7)的标准操作。RoIPool先将浮点数RoI量化为特征图的离散粒度,然后将该量化RoI细分为自身量化的空间 bins,最后聚合每个单元覆盖的特征值(通常使用 max pooling)。执行量化,例如由 [x/16] (16是一个特征图的 stride,[.]是取整函数)计算连续坐标 x,同样,当划分成 bins(例如,7×7)时执行量化。这些量化引入了RoI和提取特征间的错位。这种错误可能不会影响对小平移稳健的分类,但它会极大影响 pixel-accurate mask。
为解决此问题,我们提出了一种 ROIAlling 层,该层消除了RoIPool 严苛的量化,将输入与提取特征正确对齐。改变很简单:避免对RoI boundaries或 bins 的任何量化(即,使用 x/16 代替 [x/16])。使用双线性插值计算每个RoI bin中四个固定采样位置的输入特征的精确值,并聚合结果(使用最大值或平均值),详见图3。我们注意到,只要不进行量化,结果对精确的采样位置或采样点的数量并不敏感。
如 4.2 节所示,ROAilign 带来了巨大改进。我们也将其与 RoIWarp 进行了比较。与RoIAlign不同,RoIWarp忽略了对齐问题,并像RoIPool一样量化RoI。因此,尽管RoIWarp也采用了双线性插值上采样,但如实验结果所示,其性能与RoIPool相当(更多细节见表2c),这表明了 align 具有关键作用。
在这里插入图片描述

图3. RoIAlign: 虚线网格表示特征图,实线表示RoI(本例中有2×2个 bins),点表示每个bins中的4个采样点。RoIAlign通过双线性插值特征图上的近邻网格点(四个箭头)计算每个采样点的值。不在RoI、其bins 或采样点中涉及的任何坐标上执行量化。

Network Architecture: 为了证明我们方法的通用性,我们实例化了具有多种架构的 Mask R-CNN。为清晰起见,我们区分了:(i)用于整个图像特征提取的卷积 backbone 架构,和(ii)用于bounding box 识别(分类和回归)和 分别用于每个 RoI 的 mask 预测的网络头。
我们使用 network-depth-features 来表示 backbone架构。我们评估了深度为50或101的ResNet和ResNeXt网络。最初使用ResNets的Fast R-CNN实现从第4阶段的最终卷积层(我们称之为C4)提取特征,例如,带有ResNet-50的backbone由ResNet-50-C4表示。
我们还探索了另一种更有效的 backbone:特征金字塔网络(FPN)。FPN使用具有横向连接的 top-down 架构,从 single-scale 输入中构建 in-network 特征金字塔。带 FPN backbone 的 Faster R-CNN根据其尺度从特征金字塔的不同级提取RoI特征,其他方法类似于vanilla ResNet。使用ResNet FPN backbone 进行特征提取的 Mask RCNN,能提高准确性和速度。
对于网络头,我们严格遵循先前工作提出的架构,添加一个完全卷积掩码预测分支。具体而言,我们扩展了 ResNet 和 FPN 论文中 Faster R-CNN box heads。细节信息如图4所示。ResNet-C4 backbone 上的 head 包括ResNet的第5 stage(即9层“res5”),这是可计算的。对于FPN,backbone 已经包含 res5,因此允许使用更少 filter 的更高效 head。
我们注意到,我们的 mask 分支具有简单的结构。更复杂的设计可能提高性能,但不是本工作的重点。
在这里插入图片描述

图4. head 架构。我们扩展了两个现有的 Faster RCNN head(ResNet、FPN)。左/右面板分别展示了ResNet C4和 FPN backbone 的头部,两者都添加了 mask 分支。数字表示空间分辨率和通道。箭头表示conv、deconv或 fc layers,这可以从上下文中推断出来(conv 保留空间维度,而deconv增加空间维度)。除输出conv为1×1外,所有conv均为3×3,deconvs 是 2×2/stride=2,隐藏层中使用ReLU。左图:“res5”表示ResNet的第五 stage,简单起见,我们对其进行了修改,使第一个conv在7×7的RoI上以stride=1运行(而非ResNet中的 14×14/stride 2)。右:“×4”表示四个连续conv的堆叠。

3.1. Implementation Details 实现细节

我们根据现有的 Fast/Faster R-CNN 设置超参数,虽然在原始文献中这是针对目标检测设置的,但我们发现实例分割系统对它们具有鲁棒性。
训练: 与Fast R-CNN一样,若RoI与 GT box 的IoU 不小于 0.5,则它被视为正,否则为负。Mask Loss L m a s k L_{mask} Lmask 仅用于正RoI。Mask target 是RoI与其 GT mask 的 intersection。
采用 image-centric 训练。调整图像大小,使其规模(较短边缘)为800像素。每个 GPU的每个 mini-batch 有 2张图像,每张图像都有正/负比为1:3的 sampled RoIs。C4 backbone 的 N=64,FPN的 N=512。在8个GPU(因此有效的mini-batch size为16)上训练160k iterations,学习率为0.02,在120k iteration时减少10。使用 0.0001 的权重衰减,0.9 的 momentum。使用ResNeXt 时,在每个GPU上训练一张图像,迭代次数相同,初始学习率为0.1。
RPN anchors 跨越5个尺度和3个纵横比(15个)。为了便于消融,RPN单独训练,除非另有规定,否则不与Mask R-CNN共享特征。对于本文中的每个 entry ,RPN和Mask R-CNN具有相同的backbone,因此它们是可共享的。
推理: 测试时,C4 backbone 的 proposal数是300,FPN的是1000。对这些 proposal 运行 box 预测分支,再进行非极大值抑制,然后将 mask 分支应用于得分最高的100个检测框。虽然这与训练中使用的并行计算不同,但它加快了推理速度并提高了准确性(因为使用了更少、更精确的ROI)。对每个RoI,mask 分支预测 K 个mask,但只使用第k个 mask,k是分类分支预测的类。然后将m×m浮点数 mask 输出调整为RoI大小,并在阈值 0.5处进行二值化。
注意,由于我们只计算前100个检测框上的 mask,Mask R-CNN在其 Faster R-CNN对应项上增加了一小部分开销(例如,∼20% on typical models)。

4. Experiments: Instance Segmentation 实例分割实验

4.1. Main Results

COCO上的结果:表1,图2,图5,图6
在这里插入图片描述

表1:coco test-dev 上的实例分割 mask AP。MNC 和 FCIS 分别是 COCO2015 和 COCO 2016 分割挑战的冠军。没有华丽的点缀,Mask R-CNN 优于更复杂的FCIS+++,其中包括多尺度训练/测试、水平翻转测试和OHEM。所有条目均为单模型结果。


在这里插入图片描述

图5. COCO test images 上的更多结果。使用ResNet-101-FPN,以每秒5帧的速度运行,with 35.7 mask AP (表1)。


在这里插入图片描述

图6. FCIS+++(top) vs. Mask R-CNN (bottom, ResNet-101-FPN). FCIS在重叠对象上有系统伪影。

4.2. Ablation Experiments

如表2所示。
在这里插入图片描述

表2:消融结果。我们在 trainval35k 上训练,在mini val上测试,并报告 mask AP,除非另有说明。

4.3. Bounding Box Detection Results

如表3所示。
在这里插入图片描述

表 3. 在test-dev上的目标检测单模型结果 (bounding box AP) VS sota。使用 ResNet-101-FPN 的 Mask R-CNN 优于所有先前 sota 方法的变体 (这些实验中 mask 的输出被忽略)。Mask R-CNN的收益来自于使用RoIAlign(+1.1 APbb)、多任务训练(+0.9 APbb)和ResNeXt-101(+1.6 APbb)。

4.4. Timing 时间

推理: 我们训练了一个ResNet-101-FPN模型, following Fast R-CNN的 4-step 训练,该模型在RPN和 Mask R-CNN stage 间共享特征。该模型在Nvidia Tesla M40 GPU上以每幅195ms的速度运行(加上15ms的CPU时间,将输出调整为原始分辨率),并在统计上实现了与非共享模型相同的mask AP。我们也报告了,ResNet-101-C4 variant takes∼400ms,因为它有一个较重的 box head (图4),所以我们不建议在实践中使用 C4 variant 。
尽管Mask R-CNN速度很快,但我们的设计没有针对速度进行优化,(Speed/accuracy trade-offs for modern convolutional object detectors)可以实现更好的速度/精度权衡,例如,通过改变图像大小和proposal 数量,这超出了本文的范围。
训练: Mask R-CNN训练速度也很快。在我们的同步8-GPU实现中,使用ResNet-50-FPN在COCO train Val35kt上进行训练需要32小时(每16-image mini-batch 0.72秒),使用ResNet-101-FPN需要44小时。事实上,当在训练集上训练时,快速原型可以在不到一天的时间内完成。我们希望如此快速的训练将消除这一领域的主要障碍,并鼓励更多的人在这一富有挑战性的课题上进行研究。

5. Mask R-CNN for Human Pose Estimation

我们的框架能够简单扩展到姿态估计任务上。将一个关键点的位置建模为一个 one-hot mask,并采用 Mask R-CNN来预测 K 个 mask,每个关键点(例如,左肩、右肘)一个。此任务有助于展示Mask R-CNN的灵活性。
我们的系统利用了人体姿态的最小领域知识,因为实验主要是为了证明 Mask R-CNN框架的通用性。我们希望该领域知识(例如建模结构)将补充我们的简单方法。

实现细节: 对分割系统进行微小的修改来应对关键点检测。每个实例 K 个关键点,训练目标是一个one-hot m×m 二进制 mask,其中只有一个像素被标记为前景。在训练过程中,对于每个可见的ground truth 关键点,在 m 2 − w a y m^2-way m2way softmax 输出上最小化交叉熵损失(这有助于检测单个点)。与实例分割一样,K个关键点仍然是独立处理的。
采用 ResNet FPN变体,keypoint head 结构与图4(右)中的结构类似。关键点 head 由8个3×3 512-d conv层组成,然后跟一个deconv层和2×双线性上采样,生成56×56的输出分辨率。我们发现,关键点级定位精度需要相对高分辨率的输出(与 mask 相比)。
模型在包含 annotated keypoints 的 COCO trainval35k图像上进行训练。由于该训练集较小,为避免过拟合,使用从[640,800]像素随机采样的图像尺度进行训练;在800像素的单一尺度上进行推理。训练90k次迭代,从0.02的学习率开始,在60k和80k次迭代时将其减少10。使用阈值为0.5的bounding-box NMS。其他细节同 3.1 节。
对比实验结果:表4,表5

在这里插入图片描述

表4。COCO test-dev上的关键点检测AP。Ours 是一个以5帧/秒速度运行的单一模型(ResNet-50-FPN)。CMU Pose++是2016年比赛的获胜者,它使用多尺度测试、CPM后处理,使用目标检测器进行过滤,并添加 cumulative ∼5 points(在个人沟通中阐明)。†:G-RMI使用两种模型(用于 bounding box 检测的 Inception-ResNet-v2,用于关键点的ResNet-101)在COCO plus MPII(25k图像)上进行训练。


在这里插入图片描述

表5. 在minival上评估关于person 类别的 box、mask和关键点的多任务学习。为公平起见,所有条目均基于相同数据进行训练。ResNet50 FPN作为 backbone。minival上具有64.2和64.7 AP的条目的 test-dev AP分别为62.7和63.1(见表4)。


消融实验:表6
在这里插入图片描述

表6. 在 minival上用于关键点检测的 RoIAlign vs RoIPool。backbone 是ResNet-50-FPN。


可视化结果:图7
在这里插入图片描述

图7。使用 Mask R-CNN(ResNet-50-FPN)在COCO test 上的关键点检测结果,以及同一模型预测的 person segmentation masks。该模型的关键点 AP 为63.1,运行速度为5 fps。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值