Mask R-CNN详解

2023-11-18

 

一、Mask R-CNN网络介绍

Mask R-CNN是何凯明2017年提出的一个实例分割(Instance segmentation)算法,可以用来做“目标检测”、“目标实例分割”、“目标关键点检测”。,是ICCV2017的best paper

Mask R-CNN网络的设计比较简单,Faster R-CNN的基础上,在原本的两个分支上(分类+坐标回归)增加一个简单的完全卷积网络(FCN)输出object mask 作为第三个分支,同时用RoIAlign代替了Faster R-CNN的RoIPooling,如下图所示:

二、Mask R-CNN网络

1、为什么要用ROIAlign代替ROIPooling?它们有什么区别?

关于它们的区别及作用,我已经另外写了一篇文章。这里简单介绍下。

Faster R-CNN方法中,在进行Roi-Pooling之前需要进行两次量化操作(第一次是原图像中的目标到conv5之前的缩放,比如缩放32倍,目标大小是600,结果不是整数,需要进行量化舍弃,第二次量化是比如特征图目标是5*5,ROI-pooling后是2*2,这里由于5不是2的倍数,需要再一次进行量化,这样对于Roi Pooling之后的结果就与原来的图像位置相差比较大了)。这样操作的问题就是会造成像素偏差以至会对后层的回归定位产生影响,而实例分割需要比较准确的像素位置,因此ROI Pooling的这种操作无法应用在分割支路,因为输入和输出的ROI像素点的位置对应关系不能保证一致,因此为了解决这个问题,作者采用了ROIAlign,用于替代原来Faster R-CNN中的ROIPooling层,如图所示。

2、Mask R-CNN的网络结构如下

下图所示是两种典型的Mask R-CNN网络结构,作者借鉴了 FPN 的思想,分别设计了两种网络结构,左边的是采用ResNet作为网络的backbone提取特征,右边的网络采用FPN网络作为backbone进行特征提取,并且作者指明,使用FPN作为基础网络的效果其实是最好的。

3、Mask R-CNN的损失函数

Mask R-CNN的损失函数为

其中L_cls和L_box和Faster RCNN中定义的分类和回归损失一致,这里主要介绍下L_mask,    
 L_mask是对每个像素进行分类,其含有 K * m * m维度的输出,K代表类别的数量,m*m是提取的ROI图像的大小。L_mask被定义为 average binary cross-entropy loss(平均二值交叉熵损失函数)。这里解释一下是如何计算的,首先分割层会输出channel为K的Mask,每个Mask对应一个类别,利用sigmoid函数进行二分类,判断是否是这个类别,然后在计算loss的时候,假如ROI对应的ground-truth的类别是,则计算第个mask对应的loss,其他的mask对这个loss没有贡献计算二值交叉熵搞的公式如下图中的函数接口。这里不同于FCN的是,FCN是对每个像素进行softmax分类,分为K个类别,然后计算softmax loss,作者根据分类分支的预测结果进行判断。

