RCNN目标检测
RCNN目标检测系列
RCNN
R-CNN源自Ross Girshick的“Rich feature hierarchies for accurate object detection and semantic segmentation”(2014),翻译成中文名是“丰富的特征层次结构可实现精确的目标检测和语义分割”。RCNN作为利用深度学习进行目标检测的开山之作,多次在PASCAL VOC目标检测竞赛中折桂(与传统方法相较准确率提升30%以上)。
RCNN算法流程(4步)
- 一张图像利用Selective Search方法生成1K~2K个候选区域
- 对每个候选区域,利用深度网络提取特征
- 特征送入每一类的SVM分类器,判别是否属于该类
- 使用回归器精细修正候选框位置
算法流程概览:

1.候选区域的生成
利用Selective Search算法通过图像分割的方法得到一些原始区域。
然后通过一些合并策略将这些区域合并,
得到一个层次化的区域结构,而这些结构就可能包含需要的物体。
层次化的区域结构:

2.对每个候选区域,利用深度网络提取特征
将2000候选区域,统一缩放到227 * 227大小,
接着将候选区域输入到实现训练好的AlexNet CNN网络中。
获取4096维的特征,
得到2000 * 4096维矩阵。
(AlexNet就作为一个简单分类网络,只不过将最后的全连接层去掉)
3特征送入每一类的SVM分类器,判定类别
SVM是一个2分类的分类器,它针对每一个类别,都有一个专门的分类器,如:
1)Person? Yes or No
2)Flower? Yes or No
将上一步得到的2000 * 4096维特征,与20个SVM组成的4096 * 20权值矩阵相乘,
得到 2000 * 20的矩阵,它表示每个建议框是某个目标类别的得分。
而后,分别对这 2000 * 20 维度矩阵中的每一列(即每一类)进行NMS剔除重叠建议框,
得到该列(类)中得分最高的一些建议框。

3.1 NMS流程
IoU(Intersection over Union)交并比计算含义略。
- 寻找得分最高的目标
对每一个类别,去寻找得分最高的目标 - 计算其它目标与该目标的IoU值
得分最高的目标之后,计算其它目标与该目标的IoU值 - 删除所有IoU值大于给定阈值的目标
对每一个边界框对最高得分的边界框的IoU值判断,大于阈值则剔除
![NMS剔除示例]()
观察上图,首选通过SS算法得到一系列的边界框,
这些边界框中评分最高的一个是A:0.98,
另外一个得到的评分是B:0.86,
通过计算,两个边界框的IoU大于给定阈值,我们认为A和B是同一个目标,
删除B保留A。
(NMS目的是,一张图片中可能有多个向日葵,我们期望每一个向日葵都有一个目标框。
如果我们直接取最大的得分,那么一张图像也就只能得到一个目标框。
因此在取最大得分边界框的同时,我们通过计算NMS剔除,两个边界框框到同一棵向日葵的情况
)
4. 使用回归器精细修正候选框位置
对NMS处理后的剩余建议框进一步筛选。
接着分别使用20个回归器对上述20个类别中剩余的建议框进行回归操作,
最终得到每个类别的修正后得分最高的Bounding box。

如上图,P是建议框,G为真实框,G^代表我们的回归结果。
RCNN存在的问题
- 测试速度慢
测试一张图片约53s(cpu),SS算法耗时2s。
一张图像内候选框之间存在大量重叠,提取特征操作冗余。 - 训练速度慢
- 训练所需要空间大
对于SVM和bbox回归训练,需要大量的存储空间,需要非常深的网络。


浙公网安备 33010602011771号