RCNN算法步骤
- 一张图像使用Selective Search算法生成1K~2K个候选区域框(使用Selective Search方法)
- 对每个候选区域,使用深度网络提取特征
- 特征送入每一类的SVM分类器,判别是否属于该类
- 使用回归器精细修正候选框位置
SS生成候选提议框
利用Selective Search算法通过传统的图像分割的方法得到一些原始区域,然后使用一些合并策略将这些区域合并,得到一个层次化的区域结构,而这些结构就包含着可能需要的物体。
区域框特征提取
将2000候选区域缩放到227x227 pixel,接着将候选区域输入事先训练好的AlexNet CNN网络获取4096维的特征得到2000x4096维矩阵。
SVM分类
将2000x4096的特征矩阵与20个SVM组成的权值矩阵4096x20相乘,获得2000x20的概率矩阵,每一行代表一个建议框归于每个目标类别的概率。分别对上述2000x20维矩阵中的每一列即每一类进行非极大值抑制(NMS),剔除重复建议框,得到该列即该类中得分最高的一些建议框。
非极大值抑制(NMS)
- 寻找得分最高的目标
- 计算其他目标与改目标的iou值
- 删除所有iou值大于给定阈值的目标
使用回归器精细修正候选框位置
具体实现方法在后续步骤中实现
R-CNN框架
R-CNN存在的问题
- 测试速度慢
- 测绘一张图片约53s(CPU),SS费时2秒,一张图像内候选框之间存在大量重叠,提取特征操作冗余。
- 训练速度慢
- 训练所需空间大
- 对于SVM和bbox回归训练,需要从每个图像中的每个目标候选框提取特征,并写入磁盘,对于 非常深的网络,如VGG,从VOC07训练集上的5k图像上提取的特征需要数百GB的存储空间