Mask Rcnn详解

2023-11-04

Mask RCNN介绍

Mask R-CNN是何恺明在ICCV 2017上发表的实例分割模型(Instance segmentation),实例分割主要在目标检测的基础上获得每个目标的分割掩码。

模型结构及数据变化推理

模型基本结构由:backbone(FPN)+RPN+RoI Align+预测头( box, class, mask)几部分组成,输入图像,输出预测的目标类别(class)、目标位置框(box)、基于目标框的掩码(mask)三部分,为便于理解模型使用中数据的变化,本文忽略batch这一维度,相当于直接输入一张图像进行数据推理。

backbone(FNP)

backbone:骨干网络,通过一系列卷积池化+残差拼接,获得图像的深度特征信息(feature map)

FNP:特征金字塔,在骨干网络卷积过程中,其中间层会产生不同尺度的特征信息 ,大小分别为原图大小的1/4,1/8,1/16,1/32,1/64,这些尺度不同、深度不同的特征信息更利于全面获取图像的高低维度信息,将这些选择不同尺寸的特征信息共同称为特征金字塔,也就是后续要利用的feature map。

输入:图像 [3, image_height, image_weight]
最后输出:[channe, 1/4image_height, ,1/4image_weight]……[channe, 1/64image_height, ,1/64*image_weight] 代表5个尺度的特征量,其中channe代表特征通道数。

RPN

RPN:Region Proposal Network,用于利用backbone产生的feature map 生成感兴趣区域候选框Proposal ,感兴趣区域就是可能有目标的区域

输入:back bone的输出,[channe, 1/4image_height, , 1/4*image_weight ] ……,
输出:卷积生成两束分支,分别是bbox,class 共同代表候选框信息,它们是成对出现的,个数是一系列候选框,这些候选框经过非极大值抑制等筛选才会形成真正的候选框,真正候选框才有id(ROI_id)
(1)bbox:now_height, now_weight, k, 4
(2)class:now_height, now_weight, k, 2
上述公式代表在输入图上每个像素点上产生K个候选框,now_heigh指的输入的特征的尺度宽高。K一般是3,代表3个锚框(anchor),数字4代表预测的anchor的放缩比例,数字2代表该候选框是否含有目标(0,1),即前景和背景的概率,该输出信息除了用于向后传递,还参与损失计算。

RPN处理后的输出bbox和class 和生成的所有anchor进行进一步处理:
用class输出进行得分排序筛选,获得6000个得分靠前的anchor
用bbox输出对筛选后的anchor进行回归纠正,得到更准确的anchor
删除不合理的anchor,如超出原图的
NMS筛选,得到2000个anchor

ROI Align

经过RPN生成并筛选的anchor候选框与backbone输出的feature map相结合,生成ROI Align的输入roi信息,结合过程如下:
输入:bbox++feature map
输出:roi(roi_id, roi_height, roi_weight, channel)
具体细节:对将NMS得到的anchor进行判断,判断其应该在哪个尺度上的feature map进行roi采用,具体判断方式主要是利用anchor的大小生成一个判断指标。得出判断结果后将anchor转化到具体尺寸下的大小,并扣去该位置下的对应feature map,注意这儿anchor的是个坐标点是通过双向线性插值取得的(参考faster rcnn中的实现)。

在特征通道上采样生成的ROI需要resize,生成大小相同的ROI特征,t同样涉及双向线性插值。

输入:roi(roi_id, roi_height, roi_weight, channel)
输出:roi_id, channel, poolsize, poolsize

roi_id代表RPN后经过筛选的有用的候选框的id;
channel代表feature map的一样的多少层的特征通道数量,poolsize就代表将不同的候选框resize成大小一样的矩形,方面后续数据处理。

预测头( box, class, mask)

利用ROI Align输出,生成真正的预测结果数据
主要是卷积池化全连接生成两个分支(类别边框预测分支、掩码预测分支)
注意ROI其实分别为两个分支独立运行了两遍,生成的poolsize不相同,分贝为77和1414

