Mask R-CNN论文原理讲解

news2024/11/14 13:26:15

论文:arxiv.org/pdf/1703.06870

代码:maskrcnn-benchmark:Fast, modular reference implementation of Instance Segmentation and Object Detection algorithms in PyTorch. - GitCode

Mask R-CNN简介 

        Mask R-CNN是何凯明大神的新作。Mask R-CNN是一种在有效检测目标的同时输出高质量的实例分割mask。是对faster r-cnn的扩展,与bbox检测并行的增加一个预测分割mask的分支。Mask R-CNN 可以应用到人体姿势识别。并且在实例分割、目标检测、人体关键点检测三个任务都取得了现在最好的效果,下图是Mask R-CNN的检测效果图:

        语义分割通过对输入图像中每个像素的标签进行预测,给出了较好的推理,例如是前景还是背景。每个像素都根据其所在的对象类进行标记。为了进一步发展,实例分割为属于同一类的对象的单独实例提供了不同的标签。

        目标检测:可以区分个体但不够准确。
        语义分割:可以划分像素但不可以区分个体。
而实例分割则可以结合二者的优点,对个体的分类及定位更加精准。因此,实例分割可以定义为同时解决目标检测问题和语义分割问题的技术。

 Mask R-CNN架构

从上图可以看出Mask RCNN架构非常接近Faster RCNN。主要区别在于,在网络的末端,还有另一个头,即上图中的掩码分支,用于生成掩码进行实例分割。还有把Faster RCNN中的ROI Pooling换成了ROIAlign。

Mask R-CNN的改进

ROIAlign

ROIAlign是ROIPooling的进化版,下面来具体讲解一下它的优化:

        ROIAlign的提出是为了解决Faster R-CNN中RoI Pooling的区域不匹配的问题,下面我们来举例说明什么是区域不匹配。ROI Pooling的区域不匹配问题是由于ROI Pooling过程中的取整操作产生的(如下图),我们知道ROI Pooling是Faster R-CNN中必不可少的一步,因为其会产生长度固定的特征向量,有了长度固定的特征向量才能进行softmax计算分类损失。

如下图,输入是一张800×800 的图片,经过一个有5次降采样的卷机网络,得到大小为 25×25 的Feature Map。图中的ROI区域大小是 600×500 ,经过网络之后对应的区域为 =18.75X15.625,由于无法整除,ROI Pooling采用向下取整的方式,进而得到ROI区域的Feature Map的大小为 18 × 15 这就造成了第一次区域不匹配。

RoI Pooling的下一步是对Feature Map分bin,加入我们需要一个7 × 7的bin,每个bin的大小为,由于不能整除,ROI同样采用了向下取整的方式,从而每个bin的大小为 2 × 2 ,即整个RoI区域的Feature Map的尺寸为14 × 14。第二次区域不匹配问题因此产生。

对比ROI Pooling之前的Feature Map,ROI Pooling分别在横向和纵向产生了4.75和1.625的误差,对于物体分类或者物体检测场景来说,这几个像素的位移或许对结果影响不大,但是语义分割任务通常要精确到每个像素点,因此ROI Pooling是不能应用到Mask R-CNN中的。

为了解决这个问题,作者提出了RoIAlign。RoIAlign并没有取整的过程,可以全程使用浮点数操作,步骤如下:

1. 计算RoI区域的边长,边长不取整;
2. 将ROI区域均匀分成k × k个bin,每个bin的大小不取整;
3. 每个bin的值为其最邻近的Feature Map的四个值通过双线性插值得到;
4. 使用Max Pooling或者Average Pooling得到长度固定的特征向量。

回到流程的正式讲解,首先输入RP特征图,用的是上一节所讲公式分配的feature map上投射出的,在此不再赘述。补充一下,训练时只传入挑选出的正负样本RP,测试时都传入。然后得到两张7×714×14大小的特征图,分别传入进Head层的两个功能分支。 

Mask分割

Mask分支用的就是传统的FCN图像分割方法,最后生成28×28×80的预测mask结果,注意得到的结果是软掩码,经过sigmoid后的0~1浮点数。

损失函数

网络是如何训练的呢?(损失函数如下图:)

上式的分类损失和回归框矫正损失,就不再赘述了,实在是老生常谈。我来主要讲解一下Lmask
​语义分割损失。在进行掩码预测时,FCN的分割和预测是同时进行的,即要预测每个像素属于哪一类。而Mask R-CNN将分类和语义分割任务进行了解耦,即每个类单独的预测一个位置掩码,这种解耦提升了语义分割的效果。

总结

1. 使用残差网络作为卷积结构
2. 使用Faster R-CNN的物体检测流程:RPN+Fast R-CNN
3. 增加FCN用于语义分割
 

 

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

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

相关文章

武器弹药制造5G智能工厂物联数字孪生平台,推进制造业数字化转型

武器弹药制造领域作为国防工业的重要组成部分,其数字化转型更是关乎国家安全与军事实力提升的关键。随着5G、物联网、大数据、云计算及人工智能等先进技术的融合应用,武器弹药制造5G智能工厂物联数字孪生平台应运而生,正逐步成为推进制造业数…

分享5款支持论文写作网站先稿后付的网站!

在当今学术研究和学术写作领域,AI论文写作工具已经成为不可或缺的助手。这些工具不仅能够提高写作效率,还能帮助研究人员生成高质量的论文内容。特别是那些提供“先稿后付”服务模式的网站,更是为用户提供了极大的便利和保障。以下是五款值得…

记录|SPC公式小结

目录 前言一、基本缩写二、Xbar和R的控制线三、相关系数表更新时间 前言 参考文章: 参考视频: SPC公式小结 一、基本缩写 二、Xbar和R的控制线 三、相关系数表 更新时间 2024.08.29:创建

旗帜分田(华为od机考题)

一、题目 1.原题 从前有个村庄,村民们喜欢在各种田地上插上小旗子,旗子上标识了各种不同的数字。 某天集体村民决定将覆盖相同数字的最小矩阵形的土地的分配给为村里做出巨大贡献的村民, 请问,此次分配土地,做出贡献…

DevEco Studio5 新建项目

Deveco Studio安装结束之后,开始新建一个项目: 1.点击Create Project新建项目 2.选择空的项目–>点击next 3.配置项目信息–>点击Finish 4.进入项目 6.右上方目前处于No Devices(无设备)状态–>点击下拉三角–>点击Devide Manager管理设…

Life long learning

现象:一个model进行multi-task learning做的还可以,说明模型是可以同时学会多个任务的,但是如果训练过程是1个task 1个task的顺序进行,模型就会发生灾难性的遗忘现象,只会做刚学完的task。 目标:让模型不要…

94.WEB渗透测试-信息收集-Google语法(8)

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于: 易锦网校会员专享课 上一个内容:93.WEB渗透测试-信息收集-Google语法(7) • Filetype • Filetype…

二叉树前序,中序,后序非递归遍历(Java)

1. 思路: 首先创建一个栈和顺序表,按照根左右的前序遍历顺序去遍历这棵树,一直往左孩子方向遍历,每遍历到一个结点就入栈并且加入到顺序表里,如果没有左孩子了,就拿出栈顶元素,看它是否有右孩子…

2024年牛客网最全1000道Java中高级面试题包含答案详解,看完稳了

我相信大多 Java 开发的程序员或多或少经历过 BAT 一些大厂的面试,也清楚一线互联网大厂 Java 面试是有一定难度的,小编经历过多次面试,有满意的也有备受打击的。因此呢小编想把自己这么多次面试经历以及近期的面试真题来个汇总分析&#xff…

JavaScript进阶指南之Event Loop

