从R-CNN到Mask R-CNN!

2017 年 11 月 13 日 全球人工智能 taigw


——免费加入AI技术专家社群>>

——免费加入AI高管投资者群>>

自从2012年的ILSVRC竞赛中基于CNN的方法一鸣惊人之后,CNN已成为图像分类、检测和分割的神器。其中在图像检测的任务中,R-CNN系列是一套经典的方法,从最初的R-CNN到后来的Fast R-CNN, Faster R-CNN 和今年的Mask R-CNN, 我们可以看到CNN在图像检测中是如何一点一点提高的。和本文来一道回顾R-CNN家族的发展史,了解这些方法的演变和这个演变过程中的那些富有创意的想法。

R-CNN 系列的四篇文章如下:

  1. R-CNN: arxiv.org/abs/1311.2524

  2. Fast R-CNN: arxiv.org/abs/1504.0808

  3. Faster R-CNN: arxiv.org/abs/1506.0149

  4. Mask R-CNN: arxiv.org/abs/1703.0687

图像的检测任务是从一个复杂场景的图像中找到不同的物体,并且给出各个物体的边界框。图像检测的三个著名的数据集是PASCAL VOC,ImageNet和微软COCO. PASCAL VOC包含20个物体的类别,而ImageNet包含一千多种物体类别,COCO有80中物体类别和150万个物体实例。

PASCAL VOC目标检测
COCO目标检测和实例分割

1, R-CNN

R-CNN的思路是很直观的三步曲:1,得到若干候选区域;2, 对每个候选区域分别用CNN分类;3,对每个候选区域分别进行边框预测。

在R-CNN出现之前,目标检测的流行思路是先从图像中得到一些候选区域,再从候选区域中提取一些特征,然后利用一个分类器对这些特征进行分类。分类的结果和候选区域的边界框就可以作为目标检测的输出。一种得到候选区域的方法是Selective Search, 该方法可以得到不同尺度的候选区域,每个候选区域是一个联通的区域。如下图中,左边得到的是较小的候选区域,右边是较大的候选区域,在该尺度下包含了整个人的区域。

Selective Search得到不同尺度的候选区域

R-CNN的想法是,既然CNN在图像分类任务中的表现很好,可以自动学习特征,何不用它来对每个候选区域进行特征提取呢?于是R-CNN在Selective Search得到的候选区域的基础上,将每个候选区域缩放到一个固定的大小,并且作为AlexNet(ImageNet 2012图像分类竞赛的冠军)的输入,依次对这些区域进行特征提取,然后再使用支持向量机对各个区域的特征分别进行分类。R-CNN的过程如下:

R-CNN示意图

这样就能得到一个检测的结果了。但是Slelective Search得到的候选区域并不一定和目标物体的真实边界相吻合,因此R-CNN提出对物体的边界框做进一步的调整,使用一个线性回归器来预测一个候选区域中物体的真实边界。该回归器的输入就是候选区域的特征,而输出是边界框的坐标。

R-CNN的效果很不错,比VOC 2012的最好的结果提高了30%的准确度。但是问题就是太慢,主要有三方面原因:1,候选区域的生成是一个耗时的过程;2,对候选区域特征提取需要在单张图像上使用AlexNet 2000多次; 3, 特征提取、图像分类、边框回归是三个独立的步骤,要分别进行训练,测试过程中的效率也较低。


2, Fast R-CNN

为了解决R-CNN中效率低的问题,Fast R-CNN想,一张图像上要使用AlexNet 2000多次来分别得到各个区域的特征,但很多区域都是重合的,可否避免这些重复计算,只在一张图像上使用一次AlexNet,然后再得到不同区域的特征呢?

于是Fast R-CNN提出了一个ROI Pooling的方法,先对输入图像使用一次CNN前向计算,得到整个图像的特征图,再在这个特征图中分别取提取各个候选区域的特征。由于候选区域的大小不一样,而对应的特征需要要具有固定的大小,因此该方法对各个候选区域分别使用POI Pooling, 其做法是:假设第  个候选区域ROI的大小为, 要使输出的大小为,那么就将该ROI分成 个格子,每一个格子的大小为, 然后对每一格子使用max-pooling得到大小为的特征图像。

Fast R-CNN示意图, 将每个候选区域分成h x w大小的格子做pooling

Fast R-CNN的第二点创意是把之前独立的三个步骤(特征提取、分类和回归)放到一个统一的网络结构中。该网络结构同时预测一个候选区域的物体类别和该物体的边界框,使用两个全连接的输出层分别进行类别预测和边框预测(如下图所示),将这两个任务进行同时训练,利用一个联合代价函数:

公式中的两项分别是classification loss 和regression loss。

特征提取-分类-回归联合网络

使用VGG16作为特征提取网络,Fast R-CNN在测试图像上的处理时间比R-CNN快了200多倍,并且精度更高。如果不考虑生成候选区域的时间,可以达到实时检测。生成候选区域的Selective Search算法处理一张图像大概需要2s的时间,因此成为该方法的一个瓶颈。

3, Faster R-CNN

上面两种方法都依赖于Selective Search生成候选区域,十分耗时。考虑到CNN如此强大,Faster R-CNN提出使用CNN来得到候选区域。假设有两个卷积神经网络,一个是区域生成网络,得到图像中的各个候选区域,另一个是候选区域的分类和边框回归网路。这两个网络的前几层都要计算卷积,如果让它们在这几层共享参数,只是在末尾的几层分别实现各自的特定的目标任务,那么对一幅图像只需用这几个共享的卷积层进行一次前向卷积计算,就能同时得到候选区域和各候选区域的类别及边框。

Faster R-CNN:在卷积后的特征图上使用Region Proposal Network

候选区域生成网络(Region Proposal Network, RPN)如下,先通过对输入图像的数层卷积得到一个特征图像,然后在特征图像上生成候选区域。它使用一个的滑动窗口,将局部的特征图像转换成一个低维特征, 预测k个的区域(cls层,2k个输出)是否为候选区域和对应的k个边框(reg层,4k个输出)。这里的K个区域被称为锚(anchor), 对应着与滑动窗口具有相同的中心的不同大小和不同长宽比的矩形框。假设卷积后的特征图像大小为,那么一共有个锚。这种特征提取和候选区域生成的方法具有位移不变性。

对一个滑动窗口中的anchor预测候选区域

使用RPN得到候选区域后,对候选区域的分类和边框回归仍然使用Fast R-CNN。这两个网络使用共同的卷积层。 由于Fast R-CNN的训练过程中需要使用固定的候选区域生成方法,不能同时对RPN和Fast R-CNN使用反向传播算法进行训练。该文章使用了四个步骤完成训练过程:1,单独训练RPN;2,使用步骤中1得到的区域生成方法单独训练Fast R-CNN; 3, 使用步骤2得到的网络作为初始网络训练RPN;4, 再次训练Fast R-CNN, 微调参数。

Faster R-CNN的精度和Fast R-CNN差不多,但是训练时间和测试时间都缩短了10倍。

4, Mask R-CNN

Faster R-CNN 在物体检测中已达到非常好的性能,Mask R-CNN在此基础上更进一步:得到像素级别的检测结果。 对每一个目标物体,不仅给出其边界框,并且对边界框内的各个像素是否属于该物体进行标记。

Mask R-CNN: 像素级别的目标检测

Mask R-CNN利用Faster R-CNN中已有的网络结构,再添加了一个头部分支,使用FCN对每个区域做二值分割。

Mask R-CNN还提出了两个小的改进使分割的结果更好。第一,对各个区域分割时,解除不同类之间的耦合。假设有K类物体,一般的分割方法直接预测一个有K个通道的输出,其中每个通道代表对应的类别。而Mask R-CNN预测K个有2个通道(前景和背景)的输出,这样各个类别的预测是独立的。第二,Faster R-CNN中使用的ROI Pooling将每个ROI映射到一个固定的大小,在pooling时有取整操作,这样会导致pooling 前后的特征图没有连续的对应关系。例如,如果pooling前的大小是112x112,pooling之后的大小是7x7,对于pooling之前的一个像素,其横坐标位置是 X ,那么pooling后对应的横坐标是 x/16 , 再取整就得到了其在7x7格子中的位置。由于取整操作会带来误差,Faster R-CNN不取整,使用双线性插值得到 X/16处的真实数值,该方法称作ROIAlign.

上述几种方法的代码:

R-CNN

  • Caffe版本:rbgirshick/rcnn

Fast R-CNN

  • Caffe版本: rbgirshick/fast-rcnn

Faster R-CNN

  • Caffe版本: https://github.com/rbgirshick/py-faster-rcnn

  • PyTorch版本: https://github.com/longcw/faster_rcnn_pytorch

  • MatLab版本: https://github.com/ShaoqingRen/faster_rcnn

Mask R-CNN

  • PyTorch版本: https://github.com/felixgwu/mask_rcnn_pytorch

  • TensorFlow版本: https://github.com/CharlesShang/FastMaskRCNN

