Mask R-CNN

    该论文于2017年3月首次上传至arxiv,2018年1月份更新至第三版,并在版本中公布了源码。本文主要介绍第三版中涉及的内容,并按照论文的行文结构组织进行呈现。另,第五章节及附录内容不作翻译。文中如有理解偏差,请各位指正。

摘要    

    本文提出一个简单、灵活、通用的物体实例分割框架,Mask R-CNN。该框架是在Faster R-CNN框架上添加一条并行于边界框识别的预测物体掩膜分支。Mask R-CNN容易训练,在GPU上测试可达到5fps,效率上略逊于Faster R-CNN。另外,该框架很容易扩展到其他任务,如人的姿态估计。作者在COCO数据集的实例分割、物体检测和人体关键点检测三项任务中均取得了各任务的最好结果。没有外加策略的情况下,Mask R-CNN比所有单模型在COCO数据集的各项任务上的效果都好,包括2016年的竞赛冠军。作者希望这个简单有效的方法作为一个研究的基础,也可以帮助未来实例分类方向的研究。代码公布在https://github.com/facebookresearch/Detectron

1.引言

    视觉领域在短时间内快速提升了物体检测和语义分割的效果。这些进步在很大程度上得益于强有力的基础系统,如检测方向的Fast/Faster R-CNN和语义分割方向的全卷积网络(FCN)。上述方法概念直观,并具有灵活性、鲁棒性和快速的训练测试时间。本文中作者的目的是在实例分割方向开发一个可媲美的架构。

    实例分割具有挑战性,因为不仅需要准确检测出图像中的所有物体,同时还需要准确分割每个实例。因此它组合了计算机视觉中的两大经典方向,即分类并使用外接矩形框包围物体的检测方向和不区分物体实例的同时将每个像素识别为一定类别集的语义分割。(根据通用术语,作者使用物体检测来表示通过边界框而不是掩膜的检测;语义分割来表示每个像素级的分类而不需要区分不同实例。但是作者注意到实例分割即是语义的,也是检测的一种形式)。基于此,人们可能期望通过复杂的方法来获得好的实例分割效果。然而,作者表示一个异常简单、灵活、快速的系统可以超过之前实例分割最好的效果。


    作者的方法叫Mask R-CNN,是通过对Faster R-CNN添加一条预测感兴趣区域(ROI)分割掩膜的分支获得,该分支并行于现有的分类和外接矩形框回归的分支(如图1)。掩膜分支是应用于ROI的小型FCN,它以像素级的方式预测分割掩膜。考虑到Faster R-CNN有助于广泛灵活的框架设计,Mask R-CNN很容易实现和训练。另外,掩膜分支仅增加了一点计算成本,使获得一个快速系统和快速实验成为可能。

    原则上,Mask R-CNN是对Faster R-CNN一种直观的扩展,但是恰当的构建掩膜分支对于获得好的效果至关重要。最重要的是,Faster R-CNN没有针对网络输入和输出间像素级的校准进行设计。这在RoiPool采用粗糙的空间归一化方式实现特征提取时最明显,事实上Pool是涉及到实例对象时最核心的处理。为了修复不匹配(misalignment),作者提出一个简单的、无需量化的层:RoIAlign,它保留了确切的空间位置。尽管看起来只是一个小的改变,但是RoIAlign的影响却很大:将掩膜精度提高了10%至50%,这表明在更严格的定位指标下取得了更大的收益;其次,作者发现有必要将掩膜和类别预测进行解耦:作者为每个类别独立的预测一个二分类掩膜,这不会引起类别间的竞争。另一方面,作者依靠网络的RoI分类分支来预测类别。不同的是,FCN通常对像素进行多分类,这将分割和分类进行了耦合,而且作者通过实验表明,多分类对于实例分割的效果较差。

    不增加策略的情况下(without bells and whistles),Mask R-CNN超过所有单模型在COCO实例分割任务的效果,包括使用大量工程技巧的2016年竞赛冠军。作为分割的副产品,作者的方法也超过了COCO检测任务的效果。通过ablation实验,作者评估了多个基础因素,基于此展示其鲁棒性同时分析关键因素的影响。

    文中的模型在GPU上运行速度大约为200ms每帧,在8个GPU的机器上,对COCO数据集的训练时间为1到2天。作者相信,快速的训练和测试速度,加上框架的灵活性和准确性,这些将使未来实例分割的研究受益。

    最后,通过COCO数据集中基于关键点的人体姿势估计任务,作者展示了文中框架的可扩展性。通过将每个关键点视为一个one-hot二分类掩膜,微调Mask R-CNN网络就可检测特定实例的姿势。Mask R-CNN超过了2016年COCO关键点竞赛冠军的效果,同时运行速度为5fps。因此,Mask R-CNN可被广泛视为实例级别分类上的灵活框架,并且可被扩展至更复杂的任务中。

    作者已经公布源码,以便进一步的研究。

