【目标检测】【语义分割】—Mask-R-CNN详解

2023-11-18

一、mask rcnn简介

论文链接:论文链接

论文代码:Facebook代码链接;Tensorflow版本代码链接; Keras and TensorFlow版本代码链接;MxNet版本代码链接

mask rcnn是基于faster rcnn架构提出的卷积网络,一举完成了object instance segmentation. 该方法在进行目标检测的同时完成了高质量的语义分割。文章的主要思路是把原有的Faster-RCNN进行扩展,添加一个分支使用现有的检测对目标进行并行预测。同时,将 Roi Pooling 层替换成了 RoiAlign;网络结构比较容易实现和训练,速度为5fps,可以很方便的应用到其他的领域,像目标检测,分割,和人物关键点检测等。并且比着现有的算法效果都要好,在后面的实验结果部分有展示出来。

二、Mask R-CNN是什么,可以做哪些任务?

图1 Mask R-CNN整体架构

Mask R-CNN是一个实例分割(Instance segmentation)算法,可以用来做“目标检测”、“目标实例分割”、“目标关键点检测”

实例分割(Instance segmentation)和语义分割(Semantic segmentation)的区别与联系

联系:语义分割和实例分割都是目标分割中的两个小的领域,都是用来对输入的图片做分割处理;

区别:

图2 实例分割与语义分割区别

1.  通常意义上的目标分割指的是语义分割,语义分割已经有很长的发展历史,已经取得了很好地进展,目前有很多的学者在做这方面的研究;然而实例分割是一个从目标分割领域独立出来的一个小领域,是最近几年才发展起来的,与前者相比,后者更加复杂,当前研究的学者也比较少,是一个有研究空间的热门领域,如图1所示,这是一个正在探索中的领域;

标图3 实例分割与语义分割区别题

2.  观察图3中的c和d图,c图是对a图进行语义分割的结果,d图是对a图进行实例分割的结果。两者最大的区别就是图中的"cube对象",在语义分割中给了它们相同的颜色,而在实例分割中却给了不同的颜色。即实例分割需要在语义分割的基础上对同类物体进行更精细的分割。

三、Mask R-CNN: overview

图4 Mask R-CNN整体构架

从整体构架可以知道,Mask R-CNN主要的贡献在于如下: 
1. 强化的基础网络,用ResNet-101+FPN作为特征提取网络,达到 state-of-the-art 的效果。 
2. ROIAlign解决Misalignment 的问题 
3. 增加了_{L}mask的Loss Function

本文业主要是针对这几个问题来解析Mask-R-CNN。

四、细节描述

1. Head Architecture 

图5 Head Architecture

如上图所示,为了产生对应的Mask,文中提出了两种架构,即左边的Faster R-CNN/ResNet和右边的Faster R-CNN/FPN。对于左边的架构,我们的backbone使用的是预训练好的ResNet,使用了ResNet倒数第4层的网络。输入的ROI首先获得7x7x1024的ROI feature,然后将其升维到2048个通道(这里修改了原始的ResNet网络架构),然后有两个分支,上面的分支负责分类和回归,下面的分支负责生成对应的mask。由于前面进行了多次卷积和池化,减小了对应的分辨率,mask分支开始利用反卷积进行分辨率的提升,同时减少通道的个数,变为14x14x256,最后输出了14x14x80的mask模板。而右边使用到的backbone是FPN网络,这是一个新的网络,通过输入单一尺度的图片,最后可以对应的特征金字塔,如果想要了解它的细节,请参考我前边的博客。得到证实的是,该网络可以在一定程度上面提高检测的精度,当前很多的方法都用到了它。由于FPN网络已经包含了res5,可以更加高效的使用特征,因此这里使用了较少的filters。该架构也分为两个分支,作用于前者相同,但是分类分支和mask分支和前者相比有很大的区别。可能是因为FPN网络可以在不同尺度的特征上面获得许多有用信息,因此分类时使用了更少的滤波器。而mask分支中进行了多次卷积操作,首先将ROI变化为14x14x256的feature,然后进行了5次相同的操作,然后进行反卷积操作,最后输出28x28x80的mask。即输出了更大的mask,与前者相比可以获得更细致的mask。

图6 BB输出的mask结果

如上图所示,图像中红色的BB表示检测到的目标,我们可以用肉眼可以观察到检测结果并不是很好,即整个BB稍微偏右,左边的一部分像素并没有包括在BB之内,但是右边显示的最终结果却很完美。

1.2 RoIAlign详解

ROI Align 是在Mask-RCNN论文里提出的一种新的区域特征聚集方式, 很好地解决了Faster-R-CNN中ROI Pooling操作时两次量化造成的区域不匹配(mis-alignment)的问题。实验显示,在目标检测时将ROI Pooling替换为ROI Align 可以提升检测模型的准确性。

1. ROI Pooling 的局限性分析

在常见的两级检测框架(比如Fast-RCNN,Faster-RCNN,RFCN)中,ROI Pooling 的作用是根据预选框的位置坐标在特征图中将相应区域池化为固定尺寸的特征图,以便进行后续的分类和包围框回归操作。由于预选框的位置通常是由模型回归得到的,一般来讲是浮点数,而池化后的特征图要求尺寸固定。故ROI Pooling这一操作存在两次量化的过程。

  • 将候选框边界量化为整数点坐标值。
  • 将量化后的边界区域平均分割成 k x k 个单元(bin),对每一个单元的边界进行量化。

事实上,经过上述两次量化,此时的候选框已经和最开始回归出来的位置有一定的偏差,这个偏差会影响检测或者分割的准确度。在论文里,作者把它总结为“不匹配问题(misalignment)。

下面我们用直观的例子具体分析一下上述区域不匹配问题。如 图1 所示,这是一个Faster-RCNN检测框架。输入一张800*800的图片,图片上有一个665*665的包围框(框着一只狗)。图片经过主干网络提取特征后,特征图缩放步长(stride)为32。因此,图像和包围框的边长都是输入时的1/32。800正好可以被32整除变为25。但665除以32以后得到20.78,带有小数,于是ROI Pooling 直接将它量化成20。接下来需要把框内的特征池化7*7的大小,因此将上述包围框平均分割成7*7个矩形区域。显然,每个矩形区域的边长为2.86,又含有小数。于是ROI Pooling 再次把它量化到2。经过这两次量化,候选区域已经出现了较明显的偏差(如图中绿色部分所示)。更重要的是,该层特征图上0.1个像素的偏差,缩放到原图就是3.2个像素。那么0.8的偏差,在原图上就是接近30个像素点的差别,这一差别不容小觑。

图片标题
图 7 ROI Pooling构架

2. ROI Align 的主要思想和具体方法

为了解决ROI Pooling的上述缺点,作者提出了ROI Align这一改进的方法(如图2)。ROI Align的思路很简单:取消量化操作,使用双线性内插的方法获得坐标为浮点数的像素点上的图像数值,从而将整个特征聚集过程转化为一个连续的操作,。值得注意的是,在具体的算法操作上,ROI Align并不是简单地补充出候选区域边界上的坐标点,然后将这些坐标点进行池化,而是重新设计了一套比较优雅的流程,如 图3 所示:

  • 遍历每一个候选区域,保持浮点数边界不做量化。
  • 将候选区域分割成k x k个单元,每个单元的边界也不做量化。
  • 在每个单元中计算固定四个坐标位置,用双线性内插的方法计算出这四个位置的值,然后进行最大池化操作。

这里对上述步骤的第三点作一些说明:这个固定位置是指在每一个矩形单元(bin)中按照固定规则确定的位置。比如,如果采样点数是1,那么就是这个单元的中心点。如果采样点数是4,那么就是把这个单元平均分割成四个小方块以后它们分别的中心点。显然这些采样点的坐标通常是浮点数,所以需要使用插值的方法得到它的像素值。在相关实验中,作者发现将采样点设为4会获得最佳性能,甚至直接设为1在性能上也相差无几。事实上,ROI Align 在遍历取样点的数量上没有ROIPooling那么多,但却可以获得更好的性能,这主要归功于解决了misalignment的问题。值得一提的是,我在实验时发现,ROI Align在VOC2007数据集上的提升效果并不如在COCO上明显。经过分析,造成这种区别的原因是COCO上小目标的数量更多,而小目标受misalignment问题的影响更大(比如,同样是0.5个像素点的偏差,对于较大的目标而言显得微不足道,但是对于小目标,误差的影响就要高很多)。

