【Mask RCNN】论文详解(真的很详细)

【Mask RCNN】论文详解(真的很详细)论文:http://cn.arxiv.org/pdf/1703.06870v3本文主要是针对论文的详细解析,选出文章各部分的关键点,方便阅读立即。目录:摘要:1、Introduction2、RelatedWork3、MaskR-CNN3.1ImplementationDetails4、Experiments:InstanceSegmentation4…

大家好,又见面了,我是你们的朋友全栈君。

论文:http://cn.arxiv.org/pdf/1703.06870v3

推荐参考facebook的开源代码加深理解:https://github.com/facebookresearch/maskrcnn-benchmark

任何问题,请私聊我,优先解答购买专栏的同学~

目录:

摘要:

1、Introduction

2、Related Work

3、Mask R-CNN

3.1 Implementation Details

4、Experiments: Instance Segmentation

4.1 Main Results

4.2  Ablation Experiments(剥离实验)

4.3. Bounding Box Detection Results      

4.4. Timing 

5. Mask R-CNN for Human Pose Estimation

Appendix A: Experiments on Cityscapes

Implementation:

Results:

Appendix B: Enhanced Results on COCO

Instance Segmentation and Object Detection

Keypoint Detection

 

 


摘要:

  • Mask RCNN可以看做是一个通用实例分割架构。
  • Mask RCNN以Faster RCNN原型,增加了一个分支用于分割任务。
  • Mask RCNN比Faster RCNN速度慢一些,达到了5fps。
  • 可用于人的姿态估计等其他任务;

【Mask RCNN】论文详解(真的很详细)

1、Introduction

  • Instance Segmentation(实例分割)不仅要正确的找到图像中的objects,还要对其精确的分割。所以Instance Segmentation可以看做object dection和semantic segmentation的结合。
  • Mask RCNN是Faster RCNN的扩展,对于Faster RCNN的每个Proposal Box都要使用FCN进行语义分割。
  • 引入了RoI Align代替Faster RCNN中的RoI Pooling。因为RoI Pooling并不是按照像素一一对齐的(pixel-to-pixel alignment),也许这对bbox的影响不是很大,但对于mask的精度却有很大影响。使用RoI Align后mask的精度从10%显著提高到50%,第3节将会仔细说明。
  • 引入语义分割分支,实现了mask和class预测的关系的解耦,mask分支只做语义分割,类型预测和bbox回归任务交给另一个分支。这与原本的FCN网络是不同的,原始的FCN在预测mask时还用同时预测mask所属的种类。
  • Mask RCNN就超过了当时所有的state-of-the-art模型。
  • 使用8-GPU的服务器训练了两天。

2、Related Work

  • 相比于FCIS,FCIS使用全卷机网络,同时预测物体classes、boxes、masks,速度更快,但是对于重叠物体的分割效果不好(为什么不好?)

3、Mask R-CNN

  • Mask R-CNN基本结构:与Faster RCNN采用了相同的two-state结构:首先是通过一阶段网络找出RPN,然后对RPN找到的每个RoI进行分类、定位、并找到binary mask。这与当时其他先找到mask然后在进行分类的网络是不同的。
  • Mask R-CNN的损失函数L = L{_{cls}} + L{_{box}} + L{_{mask}} (当然了,你可以在这里调权以实现更好的效果)
  • Mask的表现形式(Mask Representation):因为没有采用全连接层并且使用了RoIAlign,我们最终是在一个小feature map上做分割。
  • RoIAlignRoIPool的目的是为了从RPN网络确定的ROI中导出较小的特征图(a small feature map,eg 7×7),ROI的大小各不相同,但是RoIPool后都变成了7×7大小。RPN网络会提出若干RoI的坐标以[x,y,w,h]表示,然后输入RoI Pooling,输出7×7大小的特征图供分类和定位使用。问题就出在RoI Pooling的输出大小是7×7上,如果RON网络输出的RoI大小是8*8的,那么无法保证输入像素和输出像素是一一对应,首先他们包含的信息量不同(有的是1对1,有的是1对2),其次他们的坐标无法和输入对应起来。这对分类没什么影响,但是对分割却影响很大。RoIAlign的输出坐标使用插值算法得到,不再是简单的量化;每个grid中的值也不再使用max,同样使用差值算法。

【Mask RCNN】论文详解(真的很详细)

  • Network Architecture: 为了表述清晰,有两种分类方法

  1. 使用了不同的backbone:resnet-50,resnet-101,resnext-50,resnext-101;

  2. 使用了不同的head Architecture:Faster RCNN使用resnet50时,从Block 4导出特征供RPN使用,这种叫做ResNet-50-C4

  3. 作者使用除了使用上述这些结构外,还使用了一种更加高效的backbone:FPN(特征金字塔网络)

【Mask RCNN】论文详解(真的很详细)