2.相关工作

R-CNN: 基于区域做CNN(R-CNN)的边界框物体检测方法参与到管理候选物体区域的数目上,并对每个RoI独立运行卷积网络。通过RoIPool,R-CNN被扩展应用到特征图上的RoI,这提升了算法的速度和准确性。通过Region Proposal Network(RPN)学习注意力机制的方式,Faster R-CNN改进了之前的工作流程。Faster R-CNN对后来的许多改进具有灵活性和鲁棒性,也是当前几个方向的基准中先进的架构。

实例分割:受R-CNN有效性的启发,许多实例分割的方法是基于候选区域做的分割。早期的方法通过自下向上的方法分割。DeepMask及之后的工作是先产生分割候选区,然后利用Fast R-CNN进行分类。这些方法中先做分割再做分类,这样速度慢且准确性低。类似的,Dai等人提出一种复杂的多阶段级联的方法:从边界框候选区域中预测分割候选区域,然后对其进行分类。相反,作者是基于掩膜和类别标签并行预测实现的,这样更简单、灵活。

    最近,Li等人[8]中分割候选区域系统和[11]中物体检测系统融合成”全卷积实例分割“(FCIS)。这三篇文章中的共同思想是全卷积地预测一个位置敏感的输出通道的集合。这些通道同时表明物体类别,边界框和掩膜,从而使系统快速运行。但是对于重叠实例,FCIS会有系统错误,并且生成伪边缘,(如图6),这表明分割实例的基础难点很具有挑战性。

    另一类实例分割的解决方案[23,4,3,29]是受到语义分割成功的启发。从像素级的分类结果(如FCN 输出)开始,这些方法尝试将同一类别的像素分到不同的实例上。不同于这些方法中基于分割第一的策略,Mask R-CNN基于实例第一的策略。作者期望未来可以在这两个策略上进行深入研究。

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检测算法。Faster R-CNN包括两个阶段。第一阶段叫Region Proposal Network(RPN),用来产生物体的候选边界框;第二阶段是Fast R-CNN的精髓,利用RoIPool为每个候选框提取特征,并执行分类和边界框回归。两个阶段都使用的特征可以被共享以加快inference。作者建议读者查看[21]来获得Faster R-CNN和其他框架间最新的、综合性的对比。

Mask R-CNN: Mask R-CNN也是采用两阶段的处理流程,并且第一阶段和Faster R-CNN是相同的(即RPN)。第二阶段中,Mask R-CNN还为每个RoI输出一个二分类的掩膜,这与预测类别和box偏移是并行输出的。不同于最近大部分基于掩膜预测进行分类的系统,作者的方法继承了Fast R-CNN的精髓,即将分类和检测并行输出(结果证明这大大简化了基础R-CNN多阶段的处理流程)。

    通常,在训练阶段,作者会对每个RoI样本定义一个多任务的损失函数,如。其中类别损失和边界框损失与文献[12]中的定义相同。掩膜分支对每个RoI有一个维的输出,它表示m*m维的RoI输出K个二分类的掩膜。这里,作者在像素级应用sigmoid函数,表示平均二分类的交叉熵损失函数。对于每个具有真实类别k的RoI,仅对第K个掩膜进行计算(不计算其他掩膜产生的损失)。

    作者关于的定义,允许网络为每个类别产生掩膜而不会造成类间的竞争;作者依靠专用的分类分支预测类别标签,同时类别标签也被用于选择输出掩膜。这样将掩膜和类别预测解除耦合。这不同于语义分割中应用FCNs[30]的常规操作,即通常使用像素级的softmax函数和多项交叉熵损失。这种情况下,不同类比的掩膜间存在竞争;而作者使用针对每个像素的sigmoid和二分类损失则不会造成类间竞争。作者通过实验表明这种计算方式对实例分割取得的好结果至关重要。