JavaScript进阶指南之Event Loop 引言 简要介绍主题: 在JavaScript的世界中,Event Loop是一个核心机制,它决定了代码的执行顺序,尤其是在处理异步任务时。对于初学者来说,理解Event Loop的工作原理是迈向JavaScript进…

设计模式篇(DesignPattern - 结构型模式)(持续更新迭代)

目录 模式一:适配器模式 一、简介 二、案例一(充电器问题) 1. 类适配器 2. 对象适配器 3. 接口适配器 三、应用 1. HandlerAdapter(SpringMVC 源码应用) 四、总结 模式二:桥接模式 一、简介 1.…

20240829版图的层次

1 最常用 Esc:取消操作 i:插入元件版图 c:复制 m:移动 u:撤销上一步操作 q:查看属性 f:全局视图 e:显示设置(图层、栅格、走线模式等) r:矩形填充…

纷享AI PaaS 助力打造企业级Al专属应用

纷享AIPaaS助力打造企业级Al专属应用 纷享销客人工智能(AI)在多个关键领域下的应用,诸如营销内容生成、线索预测评分、客服工作台助手等,均是通过AIPaaS平台来定制实现。 纷享销客AIPaaS平台通过AgentBuilder和ModelBuilder为上层的场景应用提供底层能…

005-CircuitBreaker断路器-Resilience4J

文章目录 1 CircuitBreaker1.1 实现原理1.2 一句话 2 Resilience4J2.1 是什么2.2 能干嘛2.3 怎么用 3 熔断(CircuitBreaker)(服务熔断服务降级)3.1 断路器三大状态3.2断路器3大状态之前的转换3.3断路器所有配置参数参考3.4 熔断降级案例需求说明3.5 COUNT_BASED(计数的滑动窗口…

6个一键生成原创文案实用方法,亲测好用!

在当下的这个自媒体时代,文案创作的需求日益增长。无论是用于社交媒体、广告宣传还是各种内容创作,优质的原创文案都能起到关键作用。但有时候,我们在创作文案的过程中可能会陷入灵感枯竭的困境。但别担心,这里有6个一键生成原创文…

iOS App快捷指令(App Intents)在系统搜索服务中注册shortcuts

iOS App快捷指令(App Intents)在系统搜索服务中注册shortcuts 前言效果图实现快捷指令1. 定义AppIntent2. 定义`AppShortcutsProvider使用参考资料前言 网上很多资料都是关于IntentsExtension的,但是IntentsExtension只能实现快捷指令的添加,无法在系统搜索服务中搜索到。…

嵌入式day36

数据库 专业存储数据、大量数据 数组、链表、变量---->内存:程序运行结束、掉电数据丢失 文件---->硬盘:程序运行结束、掉电数据不丢失 数据库---->硬盘 数据库文件与普通文件区别: 1.普通文件对数据管理(增删改查…

提前还房贷结果失败了该怎么办?需要注意哪些?怎么做更顺利?

提前还房贷结果失败了,该怎么办? 1. 满足条件再申请:部分银行对提前还款设有一定的条件和限制,例如需要提前预约,对已还款时间和还款金额也有具体的要求。如果借款人未能满足这些条件,提前还款的申请可能会…

0829作业+思维导图

一、作业 代码&#xff1a; #include <iostream> #include <string.h> #include <stdio.h> using namespace std; class Mystring { public://无参构造Mystring():size(10){str new char[size];cout<<"无参构造完成"<<endl;}//有参…

【Java】—— Java面向对象进阶:Java银行账户管理系统设计与实现

目录 1. 账户类&#xff08;Account&#xff09; 2. 客户类&#xff08;Customer&#xff09; 3. 银行类&#xff08;Bank&#xff09; 4. 测试类&#xff08;BankTest&#xff09; 运行结果 在今天的博文中&#xff0c;我们将一起探讨一个简单的Java银行账户管理系统的设…