【论文】Mask R-CNN
论文地址:Mask R-CNN论文源码:R-CNNCaffe版本:rbgirshick/rcnnFast R-CNNCaffe版本: rbgirshick/fast-rcnn Faster R-CNNCaffe版本: https://github.com/rbgirshick/py-faster-rcnn PyTorch版本: https://github.com/longcw/faster_rc
论文地址:Mask R-CNN
论文源码:
R-CNN
- Caffe版本:rbgirshick/rcnn
Fast R-CNN
- Caffe版本: rbgirshick/fast-rcnn
Faster R-CNN
- Caffe版本: https://github.com/rbgirshick/py-faster-rcnn
- PyTorch版本: https://github.com/longcw/faster_rcnn_pytorch
- MatLab版本: https://github.com/ShaoqingRen/faster_rcnn
Mask R-CNN
- PyTorch版本: https://github.com/felixgwu/mask_rcnn_pytorch
- TensorFlow版本: https://github.com/CharlesShang/FastMaskRCNN
摘要
论文提供了一种 概念简单、灵活通用的实例分割框架。该论文中的方法能有效的检测到论文中的物体同时为每个实例生成高质量的掩膜。该方法被称作为Mask R-CNN,在进行本身具有的边界框识别并行过程中通过添加支流扩展Faster R-CNN进行物体掩膜预测。Mask R-CNN的训练十分简单,并且只需要在Faster R-CNN上层添加少量的内容,运行能达到5帧/s。此外,Mask R-CNN可以很轻松的扩展到其它的任务上,例如可以在相同的框架下估计人体的动作。我们展示了在COCO三项比赛排名靠前的结果,包含实例分割,边界框选取和人体关键点检测。毫不夸张的说,Mask R-CNN在所有任务上超越了所有已经存在的、单入口的模型,包括在2016年COCO比赛的获奖者。我们希望我们这个简单有效的方法能作为一个固定的基准线并且能在未来的实例层面上的识别产生帮助。
评述:从摘要可以看出,Mask R-CNN是在Faster R-CNN上扩展的一个模型,所以要了解Faster R-CNN有助于对本模型的理解。Mask R-CNN不仅仅在实例分割上做到了最好的效果,而且还适用于许多其它的任务,但是一个缺点是运行的速度还是只有5帧/s,这个与我们人类的处理能力相比还有很大的差距。
1 简介
在最近些年以来,计算机视觉领域的快速发展产生了很多强大的可作为基准的模型,比如 Fast/Faster R-CNN and 全卷积神经网络(FCN)。这篇论文的目标就是在实例分割上构建一个能匹敌的框架。实例分割很具有挑战性因为它需要能检测到每个物体并且准确的将物体分割出来。因此,其中需要结合传统的计算机视觉目标检测任务,其中的目标是分类个体对象,使用选框定位每个物体以及语义分割。其中的目标是在没有不同的对象实例情况下为每个像素点选择一个类别。有些人可能会觉得做到这样好的效果可能需要很复杂的方法。但是论文作者们给出了一个很简单的方法,并且还能达到最先进的效果。
图1 Mask R-CNN框架在实例分割
作者们的方法,被称作为Mask R-CNN,通过在感兴趣区域(RoI)添加预测分割掩膜的路径扩展Faster R-CNN ,并且与分类和边界框回归操作并行处理(见图一)。掩膜的支流是一个应用在每个RoI上的小的FCN,能够以像素到像素的方式预测每个分割掩膜。Mask R-CNN在Faster R-CNN的基础上很容易实现和训练,Faster R-CNN框架有助于大范围的灵活的框架设计。此外,掩膜支流仅仅添加了一个小的计算层,使得具有快速的性能。
从直观上来看Mask R-CNN是在Faster R-CNN上的一个扩展,但是构建好的掩膜支流可能是获得好效果的关键。更加关键的是,Faster R-CNN并没有在输入与输出网络之间设计像素到像素的对准。这就在如何进行ROIPool上很明显,实际的核心操作是处理实例,为特征提取执行粗略的空间量化。为了修正未对准问题,我们假定了一个简单的,自由量化的层,称作RoIAlign,它能可靠地保留确切的空间位置信息。
尽管是一个看似微小的变化, RoIAlign具有巨大的影响力:它能相应地将掩膜的精度提高10%—50%,根据更严格的本地化指标显示更大的收益。第二,我们发现解耦掩模和类别预测是非常重要的,没有了类别之间的竞争,并且依赖网络的RoI分类支流预测类别。相反,FCNs 通常执行每个像素的多类别分类,它联结了分割和分类,在基于我们的实验效果上很差,例如实例分割。
Mask R-CNN作为一个副产品,我们的方法在COCO物体检测任务上也表现优越。在切除实验上,我们评估了多个基本实例,它允许我们,它允许我们展示它的健壮性并且分析核心因素的影响力。
论文的模型在单个GPU上能达到200ms每帧,并且训练COCO数据集需要在单个8核GPU的机器上需要花费两天。我们相信拥有快速的训练和测试速度,伴随着框架的高灵活性和准确率,将在未来的实例层面上的识别产生帮助。
我们在COCO关键点数据集上通过人体动作估计任务展示了我们框架的泛化性。通过将每个关键点是作为独热二进制码, Mask R-CNN只需要做出少量的修改就能被应用到特点实例的姿态检测上。
本篇论文还提供了源代码用以促进未来的研究。
2 相关工作
R-CNN:基于区域的CNN(R-CNN)方法[13]到边界框对象检测是关注可管理数目的候选目标区域[42,20]并评估卷积网络[25,24]独立于每个RoI。 R-CNN得到了扩展[18,12],允许使用RoIPool在功能地图上参与RoI,从而实现更快的速度和更高的准确性。 更快的R-CNN [36]通过学习区域建议网络(RPN)的注意机制来推进这一流程。 更快速的R-CNN可以灵活应用于许多后续改进(例如[38,27,21]),并且是几个基准测试中的当前领先框架。
实例分割:在R-CNN的有效性的推动下,许多实例分割的方法都基于分割提案。 早期的方法[13,15,16,9]重新分类到自下而上的部分[42,2]。 DeepMask [33]和以下工作[34,8]提出分割候选集,然后由Fast R-CNN进行分类。 在这些方法中,分割先于识别,这是缓慢的并且缺乏准确性。 同样,戴等人[10]提出了一个复杂的多阶段级联,预测来自边界框提议的分段提议,然后进行分类。相反,我们的方法基于掩膜和类标签的并行预测,这更简单并且更灵活。
最近,李等人[26]将[8]中的片段处理系统和[11]中的对象检测系统合并为“完全卷积实例分割”(FCIS)。[8,11,26]中的共同想法是完全卷积预测一组位置敏感的输出通道。这些通道同时处理对象类,框和掩码,使系统更快。但FCIS在重叠实例上表现出系统错误,并产生虚假边缘(图6),表明它受到分割实例困难的挑战。
实例分割的另一个解决方案家族[23,4,3,29]是由语义分割的成功驱动的。从每像素分类结果(例如,FCN输出)开始,这些方法试图将相同类别的像素切割成不同的实例。与这些方法的分段优先策略相比,Mask R-CNN基于实例优先策略。我们预计未来将研究更深入的两种战略。
3 Mask R-CNN
掩膜R-CNN在概念上是简单的:更快的R-CNN对于每个候选对象具有两个输出,一个类别标签和一个边界框偏移; 为此,我们添加一个输出对象掩膜的第三个分支。 掩膜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])。
通常,在训练阶段我们用 L = L cls + L box + L mask 在每个RoI的采样上定义多任务损失。分类损失L cls和边界框损失L box与[12]中定义的一致。 掩码分支对于每个RoI具有Km平方维输出,其对于分辨率m×m的K个二进制掩码进行编码,对于每个K个类都是一个。对此,我们应用每像素S形(sigmoid),并将L掩模定义为平均二元交叉熵损失。对于与地面实况类别k相关的RoI,L掩码仅在第k个掩码上定义(其他掩码输出不会造成丢失)。
我们对L掩码的定义允许网络为每个类生成掩码,而不在类之间进行竞争;我们依靠专用分类分支来预测用于选择输出掩码的类标签。 这样可以将掩码和类别预测分开。 这与将FCN [30]应用于语义分割时的常见做法不同,后者通常使用每像素softmax和multial-mial交叉熵损失。 在这种情况下,跨类别掩码竞争; 在我们的例子中,每像素S形和二进制丢失,他们不。 我们通过实验表明,这种构造是良好实例分割结果的关键。
图3. RoIlign:虚线网格表示一个特征图,实线表示一个RoI(本例中为2×2个分箱),点表示每个分箱中的4个采样点。 RoIAlign通过特征地图上附近网格点的双线性插值计算每个采样点的值。 在RoI,其仓或采样点中涉及的任何坐标都不执行量化。
掩码表示法:掩码编码输入对象的空间布局。 因此,与通过完全连接(fc)层不可避免地折叠成短输出矢量的类标签或框偏移不同,提取掩模的空间结构可以通过卷积提供的像素到像素对应自然地解决。
具体而言,我们预测每个使用FCN的m×m掩码[30]。 这允许掩码分支中的每个层保持显式的m×m对象空间布局,而不将其折叠成缺少空间维度的向量表示。 与以前的方法重新分类到fc图层进行掩模预测[33,34,10]不同,我们的完全卷积表示需要更少的参数,并且如实验所证明的那样更精确。
这种像素到像素的行为要求我们的RoI特征(它们本身就是小特征图)能够很好地对齐,从而忠实地保留显式的每像素空间相关性。 这促使我们开发了以下RoAlign图层,该图层在遮罩预测中发挥关键作用。
RoIlign:RoIPool [12]是从每个RoI中提取一个小特征映射(例如7×7)的标准操作。 RoIPool首先将浮点数RoI量化为特征映射的离散粒度,然后将这个量化的RoI细分为自身量化的空间仓,最后聚合每个仓的特征值(通常通过最大池)。 量化被执行,例如,在连续坐标x上计算[x / 16],其中16是一个特征映射步长,[·]是四舍五入的; 同样,当划分为分区(例如,7×7)时执行量化。这些量化引入了RoI与提取的特征之间的未对准。 虽然这可能不会影响分类,这对于小型翻译很有用,但它对预测像素精确的蒙版有很大的负面影响。
正如我们在§4.2中所展示的,RoIAlign带来了巨大的改进。 我们也比较了[10]中提出的RoIWarp操作。 与RoIlign不同,RoIWarp忽略了对齐问题,并且在[10]中将RoI作为量化RoI来实现。 因此,尽管RoIWarp也采用了[22]激励的双线性重采样,但它与RoIPool相当(如实验所示)(表2c中的更多细节),展示了对齐的关键作用。
网络体系结构:为了演示我们的方法的一般性,我们实例化具有多种体系结构的Mask R-CNN。 为了清晰起见,我们区分:(i)用于整个图像上的特征提取的卷积骨干体系结构,以及(ii)分别应用于每个RoI的网络头部的框 - 框识别(分类和回归)和掩码预测。
我们使用Nomen-Clature网络深度特征来表示骨干架构。 我们评估深度为50或101层的ResNet [19]和ResNeXt [45]网络。 带有ResNets [19]的Faster R-CNN的最初实现从第四阶段的最后卷积层提取特征,我们称其为C4。 例如,ResNet-50的骨干用ResNet-50-C4表示。 这是[19,10,21,39]中常用的选择。
我们还探索Lin等人最近提出的另一个更有效的骨干[27],称为特征 金字塔网络(FPN)。FPN使用具有横向连接的自顶向下架构从单一比例输入构建网络内特征金字塔。更快的R-CNN与FPN骨骼根据其规模从不同层次的特征金字塔中提取RoI特征,但其他方法类似于香草ResNet。使用ResNet-FPN主干用Mask R-CNN进行特征提取可以提高精度和速度。关于FPN的更多细节,我们推荐读者阅读[27]。
对于网络主干,我们密切关注以前工作中提出的架构,并在其中添加完全卷积的掩码预测分支。 具体而言,我们将ResNet [19]和FPN [27]论文中的R-CNN盒头更加倾斜。详细信息如图4所示。ResNet-C4主干上包含ResNet的第5级(即9层'res5'[19]),这是计算密集型的。 对于FPN,骨干已经包含res5,因此允许使用更少滤波器的更高效的头部。
我们注意到我们的掩膜分支有一个简单的结构。 更复杂的设计有可能提高性能,但不是这项工作的重点。
图4.头架构:我们扩展了两个现有的更快的R-CNN头[19,27]。 左/右面板分别显示来自[19]和[27]的ResNet C4和FPN骨干的头部,其中添加了掩膜分支。 数字表示空间分辨率和通道。 箭头表示可以从上下文推断的conv,deconv或fc图层(conv会保留空间维度,而deconv会增加它)。 所有的转换都是3×3,除了输出转换为1×1,解压缩为2×2和步长2,并且我们在隐藏层中使用了ReLU [31]。 左:res5表示ResNet的第五阶段,为简单起见,我们修改了第一阶段的第一阶段,以步幅1(而不是14×14 /步幅2,如[19]中的7×7阶段)运行。 右:“×4”表示一连串四次转换。
3.1 实现细节
我们在现有的快速/更快的R-CNN工作之后设置超参数[12,36,27]。尽管这些决策是在原始文件中进行对象检测的[12,36,27],但我们发现我们的实例分割系统对它们是强健的。
训练:与Fast R-CNN一样,如果RoI的IoU的正确标注框至少为0.5,则认为是正面的,否则为负面。 掩码丢失Lmask仅在正RoI上定义。 掩码目标是RoI与其关联的正确标注蒙版之间的交集。
我们采用图像中心训练[12]。 调整图像的大小以使其比例(较短的边缘)为800像素[27]。 每个微型批次每个GPU有2个图像,每个图像具有N个采样的RoI,比例为1:3的正负极[12]。 C4骨架的N为64(如[12,36]),FPN为512(如[27])。 我们在8个GPU上进行训练(因此有效的最小批量为16),进行160k次迭代,学习率为0.02,在迭代120k时减少10。 我们使用0.0001的重量衰减和0.9的动量。 使用ResNeXt [45],我们每个GPU训练1个图像,迭代次数相同,初始学习率为0.01。
RPN锚位跨越5个尺度和3个纵横比,随后[27]。 为了方便消融,RPN被单独训练,并且不与掩模R-CNN共享特征,未详细说明。 对于本文中的每个条目,RPN和Mask R-CNN具有相同的主干,因此它们可共享。
推论:在测试时,C4主干的提案编号为300(如[36]),FPN的提案编号为1000(如[27])。 我们对这些提议运行盒子预测分支,然后是非最大抑制[14]。 然后将掩码分支应用于得分最高的100个检测框。 虽然这与训练中使用的并行计算不同,但它加快了推断速度并提高了准确性(由于使用更少,更准确的RoI)。 掩模分支可以根据RoI预测K个掩模,但是不设置其中k是由分类分支预测的类别。然后将m×m浮点数掩模输出调整为RoI大小,并且二进制化为阈值0.5。
请注意,由于我们仅在前100个检测框中计算掩码,Mask R-CNN为其较快的R-CNN对象(例如典型模型上的〜20%)增加了一个小的开销。
4 实验:实例分割
我们对Mask R-CNN与最好的成果进行了彻底的比较,并对COCO数据集进行了全面的消融[28]。 我们报告了包括AP(平均在IoU阈值上),AP 50,AP 75和AP S,APM,AP L(不同规模的AP)在内的标准COCO满足度。 值得注意的是,AP正在使用掩膜IoU进行评估。 和以前的工作[5,27]一样,我们使用80k列车图像和val图像的35k子集(trainval35k)进行训练,并在剩余的5k val图像(微型)上重新端口消融。我们还报告了 测试开发[28]。
图5.在COCO测试图像上使用ResNet-101-FPN并以5 fps运行并带有35.7掩模AP(表1)的Mask R-CNN的更多结果。
表1. COCO test-dev上的实例分段掩码AP。 MNC[10]和FCIS [26]分别是2015年和2016年分类挑战的赢家。 没有花里胡哨之力,Mask R-CNN优于更复杂的FCIS +++,其中包括多尺度训练/测试,水平翻转测试和OHEM [38]。 所有条目都是单模型结果。
4.1 主要结果
我们将Mask R-CNN与表1中实例分割的最新方法进行了比较。我们模型的所有实例都优于先前最先进的模型的基线变体。 其中包括MNC [10]和FCIS [26],分别是2015年和2016年分类挑战的获胜者。 ResNet-101-FPN骨干网的Mask R-CNN无需花哨,其性能优于FCIS +++ [26],其中包括多尺度训练/测试,水平翻转测试和在线硬示例分析(OHEM)[38]。 虽然超出了本工作的范围,但我们预计许多此类改进将适用于我们的工作。
图2和图5中显示了掩膜R-CNN输出.Mask R-CNN即使在具有挑战性的条件下也能获得良好的结果。 在图6中,我们比较了我们的Mask R-CNN基线和FCIS +++ [26]。 FCIS +++在重叠的实例中展示系统性的人为因素,表明它受到实例分割的根本难度的挑战。 掩码R-CNN没有显示这样的缺陷。
图6. FCIS +++ [26](顶部)与Mask R-CNN(底部,ResNet-101-FPN)。 FCIS展示重叠对象的系统性缺陷。
表2.消融。 除非另有说明,否则我们在trainval35k上训练,在minival上测试,并报告mask AP。
4.2 消融实验
我们运行一些消融来分析Mask R-CNN。结果显示在表2中并在下面详细讨论。
架构:表2a显示了具有各种骨架的Mask R-CNN。 它受益于更深的网络(50对101)和先进的设计,包括FPN和ResNeXt。 我们注意到并非所有的框架都能自动从更深或更高级的网络中受益(参见[21]中的基准测试)。
多项式与独立式掩码:掩码R-CNN解耦掩码和类别预测:由于现有的盒式分支预测类别标签,因此我们为每个类别生成一个没有竞争类别的掩码(byaper-pixelsig-moid和二进制丢失)。 在表2b中,我们将其与使用每像素softmax和多项损失(如在FCN [30]中常用的)进行比较。 这种替代方案将掩模和类别预测的任务相结合,并导致掩模AP(5.5分)的严重损失。 这表明,一旦实体被分类为整体(通过盒子分支),就足以预测二元掩模而不用考虑类别,这使得模型更容易训练。
类特定与类不可知掩码:我们的默认内嵌预测类特定掩码,即每类一个m×m掩码。 有趣的是,具有分类掩码的掩码R-CNN(即预测单个m×m输出而不考虑类别)几乎同样有效:它具有29.7掩码AP,而对于ResNet-50-C4上的类别特定对应字段,具有30.3掩码。 进一步突出了我们的方法中的分工,这在很大程度上解除了分类和分割。
Roialign:我们建议的RoIlign层的评估如表2c所示。 在本次实验中,我们使用的是拥有16步的ResNet-50-C4主干。RoIAlign比RoIPool提高了约3分,其中很大一部分获得了高IoU(AP 75)。 RoIlign对最大/平均水池不敏感; 我们在本文的其余部分使用平均值。
另外,我们与在MNC [10]中提出的RoIWarp进行比较,该方法也采用双线性采样。 正如§3所讨论的那样,RoIWarp仍然量化了RoI,失去了与输入的一致性。 从表2c可以看出,RoIWarp的表现与RoIPool相当,比RoIlign差很多。这表明正确的对齐是关键。
我们还用一个ResNet-50-C5骨干来评估RoIlign,这个骨干有32个像素的更大步幅。 我们使用与图4(右)相同的头,因为res5头不适用。 表2d显示,RoIAlign可以使掩码AP提高7.3点,掩盖AP 75 10.5点(相对提高50%)。 此外,我们注意到,使用RoIAlign,使用步幅-32 C5功能(30.9 AP)比使用步幅-16 C4功能(30.3 AP,表2c)更精确.RALIAlign很大程度上解决了使用大步功能的长期挑战 检测和分割。
表3.对象检测单模型结果(边界框AP)与测试开发中的最新技术。 使用ResNet-101-FPN的Mask R-CNN优于所有以前的先进模型的基础变体(在这些实验中掩模输出被忽略)。 Mask R-CNN超过[27]的收益来自RoIlign(+1.1 AP bb),多任务训练(+0.9 AP bb)和ResNeXt-101(+1.6 AP bb)。
最后,与FPN一起使用时,RoIAlign显示1.5掩模AP和0.5盒AP的增益,FPN具有更精细的多级跨度。 对于需要更精细对齐的关键点检测,RoIAlign即使使用FPN也显示出较大的增益(表6)。
遮罩分支:分割是一个像素到像素的任务,我们通过使用FCN来利用遮罩的空间布局。 在表2e中,我们使用ResNet-50-FPN主干比较了多层感知器(MLP)和FCN。使用FCN给出了2.1 ML掩模AP增益。 我们注意到,我们选择了这个骨干,这样FCN头部的conv层没有经过预先训练,与MLP进行公平比较。
4.3 边界框检测结果
我们将Mask R-CNN与表3中最先进的COCO包围盒物体检测进行比较。对于这个结果,即使完整的Mask R-CNN模型被训练,只有分类和盒子输出用于 推理(掩码输出被忽略)。 使用ResNet-101-FPN的面罩R-CNN优于所有先前最先进型号的基础变型,包括G-RMI的单模型变型[21],COCO 2016检测挑战赛冠军。 使用ResNeXt-101-FPN,Mask R-CNN进一步改进了结果,与[39](使用Inception-ResNet-v2-TDM)的最佳单一模型条目相比,框AP的余量为3.0分。
作为进一步的比较,我们训练了一个版本的Mask R-CNN,但没有掩码分支,表3中的“Faster R-CNN,RoIlign”表示。由于RoIlign,这个模型比[27]中提出的模型表现更好。 另一方面,0.9分盒AP比Mask R-CNN要低。因此掩模R-CNN在盒检测上的这种差距仅仅是由于多任务训练的好处。
最后,我们注意到Mask R-CNN在其掩模和盒AP之间获得了一个小间隙:例如,在37.1(掩模,表1)和39.8(框3)之间的2.7个点。 这表明我们的方法在很大程度上缩小了对象检测与更具挑战性的实例分割任务之间的差距。
4.4 计时器
推论:我们训练了一个ResNet-101-FPN模型,该模型在R-CNN更快的四步训练之后训练RPN和Mask R-CNN阶段之间的特征[36]。 Nvidia Tesla M40 GPU(加上15ms CPU时间,将输出调整为原始分辨率)时,该模型以195ms的速度运行,并实现与非共享模式相同的掩模AP。 我们还报告说,ResNet-101-C4变体需要400毫秒,因为它具有较重的盒子头(图4),所以我们不建议在实践中使用C4变体。
尽管Mask R-CNN速度很快,但我们注意到我们的设计并未针对速度进行优化,并且可以实现更好的速度/精度折衷[21],例如,通过改变图像尺寸和提案编号,这超出了本论文的范围。
训练:Mask R-CNN训练也很快。 在COCO trainval35k上使用ResNet-50-FPN进行训练的同步8 GPU实现需要32小时(每16图像小批量0.72s),使用ResNet-101-FPN需要44小时。 实际上,快速原型设计可以在不到一天的时间内在训练集上进行训练时完成。 我们希望这种快速训练能够消除该领域的一个主要障碍,并鼓励更多的人对这个具有挑战性的话题进行研究。
5 Mask R-CNN用于人体姿态估计
我们的框架可以很容易地扩展到人体姿态估计。 我们将关键点的位置建模为一个单独的热掩模,并采用掩模R-CNN预测K个掩模,每个K个关键点类型(例如,左肩,右肘)都有一个掩模。此任务有助于展示Mask R-CNN。
我们注意到,我们的系统利用了人体姿态的最小领域知识,因为这些实验主要是为了展示掩模R-CNN框架的一般性。我们期望领域知识(例如,建模结构[6])将会是我们简单方法的补充。、
实现细节:在对关键点进行调整时,我们对分割系统进行了细微的修改。对于实例的每个K关键点,训练目标是一个热点m×m二进制掩码,其中只有一个像素被标记为前景。 在训练过程中,对于每个可见的地面真值关键点,我们将m 2路softmax输出(它鼓励单个点被检测到)上的交叉熵损失最小化。 我们注意到,与实例分割一样,K关键点仍然是独立处理的。
图7.使用Mask R-CNN(ResNet-50 FPN)在COCO测试中的关键点检测结果,以及从相同模型预测的人分割掩码。 该模型的关键点AP为63.1,运行速度为5 fps。
表4(左). COCO test-dev上的关键点检测AP。 我们是以5 fps运行的单一型号(ResNet-50-FPN)。 CMU-Pose +++ [6]是2016年比赛的获胜者,它使用多尺度测试,CPM后处理[44],以及使用物体检测器进行过滤,累积约5分(通过个人通信进行澄清)。 使用两种模型(用于边界框检测的Inception-ResNet-v2和用于关键点的ResNet-101)对-RMI进行COCO加MPII [1](25k图像)的训练。
表5(右).关于人物类别的盒子,面具和关键点的多任务学习,在迷你游戏上评估。 所有的参赛作品都使用相同的数据进行公平比较。 骨干是ResNet-50-FPN。 minival上的64.2和64.7 AP的条目分别具有62.7和63.1的测试开发AP(参见表4)。
表6. RoIlign与RoIPool用于微型关键点检测。 骨干是ResNet-50-FPN。
我们采用ResNet-FPN变体,关键点头结构与图4(右)相似。 关键点头由8个3×3 512-d的conv层组成,其后是去卷积层和2倍双线性放大,产生56×56的输出分辨率。 我们发现对于关键点级别的定位精度需要相对较高的分辨率输出(与掩模相比)。
模型在所有包含注释关键点的COCO trainval35k图像上进行训练。 为了减少过拟合,由于该训练集较小,我们使用从[640,800]像素随机采样的图像比例进行训练; 推断是在800像素的单一尺度上进行的。 我们训练90k迭代,从0.02的学习率开始,在60k和80k迭代时将其减少10。 我们使用边界框NMS,阈值为0.5。 其他细节与§3.1中的相同。
主要结果和消融:我们评估人员关键点AP(AP kp)并用ResNet-50-FPN骨干进行实验; 将在附录中研究更多的骨干。表4显示我们的结果(62.7AP kp)比使用多级处理流水线的COCO 2016关键点检测优胜者[6]高0.9个点(见表4的标题)。 我们的方法相当简单快捷。
更重要的是,我们有一个统一的模型,可以在5 fps下运行时同时预测盒子,分段和关键点。 添加段分支(针对人员类别)将测试开发中的AP kp提高到63.1(表4)。 更多关于迷你多任务学习的消除见表5.将掩码分支添加到仅限盒子(即更快的R-CNN)或仅有关键点的版本可持续改进这些任务。 但是,添加关键点分支会略微减少方框/掩码AP,这表明虽然重点检测可从多任务培训中受益,但它不会帮助其他任务。 尽管如此,联合学习所有三项任务使统一系统能够同时有效地预测所有输出(图7)。
我们还调查RoIAlign对关键点检测的影响(表6)。 虽然这款ResNet-50-FPN主干具有更精细的步幅(例如,最好的级别为4个像素),但RoIAlign仍然显示出比RoIPool有明显改善,AP值提高4.4点。 这是因为关键点检测对定位精度更敏感。 这再次表明,对齐对像素级本地化至关重要,包括掩码和关键点。
鉴于Mask R-CNN提取对象边界框,掩码和关键点的有效性,我们预计它将成为其他实例级任务的有效框架。
表7. Cityscapes val('AP [val]'列)和测试(剩余列)集的结果。 我们的方法使用ResNet-50-FPN。
附录A:城市风景的实验
我们进一步报告Cityscapes [7]数据集上的实例分割结果。 该数据集对2975列车,500 val和1525测试图像具有良好的注释。 它有20k个没有实例注释的粗糙训练图像,我们不使用它。 所有图像都是2048×1024像素。实例分割任务涉及8个对象类别,其中精细训练集上的实例数目为:
此任务上的实例分段性能由COCO式掩模AP(通过IoU阈值进行平均)来衡量; 也报告AP 50(即,IoU为0.5的掩码AP)。
实施:我们将我们的Mask R-CNN模型与ResNet-FPN-50骨干一起使用; 我们发现由于数据集的大小很小,101层对应表现相似。我们训练图像尺度(短边)随机采样从[800,1024],这减少过拟合; 推断是在1024像素的单一尺度上进行的。 我们在每个GPU上使用1个图像的小批量(在8个GPU上使用8个),并对模型进行24k次迭代训练,从学习率0.01开始,在18k迭代时将其降至0.001。 在此设置下,单个8 GPU计算机需要花费约4小时的培训时间。
结果:表7将我们的结果与val和测试集上的现有技术进行比较。 在不使用粗糙训练集的情况下,我们的方法在测试中达到26.2 AP,相对于以前的最佳条目(DIN [3]),相对提高30%以上,并且也优于SGN 25.0的同时工作[29]。 DIN和SGN都使用精细+粗糙的数据。 与仅使用精细数据(17.4 AP)的最佳条目相比,我们实现了约50%的改进。
对于个人和汽车类别,Cityscapes数据集展示了大量类别内重叠实例(平均每个图像6人和9辆汽车)。 我们认为,类别内重叠是实例分割的核心难点。 我们的方法显示,对于其他最佳条目,这两个类别都有了很大的改进(即相对于人员从21.8提高到40.5%,从39.4提高到30.5,车辆提高了20%,从39.4提高到46.9),尽管我们的方法没有利用粗略数据。
Cityscapes数据集的一个主要挑战是在低数据情况下训练模型,特别是卡车,公共汽车和火车的类别,每个类别都有大约200-500个训练样本。 为了部分解决这个问题,我们使用COCO预培训进一步报告结果。 为此,我们从预先训练好的COCO Mask R-CNN模型(骑手被随机初始化)初始化Cityscapes中相应的7个类别。 我们对这个模型进行微调,进行4k次迭代,其中学习速率在3k次迭代时降低,考虑到COCO模型,这需要约1小时的训练时间。
COCO预先训练的Mask R-CNN模型在测试中达到了32.0 AP,比精细对手提高了近6个点。 这表明培训数据的重要作用。 它还表明,城市风景的方法可能会受到他们低迷学习表现的影响。 我们证明使用COCO预训练是对这个数据集的有效策略。
最后,我们观察到val和测试AP之间存在偏差,从[23,4,29]的结果中也可以看出。 我们发现,这种偏见主要是由卡车,公共汽车和火车类别造成的,纯罚款模型的val / test AP分别为28.8 / 22.8,53.5 / 32.2和33.0 / 18.6。 这表明这些类别存在域名转移,这些域名也很少有培训数据。 COCO预培训有助于提高这些类别的最佳结果; 然而,域位移分别持续38.0 / 30.1,57.5 / 40.9和41.2 / 30.9 val / test AP。 请注意,对于人员和汽车类别,我们没有看到任何此类偏差(val / test AP在±1点内)。
表8.在COCO minival上增强Mask R-CNN的检测结果。 每行为上面的行添加一个额外的组件。为了符号简洁,我们用'X'表示ResNeXt模型。
表9. COCO minival上Mask R-CNN增强的关键点结果。 每行添加一个额外的组件到上面的行。这里我们只使用关键点注释,但没有掩码注释。为了简洁起见,我们用'R'和ResNeXt用'X'来表示ResNet。
附录B:关于COCO的增强结果
作为一个通用框架,Mask R-CNN与为检测/分割开发的补充技术兼容,包括对快速/更快的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的数量,显示掩模R-CNN框架具有很好的一般性。 我们接下来详细介绍改进。 这些结果以及未来的更新可以通过我们在https://github.com/facebookresearch/Detectron上发布的代码进行复制,并且可以作为未来研究的更高基线。
更新后的基线:我们从更新后的基线开始,使用一组不同的超参数。 我们将训练延长到180k迭代,其中在120k和160k迭代时学习速率减少10。 我们还将NMS阈值更改为0.5(默认值为0.3)。 更新的基线有37.0掩模AP和40.5盒AP。
端到端训练:以前的所有成果都采用分阶段训练,即训练RPN为第一阶段,掩模R-CNN为第二阶段训练。 在[37]之后,我们评估联合培训RPN和Mask R-CNN的端到端('e2e')培训。 我们采用[37]中的'近似'版本,仅通过忽略梯度w.r.t来计算RoIAlign层中的部分梯度。 RoI坐标。 表8显示,e2e训练将掩蔽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],我们观察到0.5掩模AP和0.6盒AP的增加。 这表明一个更深的模型仍然可以改善COCO的结果。
使用最近提出的非局部(NL)模型[43],我们实现了40.3掩模AP和45.0盒AP。 这一结果没有测试时间增强,并且测试时该方法在Nvidia Tesla P100 GPU上以3fps运行。
测试时间增量:我们将使用[400,1200]像素的缩放比例评估的模型结果与100的步长以及它们的水平翻转结合起来。 这给了我们41.8掩模AP和47.3盒AP的单模型结果。
以上结果是我们提交COCO 2017比赛的基础(其中也使用了一个合奏组合,这里不再讨论)。 据报道,实例分割任务的前三名获胜团队都是基于Mask R-CNN框架的扩展。
关键点检测
我们报告了表9中关键点检测的增强结果。作为更新的基线,我们将训练计划扩展到130k次迭代,其中在100k和120k迭代时学习速率降低了10。 这将AP值提高约1个点。 用ResNet-101和ResNeXt-101替代ResNet-50可分别将AP kp提高到66.1和67.3。
利用最近称为数据精馏的方法[35],我们可以利用COCO提供的额外的120k无标签图像。 简而言之,数据提炼是一种自我训练策略,它使用训练有标签数据的模型来预测未标记图像上的注释,并用这些新注释来更新模型。 面具R-CNN为这种自我培训战略提供了一个有效的框架。 通过数据提炼,Mask R-CNN AP kp提高1.8点至69.1。 我们观察到Mask R-CNN可以从额外的数据中获益,即使这些数据没有标签。
通过使用与实例分割相同的测试时间增强,我们将AP kp进一步提升至70.4。
致谢:我们要感谢Ilija Radosavovic对代码发布和增强结果的贡献,以及Caffe2工程团队的支持。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)