掩膜表示: 掩膜是对输入物体空间分布的编码。这样,不同于类别标签或边界框偏移这些不可避免的会被全连接层折叠为短的输出向量,提取掩膜的空间结构可以通过卷积获得像素级的对应关系来很自然地解决。

    特别地,作者使用一个FCN[30]网络为每个RoI预测m*m大小的掩膜。这需要掩膜分支的每一层保持明确的m*m的空间布局,而不能将其折叠为缺乏空间维度的表示向量。不同于之前利用全连接层进行掩膜预测的方法,作者采用的全卷积表示方法需要更少的参数,实验证明这种方式也更加准确。

    这种像素级的操作需要RoI特征可以被很好的校准以便真实地保留像素的空间对应关系,且RoI特征就是分辨率很小的特征图。这激发作者开发RoiAlign层,它在掩膜预测中起到了关键性的作用。

RoiAlign: RoIPool[12]是对每个RoI提取小的特征图(如7*7)的标准操作。RoIPool首先将浮点数坐标的RoI量化为特征图上的离散值,然后将量化后的RoI细分为已经被量化后的空间子区域(bins)(RoI大小不能被bin值整除时,bin值被量化),最终对每个子区域(bin)内的特征值进行汇总(通常利用最大化池化的方法)。(上述处理中),量化操作被执行,如对连续坐标x计算[x/16],其中16表示特征图的步长,[.]表示取整函数。类似的,划分子区域(bins)(如7*7)时也存在量化操作。这些量化操作导致了RoI和提取特征间的错位,这种错位可能不会影响对小偏移具有鲁棒性的分类,但会对预测像素精度的掩膜产生巨大的负面影响。


    针对这个问题,作者提出RoIAlign层用于去除RoIPool严格的量化操作,正确对齐输入提取的特征。作者提出的改变很简单:避免边界或bins的任何量化(如使用x/16而不是[x/16]).作者使用双线性插值[22]来计算每个RoI bin在输入特征的四个常规采样位置的准确值,然后汇总结果(使用最大化或平均化),详见图3所示。作者注意到,只要不执行量化操作,结果对具体的采样位置和采样点的数目不敏感。

    如4.2章节中展示的,RoIAlign导致了算法效果很大的提升。作者也和论文[10]中的RoIWarp操作进行了对比。不同于RoIAlign,RoIWarp忽略了对齐问题,在论文[10]中的实现方式类似于RoIPool中对RoI的量化。因此,即使RoIWarp受论文[22]中双线性插值的启发,但实验表明其效果和RoIPool不相上下(详见表2c),这都表明了对齐的重要作用。

    网络结构: 为表明作者方法的一般性,作者利用多个网络结构来实例化Mask R-CNN。为清楚起见,作者对两部分内容进行区分,即对整张图进行特征提取的卷积主干架构和负责对每个RoI进行边界框识别(分类和回归)以及掩膜预测的网络。

    作者用命名网络深度特征的方法来表示主干架构。作者评估了深度为50或101层的ResNetResNeXt。Faster R-CNN的原始实现中,利用ResNets从最后卷积层的第四个阶段提取特征,作者称之为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]


    对于网络头部,作者紧跟先前工作中的架构来添加全卷积掩膜分支。特别地,作者扩展了Faster R-CNN边界框任务作为ResNet[19]和FPN[27]的网络头。详见图4。ResNet-C4骨干网的头部包括ResNet的第5个阶段(也就是说第9层的'res5'[19]),它是计算密集型的。对于FPN而言,骨干网已经包含res5,这样可以使用更少滤波器获得更有效的网络头。

    作者注意到他们设计的掩膜分支结构简单。更复杂的设计有可能提升网络性能,但不是本文关注的重点。

3.1 实现细节

    作者根据已有的Fast/Faster R-CNN论文[12, 36, 27]来设计超参。尽管那些设计在原文中是为物体检测设计的,作者发现实例分割系统对其具有鲁棒性。

训练: 如同Fast R-CNN中的规则,一个RoI如果和其真实边界框的IoU大于等于0.5则被视为正样本,否则为负样本。掩膜损失函数仅对正样本的RoIs有效。掩膜目标是RoI和其对应的真实掩膜间的交集。

    作者采用图像为中心的训练方式[12]。图像被缩放至短边为800像素[27]。最小批处理的大小为单GPU上运行2张图,每张图生成N个采样RoIs,正负样本比例为1:3。对于C4和FPN骨干网而言,N分别为64(和论文[12,36]中相同)512(和论文[27]中相同)。作者在8个GPUs(因此实际批处理大小为16)上训练16万次,采用0.02的初始学习率,且在12万次迭代后变为0.002。作者采用0.0001的权重衰减和0.9的momentum。对于ResNeXt[45]而言,作者在每个GPU上运行1张图,相同的迭代次数,初始学习率为0.01。

    根据论文[27],RPN anchors共有5个尺度和3个长宽比。为方便进行ablation实验,RPN单独训练,除非特别说明,RPN不与Mask R-CNN共享特征。对于本论文中的所有条目,RPN和Mask R-CNN使用相同的骨干网,因此他们是共享的。

