CVPR2019-实例分割Mask Scoring R-CNN
今年的Oral,在coco数据集表现超过了Mask RCNN,来自地平线的华科实习生。
论文:Mask Scoring R-CNN【paper】【github】
1. 提出背景
Mask RCNN 提出以来,一直是作为经典霸屏,但这里面一直存在一个严重的问题,那就是其score机制:
由于沿用了 Faster RCNN 的 class和box,对应class是类别score,并不能代表mask的好坏,看下图:

2. 算法框架
问题提出来,很简单的想法就是,我能否加一个分支预测mask部分的score呢?比如用IoU来度量。

思路很简单,在Mask head的基础上,加了一个分支,将ROI对齐后的特征与得到的Mask做了一个concat,然后通过卷积层+全连接层,得到IoU Score,最后通过score相乘得到最终的得分:
Smask = Scls ∗ Siou
- 训练阶段
来看网络是如何训练的?给几个key point:
1)对于新增的IoU分支,训练样本是RPN的正样本(负样本只参与分类),与Mask分支一致;
定义正样本为RPN的Box与Ground Truth的IoU大于0.5。
2)针对得到的Mask结果,根据阈值(文中是0.5)做二值化,计算二值化结果 和 Ground Truth的mask IoU;
当二值化mask结果与GT一致时,Loss = 1 - Mask IoU = 0
这里的二值化可以考虑修改一下,比如采用soft mask的方案。
3)3个head分支同时训练。
这里作者试验了多个head,根据试验效果最后选择当前head,这里也有改进的空间,大家可以好好分析一下。
- 推理阶段
1)对于输出的box做soft-NMS处理后,得到score top-k(文中k=100)的box;
这一步和mask RCNN并无区别,根据输出box映射到mask 分支,获取对应的分割图。
2)将得到的分割图送入mask IoU分支,计算对应得分;
3)仅使用Mask IoU的score来矫正class core,能够整体反应分割的够不够好;
3. 测试效果
测试效果很不错,请看大屏幕:

在CoCo数据集上的表现(不同backbone上均有显著提升):
