计算机视觉(十一):目标检测算法:R-CNN、Fast R-CNN、Faster R-CNN

1 - 引言

在计算机视觉的发展中,我们的任务也越来越复杂,对于一张图像,我们不仅要实现对于目标的分类问题,还要准确的定位目标所在图片的位置,这个就是目标检测技术。
计算机视觉(十一):目标检测算法:R-CNN、Fast R-CNN、Faster R-CNN_第1张图片

在基于深度学习的目标检测技术中,就不得不提到最著名的三个算法了

  • R-CNN
  • Fast R-CNN
  • Faster R-CNN

下面就让我们来一起学习一下这三个算法

2 R-CNN

R-CNN(Region CNN,区域卷积神经网络)可以说是利用深度学习进行目标检测的开山之作,作者Ross Girshick多次在PASCAL VOC的目标检测竞赛中折桂,2010年更是带领团队获得了终身成就奖,如今就职于Facebook的人工智能实验室(FAIR)。

对于目标检测,一开始的思路是构建一个深度神经网络,在最后一个卷积层的时候通过两个不同的全连接层来分别解决分类问题和定位问题。

计算机视觉(十一):目标检测算法:R-CNN、Fast R-CNN、Faster R-CNN_第2张图片
但是实现发现使用回归的方法解决定位问题计算量太大,并且收敛时间也太长,因此RCNN的作者就想到了将回归问题转化为分类问题,即取不同大小的“框”,让框出现在不同的位置,计算出这个框的得分,然后取得分最高的那个框作为预测结果,如下图所示:
计算机视觉(十一):目标检测算法:R-CNN、Fast R-CNN、Faster R-CNN_第3张图片
最后根据评分的高低来选择目标的对应位置,但是问题又来了,不同的目标大小也不相同,到底应该选用多大的框才算合适呢?

R-CNN感觉比较暴力吧,那就使用各种大小的候选框(约1K~2K个)在图片中计算最后的得分
计算机视觉(十一):目标检测算法:R-CNN、Fast R-CNN、Faster R-CNN_第4张图片
当然,这几千个候选框也不是乱选的,针对怎么选择合适的候选框也有许多算法来实现提高速度

计算机视觉(十一):目标检测算法:R-CNN、Fast R-CNN、Faster R-CNN_第5张图片
根据以上的思路,总结一下R-CNN的实现流程

计算机视觉(十一):目标检测算法:R-CNN、Fast R-CNN、Faster R-CNN_第6张图片
1、输入图像
2、每张图像生成1K~2K个候选区域
3、对每个候选区域,使用深度网络提取特征(AlextNet、VGG等CNN都可以)
4、将特征送入每一类的SVM 分类器,判别是否属于该类
5、使用回归器精细修正候选框位置

下面展开进行介绍
1、生成候选区域
使用Selective Search(选择性搜索)方法对一张图像生成约2000-3000个候选区域,基本思路如下:
(1)使用一种过分割手段,将图像分割成小区域
(2)查看现有小区域,合并可能性最高的两个区域,重复直到整张图像合并成一个区域位置。优先合并以下区域:

  • 颜色(颜色直方图)相近的
  • 纹理(梯度直方图)相近的
  • 合并后总面积小的
  • 合并后,总面积在其BBOX中所占比例大的
    在合并时须保证合并操作的尺度较为均匀,避免一个大区域陆续“吃掉”其它小区域,保证合并后形状规则。

(3)输出所有曾经存在过的区域,即所谓候选区域

2、特征提取
使用深度网络提取特征之前,首先把候选区域归一化成同一尺寸227×227。
使用CNN模型进行训练,例如AlexNet,一般会略作简化,如下图:
计算机视觉(十一):目标检测算法:R-CNN、Fast R-CNN、Faster R-CNN_第7张图片
3、类别判断
对每一类目标,使用一个线性SVM二类分类器进行判别。输入为深度网络(如上图的AlexNet)输出的4096维特征,输出是否属于此类。
4、位置精修
目标检测的衡量标准是重叠面积:许多看似准确的检测结果,往往因为候选框不够准确,重叠面积很小,故需要一个位置精修步骤,对于每一个类,训练一个线性回归模型去判定这个框是否框得完美,如下图:

计算机视觉(十一):目标检测算法:R-CNN、Fast R-CNN、Faster R-CNN_第8张图片
通过这样的流程,R-CNN就可以实现目标检测的任务,可以说是里程碑式的算法了。

