Make R-CNN论文学习

在论文是在Faster R-CNN的基础上的改进 ,实现的效果有:

  • 目标检测:能够在输入图像中绘制出目标的边界框,预测目标位置
  • 目标分类:判别出该划定边界的目标的类别是什么,如人、车、猫和狗等类别
  • 像素级目标分割:(这就是其比Faster R-CNN多出的一个功能)能够在像素层面上对目标进行区分,将目标和背景区分开来,并使用不同的颜色进行标记

如Faster R-CNN的检测结果为:

而mask R-CNN的检测结果为:

可见mask R-CNN还能够将框中具体的目标部分使用同种颜色标记出来

mask R-CNN在Faster R-CNN上面的更改可从下面的两幅网络结构图中看出来:

Faster R-CNN的结构图为:

mask R-CNN的结构图为:

可见差别主要有两部分:

  • 首先是RoI池化层改进成了RoI Align层
  • 其次是在第二阶段中添加了一个掩模mask检测分支

Mask R-CNN能够很容易地用于其他任务中,比如能够在相同的框架下很容易地判断人类姿势。其在COCO系列挑战赛中的三种项目中都得到了最好的结果,如实例分割、边界框目标检测和人体关键点检测。

什么是实例分割?

实例分割就是不仅要正确检测出一张图片中所有的目标(即画出边界框),并且要精确地分割出每个实例(即上面图像中将边界框中准确的目标用同颜色标注,即对每个像素进行分类)

Mask R-CNN的目的就是为实例分割开发一个相对可用的框架。

首先mask分支是一个用在每个RoI上的小型FCN(全卷积网络),以像素到像素的方式预测分割掩模。掩模分支只增加了一个小的计算开销,使快速系统和快速实验成为可能

其次因为Faster R-CNN没有设计用于网络输入输出之间的像素对齐。这一点在RoIPool[13, 9]中最为明显,它实际上是用于处理实例的核心操作,对特征提取执行粗糙的空间量化。为了修正错位,我们提出了一个简单的,量化无关的层叫做RoIAlign,可以保留精确的空间位置。尽管看似一个很小的变化,RoIAlign起了很大的作用:它能将掩模准确率提高到10%至50%。而且我们发现它对于解耦掩模和类预测是至关重要的:在没有类间竞争的情况下,我们为每个类独立的预测二进制掩模。并且依赖于网络的RoI分类分支来预测类别。相比之下,FCNs通常实现每像素多类分类,分割和分类同时进行,基于我们的实验,发现它对实例分割效果不佳。

我们的模型在GPU上以200ms每帧的速度运行,使用一台有8个GPU的机器,在COCO上训练需要一到两天的时间

Mask R-CNN

Mask R-CNN采用了与Fast R-CNN相同的二阶段过程,第一阶段都使用相同的RPN网络。在第二个阶段中,在并行预测类和框偏置的同时还为每个RoI输出一个二进制掩模。这与最近大多数的系统(如[33,10,26])是相反的,最近的系统都依靠于掩模预测进行分类(而这里是将分类和掩模预测分开进行)。我们的方法遵循了Fast R-CNN并行应用边界框分类和回归的思想(大大简化了原始R-CNN的对阶段管道)。

通常,我们都会在每个采样RoI上定义一个多任务损失函数L=Lcls+Lbox+Lmask,分类损失函数Lcls和回归损失函数Lbox与Fast R-CNN中是相同的。掩模分支对每个RoI都有Km2维的输出,表示K个分辨率为m*m的二进制掩模,K表示类别数量(即对该RoI是否为K个类别中一个进行判定,且每个类别都会返回一个分辨率为m*m的二进制掩模)。为了实现它,我们对每个像素采用了sigmoid,并将Lmask定义为平均二进制交叉熵损失函数。对于某个与某真实类k相关联的RoI,Lmask仅被定义在第k个掩模上(这是因为其他的掩模输出对损失函数没有贡献)。??掩模损失函数Lmask仅在RoI的正样本上定义

我们对Lmask的定义允许网络对每个类在没有类间竞争的情况下生成掩模。我们依赖与专用的分类分支去预测用于收集输出掩模的类别标签。该操作解耦了掩模和类别预测。这与通常将FCNs[23]应用于像素级的softmax和多项式交叉熵损失的语义分割做法不同。在传统做法中,掩模将会跨类别竞争。而在我们的方法中,使用了像素级的sigmoid和二进制损失函数,掩模将不会跨类别竞争(即无类别竞争)。我们通过实验发现,这种方法是改善实例分割结果的关键。

