mask rcnn简介

mask rcnn是何凯明基于以往的faster rcnn架构提出的新的卷积网络,一举完成了object instance segmentation. 该方法在有效地目标的同时完成了高质量的语义分割。 文章的主要思路就是把原有的Faster-RCNN进行扩展,添加一个分支使用现有的检测对目标进行并行预测。同时,这个网络结构比较容易实现和训练,速度5fps也算比较快点,可以很方便的应用到其他的领域,像目标检测,分割,和人物关键点检测等。并且比着现有的算法效果都要好,在后面的实验结果部分有展示出来。

场景理解

Mask R-CNN: overview

从上面可以知道,mask rcnn主要的贡献在于如下: 
1. 强化的基础网络 
通过 ResNeXt-101+FPN 用作特征提取网络,达到 state-of-the-art 的效果。 
2. ROIAlign解决Misalignment 的问题 
3. Loss Function

细节描述

1. resnet +FPN

作者替换了在faster rcnn中使用的vgg网络,转而使用特征表达能力更强的残差网络

另外为了挖掘多尺度信息,作者还使用了FPN网络。

2. ROIAlign

说到这里,自然要与roi pooling对比。 
我们先看看roi pooling的原理,这里我们可以看https://github.com/deepsense-ai/roi-pooling 的动图,一目了然。

对于roi pooling,经历了两个量化的过程: 
第一个:从roi proposal到feature map的映射过程。方法是[x/16],这里x是原始roi的坐标值,而方框代表四舍五入。 
第二个:从feature map划分成7*7的bin,每个bin使用max pooling。


这两种情况都会导致证输入和输出之间像素级别上的一一对应(pixel-to-pixel alignment between network input and output)。

因此作者设计了ROI Align layer。

作者的ROI Align layer想法很简单,就是去掉ROI Pooling过程中所有的量化过程,包括从原图proposal到最后一层feature map映射,以及把feature map划分成m*m的bin过程中的量化。

我们使用何凯明在iccv2017的ppt来说明。可以在百度云盘下载。链接: https://pan.baidu.com/s/1jHRubfK 密码: jh5c

如上,roi映射到feature map后,不再进行四舍五入。然后将候选区域分割成k x k个单元, 在每个单元中计算固定四个坐标位置,用双线性内插的方法计算出这四个位置的值,然后进行最大池化操作。

这里对上述步骤的第三点作一些说明:这个固定位置是指在每一个矩形单元(bin)中按照比例确定的相对位置。比如,如果采样点数是1,那么就是这个单元的中心点。如果采样点数是4,那么就是把这个单元平均分割成四个小方块以后它们分别的中心点。显然这些采样点的坐标通常是浮点数,所以需要使用插值的方法得到它的像素值。在相关实验中,作者发现将采样点设为4会获得最佳性能,甚至直接设为1在性能上也相差无几。事实上,ROI Align 在遍历取样点的数量上没有ROIPooling那么多,但却可以获得更好的性能,这主要归功于解决了misalignment的问题。值得一提的是,在做实验的时候发现,ROI Align在VOC2007数据集上的提升效果并不如在COCO上明显。经过分析为造成这种区别的原因是COCO上小目标的数量更多,而小目标对misalignment问题的影响更为明显(比如,同样是0.5个像素点的偏差,对于较大的目标而言显得微不足道,但是对于小目标,误差的影响就要高很多)

下面摘取上面百度云盘里的一个ppt的插图,更加细致地描述roialign。

 
 
 
 

也可以参考:http://blog.leanote.com/post/afanti.deng@gmail.com/b5f4f526490b

上面这篇文章还介绍了ROI Align的反向传播算法。 
roi pooling的求导可以参考:http://ow680yzep.bkt.clouddn.com/iccv15_tutorial_training_rbg.pdf

下图对比了三种方法的不同,其中roiwarp来自:J. Dai, K. He, and J. Sun. Instance-aware semantic segmentation via multi-task network cascades 

3. loss function

损失函数就是分类,回归加mask预测的损失之和。 
 
其中,对于mask分支和其他的分类分支一样,使用全卷积网络输出,输出了k类的mask。注意这里mask的输出使用了sigmoid函数。最后可以通过与阈值0.5作比较输出二值mask。这样避免了类间的竞争,将分类的任务交给专业的classification分支。

而Lmask对于每一个像素使用二值的sigmoid交叉熵损失。

参考theano的文档,二值的交叉熵定义如下: 这里的o就是sigmoid输出。 

4. 整个网络结构

 
这里实际上有两个网络结构,一个就是:Mask R-CNN: overview的那副图(或者如上左边)。使用resnet-c4作为前面的卷积网络,将rpn生成的roi映射到C4的输出,并进行roi pooling,最后进行分叉预测三个目标。

另一个网络就是这里的faster rcnn with fpn。 

上述图像同样来自何凯明的ICCV2017 ppt 
如上,使用fpn网络,每一个阶层连接一个三分支网络。考虑了多尺度信息,因此可以检测更加小的目标。 
至于是否像之前的FPN在各阶层共享三分支网络,不太清楚。

总结

mask rcnn的主要贡献其实就是roi align以及加了一个mask分支。 
目前开源代码有:

  • https://github.com/TuSimple/mx-maskrcnn

    • https://github.com/CharlesShang/FastMaskRCNN

    • CAFFE :https://github.com/jasjeetIM/Mask-RCNN

