参考文献

[1]Rich feature hierarchies for accurate object detection and semantic segmentation

[2]Fast R-CNN

[3]Faster R-CNN: towards real-time object detection with region proposal networks

1. 概述

图像分类,检测及分割是计算机视觉领域的三大任务。图像分类模型是将图像划分为单个类别,通常对应于图像中最突出的物体。但是现实世界的很多图片通常包含不只一个物体,此时如果使用图像分类模型为图像分配一个单一标签其实是非常粗糙的,并不准确。对于这样的情况,就需要目标检测模型,目标检测模型可以识别一张图片的多个物体,并可以定位出不同物体(给出边界框)。目标检测在很多场景有用,如无人驾驶,人脸识别等。

目标检测模型的主要性能指标是检测准确度和速度,对于准确度,目标检测还要考虑物体的定位准确性,而不单单是分类准确度。目前主流的目标检测算法主要是基于深度学习模型,其可以分成两大类:(1)two-stage检测算法,其将检测问题划分为两个阶段,首先产生候选区域,然后对候选区域进行校正和分类,这类算法的典型代表是基于候选区域的R-CNN系算法,如R-CNN,Fast R-CNN,Faster R-CNN等;(2)one-stage检测算法,其不需要region proposal阶段,直接产生物体的类别概率和位置坐标值,比较典型的算法如YOLO和SSD。本文是介绍的是第一类two-stage检测算法中的R-CNN系算法——R-CNN,Fast R-CNN,Faster R-CNN,在一般情况下,two-stage算法准确度要优于one-stage检测算法。

R-CNN,即Regions with CNN features,R-CNN是基于候选区域方法的目标检测算法系列开山之作,论文首次将CNN方法引入目标检测领域,大大提高了目标检测效果,也改变了目标检测领域的主要研究思路,之后的Fast R-CNN、Faster R-CNN都是以它为基础。

在R-CNN中,每个候选区域都要单独送入CNN模型计算特征向量,这是非常费时的,为了减少候选区域使用CNN模型提取特征向量所消耗的时间,Fast R-CNN只对整张图像全区域进行一次特征提取,Fast R-CNN最大的贡献是让人们看到了在Region Proposal+CNN这一框架下对目标进行实时检测的希望,也为后来的Faster R-CNN做下了铺垫。

对于Fast R-CNN,其仍然需要selective search方法来生产候选区域,这是非常费时的。为了解决这个问题,Faster R-CNN模型引入了RPN (Region Proposal Network)直接产生候选区域。Faster R-CNN可以看成是RPN和Fast R-CNN模型的组合体。

2. R-CNN

在R-CNN未提出之前,对象检测这一问题基本是遵循着“设计手工特征(Hand-crafted feature)+分类器”的思路,而且由于存在着区域搜索的步骤,所以可以认为是计算机用一个小的矩形窗口不断在图像上滑动、缩放,然后用分类器预测当前滑动窗口所在区域是否存在一个感兴趣的对象。R-CNN利用图片经过CNN模型得到的特征向量代替传统手工计算特征,对目标检测能得到更好的结果。

R-CNN目标检测系统由三个模块组成。 第一个模块生成类别独立候选区域。这些候选区域定义了我们的检测器可用的候选边界框集合。第二个模块是从各个区域提取固定长度特征向量的大型卷积神经网络。 第三个模块是一组类别特定的线性SVM分类器。

对于一张图片,R-CNN基于selective search方法大约生成2000个候选区域,selective search方法是一种启发式搜索算法。它先通过简单的区域划分算法将图片划分成很多小区域,然后通过层级分组方法按照一定相似度合并它们,最后的剩下的就是候选区域,它们可能包含一个物体。生成的每个候选区域被修正成固定大小(227×227)并送入一个CNN模型中,最后得到一个4096维的特征向量。然后这个特征向量被送入一个多类别SVM分类器中,预测出候选区域中所含物体的属于每个类的概率值。每个类别训练一个SVM分类器,从特征向量中推断其属于该类别的概率大小。R-CNN最后又训练了一个边界框回归模型,使用回归模型精细修正候选框位置,提升定位的准确性。

R-CNN网络对比传统的目标识别算法把检测问题转化为了分类问题,采用CNN模型进行特征提取,效果要比传统的手工提取特征方法更好。但R-CNN网络中,一张图经由selective search算法提取约2000个候选区域,每个候选区域都要单独送入CNN模型计算特征向量,这个操作是非常费时的。R-CNN网络训练过程分为提取候选区域、提取CNN特征、SVM分类和Bounding-box 回归等步骤,过于繁琐。R-CNN模型要求输入CNN网络进行提取特征的候选区域是固定尺寸,但其实像AlexNet CNN等网络在提取特征过程中对图像的大小并无要求,只是在提取完特征进行全连接操作的时候才需要固定特征尺寸,这部分也可以进行优化。

