Mask Scoring R-CNN
Zhaojin Huang, Lichao Huang, Yongchao Gong, Chang Huang, Xinggang Wang,
华中科技大学,地平线, 2019
这篇CVPR 2019的论文是对Mask R-CNN的改进,其motivation也非常直接:Mask R-CNN直接使用box分类confidence作为mask confidence,这中间的gap一定会造成性能损失。这一出发点和同为CVPR 2019的GIoU非常相似。并设计了一个额外的网络,使用mask以及用于生成mask的特征concate作为输入。
顺便一提,从这篇论文开始,要开始放弃全文翻译,学会提炼总结论文的重点了。
1. Introduction
本文实际提出了一种新的实例分割性能度量方法。如COCO正在使用的是准确率-召回率曲线和AP。但在大部分实例分割方法里,实例mask与box分类共享得分。因为分类的目的是区分语义类别,而不知道实例mask的实际质量与完整的,把分类confidence用于度量mask质量是不合适的。可以从图1看到这一错位。很显然,用把很高的分类分给这些很差的mask打分,会降低评价结果。
我们的模型会为每个mask训练预测一个score,而不是直接使用分类score,我们把它称为mask score。受实例分割的AP度量启发,我们使用预测与gt mask间像素级的IoU来描述实例分割质量,我们提出了一个网络来直接学习这个IoU,我们将它记做MaskIoU。测试时,我们用得到的MaskIoU乘以分类得分,就得到了mask score。
训练MaskIoU与训练分类或mask差别很大,因为它需要把预测的mask与物体特征进行“比较”。这个预测网络称为MaskIoU head,接收mask与RoI特征作为输入,并用回归loss进行训练。
从图2也可以看出,Mask R-CNN中,MaskIoU和score相关性不高。
3. Methods
3.2 Mask scoring in Mask R-CNN
Mask scoring: 我们把$S_{mask}$定义为预测的mask的得分。理想的$S_{mask}$应该等于预测的mask与对应gt mask间的像素级IoU。理想的$S_{mask}$同样应只对对应gt的类有正值,其余类为0,因为每个mask只属于一类。这就要求$S_{mask}$需要完成两个任务:将mask分类到正确类型,回归得到proposal的前景物体类型的MaskIoU。
很难用一个物体检测函数训练两个任务。我们将训练mask score任务分解为mask分类和IoU回归,记做$s_{mask} = s_{cls} \cdot s_{iou}$。
$s_{cls}$已经被分类任务完成了,因此重点在于$s_{iou}$。
MaskIoU head: MaskIoU head目标是回归预测与gt mask的IoU。我们把来自ROIAlign层的特征和预测的mask进行连接concate,作为输入。我们使用了kernel size为2,步长为2的max pooling将mask尺寸降到与特征一致。我们仅为gt类回归MaskIoU(测试时,我们选择预测的类)。MaskIoU head有4层卷积和3层fc。卷积层我们按照Mask head的方式,kernel size为3,通道为256。fc的中间层输出为1024,最终为类数量。
Training: 我们使用RPN的proposal作为训练样本。训练样本需要与gt bbox IoU大于0.5,与训练Mask head的训练样本一样。我们先获得目标类的预测mask,然后使用阈值0.5对mask进行二值化,从而为每个训练类生成回归目标。
接着我们使用二元mask与对应的gt mask的MaskIoU作为目标。使用了l2 loss回归MaskIoU,权重为1。
Inference: 测试时我们使用MaskIoU head来校正R-CNN生成的分类得分。Mask R-CNN的R-CNN阶段输出了N个限位框,通过SoftNMS得到top-k个得分最高的限位框。这k个box送入Mask head生成多类别mask。到这里都是标准的Mask R-CNN inference流程。我们同样按照这个流程,并将mask用于预测MaskIoU。得到的MaskIoU与分类得分相乘,即最终的mask confidence。
网络结构图见图3。实验细节不再赘述。包括不同backbone的比较,MaskIoU head输入的组合方法的实验,确定训练样本的阈值选择实验等。