Inference: 测试时,对于C4和FPN主干网而言,每张图的候选区域数分别为300(和论文[36]中的数目相同)和1000(和论文[27]中的数目相同),然后应用非极大值抑制算法[14]。然后将置信度前100的检测框进行掩膜预测。尽管这样做不同于训练时的平行计算,但加快了Inference时间并提高了准确性(由于使用了更少,更可靠的RoIs)。掩膜分支为每个RoI预测K个类别数的掩膜,但作者仅使用第k类的掩膜,其中k是分类分支预测的类别。m*m浮点数掩膜输出被归一化到RoI大小,并以0.5的阈值进行二值化。

4. 实验:实例分割

    作者将Mask R-CNN和最先进的分割算法在COCO数据集[28]上进行了彻底比较,并进行了全面的ablation实验。作者公布了标准的COCO指标,包括AP(IoU阈值上的平均值),(不同尺度上的AP)。除非说明,AP是针对掩膜的IoU的计算。和先前的工作一样[5,27],作者使用8万的训练图和3.5万验证图(trainval35k)作为训练集,在剩余的5千张验证图上做实验。作者也公布了测试集[28]上结果。


4.1. 主要结果

    作者将Mask R-CNN和最先进的实例分割算法进行比较,如表1所示。作者的所有模型均优于先前最新进模型基准量。这包括MNC[10]和FCIS[26],它们分别是COCO数据集分割竞赛2015年和2016年的冠军。不外加其他策略的情况下(without bells and whistles),以ResNet-101-FPN为主干网的Mask R-CNN优于FCIS++[26],后者包含多尺度的训练和测试,水平翻转和在线困难样本挖掘(OHEM)[38]。番外篇,作者希望可以应用许多那样的改进。

    Mask R-CNN的输出可查看图2和图5。即使在具有挑战性的场景中,Mask R-CNN可以输出好的结果。图6中,作者比较了Mask R-CNN和FCIS++[26]的基准情况。FCIS++在重叠实例上表现出系统性的伪影(systematic artifacs),这表明实例分割的基础难点对其还是有挑战性的。Mask R-CNN没有这样的伪影。


4.2 Ablation 实验


    作者做了大量的ablations来分析Mask R-CNN。结果如表2所示,后文做详细讨论。

网络结构:表2a显示了Mask R-CNN使用了不同的骨干网络。它受益于FPN和ResNeXt更深层的网络(50层对比101层)和先进的设计。作者注意到,不是所有的网络都能自动的受益于深层或先进的网络(查看[21]中的基准)。

多个vs.单个独立掩膜: Mask R-CNN解耦了掩膜和类别预测的任务:当现有的边界框分支预测类别标签时,Mask R-CNN为每个类别生成掩膜,且不存在类间竞争(由对每个像素执行sigmoid函数和二分类的损失计算决定)。在表2b中,作者将其与对像素执行softmax函数和多分类损失(如FCN[30]中常用的那样)进行了对比。这两者将掩膜和类别预测任务进行了耦合,导致掩膜AP的严重下降(5.5个百分点)。实验表明一旦实例被认为是一个整体(检测分支判定的),就有充分的理由预测一个二分类掩膜而不用关系类别,这样使得模型更容易训练。

特定类vs.未知类的掩膜: 作者的算法中默认是针对特定类别的掩膜,如每类有一个m*m的掩膜。有趣的是,Mask R-CNN对于未知类别(如预测m*m的输出而忽略类别信息)几乎是等效的:以ResNet-50-C4来说,对已知类别和未知类别的AP分别为30.3和29.7。这进一步突出了作者方法中的分工,即在很大程度上对分类和分割解除了耦合。