3. Fast R-CNN

针对R-CNN网络从候选区域提取特征向量耗时的问题,Fast R-CNN规避了R-CNN中冗余的特征提取操作,只对整张图像全区域进行一次特征提取,用RoI pooling层取代最后一层max pooling层,对于每个候选区域, RoI pooling层可以从CNN特征图中得到一个固定长和宽的特征图(长和宽是超参数,论文中选用的尺寸为7×7),RoI pooling的原理很简单,其根据候选区域按比例从CNN特征图中找到对应的特征区域,然后将其分割成几个子区域(根据要输出的特征图的大小),然后在每个子区域应用max pooling,从而得到固定大小的特征图。Fast R-CNN网络使用SVD对全连接层进行分解,使用了两个不同的全连接层并行操作,可同时输出分类结果和窗口回归结果,减少了计算复杂度,加快检测速度,实现除特征提取阶段外端到端的训练模式,所有的特征都暂存在显存中,不需要额外的磁盘空间。

对Fast R-CNN网络输入一张任意大小的图片,基于selective search方法大约生成2000个候选区域,将图片输入CNN网络,经过若干卷积层与池化层,得到特征图,根据原图中候选区域到特征图映射关系,在特征图中找到每个候选区域对应的特征框,并在RoI池化层中将每个特征框池化到H×W(论文中采用的是7×7)的尺寸,H×W大小的特征框经过全连接层得到固定大小的特征向量,所得到的特征向量再经由SVD分解实现的不同全连接层并行操作,分别得到两个输出向量:一个是softmax的分类得分,一个是Bounding-box窗口回归,利用窗口得分分别对每一类物体进行非极大值抑制剔除重叠的候选区域,最终得到每个类别中回归修正后的得分最高的窗口。

Fast R-CNN相比于R-CNN网络训练速度得到了提高,准确度也略有提升,但其中采用selective search算法提取候选区域,占用了模型大量时间,(selective search算法候选区域提取需要2~3s,而提特征分类只需要0.32s),这还是无法满足目标检测在实时应用中的需求,而且Fast R-CNN网络并没有实现真正意义上的端到端训练模式。

4. Faster R-CNN

针对Fast R-CNN,使用selective search方法来生产候选区域,非常费时的问题。Faster R-CNN模型引入了区域生成网络RPN (Region Proposal Network),直接在特征图中提取候选区域,将特征提取,候选区域提取,Bounding-box窗口回归,分类都整合在了一个网络中,实现了端到端的检测模式,虽然训练阶段仍然要分多步,但是检测阶段非常方便快捷。Faster R-CNN可以看成是RPN和Fast R-CNN模型的组合体,RPN的主要思想是通过对应关系把特征图的点映射回原图,在每一个对应的原图设计不同的固定尺度窗口,根据该窗口与真实值的IOU给它正负标签,让它学习里面是否有目标。

对Fast R-CNN网络输入一张任意大小的图片,通过卷积和池化得到特征图。然后在这个特征图上采用一个N×N(文中是3×3)的卷积核,把每个卷积映射位置编码为一个短的(例如256维)特征向量,对于每个位置映射回原图的感受野的中心点当成一个基准点,然后围绕这个基准点选取k个不同大小的候选区域。输出候选区域的分类得分和回归边界。对于分类层,其输出大小是2k,表示各个候选区域包含物体或者是背景的概率值,而回归层输出4k个坐标值,表示各个候选区域的位置。对于每个滑窗位置,这两个全连接层是共享的。RPN采用卷积层来实现:首先是一个n×n卷积得到低维特征,然后是两个1×1的卷积,分别用于分类与回归。

Fast R-CNN抛弃了传统的滑动窗口和基于selective search的方法生成候选区域,直接使用RPN网络,能极大提升候选区域的生成速度,使得利用CNN在线对目标进行识别成为可能。

5. 数据集

目标检测常用的数据集包括PASCAL VOC,ImageNet,MS COCO等数据集,这些数据集用于研究者测试算法性能或者用于竞赛。目标检测的性能指标既要考虑检测物体位置的准确性也要考虑预测类别的准确性。

PASCAL VOC(The PASCAL Visual Object Classification)是目标检测,分类,分割等领域一个有名的数据集。从2005到2012年,共举办了8个挑战赛。PASCAL VOC包含约10,000张图片用于训练和验证。但是,PASCAL VOC数据集仅包含20个类别,因此其被看成目标检测问题的一个基准数据集。