这里有个推断的细节:采用ResNet作为backbone的Mask R-CNN产生300个候选区域进行分类回归,采用FPN方法的生成1000个候选区域进行分类回归,然后进行非极大值抑制操作, 最后检测分数前100的区域进行mask检测,这里没有使用跟训练一样的并行操作,作者解释说是可以提高精度和效率,然后mask分支可以预测k个类别的mask,但是这里根据分类的结果,选取对应的第k个类别,得到对应的mask后,再resize到ROI的大小, 然后利用阈值0.5进行二值化即可。(这里由于resize需要插值操作,所以需要再次进行二值化,mask最后并不是ROI大小,而是一个相对较小的图, 所以需要进行resize操作。

 

4、网络训练

训练时的一些实现细节:输入图像的处理是将短边resize到800大小;单GPU的batch size设置为2;每张图像提取N个ROI(对于Faster RCNN架构采用N=64,对于FPN架构采用N=512,之所以数量差别这么大,主要原因在于FPN是基于多个融合层分别预测),其中positive和negative的比例是1:3RPN网络采取5种scale和3种aspect retio。 
验证时的一些细节:proposal的数量对于Faster RCNN架构采用300,对于FPN架构采用1000。mask支路都是基于最后score最高的100个预测结果进行的,这样增加的计算量就非常少。

 

三、实验结果

1、首先是Mask R-CNN算法在COCO数据集上的实例分割结果:

2、Table1是Mask RCNN算法和其他实例分割算法的结果对比(MNC和FCIS分别是COCO 2015和2016的分割比赛冠军),优势还是比较明显的: 

3、Table2是一些细节对比:

①表(a),显示了网络越深,效果越好。并且FPN效果要好一些。

②表(b),sigmoid要比softmax效果好一些。

③表(c),是在ResNet-50-C4上进行的ROI Pool、ROIWarp和ROIAlign的对比,可以看出ROIAlign效果有提升,另外pooling的类型对ROIAlign的效果影响不大。

④表(d),是在ResNet-50-C5上进行的ROI Pool和ROIAlign的对比,可以看出此时ROI Pool的效果要比从C4提取特征来得差,毕竟越高层的特征量化带来的误差就越大。另外基于C5提取特征的ROIAlign的效果要比基于C4提取特征好一点,这就说明ROIAlign所带来的误差非常小,这个实验还是比较重要的,因为很大程度上解决了长期以来大感受野带来的检测和分割效果差的问题。

⑤表(e),mask banch采用FCN效果较好(因为FCN没有破坏空间关系)

⑥另外作者实验,mask分支采用不同的方法,方法一:对每个类别预测一个mask ,方法二:所有的都预测一个mask,实验结果每个类预测一个mask别会好一些 30.3 vs 29.7

4、Table3是对于目标检测的结果:

对比下表,可见,在预测的时候即使不使用mask分支,结果精度也是很高的,下图中’Faster R-CNN, ROIAlign’ 是使用ROI Align,而不使用ROI Pooling的结果,较ROI Pooling的结果高了约0.9个点,但是比MaskR-CNN还是低了0.9个点,这个提升,作者将其归结为多任务训练的提升,由于加入了mask分支,带来的loss改变,间接影响了主干网络的效果

5、Figure6是人体关键点检测:

与Mask R-CNN进行Mask检测有什么不同呢?

①人体关键点检测,作者对最后m*m的mask进行one-hot编码,并且,mask中只有一个像素点是foreground其他的都是background。
②人体关键点检测,最后的输出是m^2-way 的softmax, 不再是Sigmoid,作者解释说,这有利于单独一个点的检测。
③人体关键点检测, 最后的mask分辨率是56*56,不再是28*28,作者解释,较高的分辨率有利于人体关键点的检测。

 

官方代码链接:https://github.com/facebookresearch/Detectron 

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

Mask R-CNN详解 的相关文章

  • 2023年每天都投递很多份简历,但都石沉大海,我还投吗?测试人该何去何从?

    各大互联网公司的接连裁员 政策限制的行业接连消失 让今年的求职雪上加霜 想躺平却没有资本 还有人说软件测试岗位饱和了 对此很多求职者深信不疑 因为投出去的简历回复的越来越少了 另一面企业招人真的变得容易了吗 有企业HR吐槽 简历确实比以前多
  • 销售、售前、项目实施不同的培训要求

    产品部门对于不同的岗位 培训要有不同的针对性 不能搞一刀切 针对销售部门 培训的要求和考核的要求 知其然 即知道产品的功能 性能 优势 针对售前部门 培训的要求和考核的要求 知其然 知起所以然 即要知道产品的 然 更要知道 然 从何来 优势
  • Linux操作系统的题目联系及解析

    一 创建文件命令练习 1 在 目录下创建一个临时目录test 这个比较基础 就是考创建 利用mkdir就能完成 如 2 在临时目录test下创建五个文件 文件名分别为passwd group bashrc profile sshd conf
  • 如何判断网页是否使用了Ajax

    方法一 一次AJAX请求头如下 一次普通get请求如下 方法2 使用JS插件查看是不是异步加载 方法3

随机推荐

  • 操作系统中的作业、程序、进程

    作业 作业是用户向计算机提交任务的任务实体 是要求计算机系统所做工作的集合 在用户向计算机提交作业后 系统将它放入外存中的作业等待队列中等待执行 它包括程序 数据及其作业说明书 程序 程序是为解决一个信息处理任务而预先编制的工作执行方案 是
  • 最热门的大数据技术

    大数据已经融入到各行各业 哪些大数据技术是最受欢迎 哪些大数据技术潜力巨大 对10个最热门的大数据技术的介绍 一 预测分析 预测分析是一种统计或数据挖掘解决方案 包含可在结构化和非结构化数据中使用以确定未来结果的算法和技术 可为预测 优化
  • LeetCode 2391. 收集垃圾的最少总时间

    给你一个下标从 0 开始的字符串数组 garbage 其中 garbage i 表示第 i 个房子的垃圾集合 garbage i 只包含字符 M P 和 G 但可能包含多个相同字符 每个字符分别表示一单位的金属 纸和玻璃 垃圾车收拾 一 单
  • Qt离线安装MSVC方法

    安装好Qt后 有时候需要用到MSVC编译环境 如果电脑连接了互联网 直接下载安装器在线安装即可 那么需要为没有联网的电脑安装MSVC时 就需要采用下载离线安装包 离线安装的方法 MSVC安装器下载地址 MSVC2019 https visu
  • MTCNN代码解读

    首先了解MTCNN算法 理论基础 正如上图所示 该MTCNN由3个网络结构组成 P Net R Net O Net Proposal Network P Net 该网络结构主要获得了人脸区域的候选窗口和边界框的回归向量 并用该边界框做回归
  • Apache和Nginx虚拟机的配置方法+跨域知识点整理

    Apache的配置 ip 创建虚拟主机目录 新建测试页面 修改主配置文件 root hya vim etc httpd conf httpd conf 在主配置文件的最下面添加
  • Vue3优雅地监听localStorage变化

    目录 前言 为什么要这样做 思路 实现 实现中介者模式 重写localStorage 实现useStorage hook 测试 使用localStorage 监听localStorage变化 结果 前言 最近在研究框架 也仔细用了Vue3一
  • 搜索引擎使用技巧详解

    说到搜索 这可能是我们每个网民每天都要用到的操作 这个操作看起来很简单 一般用户都是想搜什么就输入什么 然后一按搜索就直接开始 这是最简单最快速的方法 但可能并不是最有效的方法 要想搜索结果最合乎你的意愿 IT 之家建议你掌握如下 8 个技
  • 第十三课,深度测试

    开启深度测试 glEnable GL DEPTH TEST 清除深度缓存 glClear GL COLOR BUFFER BIT GL DEPTH BUFFER BIT 深度测试函数 OpenGL允许我们禁用深度缓冲的写入 只需要设置它的深
  • xshell无法连接vmware虚拟机

    一 问题描述 本机使用Xshell无法连接VMware中的虚拟机 并且从本机也无法ping通虚拟机 虚拟机也无法ping通本机物理机 二 环境 场景 物理机 windows10系统 Xshell 6 VMware Workstation 1
  • linux 下的 iptables/ netfilter 防火墙 深度理解 前篇

    一 概述 iptables 其实不是真正的防火墙 我们可以把它理解为一个客户端代理 用户通过iptables 这个代理 将用户的安全设置执行到对应的 安全框架 中 这个安全框架才是真正的防火墙 这个框架的名称叫做netfilter 二 五链
  • 服务器虚拟化导出快照,ESXi5 PACS服务器虚拟化系统快照数据恢复

    杭州某国有企业 一台ESXi5 1 虚拟化系统中运行一重要的PACS服务的虚拟机 因为之前做了快照 管理员在误还原快照后 数据回到3个月前 数据很重要 管理员在尝试多种方式后 也无法补救数据 后通过集成商介绍 联系到了北京安数云和科技 北京
  • sklearn K近邻KNeighborsClassifier参数详解

    原文网址 https scikit learn org stable modules generated sklearn neighbors KNeighborsClassifier html class sklearn neighbors
  • 项目中的STL经验

    STL是c 非常重要的一部分 它是很多大神的杰作 高效 稳定 可扩展性好 虽然STL确实存在难以调试 内存碎片的问题 现在机器的内存越来越大 内存碎片的问题基本不太可能成为系统瓶颈 但只要你使用恰当 它能显著提高生产力 并使代码更短 更易维
  • 五大常用经典算法

    五大常用算法之一 分治算法 一 基本概念 在计算机科学中 分治法是一种很重要的算法 字面上的解释是 分而治之 就是把一个复杂的问题分成两个或更多的相同或相似的子问题 再把子问题分成更小的子问题 直到最后子问题可以简单的直接求解 原问题的解即
  • 【UE4】搭建局域网内VR直播 UE4.27

    前言 英伟达显卡 UE4 27的内网搭建360 相机直播 并在内网任意设备使用VR观看 理论上性能足够效果越好 此处使用的VR设备为Vive 梳理了整体构建流程 希望能帮到你 多图警告 图片教程比较直观 1 准备工作 下载UE和OBS所需安
  • 代码走查和代码审查_代码审查随时间而变化

    代码走查和代码审查 我们已经进行了大约4年的代码审查 代码审查入门 从一开始 开发人员就会互相帮助 在有人询问时查看代码 或者有时主管或高级开发人员会介入并检查代码 如果我们发现测试存在问题 或者是否有人刚刚加入团队并且我们期望他们需要一些
  • android 透明状态栏方法及其适配键盘上推(二)

    在上一篇文章中介绍了一种设置透明状态栏及其适配键盘上推得方法 但是上一篇介绍的方法中有个缺点 就是不能消除掉statusbar的阴影 很多手机如 三星 Nexus都带有阴影 即使我用了
  • GD32F303调试小记(五)之ADC+DMA+硬件过采样

    前言 单片机的大多数的功能都是基于数字信号去控制的 然而许多的场合下 我们也需要有模拟信号的参与 因为许多变量的控制是需要连续的而非阶跃式的 常见的若想得到电压值 温度值 电流值等等都需要用到A D转换 如果外围器件不是特定IC而是自己搭的
  • Mask R-CNN详解

    一 Mask R CNN网络介绍 Mask R CNN是何凯明2017年提出的一个实例分割 Instance segmentation 算法 可以用来做 目标检测 目标实例分割 目标关键点检测 是ICCV2017的best paper Ma