当前位置: 首页 > news >正文

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

文章目录

  • 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结果

在这里插入图片描述

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

在这里插入图片描述

相关文章:

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

文章目录 1、概述2、Backbone3、RPN网络3.1、anchor的生成3.2、anchor的标注/分配3.3、分类预测和bbox回归3.4、NMS生成最终的anchor 4、ROI Head4.1、ROI Align4.2、cls head和bbox head4.3、mask head 1、概述 Mask RCNN是在Faster RCNN的基础上增加了mask head用于实例分割…...

Android Framework底层原理之WMS的启动流程

一 概述 今天,我们介绍 WindowManagerService(后续简称 WMS)的启动流程,WMS 是 Android 系统中,负责窗口显示的的服务。在 Android 中它也起着承上启下的作用。 如下图,就是《深入理解 Android》书籍中的…...

Leaflet入门,Leaflet加载xyz地图,以vue-leaflet插件加载高德地图为例

前言 本章介绍Leaflet使用vue2-leaflet或者vue-leaflet插件方式便捷加载xyz高德地图。 # 效果演示 vue如何使用Leaflet vue2如何使用:《Leaflet入门,如何使用vue2-leaflet实现vue2双向绑定式的使用Leaflet地图,以及初始化后拿到leaflet对象,方便调用leaflet的api》 vue3…...

【ARM Cache 系列文章 8 -- ARM DynamIQ 技术介绍

文章目录 DynamIQ 技术背景DynamIQ技术详解DynamIQ 与 big.LITTLEDynamIQ cluster 分类硬件支持 DynamIQ为什么适合人工智能? DynamIQ 技术背景 2017年3月21日下午,ARM在北京金隅喜来登酒店召开发布会,正式发布了全新的有针对人工智能及机器…...

24届近5年南京大学自动化考研院校分析

今天给大家带来的是南京大学控制考研分析 满满干货~还不快快点赞收藏 一、南京大学 学校简介 南京大学是一所历史悠久、声誉卓著的高等学府。其前身是创建于1902年的三江师范学堂,此后历经两江师范学堂、南京高等师范学校、国立东南大学、国立第四中…...

微信小程序(原生)和uniapp预览电子文件doc/pdf/ppt/excel等

