本文记录了博主阅读论文《Mask Scoring R-CNN》的笔记,代码。更新于2019.04.19。
用于实例分割。
主要贡献:
在Mask R-CNN中,score of a detection(也就是实例分割)是由分类score中最大值决定的。但是由于背景混乱、遮挡等问题,很有可能分类score很高但是mask效果很差,如下图所示:
下图比较中使用的是Mask R-CNN with ResNet-18 FPN,COCO 2017 验证集。比较显示,classification score和MaskIoU在Mask R-CNN中没有多少相关性。
Mask Scoring R-CNN在概念上还是相对简单的:即带有MaskIoU Head的Mask R-CNN,其输入为实例特征和predicted mask,随后估计输入mask和真值mask之间的IoU,如下图所示。
Mask R-CNN: 先简单回顾一下Mask R-CNN。在Faster R-CNN之后,Mask R-CNN包括两个阶段。第一阶段是Region Proposal Network(RPN),其提供无类别的candidate object bounding boxes;第二阶段称为R-CNN阶段,其通过RoIAlign提取每个proposal的特征,并进行proposal分类、bounding box回归和mask估计。
Mask scoring: 定义 s mask \text s_{\text{mask}} smask为score of the predicted mask,其概念与predicted mask和对应的ground truth mask之间的像素级IoU等同,前文称作MaskIoU。因为一个mask只能属于一个类别,因此 s mask \text s_{\text{mask}} smask应该对于真值类别只包含正数,其他类别全是0。这就要求mask score应该在这两项任务中都表现良好:分类到正确类别,将proposal的MaskIoU回归到前景目标类别。
只用一个目标函数来训练两个任务是很难的,为了简化,论文中将mask score learning task分解成mask classification和IoU regression,用 s mask = s cls ⋅ s iou \text s_{\text {mask}}=\text s_{\text {cls}}\cdot\text s_{\text{iou}} smask=scls⋅siou代表所有目标类别。 s cls \text s_{\text {cls}} scls专注解决proposal属于哪个类别, s iou \text s_{\text{iou}} siou解决MaskIoU的回归。
对于 s cls \text s_{\text {cls}} scls,在R-CNN阶段已经解决了分类问题,因此可以直接用对应的classification score。回归 s iou \text s_{\text{iou}} siou是这篇论文的目标。
MaskIoU head: MaskIoU head旨在回归predicted mask和其ground truth mask之间的IoU,其输入是RoIAlign层的级联特征和predicted mask。在级联的时候,用的是尺寸为2步长为2的max pooling使得predicted mask与RoIAlign特征尺寸相同。回归时,只处理真值类别(或测试时处理估计类别)而非全部类别。MaskIoU head包括4层卷积层和3层全连接层,其中卷积层遵从Mask head,尺寸为3,通道数为256;全连接层遵循RCNN head,前两层神经元个数为1024,最后一层为类别数。
训练: 训练MaskIoU head时,用RPN proposals作为训练样本。训练样本要求proposal box和对应的ground truth box之间有大于0.5的IoU(跟训练Mask R-CNN的Mask head时相同)。为了给每个样本生成regression target,首先获取目标类别的predicted mask,再用阈值0.5将其二值化。
随后,用binary mask和对应的ground truth计算MaskIoU作为MaskIoU target。回归MaskIoU用的是 l 2 \mathscr{l}_2 l2损失,损失权重为1。提出的MaskIoU head整合在Mask R-CNN中,整个网络端到端训练。
推断(inference): 在推理阶段,只应用MaskIoU head校正R-CNN生成的classification score。具体来讲,假设Mask R-CNN的R-CNN阶段输出N个bounding box,选中其中应用SoftNMS之后的前k(k=100)个scoring box。之后,这k个box被送入Mask head用于生成multi-class mask。这是标准的Mask R-CNN推理过程。论文中也遵循这个过程,并送入k个target mask用于估计MaskIoU。估计得到的MaskIoU乘上classification score,得到矫正后的mask score作为最终的mask confidence。
所有实验都在COCO数据集上完成,有80个目标类别。用115k张训练,5k张验证,20k张测试。度量:
ResNet-18 FPN(用于对比):输入尺寸600x(<1000)
ResNEt-50/101:输入尺寸800x1333
所有算法训练18个epoch,14个epoch和17个epoch后学习率下降率为0.1。
所有剥离实验用的都是ResNet-18 FPN结构。
The design choices of MaskIoU head input: 首先研究了设计的选择,即从mask head和RoI特征到predicted mask score map(28x28xC)的融合。下图是几种选择:
解释如下:
下表为结果:
The choices of the training target:
下表为结果:
如何选取训练样本:
MaskIoU不超过0.5。给定阈值 τ \tau τ,有如下结果: