MASK-RCNN网络介绍
目录
- 前言
- 一.MASK R-CNN网络
- 1.1.RoIPool和RoIAlign
- 1.2.MASK分支
- 二.损失函数
- 三.Mask分支预测
前言
在介绍MASK R-CNN
之前,建议先看下FPN
网络,Faster-CNN
和FCN
的介绍:下面附上链接:
- R-CNN、Fast RCNN和Faster RCNN网络介绍
- FCN网络介绍
- FPN网络介绍
在之前介绍数据集的时候我们讲过图像分割分为语义分割和实例分割,看下面两幅动图展示:
语义分割:
实例分割:
今天介绍的MASK R-CNN
是针对实例分割这种情况的,我们主要从以下几个部分进行讲解:
- MASK R-CNN网络
- RoiAlign
- Mask分支(FCN)
- 损失函数
- Mask分支预测
一.MASK R-CNN网络
先来看下MASK R-CNN
网络结构:
从上面的网络结构可以看出,前面的RolAlign+CNN
就是前面的Faster-RCNN
结构(实际中Faster-RCNN
使员的也是RoIAlign
,并不是RoIPool
)。后面一个卷积层就是自己可以并联的的网络结构用于分割,关键点检测都行。
下面我们来看下MASK
分支的结构,跟FCN
非常像,主要有两种结构:不带FPN特征金字塔结构和带有FPN
的,我们经常使用的也是右边这个带有FPN
的。
1.1.RoIPool和RoIAlign
上面讲到在MASK R-CNN
中吧之前Faster R-CNN
中的RoIPool
替换成了RoIAlign
层,为什么呢?因为在RoIPool
中涉及两次取整的操作,会导致定位产生偏差。
这里我们再来看下RoIPool
操作:
从上面的图中可以看出,RoIPool
可能会涉及两次取整操作,我们以目标检测的标注框为例解释,第一次是在标注框大小投影到最终网络输出特征层进行了一次四舍五入;第二次是在maxpooling
的时候,因为投影后的框不能保证能够均分,还会涉及到一次四舍五入。
相比于RoIPool
,通过上面的图可以看到,第一次投影的时候RoIAlign
并不会涉及到四舍五入的操作,最终计算的值是多少就是多少;第二次池化的时候直接均分第一次投影得到的特征矩阵,找到中心点坐标和周围最近的几个点(也可以采用几个采样点计算均值,这里以一个为例),直接计算双线性差值,也不会涉及到四舍五入的操作。
通过上面的对比可以看出RoIAlign
并不会涉及到任何的取整操作,所以他的定位也更加的准确。
1.2.MASK分支
上面我们讲MASK
分支有两种,带FPN
和不带FPN
,我们最常用的是下面这个带有FPN
的结构:
注意1:
上图中有两个RoI
,上面一个对应的是Faster R-CNN
的预测器的分支,他所用的RoIAlign
跟MASK
分支采用的RoIAlign
并不一样,即两者不共用一个RoIAlign
,一个输出的大小是7×77\times 77×7,一个是13×1313\times1313×13。因为分割要求保留更多的信息,池化比较大的话会损失比较多的信息。下面一个MASK
分支的最后输出28×28×8028\times28\times8028×28×80的意思是对每一个类别(COCO
通常使用的都时候80个类别的)都预测一个28×2828\times2828×28大小的蒙版。
在MASK R-CNN
中对预测的Mask
和class
进行解耦,什么意思?FCN
对每个像素,每个类别都会预测一个类别概率分数,最后会对每个像素沿着channel
方向进行softmax
处理,处理之后就能能得到每个像素归属每个类别的概率分数,所以不同类别之间是存在竞争关系的。通过sofmax
之后,每个像素在channel
方向概率只和等于1
,对于某个类别的概率分数大的话,那么其他类别的概率分数就会小。所以他们之间存在竞争关系,即AMSK
与class
是耦合的状态。那么在MASK R-CNN
中是怎么对mask
与class
进行解耦的呢?刚才说了在mask
分支中对每个预测类别都会预测一个蒙版,但是不会针对每一个数据沿着他的channel
方向做softmax
处理,而是根据faster r-cnn
分支预测针对该目标的类别信息将mask
分支中针对该类别的蒙版信息提取出来使用。这段话听起来有点绕,晦涩难懂,多理解一下。核心就是mask
分支现在不用自己的分类信息了,把faster r-cnn
的分类信息拿过来当做自己的。
注意2:
训练网络的时候输入MASK
分支的目标是由RPN
提供的,即proposals
,需要注意的是输入给mask
分支的proposals
全都是正样本,正样本是在Faster R-cnn
分支进行正负样本匹配的时候得到的,即将proposals
输入到faster r-cnn
分支,在fasterr-cnn
分支中会进行正负样本的匹配就会得到每个proposal
到底是正样本还是负样本以及这个proposal
他所对应的GT
类别是什么,将得到的所有正样本传递给Mask
分支。
预测的时候输入mask
分支的目标是由faster-cnn
提供,即最后预测的目标边界框。RPN
提供的目标边界框可能并不准确,对于一个目标,RPN
可能提供了多个目标边界框,我们刚说了提供给mask
分支的proposals
都是正样本,所以一定会存在交集,这些proposals
都可以提供给mask
分支进行训练,但是在最终预测的时候是直接使用的Faster R-CNN
分支的输出,因为预测的时候只需要最准确的目标边界框即可,可能就一个目标,将这个目标提供给MASK
分支即可,并且在Faster RCNN
中,通过NMS
处理之后是能过滤掉很多重合在一起的目标,最终送入mask分支的目标也就少一些,目标少一些计算量就会下降。
二.损失函数
损失函数总共三项,就是在Faster R-cnn
的基础上加上了mask
分支所对应的损失。
Loss=Lrpn+Lfastrcnn+LmaskLoss =L_{r p n}+L_{fast_rcnn }+L_{mask } Loss=Lrpn+Lfastrcnn+Lmask
如何计算mask
分支的损失,这里我们借用一篇博主画的图,如上图所示,输入一张图片,经过backbone
和fpn
得到不同采样率的特征层,接着通过RPN
就能生成一系列的proposals
,假设通过RPN
得到了一个Proposal
(图中黑色的矩形框),将proposal
输入给RoIAlign
,就能根据proposal
的大小在对应特征层上进行裁剪得到对应的特征(shape为14×14×C14\times14\times C14×14×C),接着通过Mask Branch
预测每个类别的Mask
信息得到图中的logits(
logits通过
sigmoid激活函数后,所有值都被映射到0至1之间)。上面讲了训练的时候输入mask
的分支的proposal
是由RPN
提供的,并且这些proposal
都是正样本,这些正样本是通过Fast R-CNN
分支正负样本匹配过程知道的,对应图上的proposal
通过faster rcnn
时,在正负样本匹配的时候可以得到对应的GT
是猫,所以将logits
中对应类别猫的预测mask
(shape
为28×2828\times2828×28)提取出来。需要注意的是这里的logits
虽然没有在通道上做softmax
处理,但是会进行sigmoid
激活,也就是会将每个预测值映射到0-1
之间。然后根据Proposal
在原图对应的GT
上裁剪并缩放到28×2828\times2828×28大小,得到图中的GT mask
(对应目标区域为1,背景区域为0)。最后计算logits
中预测类别为猫的mask
与GT mask
的BCELoss(BinaryCrossEntropyLoss)
即可。以上仅仅是以一个proposal
为例的,实际中会有很多。
三.Mask分支预测
在真正预测推理的时候,输入Mask
分支的目标是由Fast R-CNN
分支提供的。如上图所示,前面的backbon+fpn,RPN
跟上面介绍的都是一样的,不再介绍。RPN
输出的proposal
s通过Fast R-CNN分支(注意这里的RoIAlign
跟上面的mask的不一样),我们能够得到最终预测的目标边界框信息以及类别信息。接着将目标边界框信息提供给Mask
分支通过RoIAlign
得到对应的特征,对于每个类别都预测一个mask
,就能预测得到该目标的logits
信息,再根据Fast R-CNN
分支提供的类别信息将logits中对应该类别的Mask
信息提取出来,即针对该目标预测的Mask
信息(shape
为28×2828\times2828×28,由于通过sigmoid
激活函数,数值都在0在这里插入代码片
到1
之间)。然后利用双线性插值将Mask缩放到预测目标边界框大小,并放到原图对应区域。接着通过设置的阈值(默认为0.5
)将Mask
转换成一张二值图,比如预测值大于0.5
的区域设置为前景剩下区域都为背景。现在对于预测的每个目标我们就可以在原图中绘制出边界框信息,类别信息以及目标Mask
信息。
相关文章:

