Mask R-CNN个人理解

1 简述

Mask R-CNN是一个小巧、灵活的通用对象实例分割框架(object instance segmentation)。它不仅可对图像中的目标进行检测,还可以对每一个目标给出一个高质量的分割结果。它在Faster R-CNN[1]基础之上进行扩展,并行地在bounding box recognition分支上添加一个用于预测目标掩模(object mask)的新分支。该网络还很容易扩展到其他任务中,比如估计人的姿势,也就是关键点识别(person keypoint detection)。该框架在COCO的一些列挑战任务重都取得了最好的结果,包括实例分割(instance segmentation)、候选框目标检测(bounding-box object detection)和人关键点检测(person keypoint detection)。

2 结构

一共可以分为两个分支:

(1)第一个分支为原始Faster R-CNN的结构,它用于对候选窗口进行分类和窗口坐标回归。(2)第二个分支对每一个感兴趣区域(Region of Interest,RoI)预测分割掩模,它利用了一个小的全卷积网络结构[2](Fully Convolutional Network,FCN)。

3 主要关键因素

关键点1:解决特征图与原始图像上的RoI不对准问题

问题描述:RoIPool[3]是一种针对每一个RoI的提取一个小尺度特征图(e.g. 7x7)的标准操作,它用以解决将不同尺度的RoI提取成相同尺度的特征大小的问题。RoIPool首先将浮点数值的RoI量化成离散颗粒的特征图,然后将量化的RoI分成几个空间的小块(spatial bins),最后对每个小块进行max pooling操作生成最后的结果。该操作类似于下图,但只取了一个尺度。

通过计算[x/16]在连续坐标x上进行量化,其中16是特征图的步长,[ . ]表示四舍五入。 这些量化引入了RoI与提取到的特征的不对准问题 。由于分类问题对平移问题比较鲁棒,所以影响比较小。但是这在预测像素级精度的掩模时会产生一个非常的大的负面影响。

解决方案:作者提出RoIAlign层来解决这个问题,并且将提取到的特征与输入对齐。方法很简单,避免对RoI的边界或者块(bins)做任何量化,例如直接使用x/16代替[x/16]。作者使用双线性插值(bilinear interpolation)在每个RoI块中4个采样位置上计算输入特征的精确值,并将结果聚合(使用max或者average)。

关键点2:将掩模预测和分类预测拆解

该框架对每个类别独立地预测一个二值掩模,没有引入类间竞争,每个二值掩模的类别依靠网络RoI分类分支给出的分类预测结果。 这与FCNs不同,FCNs是对每个像素进行多类别分类,它同时进行分类和分割,基于实验结果表明这样对于对象实例分割会得到一个较差的性能。

下面介绍一下更多的细节,在训练阶段,作者对于每个采样的RoI定义一个多任务损失函数L=L_{cls}+L_{box}+L_{mask} ,前两项不过多介绍。掩模分支对于每个RoI会有一个Km^{2}维度的输出,它编码了K个分辨率为m\times m的二值掩模,分别对应着K个类别。因此作者利用了a per-pixel sigmoid,并且定义L_{mask}为平均二值交叉熵损失(the average binary cross-entropy loss)。对于一个属于第k个类别的RoI,L_{mask}仅仅考虑第k个mask(其他的掩模输入不会贡献到损失函数中)。这样的定义会允许对每个类别都会生成掩模,并且不会存在类间竞争。

关键点3:掩模表示

一个掩模编码了一个输入对象的空间布局。作者使用了一个FCN来对每个RoI预测一个m\times m的掩模,这保留了空间结构信息。

对于以上几个关键点,作者在表格2中给出了详细的性能比较。

针对关键点1:

针对关键点2:

针对关键点3:


4 结果展示与性能对比



[1] Faster R-CNN: To- wards real-time object detection with region proposal net- works. In NIPS, 2015.

[2] Fully convolutional networks for semantic segmentation. In CVPR, 2015.

[3] Fast R-CNN. In ICCV, 2015.

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Mask RCNN 是基于Kaiming 之前的工作 FPN (Feature Pyramid Network) 很形象地说就是用FPN产生的检测结果, 后面加了一个分割的网络. 文章中用到了 Top-Down + Bottom-Up 最近很流行的多层网络, 因为最开始Faster-RCNN只是在最后一层上面检测, 很容易丢掉小目标物体, 并且对细节遮挡也很不敏感. 最近的趋势就是结合多层 特征, 答主孔涛就很早发现了这个insight, 做出了HyperNet 并中了CVPR roal!!!作者:Oh233 链接:https://www.zhihu.com/question/57403701/answer/153060743 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 Mask R-CNN 这个结果确实很强,但要同时注意它主要是加上了许多(都是很有用的)engineering techniques 。 比如说 anchor 从 12 增加到了15个,图像 size 从600变成了800,还有ROI batch size变到了512,从FPN那篇paper来看,这些 better practice 会有对性能十分明显的提升 (table 3 baseline: AP=26.3 -> 31.6)。而我们组16年的coco分割竞赛冠军 ,Fully Convolutional Instance-aware Semantic Segmentation (FCIS)的代码昨晚终于开源了。限于计算资源,我们并没有加上这些改进。这些改进应该是比较 general 的,也会适用于 FCIS。欢迎大家试用一波。FCIS 提供了一种简单高效的框架去解决 instance segmentation 的问题。跟之前 COCO 2015 的冠军 MNC 相比,它的主要不同在于 mask estimation 和 detection 是共同做的,而不是先估计 mask 再做 detection。在 FCIS 中 detection/mask estimation 之间通过 inside/outside score map 互相影响,利用了这两个紧密相连 task 之间的共性。现在 release 版本基于支持多卡训练的MXNet,msracver/FCIS。实际上大概今年一月份我们就已经写出了外面可以使用的Caffe版本,但是当时官方 Caffe 只支持单卡做复杂任务的训练,对于COCO这种大规模数据集来说用单卡训练的话一下子几周的时间就过去了。考虑到大家用起来会非常蛋疼,最后还是决定没有release这个版本。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值