Mask Representation掩模表示

掩模编码了输入目标的空间布局。因此与在全连接层中类别标签和框偏置不可避免地缩成短的输出向量不同,这里能够通过卷积所提供的像素到像素的对应关系,很自然地抽取掩模的空间结构。

具体来说,我们使用一个FCN全卷积网络预测来自每个RoI的一个m*m的掩模。这允许在掩模分支中的每一层保持具体的m*m目标空间布局,不需要将其收缩成一个缺乏空间维度的向量表示。不像之前为了掩模预测扭曲到fc层的方法[33,34,10],我们的全卷积表示需要更少的参数,并且如实验中说明有着更高的准确度。

该像素到像素的行为需要RoI特征,其本身就是小特征图,为了更好的对齐,以准确的保留显式的像素空间对应关系,我们开发出在掩模预测中发挥关键作用的RoIAlign层,将在接下来讲到

RoIAlign

RoIAlign是从每个RoI中抽取一个小的特征映射(如7*7)的一个标准的操作。RoIPool首先将一个浮点数RoI量化为特征图的离散粒度,然后将这个量化的RoI细分为各自量化的空间bin,最后将每个bin覆盖的特征值聚合(通常通过max pooling)。量化是可执行的。例如,对在连续坐标系上的x计算[x/16],其中16是特征图步幅(缩放的比例),[.]表示四舍五入。同样的,当将RoI分成bins时(例如7×7)也执行同样的量化计算。这些量化操作使RoI与提取的特征错位。虽然这可能不会影响分类,因为分类对小幅度的变换有一定的鲁棒性,但它对预测像素级精确度的掩模有很大的负面影响。

为了解决这个问题,我们提出了一个RoIAlign层,消除了对RoIPool的粗糙量化,并将提取的特征与输入精准的对齐。我们提出的改变很简单,我们避免对RoI边界或bins进行量化(例如,我们使用x/16代替[x/16],即不进行四舍五入)。我们使用双线性插值[22](详情可见最邻近插值算法和双线性插值算法——图像缩放)在每个RoI bins中的四个常规采样位置计算输入特征的的精确值,并将结果汇总(使用最大或平均池化),即从原图根据缩放比例对应得到相应的像素值后才进行池化。我们注意到结果对抽取的4个样本位置甚至是采样多少个点并不敏感,只要不进行量化即可

正如我们在4.2节(对照实验)中所示,RoIAlign的改进效果明显。我们还比较了[10]中提出的RoIWarp操作。与RoIAlign不同,RoIWarp忽略了对齐问题,并在[10]的实现中有像RoIPool那样量化RoI。即使RoIWarp也采用了[22]中的双线性重采样,如实验所展示的那样(更多细节见表2c),它与RoIPool的效果差不多。这表明对齐起到了关键的作用。

新的网络结构为:

原文地址:https://www.cnblogs.com/wanghui-garcia/p/11171895.html

时间: 2024-11-10 18:43:33

Make R-CNN论文学习的相关文章

【 论文学习记录】A flexible and scalable slam system with full 3d motion estimation 一种灵活可扩展带有3D运动估计的slam系统

A flexible and scalable slam system with full 3d motion estimation   论文学习记录 这篇论文系统框架,栅格多阈值,更新同步与伪数据,扫描匹配起始点,协方差交叉融合的思想还是值得借鉴的. 摘要 关注于搜救机器人建图定位与导航的框架性文章. 低计算资源的在线快速获取栅格地图: 结合鲁棒的激光扫描匹配方法和惯性传感器姿态估计系统. 快速地图梯度近似与多分辨率(类似图像金字塔)栅格地图,精确而不需要闭环检测. 介绍 2D slam 子系

手势跟踪论文学习:Realtime and Robust Hand Tracking from Depth

本文介绍的方法主要是用到了深度信息.提出了一种新的手指检测以及手型初始化的方法.具有很好的鲁棒性.在不使用GPU的情况下,速度就可以达到25FPS.准确率还相当的高.可以说是现在手势识别中最好的方法了. 当前的很多方法要不就是很慢,要不就是使用了GPU,再或者就是需要非常复杂的初始化.而本文提出的方法重新定义了手势的模型,结合了现在通用的两种方法的优势,并且加上一个约束方程,得到了很好的效果. 1.模型的重新定义 每一只手,定义了一个自由度(DOF)为26 的手的模型,其中的6个自由度代表全局的

