(目标检测篇)系列文章目录
第一章:R-CNN网络详解
第二章:Fast R-CNN网络详解
第三章:Faster R-CNN网络详解
第四章:SSD网络详解
第五章:Mask R-CNN网络详解
第六章:YOLO v1网络详解
第七章:YOLO v2网络详解
第八章:YOLO v3网络详解
文章目录
- 系列文章目录
- 技术干货集锦
- 前言
- 一、摘要
- 二、正文分析
- 1.引入库
- 2.读入数据
- 总结
技术干货集锦
0.摘要
摘要 我们提出了一个概念上简单、灵活、通用的目标实例分割框架。我们的方法在有效检测图像中的对象的同时,为每个实例生成高质量的分割掩码。这种方法称为Mask R-CNN,通过在现有的边界框识别分支之外添加一个用于预测对象掩码的分支来扩展Faster R-CNN。Mask R-CNN的训练简单,并且对Faster R-CNN的开销很小,运行速度为5 fps。此外,Mask R-CNN容易推广到其他任务,例如在同一框架中估计人体姿势。我们在COCO套件的三个任务中都取得了最佳结果,包括实例分割、边界框目标检测和人体关键点检测。没有花里胡哨的东西,Mask R-CNN在每个任务上都超过了所有现有的单模型结果,包括COCO 2016挑战赛的获胜者。我们希望我们简单而有效的方法可以作为一个坚实的基线,并有助于简化将来的实例级别识别研究。代码已经在https://github.com/facebookresearch/Detectron上提供。
1.前言
图1. 用于实例分割的Mask R-CNN框架。
- 引言 视觉领域在短时间内迅速提高了目标检测和语义分割的结果。在很大程度上,这些进展是由于强大的基线系统的推动,例如Fast/Faster RCNN [12, 36]和Fully Convolutional Network (FCN) [30]用于目标检测和语义分割的框架。这些方法在概念上直观,并提供了灵活性和鲁棒性,同时训练和推理时间也很快。我们在这项工作中的目标是开发一个同样有用的实例分割框架。实例分割是具有挑战性的,因为它需要正确检测图像中的所有对象,同时精确地分割每个实例。因此,它结合了传统计算机视觉任务中的目标检测元素,目标检测的目标是对每个对象进行分类并使用边界框进行定位,以及语义分割的元素,语义分割的目标是将每个像素分类到一组固定的类别中,而不区分对象实例。鉴于此,人们可能会期望需要一个复杂的方法才能获得良好的结果。然而,我们展示了一个令人惊讶的简单、灵活和快速的系统能够超越先前最先进的实例分割结果。
我们的方法称为Mask R-CNN,它通过在每个感兴趣区域(RoI)上添加一个用于预测分割掩码的分支来扩展Faster R-CNN [36],与用于分类和边界框回归的现有分支并行(图1)。掩码分支是一个小的全卷积网络(FCN),应用于每个RoI,以像素级别预测分割掩码。Mask R-CNN在Faster R-CNN框架下实现和训练起来很简单,这有助于各种灵活的架构设计。此外,掩码分支只增加了很小的计算开销,使系统运行速度快,能够进行快速的实验。从原理上讲,Mask R-CNN是Faster R-CNN的直观扩展,但正确构建掩码分支对于获得良好的结果至关重要。最重要的是,Faster RCNN并不是为网络输入和输出之间的像素级对齐而设计的。这在RoIPool [18, 12]中最为明显,RoIPool是实例注意力的事实上核心操作,用于进行特征提取时进行粗略的空间量化。为了修复这种不对齐,我们提出了一种简单的无量化层,称为RoIAlign,它可以准确地保留空间位置。尽管这似乎是一个微小的改变,但RoIAlign有很大的影响:它可以将掩码的准确性提高相对10%到50%,在更严格的定位指标下获得更大的收益。其次,我们发现将掩码和类别预测分离是至关重要的:我们独立地为每个类别预测一个二进制掩码,而不是在类别之间进行竞争,并依赖于网络的RoI分类分支来预测类别。相比之下,FCN通常执行逐像素的多类别分类,这将分割和分类耦合在一起,并且根据我们的实验,对于实例分割效果较差。
在没有花哨的技巧的情况下,Mask R-CNN在COCO实例分割任务[28]上超过了所有以往的最先进的单模型结果,包括2016年比赛冠军的高度工程化的参赛作品。作为副产品,我们的方法在COCO目标检测任务上也表现出色。在消融实验中,我们评估了多个基本实例,这使我们能够展示其鲁棒性并分析核心因素的影响。我们的模型可以在GPU上每帧运行约200毫秒,而在单个8-GPU机器上对COCO进行训练需要一到两天的时间。我们相信快速的训练和测试速度,以及框架的灵活性和准确性,将有助于简化和改进未来的实例分割研究。最后,我们通过COCO关键点数据集[28]上的人体姿势估计任务展示了我们框架的普适性。通过将每个关键点视为一个一位热二进制掩码,只需最小的修改,Mask R-CNN就可以用于检测特定实例的姿势。Mask R-CNN超过了2016年COCO关键点竞赛的冠军,并且同时以5帧/秒的速度运行。因此,Mask R-CNN可以更广泛地被视为一个灵活的实例级别识别框架,并且可以轻松扩展到更复杂的任务上。
图2. 在COCO测试集上的Mask R-CNN结果。这些结果基于ResNet-101 [19],在5fps的速度下,实现了35.7的掩码AP。掩码以彩色显示,同时显示了边界框、类别和置信度。
我们已经发布了代码,以促进未来的研究。
2.正文分析
相关工作 R-CNN:区域卷积神经网络(R-CNN)方法[13]用于边界框目标检测,它关注可管理的候选对象区域[42,20]并独立地对每个RoI进行卷积网络[25,24]评估。R-CNN通过使用RoIPool在特征图上关注RoI,从而实现了快速速度和更好的准确性。Faster R-CNN [36]通过使用区域建议网络(RPN)学习注意机制来推进这一流程。Faster R-CNN在许多后续改进中都具有灵活性和鲁棒性(例如,[38,27,21]),并且在几个基准测试中是当前的主导框架。
实例分割:受到R-CNN的有效性的推动,许多实例分割方法都基于分割提议。早期的方法[13,15,16,9]将其归结为自下而上的分割[42,2]。DeepMask [33]和其后续工作[34,8]学习提出分割候选,然后由Fast R-CNN进行分类。在这些方法中,分割先于识别,这是缓慢且不太准确的。同样,Dai等人[10]提出了一个复杂的多阶段级联,该级联从边界框提议中预测分割提议,然后进行分类。相反,我们的方法基于并行预测掩码和类标签,这更简单和灵活。最近,Li等人[26]将[8]中的分割提议系统和[11]中的目标检测系统结合起来,用于“全卷积实例分割”(FCIS)。[8,11,26]中的共同思想是通过完全卷积方式预测一组位置敏感的输出通道。这些通道同时处理对象类别、边界框和掩码,使系统更快。但是,FCIS在重叠实例上出现了系统性错误并产生了虚假边缘(图6),这表明它面临着分割实例的根本困难的挑战。
另一类解决实例分割问题的方法是受到语义分割成功的推动,例如[23,4,3,29]。从像素级分类结果(例如FCN的输出)开始,这些方法试图将相同类别的像素分为不同的实例。与这些方法的先分割策略相反,Mask R-CNN基于实例优先的策略。我们期待将来会对这两种策略进行更深入的结合研究。
图3. RoIAlign: 虚线网格表示特征图,实线表示一个RoI(在本示例中为2×2个bin),点表示每个bin中的4个采样点。RoIAlign通过从特征图上附近的网格点进行双线性插值来计算每个采样点的值。在RoI、它的bins或者采样点涉及的任何坐标上都没有进行量化
3.Mask R-CNN
Mask R-CNN的概念很简单:Faster R-CNN对于每个候选目标有两个输出,一个是类别标签,一个是边界框偏移量;我们在此基础上添加了第三个分支,用于输出目标的掩码。因此,Mask R-CNN是一个自然而直观的想法。但是,额外的掩码输出与类别和边界框输出不同,需要提取出对象的更细致的空间布局。 接下来,我们介绍Mask R-CNN的关键要素,包括像素级对齐,这是Fast/Faster R-CNN的主要缺失部分。 Faster R-CNN:我们首先简要回顾一下Faster R-CNN检测器[36]。Faster R-CNN由两个阶段组成。第一个阶段称为区域建议网络(RPN),用于提出候选对象的边界框。第二个阶段本质上是Fast R-CNN [12],使用RoIPool从每个候选框中提取特征,并进行分类和边界框回归。两个阶段使用的特征可以共享,以加快推理速度。我们参考[21]进行了最新的、全面的Faster R-CNN与其他框架之间的比较。 Mask R-CNN:Mask R-CNN采用相同的两阶段过程,第一阶段与RPN相同。在第二阶段,与预测类别和边界框偏移量并行的是Mask R-CNN还为每个RoI输出一个二进制掩码。这与最近的大多数系统不同,这些系统的分类依赖于掩码预测(例如[33,10,26])。我们的方法遵循Fast R-CNN [12]的精神,在并行进行边界框分类和回归的同时(这在原始R-CNN [13]的多阶段流水线中被证明可以大大简化),正式地,在训练过程中,我们定义了每个采样的RoI上的多任务损失函数L =Lcls +Lbox +Lmask。其中,分类损失Lcls和边界框损失Lbox与[12]中定义的相同。掩码分支对于每个RoI有一个Km2维的输出,其中编码了K个分辨率为m ×m的二进制掩码,每个掩码对应一个类别。我们对其应用逐像素的sigmoid函数,并定义Lmask为平均二元交叉熵损失。对于与真实类别k相关联的RoI,Lmask仅在第k个掩码上定义(其他掩码输出不对损失做出贡献)。
(图4. 头部架构:我们扩展了两个现有的Faster R-CNN头部[19,27]。左/右面板分别显示了ResNet C4和FPN主干的头部,来自[19]和[27],并添加了一个掩码分支。数字表示空间分辨率和通道数。箭头表示从上下文中可以推断出的卷积、反卷积或全连接层(卷积保留空间维度,而反卷积增加空间维度)。所有的卷积都是3×3,除了输出卷积是1×1,反卷积的步长是2×2,并且我们在隐藏层中使用ReLU [31]。左边的‘res5’表示ResNet的第五阶段,为了简化起见,我们修改了它,使得第一个卷积在一个7×7的RoI上以步长1操作(而不是14×14 /步长2,如[19]中所示)。右边的‘×4’表示连续四个卷积的堆叠。)
我们定义的Lmask允许网络为每个类别生成掩码,而不需要类别之间的竞争;我们依赖于专用的分类分支来预测用于选择输出掩码的类别标签。这将掩码和类别预测解耦。这与将FCN [30]应用于语义分割时的常见做法不同,常见做法通常使用逐像素的softmax和多项交叉熵损失。在那种情况下,不同类别的掩码会竞争;而在我们的情况下,使用逐像素的sigmoid和二元损失函数,它们不会竞争。通过实验证明,这种公式对于获得良好的实例分割结果至关重要。 掩码表示:掩码编码了输入对象的空间布局。因此,与类别标签或边界框偏移量不同,后者不可避免地通过全连接(fc)层被压缩为短的输出向量,提取掩码的空间结构可以通过卷积提供的像素级对应关系自然地解决。具体而言,我们使用FCN [30]从每个RoI预测一个m×m的掩码。这使得掩码分支中的每个层都可以保持显式的m×m对象空间布局,而不会将其压缩为缺少空间维度的向量表示。与以前的方法相比,我们完全卷积的表示需要更少的参数,并且通过实验证明更准确。这种像素级的行为要求我们的RoI特征本身就是小的特征图,要能够良好对齐,以保留明确的逐像素空间对应关系。这激发了我们开发RoIAlign层的动机,该层在掩码预测中起着关键作用。
RoIAlign: RoIPool [12]是从每个RoI中提取一个小的特征图(例如7×7)的标准操作。RoIPool首先将浮点数RoI量化为特征图的离散粒度,然后将该量化后的RoI细分为自身量化的空间区域,最后对每个区域覆盖的特征值进行聚合(通常是最大池化)。量化是通过计算[x=16]对连续坐标x进行的,其中16是特征图的步长,[·]表示四舍五入;同样,在细分为区域时也会进行量化(例如7×7)。这些量化会导致RoI和提取的特征之间存在不对齐。虽然这可能不会影响分类,因为分类对小的平移具有鲁棒性,但它对预测像素精确的掩码有很大的负面影响。为了解决这个问题,我们提出了一个RoIAlign层,它去除了RoIPool中的粗糙量化,将提取的特征与输入正确对齐。我们的改进很简单:避免对RoI边界或区域进行任何量化(即使用x=16而不是[x=16])。我们使用双线性插值[22]在每个RoI区域的四个规律采样位置计算输入特征的精确值,并聚合结果(使用最大值或平均值),详见图3。我们注意到,结果对于精确采样位置或采样点的数量并不敏感,只要不进行量化即可。RoIAlign在我们的实验中显示出了很大的改进,如x4.2所示。我们还与[10]中提出的RoIWarp操作进行了比较。与RoIAlign不同,RoIWarp忽视了对齐问题,并且在[10]中实现时,也像RoIPool一样对RoI进行了量化。因此,尽管RoIWarp也采用了[22]中提出的双线性重采样,但实验证明它与RoIPool的性能相当(更多细节请参见表2c),这证明了对齐的关键作用。
网络架构:
为了证明我们方法的普适性,我们使用多种架构实例化了Mask R-CNN。为了清晰起见,我们区分了两个方面:(i)用于从整个图像中提取特征的卷积主干架构,以及 (ii)用于边界框识别(分类和回归)和掩码预测的网络头部,这些头部分别应用于每个RoI。我们使用命名规则网络深度-特征来表示主干架构。我们评估了深度为50或101层的ResNet [19]和ResNeXt [45]网络。Faster R-CNN与ResNets [19]的原始实现从第4阶段的最后一个卷积层提取特征,我们称之为C4。例如,使用ResNet-50作为主干架构的方法被表示为ResNet-50-C4。这是[19,10,21,39]中常用的选择。我们还探索了Lin等人最近提出的另一个更有效的主干架构,称为特征金字塔网络(FPN)。FPN使用自顶向下的架构,通过侧向连接从单尺度输入构建一个网络内的特征金字塔。具有FPN主干的Faster R-CNN根据特征金字塔的不同层级从不同尺度提取RoI特征,但其余部分与原始的ResNet类似。使用ResNet-FPN主干进行特征提取与Mask R-CNN在准确率和速度上都取得了显著的提升。关于FPN的更多细节,请参考[27]。对于网络头部,我们紧随以前的工作中提出的架构,并添加了一个完全卷积的掩码预测分支。具体来说,我们扩展了ResNet [19]和FPN [27]论文中的Faster R-CNN的盒子头部。详细信息如图4所示。ResNet-C4主干上的头部包括ResNet的第5阶段(即9层的'res5' [19]),这是计算密集型的。对于FPN,主干已经包含了res5,因此可以使用更高效的头部,使用更少的滤波器。我们注意到,我们的掩码分支具有简单明了的结构。更复杂的设计有可能提高性能,但不是本工作的重点。
表1. 在COCO测试集上的实例分割掩码AP。MNC [10]和FCIS [26]分别是COCO 2015和2016分割挑战的冠军。没有花哨的技巧,Mask R-CNN的性能超过了更复杂的FCIS+++(包括多尺度训练/测试、水平翻转测试和OHEM [38])。所有的结果都是单模型的结果。
实验:
实例分割 我们在COCO数据集[28]上对Mask R-CNN与现有技术进行了全面比较,并进行了全面的消融实验。我们报告了标准的COCO指标,包括AP(在IoU阈值上平均)、AP50、AP75和APS、APM、APL(不同尺度上的AP)。除非另有说明,AP使用掩码IoU进行评估。与之前的工作[5,27]一样,我们使用80k训练图像和35k验证图像的子集(trainval35k)进行训练,并在剩余的5k验证图像(minival)上进行消融实验。我们还报告了在test-dev [28]上的结果。
4.1. 主要结果
我们在表1中将Mask R-CNN与实例分割领域的最先进方法进行了比较。我们模型的所有实例化版本都优于之前最先进模型的基准变体。这包括COCO 2015和2016分割挑战的冠军MNC [10]和FCIS [26]。没有花哨的技巧,使用ResNet-101-FPN主干的Mask R-CNN的性能超过了包括多尺度训练/测试、水平翻转测试和在线难例挖掘(OHEM)[38]的FCIS+++[26]。虽然这项工作超出了本文的范围,但我们预计许多这样的改进对我们的模型也是适用的。图2和图5展示了Mask R-CNN的输出结果。即使在具有挑战性的条件下,Mask R-CNN也能取得良好的结果。在图6中,我们比较了我们的Mask R-CNN基线和FCIS+++[26]。FCIS+++在重叠实例上显示出系统性的伪影,这表明它在实例分割的基本难题上面临挑战。而Mask R-CNN没有出现这样的伪影。
图6. FCIS+++[26](顶部)与Mask R-CNN(底部,ResNet-101-FPN)的比较。FCIS在重叠的物体上显示出系统性的伪影。
(a) 骨干网络架构:更好的骨干网络带来了预期的收益:更深的网络效果更好,FPN优于C4特征,ResNeXt优于ResNet。
(b) 多项式vs.独立掩码(ResNet-50-C4):通过每个类别的二进制掩码(sigmoid)解耦可以大幅提升,相对于多项式掩码(softmax)。
(c) RoIAlign(ResNet-50-C4):不同RoI层的掩码结果。我们的RoIAlign层将AP提高了约3个百分点,AP75提高了约5个百分点。使用正确的对齐是导致RoI层之间差距较大的唯一因素。
(d) RoIAlign(ResNet-50-C5,步长为32):使用大步长特征的掩码级别和框级别AP。与步长为16的特征相比(表2c),错位更严重,导致准确性差距较大。
(e) 掩码分支(ResNet-50-FPN):全卷积网络(FCN)与多层感知机(MLP,全连接)用于掩码预测。FCN通过明确编码空间布局来提高结果。
表2. 消融实验。我们在trainval35k上进行训练,在minival上进行测试,并报告掩码AP,除非另有说明。
4.2. 消融实验
我们进行了一系列的消融实验来分析Mask R-CNN。结果在表2中展示,并在下面进行了详细讨论。 架构:表2a展示了具有不同骨干网络的Mask R-CNN。它从更深的网络(50 vs. 101)和包括FPN和ResNeXt在内的先进设计中受益。我们注意到,并非所有框架都会自动受益于更深或更先进的网络(参见[21]中的基准测试)。 多项式vs.独立掩码:Mask R-CNN解耦了掩码和类别预测:由于现有的框分支预测了类别标签,我们为每个类别生成一个掩码,而不需要类别之间的竞争(通过逐像素的sigmoid和二元损失)。在表2b中,我们将其与使用逐像素softmax和多项式损失(通常在FCN [30]中使用)进行了比较。这种方式将掩码和类别预测的任务耦合在一起,并导致掩码AP严重下降(5.5个百分点)。这表明一旦将实例作为一个整体进行分类(通过框分支),仅需预测一个二元掩码而无需考虑类别,这样可以使模型更容易训练。 类别特定vs.类别无关掩码:我们默认的实例化方法预测类别特定的掩码,即每个类别一个m×m的掩码。有趣的是,使用类别无关掩码的Mask R-CNN(即,无论类别如何都预测一个单独的m×m输出)几乎同样有效:在ResNet-50-C4上,其掩码AP为29.7,而类别特定的对应方法为30.3。这进一步凸显了我们方法中分类和分割之间的分工,它在很大程度上将它们解耦。
RoIAlign:
我们在表2c中展示了我们提出的RoIAlign层的评估结果。在这个实验中,我们使用了具有步长16的ResNet-50-C4骨干网络。RoIAlign相对于RoIPool将AP提高了约3个百分点,在高IoU(AP75)时获得了很大的提升。RoIAlign对max/average pool不敏感;在本文的其余部分中,我们使用平均池化。此外,我们还与MNC [10]中提出的RoIWarp进行了比较,它也采用了双线性采样。正如在x3中讨论的,RoIWarp仍然对RoI进行量化,导致与输入的对齐性丢失。如表2c所示,RoIWarp的性能与RoIPool相当,远远不如RoIAlign。这突显了正确的对齐是关键。我们还使用具有更大步长32像素的ResNet-50-C5骨干网络评估了RoIAlign。我们使用与图4(右边)相同的头部,因为res5头部不适用。表2d显示,RoIAlign将掩码AP提高了巨大的7.3个百分点,掩码AP75提高了10.5个百分点(相对提升50%)。此外,值得注意的是,使用RoIAlign和步长32的C5特征(30.9 AP)比使用步长16的C4特征(30.3 AP,表2c)更准确。RoIAlign在很大程度上解决了使用大步长特征进行检测和分割的长期挑战。最后,当与具有更细粒度多级步长的FPN一起使用时,RoIAlign在掩码AP上获得了1.5个百分点的提升,盒子AP上获得了0.5个百分点的提升(表6)。掩码分支:分割是一个像素到像素的任务,我们通过使用FCN来利用掩码的空间布局。在表2e中,我们比较了多层感知机(MLP)和FCN,使用了ResNet-50-FPN骨干网络。使用FCN相对于MLP获得了2.1个百分点的掩码AP提升。需要注意的是,我们选择这个骨干网络,以使FCN头部的卷积层未经预训练,以便与MLP进行公平比较。
4.3.边界框检测结果
我们在表3中将Mask R-CNN与最先进的COCO边界框目标检测方法进行了比较。尽管训练了完整的Mask R-CNN模型,但在推断过程中只使用了分类和框输出(忽略了掩码输出)。使用ResNet-101-FPN的Mask R-CNN优于所有先前最先进模型的基本变体,包括COCO 2016检测挑战的单模型变体G RMI [21]的优胜者。使用ResNeXt-101-FPN,Mask R-CNN进一步改善了结果,在框AP上比[39]中最佳的先前单模型入口(使用Inception-ResNet-v2-TDM)提高了3.0个百分点。作为进一步的比较,我们训练了一个没有掩码分支的Mask R-CNN版本,表3中标注为“Faster R-CNN,RoIAlign”。由于RoIAlign,这个模型的性能优于[27]中提出的模型。另一方面,它的框AP较Mask R-CNN低0.9个百分点。因此,Mask R-CNN在边界框检测上的差距完全是由于多任务训练的好处。最后,我们注意到Mask R-CNN在掩码和框AP之间存在很小的差距:例如,在37.1(掩码,表1)和39.8(框,表3)之间有2.7个百分点的差距。这表明我们的方法在很大程度上缩小了目标检测和更具挑战性的实例分割任务之间的差距。
表3.目标检测单模型结果(边界框AP)与测试数据集上的最新技术对比。使用ResNet-101-FPN的Mask R-CNN优于所有先前最新技术模型的基础变种(这些实验中忽略了掩膜输出)。Mask R-CNN相对于[27]的提升来自于使用RoIAlign(+1.1 APbb)、多任务训练(+0.9 APbb)和ResNeXt-101(+1.6 APbb)。
4.4.推理时间:
我们训练了一个ResNet-101-FPN模型,在RPN和Mask R-CNN阶段之间共享特征,按照Faster R-CNN [36]的4步训练方法进行。这个模型在Nvidia Tesla M40 GPU上每张图像运行时间为195毫秒(加上15毫秒的CPU时间将输出调整为原始分辨率),并且在统计上与不共享特征的模型具有相同的掩码AP。我们还报告了ResNet-101-C4变体需要约400毫秒的时间,因为它有一个更重的框头(图4),所以不建议在实际中使用C4变体。虽然Mask R-CNN很快,但我们注意到我们的设计并没有针对速度进行优化,可以在速度和准确性之间取得更好的平衡[21],例如通过改变图像尺寸和候选框数量,但这超出了本文的范围。训练:Mask R-CNN的训练也很快。在我们的8-GPU同步实现中,使用ResNet-50-FPN在COCO trainval35k上的训练耗时32小时(每个16张图像的小批量耗时0.72秒),使用ResNet-101-FPN则需要44小时。事实上,当在训练集上训练时,快速原型设计可以在一天内完成。我们希望这种快速的训练方法能够消除该领域的一个主要障碍,并鼓励更多人在这个具有挑战性的主题上进行研究。
5.用于人体姿势估计的Mask R-CNN
我们的框架可以很容易地扩展到人体姿势估计。我们将关键点的位置建模为一个one-hot掩码,并采用Mask R-CNN来预测K个掩码,每个掩码对应一个关键点类型(例如,左肩膀,右肘部)。这个任务有助于展示Mask R-CNN的灵活性。我们注意到,我们的系统对于人体姿势的最小领域知识被利用,因为实验主要是为了展示Mask R-CNN框架的普适性。我们期望领域知识(例如,建模结构[6])能够与我们的简单方法相辅相成。 实现细节:当将系统适应于关键点时,我们对分割系统进行了细微的修改。对于每个实例的K个关键点,训练目标是一个m×m的二进制掩码,其中只有一个像素被标记为前景。在训练过程中,对于每个可见的真实关键点,我们通过m2路softmax输出最小化交叉熵损失(鼓励检测到一个单一点)。我们注意到,与实例分割一样,K个关键点仍然被独立处理。我们采用ResNet-FPN变体,关键点头的架构类似于图4(右侧)。关键点头由8个3×3 512-d卷积层堆叠组成,后面是一个反卷积层和2×双线性上采样,产生一个56×56的输出分辨率。我们发现,与掩码相比,关键点级别的定位准确性需要相对较高的分辨率输出。模型在包含有注释关键点的所有COCO trainval35k图像上进行训练。为了减少过拟合,由于这个训练集较小,我们使用从[640,800]像素中随机采样的图像尺度进行训练;推理时使用单一尺度800像素。我们训练90k次迭代,从学习率0.02开始,在60k和80k次迭代时将学习率降低10倍。我们使用0.5的阈值进行边界框非极大值抑制。其他细节与x3.1中相同。
(图7.使用Mask R-CNN(ResNet-50-FPN)在COCO测试集上进行的关键点检测结果,其中使用了同一模型预测的人物分割掩膜。该模型的关键点AP为63.1,运行速度为5 fps。)
(表4.在COCO测试集上的关键点检测AP。我们的模型是单一模型(ResNet-50-FPN),运行速度为5 fps。CMU-Pose+++[6]是使用多尺度测试、使用CPM [44]进行后处理、并使用物体检测器进行过滤的2016年竞赛冠军,累计增加了约5个点(在个人交流中明确说明)。y:G-RMI是在COCO和MPII [1](25k张图像)上训练的,使用了两个模型(Inception-ResNet-v2用于边界框检测,ResNet-101用于关键点检测)
(表5.针对人类类别的边界框、分割和关键点的多任务学习,在minival上进行评估。为了进行公平比较,所有条目都是在相同数据上训练的。骨干网络是ResNet-50-FPN。在minival上具有64.2和64.7 AP的条目在test-dev上分别为62.7和63.1 AP(见表4))
(表6.在minival上进行的关键点检测中,RoIAlign与RoIPool的比较。骨干网络是ResNet-50-FPN。)
主要结果和消融实验:我们评估了人体关键点AP(APkp)并尝试了ResNet-50-FPN骨干网络;附录中还将研究更多骨干网络。表4显示,我们的结果(62.7 APkp)比使用多阶段处理流程的COCO 2016关键点检测冠军[6]高0.9个点(请参阅表4标题)。我们的方法相对简单且速度更快。更重要的是,我们有一个统一的模型,可以在5 fps的情况下同时预测边界框、分割和关键点。添加一个分割分支(针对人类类别)将APkp提高到63.1(表4)。表5中对minival上的多任务学习进行了更多的消融实验。将分割分支添加到仅有边界框(即Faster R-CNN)或仅有关键点的版本中一致地改进了这些任务。然而,添加关键点分支稍微降低了边界框/分割的AP,这表明虽然关键点检测受益于多任务训练,但反过来并没有帮助其他任务。尽管如此,同时学习这三个任务使得统一系统能够高效地同时预测所有输出(图7)。我们还研究了RoIAlign对关键点检测的影响(表6)。尽管这个ResNet-50-FPN骨干网络具有更细的步幅(例如,在最细的层级上为4个像素),但RoIAlign仍然相对RoIPool有显著的改进,并将APkp提高了4.4个点。这是因为关键点检测对于定位准确性更为敏感。这再次表明对于像素级定位(包括分割和关键点),对齐是至关重要的。鉴于Mask R-CNN在提取物体边界框、分割和关键点方面的有效性,我们预计它将成为其他实例级任务的有效框架。
(表7.在Cityscapes验证集('AP [val]'列)和测试集(其余列)上的结果。我们的方法使用ResNet-50-FPN)
在Cityscapes数据集上的示例结果如图8所示。
(表8. 在COCO minival数据集上,Mask R-CNN改进的检测结果。每一行都在上一行的基础上添加了一个额外的组件。我们用“X”表示ResNeXt模型,以简洁表示。)
(表9. 在COCO minival数据集上,Mask R-CNN改进的关键点结果。每一行都在上一行的基础上添加了一个额外的组件。在这里,我们仅使用关键点注释,而不使用蒙版注释。为了简明起见,我们用“R”表示ResNet,用“X”表示ResNeXt。)
附录A:在Cityscapes数据集上的实验。
我们进一步报告了Cityscapes[7]数据集上的实例分割结果。该数据集对2975个训练图像、500个验证图像和1525个测试图像进行了精细的注释。其中包含了2万个粗略的训练图像,但没有实例注释,我们没有使用这些图像。所有图像的大小为2048×1024像素。实例分割任务涉及8个对象类别,在精细训练集上的实例数量如下:人、骑车人、汽车、卡车、公交车、火车、摩托车、自行车,分别为17.9k、1.8k、26.9k、0.5k、0.4k、0.2k、0.7k、3.7k。在这个任务中,使用COCO风格的掩膜AP(在IoU阈值上取平均)来衡量实例分割的性能;同时也报告了AP50(即在IoU为0.5时的掩膜AP)。实现细节:我们使用ResNet-FPN-50作为Mask R-CNN模型的骨干网络;由于数据集规模较小,我们发现101层的骨干网络表现相似。我们使用从[800,1024]中随机抽样的图像尺度(较短的一边),以减少过拟合;推理时使用1024像素的单一尺度。我们每个GPU使用一个图像的小批量训练(即8个GPU上的8个图像),并将模型训练24k次迭代,从学习率0.01开始,并在18k次迭代时将其降至0.001。在这个设置下,在单个8-GPU机器上进行训练大约需要4小时。
结果:表7将我们的结果与val和test数据集上的最新技术进行了比较。在不使用粗糙训练集的情况下,我们的方法在test上达到了26.2的AP值,相对于之前最好的方法DIN [3]的改进超过了30%,也优于SGN的25.0 [29]。DIN和SGN都使用了精细+粗糙数据。与仅使用精细数据的最佳结果(17.4 AP)相比,我们实现了约50%的改进。对于人和汽车类别,Cityscapes数据集中存在大量类别内重叠的情况(平均每张图片有6个人和9辆车)。我们认为类别内重叠是实例分割的一个核心难题。我们的方法在这两个类别上相对于其他最佳结果有了巨大的改进(人类别从21.8提升到30.5,改进约40%;汽车类别从39.4提升到46.9,改进约20%),尽管我们的方法没有利用粗糙数据。Cityscapes数据集的一个主要挑战是在低数据情况下训练模型,特别是对于卡车、公交车和火车等类别,这些类别的训练数据只有约200-500个样本。为了部分解决这个问题,我们还报告了使用COCO预训练的结果。为此,我们使用预训练的COCO Mask R-CNN模型初始化了Cityscapes中的7个类别(骑手类别随机初始化)。我们对这个模型进行了4k次迭代的微调,在3k次迭代时降低学习率,这个过程大约需要1小时,给定了COCO模型的训练数据量。COCO预训练的Mask R-CNN模型在test上达到了32.0的AP值,相较于仅使用精细数据的模型,提升了近6个点。这表明训练数据量在结果中扮演了重要的角色。它也表明Cityscapes上的方法可能受到了低样本学习性能的影响。我们展示了使用COCO预训练在这个数据集上是一种有效的策略。最后,我们观察到val和test的AP存在偏差,这也可以从[23,4,29]的结果中观察到。我们发现这种偏差主要是由卡车、公交车和火车类别引起的,在仅使用精细数据的模型中,val/test的AP分别为28.8/22.8、53.5/32.2和33.0/18.6。这表明这些类别存在领域转移,同时训练数据也很少。COCO预训练对这些类别的改进效果最明显,但领域转移仍然存在,在val/test上的AP分别为38.0/30.1、57.5/40.9和41.2/30.9。需要注意的是,对于人和汽车类别,我们没有观察到任何偏差(val/test的AP在±1点之间)。
附录B:COCO上的增强结果
作为一个通用框架,Mask R-CNN与为检测/分割开发的互补技术兼容,包括对Fast/Faster R-CNN和FCN的改进。在这个附录中,我们描述了一些改进我们原始结果的技术。由于其普遍性和灵活性,Mask R-CNN被用作COCO 2017实例分割竞赛中三个获胜团队的框架,这些团队都明显优于先前的最新技术水平。 实例分割和目标检测 我们在表8中报告了Mask R-CNN的一些增强结果。总体而言,这些改进使蒙版AP提高了5.1个点(从36.7增加到41.8),框AP提高了7.7个点(从39.6增加到47.3)。每个模型的改进都能够持续提高蒙版AP和框AP,表明Mask R-CNN框架具有很好的泛化性。接下来我们详细介绍这些改进。这些结果以及未来的更新可以通过我们在https://github.com/facebookresearch/Detectron发布的代码复现,并可以作为未来研究的更高基线。 更新的基线:我们从一个更新的基线开始,使用不同的超参数。我们将训练迭代次数延长到180k,在第120k和160k次迭代中将学习率降低10倍。我们还将NMS阈值从默认值0.3更改为0.5。更新的基线具有37.0的蒙版AP和40.5的框AP。 端到端训练:所有之前的结果都使用了分阶段训练,即先训练RPN,然后再训练Mask R-CNN。根据[37]的方法,我们评估了端到端('e2e')训练,即联合训练RPN和Mask R-CNN。我们采用了[37]中的“近似”版本,该版本仅通过忽略对RoI坐标的梯度计算RoIAlign层的部分梯度。表8显示,端到端训练将蒙版AP提高了0.6,框AP提高了1.2。 ImageNet-5k预训练:根据[45]的方法,我们尝试使用在ImageNet的5k类子集上进行预训练的模型(与标准的1k类子集不同)。这个增加了5倍的预训练数据可以改进蒙版和框1 AP。作为参考,[40]使用了约250倍更多的图像(300M),并在他们的基线上报告了2-3个框AP的提高。
训练时数据增强:在训练时进行尺度增强可以进一步提高结果。在训练过程中,我们随机从[640,800]像素中选择一个尺度,并将迭代次数增加到260k(学习率在第200k和240k次迭代时降低10倍)。训练时数据增强将蒙版AP提高了0.6,框AP提高了0.8。 模型架构:通过将101层的ResNeXt升级为152层的对应版本[19],我们观察到蒙版AP提高了0.5,框AP提高了0.6。这表明在COCO上,更深的模型仍然可以改善结果。使用最近提出的非局部(NL)模型[43],我们实现了40.3的蒙版AP和45.0的框AP。该结果是在没有测试时数据增强的情况下获得的,并且该方法在测试时在Nvidia Tesla P100 GPU上以3fps运行。 测试时数据增强:我们将使用[400,1200]像素的尺度和步长为100的水平翻转对模型的结果进行组合。这给出了一个单一模型结果,蒙版AP为41.8,框AP为47.3。上述结果是我们提交给COCO 2017竞赛的基础(也使用了一个集成模型,这里不讨论)。据报道,实例分割任务的前三名获奖团队都基于Mask R-CNN框架的扩展。
关键点检测:我们在表9中报告了关键点检测的增强结果。作为更新的基线,我们将训练计划扩展到130k次迭代,在其中学习率在第100k和120k次迭代时降低10倍。这将APkp提高了约1个百分点。将ResNet-50替换为ResNet-101和ResNeXt-101,分别将APkp提高到66.1和67.3。使用一种称为数据蒸馏(data distillation)的最新方法,我们能够利用COCO提供的额外的12万个未标记图像。简而言之,数据蒸馏是一种自我训练策略,它使用在标记数据上训练的模型来预测未标记图像上的注释,并通过这些新注释更新模型。Mask R-CNN为这种自我训练策略提供了一个有效的框架。使用数据蒸馏,Mask R-CNN的APkp提高了1.8个百分点,达到69.1。我们观察到,即使是未标记的数据,Mask R-CNN也能从额外的数据中获益。通过使用与实例分割相同的测试时数据增强,我们进一步将APkp提高到70.4