Mask RCNN网络结构以及整体流程的详细解读

news2024/11/26 20:39:58

文章目录

  • 1、概述
  • 2、Backbone
  • 3、RPN网络
    • 3.1、anchor的生成
    • 3.2、anchor的标注/分配
    • 3.3、分类预测和bbox回归
    • 3.4、NMS生成最终的anchor
  • 4、ROI Head
    • 4.1、ROI Align
    • 4.2、cls head和bbox head
    • 4.3、mask head

1、概述

  • Mask RCNN是在Faster RCNN的基础上增加了mask head用于实例分割的模型。
  • 总体来说,Mask RCNN网络结构可以分为:BackBone(ResNet+FPN) —> RPN网络(Region Proposal Network) —> ROI Head(ROIAlign + cls head + bbox head + mask head)
  • 整体网络结构如下(来自原论文https://arxiv.org/pdf/1703.06870.pdf):
    在这里插入图片描述

2、Backbone

  • Backbone主要由ResNet和FPN组成,如下图
    在这里插入图片描述

1)C1-C5是指ResNet网络5个stage输出的特征图,下采样率分别为2, 4, 8, 16, 32,通道数分别为64, 256, 512, 1024, 2048

在这里插入图片描述

2)FPN网络类似于UNet网络中的跳级连接,都是为了增强多尺度表征能力的:分别对C2-C5四个特征图通过1 × \times × 1卷积改变通道数为256,再与上采样路径中对应尺度的特征图相加。得到的P2-P6就是FPN网络的五个特征图,下采样率为4, 8, 16, 32, 64,通道数都为256
3)需要注意的是,P2-P6这五个特征图将分别作为RPN网络的输入和ROI Head中的ROI Align的输入:

RPN网络的输入:用于在这五个特征图上生成先验的anchor,并对这些anchor进行类别预测和bbox回归,以生成最终的anchor输入到ROI Head中
ROI Align的输入:根据RPN网络生成的anchors,提取这五个特征图中对应的ROI区域特征图,输入到cls、bbox和maskhead中

3、RPN网络

  • RPN网络为Region Proposal Network,主要作用:用于生成先验的anchor box/proposals;并将P2-P6这五个特征图作为网络输入学习得到这些先验的anchor box/proposal的类别(前景or背景)以及通过bbox 回归得到偏移量;最终经过RPN网络预测得到的具有更高质量的proposal送入ROI Head中
  • 主要流程为:1)anchor的生成;2)anchor的标注;3)P2-P6五个特征图进行二分类的预测和bbox回归;4)通过NMS后处理得到最终的anchor

3.1、anchor的生成

  • 在P2-P6的五个特征图上分别对应设置5个不同的anchor size(32, 64, 128, 256, 512)并设置3种长宽比(0.5, 1.0, 2.0),也就是每个特征图的每个像素点生成3个anchor(x, y, w, h)
  • 具体来说,特征图中的每个点都会先映射到原始图像中,并以该点为中心,以对应的anchor size和3种长宽比的设置,生成3个anchor(x, y, w, h)
  • 例如,输入图像为512 × \times × 512,那么五个特征图的尺寸分别为128, 64, 32, 16, 8,那么生成的anchors的数量为(128 × \times × 128 + 64 × \times × 64 + 32 × \times × 32 + 16 × \times × 16 + 8 × \times × 8) × \times × 3 = 21824 × \times × 3 = 65472个anchors

3.2、anchor的标注/分配

  • 该过程就是确定生成的所有anchor为正样本or负样本
  • 标注流程如下:

1)先排除掉超过原图边界的anchors;
2)计算其余的每个anchor与 所有ground truth bbox的IoU,取与每个bbox的的最大IoU作为判断:大于0.7为正样本,小于0.3为负样本;
3)计算每个bbox与那个anchor的IoU最大,把该anchor也标记为正样本

  • 最后随机选择128个正样本和128个负样本用于RPN网络的训练,对于分类:128个正样本的label为1,128个负样本的label和剩下的anchor的label为0;对于bbox回归:超过边界的anchor的label为(0, 0, 0, 0),其余anchor的label是与它对应的具有最大IoU的bbox的实际偏移量

3.3、分类预测和bbox回归

  • 首先对5个特征图进行3 × \times × 3卷积,然后分为2个分支
  • 分类分支为1 × \times × 1卷积,输出通道数为num_anchors=3,表示的是特征图的每个像素点对应的3个anchors为前景的概率值。

