MASK R-CNN网络介绍

2023-10-26

前言

  在介绍MASK R-CNN之前,建议先看下FPN网络,Faster R-CNNFCN的介绍:下面附上链接:

  在之前介绍数据集的时候我们讲过图像分割分为语义分割和实例分割,看下面两幅动图展示:
语义分割:
在这里插入图片描述
实例分割:
在这里插入图片描述
  今天介绍的MASK R-CNN是针对实例分割这种情况的,我们主要从以下几个部分进行讲解:

  • MASK R-CNN网络
  • RoiAlign
  • Mask分支(FCN)
  • 损失函数
  • Mask分支预测

一.MASK R-CNN网络

  先来看下MASK R-CNN网络结构:
在这里插入图片描述
  从上面的网络结构可以看出,前面的RolAlign+CNN就是前面的Faster R-CNN结构(实际中Faster R-CNN使员的也是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的预测器的分支,他所用的RoIAlignMASK分支采用的RoIAlign并不一样,即两者不共用一个RoIAlign,一个输出的大小是 7 × 7 7\times 7 7×7,一个是 13 × 13 13\times13 13×13。因为分割要求保留更多的信息,池化比较大的话会损失比较多的信息。下面一个MASK分支的最后输出 28 × 28 × 80 28\times28\times80 28×28×80的意思是对每一个类别(COCO通常使用的都时候80个类别的)都预测一个 28 × 28 28\times28 28×28大小的蒙版。

  在MASK R-CNN中对预测的Maskclass进行解耦,什么意思?FCN对每个像素,每个类别都会预测一个类别概率分数,最后会对每个像素沿着channel方向进行softmax处理,处理之后就能能得到每个像素归属每个类别的概率分数,所以不同类别之间是存在竞争关系的。通过sofmax之后,每个像素在channel方向概率只和等于1,对于某个类别的概率分数大的话,那么其他类别的概率分数就会小。所以他们之间存在竞争关系,即AMSKclass是耦合的状态。那么在MASK R-CNN中是怎么对maskclass进行解耦的呢?刚才说了在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 R-CNN提供,即最后预测的目标边界框。RPN提供的目标边界框可能并不准确,对于一个目标,RPN可能提供了多个目标边界框,我们刚说了提供给mask分支的proposals都是正样本,所以一定会存在交集,这些proposals都可以提供给mask分支进行训练,但是在最终预测的时候是直接使用的Faster R-CNN分支的输出,因为预测的时候只需要最准确的目标边界框即可,可能就一个目标,将这个目标提供给MASK分支即可,并且在Faster R-CNN中,通过NMS处理之后是能过滤掉很多重合在一起的目标,最终送入mask分支的目标也就少一些,目标少一些计算量就会下降。

二.损失函数

损失函数总共三项,就是在Faster R-cnn的基础上加上了mask分支所对应的损失。
L o s s = L r p n + L f a s t r c n n + L m a s k Loss =L_{r p n}+L_{fast_rcnn }+L_{mask } Loss=Lrpn+Lfastrcnn+Lmask

在这里插入图片描述
  如何计算mask分支的损失,这里我们借用一篇博主画的图,如上图所示,输入一张图片,经过backbonefpn得到不同采样率的特征层,接着通过RPN就能生成一系列的proposals,假设通过RPN得到了一个Proposal(图中黑色的矩形框),将proposal输入给RoIAlign,就能根据proposal的大小在对应特征层上进行裁剪得到对应的特征(shape为 14 × 14 × C 14\times14\times C 14×14×C),接着通过Mask Branch预测每个类别的Mask信息得到图中的logitslogits通过sigmoid激活函数后,所有值都被映射到0至1之间)。上面讲了训练的时候输入mask的分支的proposal是由RPN提供的,并且这些proposal都是正样本,这些正样本是通过Fast R-CNN分支正负样本匹配过程知道的,对应图上的proposal通过Faster R-CNN时,在正负样本匹配的时候可以得到对应的GT是猫,所以将logits中对应类别猫的预测mask(shape 28 × 28 28\times28 28×28)提取出来。需要注意的是这里的logits虽然没有在通道上做softmax处理,但是会进行sigmoid激活,也就是会将每个预测值映射到0-1之间。然后根据Proposal在原图对应的GT上裁剪并缩放到 28 × 28 28\times28 28×28大小,得到图中的GT mask(对应目标区域为1,背景区域为0)。最后计算logits中预测类别为猫的maskGT maskBCELoss(BinaryCrossEntropyLoss)即可。以上仅仅是以一个proposal为例的,实际中会有很多。

三.Mask分支预测

