1 模型进化史
检测框架可分为两类:
- 两级式检测框架,包含一个用于区域提议的预处理步骤,使得整体流程是两级式的,如R-CNN系列
- 单级式检测框架,即无区域提议的框架,这是一种单独提出的方法,不会将检测提议分开,使得整个流程是单级式的,如YOLO系列
![](https://i-blog.csdnimg.cn/blog_migrate/40018bea0922e1f56b9c790fadc08afd.png)
2 传统的目标检测
2.1 三个阶段
- 区域选择利用不同尺寸的滑动窗口框住图中的某一部分作为候选区域。
- 特征提取:提取候选区域相关的视觉特征。比如人脸检测常用的Harr特征;行人检测常用的HOG特征等。由于目标的形态多样性,光照变化多样性,背景多样性等因素使得设计一个鲁棒的特征并不是那么容易,然而提取特征的好坏直接影响到分类的准确性。
- 分类器:利用分类器进行识别,比如常用的SVM模型。
2.2 经典方法—DPM
- 传统的目标检测中,多尺度形变部件模型DPM(Deformable Part Model)表现比较优秀,连续获得VOC(Visual Object Class)2007到2009的检测冠军。
- DPM把物体看成了多个组成的部件(比如人脸的鼻子、嘴巴等),用部件间的关系来描述物体,这个特性非常符合自然界很多物体的非刚体特征。
- DPM可以看做是HOG+SVM的扩展,很好的继承了两者的优点,在人脸检测、行人检测等任务上取得了不错的效果,但是DPM相对复杂,检测速度也较慢,从而也出现了很多改进的方法。
2.3 主要问题
- 基于滑动窗口的区域选择策略没有针对性,时间复杂度高,窗口冗余。
- 手工设计的特征对于多样性的变化鲁棒性差。
3 R-CNN
3.1 检测流程
- 用selective search(选择性搜索)算法在图像中提取2000个左右的侯选框
- 把所有候选框缩放(wrap)成固定大小(227×227),并进行归一化后输入CNN(AlexNet)网络,提取特征
- 将提取到的CNN特征,fc7特征用SVM来分类,conv5特征用线性回归来微调边框位置与大小,其中每个类别单独训练一个边框回归器
- 非极大值值抑制(NMS)来滤除IOU较大的区域
![](https://i-blog.csdnimg.cn/blog_migrate/779fa00fc27816f6d1004b6936da05ed.png)
3.2 模块划分
![](https://i-blog.csdnimg.cn/blog_migrate/f38eb9e2e1d86d868c1521f971cee524.png)
3.3 性能评价
- True Positive(TP):IOU ≥ \geq ≥ 0.5,即判断正确的样本
- False Positive(FP):IOU < < < 0.5,即判断错误的样本
- False Negative(FN):遗漏的GT区域
- 准确率(Precision):TP/(TP+FP),即算法找到的正样本的正确率(不考虑未找出的正样本)
- 召回率(Recall):TP/(TP+FN),即算法找回正样本的比例(不考虑识别错误的样本)
- mAP:所有类别的平均精度(AP)和除以类别数
3.4 问题
- 训练时间长(84h):Fine-tune(18h)+特征提取(63h)+SVM/Bbox训练(3h)
- 测试时间长:VGG一张图片耗时47s
- 占用磁盘空间大:卷积出来的特征数据还需要单独保存
4 SPP-Net
4.1 网络结构
![](https://i-blog.csdnimg.cn/blog_migrate/2964da122c429f152fea9465ebd75780.png)
4.2 主要贡献
- 结合空间金字塔池化(SPP)方法实现CNNs的对尺度输入
一般CNN后接全连接层或者分类器,他们都需要固定的输入尺寸,因此不得不对输入数据进行crop或者warp,而这些预处理会造成数据的丢失或几何的失真。SPP-Net将金字塔思想加入到CNN,替换掉conv5中pooling层,实现了数据的多尺度输入。在卷积层和全连接层之间加入了SPP layer,此时网络的输入可以是任意尺度的,在SPP layer中每一个pooling的filter会根据输入调整大小,而SPP的输出尺度始终是固定的。
- 只对原图提取一次卷积特征
在R-CNN中,每个候选框先resize到统一大小,然后分别作为CNN的输入,这样是很低效的。所以SPP Net根据这个缺点做了优化:只对原图进行一次卷积得到整张图的feature map,然后找到每个候选框上的映射patch,将此patch作为每个候选框的卷积特征输入到SPP layer和之后的层。节省了大量的计算时间,比R-CNN有一百倍左右的提速。
4.3 问题
- 继承R-CNN的剩余问题
1.需要存储大量特征
2.复杂的多阶段训练
3.训练时间仍然很长(25.5h):特征提取减少到5.5h - 带来新的问题
SPP层之前所有conv参数不能fine-tune,而对于一个新的任务,有必要对卷积层也进行微调。(分类的模型提取的特征更注重高层语义,而目标检测任务除了语义信息还需要目标的位置信息)
5 Fast R-CNN
5.1 网络结构
基础网络为VGG-16
5.2 检测流程
- 特征提取:以整张图片为输入利用CNN得到图片的特征层;
- region proposal:通过Selective Search等方法从原始图片提取区域候选框,并把这些候选框一一投影到最后的特征层;
- 区域归一化:针对特征层上的每个区域候选框进行RoI Pooling操作,得到固定大小的特征表示;
- 分类与回归:然后再通过两个全连接层,分别用softmax做多目标分类,用回归模型进行边框位置与大小微调。
5.3 主要贡献
- 用感兴趣池化层(ROI pooling layer)替换SPP-Net中的SPP层,使得conv层参数可以进行fine-tune
- 用softmax替代SVM分类,采用多任务损失函数(Multi-task loss),将分类loss和回归loss统一,不用再保存提取特征,减小存储压力,可以实现“end-to-end”的全参数训练
5.4 性能
- 相比于R-CNN,SPP-Net,速度显著提高
- mAP比R-CNN略有提高(注:SPP-Net的mAP下降了3%)
5.5 问题
- 选择性搜索提取候选框的方法非常耗时
6 Faster R-CNN (RPN+Fast R-CNN)
6.1 主要贡献
- 为解决Fast R-CNN的候选框提取的耗时问题,引用RPN网络来代替SS操作(将RPN网络放在最后一个conv层后面),得到量少质优的约300个候选框。
6.2 RPN结构
- RPN网络的前五层借用的是ZF网络,输出大小为
13
∗
13
∗
256
13*13*256
13∗13∗256
- 采用 3 ∗ 3 ∗ 256 3*3*256 3∗3∗256的256个卷积核,intermediate层输出256维的向量
- k=9(3种scales和3种aspect_ratio),所以cls layer就是18(
2
∗
9
:
2
2*9:2
2∗9:2对应前景和背景)个输出节点了,那么在256-d和cls layer之间使用一个
1
∗
1
∗
256
∗
18
1*1*256*18
1∗1∗256∗18的卷积核,就可以得到cls layer;reg layer的输出是36(
4
∗
9
:
4
4*9:4
4∗9:4对应x,y,w,h)个,所以对应的卷积核是
1
∗
1
∗
256
∗
36
1*1*256*36
1∗1∗256∗36,这样就可以得到reg layer的输出了。
6.3 检测流程
- 特征提取:同Fast R-CNN;
- region proposal:在最终的卷积特征层上通过RPN,每张图片大约300个建议窗口。
- 区域归一化:同fast R-CNN;RoI pooling层 。
- 分类与回归:进行目标分类,并做边框回归。 利用SoftMax Loss和Smooth L1 Loss对分类概率和边框回归(Bounding Box Regression)联合训练。为了让RPN的网络和Fast R-CNN网络实现卷积层的权值共享,其训练方法比较复杂
6.4 性能
- Faster R-CNN在保证精度不下降的情况下,速度显著提高。
7 算法结构对比
8 参考
https://blog.csdn.net/Angela_qin/article/details/80975050
https://www.cnblogs.com/skyfsm/p/6806246.html