【深度学习】Mask R-CNN

Posted by ShawnD on November 7, 2022

Abstract

这篇文章为目标实例分割提供了一个概念简单、灵活和通用的框架。

该方法有效地检测图像中的目标,同时为每个实例生成高质量的分割 mask。

该方法称为Mask R-CNN,通过向边界框识别的分支添加一个分支来预测目标 mask,扩展了 Faster R-CNN。

Mask R-CNN 易于训练,仅为 Faster R-CNN 增加了一个小开销,运行速度为5 fps。

此外,Mask R-CNN 很容易推广到其他任务,例如,在同一框架下估计人类姿势。

作者展示了COCO challenges的所有三个赛道的 top 结果,包括实例分割、边界框目标检测和人类关键点检测。

Mask R-CNN在每项任务上都表现优于所有之前的单模型参赛作品,包括COCO 2016挑战赛获胜者。

Mask R-CNN

Mask R-CNN 在概念上很简单: Faster R-CNN 为每个候选目标有两个输出,一个类标签和一个边界框偏移量;除此之外,作者添加了第三个分支来输出目标 mask。因此,Mask R-CNN是一个自然和直觉的想法。但额外的 mask 输出不同于类和框输出,需要提取更精细的目标空间布局。接下来,作者介绍 Mask R-CNN 的关键元素,包括 pixel-to-pixel alignment,这是 Fast/Faster R-CNN 的主要缺失部分。

Faster R-CNN: 作者首先简要回顾了 Faster R-CNN 检测器。 Faster R-CNN 由两个阶段组成。第一阶段称为区域提议网络(RPN),提出候选目标边界框。第二阶段本质上是 Fast R-CNN[12],使用 RoIPool 从每个候选框中提取特征,并执行分类和边界框回归。两个阶段使用的特征都可以共享,以便更快地推理。

Mask R-CNN: Mask R-CNN采用相同的两阶段方式,具有相同的第一阶段(即RPN)。在第二阶段,在预测类和框偏移的同时,Mask R-CNN 还为每个 RoI 输出一个二分类 mask。相比于最近的系统, 他们的分类依赖于 mask 预测。所提方法遵循 Fast R-CNN[12]的精神,该精神在并行中应用边界框分类和回归(事实证明,这在很大程度上简化了原始 R-CNN 的 multi-stage pipeline [13])。

形式上,在训练期间,作者将每个采样的 RoI 上的多任务损失定义为 $L = L_{cls} + L_{box} + L_{mask}$。 分类损失 $L_{cls}$ 和边界框损失 $L_{box}$ 和 Fast R-CNN 是一样的。对于每个 RoI, mask 分支有 $Km^2$ 维输出, 其编码了$K$ 个分辨率 $m \times m$ 的 二值 mask, $K$ 为类别数。为了达到这一点,使用一个 per-pixel 的 sigmoid, 定义 $L_{mask}$ 为平均二值交叉熵损失。对于一个和真值类别 $k$ 相关的 RoI, $L_{mask}$ 仅定义在第 $k$ 个 mask 上(其他 mask 输出不贡献损失)。

$L_{mask}$ 的定义允许网络为每个类别生成 masks, 而且不需要和其他类别产生竞争。作者依靠专用分类分支来预测用于选择输出 mask 的类标签。这解耦了 mask 和类别预测。这与将 FCN[30] 应用于语义分割时的常见做法不同,语义分割通常使用每个像素的 softmax 和多类别交叉熵损失。在这种情况下,不同类别的 mask 产生竞争;在该论文所提方法的情况下,每个像素的 sigmoid 和 二分类损失,不存在产生竞争。实验表明,这种方法是良好实例分割结果的关键。

Mask Representation: mask 对输入目标的空间布局进行编码。因此,与通过全连接(fc)层不可避免地变成短的输出向量的类标签或框偏移量不同,提取 mask 的空间结构可以通过卷积提供的 pixel-to-pixe 对应自然地解决。

特别地, 作者使用 FCN 从每个 RoI 预测 $m \times m$ 的mask。 这允许 mask 分支中每层维持显式的 $m \times m$ 目标空间布局。与之前的方法对 mask 预测使用全连接层不同, 作者的全卷积表征需要更少的参数, 且实验表明有更高的准确率。

这种 pixel-to-pixel 的行为要求 RoI 特征(本身就是小特征图)进行良好的对齐,以忠实地保持明确的逐像素的空间相关性。这促使作者开发了以下RoIAlign 层,该层在 mask 预测中发挥着关键作用。

RoIAlign: RoIPool[12]是从每个 RoI 中提取小特征图(例如 $7 \times 7$)的标准操作。RoIPool首先将浮点数 RoI 量化为特征图的离散化,然后将这个量化的RoI细分为 spatial bin,这些 spatial bin本身被量化,最后将每个 bin 覆盖的特征值聚合(通常通过最大池化)。在连续的坐标 $x$ 上计算 $[x / 16]$, 其中 16 是特征图步长, $[·]$ 是取整; 像这样,在划分为 bin 时(例如 $7 \times 7$)量化也产生了。这些量化引入了在 RoI 和提取的特征之间的不对齐。这可能不会影响分类, 其对于小的变换是鲁棒的, 但是他对预测像素级准确率的 masks 有非常大的负影响。