在这里插入图片描述
  在真正预测推理的时候,输入Mask分支的目标是由Fast R-CNN分支提供的。如上图所示,前面的backbon+fpn,RPN跟上面介绍的都是一样的,不再介绍。RPN输出的proposals通过Fast R-CNN分支(注意这里的RoIAlign跟上面的mask的不一样),我们能够得到最终预测的目标边界框信息以及类别信息。接着将目标边界框信息提供给Mask分支通过RoIAlign得到对应的特征,对于每个类别都预测一个mask,就能预测得到该目标的logits信息,再根据Fast R-CNN分支提供的类别信息将logits中对应该类别的Mask信息提取出来,即针对该目标预测的Mask信息(shape 28 × 28 28\times28 28×28,由于通过sigmoid激活函数,数值都在0在这里插入代码片1之间)。然后利用双线性插值将Mask缩放到预测目标边界框大小,并放到原图对应区域。接着通过设置的阈值(默认为0.5)将Mask转换成一张二值图,比如预测值大于0.5的区域设置为前景剩下区域都为背景。现在对于预测的每个目标我们就可以在原图中绘制出边界框信息,类别信息以及目标Mask信息。

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

MASK R-CNN网络介绍 的相关文章

  • 二分查找BinarySearch原理分析、判定树、及其变种

    二分查找BinarySearch 1 二分查找及其要求 二分查找 又叫折半查找 是一种效率较高的查找算法 1 二分查找的要求 线性表是有序表 即表中结点按关键字有序 并且要用向量作为表的存储结构 不妨设有序表是递增有序的 存储结构 二分查找
  • CARLA--车辆激光雷达安装-显示并存储数据[超详细]--[入门4]

    系列文章目录 CARLA pygame window界面大小调节两种方法 Ubuntu18 04 收藏 CRALA模拟器全网优质学习资料整合 入门 1 CARLA蓝图库可调用的车辆和地图模型名称大全 如何在carla中加入车辆群 基于tra
  • 什么是Sentinel?它能做什么

    Sentinel 是什么 随着微服务的流行 服务和服务之间的稳定性变得越来越重要 Sentinel 是面向分布式服务架构的轻量级流量控制产品 主要以流量为切入点 从流量控制 熔断降级 系统负载保护等多个维度来帮助您保护服务的稳定性 Sent
  • Linux嵌入式所有知识点-思维导图-【一口君吐血奉献】

    一 前言 很多粉丝问我 我的Linux和嵌入式当初是如何学习的 其实彭老师在最初学习的过程中 走了相当多的弯路 有些可以不学的花了太多的时间去啃 有些作为基础必须优先学习的 却忽略了 结果工作中用到这些知识时傻眼了 有些需要后面进阶阶段学习
  • opencv 识别矩形java_使用OpenCV进行矩形检测/跟踪

    HSV空间中的H通道是Hue 它对光线变化不敏感 红色范围约为 150 180 根据提到的信息 我做了以下工作 切换到HSV空间 拆分H通道 阈值并将其标准化 应用变形操作 打开 查找轮廓 按某些属性 宽度 高度 面积 比率等 进行过滤 P
  • #VCS# 常用UCLI 命令汇总

    以下 列出了常用的 UCLI 命令 均是synps 公司提供
  • 功率时延谱 matlab,改进的互功率谱时延估计算法

    前言 基于麦克风阵列的声源定位是利用麦克风阵列拾取多路声音信号 结合声源和阵列结构之间的几何关系 得到声源的位置信息 由于麦克风阵列在时域和频域的基础上增加了空域信息 因此对声音信息的处理能力明显增强 其优势主要体现于 具有空间选择性 能够
  • 病毒分析系列2

    前言 接上篇 进行病毒分析时 在进行具体的病毒行为分析前 需要或许可疑文件的基本信息 此时可以使用pe工具进行分析和获取 基本静态信息获取 一般需要获取的信息包括但不限于 程序哈希值 导入函数表 导出函数表 是否有壳 程序的位数 字符串 具

