参考文献算法
[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作下了铺垫。spa
对于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,将特征提取,候选区域提取,窗口回归,分类都整合在了一个网络中,真正意义上的实现了端到端的检测模式,进一步加快了模型的检测速度。