【实例分割】3、Mask Scoring R-CNN

2023-10-27

摘要

实例分割的很多框架中,实例的分类置信度常被当做“mask质量”的衡量指标

mask的质量常被量化为 : 实例mask和真实mask的 IoU,而与分类置信度没有很大的关联

本文提出了 Mask Scoring R-CNN,包含一个网络块来学习预测得到的实例mask的质量

本文网络将 实例特征 和 对应的预测mask 综合起来,来回归 mask 的 IoU

Mask scoring 策略 将校正Mask 质量和Mask score之间的偏差,在 COCO AP 评估过程中,通过优先考虑 更准确的 mask 预测结果,来提高实例分割性能。

通过在COCO数据集上的大量评估,发现 Mask Scoring R-CNN 可以为很多不同的模型带来优于最好的 Mask R-CNN的效果。

本文希望为提高实例分割性能提供一个新的方向

1. 引言

深度网络极大的推动了计算机视觉的发展,使得分类[22,16,35]、目标检测[12,17,32,27,33,34]和语义分割[28,4,37,18]等很多任务都得到了很大的发展。

从计算机视觉中深度学习的发展可以看出,深度网络的能力正逐步从图像水平预测[22]发展到区域/边界框级预测[12]、像素级预测[28]和实例/Mask预测[15]。

所以,更好的预测性能不仅仅要求更多的带详细标签的数据,也需要更多能够精细预测的网络。

本文主要落脚点在实例分割问题,实例分割是目标检测的下一步,也就是从粗边界框尺度——精细像素尺度分类的问题。

也就是说,本文提出了一种对 实例分割假设 进行score的新方法,这对实例分割的评价很重要。

其原因是,很多评估方法是根据假设得分来确定的,故更精细的得分有助于更好的评估模型性能

例如,P-R曲线和AP经常被用来评估在COCO上的实例分割效果

如果一个实例分割的假设函数没有被合适的给定得分,则它可能被错误的划分为假正类或假负类,拉低AP值。

然而,很多实例分割方法,如 Mask R-CNN [15]和 MaskLab [3] 中,实例 mask 的得分是和边界框尺度的分类置信度共用的,而分类置信度是分类器根据候选特征来预测得到的。

使用分类置信度作为衡量 mask 质量的方式是不合适的,因为它仅仅能够区分候选区域的物体属于哪个语义类别,并没有对实例质量和实例mask完整性的衡量能力。

分类置信度和 mask 质量的偏差如 Fig.1 所示,其中实例分割的假设函数得到了准确的边界框尺度的定位结果,和高的分类得分,但是其对应的 mask 确不准确
在这里插入图片描述
显而易见,利用这种方法对对 masks 进行scoring会降低评价结果。

之前的方法都是为了获得更加准确的实例定位或分割 mask,本文的方法主要侧重于对masks的 scoring。

为了达到该目标,本文模型对每个 mask 都会学到一个 score,而不是使用其分类 score 来代替,清晰起见,将其称为 mask score。

受 AP 评估方法的启发,实例分割利用预测 mask 和 真实 mask 之间的像素级 IoU来描述实例分割的质量,本文提出了一个网络,可以直接学习IoU,且称为 MaskIoU

一旦在测试阶段得到了预测 MaskIoU,则通过将 预测的 MaskIoU 和分类得分相乘 来重新评估 mask 得分。所以,mask 得分同时考虑语义类别和实例 mask的完整性。

学习 MaskIoU和候选区域分类、mask预测是不同的,它需要将预测 mask和目标特征进行比较。

在 Mask R-CNN框架中,我们实现了一个名为 MaskIoU head 的 MaskIoU 预测网络。该网络将mask head 和RoI 特征都作为输入,使用简单的回归损失进行训练。

将该模型命名为 “ 带 MaskIoU head 的 Mask R-CNN ” —— Mask Scoring R-CNN (MS R-CNN)

后续将通过大量的实验证明,MS R-CNN 在很多数据集上取得的很好的效果,我们将其归因于 Mask 质量和 Score 的结合。

总之,本文的贡献如下:

1、提出了 Mask Scoring R-CNN,该框架是第一个解决实例分割假设评分问题的框架。为提高实例分割模型性能提供了一个新的方向。即考虑到实例 mask 的完整性,当分类得分很高但 mask 不够好的时候,实例 mask 的得分可以被惩罚。

2、MaskIoU head 非常有效,在具有挑战性的COCO数据集上实验结果显示, 当使用本文的MS R-CNN 时,使用不同的主干网络都可以使 AP 得到约 1.5%的提高。

