文章目录
- 一、介绍
- 二、相关工作
- 三、Mask RCNN
- 3.1 Mask RCNN基本流程
- 3.2 Mask RCNN 损失
- 3.3 RoIAlign 层设计
- 3.4 Mask RCNN网络结构
- 3.4 Mask RCNN训练
- 四、实验:实例分割
- 4.1 主要结果
- 4.2 消融实验
- 4.3 边界框检测结果
- 4.4 时间
Mask RCNN简介:
简单、灵活、通用的目标实例分割框架,可以有效地检测图像中的目标,同时为每个实例生成一个高质量的分割掩码(mask)。并且Mask R-CNN很容易推广到其他视觉任务、如关键点检测。
Mask RCNN是对Faster RCNN的扩展:
在Faster RCNN现有的目标检测分支上并行的添加一个添加目标掩码(mask)的分支,拓展了Faster RCNN。
一、介绍
目标检测和实例分割取得了很大的进步:
视觉社区在短时间内迅速提升了目标检测和语义分割的结果。这些进步都是由强大的基线系统推动的,比如分别用于目标检测和语义分割的Fast/Faster RCNN和全卷积网络(FCN)框架。这些方法在概念上是直观的,提供了灵活性和鲁棒性,以及快速的训练和推理时间。
实例分割:
目标检测——对单个目标进行分类,并使用边界框对每个目标进行定位。
语义分割——在不区分目标实例的情况下将每个像素分类为一组固定的类别。
实例分割——需要正确检测图像中的所有目标,同时还要精确地分割每个实例。因此,人们可能会认为需要一种复杂的方法来获得良好的结果。然而我们证明了一个令人惊讶的简单、灵活和快速的系统可以超越先前最先进的实例分割算法——Mask RCNN。
mask R-CNN:
(1)Mask分支:
在每个感兴趣区域(RoI)上添加一个用于预测分割掩码(mask)的分支来扩展Faster R-CNN,与现有的用于分类和边界盒回归的目标检测分支并行(上图)。掩码(mask)分支是应用于每个感兴趣区域(RoI)的一个小FCN,以像素到像素的方式预测分割掩码(mask)。mask分支只增加了一个小的计算开销,从而实现了一个快速的系统。
(2)RoIAlign层
原则上Mask RCNN是Faster R-CNN的直观扩展,但Faster RCNN并不是为网络输入和输出进行像素到像素对齐而设计的,正确构造掩码(mask)分支对于获得好的分割结果至关重要。
RoI Pool是处理实例的实际核心操作,对感兴趣区域(RoI)执行粗糙的空间量化以进行特征提取,这种粗糙的空间量化产生了很多偏差,我们提出了一个简单的、无需量化的层——RoIAlign,它保留了精确的空间位置。
RoIAlign一个看似微小的变化,却产生了巨大的影响:
(1)将掩码(mask)精度提高了10%到50%,并且在更严格的定位指标下显示出更大的收益。
(2)将掩码(mask)和类预测解耦是必要的——独立地为每个类预测一个二进制掩码,而不存在类间竞争,并且依赖网络的RoI分类分支来预测类别。(FCNs执行每像素的多类分类,它将分割和分类结合在一起)这种方法在实例分割方面效果优越。
Mask R-CNN性能:
在COCO实例分割任务上超过了所有先前最先进的单模型结果;我们的方法在COCO目标检测任务上也表现出色;在COCO-keypoint数据集上的能够实现人体姿势估计,显示了框架的通用性,很容易扩展到更复杂的视觉任务。
运行速度:模型在GPU上可以以每帧200毫秒的速度运行,在一台8-GPU机器上使用COCO进行训练只需要一到两天的时间。快速的训练和测试速度,加上框架的灵活性和准确性,Mask RCNN将有助于未来实例分割的研究。
二、相关工作
R-CNN: 基于区域的CNN(R-CNN)用于边界框目标检测,是关注一定数量的候选目标区域(RoI),独立评估每个RoI的卷积网络。Fast RCNN对R-CNN进行了扩展,允许使用RoI Pool处理特征图上的ROI,从而实现了快速和更高的精确度。Faster R-CNN通过学习区域建议网络(RPN)的注意机制提升了这一流程。Faster R-CNN具有强大的灵活性和健壮性,是当前几个基准测试中的领先框架。
实例分割:
在RCNN 的驱动下:许多实例分割方法都是基于分割建议,早期的方法采用自下而上的分割方法 ;DeepMask 和接下来的作品学习如何提出分割候选,再由Fast R-CNN分类;Dai等人提出了一种复杂的多级联算法,从包围盒方案中预测分割方案,然后进行分类。这些方法中,分割先于识别,速度慢,精度低。而我们的方法基于mask和类标签的并行预测更简单、灵活。
由语义分割的成功所驱动:一些方法从每像素分类结果(例如FCN输出)开始,尝试将同一类别的像素分割成不同的实例。与这些方法中的分割优先策略不同,Mask R-CNN基于实例优先策略。
三、Mask RCNN
3.1 Mask RCNN基本流程
Mask R-CNN在概念上很简单:
Faster RCNN为每个候选目标都有两个输出——1个类标签和1个边界框偏移量;Mask RCNN添加了第三个掩码分支输出目标掩码(mask),附加掩码(mask)分支的输出不同于类别和边界框输出,需要提取目标更精细的空间布局。(Mask R-CNN的关键元素:像素到像素的对齐,这是Fast/Faster R-CNN的主要缺失部分。)
Mask R-CNN两阶段流程:
Faster R-CNN: 包括两个阶段。第一阶段称为区域建议网络(RPN),产生候选框。第二阶段,本质上是Fast R-CNN,使用RoI Pool从每个候选框中提取特征,并进行分类和边界盒回归。两个阶段使用共享的特征 ,更快地进行推理。
Mask R-CNN: Mask R-CNN采用相同的两阶段程序,第一阶段相同(即RPN)。第二阶段,在预测类和边界盒偏移的同时,还为每个RoI输出一个二进制掩码。
3.2 Mask RCNN 损失
多任务损失: 每个RoI多任务损失为L=Lcls+Lbox+Lmask。分类损失Lcl和边界盒损失lbox与FasteRCNN中定义的相同。mask分支对每个RoI有一个km2维的输出,可以将它编码成分辨率为m×m的K个二进制掩码,每个类对应一个二进制掩码(总共k个类)。我们应用每像素的sigmoid,Lmask作使用平均二进制交叉熵损失,对于RoI(关联的真实目标类别为k),Lmask仅定义在第k个掩码上(其他掩码输出不贡献损失)。
Lmask的定义允许网络对每个RoI生成所有类的二进制掩码,不必存在类之间进行竞争,Mask RCNN依靠分类分支来预测输出掩码的类标签,这将掩码和类预测解耦。(FCNs应用于语义分割时通常使用每像素的softmax和多项式交叉熵损失,类之间的掩码存在竞争)。Lmask是获得良好的实例分割结果的关键。
Mask表征:
mask编码了输入目标的空间布局。类标签和边界框偏移输出都使用了全连接层折叠成短向量输出,而mask通过卷积提供的像素到像素的对应自然的解决了提取mask空间结构的问题。
具体地说,使用FCN预测每个RoI的m×m掩模。这允许mask分支中的每个层保持显式的m×m目标空间布局,不会将其折叠为缺少空间维度的向量表示。与fc层进行mask预测的方法不同 ,全卷积方法仅需要较少的参数,并且如实验所示更精确。
这促使我们开发了下面的RoIAlign层,它在掩模预测中起着关键作用。这种像素到像素的行为要求我们的RoI特征(本身就是小的特征映射)必须很好地对齐,以忠实地保持每个像素的显式空间对应。
3.3 RoIAlign 层设计
RoI Pool:
(1)首先将一个浮点数RoI量化为特征图的离散粒度;
(2)将量化后的RoI细分为空间单元(sapcal bins 空间单元本身也被量化);
(3)最后将每个空间单元覆盖的特征值进行汇总(通常通过max pooling)ROI Pooling参考 例:计算[x/16],在连续坐标x(ROI特征图)上执行量化(16是特征图步长,[·]是舍入);将量化后的特征图划分到空间单元(bins)时也执行量化。这些量化在RoI和提取的特征之间引入了偏差。虽然这可能不会影响分类,但它对预测像素级精度的掩模有很大的负面影响。
RoIAlign层去除了RoIPool的严格量化,将提取的特征与输入正确地对齐。RoIAlign改变很简单:
(1)避免了RoI边界或bin的任何量化(即使用x/16而不是[x/16]量化ROI)。
(2)使用双线性插值来计算每个RoI bin中四个定期采样位置的输入特征的精确值,并聚合结果(使用max或average pooling),如下图所示,只要不进行量化,结果对准确的采样位置或采样的点数不敏感。
RoAlign带来了巨大的改进。我们还与RoIWarp操作进行了比较,RoIWarp忽略了对齐问题,并与RoIPool一样量化RoI,因此尽管RoIWarp也采用了双线性重采样,但其性能与RoIPool不相上下,这说明了对齐的关键作用。
3.4 Mask RCNN网络结构
为了证明Mask RCNN方法的通用性,我们用多种架构实例化Mask R-CNN。为了清晰起见区分了:
(i)用于整个图像特征提取的卷积主干结构
(ii)分别应用于每个RoI的边界框识别(分类和回归)和mask预测的网络头。
(1)网络主干
ResNet:深度为50 层。Faster RCNN的最初实现是使用ResNets,从第4个网络阶段的最后一个卷积层(称之为C4)提取特征。例ResNet-50主干网用ResNet-50-C4表示。
ResNeXt:网络的深度为 101层
FPN:更有效的主干网络(特征金字塔网络),FPN采用自上而下的横向连接结构,从单个比例输入构建网络内的特征金字塔。使用FPN主干的Faster R-CNN从特征金字塔的不同层提取RoI特征图,剩下的其他方法类似于最初的ResNet+Faster RCNN。ResNet-FPN主干和Mask-RCNN进行特征提取,在精度和速度上都有很好的提高。
(2)网络头:
网络头部紧跟主干架构,我们额外添加了一个全卷积mask预测分支。具体来说我们拓展了ResNet和FPN论文中网络头。详细如下图所示。ResNet-C4主干上的头部包括ResNet的第5阶段。FPN主干已经包括res5,因此允许使用更少过滤器的更有效的头部。掩码分支有一个简单的结构。更复杂的设计有可能提高性能,但不是本文的重点。
3.4 Mask RCNN训练
根据现有的Fast/Faster R-CNN工作设置超参数。虽然这些参数设置决策是在原始论文中针对目标检测做出的,但我们发现实例分割系统对它们也是鲁棒的。
训练:
(1)正负IOU的划分:
与Fast R-CNN一样,如果RoI与真值框的IoU至少为0.5,则视为正ROI,否则为负ROI。mask损失Lmask仅定义在正ROI上。mask 的目标是RoI与其相关的真实mask之间交叉(重叠)。
(2)图片调整与批量设置、正负样本采样:
采用以图像为中心的训练。调整图像大小使其比例(较短的边缘)为800像素。每个小批量每个GPU为2个图像,每个图像有N个采样的ROI,正负比例为1:3。对于C4主干,N是64,而对于FPN为512。
(3)训练细节
在8个gpu上训练160k次迭代,学习率为0.02,在120k次迭代中降低了10%。使用0.0001的权重衰减和0.9的动量。对于ResNeXt使用每个GPU一个图像和相同的迭代次数进行训练,初始学习率为0.01。
(4)anchor
anchor有5个尺度和3个宽高比。为方便消融,RPN单独训练,除非另有规定,否则不与Mask R-CNN共享特征。对于本文RPN和Mask R-CNN具有相同的主干,因此它们是可共享的。
推断:
在测试时,C4主干的提案数为300,FPN的提案数为1000。我们对这些提案(ROI)运行边界框和类预测分支,然后执行非最大值抑制,最后将mask分支应用于得分最高的100个检测框。虽然这与训练中使用的并行计算不同,但它加快了推理速度并提高了准确性(因为使用了更少、更精确的ROI)。mask分支可以为每个RoI预测k个二进制掩码,但是我们只使用第k个掩码,其中k是分类分支预测的ROI的类。然后将m×m浮点数掩码输出调整为RoI大小,并在阈值为0.5时进行二值化。
请注意,由于我们只计算前100个检测框中的掩码,因此Mask R-CNN为Faster R-CNN对应项只增加了一个小开销。
四、实验:实例分割
我们对Mask R-CNN与最新技术进行了彻底的比较,并在COCO数据集上进行了全面的消融实验。标准COCO的指标,包括AP(超过IoU阈值的平均值)、AP50、AP75和APS、APM、APL(不同尺度的AP)。除非注明,AP使用mask IoU进行评估。与之前的工作一样,使用80k训练图像和验证图像35k的子集(trainval35k)进行联合进行训练,在剩余5k 验证图像(minival)上进行消融实验。
4.1 主要结果
将Mask R-CNN与表1中实例分割的最新方法进行了比较。我们模型的所有实例化都优于先前最先进模型的基线变体。使用ResNet-101-FPN主干的Mask R-CNN的性能优于FCIS++(后者包括多尺度训练/测试、水平翻转测试和在线硬示例挖掘OHEM,这些改进同样适用于我们的工作)
Mask R-CNN即使在具有挑战性的条件下也能获得良好的效果。
4.2 消融实验
我们进行了多次消融实验来分析Mask R-CNN。结果如表2所示:
架构:
表2a显示了具有各种主干的Mask R-CNN。它得益于更深层的网络(101优于50)和先进的设计(包括FPN和ResNeXt)。但并不是所有的框架都能自动受益于更深层次或更高级的网络。
多项Mask与独立Mask:
Mask R-CNN将mask预测和类预测解耦:由现有的边界框分支预测类标签,为每个类独立的生成一个mask,不存在类之间的竞争(通过每个像素的sigmoid和二进制损失)。在表2b中,将其与使用每像素softmax和多项式损失(FCN中常用)进行比较,模型更易于训练。
类特定的与类不可知的Mask:
Mask RCNN默认预测类特定的mask,例每个类预测一个m×m的mask。当Mask R-CNN使用类无关的Mask(即预测单个m×m输出而不考虑类别)几乎同样有效:它有29.7的mask AP,而ResNet-50-C4上的类特定对应的mask AP为30.3。这进一步突出了我们的方法很大程度上分离了分类和分割。
RoIAlign:
表2c显示了RoIAlign层的评估。实验中我们使用ResNet50-C4主干,步长为16。RoIAlign比RoIPool提高了大约3个百分点,大部分收益来自高IoU(AP75)。RoIAlign对max/average池不敏感。在本文的其余部分我们使用average。
RoIWarp进行比较:RoIWarp采用双线性抽样,但RoIWarp仍然量化RoI,与输入失去一致性。如表2c所示 RoIWarp的性能与RoIPool不相上下,比RoIAlign差得多。这突出了正确的对齐是关键。
使用ResNet-50-C5主干+RoIAlign:步长更大为32像素。表2d显示RoIAlign将mask AP提高了7.3,mask AP75提高了10.5个点。此外使用stride-32 C5特征图(30.9 AP)比使用stride-16 C4特征图(30.3 AP,表2c)的RoAlign更准确。RoIAlign很大程度上解决了长期以来使用大步长特征进行检测和分割的难题。
FPN+RoIAlign:RoIAlign显示了1.5 mask AP和0.5 box AP的增益,它具有更精细的多层步长。对于需要更精细对准的关键点检测,RoIAlign显示使用FPN也有很大的增益。
Mask分支:
分割是一个像素到像素的任务,我们使用FCN来开发mask的空间布局。在表2e中,我们比较了使用ResNet-50-FPN主干的多层感知器(MLP)和FCN,使用FCNs比MLPs有2.1的mask AP增益。
4.3 边界框检测结果
Mask R-CNN与最先进的COCO边界框目标检测进行了比较。训练全Mask R-CNN模型,在推理时只使用分类和边界框输出(mask输出被忽略)。使用ResNet-101FPN的Mask R-CNN优于所有先前最先进模型的基本变体。
作为进一步的比较,我们训练了一个Mask R-CNN,但是没有Mask分支,在表3中用“Faster R-CNN,RoIAlign”表示。由于RoIAlign,该模型的性能优于Faster RCNN中的模型。但它比Mask R-CNN低0.9个百分点。因为Mask R-CNN边界框检测效果得益于多任务训练。
最后Mask R-CNN在它的Mask和box AP之间有一个很小的差距,表明我们的方法在很大程度上缩小了目标检测和更具挑战性的实例分割任务之间的差距。
4.4 时间
推断:
我们训练了一个ResNet-101-FPN模型,该模型在RPN和Mask R-CNN阶段之间共享特征,遵循Faster R-CNN的4步训练策略。该模型在Nvidia Tesla M40 GPU上以195ms的速度运行。
尽管Mask R-CNN速度很快,但我们的设计没有针对速度进行优化,便可以实现速度/精度折衷。
训练:
Mask R-CNN训练也很快。事实上,在训练集上训练时,快速原型可以在不到一天的时间内完成。我们希望这样的快速训练将消除这一领域的一个主要障碍,并鼓励更多的人对这一具有挑战性的课题进行研究。