3.1 Implementation Details

使用Fast/Faster相同的超参数,同样适用于Mask RCNN

  • Training:

           1、与之前相同,当IoU与Ground Truth的IoU大于0.5时才会被认为有效的RoI,L{_{mask}}只把有效RoI计算进去。

           2、采用image-centric training,图像短边resize到800,每个GPU的mini-batch设置为2,每个图像生成N个RoI,在使用ResNet-50-C4 作为backbone时,N=64,在使用FPN作为backbone时,N=512。作者服务器中使用了8块GPU,所以总的minibatch是16, 迭代了160k次,初始lr=0.02,在迭代到120k次时,将lr设定到 lr=0.002,另外学习率的weight_decay=0.0001,                            momentum = 0.9。如果是resnext,初始lr=0.01,每个GPU的mini-batch是1。

           3、RPN的anchors有5种scale,3种ratios。为了方便剥离、如果没有特别指出,则RPN网络是单独训练的且不与Mask R- CNN共享权重。但是在本论文中,RPN和Mask R-CNN使用一个backbone,所以他们的权重是共享的。

            (Ablation Experiments 为了方便研究整个网络中哪个部分其的作用到底有多大,需要把各部分剥离开)

  • Inference:在测试时,使用ResNet-50-C4作为 backbone情况下proposal number=300,使用FPN作为 backbone时proposal number=1000。然后在这些proposal上运行bbox预测,接着进行非极大值抑制。mask分支只应用在得分最高的100个proposal上。顺序和train是不同的,但这样做可以提高速度和精度。mask 分支对于每个roi可以预测k个类别,但是我们只要背景和前景两种,所以只用k-th mask,k是根据分类分支得到的类型。然后把k-th mask resize成roi大小,同时使用阈值分割(threshold=0.5)二值化

4、Experiments: Instance Segmentation

4.1 Main Results

在下图中可以明显看出,FCIS的分割结果中都会出现一条竖着的线(systematic artifacts),这线主要出现在物体重的部分,作者认为这是FCIS架构的问题,无法解决的。但是在Mask RCNN中没有出现。

【Mask RCNN】论文详解(真的很详细)

【Mask RCNN】论文详解(真的很详细)

4.2  Ablation Experiments(剥离实验)

  • Architecture:
    从table 2a中看出,Mask RCNN随着增加网络的深度、采用更先进的网络,都可以提高效果。注意:并不是所有的网络都是这样。
  • Multinomial vs. Independent Masks:(mask分支是否进行类别预测)                                                                                    从table 2b中可以看出,使用sigmoid(二分类)和使用softmax(多类别分类)的AP相差很大,证明了分离类别和mask的预测是很有必要的
  • Class-Specific vs. Class-Agnostic Masks:                                                                                                                            目前使用的mask rcnn都使用class-specific masks,即每个类别都会预测出一个mxm的mask,然后根据类别选取对应的类别的mask。但是使用Class-Agnostic Masks,即分割网络只输出一个mxm的mask,可以取得相似的成绩29.7vs30.3
  • RoIAlign:                                                                                                                                                                                    tabel 2c证明了RoIAlign的性能
  • Mask Branch:
    tabel 2e,FCN比MLP性能更好

4.3. Bounding Box Detection Results      

【Mask RCNN】论文详解(真的很详细)

  • Mask RCNN精度高于Faster RCNN(为什么呢?分割和bbox检测不是单独分开互不影响吗?难道加上分割分支可以提高bbox检测效果?有空做做实验)
  • Faster RCNN使用RoI Align的精度更高
  • Mask RCNN的分割任务得分与定位任务得分相近,说明Mask RCNN已经缩小了这部分差距。

4.4. Timing 

  • Inference:195ms一张图片,显卡Nvidia Tesla M40。其实还有速度提升的空间,比如减少proposal的数量等。
  • Training:ResNet-50-FPN on COCO trainval35k takes 32 hours  in our synchronized 8-GPU implementation (0.72s per 16-image mini-batch),and 44 hours with ResNet-101-FPN。

5. Mask R-CNN for Human Pose Estimation

【Mask RCNN】论文详解(真的很详细)

让Mask R-CNN预测k个masks,每个mask对应一个关键点的类型,比如左肩、右肘,可以理解为one-hot形式。

  • 使用cross entropy loss,可以鼓励网络只检测一个关键点;
  • ResNet-FPN结构
  • 训练了90k次,最开始lr=0.02,在迭代60k次时,lr=0.002,80k次时变为0.0002

 

Appendix A: Experiments on Cityscapes

包含fine annotations images:2975 train ,500 val,1525 test

图片大小 2048×1024

使用COCO的AP作为评价指标

数据十分不平衡!

【Mask RCNN】论文详解(真的很详细)

