Mask R-CNN

论文链接:https://arxiv.org/abs/1703.06870

代码参考:https://github.com/multimodallearning/pytorch-mask-rcnn/blob/master/model.py

一、简介

Mask R-CNN是He Kaiming大神2017年的力作,其在进行目标检测的同时进行实例分割,取得了出色的效果,其在没有任何trick的情况下,取得了COCO 2016比赛的冠军。其网络的设计也比较简单,在Faster R-CNN基础上,在原本的两个分支上(分类+坐标回归)增加了一个分支进行语义分割,如下图所示:

在这里插入图片描述

二、Mask R-CNN详细介绍

那么为什么该网络会有如此好的效果,又有哪些网络细节呢?下面详细逐一介绍。

在介绍Mask R-CNN之前,首先了解一下什么是分割,因为Mask R-CNN是做这个的,所以这个首先要搞清楚,看下图,主要介绍了几种不同的分割,其中Mask RCNN做的是其中的instance segmentation.

  • 语义分割(semantic segmentation):对图像中逐像素进行分类。
  • 实例分割(instance segmentation):对图像中的object进行检测,并对检测到的object进行分割。
  • 全景分割(panoptic segmentation):对图像中的所有物体进行描述。

下面这张图很好的表示了这几者分割的区别,如下图可见,全景分割的难度最大:
在这里插入图片描述

Mask R-CNN如何取得好结果

首先实例分割(instance segmentation)的难点在于:需要同时检测出目标的位置并且对目标进行分割,所以这就需要融合目标检测(框出目标的位置)以及语义分割(对像素进行分类,分割出目标)方法。在Mask R-CNN之前,Faster R-CNN在目标检测领域表现较好,同时FCN在语义分割领域表现较好。所以很自然的方法是将Faster R-CNN与FCN相结合嘛,作者也是这么干的,只是作者采用了一个如此巧妙的方法进行结合,并且取得了amazing的结果。

在以前的instance segmentation中,往往是先分割然后识别,这往往是低效的,并且准确率较低,就比如Dai【论文中提到的】,采用级联的方法,先通过bounding-boxes生成segment区域,然后进行分类。

那么Mask R-CNN是怎么做的呢?

Mask R-CNN是建立在Faster R-CNN基础上的,那么我们首先回顾一下Faster R-CNN,Faster R-CNN是典型的two stage的目标检测方法,首先生成 RPN候选区域, 然后候选区域经过Roi Pooling进行目标检测(包括目标分类以及坐标回归),分类与回归共享前面的网络
Mask R-CNN做了哪些改进?Mask R-CNN同样是two stage的,生成RPN部分与Faster R-CNN相同,然后,Mask R-CNN在Faster R-CNN的基础上,增加了第三个支路,输出每个ROI的Mask(这里是区别于传统方法的最大的不同,传统方法一般是先利用算法生成mask然后再进行分类,这里平行进行

自然而然,这变成一个多任务问题

网络结构如下

下图所示是两种典型的Mask R-CNN网络结构,作者借鉴FPN(不了解FPN可以点击参考此博文)的思想,分别设计了两种网络结构,左边的是采用ResNet or ResNeXt作为网络的backbone提取特征,右边的网络采用FPN网络作为backbone进行特征提取,并且作者指明,使用FPN作为基础网络的效果其实是最好的。
在这里插入图片描述
损失函数的设计是网络的精髓所在

Mask R-CNN的损失函数为: L = L c l s + L b o x + L m a s k

  • 15
    点赞
  • 126
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
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这个版本。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值