R-CNN 是第一个成功将深度学习应用到目标检测上的算法,也是后续Fast R-CNN , Faster R-CNN等系列算法的鼻祖
一、R-CNN整体架构
R-CNN的全貌如下图所示
它主要分为4个模块
- 候选区域(region proposal)提取
- 一个大型的CNN网络用来特征提取
- 使用SVM分类模型进行类别分类
- 使用回归(Regression)模型进行具体定位
具体RCNN的训练流程如下:
- 先使用ImageNet数据集训练一个CNN网络(论文中使用的是AlexNet)
- 使用选择性搜索(selective search)算法提取出2000个候选框
- 将提取出来的候选框统一resize到 CNN网络所需要的尺寸
- 使用自己的数据集对CNN网络进行fine-tuning(微调)
- 利用fine-tuning后的CNN网络对候选框进行特征提取
- 训练多个二元SVM分类模型
- Bounding-box回归来减少候选区域误差
二、具体模块设计
1.在ImageNet数据集上训练一个CNN网络
论文中提到,因为实际标签数据太少,远远不够去训练一个大型的CNN网络模型,所以需要先借助ImageNet数据集进行训练CNN网络,也就是预训练过程,然后再在自己的数据集上针对特定任务进行微调,也就是调优。这是在训练数据稀少的情况下一个非常有效的训练大型卷积神经网络的方法
2. 候选区域提取
R-CNN算法使用的 选择性搜索(selective search)算法提取出了2000个候选框,Selective search综合考虑图像的颜色、纹理、尺寸相似性和空间重合度来划分区域,并将小区域按照相似性合并为大区域。
具体选择SS算法的大概思路如下:
1. 使用图像分割算法创建候选区域
2. 使用贪心算法来进行候选区域合并:
计算所有候选区域的相似度
将最相似的两个候选区域合并为一个区域
3. 重复迭代2过程,直到满足条件</