本文主要是介绍Mask Scoring R-CNN CVPR19,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
- Mask Scoring R-CNN CVPR19
- 创新
- Introduction
- 方法
- Mask scoring
- MaskIoU head
- loss
- 消融实验(挑感兴趣的)
- 总结
- TensorMask ICCV
- 个人学习记录,侵删
Mask Scoring R-CNN CVPR19
参考https://blog.csdn.net/weixin_37993251/article/details/88248361
https://www.cnblogs.com/wemo/p/10505970.html
创新
在MaskRcnn基础上提出一个block给mask打分。将实例特征和相应的预测掩模结合起来,对mask Iou进行回归。
模型学习每个Mask的一个分数,而不是使用它的分类分数,通过考虑实例mask掩码的完整性,如果一个实例具有高分类分数但是mask却不足够好,那么实例掩码的分数将被扣分。
Introduction
假设,如果一个实例分割没有得到正确的评分,可能会被误认为为 false positive 或者 false negative,导致AP下降。
在MaskRcnn里实例Mask的分数与box-level分类置信度共享,作者认为使用分类置信度来度量Mask质量是不合适的,因为它只用于区分proposal的语义类别,而不知道实例Mask的实际质量和完整性。就是只知道类别的对错,但是不知道mask效果好不好,会导致虽然它对了,但是效果不好。
利用预测掩模与其地面真实掩模之间的像素级交叉联合(IoU)来描述实例分割质量,提出了一个直接学习IoU的网络为MaskIoU。
MaskIOU head:这是一个MaskIoU的预测网络。输入:RoIfeature和mask;输出:C classes MaskIoU
一旦我们在测试阶段获得预测的MaskIoU,就通过乘以预测的MaskIoU和分类分数来重新评估掩模分数。
maskRcnn里得分高的,在mask score rcnn里不一定高
从图a中可以看出,msakrcnn在maskiou很低时,有分数也很高的情况,评分和maskiou没有相关性。图b是MS rcnn 对高评分和低MaskIoU的检测进行了惩罚,并且面具评分与MaskIoU有更好的相关性。
方法
使用ResNet18+FPN,结构其实就是Mask RCNN带MaskIoU Head,将实例特征与预测Mask一起作为输入,预测输入Mask与ground truthMask之间的IoU。
Mask scoring
Smask定义为预测Mask的评分。理想Smask等于预测Mask与其匹配的ground truth Mask之间的像素级IoU,也就是maskIoU。
理想的Smask也应该只对ground truth类别有正的值,对其他类为0,因为Mask只属于一个类。这要求Mask Score 在两项任务上都能很好地工作:将Mask分类到正确的类别,以及对前景对象类别的Mask进行回归。仅仅使用一个目标函数来训练这两个任务是很困难的。为了简化,我们可以将mask score学习任务分解为mask分类和IoU回归,对于所有对象类别,记为
s m a s k = s c l s ⋅ s i o u s_{mask} = s_{cls} · s_{iou} smask=scls⋅siou
MaskIoU head
作用:将预测Mask与其gtMask之间的IoU进行回归。
- 用2x2 max pooing layer and stride of 2 使得预测的mask具有与RoI相同的空间尺寸。
- MaskIoU头有4个卷积层(都有内核=3,最后一个使用步幅=2进行下采样)和3个完全连接的层(最后一个输出C类MaskIoU)。所有卷积层的核大小和filter数分别设置为3和256。
只选择gt类进行回归。
loss
Lcls和Lbox与faster rcnn的定义没有区别。需要具体说明的是Lmask,假设有K个类别,那么mask分支的输出维度为K×m×m,其中m代表featuremap的长宽。每个m×m的上的值都是该类别的二值化结果(使用sigmoid计算)。但最后计算loss的只是,其ground truth对应的类别k所对应的二值化m×m的mask,其他类别产生的mask对loss没有贡献。计算Lmask的方式是,平均二值化交叉熵loss(average binary cross-entropy loss)
然而在实例分割中,可以得到一个位置精确且置信度很高的bbox,但是对应的mask可能是不准确的。因此,MSRCNN提出计算MaskIOU的方式,利用分类的置信和maskiou值的乘积作为该mask的置信。
消融实验(挑感兴趣的)
The design choices of MaskIoU head input不同输入的比较。
(a)目标mask拼接RoI特征:取目标类的分数映射,最大合并,与RoI特征拼接。
(b)目标mask乘以RoI特征:取目标类的分数图,最大合并,与RoI特征相乘。
©所有蒙版连接RoI特性:所有c类蒙版分数映射都是max-pooled并连接RoI特征。
(d)目标mask连接高分辨率RoI特征:分数的地图目标类被连接和28×28 RoI特征。
总结
知乎大佬写的特别清楚https://zhuanlan.zhihu.com/p/64322544
1.假设RCNN阶段输出N个bounding boxes,利用SoftNMS从中挑选top-k个(k=100)boxes
2.这些boxes送到mask分支生成multi-class masks.(截止到此是标准的maskrcnn的前向过程)
3.把这些top-k个 mask送到MaskIOU 分支,得到iou比值,因此,mask评分= confidence*maskiou.
TensorMask ICCV
个人学习记录,侵删
这篇关于Mask Scoring R-CNN CVPR19的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!