需要注意的是,五个特征图分别作为3 × \times × 3卷积和该分支的1 × \times × 1卷积的输入计算得到概率值,再计算128个正样本和128个负样本的分类损失,也就是说只有一组3 × \times × 3卷积和1 × \times × 1卷积

  • bbox回归分支为1 × \times × 1卷积,输出通道数为num_anchors × \times × 4 = 12,表示3个anchor的4个预测位置参数

以下为bbox回归的详细介绍,预测得到的(dx, dy, dw, dh)与ground truth之间计算Smooth L1损失
在这里插入图片描述
在这里插入图片描述

  • 训练RPN网络:对128个正样本和128个负样本计算分类损失:二分类交叉熵损失函数,以及回归损失:Smooth L1损失

3.4、NMS生成最终的anchor

  • 根据RPN网络生成的所有anchor的score和4个位置参数(tx, ty, tw, th)进行如下操作:

1)根据偏移量对anchor的位置进行微调,得到(x, y, w, h)
2)删除掉超过边界的anchor
3)根据score对anchor从大到小进行排序
4)对于每个尺度上的特征图(就是P2-P6的五个特征图),选择前2000个anchor,在经过NMS之后选择最高1000个anchors作为最终的anchor输入到ROI Head中(这些数量属于超参数,可调整)

  • 例如,5个特征图在NMS之前选择的前2000个anchor如下,3和4没到2000是因为他们的特征图P5和P6的尺寸分别为16和8,计算得到的anchors数量为768和192。
    在这里插入图片描述

  • 训练阶段和推理阶段有一些不同:

训练阶段:计算loss并生成anchor
推理阶段:直接生成anchor

  • 生成anchor的NMS的配置可能不同,例如:

训练阶段
在这里插入图片描述
推理阶段
在这里插入图片描述

4、ROI Head

  • 主要包括ROI ALign和3个head: class head, bbox head, mask head

4.1、ROI Align

  • RPN网络最终生成的anchors将作为ROI Align的输入,也就是说根据这些anchors(x, y, w, h) 来提取P2-P6特征图中的anchors对应的特征作为3个head的特征图输入。
  • 我们首先要知道anchors的坐标位置(x, y, w, h)表示的是原图像中的区域,可以将其映射到特征图中,Faster RCNN正是采用了ROI pooling层映射为固定尺寸的ROI区域:
    在这里插入图片描述
  • 但是ROI pooling层由于存在取整操作,对于一些小目标很容易导致区域不匹配问题,因此Mask RCNN采用了ROI ALign操作

1)将anchor映射到对应的特征图中,w和h在被除时不去整,ROI pooling取整了。对于五个特征图的选择方法如下:
在这里插入图片描述

2)将映射后的ROI区域均匀分为K × \times ×K的bin,每个bin的大小不取整,ROI pooling取整了
3)每个bin的每个像素值计算为特征图中与它邻近的4个值的双线性插值
在这里插入图片描述

4)使用max pooling或者average pooling得到K × \times ×K特征图(7 × \times × 7或者14 × \times × 14)作为3个head的输入
在这里插入图片描述

4.2、cls head和bbox head

  • 首先是样本的标注与分配

1)计算由RPN网络最终生成的所有anchors与每个GT bbox的IoU值,取每个anchor的最大IoU值进行判断:IoU>0.5的样本中选择128个正样本,小于0.5的样本中选择384个负样本
在这里插入图片描述

2)对于类别标签:正样本为对应的GT bbox的类别标签,负样本为0;对于bbox回归的标签:与该样本最大IoU值的GT bbox的实际偏移量

  • 将这512个样本anchors通过ROI Align获取得到512个7 × \times × 7 × \times × 256的特征图作为class head和bbox head的输入,进行如下的前向传播:一般为2个3*3卷积+2个fc层
    在这里插入图片描述
  • 最后就是损失函数的计算:分类损失为多类别交叉熵损失,回归损失也是Smooth L1损失

4.3、mask head

  • mask标签和输入特征图的获取

1)计算每个anchor在原始图像中的大mask,就是根据位置参数在原图像的二值mask框出来的
2)根据计算得到的每个anchor对应尺度的特征图(P2-P6中的一个),将anchor位置参数除以缩放倍数/下采样率再进行ROI Align得到512个14 × \times × 14 × \times × 256的特征图作为mask head的输入;
3)而对于大mask也进行倍数缩放,就可以得到每个anchor在对应特征图上的mask(软掩码)—>二值化—>硬掩码

  • 对输入特征图再通过FCN层进行预测得到28 × \times × 28的预测mask结果

在这里插入图片描述

  • 最后进行损失函数的计算,为交叉熵损失
  • 需要注意的是,推理阶段不一样,有先后顺序:

在这里插入图片描述

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

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

相关文章

PY32F002A单片机开发板,主频最高24M,Flash 20K,Sram 3K

PY32F002A开发板为PY32F002A芯片提供了一个简易的硬件开发环境。开发板使用 type—c 接口作为供电源。提供包括扩展引脚在内的以及 SWD、Reset、Boot、User button key、Reset key、LED 等外设资源。PY32F002A开发板支持使用ST link,JI link,DAP link进行烧录开发,开…

图的深度优先遍历和广度优先遍历

目录 图的创建和常用方法 深度优先遍历&#xff08;Depth First Search&#xff09; 广度优先遍历&#xff08;Broad First Search&#xff09; 图的创建和常用方法 //无向图 public class Graph {//顶点集合private ArrayList<String> vertexList;//存储对应的邻接…

Spring Security 详解

目录 一、Spring Security简介1.1 概述1.2 历史 二、Spring Security功能三、Spring Security支持的身份认证模式四、SpringBoot项目构建4.1 项目搭建4.2 内存认证4.3 UserDetailsService 处理逻辑4.4 数据库认证4.5 PasswordEncoder4.6 自定义登录页面4.7 会话管理4.8 认证成功…

添加SQLCipher 到项目中

文章目录 一、克隆下载SQLCipher二、手动导入1. 生成sqlite3.c2. 在项目中添加命令3. 添加 Security.framework 三、CocoaPods导入 SQLCipher官方地址 一、克隆下载SQLCipher $ cd ~/Documents/code $ git clone https://github.com/sqlcipher/sqlcipher.git二、手动导入 1.…

Qt5兼容使用之前Qt4接口 intersect接口

1. 问题 项目卡中遇到编译报错&#xff0c; 错误 C2039 “intersect”: 不是“QRect”的成员 。 2. 排查过程 排查到依赖的第三方代码&#xff0c;使用 intersect 接口&#xff0c; 跟踪排查到头文件中使用了***#if QT_DEPRECATED_SINCE(5, 0)*** #if QT_DEPRECATED_SINCE…

大学生创业运营校园跑腿小程序怎么样?

校园跑腿小程序是一种基于移动互联网的服务平台&#xff0c;旨在为大学生提供便捷的跑腿服务。它可以连接大学生用户和需要代办事务的人群&#xff0c;实现多方共赢的局面。接下来&#xff0c;我将从需求背景、市场前景、功能特点等方面进行分析。 首先&#xff0c;校园跑腿小程…

ETLCloud+MaxCompute实现云数据仓库的高效实时同步

MaxCompute介绍 MaxCompute是适用于数据分析场景的企业级SaaS&#xff08;Software as a Service&#xff09;模式云数据仓库&#xff0c;以Serverless架构提供快速、全托管的在线数据仓库服务&#xff0c;消除了传统数据平台在资源扩展性和弹性方面的限制&#xff0c;最小化用…

TransNetR:用于多中心分布外测试的息肉分割的基于transformer的残差网络

TransNetR Transformer-based Residual Network for Polyp Segmentation with Multi-Center Out-of-Distribution Testing 阅读笔记 1. 论文名称 《TransNetR Transformer-based Residual Network for Polyp Segmentation with Multi-Center Out-of-Distribution Testing》 用…

STM32基于CubeIDE和HAL库 基础入门学习笔记:物联网项目开发流程和思路

文章目录&#xff1a; 第一部分&#xff1a;项目开始前的计划与准备 1.项目策划和开发规范 1.1 项目要求文档 1.2 技术实现文档 1.3 开发规范 2.创建项目工程与日志 第二部分&#xff1a;调通硬件电路与驱动程序 第三部分&#xff1a;编写最基础的应用程序 第四部分&…

JAVA毕业设计093—基于Java+Springboot+Vue的招聘系统(源码+数据库)

