目标检测——Mask R-CNN算法解读

news/2024/7/10 1:30:06 标签: 目标检测, R-CNN, 人工智能, 算法

论文:Mask R-CNN
作者:Kaiming He Georgia Gkioxari Piotr Doll´ar Ross Girshick
链接:https://arxiv.org/abs/1703.06870
代码:https://github.com/facebookresearch/Detectron

R-CNN系列其他文章:

目录

  • 1、算法概述
  • 2、Mask R-CNN细节
    • 2.1 Mask Representation
    • 2.2 RoI Align
  • 3、实验结果
  • 4、创新点

1、算法概述

该论文主要实现的是把图片中的目标一个一个的分割出来,也叫实例分割;是在Faster R-CNN的基础上增加了一个预测实例目标掩模的分支。该算法在COCO 2016竞赛的三大任务(实例分割、目标检测、关键点预测)中都获得了单模型最好的成绩。
在这里插入图片描述
如上图所示,(d)即为实例分割,实例分割是具有挑战性的,因为它需要正确检测图像中的所有对象,同时还要精确分割每个实例。因此,它结合了对单个对象进行分类和使用边界框对每个对象进行定位。

2、Mask R-CNN细节

在这里插入图片描述
在这里插入图片描述
如上图所示,Mask R-CNN就是在Faster R-CNN的基础上增加一个mask分支,但是额外的掩码输出与原本的class和box输出不同,需要提取对象的更精细的空间布局,包括需要学习像素级对齐。对于每个RoI,Mask R-CNN在预测类别和box偏置的同时,还会输出二进制掩码。
在训练阶段,也采用多任务损失:L=Lcls+Lbox+Lmask

2.1 Mask Representation

Mask分支以RoI的特征图作为输入完成mask编码学习,它不像类别分类和box偏移以压缩形式的全连接作为输入,因为它需要以卷积的形式学习像素到像素的对应关系。Mask R-CNN的mask分支是一个FCN结构,对于每个RoI特征输入,输出大小为mxm大小的mask,若类别为K,则输出为Kmxm,对于每类(对应一个mxm大小的feature map)都在每个像素应用sigmoid操作用来评估是否属于该类。

由于mask分支为FCN结构,所以能让分支上的每一层都保持对应的空间结构,这就要求RoI特征和输入图像的特征在空间位置上要保存对应关系,不能有空间上的偏移,这促使作者改进Faster R-CNN的RoI Pooling层为RoI Align。

2.2 RoI Align

RoI Pooling是从每个RoI中提取小特征图(例如7x7)的标准操作。在Faster R-CNN中,使用RoI Pooling之前的特征图大小是原图的1/16,假设某个RoI区域在原图位置上的横坐标范围是x0到x1,纵坐标范围是y0到y1,那么这个RoI区域在经过一系列卷积后,在RoI Pooling的输入特征图上的横坐标范围应为x0/16到x1/16,纵坐标范围应为y0/16到y1/16。但是RoI Pooling操作做了取整操作,即RoI在特征图上的位置变为了[x0/16] 到[x1/16]和[y0/16]到[y1/16],这里的取整操作反映到原图上就发生了位置偏移,造成了RoI区域在空间位置上没有对齐,这可能对分类不会有太大影响,但是对应mask学习,影响太大了。所以作者没有采用RoI Pooling,而且采用了RoI Align,它没有取整操作,而且对相应位置做了双线性插值,以保证位置前后对齐。
在这里插入图片描述
在这里插入图片描述

3、实验结果

作者以ResNet50,ResNet101和ResNeXt50,ResNeXt101作为backbone,假如Faster R-CNN采用ResNet50并以第4个stage的输出作为RoI的特征就命名为ResNet-50-C4,实验在COCO数据集上进行统计,实例分割结果如下:
在这里插入图片描述
目标检测的结果如下:
在这里插入图片描述
关键点检测结果如下:
在这里插入图片描述

4、创新点

  • 创新点:
    1、在Faster R-CNN的基础上新增mask分支,对bounding box回归有相互促进的效果;
    2、提出RoI Align操作,纠正了RoI Pooling在特征图上的取值偏移,使得检测分支和mask分支在特征图上的RoI区域和原图的RoI区域在空间位置上对齐;

http://www.niftyadmin.cn/n/5247608.html

相关文章

dll动态链接库【C#】

1说明: 在C#中,dll是添加 【类库】生成的。 2添加C#的dll: (1)在VS中新建一个Windows应用程序项目,并命名为TransferDll。 (2)打开Windows窗体设计器,从工具箱中为窗体…

Java编程中通用的正则表达式(二)

正则表达式,又称正则式、规则表达式、正规表达式、正则模式或简称正则,是一种用来匹配字符串的工具。它是一种字符串模式的表示方法,可以用来检索、替换和验证文本。正则表达式是一个字符串,它描述了一些字符的组合,这…

Python游戏测试工具自动化遍历游戏中所有关卡

场景 游戏里有很多关卡(可能有几百个了),理论上每次发布到外网前都要遍历各关卡看看会不会有异常,上次就有玩家在打某个关卡时卡住不动了,如果每个关卡要人工遍历这样做会非常的耗时,所以考虑用自动化的方…

解决“使用command+shift+a 总是弹出默认终端”

冲突出现的终端如下 问题原因 MacOS下使用IntelliJ 系列的IDE就是经常遇到这个问题,原因该快捷键与系统的 《在“终端”中搜索man页面索引 》功能的快捷键冲突了,Find Action是一个很高频使用的! 解决方案 把系统《在“终端”中搜索man…

Unity中Batching优化的GPU实例化(4)

文章目录 前言一、构建需要实例化的额外数据二、在顶点着色器,将实例化 ID 从 appdata 存入 v2f 传给片元着色器三、在片断着色器中访问具体的实例化变量三、使用代码修改Shader材质属性,实现GPU实例化后不同对象颜色不同的效果1、在C#测试脚本生成小板凳…

上网行为监控软件有哪些

上网行为监控软件是一种专门用于监控网络活动的工具,它可以记录员工或学生在计算机或移动设备上的网络行为,以帮助企业和家庭更好地管理网络使用情况。这种软件可以监控网页浏览、社交媒体活动、文件传输、即时通讯、在线视频和音频等行为。 上网行为监控…

Leetcode—2646.最小化旅行的价格总和【困难】

2023每日刷题&#xff08;五十三&#xff09; Leetcode—2646.最小化旅行的价格总和 算法思想 看灵神的 实现代码 class Solution { public:int minimumTotalPrice(int n, vector<vector<int>>& edges, vector<int>& price, vector<vector&l…

Error: Cannot find module ‘@npmcli/config‘ 最新解决办法

看了网上许多这个问题的小伙伴&#xff0c;都是降级node版本来解决的。但是降级并不是我想要的结果。 真正的解决办法就是更新nvm&#xff0c;将你的nvm升级到最新版本&#xff0c;然后卸载掉npm报错的node版本&#xff0c;重新安装即可使用。 解决办法&#xff1a;更新nvm