R语言可视化学习笔记之添加p-value和显著性标记

R语言可视化学习笔记之添加p-value和显著性标记 http://www.jianshu.com/p/b7274afff14f?from=timeline 上篇文章中提了一下如何通过ggpubr包为ggplot图添加p-value以及显著性标记,本文将详细介绍.利用数据集ToothGrowth进行演示 #先加载包 library(ggpubr) #加载数据集ToothGrowth data("ToothGrowth") head(ToothGrowth) ## len supp do

论文学习-系统评估卷积神经网络各项超参数设计的影响-Systematic evaluation of CNN advances on the ImageNet

写在前面 论文状态:Published in CVIU Volume 161 Issue C, August 2017 论文地址:https://arxiv.org/abs/1606.02228 github地址:https://github.com/ducha-aiki/caffenet-benchmark 在这篇文章中,作者在ImageNet上做了大量实验,对比卷积神经网络架构中各项超参数选择的影响,对如何优化网络性能很有启发意义,对比实验包括激活函数(sigmoid.ReLU.ELU.ma

卷积神经网络(CNN)学习算法之----基于LeNet网络的中文验证码识别

由于公司需要进行了中文验证码的图片识别开发,最近一段时间刚忙完上线,好不容易闲下来就继上篇<基于Windows10 x64+visual Studio2013+Python2.7.12环境下的Caffe配置学习 >文章,记录下利用caffe进行中文验证码图片识别的开发过程.由于这里主要介绍开发和实现过程,CNN理论性的东西这里作为介绍的重点,遇到相关的概念和术语请自行研究.目前从我们训练出来的模型来看,单字识别率接近96%,所以一个四字验证码的准确率大概80%,效果还不错,完全能满足使用,如果

mtcnn论文学习

Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Networks 使用多任务级联卷积网络连接人脸检测和对齐 摘要-因为可能有着多种姿势.照明和遮挡(various poses, illuminations and occlusions),在非限制环境下的人脸检测和对齐是很有挑战性的.目前的研究显示了深度学习方法能够在这两个任务上获得优异的性能.在该论文中,我们提出了一个深度级联多任务框架,用来探

从零开始系列-R语言基础学习笔记之二 数据结构(一)

在上一篇中我们一起学习了R语言的环境搭建,这次我们开始学习R语言的数据结构第一部分:向量.数组和矩阵. 一.向量 向量是一维数组,其内容可以是数值.字符或布尔值,但所有数据的类型必须一致.创建向量使用的关键字是c,访问向量中的元素使用[],具体如下: 创建数值向量a<-c(1,2,3,4,5,6) 创建字符向量b<-c("a","b","c") 创建布尔向量c<-c(TRUE,FALSE) 访问向量: a[3] 得到的值是3,注

Word2vec Parameter Learning Explained 论文学习笔记

原始论文:http://www-personal.umich.edu/~ronxin/pdf/w2vexp.pdf 之前学习Word2vec时,脱离了神经网络,这周补充了下相关知识,打算之后再 看下源码,加深自己的理解.

人工神经网络 深度学习 MLP RBF RBM DBN DBM CNN 整理学习

注:整理自向世明老师的PPT 内容提要 1 发展历史 2 前馈网络(单层感知器,多层感知器,径向基函数网络RBF) 3 反馈网络(Hopfield网络,联想存储网络,SOM,Boltzman及受限的玻尔兹曼机RBM,DBN,CNN) 发展历史 单层感知器 1 基本模型 2 如果激励函数是线性的话,可用最小二乘直接计算 3 如果激励函数是sifmoid function,可迭代更新(一次性或者逐样本更新) 上式只做了简单的求导展开,很容易推导 多层感知器 1 基本模型 2 举例(含有一个隐含层的多

GoogleNet:inceptionV3论文学习

Rethinking the Inception Architecture for Computer Vision 论文地址:https://arxiv.org/abs/1512.00567 Abstract 介绍了卷积网络在计算机视觉任务中state-of-the-art.分析现在现状,本文通过适当增加计算条件下,通过suitably factorized convolutions 和 aggressive regularization来扩大网络.并说明了取得的成果. 1. Introduct