但是,通过选取大量的候选框来实现,训练速度会非常的慢,所消耗浪费的空间也很大,RCNN在特征提取操作上还有许多可以改进的地方

因此,Fast R-CNN出现

3 - 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%之间。
计算机视觉(十一):目标检测算法:R-CNN、Fast R-CNN、Faster R-CNN_第9张图片
Fast R-CNN主要解决R-CNN的以下问题:
1、训练、测试时速度慢
R-CNN的一张图像内候选框之间存在大量重叠,提取特征操作冗余。而Fast R-CNN将整张图像归一化后直接送入深度网络,紧接着送入从这幅图像上提取出的候选区域。这些候选区域的前几层特征不需要再重复计算。
2、训练所需空间大
R-CNN中独立的分类器和回归器需要大量特征作为训练样本。Fast R-CNN把类别判断和位置精调统一用深度网络实现,不再需要额外存储。

那么Fast R-CNN 是如何加速的呢?首先我们要介绍一下SPP Net

3.1 - SPP Net (Spatial Pyramid Pooling)

SPP:Spatial Pyramid Pooling(空间金字塔池化)

因为在全连接层或者分类器的输入有需要有固定的尺寸,那么就必须要对候选框进行切割或者放缩来达到输入要求,但是在这个操作中就会使得图片的信息缺失或者变形,从而影响到图片的识别率

计算机视觉(十一):目标检测算法:R-CNN、Fast R-CNN、Faster R-CNN_第10张图片
而在卷积层和全连接层之间加入一个SPP层,可以达到输入数据是任意尺度,在SPP中调整大小以满足全连接层的输入
计算机视觉(十一):目标检测算法:R-CNN、Fast R-CNN、Faster R-CNN_第11张图片
并且SPP可以先对一整张图进行卷积得到特征图,然后再将算法提供的2000多个候选区域的位置记录下来,通过比例映射到整张图的feature map上提取出候选区域的特征图B,然后将B送入到金字塔池化层中,进行权重计算.。节省了大量的计算时间,比R-CNN有一百倍左右的提速。

根据这个思想的启发,Fast R-CNN 构建了一个单层的SPP Net,叫做ROI Pooling,大大的提升了训练速度

但是Fast R-CNN也存在着问题,那就是选择性搜索,要找出所有的候选框是非常耗时的,那么怎么快速的将候选框选择出来呢?

Faster R-CNN就提出了一个很新颖思路,再添加一个神经网络Region Proposal Network(RPN)。来找到候选框

4 - Faster R-CNN

继2014年推出R-CNN,2015年推出Fast R-CNN之后,目标检测界的领军人物Ross Girshick团队在2015年又推出一力作:Faster R-CNN,使简单网络目标检测速度达到17fps,在PASCAL VOC上准确率为59.9%,复杂网络达到5fps,准确率78.8%。

计算机视觉(十一):目标检测算法:R-CNN、Fast R-CNN、Faster R-CNN_第12张图片
那么我们就要介绍一下RPN

4.1 - RPN

RPN网络结构如下
计算机视觉(十一):目标检测算法:R-CNN、Fast R-CNN、Faster R-CNN_第13张图片
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_第14张图片

5 总结

R-CNN
  1. 在图像中确定约1000-2000个候选框 (使用选择性搜索)
  2. 每个候选框内图像块缩放至相同大小,并输入到CNN内进行特征提取
  3. 对候选框中提取出的特征,使用分类器判别是否属于一个特定类
  4. 对于属于某一特征的候选框,用回归器进一步调整其位置

Fast R-CNN
  1. 在图像中确定约1000-2000个候选框 (使用选择性搜索)
  2. 对整张图片输进CNN,得到feature map
  3. 找到每个候选框在feature map上的映射patch,将此patch作为每个候选框的卷积特征输入到SPP layer和之后的层
  4. 对候选框中提取出的特征,使用分类器判别是否属于一个特定类
  5. 对于属于某一特征的候选框,用回归器进一步调整其位置

Faster R-CNN
  1. 对整张图片输进CNN,得到feature map
  2. 卷积特征输入到RPN,得到候选框的特征信息
  3. 对候选框中提取出的特征,使用分类器判别是否属于一个特定类
  4. 对于属于某一特征的候选框,用回归器进一步调整其位置

你可能感兴趣的:(计算机视觉)