Mask R-CNN论文理解

摘要:

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

 

1、Introduction

  • 实例分割不仅要正确的找到图像中的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分支只做语义分割,类型预测的任务交给另一个分支。这与原本的FCN网络是不同的,原始的FCN在预测mask时还用同时预测mask所属的种类。
  • 没有使用什么花哨的方法,Mask RCNN就超过了当时所有的state-of-the-art模型。
  • 使用8-GPU的服务器训练了两天。

 

2、Related Work

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

 

3、Mask R-CNN

MaskRCNN网络结构泛化图:

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

 

细节描述

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

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

stage1和stage2层次结构图:

 结合MaskRCNN网络结构图,注重点出以下几点:

1) 虽然事先将ResNet网络分为5个stage,但是,并没有利用其中的Stage1即P1的特征,官方的说法是因为P1对应的feature map比较大计算耗时所以弃用;相反,在Stage5即P5的基础上进行了下采样得到P6,故,利用了[P2 P3 P4 P5 P6]五个不同尺度的特征图输入到RPN网络,分别生成RoI.

2)[P2 P3 P4 P5 P6]五个不同尺度的特征图由RPN网络生成若干个anchor box,经过NMS非最大值抑制操作后保留将近共2000个RoI(2000为可更改参数),由于步长stride的不同,分开分别对[P2 P3 P4 P5]四个不同尺度的feature map对应的stride进行RoIAlign操作,将经过此操作产生的RoI进行Concat连接,随即网络分为三部分:全连接预测类别class、全连接预测矩形框box、全卷积预测像素分割mask

2. ROIAlign

对于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 Pooling的上述缺点,作者提出了ROI Align这一改进的方法。ROI Align的思路很简单:取消量化操作,使用双线性内插的方法获得坐标为浮点数的像素点上的图像数值,从而将整个特征聚集过程转化为一个连续的操作。值得注意的是,在具体的算法操作上,ROI Align并不是简单地补充出候选区域边界上的坐标点,然后将这些坐标点进行池化,而是重新设计了一套比较优雅的流程:

  • 遍历每一个候选区域,保持浮点数边界不做量化。
  • 将候选区域分割成k x k个单元,每个单元的边界也不做量化。
  • 在每个单元中计算固定四个坐标位置,用双线性内插的方法计算出这四个位置的值,然后进行最大池化操作。

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

3、损失函数:分类误差+检测误差+分割误差,即L=Lcls+Lbox+Lmask

   Lcls、Lbox:利用全连接预测出每个RoI的所属类别及其矩形框坐标值,可以参看FasterRCNN网络中的介绍。

   Lmask:

 ① mask分支采用FCN对每个RoI的分割输出维数为K*m*m(其中:m表示RoI Align特征图的大小),即K个类别的m*m的二值mask;保持m*m的空间布局,pixel-to-pixel操作需要保证RoI特征 映射到原图的对齐性,这也是使用RoIAlign解决对齐问题原因,减少像素级别对齐的误差。

        K*m*m二值mask结构解释:最终的FCN输出一个K层的mask,每一层为一类,Log输出,用0.5作为阈值进行二值化,产生背景和前景的分割Mask

