R-CNN算法介绍(R-CNN专题)
R-CNN(Region-based Convolutional Neural Networks)是利用深度学习进行目标检测的开山之作,由Ross Girshick等人在2014年提出,论文地址:https://arxiv.org/abs/1311.2524;
R-CNN算法流程:


第一步:通过Selective Search算法,在一张图像上生成1k~2k个候选框
Selective Search算法通过图像分割的方法得到一些原始区域,然后使用一些合并策略将这些区域合并,得到具有层次化的区域结构,这些区域结构就包含着可能需要的物体,如下图所示。

Selective Search算法代码实现
第二步:通过CNN网络对每个候选框进行特征提取,每个候选框生成4096维特征向量
将Selective Search算法生成的2000个候选框Resize成227*227的大小,然后输入到AlexNet网络,得到对应的2000个4096维特征向量,如下图。

第三步:将每个特征向量输入到每一类的SVM分类器,判定是否属于该类
将2000个4096维特征向量(2000*4096矩阵)与20个SVM分类器(用于训练的Pascal VOC 2007数据集有20个类别)组成的4096*20权值矩阵进行相乘,得到2000*20矩阵,表示每个候选框是某个类别的得分;对于同一类别的候选框,使用非极大值抑制NMS算法(参考:算法岗面试总结—目标检测篇(第二题))剔除多余的候选框。

第四步:使用回归器调整候选框的位置
对于NMS处理后剩余的候选框,再通过20个回归器,使用最小二乘法,通过最小化误差(候选框和标注框之间的差)的平方和寻找最佳函数匹配。
R-CNN算法的缺点:
训练速度慢:训练过程及其繁琐;
训练空间大:每张图片会生成2000个候选框,需要对所有候选框进行特征提取,而Pascal VOC 2007训练集有5000多张图片,所有候选框的特征向量占内存空间很大;
测试速度慢:Selective Search算法提取候选框需要2s左右,再对所有候选框进行特征提取,最后检测一张图片需要大约53s(CPU)。