微信小程序原生预览文件 function previewFile(value) {const fileExtName ${value.ext};const randFile new Date().getTime() fileExtName;uni.showLoading({title: 加载中...})wx.downloadFile({url: value.url, // 文件的本身urlfilePath: wx.env.USER_DATA_PATH / r…...

【前端 | CSS】align-items与align-content的区别

align-items 描述 CSS align-items 属性将所有直接子节点上的 align-self 值设置为一个组。align-self 属性设置项目在其包含块中在交叉轴方向上的对齐方式 align-items是针对每一个子项起作用,它的基本单位是每一个子项,在所有情况下都有效果&…...

Go语言入门

Go语言入门 简介 Go是一门由Google开发的开源编程语言,旨在提供高效、可靠和简洁的软件开发工具。Go具有静态类型、垃圾回收、并发性和高效编译的特点,适用于构建可扩展的网络服务和系统工具。本文将介绍Go语言的基础知识和常用功能,并通过…...

Python学习笔记第五十五天(Pandas CSV文件)

Python学习笔记第五十五天 Pandas CSV 文件read_csv()to_string()to_csv() 数据处理head()tail()fillna() info() 后记 Pandas CSV 文件 CSV(Comma-Separated Values,逗号分隔值,有时也称为字符分隔值,因为分隔字符也可以不是逗号…...

自然语言处理: 第七章GPT的搭建

自然语言处理: 第七章GPT的搭建 理论基础 在以transformer架构为框架的大模型遍地开花后,大模型的方向基本分成了三类分别是: decoder-only架构 , 其中以GPT系列为代表encoder-only架构,其中以BERT系列为代表encoder-decoder架构,标准的tr…...

【奶奶看了都会】2分钟学会制作最近特火的ikun幻术图

1.效果展示 最近ikun幻术图特别火啊,在网上能找到各种各样的ikun姿势图片,这些图片都是AI绘制的,能和风景完美融合在一起,今天小卷就来教大家怎么做这种图片 先看看图片效果 视频链接: 仿佛见到一位故人,…...

【深度学习】【风格迁移】Zero-shot Image-to-Image Translation

论文:https://arxiv.org/abs/2302.03027 代码:https://github.com/pix2pixzero/pix2pix-zero/tree/main 文章目录 Abstract1. Introduction相关工作3. Method Abstract 大规模文本到图像生成模型展示了它们合成多样且高质量图像的显著能力。然而&#x…...

Day 30 C++ STL 常用算法(上)

文章目录 算法概述常用遍历算法for_each——实现遍历容器函数原型示例 transform——搬运容器到另一个容器中函数原型注意示例 常用查找算法find——查找指定元素函数原型示例 find_if—— 查找符合条件的元素函数原型示例 adjacent_find——查找相邻重复元素函数原型示例 bina…...

MES系统在机器人行业生产管理种的运用

机器人的智能水平也伴随技术的迭代不断攀升。 2021年的春晚舞台上,来自全球领先工业机器人企业abb的全球首款双臂协作机器人yumi,轻松自如地表演了一出写“福”字,赢得了全国观众的赞叹。 在汽车装配领域,一台机器人可以自主完成一…...

Spark(39):Streaming DataFrame 和 Streaming DataSet 输出

目录 0. 相关文章链接 1. 输出的选项 2. 输出模式(output mode) 2.1. Append 模式(默认) 2.2. Complete 模式 2.3. Update 模式 2.4. 输出模式总结 3. 输出接收器(output sink) 3.1. file sink 3.2. kafka sink 3.2.1. 以 Streaming 方式输出数据 3.2.2. 以 batch …...

【云原生】Docker 详解(一):从虚拟机到容器

Docker 详解(一):从虚拟机到容器 1.虚拟化 要解释清楚 Docker,首先要解释清楚 容器(Container)的概念。要解释容器的话,就需要从操作系统说起。操作系统太底层,细说的话一两本书都说…...

代码随想录第48天 | 198. 打家劫舍、213. 打家劫舍II、337. 打家劫舍III

198. 打家劫舍 当前房屋偷与不偷取决于 前一个房屋和前两个房屋是否被偷了。 递归五部曲: dp[i]:考虑下标i(包括i)以内的房屋,最多可以偷窃的金额为dp[i]。决定dp[i]的因素就是第i房间偷还是不偷。 如果偷第i房间&…...

【LeetCode】按摩师

按摩师 题目描述算法分析编程代码 链接: 按摩师 题目描述 算法分析 编程代码 class Solution { public:int massage(vector<int>& nums) {int n nums.size();if(n 0) return 0;vector<int> f(n);auto g f;f[0] nums[0];for(int i 1;i<n;i){f[i] g[i…...

国际腾讯云账号云核算概述!!

云核算概述 维基百科界说&#xff1a;云核算是一种依据互联网的新型核算方法&#xff0c;经过互联网上异构、自治的服务为个人和企业供给按需即取的核算。 云核算描绘的一起特征&#xff1a;云是一种按需运用的服务&#xff0c;运用者只重视服务本身。 云核算作为IT服务形式&am…...

.NET 6.0 重启 IIS 进程池

在 .NET 6.0 中&#xff0c;你可以使用 Microsoft.Web.Administration 命名空间提供的 API 来管理 IIS 进程池并实现重启操作。以下是一个示例代码&#xff0c;展示如何使用 .NET 6.0 中的 Microsoft.Web.Administration 来重启 IIS 进程池&#xff1a; using Microsoft.Web.A…...

7.4.分块查找

一.分块查找的算法思想&#xff1a; 1.实例&#xff1a; 以上述图片的顺序表为例&#xff0c; 该顺序表的数据元素从整体来看是乱序的&#xff0c;但如果把这些数据元素分成一块一块的小区间&#xff0c; 第一个区间[0,1]索引上的数据元素都是小于等于10的&#xff0c; 第二…...

设计模式和设计原则回顾

设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...

RocketMQ延迟消息机制

两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数&#xff0c;对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后&#xf…...

【入坑系列】TiDB 强制索引在不同库下不生效问题

文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序

一、开发准备 ​​环境搭建​​&#xff1a; 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 ​​项目创建​​&#xff1a; File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

测试markdown--肇兴

day1&#xff1a; 1、去程&#xff1a;7:04 --11:32高铁 高铁右转上售票大厅2楼&#xff0c;穿过候车厅下一楼&#xff0c;上大巴车 &#xffe5;10/人 **2、到达&#xff1a;**12点多到达寨子&#xff0c;买门票&#xff0c;美团/抖音&#xff1a;&#xffe5;78人 3、中饭&a…...

镜像里切换为普通用户

如果你登录远程虚拟机默认就是 root 用户&#xff0c;但你不希望用 root 权限运行 ns-3&#xff08;这是对的&#xff0c;ns3 工具会拒绝 root&#xff09;&#xff0c;你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案&#xff1a;创建非 roo…...

数据链路层的主要功能是什么

数据链路层&#xff08;OSI模型第2层&#xff09;的核心功能是在相邻网络节点&#xff08;如交换机、主机&#xff09;间提供可靠的数据帧传输服务&#xff0c;主要职责包括&#xff1a; &#x1f511; 核心功能详解&#xff1a; 帧封装与解封装 封装&#xff1a; 将网络层下发…...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践

6月5日&#xff0c;2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席&#xff0c;并作《智能体在安全领域的应用实践》主题演讲&#xff0c;分享了在智能体在安全领域的突破性实践。他指出&#xff0c;百度通过将安全能力…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南

&#x1f680; C extern 关键字深度解析&#xff1a;跨文件编程的终极指南 &#x1f4c5; 更新时间&#xff1a;2025年6月5日 &#x1f3f7;️ 标签&#xff1a;C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言&#x1f525;一、extern 是什么&#xff1f;&…...