这样,Lmask 使得网络能够输出每一类的 mask,且不会有不同类别 mask 间的竞争. 分类网络分支预测 object 类别标签,以选择输出 mask,对每一个ROI,如果检测得到ROI属于哪一个分 类,就只使用哪一个分支的相对熵误差作为误差值进行计算。(举例说明:分类有3类(猫,狗,人),检测得到当前ROI属于“人”这一类,那么所使用的Lmask为“人”这一分支的mask,即,每个class类别对应一个mask可以有效避免类间竞争(其他class不贡献Loss)

 ② 对每一个像素应用sigmoid,然后取RoI上所有像素的交叉熵的平均值作为Lmask。

 

每个 ROI 区域会生成一个 m*m*numclass 的特征层,特征层中的每个值为二进制掩码,为 0 或者为 1。根据当前 ROI 区域预测的分类,假设为 k,选择对应的第 k 个 m*m 的特征层,对每个像素点应用 sigmoid 函数,然后计算平均二值交叉损失熵,如下图所示:

上图中首先得到预测分类为 k 的 mask 特征,然后把原图中 bounding box 包围的 mask 区域映射成 m*m大小的 mask 区域特征,最后计算该 m*m 区域的平均二值交叉损失熵。

 

 训练和预测细节:

 

 参考:

https://blog.csdn.net/wangdongwei0/article/details/83110305

https://blog.csdn.net/jiongnima/article/details/79094159

https://blog.csdn.net/xiamentingtao/article/details/78598511

http://blog.leanote.com/post/afanti.deng@gmail.com/b5f4f526490b

https://www.cnblogs.com/wangyong/p/9305347.html

https://cloud.tencent.com/developer/news/189753

转载于:https://www.cnblogs.com/CJT-blog/p/10443945.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/351313.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

doctype html h5,HTML DOCTYPE

前言:DOCTYPE标签在平常书写HTML的时候总是放在首位内容,但是他有什么作用呢。正文:html之中的DOCTYPE书写H5与H4的时候我们引用的使用的DOCTYPE是会有些许不一样的。HTML4的时候我们使用如下格式:>p.s.这里我们说一下H4的几种…

servlet基础_Servlet基础

servlet基础通过本教程,我将尝试使您更接近Java Servlet模型。 在检查servlet规范中定义的类之前,我将解释在开始开发Web应用程序之前需要了解的基本知识。 了解Java Servlet模型 首先,不仅为基于请求和响应编程模型的规范的Web应用程序定义…

纯 CSS 实现高度与宽度成比例的效果

http://zihua.li/2013/12/keep-height-relevant-to-width-using-css/ 转载于:https://www.cnblogs.com/ygm900/p/10443982.html

c++ || && 逻辑短路问题

结论&#xff1a;“或”逻辑前面为1&#xff0c;“与”逻辑前面为0就会发生短路 1——或逻辑短路 include <stdio.h> int main() { int a5,b6,c7,d8,m2,n2; (ma<b)||(nc>d); printf("%d\t%d",m,n); } 输出的结果为1,2.为什么呢&#xff0c;因为a<b&am…

2021年计算机学硕考研c9,【JRs观点】学姐3000字记录考研8个月心得及作息时间表,献给2021考研同学,从二本到C9...

其实自己不会写东西&#xff0c;本文就像记流水账一样记录一下自己考研的过程吧。18年考研&#xff0c;从二本考上自己理想的985&#xff0c;这心中酸楚只有自己能体会&#xff0c;我个人觉得考研考的是坚持、方法、毅力。在这里把自己的一些经历分享给大家。考研成绩421&#…

abstract

Abstract 类 不能实例化Abstract 方法 在父类里定义抽象方法,在子类里定义这个具体的方法,所以它是抽象的.好处 减少复杂度和提高可维护性 抽象类的子类需要实现父类中的抽象方法&#xff0c;否则会报错。转载于:https://www.cnblogs.com/Frances-CY-FKYM/p/10444062.html

Neo4j:使用LOAD CSV检测CSV标头中的恶意空间

上周&#xff0c;我正在帮助某人将CSV文件中的数据加载到Neo4j中&#xff0c;我们在过滤掉其中一列中包含空值的行时遇到了麻烦。 数据如下所示&#xff1a; load csv with headers from "file:///foo.csv" as row RETURN row╒═════════════════…

lib 和 dll 的区别、生成以及使用详解

【目录】 lib dll介绍 生成动态库 调用动态库 生成静态库 调用静态库 首先介绍一下静态库&#xff08;静态链接库&#xff09;、动态库&#xff08;动态链接库&#xff09;的概念&#xff0c;首先两者都是代码共享的方式。 静态库&#xff1a;在链接步骤中&#xff0c;连接器将…

HDU4631Sad Love Story

这道题是用multiset直接维护就行了&#xff08;可是我根本不会multiset) 用一些剪枝就能跑出来 还有 不要爆int #include <set> #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; const lo…

计算机知识点小报,制作电脑小报的教案

制作电脑小报的教案教学目标&#xff1a;巩固WORD知识&#xff0c;掌握文档间复制&#xff0c;培养学生的创新能力和综合解决问题的能力&#xff0c;加强爱国主义教育。教学重点&#xff1a;提高学生对WORD的熟练程度&#xff0c;掌握文档间的复制操作及文字和图片的排版。教学…

C++:vector中的resize()函数 VS reserve()函数

http://www.cplusplus.com/reference/vector/vector/vector/ 写代码的时候无意错用了这两个函数 导致测试的时候&#xff0c;程序运行崩溃 发现这两个函数还是有区别的 void reserve (size_type n); reserver函数用来给vector预分配存储区大小&#xff0c;即capacity的值 &…

使用Gradle的maven-publish插件发布快照

我最近与Gradle一起开始了一个新项目 &#xff0c;并决定直接参加–没有Gradle经验&#xff0c;没有关于Groovy的线索&#xff0c;没有教程&#xff0c;只是继续尝试直到可行。 在我决定使用孵化式maven-publish插件将快照发布到Sonatype的Maven快照存储库之前&#xff0c;这一…

计算机网络ipv4到ipv6怎么实现,论计算机网络协议IPV4到IPV6的过渡策略|房屋搬迁过渡协议...

摘要&#xff1a;近年来IPV4协议的网络地址问题已经成为阻碍互联网发展的主要矛盾&#xff0c;而互联网的发展趋势将证明IPV4协议必将会被IPV6协议所替代,但其过渡的过程必定是艰难而漫长的。本文论述了IPV4协议存在的主要问题&#xff0c;并详细的分析了IPV4协议向IPV6协议过渡…

STL常用容器浅谈

STL是C/C开发中一个非常重要的模板&#xff0c;而其中定义的各种容器也是非常方便我们大家使用。下面&#xff0c;我们就浅谈某些常用的容器。这里我们不涉及容器的基本操作之类&#xff0c;只是要讨论一下各个容器其各自的特点。STL中的常用容器包括&#xff1a;顺序性容器&am…

使用AWS使Spring Boot应用程序无服务器运行

在之前的 几篇 文章中&#xff0c;我描述了如何设置Spring Boot应用程序并在AWS Elastic Beanstalk上运行它。 尽管这是从物理服务器到云服务器的伟大一步&#xff0c;但还有更好的可能&#xff01; 走向无服务器 。 这意味着无需花费任何服务器费用&#xff0c;也无需维护或配…

计算机对中断的处理是在用户态下进行的,电大本科生作业系统作业3与答案.doc...

电大本科生作业系统作业3与答案《操作系统》课程作业(三)姓名         班级         学号一、选择题(选择一个正确答案的代码填入括号中)作业生存期共经历4个状态&#xff0c;它们是提交、后备、( )和完成。A&#xff0e;等待 B&#xff0e;就绪 C&#xff0…

浏览器输入网址到浏览器渲染页面的过程

1) 在客户端浏览器中输入网址URL。 2) 发送到DNS(域名服务器)获得域名对应的WEB服务器的IP地址。 3) 客户端浏览器与WEB服务器建立TCP(传输控制协议)连接。 4) 客户端浏览器向对应IP地址的WEB服务器发送相应的HTTP或HTTPS请求。 5) WEB服务器响应请求&#xff0c;返回指定的URL…

【资料整理】proftpd安装配置

【资料整理】proftpd安装配置1&#xff09;下载安装 wget ftp://ftp.proftpd.org/distrib/source/proftpd-1.3.4c.tar.gz tar zxvf proftpd-1.3.4c.tar.gz cd proftpd-1.3.4c (启用配额模块&#xff0c;限制上传大小&#xff0c;如果重新configure&#xff0c;则需要先make dis…

poj 1873

哇实验室里正在吵架&#xff0c;爽死了&#xff01; wf水题。显然二进制枚举&#xff0c;注意剪枝&#xff0c;val>ans的时候剪一下&#xff0c;不然会tle。然后就没惹。 我老人家一开始写了个 感觉非常垃圾&#xff0c;wa了一发又t了一发。 感觉自己可以退役了 1 #include …

汉中计算机培训班学费是多少,汉中远程教育培训班收费多少

汉中远程教育培训班收费多少&#xff1f;在企事业单位&#xff0c;无论你的从业履历有多么辉煌&#xff0c;没有本科学历就是一道硬伤。在这个层面上&#xff0c;本科学历是你求得工作的一块“敲门砖”。还有&#xff0c;很多企事业单位是靠学历论薪或者晋职加薪的重要条件&…