ImageNet在2013年给出的包含边界框的目标检测数据集。训练数据集包含500,000张图片,包含200类物体。由于数据集太大,训练所需计算量很大,因而很少使用。同时,由于类别数也比较多,目标检测的难度也相当大。

另外一个有名的数据集是Microsoft公司建立的MS COCO(Common Objects in COntext)数据集。这个数据集用于多种竞赛:图像标题生成,目标检测,关键点检测和物体分割。对于目标检测任务,COCO共包含80个类别,每年大赛的训练和验证数据集包含超过120,000个图片,超过40,000个测试图片。测试集最近被划分为两类,一类是test-dev数据集用于研究者,一类是test-challenge数据集用于竞赛者。测试集的标签数据没有公开,以避免在测试集上过拟合。在COCO 2017 Detection Challenge中,旷视科技团队凭借提出的Light-Head R-CNN模型夺得冠军(AP为0.526 ),看来还是two-stage算法准确度更胜一筹。

6. 性能指标

目标检测问题同时是一个回归和分类问题。首先,为了评估定位精度,需要计算IoU(Intersection over Union,介于0到1之间),其表示预测框与真实框之间的重叠程度。IoU越高,预测框的位置越准确。因而,在评估预测框时,通常会设置一个IoU阈值(如0.5),只有当预测框与真实框的IoU值大于这个阈值时,该预测框才被认定为真阳性(True Positive, TP),反之就是假阳性(False Positive,FP)。

对于二分类,AP(Average Precision)是一个重要的指标,这是信息检索中的一个概念,基于precision-recall曲线计算出来。对于目标检测,首先要单独计算各个类别的AP值,这是评估检测效果的重要指标。取各个类别的AP的平均值,就得到一个综合指标mAP(Mean Average Precision),mAP指标可以避免某些类别比较极端化而弱化其它类别的性能这个问题。

除了检测准确度,目标检测算法的另外一个重要性能指标是速度,只有速度快,才能实现实时检测,这对一些应用场景极其重要。评估速度的常用指标是每秒帧率(Frame Per Second,FPS),即每秒内可以处理的图片数量。当然要对比FPS,你需要在同一硬件上进行。另外也可以使用处理一张图片所需时间来评估检测速度,时间越短,速度越快。

7. 结果

R-CNN模型在2012 PASCAL VOC数据集的mAP为62.4%(比同年的第二名高出了22%),在2013 ImageNet上的mAP为31.4%(比同年的第二名高出7.1%)。

Fast R-CNN模型在2007 PASCAL VOC测试集上的mAp为70%,在2010 PASCAL VOC测试集上的mAP为68.8%,而在2012 PASCAL VOC测试集上的mAP为68.4%,准确度相比R-CNN略有提升,但模型最大的贡献在于处理速度的提升。

Faster R-CNN模型在 2007 PASCAL VOC测试集上的mAP为78.8% ,而在2012 PASCAL VOC测试集上的mAP为75.9%。论文中还在 COCO数据集上进行了测试。Faster R-CNN中的某个模型可以比采用selective search方法的Fast R-CNN模型快34倍。可以看到,采用了RPN之后,无论是准确度还是速度,Faster R-CNN模型均有很大的提升。

8. 总结

本文介绍了R-CNN, Fast R-CNN, Faster R-CNN三种基于深度学习的目标检测算法,利用深度卷积神经网络的目标检测算法一经提出将PASCAL VOC测试集上的mAP从34.3%直接提升到了66%。

R-CNN提出了Region Proposal+CNN这一框架,在PASCAL VOC挑战赛上取得了不错的成绩。Fast R-CNN在R-CNN的基础上用RoI pooling层取代最后一层max pooling层,使得输入图片尺寸大小没有限制,并使用SVD分解让分类和窗口回归在全连接层实现并行操作,减少了计算复杂度,加快检测速度。Faster R-CNN在Fast R-CNN的基础上引入RPN,将特征提取,候选区域提取,窗口回归,分类都整合在了一个网络中,真正意义上的实现了端到端的检测模式,进一步加快了模型的检测速度。