MASK-RCNN网络介绍
目录前言一.MASK R-CNN网络1.1.RoIPool和RoIAlign1.2.MASK分支二.损失函数三.Mask分支预测前言 在介绍MASK R-CNN之前,建议先看下FPN网络,Faster-CNN和FCN的介绍:下面附上链接: R-CNN、Fast RCNN和Faster RCNN网络介绍FCN网络介绍…...

导航技术调研(CSDN_0023_20221217)
文章编号:CSDN_0023_20221217 目录 1. 惯性导航 2. 组合导航技术 3. 卡尔曼滤波 1. 惯性导航 惯性导航系统(INS-Inertial Navigation System)是上个世纪初发展起来的。惯性导航是一种先进的导航方法,但实现导航定位的原理却非常简单,它是…...

买卖股票的最佳时机 I II III IV
121. 买卖股票的最佳时机 自己的思路:采用求最长连续子串和题目的思路 class Solution {public int maxProfit(int[] prices) {if(prices.length 1) return 0;int[] nums new int[prices.length - 1];for(int i 0;i < prices.length - 1;i){nums[i] prices[…...

STM32—LCD1602
LCD1602(Liquid Crystal Display)是一种工业字符型液晶,能够同时显示 1602 即 32 字符(16列两行) 第 1 脚: VSS 为电源地 第 2 脚: VDD 接 5V 正电源 第 3 脚: VL 为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最…...

英雄算法学习路线
文章目录零、自我介绍一、关于拜师二、关于编程语言三、算法学习路线1、算法集训1)九日集训2)每月算法集训2、算法专栏3、算法总包四、英雄算法联盟1、英雄算法联盟是什么?2、如何加入英雄算法联盟?3、为何会有英雄算法联盟&#…...

【设计模式】备忘录模式和迭代器模式
备忘录模式和迭代器模式备忘录模式代码示例迭代器模式代码示例使用迭代器遍历集合的同时不能删除/增加元素总结备忘录模式 备忘录模式,也叫快照(Snapshot)模式。 在 GoF的《设计模式》⼀书中,备忘录模式是这么定义的:…...

rapidcsv 写csv文件实例
csv实质是一个文本文件,可以使用rapidcsv写文件操作,如下实例: 第一行实质是从-1行开始,列是从0开始 #include "rapidcsv.h" #include <string> using namespace std; void CMFCApplication1Dlg::OnBnClickedBu…...

数据库--进阶篇--9--存储引擎
MySQL体系结构 索引是在引擎层,所以不同的存储引擎,它的索引结构不同。 存储引擎简介 存储引擎就是存储数据、建立所以、更新/查询数据等技术的实现方式。存储引擎是基于表的,而不是基于库的,所以存储引擎也可以被称为表类型。 …...
物品的管理的隐私政策
本应用尊重并保护所有使用服务用户的个人隐私权。为了给您提供更准确、更有个性化的服务,本应用会按照本隐私权政策的规定使用和披露您的个人信息。但本应用将以高度的勤勉、审慎义务对待这些信息。除本隐私权政策另有规定外,在未征得您事先许可的情况下…...

深度解析首个Layer3 链 Nautilus Chain,有何优势?
以流支付为主要概念的Zebec生态,正在推动流支付这种新兴的支付方式向更远的方向发展,该生态最初以Zebec Protocol的形态发展,并从初期的Solana进一步拓展至BNB Chian以及Near上。与此同时,Zebec生态也在积极的寻求从协议形态向公链…...

配对变量t检验
区别双变量t检验,见:https://mp.csdn.net/postedit/100640098 配对变量为两两相关的变量:如敷药前后体重变化。 要求:两变量服从正态分布。 SPSS演练 打开数据文件:ptest.sav 载地址:https://download.c…...

蓝桥杯三月刷题 第八天
文章目录💥前言😉解题报告💥分数🤔一、思路:😎二、代码:💥回文日期🤔一、思路:😎二、代码:💥迷宫🤔一、思路:😎二、代码&a…...

EXCEL技能点3-常用技能1
1 引用格式 公式中引用单元格或者区域时,引用的类型可分为以下三种: 绝对引用 相对引用 混合引用 在Excel里,每个单元格都有一个编码,就像人的身份证一样,在Excel里是按照行列进行编码,例如A1就是第一列的第一行。 那么我们想要引…...
经典分类模型回顾16-AlexNet实现垃圾分类(Tensorflow2.0版)
AlexNet是2012年由亚历克斯克里斯托夫(Alex Krizhevsky)等人提出的一种卷积神经网络结构,它在ImageNet图像识别比赛中获得了第一名,标志着卷积神经网络的崛起。 AlexNet的结构包括8层网络,其中前5层为卷积层ÿ…...
vue3使用vuex
第一步安装: package.json { "name": "demo", "version": "0.1.0", "private": true, "scripts": { "serve": "vue-cli-service serve", "build": "vue-c…...

Java面向对象:抽象类的学习
本文介绍了抽象类的基本语法概念,什么是抽象类. Java中抽象类的语法,抽象类的特性 抽象类的作用(抽象类和普通类的区别) 用抽象类实现多态… 抽象类的学习一.什么是抽象类二.抽象类语法三.抽象类的特性四.抽象类的作用五. 抽象类实现多态一.什么是抽象类 在面向对象的概念中&am…...

modbus转profinet网关连接5台台达ME300变频器案例
通过兴达易控Modbus转Profinet(XD-MDPN100)网关改善网络场景,变频器有掉线或数据丢失报警,影响系统的正常运行,将5台 ME300变频器modbus转Profinet到1200PLC,通过网关还可以实现Profinet转modbus RTU协议转…...

多校园SaaS运营智慧校园云平台源码 智慧校园移动小程序源码
智慧校园管理平台源码 智慧校园云平台源码 智慧校园全套源码包含:电子班牌管理系统、成绩管理系统、考勤人脸刷卡管理系统、综合素养评价系统、请假管理系统、电子班牌发布系统、校务管理系统、小程序移动端、教师后台管理系统、SaaS运营云平台(支持多学…...

用DQN实现Atari game(Matlab代码实现)
目录 💥1 概述 📚2 运行结果 🎉3 参考文献 👨💻4 Matlab代码 💥1 概述 强化学习研究的是Agent和环境交互中如何学习最优策略,以获得最大收益。Agent需要能够观察环境(observe)所处的状态&…...

【JavaSE专栏11】Java的 if 条件语句
作者主页:Designer 小郑 作者简介:Java全栈软件工程师一枚,来自浙江宁波,负责开发管理公司OA项目,专注软件前后端开发(Vue、SpringBoot和微信小程序)、系统定制、远程技术指导。CSDN学院、蓝桥云…...

智慧医疗能源事业线深度画像分析(上)
引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

基于Docker Compose部署Java微服务项目
一. 创建根项目 根项目(父项目)主要用于依赖管理 一些需要注意的点: 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件,否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...
.Net Framework 4/C# 关键字(非常用,持续更新...)
一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...
Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?
在大数据处理领域,Hive 作为 Hadoop 生态中重要的数据仓库工具,其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式,很多开发者常常陷入选择困境。本文将从底…...
CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝
目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为:一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...

C++ 设计模式 《小明的奶茶加料风波》
👨🎓 模式名称:装饰器模式(Decorator Pattern) 👦 小明最近上线了校园奶茶配送功能,业务火爆,大家都在加料: 有的同学要加波霸 🟤,有的要加椰果…...

[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.
ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #:…...

软件工程 期末复习
瀑布模型:计划 螺旋模型:风险低 原型模型: 用户反馈 喷泉模型:代码复用 高内聚 低耦合:模块内部功能紧密 模块之间依赖程度小 高内聚:指的是一个模块内部的功能应该紧密相关。换句话说,一个模块应当只实现单一的功能…...

C++_哈希表
本篇文章是对C学习的哈希表部分的学习分享 相信一定会对你有所帮助~ 那咱们废话不多说,直接开始吧! 一、基础概念 1. 哈希核心思想: 哈希函数的作用:通过此函数建立一个Key与存储位置之间的映射关系。理想目标:实现…...