注:R-CNN, Fast R-CNN和Faster R-CNN已在之前的文章总结过,这里添上Mask R-CNN。更多目标检测的方法在《深度卷积神经网络在目标检测中的进展》这篇文章中。另外,《A Brief History of CNNs in Image Segmentation: From R-CNN to Mask R-CNN》这篇文章也做了详细的介绍。


原文:https://zhuanlan.zhihu.com/p/30967656?group_id=913258673741639680


热门文章推荐

周志华:实验表明gcForest是最好的非深度神经网络方法

黑科技|Adobe出图象技术神器!视频也可以PS了!!

史上第一个被授予公民身份的机器人索菲亚和人对答如流!

浙大90后女黑客在GeekPwn2017上秒破人脸识别系统!

周志华点评AlphaGo Zero:这6大特点非常值得注意!

汤晓鸥教授:人工智能让天下没有难吹的牛!

英伟达发布全球首款人工智能全自动驾驶平台

未来 3~5 年内,哪个方向的机器学习人才最紧缺?

中科院步态识别技术:不看脸 50米内在人群中认出你!

厉害|黄仁勋狂怼CPU:摩尔定律已死 未来属于GPU!

登录查看更多
17

相关内容

R-CNN的全称是Region-CNN,它可以说是是第一个成功将深度学习应用到目标检测上的算法。传统的目标检测方法大多以图像识别为基础。 一般可以在图片上使用穷举法选出所所有物体可能出现的区域框,对这些区域框提取特征并使用图像识别方法分类, 得到所有分类成功的区域后,通过非极大值抑制(Non-maximumsuppression)输出结果。
3D目标检测进展综述
专知会员服务
187+阅读 · 2020年4月24日
专知会员服务
31+阅读 · 2020年4月24日
专知会员服务
155+阅读 · 2020年4月21日
CVPR2020 | 商汤-港中文等提出PV-RCNN:3D目标检测新网络
专知会员服务
43+阅读 · 2020年4月17日
资源丨用PyTorch实现Mask R-CNN
量子位
6+阅读 · 2018年7月23日
一文读懂目标检测:R-CNN、Fast R-CNN、Faster R-CNN、YOLO、SSD
七月在线实验室
11+阅读 · 2018年7月18日
Faster R-CNN
数据挖掘入门与实战
4+阅读 · 2018年4月20日
Fast R-CNN
数据挖掘入门与实战
3+阅读 · 2018年4月20日
YOLO升级到v3版,检测速度比R-CNN快1000倍
人工智能头条
10+阅读 · 2018年3月28日
Mask R-CNN 论文笔记
统计学习与视觉计算组
11+阅读 · 2018年3月22日
从R-CNN到Mask R-CNN
机器学习研究会
25+阅读 · 2017年11月13日
Mesh R-CNN
Arxiv
4+阅读 · 2019年6月6日
S4Net: Single Stage Salient-Instance Segmentation
Arxiv
10+阅读 · 2019年4月10日
Auto-Context R-CNN
Arxiv
4+阅读 · 2018年7月8日
Arxiv
11+阅读 · 2018年4月8日
Arxiv
7+阅读 · 2018年1月24日
Arxiv
4+阅读 · 2017年11月14日
Arxiv
4+阅读 · 2016年12月29日
VIP会员
相关资讯
资源丨用PyTorch实现Mask R-CNN
量子位
6+阅读 · 2018年7月23日
一文读懂目标检测:R-CNN、Fast R-CNN、Faster R-CNN、YOLO、SSD
七月在线实验室
11+阅读 · 2018年7月18日
Faster R-CNN
数据挖掘入门与实战
4+阅读 · 2018年4月20日
Fast R-CNN
数据挖掘入门与实战
3+阅读 · 2018年4月20日
YOLO升级到v3版,检测速度比R-CNN快1000倍
人工智能头条
10+阅读 · 2018年3月28日
Mask R-CNN 论文笔记
统计学习与视觉计算组
11+阅读 · 2018年3月22日
从R-CNN到Mask R-CNN
机器学习研究会
25+阅读 · 2017年11月13日
相关论文
Mesh R-CNN
Arxiv
4+阅读 · 2019年6月6日
S4Net: Single Stage Salient-Instance Segmentation
Arxiv
10+阅读 · 2019年4月10日
Auto-Context R-CNN
Arxiv
4+阅读 · 2018年7月8日
Arxiv
11+阅读 · 2018年4月8日
Arxiv
7+阅读 · 2018年1月24日
Arxiv
4+阅读 · 2017年11月14日
Arxiv
4+阅读 · 2016年12月29日
Top
微信扫码咨询专知VIP会员