RoIAlign: 作者等人提出的RoIAlign层的实验结果如表2c所示。这个实验中,作者使用的是ResNet-50-C4骨干网,步长是16。RoIAlign比RoIPool提高了大约3个百分点,且对于高的IoU而言(),提高的更多。RoIAlign对于最大化或评价池化不敏感;论文的后半部分使用的是平均池化。

    另外,作者也将其与论文MNC[10]中提出的RoIWarp进行了比较,后者也使用了双线性采样的方法。如第三章节讨论的内容,RoIWarp仍然对RoI进行了量化,损失了和输入间的校准。如表2c中展示的那样,RoIWarp和RoIPool的结果差不多,都比RoIAlign的结果要差。这表明了正确的校准是关键。

    作者还评价基于ResNet-50-C5主干网的RoIAlign运行后的结果,该网络采用了更大的32个像素的步长。使用的是和图4(右侧)相同的头网络,因为res5头网络不适用。表2d表明RoIAlign提高了掩膜的AP和分别高达7.3和10.5个点(相对50%的提高)。此外,作者注意到使用RoIAlign时,步长为32的C5特征(30.9的AP)比步长为16的C4特征(30.3的AP,表2c)的结果更准确。RoIAlign很大程度上解决了长期以来检测和分割使用大步长特征的挑战。

    最后,当使用FPN时,其拥有更精细的多尺度步长,使得RoIAlign额外获得1.5的掩膜AP和0.5的检测框AP(未找到论文数据)。对于需要精细校准的关键点检测而言,使用FPN时,RoIAlign获得更大的AP。

掩膜分支:分割是像素级的任务,作者使用FCN探索了掩膜的空间分布。表2e中,作者等人比较了多层感知器(MLP)和FCNs,采用的是ResNet-50-FPN的主干网。作者注意到选择ResNet-50-FPN主干网是为了FCN头网络的卷基层没有预训练,是对MLP较公平的对比方式。

4.3 边界框检测结果


    作者在表3中展示了Mask R-CNN和最新技术在COCO检测任务上的结果。对于这个结果,是对Mask R-CNN整个模型进行训练,但测试时只输出分类和检测信息(忽略了掩膜输出)。使用ResNet-101-FPN作为主干网的Mask R-CNN,其性能超过了先前所有最新进模型的基础变体,包括GRMI[21]的单模型变体,它是COCO2016年检测竞赛的冠军。使用ResNeXt-101-FPN时,Mask R-CNN进一步提高了结果,检测AP值超过之前最好的单模型[39](使用Inception-ResNet-v2-TDM网络)。

    为了进一步比较,作者训练了没有掩膜分支的Mask R-CNN,在表3中表示为”Faster R-CNN, RoIAlign“。由于RoIAlign的原因,这个模型比[27]中的模型结果要好。另一方面,其AP值比Mask R-CNN的值低0.9个点。Mask R-CNN在检测上的这点差距仅仅是由于多任务训练带来的好处。

    最后,作者等人注意到,Mask R-CNN在掩膜和检测AP上获得了一个小的间隔,如(表1中掩膜AP)37.1和(表3中检测AP)39.8间的2.7个点。这表明,作者的方法大大减小了检测和更具挑战性的实例分割任务的差距。

4.4 时间

Inference: 作者根据Faster R-CNN[36]4步训练的步骤训练了一个ResNet-101-FPN模型,该模型在RPN和Mask R-CNN阶段共享特征。模型在Nvidia Tesla M40 GPU上的测试时间为每张图195ms(包括在cpu上将输出缩放为原分辨率图像的15ms),并且和未共享特征的模型实现了相同的掩膜AP。作者等人发现ResNet-101-C4变体耗时大约400ms,因为它拥有更多计算量的box头网络(图4),因此在实际使用中不推荐使用C4变体

    尽管Mask R-CNN很快,作者注意到其设计没有对速度进行优化,并且更好的权衡速度和准确性可以被实现[21],如改变图像大小和候选区域数,这些超出了本文的范畴。

训练:Mask R-CNN也可以很快的进行训练。针对COCO trainval 35k数据集,利用ResNet-50-FPN网络在8个GPU上同步训练需要32个小时(16的最小批处理时间为0.72s),ResNet-101-FPN的需要44个小时。实际上,当在train集上训练时,快速模型可以在不到一天的时间内完成。作者希望如此快速的训练能去除该领域研究的一大障碍,鼓励更多的人研究这个具有挑战性的课题。


参考文献:

  1. ablation experiment,可查看知乎quora, oxfordgenscript。可理解为控制变量法。
  2. baseline & benchmark
  3. http://www.sohu.com/a/130903874_633698
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值