为了解决这个问题,作者提出了一个 RoIAlign 层,该层移除掉 RoIPool 的苛刻量化,将提取的特征与输入正确对齐。作者提出的更改很简单: 避免任何RoI边界或 bin 的量化。 作者使用双线性插值[22]来计算每个 RoI bin 中四个采样位置的输入特征的确切值,并汇总结果(使用最大值或平均值),详情请参阅图3。作者注意到,只要不进行量化,结果与确切的采样位置不敏感。

RoIAlign带来了巨大的改进。 我们还比较了 [10] 中提议的 RoIWarp 操作。与RoIAlign不同,RoIWarp忽略了对齐问题,并像RoIPool一样在[10]中实现了量化 RoI。因此,尽管 RoIWarp 也采用了由[22]驱动的双线性重采样,但正如实验所示,它的表现与 RoIPool 相当(表 2c中的更多详细信息),展示了对齐的关键作用。

Network Architecture: 为了证明该方法的泛化性,作者用多种架构实例化了Mask R-CNN。

(i) 用于在整个图像上进行特征提取的卷积主干架构。

(ii) 用于边界框识别(分类和回归)和 mask 预测的网络头,分别应用于每个 RoI。

作者使用 network-depth-features 来命名主干架构。我们评估了深度为 50 或 101 层的 ResNet 和 ResNeXt 网络。使用 ResNets 的 Faster R-CNN 的原始实现从第4级的最终卷积层中提取了特征,称之为C4。例如,这个带有 ResNet-50 的主干用 ResNet-50-C4 表示。

我们还探索了另一个最近提出的更有效的主干, 叫做Feature Pyramid Network (FPN)。 FPN使用具有横向连接的自上而下的架构从单尺度输入构建网络内特征金字塔。带有 FPN 骨干 的 Faster R-CNN 根据其尺度从不同级别的特征金字塔中提取 RoI ,除此之外,其余方法类似于原始 ResNet。使用ResNet-FPN 主干与 Mask R- CNN 进行特征提取,在准确性和速度方面都有很好的提高。

对于网络 head,我们密切关注之前工作中提出的架构,作者在其中添加了一个全卷积 mask 预测分支。具体来说,作者从 ResNet [19] 和 FPN [27] 论文中提取 Faster R-CNN box head。详情如图4所示。ResNet-C4 主干的头部包括 ResNet 的第5级(即9层“res5”[19]),这是计算密集型的。对于FPN,主干已经包括 res5 ,因此允许使用更少 filter 的更高效的 head。

作者注意到,mask 分支具有直截了当的结构。更复杂的设计有可能证明性能,但不是这项工作的重点。

Implementation Details

作者按照现有的 Fast / Faster R-CNN工作设置了超参数。虽然这些决定是在原始论文中为目标检测做出的, 作者发现所提出的实例分割系统具有鲁棒性。

Training: 如在 Fast R-CNN 中,RoI 与真实标签的 IoU 至少为0.5 才为正样本,否则为负样本。mask 损失 $L_{mask}$ 仅定义在正 RoIs 上。mask 标签是 RoI 与其相关的真实 mask 之间的交集。

我们采用以图像为中心的训练。 调整图像的大小,使其比例(短边)为800像素。 每个GPU每个小批量有2张图像,每张图像都有 N 个采样的RoI,正负样本比为1:3。对于 C4 主干来说 $N$ 是 64, 对FPN来说, $N$ 是 512。 作者在8个GPU上(所以有效批量大小是16),训练了 160k 迭代,学习率为0.02,在 120k 迭代时减少 10 倍。我们使用 0.0001 的权重衰减和 0.9 的动量。使用ResNeXt [45],作者训练每个GPU有1张图像和相同数量的迭代,起始学习率为0.01。

RPN 先验框跨越5个尺度和3个宽高比。为了方便消融,RPN分开的训练,不与Mask R-CNN共享特征,除非特别说明。对于文章中的每个条目,RPN 和 Mask R-CNN都有相同的主干,因此它们是可以共享的。

Inference: 在测试时,C4骨干的提议数量为300(如[36]),FPN的提议数量为1000(如[27])。作者对这些提议运行边界框预测分支,然后是非极大值抑制。然后将 mask 分支应用于得分最高的100个检测框。尽管这与训练中使用的并行计算不同,但它加快了推理并提高了准确性(由于使用了更少、更准确的RoI)。mask 分支可以预测每个 RoI 的 K 个 mask,但作者只使用第K个 mask,其中 K 是分类分支预测的类别。然后将 $m \times m$ 浮点数 mask 输出调整为RoI大小,并在0.5的阈值下二值化。

请注意,由于作者只计算前100个检测框上的 mask,Mask R-CNN为其 Faster R-CNN 增加了一个小开销。