Implementation:

  • 使用ResNet-FPN-50作为back bone,不适用ResNet-FPN-101是因为数据集小,没什么提升。
  • 训练时,图像短边从[800,1024]随机选择,可以减小过拟合。
  • 在预测时,图像短边都是1024
  • 每个GPU的mini-batch为1,共8个GPU
  • 训练24k次,初始lr为0.01,18k时减小到0.001,
  • 总共训练时间8小时

Results:

【Mask RCNN】论文详解(真的很详细)

  • person和car存在大量的类内重叠,给分割网络提出了挑战,但是Mask-RCNN成功解决了
  • 这个数据集十分不平衡,truck,bus,train的数据量很少,所以使用的coco数据集预训练Mask RCNN,分析上表,其他网络预测准确率低也主要低在truck,bus,train三个类别上,所以使用coco预训练还是很有用的。
  • 验证数据集val和测试数据集test AP的差距较大,主要原因在于truck,bus,train三类训练数据太少,person,car这种训练数据多的类别就不存在这种现象。即使使用coco数据集进行预训练也无法消除这种bias。

Appendix B: Enhanced Results on COCO

Instance Segmentation and Object Detection
 

【Mask RCNN】论文详解(真的很详细)

 使用一些技巧,可提高精度。可以在这里找到之后的更新:https://github.com/facebookresearch/Detectron

  • Updated baseline:使用不同的超参数延长迭代次数至180k次,初始学习率不变,在120k和160k时减小10倍,NMS的阈值从默认的0.3改为0.5。

  • End-to-end training:之前的学习都是先训练RPN,然后训练Mask RCNN。

  • ImageNet-5k pre-training: 数据量比coco增加了5倍,预训练更有效

  • Train-time augmentation:训练数据增强

  • Model architecture:使用152-layer的ResNeXt

  • Non-local:

  • Test-time augmentation:

Keypoint Detection

简单说下,如果你已经理解了maskrcnn中分割的实现方式:分割head的最后的输出是一个channel为1的feature map,feature map的尺寸是[56, 56]

我们只需要简单的变化一下,加入我们有k个keypoint,那我们只需要把 分割head 最后一个输出channel设置为k,这k个feature map每个预测一个keypoint位置。

 

 

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/135806.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 企业微信提现到个人银行卡_微信支付怎么把钱提出来

    企业微信提现到个人银行卡_微信支付怎么把钱提出来https://blog.csdn.net/baidu_37366055/article/details/81215962?utm_source=blogxgwz7后续需要使用,所以暂时转载记录一下

  • Jenkins(6)测试报告邮件发送

    Jenkins(6)测试报告邮件发送前言前面已经实现在jenkins上展示html的测试报告,接下来只差最后一步,把报告发给你的领导,展示你的劳动成果了。安装EmailExtensionPlugin插件jenkins首页-

  • C语言中fprintf_c语言gets函数用法

    C语言中fprintf_c语言gets函数用法c语言中fprintf函数C中的fprintf()函数(fprintf()functioninC)Prototype:原型:intfprintf(FILE*filename,constchar*string,….);Parameters:参数:FILE*filename,constchar*stringetc….

  • 网站被ddos攻击怎么办_服务器遭受攻击

    网站被ddos攻击怎么办_服务器遭受攻击网站遭遇DOS攻击一、事件背景   长假对于IT人员来说是个短暂的休整时期,可IT系统却一时也不能停,越是节假日,越可能出大问题,下面要讲述的就是一起遭受DOS攻击的案例。   春节长假刚过完,小李公司的Web服务器就出了故障。下午1点,吃完饭回来,小李习惯性的检查了Web服务器。Web服务器的流量监控系统显示下行的红色曲线,与此同时收到了邮件报警,可以判断服务器出现了状况

  • ECshop二次开发「建议收藏」

    ECshop二次开发「建议收藏」1.ECShop之更改商城楼层显示:ECShop原来楼层显示效果:根据现在的楼层需要添加新的一类楼层:①登录商城后台依次打开商品管理=》商品分类,此时对应模块的楼层如图所示:②编辑需要添加分类,将“在频道首页显示该二级分类”选项更改为显示:③刷新前端,对应页面的分类显示数据就显示出来了…

    2022年10月22日
  • 网站服务器建立数据库连接时出错,WordPress提示建立数据库连接出错的解决办法…[通俗易懂]

    网站服务器建立数据库连接时出错,WordPress提示建立数据库连接出错的解决办法…[通俗易懂]很多新手使用wordpress程序建站初期,会遇到页面提示:建立数据库连接出错,英文提示:“Errorestablishingadatabaseconnection”。那么遇到这种情况大家会很头疼,我到底哪里操作不对呀?本文中老魏就实际遇到的此类情况做详细解释。出错的原因有几种,从字面意思能看出来和数据库无法正常读取有关。也许是因为数据库登陆信息不对,也许是数据库挂了无法读取等等。Wor…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号