期待官方的源码放出~~

参考文献

  1. Mask R-CNN论文导读
  2. 如何评价 Kaiming He 最新的 Mask R-CNN?
  3. Mask-RCNN技术解析 [重点推荐]
  4. ROI Align 原理解析和实现细节 [重点推荐]
  5. 论文阅读-《Mask R-CNN》
  6. Mask R-CNN - Notes
  7. Notes: From Faster R-CNN to Mask R-CNN
  8. Implementing Mask R-CNN[重点推荐]
  9. Instance segmentation with Mask R-CNN

Mask R-CNN相关推荐

  1. Faster R CNN

    Faster R CNN 3 FASTER R-CNN 我们的Faster R CNN 由两个模块组成,第一个模块是 proposes regions 的全卷积网络,第二个是使用 proposed r ...

  2. 在OpenCV中使用Mask R-CNN

    本文翻译自:https://www.pyimagesearch.com/2018/11/19/mask-r-cnn-with-opencv/ 在本教程中,您将学习如何在OpenCV中使用Mask R- ...

  3. CVPR2020:三维实例分割与目标检测

    CVPR2020:三维实例分割与目标检测 Joint 3D Instance Segmentation and Object Detection for Autonomous Driving 论文地址 ...

  4. 自动驾驶任务|基于概率的3D多模态多目标跟踪(ICRA2021)

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 标题:Probabilistic 3D Multi­Modal,Multi­Object Tracki ...

  5. 对象检测目标小用什么模型好_[目标检测] YOLO4论文中文版

    点击上方 蓝字 关注我呀! [目标检测] YOLO4论文中文版 文章目录 YOLO4论文中文版 摘要 1.介绍 2.相关工作 2.1.目标检测模型 2.2.Bag of freebies 2.3.Ba ...

  6. 【AI视野·今日CV 计算机视觉论文速览 第160期】Wed, 25 Sep 2019

    AI视野·今日CS.CV 计算机视觉论文速览 Wed, 25 Sep 2019 Totally 39 papers ?上期速览✈更多精彩请移步主页 Interesting: ?Interactive ...

  7. 【今日CV 计算机视觉论文速览 143期】Mon, 15 Jul 2019

    今日CS.CV 计算机视觉论文速览 Mon, 15 Jul 2019 Totally 24 papers ?上期速览✈更多精彩请移步主页 Interesting: ?***图像操作解耦网络, 研究人员 ...

  8. 【今日CV 计算机视觉论文速览 第131期】Mon, 17 Jun 2019

    今日CS.CV 计算机视觉论文速览 Mon, 17 Jun 2019 Totally 44 papers ?上期速览✈更多精彩请移步主页 Interesting: ?综述:基于图像的深度重建, 基于单 ...

  9. 【今日CV 计算机视觉论文速览 第127期】Fri, 7 Jun 2019

    今日CS.CV 计算机视觉论文速览 Fri, 7 Jun 2019 Totally 41 papers ?上期速览✈更多精彩请移步主页 Interesting: ?*****Mesh R-CNN, 研 ...

  10. 【今日CV 计算机视觉论文速览 第122期】Fri, 31 May 2019

    今日CS.CV 计算机视觉论文速览 Fri, 31 May 2019 Totally 50 papers ?上期速览✈更多精彩请移步主页 Interesting: ?基于条件GANs的图像去水印方法, ...

最新文章

  1. 金科院男生大学4年赚50万 毕业前又接500万订单
  2. php css去除h1样式,HTML中怎么设置h1的字体样式你知道吗?
  3. elasticsearch-6.0.1安装
  4. oracle segment extent block,Oracle的基础问题segment extent block
  5. docker mysql5.7 主从_使用Docker部署MySQL 5.78.0主从集群的方法步骤
  6. java oracle 视图不存在_java – 获取异常ORA-00942:表或视图不存在 – 插入现有表时...
  7. H3C实验室Vlan的简单运用
  8. linux中对shell变量内容的修改和替换
  9. javascript学习一、js的初步了解
  10. 计算机组成原理第五版第四章课后答案,计算机组成原理第四章课后习题及答案_唐朔飞(完整版).docx...
  11. NLP中文句子类型判别和分类实现
  12. 环境影响评价概论期末试题重点考点
  13. Qt开发——圆面积计算器
  14. Your brain expands and shrinks over time — these charts show how
  15. Refinement Network新框架
  16. matlab矩阵求逆的模块,matlab矩阵求逆矩阵
  17. MT7628K eCos开发入门
  18. 手机邮箱怎么弄_我的手机邮箱怎么设置
  19. python 携程_python-携程爬虫
  20. 探索艾利特机器人|EC66机器人在生猪疫苗注射中的应用

热门文章

  1. HookProc 和 CallNextHookEx
  2. 使用C语言文件合并再排序
  3. osquery的认识
  4. 认清业务、技术与软件系统的价值链
  5. Spring IOC BeanDefinition解析
  6. Mysql 学习之 SQL的执行顺序
  7. Ubuntu16.04 问题汇总
  8. 第二阶段冲刺10天 第六天
  9. 开发代码code中变量替换
  10. python-Django环境搭建