目前可以将现有的基于深度学习的目标检测与识别算法大致分为以下三大类:
- 基于区域建议的目标检测与识别算法,如R-CNN, Fast-R-CNN, Faster-R-CNN;
- 基于回归的目标检测与识别算法,如YOLO, SSD;
- 基于搜索的目标检测与识别算法,如基于视觉注意的AttentionNet,基于强化学习的算法
一、基于区域建议的目标检测与识别算法
这类算法的主要步骤是:
- 首先使用选择性搜索算法(Selective Search,SS)、Bing、EdgeBoxes这些目标候选区域生成算法生成一系列候选目标区域;
- 然后通过深度神经网络提取目标候选区域的特征;
- 最后用这些特征进行分类,以及目标真实边界的回归;
目前此类算法比较知名的有R-CNN, Fast-R-CNN, Faster-R-CNN三种方法。从顺序上,Fast-R-CNN针对R-CNN的不足做了改进,而Faster-R-CNN对Fast-R-CNN做了改进,三者在非实时水平上,精度和速度明显改善。
1、R-CNN
R-CNN,Fast-R-CNN的作者同为Ross Girshick。
R-CNN的工作流程:
⦁ 首先用选择性搜索算法(Selective Search,SS)提取1k-2k个候选区域
⦁ 使用深度卷积神经网络提取每一个候选区的深度特征
⦁ 训练SVM分类器来对这些特征进行分类
⦁ 最后通过边界回归算法重新定位目标边界框
Selective Search对算法的贡献:此前,在一些传统的目标识别算法中,使用的是滑动窗口进行候选区提取,这样会导致在一章图片中会产生高达百万个候选区,而在R-CNN中,使用选择性搜索算法,每次提取的候选区大概只有1k到2k可能包含物体的区域。
使用深度CNN提取建议区域的特征时,需要注意的是,有些网络对输入图片的大小有要求,如Alex-net要求输入的图片尺寸为227像素*227像素的大小。因此,由SS提取得到的候选区的尺寸大小不一,需要在输入神经网络之前调整大小。通过深度CNN提取特征后,每个目标候选区域相应得到一个4096维的特征向量。
以上得到了每个候选区域的特征向量,接下来使用SVM分类器对特征进行分类。
相对与传统的方法,R-CNN的主要优势有:
⦁ 使用深度学习方法提取深度特征,而不是使用人为设计,因此提高了任务精度。
⦁ 采用区域建议提取可能目标,而不是使用滑动窗口的方式取检测目标,这样减少了不必要的候选区。
⦁ 加入了边界回归的策略来进一步提高检测精度
不足之处:
虽然相对于传统的目标检测与识别算法,R-CNN在公共数据集上的准确率有着突破性的进展,如在PASCAL VOC的准确率从35.1%提升到了53.7%,但是R-CNN也有一定的局限性。目标候选区的重叠使得CNN特征提取的计算中有着很大的冗余,着很大程度上限制了检测速度。针对这个缺点将R-CNN升级为Fast-R-CNN。
R-CNN主要存在以下三个不足之处:
- 整个模型分为多个步骤,包括Selective Search提取候选区,训练CNN提取深度特征,训练SVM进行分类没训练边框回归器。
- 测试时间长,由于每张图片要处理大量的目标候选框
- 训练时所需空间大,花费时间多,R-CNN训练时处理每一张图片全部resize到227*227分辨率的图像候选框(为了避免图像扭曲严重,中间可以采取一些技巧减少图像扭曲),并输入网络中,这使得处理每一章图片所使用的空间大,同时整个模型需要训练CNN, SVM分类器,以及目标边框回归器,从而导致训练时间花费很多。
2、Fast-R-CNN
(待续)