论文源址:https://arxiv.org/pdf/1703.06870.pdf
开源代码:https://github.com/matterport/Mask_RCNN
摘要
Mask R-CNN可以在进行检测的同时,进行高质量的分割操作。基于Faster R-CNN并进行扩展,增加了一个分支在进行框识别的同时并行的预测目标的mask。Mask R-CNN易于训练,相比Faster R-CNN增加了一点点花销。此外,Mask R-CNN可以很容易扩展至其他任务中。如关键点检测。本文在COCO数据集中的三个任务效果表现优异,包含实例分割,边界框的目标检测及关键点检测。
介绍
本文的目标在于建造一个有效进行实例分割的系统。实例分割由于需要对图片中的所有目标进行正确的检测及分割,具有一定的挑战性。 因此,本文结合目标检测及分割两种计算机视觉任务。目标检测的目标是对单独的object进行分类。同时,使用框对每个位置进行定位操作。 分割是不管不同的实例目标对每个像素进行分类。
Mask R-CNN扩展Faster R-CNN通过增加一个分支用于预测每个RoI的分割masks.同时,利用现有的分支进行分类及框回归任务。如下图,mask分支是一个小型的FCN应用到每个RoI上,以像素级的方式进行分割预测。
Mask R-CNN基于Faster R-CNN训练更快,同时,可以扩展结构设计用于其他任务。Faster R-CNN中网络的输入与输出并未满足像素级别的对齐。这是因为RoiPool在特征提取过程中进行粗糙的空间量化操作效果明显。为了解决不匹配的情况,本文提出了一个简单的去量化层RoIAlign,可以准确的保存空间位置。设计上进行了一点改造,RoIAlign发挥重大作用:将mask的准确率相对提升了10%至50%。另外,本文发现同时进行mask与分类十分重要。针对每个类别进行二分类。同时,依赖于网络的RoI分类分支进行类别预测。相反,通常对每个像素进行多分类操作。Mask R-CNN重点在于实例级别的分析。
Mask R-CNN
Faster R-CNN中每个候选目标有两个输出,一个为类别,另一个为边界框的偏移。Mask R-CNN增加了一个分支用于输出目标的mask。Mask 输出与分类及框预测输出是独立的,mask需要提取大量目标的合适形状信息。
Faster R-CNN
主要包含两部分,(1)Region Proposal Network(RPN)用于提取候选目标框。(2)此部分本质上为Fast R-CNN,对每个候选框利用RoIPool提取特征,接着执行分类及框回归操作。 提取的特征被共享便于更快的推理。
Mask R-CNN
Mask R-CNN同样采用两阶段处理过程。第一阶段的操作相同,为RPN,在第二阶段,并行的进行分类及框偏移预测。Mask R-CNN同时针对每个RoI输出一个二分类的mask。参考Fast R-CNN同时进行边界框的分类及回归。大大简化了R-CNN的多阶段过程。
正常情况下,训练时,针对每个RoI样本定义一个多任务的损失:分类损失与边界框损失与Fast R-CNN相似。mask 分支中,针对么个RoI,包含Km^2维度的输出。用于编码K个二分类的mask,大小为mxm,针对K个类别。因此,我们应用一个像素级的sigmoid。定义Lmask为平均二分类交叉熵损失函数。与类别K相对应的ground truth,Lmaks只定义第k个mask。其他mask的输出对此loss损失无影响。Lmask的定义允许网络生成每个类别的masks,与其他类别无关。依赖于分类分支,用于预测输出mask的标签。这里,包含mask及类别的预测。同时,与常用的FCN不同,基于像素级的损失函数及交叉熵损失。本文中,基于像素级的sigmoid及二分类损失,不存在类别之间的竞争。
Mask Representation
mask将输入目标的空间外形进行编码。因此,不同于通过全连接层压缩为向量的类别标记及框偏差,可以通过卷积提取mask的像素级空间结构特征。对于每个RoI使用FCN预测一个mxm的mask。使mask分支中的每一层保持mxm的目标空间形状信息,而不是将特征压缩为向量,从而丢失空间维度。不同于全连接层进行mask预测,全卷积表述需要更少的参数量,同时准确率较高。为了实现像素对像素,要求feature maps很小的RoI特征,很好的保留每个像素对应的空间响应。为此,本文提出了RoIAlign。在进行mask 预测时发挥着重要作用。
RoIAlign
RoIPool对每个RoI提取小feature map(7x7)的标准方法。RoIPool首先量化浮点数的RoI得到离散化feature map。离散处理后的RoI被分为几个空间bins。其中,每个bin也是离散的。每个bin通过最大池化处理得到一个特征值。在连续的坐标x上执行量化操作,如[x/16],16代表feature map的stride,[.]代表近似操作。量化操作在划分bins中。量化操作使RoI与提取的特征不匹配。此变化对类别预测无影响,但是十分不利于像素级的mask预测。
为解决RoI与feature map不匹配问题,本文提出了RoIAlign,用于消除RoIPool造成的量化损失,使提取的特征与输入进行精准的匹配。本文的方法很简单:去除RoI边界或bins中的所有量化操作。比如,使用x/16替换为[x/16]使用双线性插值计算每个RoI bi中输入特征四个角采样位置的精确值,通过使用最大化和均值操作得到结果。如下图,值得注意的是,采样位置及采样点的个数对结果无影响,中间并无量化操作。
Network Architecture
为了证明Mask R-CNN结构的通用性,将Mask R-CNN应用多几个结构。按如下几类特征进行区分:(1)卷积网络结构作为backbone用于提取整张图片的特征。(ii)网络的头部用于边界框的识别(分类及回归)每个RoI单独进行mask预测。本文用网络深度特征作为backbone结构。分别用50层的ResNet及101层的ResNetXt作为backbone。原始的基于ResNet的Faster R-CNN从第四stage的最后一层卷积层进行特征提取。称为C4。本文也采用FPN作为backbone。FPN使用自上而下带侧连接的结构对于单个尺寸的输入建立特征金字塔。通过基于ResNet-FPN的Mask R-CNN取得了较大的提高。
对了网络的头部,在原有网络基础上增加了一个全卷积用于mask预测的分支。更确切的说是本文扩展了Faster R-CNN的box的head。细节如下。
Implementation Details
基于Fast/Faster R-CNN进行参数初始化。
训练:如同Fast R-CNN 当RoI与ground truth的阈值超过0.5则规定为正样例,否则规定为负样例。mask损失只定义在正样例样本(RoI)上。输入图片进行resize操作,尺寸为800x800,mini-batch为2,每张image包含N个采样RoIs。正负样例的比例为1:3,对于基于ResNet的N设置为64,对于FPN的N设置为512;weight decay为0.0001,动量为0.3.RPN中的anchor设置为5个尺寸及3个比例。为方便起见,RPN单独进行训练,与Mask R-CNN不进行特征共享。由于RPN与Mask R-CNN存在相同的backbone,因此,可以进行特征共享。
推理:测试时,proposal的数量为基于ResNet的为300,对于FPN的为1000。在这些proposal上进行box分支预测,同时,使用NMS处理。maks分支应用到分数最高的100个检测框。由于数量少但精度较高的RoIs的存在,mask分支可以对每个RoI预测K个masks。但本文并未使用全部的K个类别,而时只使用分类分支预测出的类别。将mxm大小的浮点数mask 输出进行resize操作,调整至RoI大小,同时以阈值0.5进行二值化处理。
实验
Reference
[1] M. Andriluka, L. Pishchulin, P. Gehler, and B. Schiele. 2D human pose estimation: New benchmark and state of the art analysis. In CVPR, 2014. 8
[2] P. Arbel´aez, J. Pont-Tuset, J. T. Barron, F. Marques, and J. Malik. Multiscale combinatorial grouping. In CVPR, 2014. 2
[3] A. Arnab and P. H. Torr. Pixelwise instance segmentation with a dynamically instantiated network. In CVPR, 2017. 3, 9
[4] M. Bai and R. Urtasun. Deep watershed transform for instance segmentation. In CVPR, 2017. 3, 9
[5] S. Bell, C. L. Zitnick, K. Bala, and R. Girshick. Insideoutside net: Detecting objects in context with skip pooling and recurrent neural networks. In CVPR, 2016. 5
[6] Z. Cao, T. Simon, S.-E. Wei, and Y. Sheikh. Realtime multiperson2dposeestimationusingpartaffinityfields. InCVPR, 2017. 7, 8
论文阅读笔记三十六:Mask R-CNN(CVPR2017)的更多相关文章
-
论文阅读笔记四十六:Feature Selective Anchor-Free Module for Single-Shot Object Detection(CVPR2019)
论文原址:https://arxiv.org/abs/1903.00621 摘要 本文提出了基于无anchor机制的特征选择模块,是一个简单高效的单阶段组件,其可以结合特征金字塔嵌入到单阶段检测器中. ...
-
论文阅读笔记三十:One pixel attack for fooling deep neural networks(CVPR2017)
论文源址:https://arxiv.org/abs/1710.08864 tensorflow代码: https://github.com/Hyperparticle/one-pixel-attac ...
-
论文阅读笔记二十六:Fast R-CNN (ICCV2015)
论文源址:https://arxiv.org/abs/1504.08083 参考博客:https://blog.csdn.net/shenxiaolu1984/article/details/5103 ...
-
论文阅读笔记五十六:(ExtremeNet)Bottom-up Object Detection by Grouping Extreme and Center Points(CVPR2019)
论文原址:https://arxiv.org/abs/1901.08043 github: https://github.com/xingyizhou/ExtremeNet 摘要 本文利用一个关键点检 ...
-
论文阅读笔记三十九:Accurate Single Stage Detector Using Recurrent Rolling Convolution(RRC CVPR2017)
论文源址:https://arxiv.org/abs/1704.05776 开源代码:https://github.com/xiaohaoChen/rrc_detection 摘要 大多数目标检测及定 ...
-
论文阅读笔记三十八:Deformable Convolutional Networks(ECCV2017)
论文源址:https://arxiv.org/abs/1703.06211 开源项目:https://github.com/msracver/Deformable-ConvNets 摘要 卷积神经网络 ...
-
论文阅读笔记三十五:R-FCN:Object Detection via Region-based Fully Convolutional Networks(CVPR2016)
论文源址:https://arxiv.org/abs/1605.06409 开源代码:https://github.com/PureDiors/pytorch_RFCN 摘要 提出了基于区域的全卷积网 ...
-
论文阅读笔记三十四:DSSD: Deconvolutiona lSingle Shot Detector(CVPR2017)
论文源址:https://arxiv.org/abs/1701.06659 开源代码:https://github.com/MTCloudVision/mxnet-dssd 摘要 DSSD主要是向目标 ...
-
论文阅读笔记三十二:YOLOv3: An Incremental Improvement
论文源址:https://pjreddie.com/media/files/papers/YOLOv3.pdf 代码:https://github.com/qqwweee/keras-yolo3 摘要 ...
随机推荐
-
Python Socket 网络编程
Socket 是进程间通信的一种方式,它与其他进程间通信的一个主要不同是:它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于 Socket 来完成通信的,例如我们每天浏览网页.QQ ...
-
贝叶斯决策_bayes(新闻分类)
1.简单例子引入 2.先验概率 3.后验概率 4.最小错误率决策 5.最小风险贝叶斯决策 1. 贝叶斯公式 2简单例子 正常情况下,我们可以快速的将街上的人分成男和女两类.这里街上的人就是我们观测到的 ...
-
GIT: 远程建立一个仓库,然后复制到本地
1. 登录 GIT,创建一个新的仓库 gitskills 2. 创建的时候,要选择 Initialize this repository with a readme ,让GitHub初始化仓库 3. ...
-
UIResponder类
UIResponder类 UIResponder类是所有视图类的父类,包括UIView, UIApplication, UIWindow. UIResponder类定义了一些响应和处理事件的方法.事件 ...
-
导出到Excel并且取消默认的科学计算法
导出Excel的代码很多,其中这种最简单: protected void btnDCAll_Click(object sender, EventArgs e) { ...
-
hdu1874 畅通工程续
http://acm.hdu.edu.cn/showproblem.php?pid=1874 //标准最短路模板 //需要注意的是两点间可能有多组 //需要取最短的 #include<iostr ...
-
问题-[Delphi]无法设置断点
问题现象: 今天突然发现不知何时起DELPHI7除了.dpr文件外,其余各Unit都无法设置断点.即在设计状态下设置了断点,在运行后出现的无效断点!百思不得其解...后查了许多资料,花了两个小时才搞好 ...
-
UNIX环境高级编程——网络基础概念
TCP协议分成两个不同的协议: 1.网络传输中差错的传输控制协议TCP 2.专门负责对不同网络进行互联的互联网协议IP 网络体系结构概念: 网络体系结构即是指网络的层次结构和每层所使用协议的集合 OS ...
-
Dokan简介[转]
1. Dokan Library 简介 Dokan Library 帮助程序员在windows系统下轻松建立用户级文件系统,不需要写设备驱动,其与FUSE(Linux user mode f ...
-
Android Studio 项目结构
在Android Studio中创建项目后,会出现 activity_main.xml 和 MainActivity.java 两个文件 其中 Java文件定义了一个Activity,当应用运行时, ...