随机推荐

  • 数据结构--常用比较排序

    目录 一 冒泡排序 二 选择排序 三 插入排序 四 希尔排序 五 堆排序 六 快速排序 6 1 key位置选择 6 2 一趟排序的方法 hoare版本 挖坑法 前后指针法 6 3 完整排序 七 归并排序 一 冒泡排序 通过两两顺序比较 把大
  • openwrt排错实战

    1 openwrt不断重启 原因 1 没有连接外网 看门狗机制启动 解决 将外网插到WAN口即可 2 重新刷了固件后灭有授权 解决 设备联网后 访问一下这个网站 http 192 168 1 1 cgi bin auth cgi 福利 op
  • 【Chisel硬件源源语】

    Chisel硬件源源语 前言 多路选择器 优先编码器 仲裁器 队列 存储 ROM RAM 从文件向RAM写入 计数器 状态机 总结 前言 通过之前的学习 读者应当已经掌握Chisel的基本数据类型和操作符的知识 并且了解如何构建小型电路 而
  • Word如何修改目录页不显示页码, 页码从第二页开始算起

    在做毕业设计的时候或者工作过程中往往需要插入目录 但是一旦插入目录就会导致页码的第一页被目录页占用 这不是我们想要的结果 我也是网上查了好久才弄好 今天写个教程出来供大家分享 步骤一 先在目录页面的底部插入分节符 下一页 步骤二 进入可修改
  • 读取文件名,若文件名无效返回文件名并显示异常(实例)

    异常文件名 import java io FileInputStream import java io FileNotFoundException import java io IOException import java util Sc
  • VUE写后台管理(2)

    VUE写后台管理 2 1 环境 2 Element界面 3 Vue Router路由 后台 1 左导航栏 2 上面导航条 1 环境 1 下载管理node版本的工具nvm Node Version Manager 2 安装node vue工程
  • Ubuntu安装问题汇总

    1 开机提示acpi error 一般这个问题是因为显卡的原因造成的 系统没有带显卡驱动 所以会有电源管理方面的问题 解决方法 安装时在install ubuntu界面按e 在linux开头那行的末尾处加入 acpi off 然后保存进行安
  • 封装ReactBootstrap组件实现文字展开功能

    封装ReactBootstrap组件实现文字展开功能 ExpendableText js import React useRef useEffect useState from react import Container CardGrou
  • 使用anaconda配置pycharm解释器环境

    因为作业需要写python代码 需要选择一个合适的写python代码的软件 学长推荐我用anaconda的juypter来写 并且anaconda自己配置环境比较容易 所以我就下载了anaconda 但是我不喜欢网页的风格 所以下载了pyc
  • docker 通过Dockerfile安装jdk

    将自己下载好的jdk压缩包 我下载的是jdk 8u261 linux x64 tar gz 上传到服务器上 我是使用的ubuntu 将jdk 8u261 linux x64 tar gz 复制到你的docker目录下 之后创建一个Docke
  • Mac终端终止命令

    control c 结束进程 control z 结束进程
  • 【Unity】[入门tips与代码优化] 一些入门概念、技巧和优化程序的原则方法

    本文将持续间断更新 本文主要面向初级程序员 为了方便Unity开发 有些快捷键的方式和一些通用性的技巧tips等会在这篇博客内持续更新 欢迎点赞收藏 快捷键 Ctrl S 快捷保存 闲着没事就来两下 Ctrl Shift F 在hierar
  • element-ui 表格合并之后鼠标hover效果

    element ui 表格合并之后鼠标hover效果 这次主要介绍行合并后的hover效果处理 由于element ui合并行之后 鼠标经过时 默认只会高亮第一行 如下图 但实际我们想要的是 在鼠标经过这一合并行时 被合并的行都是高亮状态
  • 磁盘分区 fdisk,挂载

    1 磁盘的分区主要分为基本分区 primary partion 和扩充分区 extension partion 两种 基本分区和扩充分区的数目之和不能大于四个 且基本分区可以马上被使用但不能再分区 扩充分区必须再进行分区后才能使用 也就是说
  • Hadoop Core、HBase 、ZooKeeper

    adoop HBase ZooKeeper三者关系与安装配置 复制链接 qqjue 论坛徽章 18 电梯直达 1
  • 互联网的组成——边缘部分+核心部分 (互联网报文交换方式:分组转发技术)

    首先 复习的第一本书是 计算机网络 作为计算机专业的学生 计算机网络是必须学好的一门功课 互联网的组成 边缘部分 核心部分 从互联网的工作方式上看 可以划分为两大块 1 边缘部分 由所有连接在互联网上的主机组成 这部分是用户直接使用的 用来
  • 特征工程系列:自动化特征构造

    特征工程系列 自动化特征构造 原创 JunLiang 木东居士 今天 0x00 前言 数据和特征决定了机器学习的上限 而模型和算法只是逼近这个上限而已 由此可见 特征工程在机器学习中占有相当重要的地位 在实际应用当中 可以说特征工程是机器学
  • Python 中的默认值是什么?

    Python 语言具有表示函数参数的语法和默认值的不同方式 默认值指示如果在函数调用期间未给出参数值 则函数参数将采用该值 默认值是使用表单关键字名称 值的赋值 运算符分配的 例 creating a function by giving
  • JavaWeb——Servlet(入门必备,web请求与响应的底层)

    这里写自定义目录标题 1 servlet介绍 1 1 什么是servlet 1 2 手动实现servlet程序的步骤 2 servlet的生命周期 3 get请求与post请求的分发 3 1 get请求 3 2 post请求 3 3 通过继
  • MASK R-CNN网络介绍

    目录 前言 一 MASK R CNN网络 1 1 RoIPool和RoIAlign 1 2 MASK分支 二 损失函数 三 Mask分支预测 前言 在介绍MASK R CNN之前 建议先看下FPN网络 Faster R CNN和FCN的介绍