å¾çæ é¢
图8 RoIAlign构架
å¾çæ é¢
图9 双线性插值

3. ROI Align 的反向传播

常规的ROI Pooling的反向传播公式如下:

图片标题

这里,xi代表池化前特征图上的像素点;yrj代表池化后的第r个候选区域的第j个点;i*(r,j)代表点yrj像素值的来源(最大池化的时候选出的最大像素值所在点的坐标)。由上式可以看出,只有当池化后某一个点的像素值在池化过程中采用了当前点Xi的像素值(即满足i=i*(r,j)),才在xi处回传梯度。

类比于ROIPooling,ROIAlign的反向传播需要作出稍许修改:首先,在ROIAlign中,xi*(r,j)是一个浮点数的坐标位置(前向传播时计算出来的采样点),在池化前的特征图中,每一个与 xi*(r,j) 横纵坐标均小于1的点都应该接受与此对应的点yrj回传的梯度,故ROI Align 的反向传播公式如下: 

å¾çæ é¢

上式中,d(.)表示两点之间的距离,Δh和Δw表示 xi 与 xi*(r,j) 横纵坐标的差值,这里作为双线性内插的系数乘在原始的梯度上。

1.3 Loss 函数

训练时,对每个采样的 RoI 的 multi-task loss 为:

L=Lcls+Lbox+LmaskL=Lcls+Lbox+Lmask

  • LclsLcls - 分类 loss
  • LboxLbox - bounding-box 回归 loss
  • LmaskLmask - mask 分割 loss

mask 网络分支采用 FCN 对每个 RoI 的分割输出维数为 Km2Km2,即 KK 个类别的 m×mm×m 的二值 mask. 采用像素级 Sigmoid,定义 LmaskLmask 为平均二值交叉熵损失函数(average binary cross-entropy loss). 一个 RoI 仅与 ground-truth 类别 kk 相关,LmaskLmask 只与第 k​k​ 个 mask 相关,不受其它的 mask 输出的影响.

LmaskLmask 使得网络能够输出每一类的 mask,且不会有不同类别 mask 间的竞争. 分类网络分支预测 object 类别标签,以选择输出 mask,解耦了 mask 和 class 预测间的关系.

传统 FCNs 采用 per-pixel 的 softmax 和 multinomial cross-entropy loss,会造成不同类别的 mask 间的相互影响;

Lmask 采用 per-pixel sigmoid 和 binary loss,避免了不同类别的 mask 间的影响. 有效的提升了 instance segmentation 效果.

五、对比实验效果

图10 实验效果对比

       另外,作者给出了很多实验分割效果,就不都列了,只贴一张 和 FCIS 的对比图(FCIS 出现了Overlap 的问题) 

图11 FCIS 的对比图

六、Mask-RCNN 扩展

1、人体姿态估计 Human Pose Estimation

说明 Mask R-CNN 的扩展性.

将 keypoint 的位置表示为 one-shot mask,采用 Mask R-CNN 来预测 KK 个 masks,每个 mask 分别对应一个 keypoint.

对于一个实例的 KK 个 keypoints 中的每一个,训练目标是得到 one-hot m×mm×m 的二值mask,其中只有一种像素被标记为前景,其它为背景.

训练时,对于每个可见的 groundtruth keypoint,最小化 m2m2 -way softmax 输出的 cross-entropy loss(检测单个 keypoint). 这里类似与 instance segmentation,KK 个 keypoints 也是被独立处理的.

基于 ResNet-FPN, keypoint 的 head 网络结构类似于 Figure3(右),如下: 

这里写图片描述

主要由 8 个 3×33×3 512-d 卷积层,其后接 1 个 deconv 层和 1 个 2×2× bilinear upscaling,最终输出一个分辨率为 56×5656×56 的特征图.

Mask R-CNN 发现,关键点定位的精确度需要相对高的分辨率输出.

训练数据集 COCO trainval 35k 标注的 keypoints 数据