基于候选区域的深度学习目标检测算法R-CNN,Fast R-CNN,Faster R-CNN的更多相关文章

  1. 深度学习 目标检测算法 SSD 论文简介

    深度学习 目标检测算法 SSD 论文简介 一.论文简介: ECCV-2016 Paper:https://arxiv.org/pdf/1512.02325v5.pdf  Slides:http://w ...

  2. 深度学习目标检测:RCNN,Fast,Faster,YOLO,SSD比较

    转载出处:http://blog.csdn.net/ikerpeng/article/details/54316814 知乎的图可以放大,更清晰,链接:https://www.zhihu.com/qu ...

  3. 论文学习-深度学习目标检测2014至201901综述-Deep Learning for Generic Object Detection A Survey

    目录 写在前面 目标检测任务与挑战 目标检测方法汇总 基础子问题 基于DCNN的特征表示 主干网络(network backbone) Methods For Improving Object Rep ...

  4. zz深度学习目标检测2014至201901综述

    论文学习-深度学习目标检测2014至201901综述-Deep Learning for Generic Object Detection A Survey  发表于 2019-02-14 |  更新 ...

  5. (转)深度学习目标检测指标mAP

    深度学习目标检测指标mAP https://github.com/rafaelpadilla/Object-Detection-Metrics 参考上面github链接中的readme,有详细描述

  6. 深度剖析目标检测算法YOLOV4

    深度剖析目标检测算法YOLOV4 目录 简述 yolo 的发展历程 介绍 yolov3 算法原理 介绍 yolov4 算法原理(相比于 yolov3,有哪些改进点) YOLOV4 源代码日志解读 yo ...

  7. [OpenCV]基于特征匹配的实时平面目标检测算法

    一直想基于传统图像匹配方式做一个融合Demo,也算是对上个阶段学习的一个总结. 由此,便采购了一个摄像头,在此基础上做了实时检测平面目标的特征匹配算法. 代码如下: # coding: utf-8 ' ...

  8. 深度学习目标检测综述推荐之 Xiaogang Wang ISBA 2015

    一.INTRODUCTION部分 (1)先根据时间轴讲了历史 (2)常见的基础模型 (3)讲了深度学习的优势 那就是feature learning,而不用人工划分的feature engineeri ...

  9. 目标检测之RCNN,fast RCNN,faster RCNN

    RCNN: 候选区生成(Selective Search). 分割成2000左右的候选小区域 合并规则:颜色.纹理相近,尺度均匀,合并后形状规则 特征提取. 归一候选区尺寸为227×227,归一方法. ...

随机推荐

  1. Bluetooth Profile for iPhone from the functional perspectives

    Classic Bluetooth Profile for iPhone from the functional perspectives Function Description BT Profil ...

  2. CDN,内容分发网络。

    CDN,内容分发网络. 就近获取内容,提高用户访问网站响应速度. 广州的用户,访问广州的节点.北京的用户,访问北京的节点. 图片CDN,提高图片访问,方便数据迁移. DNS,域名系统.处理域名和IP地 ...

  3. 机器学习三剑客之Numpy

      Numpy NumPy是Python语言的一个扩充程序库.支持高级大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库.Numpy内部解除了Python的PIL(全局解释器锁),运算效 ...

  4. SDNLAB技术分享(四):利用ODL下发流表创建VxLAN网络

    邓晓涛,当前就职于江苏省未来网络创新研究院,是CDN团队的一名研发人员,主要从事SDN相关的研发相关工作.曾就职于三星电子于先行解决方案研发组任高级工程师.思科系统于云协作应用技术部(CCATG)任工 ...

  5. 一个渣渣tomcat的学习成果.

    //////////////////////////////////////写在前面////////////////////////////////////// 时隔几个月,恢复更新了,之前由于一些私 ...

  6. ubuntu上安装nodejs

    目录: 1. nodejs的下载 2. 解压和安装 3. 安装过程中出现过的问题 4. 总结 1. nodejs的下载 我刚开始没有linux系统,于是安装了nodejs的windows版本进行学习. ...

  7. 一次应用js文件时遇到的怪异现象

    使用thinkphp开发的网页中, 应用js文件 <script  language="JavaScript"  src="__JS__/printer/jquer ...

  8. sikiA计划问题记录

    1.有时候在场景中创建光源会有一条虚线 解决方法:禁用锯齿 edit - project setting - quality - anti aliasing

  9. 实现继承+接口继承+虚方法+隐藏方法+this/base+抽象类+密封类/方法+修饰符

    概念: 在上一节课中学习了如何定义类,用类当做模板来声明我们的数据. 很多类中有相似的数据,比如在一个游戏中,有Boss类,小怪类Enemy,这些类他们有很多相同的属性,也有不同的,这个时候我们可以使 ...

  10. ubuntu更改启动顺序

    在ubuntu中修改启动配置. 启动相关grub2主要包含下面三个文件:1.   /boot/grub/grub.cfg 文件    2.   /etc/grub.d/ 文件夹   3.   /etc ...