基于JavaSpringbootVue的招聘系统(源码数据库)093 一、系统介绍 本系统前后端分离 本系统分为管理员、HR、用户三种角色 用户角色包含以下功能&#xff1a; 登录、注册、简历(搜索、投递和收藏)、hr联系、我的关注、我的收藏、我的简历、简历投递管理、面试管理、个人中心…

zabbix5.0安装教程(超详细)实测完美可用

5.0 版本对基础环境的要求有⼤的变化&#xff0c;最⼤的就是对 php 版本的要求&#xff0c;最低要求7.2.0 版本,对 php 扩展组件版本也有要求&#xff0c;详见官网文档 https://www.zabbix.com/documentation/current/manual/installation/requirements 准备好⼀台linux服务器&…

day23-113. 路径总和ii

113. 路径总和ii 力扣题目链接(opens new window) 给定一个二叉树和一个目标和&#xff0c;找到所有从根节点到叶子节点路径总和等于给定目标和的路径。 说明: 叶子节点是指没有子节点的节点。 示例: 给定如下二叉树&#xff0c;以及目标和 sum 22&#xff0c; 思路 利用…

【团队协作开发】IDEA中Git从远程其他分支拉取代码并同步更新到自己的分支中更新不全问题解决

出现这个问题往往是因为没有先拉取远程分支的最新变化到本地导致的&#xff0c;具体操作流程和解决方法如下&#xff1a; 1、首先&#xff0c;先确保本地有一个和远程要拉取分支(比如dev_z)相关联的分支&#xff0c;如果没有&#xff1a;选择远程要拉取的分支&#xff0c;点击C…

postman官网下载安装登录详细教程

目录 一、介绍 二、官网下载 三、安装 四、注册登录postman账号&#xff08;不注册也可以&#xff09; postman注册登录和不注册登录的使用区别 五、关于汉化的说明 一、介绍 简单来说&#xff1a;是一款前后端都用来测试接口的工具。 展开来说&#xff1a;Postman 是一个…

探讨C语言是否仍然满足现代编程需求

在过去的30年里&#xff0c;有人试图通过引入一门新的语言来取代C语言&#xff0c;其中一位被简称为BS的人也持有类似观点。尽管这门新语言在某些方面表现出色&#xff0c;但它并未能完全取代C语言&#xff0c;而是在特定领域发展出自己的优势。此后&#xff0c;又有一家公司决…

在线Word怎么转换成PDF?Word无法转换成PDF文档原因分析

不同的文件格式使用方法是不一样的&#xff0c;而且也需要使用不同的工具才可以打开编辑内容&#xff0c;针对不同的场合用户们难免会用到各种各样的文件格式&#xff0c;要想在不修改内容的前提下提高工作效率&#xff0c;那就需要用到文件格式转换&#xff0c;那么在线Word怎…

苍穹外卖项目解读(四) 微信小程序支付、定时任务、WebSocket

前言 HM新出springboot入门项目《苍穹外卖》&#xff0c;笔者打算写一个系列学习笔记&#xff0c;“苍穹外卖项目解读”&#xff0c;内容主要从HM课程&#xff0c;自己实践&#xff0c;以及踩坑填坑出发&#xff0c;以技术&#xff0c;经验为主&#xff0c;记录学习&#xff0…

爬虫018_urllib库_cookie反爬_post请求百度翻译获取百分翻译内容_以及详细翻译内容---python工作笔记037

然后我们来看如何用urllib发送post请求,这里我们 用百度翻译为例 我们翻译一个spider,然后我们看请求,可以看到有很多 找到sug这个 可以看到这里的form data,就是post请求体中的内容 然后我们点击preview其实就是 返回的实际内容 然后请求方式用的post 然后我们把上面的信息…

Untiy Json和Xml的序列化和反序列化

Json的序列化和反序列化 1.定义数据类 [Serializable] public class ZoomPoint {// 点名称, 将作为Key被字典存储public string name;// 轴心X坐标public Vector2 pivot Vector2.one / 2;// 放大倍率&#xff0c;小于1是为缩小倍率&#xff0c;小于0是取绝对值&#xff0c;不…

BIGEMAP双端buff助力AEC行业无压力进行AutoCAD作图

工具 Bigemap gis office地图软件 BIGEMAP GIS Office-全能版 Bigemap APP_卫星地图APP_高清卫星地图APP AEC行业&#xff0c;即建筑(Architecture)、工程(Engineering)、施工(Construction)&#xff0c;热衷于引入信息通信技术&#xff0c;不仅活跃于国际舞台&#xff0c;还…