训练是图像的尺度随机的从 [640, 800] 中采样;

测试时图像采用单一尺度 800 像素;

训练 90k 次迭代, learning_rate=0.02,在 60k 和 80k 次迭代时降低 10 倍;

NMS 处理 bounding-box 的阈值 threshold=0.5.

2、实验结果: 

这里写图片描述

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

【目标检测】【语义分割】—Mask-R-CNN详解 的相关文章

  • 解决webview不显示图片常用方法,亲测有效

    左图不显示图片 右边是解决后显示的 我是先截右边再截左边 所以时间上右边的早了 都有的代码如下 项目中用的dataBinding数据绑定 mBinding wvBaseWebView指的是webview控件 mBinding wvBaseW
  • STM32:Custom HID实现USB双向通信

    本文章主要讲了使用STM32的USB Device 实现控制板和电脑通信功能 从而实现 上位机对控制板进行调试 USB Device可以有多种类型 实现双向通信的话 推荐使用Custom HID类型 首先使用STM32CubeMx实现功能引
  • ffmpeg 音频常用命令

    ffmpeg的使用方式 ffmpeg options infile options i infile outfile options outfile Stream specifier Some options are applied per
  • Log4j学习笔记

    用了三四年的C 转向Java的怀抱 还是有诸多的不适应 C 中不论多复杂的Server 只要有GDB在手 总感觉debug都不是啥大事 程序运行期间的各种状态 都可以通过GDB轻松的获取到 而到了Java中 总感觉像是被困住了手脚 有力没法
  • 【JavaScript】npm、Yarn 和 pnpm 的区别

    npm Yarn 和 pnpm 都是用于管理和构建 JavaScript 项目的包管理工具 以下是它们之间的一些区别和特点 npm Node Package Manager npm 是 Node js 官方提供的包管理工具 是 JavaSc
  • 什么是数据中心IP,优缺点是什么?

    如果根据拥有者或者说发送地址来分类的话 可以将代理分为三类 数据中心ip 住宅ip 移动ip 本文我们来了解数据中心ip的原理以及他们的优势劣势 才能选择适合自己的代理 一 什么是数据中心ip代理 数据中心ip是由数据中心拥有和管理的IP的
  • Air780E

    目录 基础资料 探讨重点 实现功能 硬件准备 软件版本 在雁飞格物平台上创建产品 1 创建产品 2 查看雁飞格物平台接入协议 组成ClientId 组成userName 3 设备鉴权信息 鉴权参数计算 python版 4 MQTT直连雁飞格