2. 相关工作

2.1 实例分割

目前的实例分割方法可以被大体分为两类:

  • 基于检测:

    利用最先进的检测器,如Faster R-CNN、R-FCN等来获得每个实例的取样,之后预测其mask。

    [31]中提出了 DeepMask,对滑窗的中心目标进行分割和分类

    [6]中提出了对实例敏感(instance-sensitive)的FCNs 来生成 对位置敏感(position-sensitive)的maps,并将其综合起来获得最终的masks。

    FCIS[23]将 position-sensitive maps 和内在/外在得分综合起来来获得实例分割的结果。

    [15]中提出了 Mask R-CNN,通过将实例水平的语义分割分支添加到 Faster R-CNN的顶部来获得。

    [3]中在Mask R-CNN的基础上,提出了MaskLab,使用position-sensitive的得分来获得更好的结果。

    然而,这些网络具有一个共同的缺点,mask 质量是仅仅由分类得分来衡量的,不是很有效。

  • 基于分割:

    基于检测的方法首先对每个像素点进行分类,然后将其归类,来得到实例分割的结果。

    [24] 中使用特定的聚类方法来对像素进行聚类

    [20,21] 中,在聚类过程中添加了边界检测信息

    [1] 中预测像素级别的能量值,并且使用流性方法来聚类

    最近的工作中,[30,11,14,10] 使用度量学习方法来学习其合成方式。

    但是这些方法对每个像素进行合成的学习,来确定来自同一实例的像素点都进行相同的合成。 之后,根据学习到的合成方式进行聚类。

    这些方法都没有特定的衡量实例mask质量的标准,它们使用像素级的分类得分均值作为代替标准。

这些方法都没有考虑到将 mask scoremask quality 进行结合

由于 mask score 的不可靠性,一个具有高IoU的mask 假设函数,如果其mask score较低,则可能排到后面,导致AP降低。

2.2 检测得分校正

针对校正检测框的分类得分问题,已经有了许多不同的方法,与本文的目标是相同的。

[36] 中,提出了 Fitneess NMS,利用检测到的边界框和真实边界框的之间的IoU来校正检测分数,其将边界框IoU的预测当做一个分类任务。

本文与之不同,本文将预测 mask IoU 的问题当做一个回个任务

[19] 中,提出了 IoU-Net,直接回归 边界框的 IoU,并用预测得到的 IoU 用于NMS和边界框细化两个任务。

[5] 中,作者讨论了假阳性样本,并使用一个单独的网络来对这些样本进行校正。

SoftNMS[2]方法使用两个边界框之间的重叠率来校正低得分的框

[29] 中提出了 Relaxed Softmax 方法来预测标准softmax中的温度尺度因子值,来用于safety-critical 行人检测。

不同于上述方法,本文主要关注b-box级别的检测,本文方法是用于实例分割的。

MaskIoU head 中对实例mask进行了进一步处理,且最终的mask score可以反映实例分割假设的真实质量,为提高实例分割性能提供了一个新的方向。

3. 方法

3.1 动机

当前的 Mask R-CNN框架中,检测的得分是由分类得分的最大值决定的。

由于背景、光照等干扰,可能会导致分类得分很高到mask quality 较低,如图1所示。

为了定量的分析该问题,我们将Mask R-CNN 预测的 mask score 和真实IoU(MaskIoU)进行了比较。

具体来讲,使用了Mask R-CNN和ResNet-18 FPN对COCO 2017验证数据集进行实验。

利用SoftNMS进行检测假设函数的选择,保留 MaskIoU和分类得分都大于0.5的。

MaskIoU 和分类得分的分布如图2(a)所示

每个MaskIoU在间隔内的平均分类得分如图3©的蓝色所示

图说明分类得分和 MaskIoU 在 Mask R-CNN 中并没有很大的关联

一般的实例分割评估方法中,认为 MaskIoU 较低且得分较高检测假设函数是有害的。

在很多实际应用中,确定什么时候检测结果是可信,什么时候是不可信的是很重要的

这就 motivates 我们对每个检测假设都要学习到一个校正 mask score

不失一般性,我们研究了Mask R-CNN框架,并提出了Mask Score R-CNN (MS R-CNN),这是一个带有附加MaskIoU模块的MaskR-CNN,该模块学习MaskIoU aligned mask score

我们框架的预测Mask得分如图2 (b)所示,橙色直方图如图2 ©所示。
在这里插入图片描述