box, class分支

就是利用卷积池化全连接,分别预测class和box
输入roi_id, channel,7,7
输出:
class(roi_id,numclass),numclass代表每个类别的概率;
box(roi_id, numclass,4),代表每个类别下的box信息,数字4代表 y1,x1,y2,x2。最终计算损失时只会取一个类别下的box信息。

mask分支

利用卷积池化反卷积,为每个目标候选框生成一个掩码(0,1填充)
输入:[roi_id, channel,14,14]
输出:[roi_id,numclass, 28,28],代表为每个可能的类别都生成了掩码,计算损失时指只会去一个掩码
(1),注意,掩码虽然是28*28的方阵,而目标框是大小长宽不一的矩形,计算掩码顺时时会先将方阵转换到对应候选框的大小,再计算掩码信息。

模型训练流程

了解了基本的框架和数据走向,介绍训练过程中,具体细节(待补充2022.10.5)

模型推理(测试)流程

推理过程中数据处理流程;(待补充,2022.10.5)

(补充)损失计算

损失的计算非常有特色(待补充,2022.105)
Mask Rcnn一共有5个损失函数分别是:

1、rpn网络的两个损失:RPN的class、bbox输出和input_rpn_match、input_rpn_bbox两两对应的损失
这个损失的具体理解建议结合代码进行理解。主要是以下两个参数的由来。
(参考大佬博主 https://blog.csdn.net/u012655441/article/details/122304099的代码理解)
input_rpn_match:对于真实的前景目标,从所有原生图像的所有anchor 中,依照目标是否存在和IOU两方面找到最接近真实目标的anchor,为这些anchor赋予正负样本以及box的转化比例
input_rpn_bbo:与上相同,就是从所有anchor和真实目标标签中生成的

2、类别边框预测分支的两个损失:就是输出类别边框和真实类别边框两两建立损失。

3、以及mask分支的损失函数:就是预测mask和真实mask建立损失。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mask Rcnn详解 的相关文章

随机推荐

  • Tcpdump命令详解

    目录 一 tcpdump作用 二 tcpdump命令选项和捕获主机到主机的数据包 2 1 命令选项 2 2 tcpdump表达式 关于数据类型的关键字 数据传输方向的关键字 协议关键字 其他关键字 2 3 tcpdump捕获方式 编辑 一
  • 概率论与数理统计 (二)计算题和应用题

    概率论一些知识 https blog csdn net zuoyonggang123 article details 79110916 utm medium distribute pc relevant none task blog OPE
  • 写函数,判断用户传入的参数(字符串、列表、元组)长度是否大于5

    def estimateLength data if len data gt 5 print 该参数长度大于5 else print 该参数长度不大于5 str xiao ran list 12 34 56 78 90 tuple 小灰灰
  • 【算法】高精度算法:加减乘除(全)

    看的视频在这里 题目 加法 减法 乘法 除法 高 低 加法 思想 用数组模拟高精度 算法核心 c i a i b i c i 1 c i 10 c i c i 10 注意 是c i a i b i 是累加 例题 求a b a b范围都 lt
  • 学前STEM课堂的3个入口

    在STEM活动开始前 教师要以观察性问题来吸引幼儿的注意力 引导幼儿关注 是什么 的问题 进而促使幼儿与教师开始对话和一起探索 格物斯坦小坦克带大家一起看看学前stem课堂的3个入口 是什么 的问题关注的是正发生于幼儿眼前的事情 即幼儿所注
  • 通过GetVersionEx和ntoskrnl.exe获取操作系统版本号

    include
  • selenium启动Chrome配置参数问题

    每次当selenium启动chrome浏览器的时候 chrome浏览器很干净 没有插件 没有收藏 没有历史记录 这是因为selenium在启动chrome时为了保证最快的运行效率 启动了一个裸浏览器 这就是为什么需要配置参数的原因 但是有些
  • PageHelper原理深度剖析(集成+源码)

    相信大家在开发过程中都用到过数据分页吧 那么问题来了 说出你平时用到的几种分页方式吧 而我在平时的工作中用到最多的应该属PageHelper这个分页插件了 此处附上官网地址 https pagehelper github io 首先我们来说
  • 自定义结构-Tab切换

    自定义结构 Tab切换 前言 在搭建页面的时候 可能会需要多块区域进行tab切换 这时候需要规范化封装一个结构 只需要一段js 可重复且多处使用 1 tab样式 2 js代码 function hover change on mouseen
  • 微信、微博、Facebook、Twitter等社交媒体分享方案探索

    一 Web方式 新浪微博 http service weibo com share share php count 表示是否显示当前页面被分享数量 1显示 可选 允许为空 url 将页面地址转成短域名 并显示在内容文字后面 可选 允许为空
  • 【数据结构实验】单链表实验

    实验一 单链表实验 1 实验目的 熟悉单链表的定义 单链表的建立方法及相关基本操作 理解单链表的基本思想 能够根据实际情况选择合适的存储结构 2 实验内容 1 利用头插法或尾插法建立单链表 2 对已建立的单链表实现插入 删除等基本操作 3
  • BoolToVisibility的转换器

    代码 ValueConversion typeof bool typeof Visibility public class BoolToVisibilityConverter IValueConverter static BoolToVis
  • SpringBoot 提示:Cannot construct instance of `com.... (no Creators, like default construct, exist)

    原因 在该实体类 Paymen java 中构造了一个方便实例化该类的有参构造函数 导致JVM不会添加默认的无参构造函数 而jackson的反序列化需要无参构造函数 因此报错 解决办法 在该实体类 Paymen java 中添加了一个无参构
  • 实现div里的img图片水平垂直居中

    body结构 div img src 1 jpg alt haha div 方法一 将display设置成table cell 然后水平居中设置text align为center 垂直居中设置vertical align为middle
  • 计算机PS个人规划目标,这里有一份PS个人陈述写作规划

    原标题 这里有一份PS个人陈述写作规划 本篇内容可以教你如何包装自己背景 或者说能够让自己的整个文书在众多申请者中呈现出比较不一样的色彩 前期构思 PS全称Personal Statement 个人陈述 它是我们整个文书里面的核心部分 在写
  • 帆软移动端,展示顺序混乱

    取消掉 手机重布局 也可 帆软移动端展示顺序混乱 设计器中靠下的控件 但是在界面中展示靠上 原因 设计器中body的移动端属性 展示顺序没有调整 解决办法
  • 服务器高可用实现文档 百度网盘,分布式文件系统元数据服务器高可用设计与实现...

    摘要 伴随全球数据量的飞速增长和数据密集型应用的不断增加 分布式文件系统得到越来越广泛的应用 目前主流的分布式文件系统均采用将元数据与数据分离管理的机制 将命名空间和文件元数据保存在元数据节点 而数据保存在数据节点 很显然 元数据节点的高可
  • 电脑复制粘贴快捷键_Win10小技巧:剪贴板让「复制粘贴」效率加倍

    如果需要连续复制许多文字 普遍作法都是逐一按下 Ctrl C 和 Ctrl V 重复好多次 其实只要学会使用剪贴板 就能大幅加快工作效率 以下分享 Win 10 小技巧 让你的复制粘贴更有效率 Win 10 小技巧 复制粘贴 效率加倍 在
  • navicat cannot create oci 解决

    1 新建连接 2 连接时候报错 3 解决 3 1 选择对应版本OCI 3 1 配置OCI 工具 gt 选项
  • Mask Rcnn详解

    Mask RCNN 算法详解 Mask RCNN介绍 模型结构及数据变化推理 backbone FNP RPN ROI Align 预测头 box class mask box class分支 mask分支 模型训练流程 模型推理 测试 流