大话目标检测经典模型(RCNN、Fast RCNN、Faster RCNN)

目标检测是深度学习的一个重要应用,就是在图片中要将里面的物体识别出来,并标出物体的位置,通常须要通过两个步骤:
一、分类,识别物体是什么
 
二、定位,找出物体在哪里
 
除了对单个物体进行检测,还要能支持对多个物体进行检测,以下图所示:
 
这个问题并非那么容易解决,因为物体的尺寸变化范围很大、摆放角度多变、姿态不定,并且物体有不少种类别,能够在图片中出现多种物体、出如今任意位置。所以,目标检测是一个比较复杂的问题。
最直接的方法即是构建一个深度神经网络,将图像和标注位置做为样本输入,而后通过CNN网络,再经过一个分类头(Classification head)的全链接层识别是什么物体,经过一个回归头(Regression head)的全链接层回归计算位置,以下图所示:
 
但“回归”很差作,计算量太大、收敛时间太长,应该想办法转为“分类”,这时容易想到套框的思路,即取不一样大小的“框”,让框出如今不一样的位置,计算出这个框的得分,而后取得分最高的那个框做为预测结果,以下图所示:
 
根据上面比较出来的得分高低,选择了右下角的黑框做为目标位置的预测。算法

但问题是:框要取多大才合适?过小,物体识别不完整;太大,识别结果多了不少其它信息。那怎么办?那就各类大小的框都取来计算吧。网络

以下图所示(要识别一只熊),用各类大小的框在图片中进行反复截取,输入到CNN中识别计算得分,最终肯定出目标类别和位置。
 
这种方法效率很低,实在太耗时了。那有没有高效的目标检测方法呢?框架

1、R-CNN 横空出世
R-CNN(Region CNN,区域卷积神经网络)能够说是利用深度学习进行目标检测的开山之做,做者Ross Girshick屡次在PASCAL VOC的目标检测竞赛中折桂,2010年更是带领团队得到了终身成就奖,现在就任于Facebook的人工智能实验室(FAIR)。分布式

R-CNN算法的流程以下
 
一、输入图像
二、每张图像生成1K~2K个候选区域
三、对每一个候选区域,使用深度网络提取特征(AlextNet、VGG等CNN均可以)
四、将特征送入每一类的SVM 分类器,判别是否属于该类
五、使用回归器精细修正候选框位置oop

下面展开进行介绍
一、生成候选区域
使用Selective Search(选择性搜索)方法对一张图像生成约2000-3000个候选区域,基本思路以下:
(1)使用一种过度割手段,将图像分割成小区域
(2)查看现有小区域,合并可能性最高的两个区域,重复直到整张图像合并成一个区域位置。优先合并如下区域:
- 颜色(颜色直方图)相近的
- 纹理(梯度直方图)相近的
- 合并后总面积小的
- 合并后,总面积在其BBOX中所占比例大的
在合并时须保证合并操做的尺度较为均匀,避免一个大区域陆续“吃掉”其它小区域,保证合并后形状规则。
(3)输出全部曾经存在过的区域,即所谓候选区域
二、特征提取
使用深度网络提取特征以前,首先把候选区域归一化成同一尺寸227×227。
使用CNN模型进行训练,例如AlexNet,通常会略做简化,以下图:
 
三、类别判断
对每一类目标,使用一个线性SVM二类分类器进行判别。输入为深度网络(如上图的AlexNet)输出的4096维特征,输出是否属于此类。
四、位置精修
目标检测的衡量标准是重叠面积:许多看似准确的检测结果,每每由于候选框不够准确,重叠面积很小,故须要一个位置精修步骤,对于每个类,训练一个线性回归模型去断定这个框是否框得完美,以下图:
 
R-CNN将深度学习引入检测领域后,一举将PASCAL VOC上的检测率从35.1%提高到53.7%。学习

2、Fast R-CNN大幅提速
继2014年的R-CNN推出以后,Ross Girshick在2015年推出Fast R-CNN,构思精巧,流程更为紧凑,大幅提高了目标检测的速度。
Fast R-CNN和R-CNN相比,训练时间从84小时减小到9.5小时,测试时间从47秒减小到0.32秒,而且在PASCAL VOC 2007上测试的准确率相差无几,约在66%-67%之间。
 
Fast R-CNN主要解决R-CNN的如下问题:
一、训练、测试时速度慢
R-CNN的一张图像内候选框之间存在大量重叠,提取特征操做冗余。而Fast R-CNN将整张图像归一化后直接送入深度网络,紧接着送入从这幅图像上提取出的候选区域。这些候选区域的前几层特征不须要再重复计算。
二、训练所需空间大
R-CNN中独立的分类器和回归器须要大量特征做为训练样本。Fast R-CNN把类别判断和位置精调统一用深度网络实现,再也不须要额外存储。测试

下面进行详细介绍
一、在特征提取阶段,经过CNN(如AlexNet)中的conv、pooling、relu等操做都不须要固定大小尺寸的输入,所以,在原始图片上执行这些操做后,输入图片尺寸不一样将会致使获得的feature map(特征图)尺寸也不一样,这样就不能直接接到一个全链接层进行分类。
在Fast R-CNN中,做者提出了一个叫作ROI Pooling的网络层,这个网络层能够把不一样大小的输入映射到一个固定尺度的特征向量。ROI Pooling层将每一个候选区域均匀分红M×N块,对每块进行max pooling。将特征图上大小不一的候选区域转变为大小统一的数据,送入下一层。这样虽然输入的图片尺寸不一样,获得的feature map(特征图)尺寸也不一样,可是能够加入这个神奇的ROI Pooling层,对每一个region都提取一个固定维度的特征表示,就可再经过正常的softmax进行类型识别。
大数据

二、在分类回归阶段,在R-CNN中,先生成候选框,而后再经过CNN提取特征,以后再用SVM分类,最后再作回归获得具体位置(bbox regression)。而在Fast R-CNN中,做者巧妙的把最后的bbox regression也放进了神经网络内部,与区域分类合并成为了一个multi-task模型,以下图所示:
 
实验代表,这两个任务可以共享卷积特征,而且相互促进。人工智能

Fast R-CNN很重要的一个贡献是成功地让人们看到了Region Proposal+CNN(候选区域+卷积神经网络)这一框架实时检测的但愿,原来多类检测真的能够在保证准确率的同时提高处理速度。spa

3、Faster R-CNN更快更强
继2014年推出R-CNN,2015年推出Fast R-CNN以后,目标检测界的领军人物Ross Girshick团队在2015年又推出一力做:Faster R-CNN,使简单网络目标检测速度达到17fps,在PASCAL VOC上准确率为59.9%,复杂网络达到5fps,准确率78.8%。
在Fast R-CNN还存在着瓶颈问题:Selective Search(选择性搜索)。要找出全部的候选框,这个也很是耗时。那咱们有没有一个更加高效的方法来求出这些候选框呢?
在Faster R-CNN中加入一个提取边缘的神经网络,也就说找候选框的工做也交给神经网络来作了。这样,目标检测的四个基本步骤(候选区域生成,特征提取,分类,位置精修)终于被统一到一个深度网络框架以内。以下图所示:
 
Faster R-CNN能够简单地当作是“区域生成网络+Fast R-CNN”的模型,用区域生成网络(Region Proposal Network,简称RPN)来代替Fast R-CNN中的Selective Search(选择性搜索)方法。
以下图
 
RPN以下图:
 
RPN的工做步骤以下:
- 在feature map(特征图)上滑动窗口
- 建一个神经网络用于物体分类+框位置的回归
- 滑动窗口的位置提供了物体的大致位置信息
- 框的回归提供了框更精确的位置

Faster R-CNN设计了提取候选区域的网络RPN,代替了费时的Selective Search(选择性搜索),使得检测速度大幅提高,下表对比了R-CNN、Fast R-CNN、Faster R-CNN的检测速度:

总结
R-CNN、Fast R-CNN、Faster R-CNN一路走来,基于深度学习目标检测的流程变得愈来愈精简、精度愈来愈高、速度也愈来愈快。基于region proposal(候选区域)的R-CNN系列目标检测方法是目标检测技术领域中的最主要分支之一。

 

墙裂建议

2014至2016年,Ross Girshick 等人发表了关于R-CNN、Fast R-CNN、Faster R-CNN的经典论文《Rich feature hierarchies for accurate object detection and semantic segmentation》、《Fast R-CNN》、《Faster R-CNN: Towards Real-Time ObjectDetection with Region Proposal Networks》,在这些论文中对目标检测的思想、原理、测试状况进行了详细介绍,建议阅读些篇论文以全面了解目标检测模型。

关注本人公众号“大数据与人工智能Lab”(BigdataAILab),而后回复“论文”关键字可在线阅读经典论文的内容

 

推荐相关阅读