3.2 Mask scoring in Mask R-CNN

Mask Scoring R-CNN的结构并不复杂:具有 MaskIoU head 的 Mask R-CNN,如图3所示

MaskIoU head 输入: 实例特征+预测的mask

MaskIoU head 输出: 输入 mask 和真实 mask 的 IoU
在这里插入图片描述

Mask R-CNN:

Mask R-CNN由两级组成,第一级是RPN,提议候选区域,第二级是R-CNN级,其对每个候选区域使用 RoIAlign,且对候选区域进行分类、b-box回归和mask预测

Mask scoring:

s m a s k s_{mask} smask :预测的 mask 的得分

理想 s m a s k s_{mask} smask :预测的mask和与其匹配的真实mask的像素级的IoU,称为 MaskIoU。对真实类别是正值,其余类别是0,因为一个mask仅仅属于一个类别。

这需要mask score在两个方面做的较好:

  • 将mask分类到正确的类别
  • 回归前景目标类别的候选框 MaskIoU

使用单个的目标函数难以同时解决两个问题,为了简化,我们将 mask score 学习的任务分解成两个任务:mask 分类 + IoU 回归

对所有的目标类别都有: s m a s k = s c l s ⋅ s i o u s_{mask}=s_{cls}\cdot s_{iou} smask=sclssiou

  • s c l s : s_{cls}: scls主要对候选区域分类,这个过程是在R-CNN阶段的分类任务完成的,所以可以直接拿对应的分类得分来用
  • s i o u : s_{iou}: siou主要对MaskIoU回归,这也是本文的主要目的,下面将详细介绍。

MaskIoU head:

MaskIoU head 主要对预测 mask 和真实 mask的IoU进行回归

MaskIoU head的输入:RoIAlign 层的输出特征+预测的 mask

对两者进行联合时,使用最大池化来保证预测mask和RoI特征大小相同,池化核大小为2,移动步长为2。

本文只对真实类别的 MaskIoU进行回归,而非对全部类别都进行回归。

MaskIoU head的组成:4个卷积层+3个全连接层

对卷积层,和Mask head一样,将所有的卷积核大小设置为3,数量设置为256

对全连接层,和 RCNN head一样,前两个FC输出为1024,最后一个FC输出为总类别个数。

Training:

训练 MaskIoU head,我们将 PRN proposal 作为训练样本

训练样本的IoU(提议框和与其match的真实框的IoU)要大于0.5,这个要求和 Mask head 与 Mask R-CNN的要求相同。

为了给每个训练样本都生成回归目标,首先获得目标类别的预测mask,并利用0.5对其进行二值化。

之后,使用二值mask和其匹配的真实mask的MaskIoU作为MaskIoU 的目标值

使用L2损失对MaskIoU进行回归,损失权重设置为1,

本文提出的MaskIoU head将集成到 Mask R-CNN结构中去,整个网络进行端到端的训练。

Inference:

推断阶段中,本文使用 MaskIoU head来校正从 R-CNN 产生的分类得分

Mask R-CNN的过程:

假设 Mask R-CNN的 R-CNN 阶段输出 N 个b-box,且利用softNMS 后选择前 top-k 个作为保留。之后,将这top-k个b-box输入 Mask分支产生预测的mask

本文过程:

1)R-CNN分支输出N个预测的边界框,利用SoftNMS对其进行选择,保留得分前top-k的框

2)将前top-k的框输入 R-CNN的Mask 分支,得到预测mask

3)将RoI feature map 和mask送入MaskIoU,得到预测的mask IoU

4)将预测的mask IoU和分类置信得分相乘得到 mask score

4. 实验

所有实验均在COCO数据集[26]上进行,对象类别80个。

遵循COCO 2017设置,使用115k图像训练分割进行训练,5k验证分割进行验证,20k测试开发分割进行测试。

使用COCO评估指标AP(平均超过IoU阈值)报告结果,包括AP@0.5、AP@0.75和APS、APM、APL(不同规模的AP)。

AP@0.5(或AP@0.75)表示使用IoU阈值0.5(或0.75)来确定在评估中预测的边框或Mask是否为正。

除非特别说明,AP使用mask IoU进行评估。

4.1 实验细节

本文使用再现的Mask R-CNN进行所有实验。我们使用基于ResNet-18的FPN网络进行消融研究,使用基于Faster RCNN/FPN/DCN+FPN[9]的ResNet-18/50/101与其他基线结果进行比较。

