论文阅读笔记三十六:Mask R-CNN(CVPR2017)
论文源址: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 摘要 ...
随机推荐
- scrapy基础 之 爬虫入门:先用urllib2来跑几个爬虫
1,爬取糗事百科 概况:糗事百科是html网页,支持直接抓取html字符然后用正则过滤 爬取糗事百科需要同时发送代理信息,即user-agent import urllib2,re def pacho ...
- MyBatis-Plus的简单使用
mybatis-plus也只是听过,可是终究没有使用过.于是自己花几天晚上的时间研究mybatis-plus的使用. 下面的研究也是基于其官网:http://mp.baomidou.com/guide ...
- WindowsPE权威指南-PE文件头中的重定位表
PE加载的过程 任何一个EXE程序会被分配4GB的内存空间,用户层处理低2G的内存,驱动处理高2G的内存. 1.双击EXE程序,操作系统开辟一个4GB的空间. 2.从ImageBase决定了加载后的基 ...
- Linux动态调频系统CPUFreq之一:概述【转】
转自:https://blog.csdn.net/zhangyongfeiyong/article/details/53506362 随着技术的发展,我们对CPU的处理能力提出了越来越高的需求,芯片厂 ...
- CentOS7利用systemctl添加自定义系统服务【转】
systemctl enable name.service 设置开机启 systemctl disable name.service 删除开机启动指令 systemctl list-units --t ...
- Codeforces 1091E New Year and the Acquaintance Estimation Erdős–Gallai定理
题目链接:E - New Year and the Acquaintance Estimation 题解参考: Havel–Hakimi algorithm 和 Erdős–Gallai theore ...
- sqlserver 导出数据
背景 一看到这个标题,还有这个内容,感觉当初记录这个知识点真是记录的太简单了.不过通过这个知识点我还真想起了当初的一些事情.写的题外话可能更有意思,希望每篇文章我都能加个当时的题外记录.当时一直搞or ...
- springcloud-4:服务注册(hello-service)
服务端 请见 http://www.cnblogs.com/huiy/p/8668005.html 客户端: 主启动类 import org.springframework.boot.SpringAp ...
- disk2vhd-----将windows系统转换成虚拟镜像格式
工具介绍 下载url:http://technet.microsoft.com/en-us/sysinternals/ee656415.aspx disk2vhd是一个非常小的P2V转换工具,可以将你 ...
- 任意N位二进制的补码实现——队列存放
正在学习计算机组织与结构,为了写一些底层的算术操作模拟,比如一个二进制补码数的加减乘除,发现这很麻烦,因为不管是什么语言,都只提供了8位.32.64位等部分位数的补码形式,那么怎么实现任意任意位的补码 ...