随机推荐

  • 目标检测之选择性搜索算法实现(符动图演示)

    定义 选择性搜索是在对象检测中使用的区域提议算法 它的设计速度很快 召回率很高 它基于基于颜色 纹理 大小和形状兼容性的相似区域的分层分组计算 操作步骤 首先使用 Felzenszwalb 和 Huttenlocher 基于图像的分割方法
  • clouddrive挂载阿里云盘之后文件不显示

    clouddrive挂载阿里云盘之后文件不显示 此问题是小概率版本bug 待更新后解决 目前解决方案 重新挂载登录刷新
  • R手册(Visualise)--GGally(ggplot2 extensions)

    本站已停止更新 查看最新内容请移至本人博客 Wilen s Blog 文章目录 GGally ggmatrix ggplot2矩阵 ggpairs ggplot2广义配对图 ggscatmat 纯粹定量变量的传统散点图矩阵 返回ggplot
  • canvas绘制并导出图片(画笔)

    绘制 var canvas document getElementById myCanvas canvas width document getElementById drawLine offsetWidth canvas height d
  • HTML中的& nbsp; & ensp; & emsp;等6种空格标记

    代码 1 2 3 4 5 6
  • 【工作笔记】web项目从Spring3.x升级到Spring4.x

    Spring3 x升级到Spring4 x Spring升级首先到https docs spring io spring framework docs官方文档查看Spring各个版本的信息 比较不同 确定要升级的版本和要改动的地方 从官网可
  • 【第01例】IPD进阶

    目录 简介 专栏目录 内容详解 作者简介 相关课程 简介 今天来讲讲 IPD 中涉及的几个评审点 先来看一下 CDCP CDCP 是英文 Concept Decision Check Point 首字母的简称 也就是概念决策评审点 具体讲解
  • 解决:com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure(真实有效)

    数据库连接失败 在数据库连接失败 经常会有蛮多一系列的问题导致的原因 这个时候一定要多去尝试一下各种方法 并且做好自己的梳理 一 例如我在SpringBoot项目中使用了阿里的数据库连接池Driud 有次在启动的时候 会报这样的错 Caus
  • if 与elif

    if condition1 代码段1 if condition2 代码段2 else 代码段3 执行顺序 gt 进入if condition1 condition1 为true gt 执行 代码段1 gt 进入 if condition2
  • JVM工具-jstack

    jstack 打印线程堆栈信息 支持支持本地java进程 core文件以及远程java进程 命令格式 jstack options pid jstack options executable core jstack options serv
  • Mac电脑硬件/软件运行状况查看工具

    iStat Menus是一款系统监控和管理工具 旨在帮助Mac用户实时监控电脑的各项硬件和软件信息 它以直观和定制化的方式提供了丰富的系统状态指标 让用户能够全面了解和管理自己的Mac电脑 iStat Menus提供了一系列的菜单栏指示项目
  • iphone文件访问ftp服务器,ipad ftp服务器 iPhone/iPad访问FTP服务器设置步骤

    ipad ftp服务器 iPhone iPad访问FTP服务器设置步骤 2013 02 27 15 35 39 脚本之家 有时候出门在外需要用到电脑中的文件 但是却没有携带电脑或者U盘 那么该怎么办呢 其实在IOS系统上 一些实用的应用软件
  • 云计算基础-基本概念(一)

    云计算基本概念 一 一 网络 1 VPC 虚拟专有网络 2 LB 负载均衡 3 vFW 虚拟防火墙 4 TOR 5 Region 6 AZ 可用区 7 Overlay和Underlay 8 VPC对等连接 9 BGW 10 NAT Gate
  • MySQL 8.0 修改密码 步骤详解(详细图解)

    1 以管理员身份打开cmd窗口 定位到MySQL安装目录下的bin目录 输入net stop mysql 回车 关闭MySQL数据库 2 输入mysqld console skip grant tables shared memory my
  • Python 爬虫进阶必备

    今日网站 aHR0cHM6Ly93d3cuemRheWUuY29tL0ZyZWVJUExpc3QuaHRtbA 这个网站来自咸鱼的技术交流群 抓包分析与加密定位 这个网站是某代理商的免费代理页面 我们想要实现的就是这个页面上免费代理的提取
  • Qt 支持HEIC/HEIF格式图片

    HEIF 格式简介 源于百度知道 heic的格式是苹果针对iOS11专门研发的一个照片格式 Heic是Apple iOS和macOS的文件格式 用于处理图像和视频 Heic是IOS 11系统中取代原始视频和照片的H 264和JEP格式 He
  • Leaf-美团分布式id生成系统

    概述 分布式id生成已经有业界较为成熟的方案 现在公司使用的是美团的Leaf的号码段模式 之所以不用雪花算法模式还是因为雪花算法的自身缺陷 即时间回拨问题 本文就从源码角度剖析leaf项目的两种id生成模式 Leaf这种分布式id生成系统是
  • 零样本和少样本学习

    在本篇文章中 我们将讨论机器学习和深度学习的不同领域中的一个热门话题 零样本和少样本学习 Zero and Few Shot learning 它们在自然语言处理到计算机视觉中都有不同的应用场景 少样本学习 在监督分类器中 所有的模型试图学
  • FileInputStream读取文件&FileOutputStream写入文件

    Java的流式输入输出建立在4个抽象类的基础上 InputStream OutputStream Reader和Writer 它们用来创建具体的流式子类 InputStream和OutputStream类被设计为字节类 而Reader和Wr
  • 【目标检测】【语义分割】—Mask-R-CNN详解

    一 mask rcnn简介 论文链接 论文链接 论文代码 Facebook代码链接 Tensorflow版本代码链接 Keras and TensorFlow版本代码链接 MxNet版本代码链接 mask rcnn是基于faster rcn