目标识别过程
- 1.通过SS算法对一张图像生成1K~2K个候选区域(Region Proposals)
- 2.对每个候选区域,使用深度网络提取特征
- 3.用SVM对特征进行分类
- 4.使用回归器精细修正候选框的位置
1、通过SS算法对一张图像生成1K~2K个候选区域(Region Proposals)
利用 Selective Search算法通过图像分割的方法得到一些原始区域,然后使用一些合并策略将这些区域合并,得到一个层次化的区域结构,而这些结构就包含着可能需要的物体。如下图所示
能够生成候选区域的方法很多,如:
- objectness
- selective search
- category-independen object proposals
- constrained parametric min-cuts(CPMC)
- multi-scale combinatorial grouping
- Ciresan
R-CNN采用的就是Selective Search(SS)算法。
2、对每个候选区域,使用深度网络提取特征
将2000个候选区域(SS算法选出)Resize到(227, 227),接着将候选区域输入事先训练好的 AlexNet网络获取4096维(AlexNet全连接层之前得到的特征维度)的特征得到2000*4096 维矩阵。
- 深度网络采用的是AlexNet,其要求输入图像(在RCNN中输入的是候选区域)的大小是 ( 227 , 227 ) (227,227) (227,227),输出的特征向量为4096维。
- 由于Selective Search产生的候选区域不一样,对于小于227的候选区域,会人为添加边框,使其膨胀。
3、用SVM对特征进行分类
将2000x4096维特征与20个SVM(Pascal VOC数据集只有20类)组成的权值矩阵4096x20相乘, 获得2000x20维矩阵(评分矩阵)表示每个建议框是某个目标类别的得分。分别对上述2000x20 维矩阵(2000个候选框分别预测为20个类别的概率)中每一列(即每一类)进行非极大值抑制剔除重叠建议框
,得到该列(即该类)中得分最高的一些建议框。
如上图所示,
2000*4096的矩阵
每一行代表一个候选区域的特征向量,一共2000个候选区域,所以有2000行。4096*20的矩阵
为特征权值矩阵
,与神经网络中的全连接层的权值矩阵类似,其中20表示一共有20个类别。2000*20的矩阵
表示每一个候选框为每个类别的概率,如位置 ( 1 , 1 ) (1,1) (1,1)中的数值表示第一个候选框为类别1的概率。
非极大抑制(Non-Maximum Suppression,NMS)剔除重叠建议框
I o U ( I n t e r s e c t i o n o v e r U n i o n ) = ( A ∩ B ) / ( A ∪ B ) IoU(Intersection\ over\ Union)= (A\cap B)/ (A\cup B) IoU(Intersection over Union)=(A∩B)/(A∪B)
- 寻找得分最高的目标
- 计算其他目标与该目标的IoU值
- 删除所有IoU值大于给定阈值的目标
- 重复1-3步,直至完成所有的建议框,最终只保留一个最准确的建议框。步骤如图所示
4、使用回归器精细修正候选框的位置
对NMS处理后剩余的建议框进一步筛选。接着分别 用20个回归器对上述20个类别中剩余的建议框进行回归操作,最终得到每个类别的修正后的得分最高的 bounding box。
如图,黄色框口P表示建议框Region Proposal, 绿色窗口G表示实际框Ground Truth,红色窗口表示Region Proposal 进行回归后的预测窗口,可以用最小二乘法解决线性回归问题。具体调整方法见Fast R-CNN。
缺点
1、测试速度慢
测试一张图片约53s(CPU)。用Selective Search算法提取候选框用时约2s,一张图像内候选框之间存在大量重叠,提取特征操作冗余。
2、训练速度慢
过程及其繁琐。
3、训练所需空间大
对于SVM和bbox回归训练,需要从每个图像中的每个目标候选框提取特征,并写入磁盘。对于非常深的网络,如VGG16,从VOC07训练集上的5k图像上提取的特征需要数百GB的存储空间。
总结
R-CNN整体可以分为上述四个过程:
- SS算法提取候选框
- 利用CNN网络对候选框进行特征提取
- 使用SVM对提取到的特征进行分类
- 调整边界框的位置(即边界框回归)