Mask Scoring R-CNN论文解读
人工智能大神何凯明的Mask R-CNN对实例分割做出了巨大的贡献,在2019年的CVPR会议中,一个基于Mask R-CNN的一个名为Mask Scoring R-CNN的网络提高了实例分割性能。
大多数实例分割方法中,实例蒙板(instance mask)的分数与box-level的分类置信度共享,该置信度由运用在提议特征的分类器所预测。用分类置信度来评估蒙板质量是不合适的,因为它只服务于区分提议中的语义类别,并且不能意识到实例蒙板的实际质量和完整性。
实例分割假设得到准确的box-level定位结果和很高的分类分数,但是对应的蒙板是不准确的。显然,用这样的分类分数来为蒙板打分会降低评价结果。本文为每个蒙板打分,称作mask score。
m
a
s
k
s
c
o
r
e
=
M
a
s
k
I
o
U
×
c
l
a
s
s
i
f
i
c
a
t
i
o
n
s
c
o
r
e
mask\ score = MaskIoU\times{classification\ score}
mask score=MaskIoU×classification score
在 Mask R-CNN框架的基础上,采用了一个叫做MaskIoU Head 的MaskIoU预测网络。
MaskIoU head 利用mask head的输出和ROI特征作为输入并用简单的回归损失来进行训练。
本文的主要贡献总结如下:
1.提出了第一个解决实例分割假设得分问题的名为Mask Scoring R-CNN的框架。考虑到实例蒙板的完整性。如果蒙板不够好却有一个很高的分数时,将降低实例蒙板的分数。
2.MaskIoU头非常简单和有效。
检测分数校正
在其他方法中,大多是通过bounding box 和ground truth之间的IoU值来校正检测分数,而本文提出的MaskIoU head可以注意到实例蒙板的完整性,是针对mask的,相比bounding box更准确。最终的蒙板分数可以反映实例分割假设实际的分割质量。
动机
目前的Mask R-CNN的检测假设是由分类分数中最大的事物决定的。因为背景聚类和咬合的问题,可能导致分类分数很高,而mask质量很低。如图1.所示
本文为了在数量上分析这个问题,作者对比了原始版本的Mask R-CNN的mask分数和预测得到的mask与ground truth mask之间的IoU值作比较,得到如图2.的结果,说明Mask R-CNN中classification score和MaskIoU的相关性不是很好。
在大多数实例分割验证协议中如COCO,拥有高的检测分数和低的MaskIoU,对于一个检测假设是有害的,确定一个检测结果是可信的还是不可信的是非常重要的。所以本文的动机是根据每一个检测假设的MaskIoU得到一个已校准的mask score。所以作者在Mask R-CNN的基础上添加了一个MaskIoU head来学习经过MaskIoU校准后的mask score。
Mask scoring
作者将预测mask的分数定义为
s
m
a
s
k
s_{mask}
smask。理想的
s
m
a
s
k
s_{mask}
smask等于预测mask和其匹配的ground truth mask的像素级IoU,之前被称作MaskIoU。因为一个mask 只属于一个类,因此理想的
s
m
a
s
k
s_{mask}
smask对于ground truth 类别应该具有正值,对于其他类别应该为零。这需要mask分数在两个方面具有很好的特性:将mask分为正确的类;将提案的MaskIoU回归为前景对象类别(就是既要稳又要准)。
仅仅用一个函数来训练两个任务是很困难的。为了简化,作者将mask分数学习任务分解为mask分类和IoU回归,对于所有的类别表示为:
s
m
a
s
k
=
s
c
l
s
⋅
s
i
o
u
s_{mask}=s_{cls}\cdot{s_{iou}}
smask=scls⋅siou,
s
c
l
s
s_{cls}
scls专注于将提议分类到它属于的类,
s
i
o
u
s_{iou}
siou专注于回归MaskIoU。
对于
s
c
l
s
s_{cls}
scls,在R-CNN阶段的分类任务中就已经完成。所以可以直接采用对应的分类分数。回归的
s
i
o
u
s_{iou}
siou是这篇文章的目标。
MaskIoU Head
回归预测mask和它的ground truth mask之间的IoU值。Mask Scoring R-CNN用RoIAlign层的特征和预测mask的级联作为MaskIoU Head的输入。级联时,我们采用核大小为2,stride为2的最大池化来让预测mask和RoI特征有相同的空间尺寸。我们仅选取ground truth类回归MaskIoU(对于测试阶段,我们选取预测类)而不是所有类。MaskIoU Head由4个卷积层和3个全连接层组成。对于4个卷积层,我们跟随Mask Head设置所有卷积层的卷积核大小为3,过滤器个数为256。对于3个全连接层,我们跟随RCNN Head将前两个全连接层的输出设置为1024,随后一层的输出为类别数。网络结构如图3所示:
training
为了训练MaskIoU Head,我们采用区域提议网络作为训练样本。该训练样本需要提案框和对应的ground truth 框的IoU值大于0.5,这和Mask R-CNN的Mask head的训练样本一样。为了产生每一个训练样本的回归目标,首先我们得到目标类别的预测mask,然后利用阈值0.5将预测mask二值化。作者利用得到的二值mask和对应的ground truth的MaskIoU作为目标MaskIoU。采用 l 2 l_2 l2正则化损失回归MaskIoU,损失权重设置为1。
Inference
在inference阶段,仅用MaskIoU Head校准R-CNN产生的分类分数。特别地,标准的Mask R-CNN的inference程序是,从Mask R-CNN的R-CNN阶段输出了N个bounding box,通过SoftNMS(soft非极大抑制)方法选择了其中前k个box,然后将这前k个box喂入Mask Head来产生多类别mask。作者也采用了Mask R-CNN这种程序喂入前k个目标mask来预测MaskIoU,然后与分类分数相乘得到校准后的mask score作为最后的mask置信度。