文章目录
目标检测
任务有二,一是分类,二是框出目标位置。
由于感兴趣的对象出现的次数不固定,输出层的长度是可变的,所以不能直接采用"conv+fully-connected"方式。 解决方法是从图像中获取不同的RoI,并使用CNN对该区域内的对象进行分类。 这种方法的问题在于,由于感兴趣的对象在图像中具有不同的空间位置和不同的纵横比,因此需要选择大量的区域,导致计算爆炸。
传统方法:滑动窗口。
R-CNN
采用选择性搜索来避免需要选择大量区域的问题,这种方式只提取2000个区域,称为区域候选框(region proposals)。
1.【算法】 选择性搜索:
- 生成初始化子分割
- 使用贪心算法递归地将相似区域组合为几个大区域
- 使用生成的区域产生最终区域候选框
选择性搜索产生的2000个候选框被拉伸成一个正方形,然后送入一个卷积神经网络(CNN),输出一个4096维的特征向量。CNN作为一个特征提取器,将提取到的特征送入SVM中,对区域候选框中的对象进行分类。此外,算法还预测四个偏移值,帮助调整区域候选框的bounding box以提高精度。
2. 步骤:提取特征,分类,bbox回归
- 选择性搜索,提取所有候选框;
- 对每个候选框重塑其大小以适合CNN的输入(CNN要求的输入大小固定),送入CNN;
- 训练一个分类器(如SVM),判断候选框中的物体类别;
- 对于属于某类别的候选框,训练一个线性回归器,使用回归器微调候选框的位置。
3. 问题:
- 每张图片对2000个区域进行分类,需要大量时间来训练网络;
- 每张图片需要47s的时间,不能实时完成任务;
- 选择性搜索算法非常固定,没有学习过程,产生的区域候选框可能质量不佳。
SPP Net
- 加入了金字塔池化层
即无需对图片进行变形,输入图像可以是任意尺寸,但输出维数固定。 - 只对原图提取一次卷积特征。
SPP Net 比 R-CNN有一百倍左右的提速。
Fast R-CNN
1. 与R-CNN的不同:端到端
- 卷积层后加入RoI池化层,所有的区域候选框都对应一个固定维度的特征向量作为fc层的而输入。
即不需要对输入图像进行拉伸变形。同SPP Net。 - 使用softmmax代替SVM进行分类,同时采用多任务损失函数,将bbox回归加入到CNN中训练。
即将bbox回归放入CNN,与区域分类做成一个多任务模型,共享卷积特征。
2. 优势:
-
不需要将2000个区域候选框送入CNN,而是将一张图片产生的一张特征图送入。
-
端到端。
原来的方法:许多候选框(比如2000)–> CNN --> 得到每个候选框的特征 --> 分类+回归
现在的方法:一张完整图片 --> CNN --> 得到每张候选框的特征 --> 分类+回归
3. 步骤
- 在图像中确定约1000-2000个候选框 (使用选择性搜索Selective Search);
- 将整张图片输进CNN,得到特征图;
- 找到每个候选框在特征图上的映射patch,将此patch作为每个候选框的卷积特征输入到SPP layer和之后的层;
- 对候选框中物体进行分类;
- 对于属于某一类别的候选框,用回归器进一步调整其位置。
Faster R-CNN
R-CNN和Fast R-CNN存在的问题:选择性搜索提出区域候选框非常耗时。
解决:加入一个提取边缘神经网络RPN替代选择性搜索,同时加入anchor box。
1. RPN
- 步骤:(1)在特征图上滑动窗口;(2)搭建用于物体分类+bbox回归的神经网络。
- 步骤意义:(1)滑动窗口提供了物体的大体位置,(2)bbox回归提供了更精确的位置。
2. 损失函数
- RPN分类损失:anchor好坏
- RPN回归损失:anchor与候选框的差
- Faster R-CNN分类损失:类间损失
- Faster R-CNN回归损失:候选框与box的差
3. 步骤
- 将整张图片输入CNN,得到特征图;
- 将得到的特征输入RPN;
- 对候选框中的特征进行分类;
- 对于属于某一类的候选框进行回归,对其位置进行微调。
总结
R-CNN: 选择性搜索+CNN+SVM
SPP Net: RoI 池化
Fast R-CNN: 选择性搜索+CNN+RoI池化
Faster R-CNN:RPN+CNN+RoI