对于resnet - 18fpn,输入图像将大小调整为短轴为600px,长为最大1000px,以便训练和测试。

与标准FPN[25]不同,ResNet-18中RPN方案和feature extractor只使用C4, C5。对于ResNet-50/101,输入图像的短轴调整为800px,长轴调整为1333px,用于训练和测试。

ResNet-50/101的其余配置遵循检测器[13]。我们对所有网络进行18次训练,在14次和17次训练后,学习率降低0.1倍。

使用动量0.9同步SGD进行参数更新。在测试中,我们使用SoftNMS并保留每个图像的top-100得分的检测结果。

4.2 定量结果分析

本文在ResNet-18/50/101等不同的backbone网络和Faster R-CNN/FPN/DCN+FPN [9]等不同的框架上展示实验结果。如表1、表2所示。

使用APm来表示实例分割结果,APb表示检测结果。

如表1所示,与Mask R-CNN相比,Mask R-CNN对backbone不敏感,能够在所有backbone网上实现稳定的效果:Mask R-CNN能够得到显著的改善(约1.5 AP)。特别是对于AP@0.75,本文方法可以将基线提高2个点左右。
在这里插入图片描述
表2表明,Mask R-CNN对不同的框架具有鲁棒性,包括 Faster R-CNN/FPN/DCN+FPN 。
在这里插入图片描述
此外,Mask R-CNN不影响边框检测性能,且它实际上略微提高了边界框检测性能。test-dev的结果如表3所示,仅展示了实例分割结果。

在这里插入图片描述

4.3 消融学习

此处将本文方法在COCO 2017上进行验证,实验ResNet-18 FPN进行所有消融学习实验

MaskIoU head 的输入的选择:

首先研究了MaskIoU head的输入不同为网络带来的影响。其输入是将由 mask head和RoI feature产生的mask score map(28x28xC)融合而来。

图4展示了不同的设计方法:

(1)目标mask和RoI feature的拼接:取目标类别的得分map,与RoI feature进行max-pooled,并拼接。

(2)目标mask和RoI feature相乘:取目标类别的得分map,与RoI feature进行max-pooled,并相乘。

(3)所有mask和RoI feature相乘:所有的C个类别的mask得分map,与RoI feature进行max-pooled,并拼接。

(4)目标mask和高分辨率RoI feature拼接:取目标类别的得分map,与28x28大小的RoI feature进行相乘。
在这里插入图片描述
结果如表4所示,从中可知,MaskIoU head对不同方式的融合都是较为稳定的
在这里插入图片描述
从表中可知拼接取得的效果更好,故本文使用拼接方式进行融合。

训练目标的选择:

与之前提到的相同,本文将mask score 学习任务分解成 mask 分类和 MaskIoU 的回归。

但是有如下问题:

  • 可以直接学习到mask score吗?
  • 一个RoI可能包含不同类别的目标,需要对所有类别都学习 MaskIoU吗?
  • 如何设定 MaskIoU head的训练目标仍然需要探索

下面是针对训练目标的一些可选方式:

(1)学习目标类别的MaskIoU,同时忽略提议中的其他类别,这也是被默认的训练目标,同时也是本段所有实验的方式。

(2)学习所有类别的MaskIoU,如果某个类别没有出现在 RoI中,其 目标 MaskIoU被设置为0,该设定方式仅仅使用回归来预测MaskIoU,这需要回归器知道哪些不相关的类不在其中。

(3)对所有正类学习MaskIoU,其中正类意味着出现在RoI区域中的类别。提取区域中的其他类别被忽略。该设置方式被用来观察是否用RoI 区域中其他类别可以使结果更好。

表5给出了上述不同训练目标所获得的结果。

通过对比设置1和设置2,我们可以发现训练所有类别的MaskIoU会显著降低新能(回归仅基于MaskIoU预测),这也证实了我们的观点——使用单一目标函数进行训练分类和回归是困难的。

setting #3比 setting #1 的结果低,这样的结果是由于对所有正例 MaskIoU 的回归会使得 MaskIoU head的负担加重,所以本文选择回归目标类别的 MaskIoU。

在这里插入图片描述

如何设定训练集:

由于本文提出的MaskIoU head是 Mask R-CNN 结构的最顶部分,所以MaskIoU head的所有训练样本都是边界框水平的IoU大于0.5的,然鹅,其MaskIoU不能超过0.5。

给定一个阈值 τ \tau τ,本文将 MaskIoU 比 τ \tau τ 大的样本作为训练MaskIoU head的样本,表6展示了结果。结果表明使用所有实例的训练效果最好。

在这里插入图片描述

4.4 讨论

本节讨论中的所有结果都源于 COCO 2017 验证集

backbone:

  • 较弱的 backbone ResNet-18 FPN
  • 较强的backbone ResNet-101 DCN+FPN

预测的 MaskIoU 的质量:

本文使用真实 MaskIoU 和预测 MaskIoU 的相关系数来度量 预测 MaskIoU的质量

回到测试过程,本文使用经过softNMS利用分类得分选择后的top-100得分的边界框,将预测边界框输入 Mask head,并且得到预测 mask,之后使用预测 mask和RoI feature作为MaskIoU head的输入。

MaskIoU head的输出和分类得分经过融合后得到最终的mask score

在COCO 2017验证数据集中,我们为每张图像保留100张预测MaskIoU,从所有5000张图像中收集50万个预测。

图5中绘制了每个预测及其对应真值
在这里插入图片描述
可以看到,MaskIoU的预测与它们的ground truth有很好的相关性,尤其是对于MaskIoU较高的预测。

以ResNet-18 FPN 和 ResNet-101 DCN+FPN作为backbone时,预测和真实的相关系数在0.74左右。

这表明,预测的质量对backbone网的变化不敏感。这一结论也与表1一致。

由于之前没有对MaskIoU进行预测的方法,我们参考了之前[19]对IoU边界框进行预测的工作。[19]得到的相关系数为0.617,低于我们的相关系数。

MS R-CNN 的上界(upper bound):

作者使用真实的MaskIoU预测的MaskIoU之间的相关系数来衡量预测mask的质量

下图展示了预测值和真值的关系,可知其有较好的相关性,且MaskIoU值越高,相关性越大

如何探索性能上界:利用真实的mask代替预测的mask,则mask质量的差别就仅仅来自于边界框的准确性和MaskIoU的预测结果,

对于每个预测的mask,我们可以发现,其与真实mask可以匹配,之后,当真实 MaskIoU >0 时,我们使用真实 MaskIoU 来代替预测 MaskIoU,结果见表7。

结果表明, MS R-CNN 比 Mask R-CNN的表现都好。
在这里插入图片描述
与MS R-CNN的理想预测结果相比,MS R-CNN的实际应用效果仍有较大的提升空间,backbone 为 ResNet-18 FPN 时,可以将 AP 提升约2.2%,当backbone为ResNet-101 DCN+FPN 时,可以将AP提升约2.6%。

模型大小和运行时间:

MaskIoU head可实现0.39G的FLOPs, Mask head可实现0.53G的FLOPs。

我们使用一个TITAN V GPU来测试速度(秒/图像)。对于ResNet-18 FPN, Mask R-CNN和MS R-CNN的速度都在0.132左右。

ResNet-101 DCN+FPN Mask R-CNN和MS R-CNN的速度都在0.202左右。Mask Score R-CNN中mask head的计算成本可以忽略不计。

5. 总结

本文研究了实例分割中mask得分问题,并提出了 MS R-CNN

通过给 Mask R-CNN 添加 MaskIoU head,对mask的得分和 MaskIoU结合起来进行预测,不同于以往的实例分割框架。

MaskIoU head 计算高效且易于实现

在 COCO 基准上,大量的实验表明 MS R-CNN 都可以获得优于 Mask R-CNN的效果。

该结构同样可以用于其他实例分割网络,来获得更加可靠的mask 得分

本文希望本文所提出的高效方式为实例分割任务提供一个基准,并为后续的探索提供帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【实例分割】3、Mask Scoring R-CNN 的相关文章

  • 查看Redis信息和状态

    redis cli连接服务器后 使用info命令查看Redis信息和状态 info 其中memory段显示了redis的内存使用状态 INFO section 以一种易于解释 parse 且易于阅读的格式 返回关于 Redis 服务器的各种
  • ESP32 模拟键盘的简单操作 (ESP32 for Arduino)

    本来是以前做过的ESP32项目 但是想拿来用在别的项目上时发现找不到了 所以重新写一下这个项目 记录一下 首先说明 使用ArduinoIDE 模块型号为esp32 wroom 32 库文件链接 https github com T vK E
  • 4sum

    基本的 穷举前面的数的组合 后两个数夹逼法的算法 O n 3 1 排序 2 主循环穷举前两个数的组合 保证数组至少剩下2个数 i 0 i

随机推荐