【实例分割系列:三】Mask Scoring R-CNN

2019 CVPR Oral

Mask Scoring R-CNN

Introduction

问题:分类置信度 与 Mask IOU 的偏差

( Mask RCNN 是对每个类别独立地预测一 个二值掩模 ,没有引入 类间竞争 , 每个二值掩模 的类别依靠 网络RoI分类分支给出的 分类 score 。但是,由下图可见 ,分类 score 与 MaskIoU 的相关性并不好. )

解决: 模型学习每个 Mask 与 gt 之间的 IOU score 乘 分类 score 。

  • 实例分割利用预测 Mask 与 groud truthMask 之间的像素级 IoU 来描述实例分割质量,提出了一种直接学习 IoU 的网络。( MaskIoU )

  • 一旦我们在测试阶段得到了预测的 Mask 分数,通过将预测的 Mask 分数与分类分数相乘 来重新评估Mask分数。因此,Mask Score 同时考虑语义类别和实例 Mask 的完整性

Mask RCNN

Mask RCNN 简单回顾

  • 第一阶段是区域建议网络(RPN)。它提出了候选对象边界框,而不考虑对象类别。
  • 第二阶段称为R-CNN阶段,对每个proposal使用RoIAlign提取特征,并进行proposal分类、bbox 回归和Mask预测。

Network

网络模块 MaskIoU head 把 Mask Head 的输出(预测)与 pooling 后的 ROI 的特征 作为该分支的输入,去回归 mask IOU。

MaskIoU head

论文中将 mask score learning task 分解成 mask classification 和 IoU regression,如上图

  • 在Mask head的基础上,加了一个分支,将 ROI对齐后的特征 与得到的 Mask 做了一个 concat
  • 然后通过卷积层+全连接层,得 到IoU Score
  • 最后通过score相乘得到最终的得分:

S m a s k ​ = S c l s × S i o u S_{mask}​ = S_{cls} × S_{iou} Smask=Scls×Siou

问题

网络是如何训练的?

  • MaskIoU 分支,训练样本是RPN的正样本(负样本只参与分类),与Mask分支一致;

定义正样本为 RPN的Box 与 Ground Truth 的 IoU 大于0.5。

  • 针对得到的Mask结果,根据阈值(文中是0.5)做二值化,计算二值化结果 和 Ground Truth的mask IoU;

  • 3个head分支同时训练。

这里作者试验了多个head,根据试验效果最后选择当前head ,下图(a)

网络是如何 inference ?

  • 对于输出的box做soft-NMS处理后,得到score top-k(文中k=100)的box;
    这一步和mask RCNN并无区别,根据输出box映射到mask 分支,获取对应的分割图。

  • 将得到的分割图送入mask IoU分支,计算对应得分;

  • 仅使用 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推理过程 。
    • 论文中也遵循这个过程,并送入 ktarget mask 用于估计 MaskIoU 。估计得到的 MaskIoU 乘上 classification score,得到矫正后的 mask score 作为最终的 mask confidence。[3]

Pytorch

maskscoring_rcnn[PyTorch]

References

[1] 性能超越何恺明Mask R-CNN!华科硕士生开源图像分割新方法
[2] https://blog.csdn.net/weixin_37993251/article/details/88248361
[3]https://blog.csdn.net/ShuqiaoS/article/details/89152728

猜你喜欢

转载自blog.csdn.net/qq_31622015/article/details/101207651