R-CNN
整体结构
- Region proposal -> warped region -> CNN -> FC -> linear SVM、regression
训练步骤
- 对CNN进行Supervised pre-training
在有大量数据的ILSVRC 2012数据集上进行分类训练,达到较好的效果 - Domain-specific fine-tuning
使用selective search得到VOC数据集中的候选框,处理得到warped region。将处理得到的warped region组合成32个正样本、96个负样本构成的batch。其中正样本为和ground truth的IOU大于指定的阈值(比如0.5或者0.3)的region,其他的为负样本。送入模型进行fine-tuning,训练SVM分类器,选取较小的学习率,否则预训练也就没有用了。 - bounding box regression
对bounding box进行回归训练
测试步骤
- 使用selective search得到测试样本的候选框, 处理得到warped region。
- 送入模型进行类别预测和回归
- 将预测结果按照概率大小排序,采用NMS(非极大值抑制),也就是选出概率最大的region,然后删除和它的region的IOU超过指定阈值的其他region,重复这个步骤直到没有候选框。筛选出最终得到的检测框
Fast R-CNN
Fast R-CNN相对于R-CNN的改进点
- 通过借鉴(SPPNet)空间金字塔网络,加入RoI pooling层
- 所有RoI公用同一层特征,缩短了对不同的ROI分别提取特征所耗费的时间
- 可以在得到特征之后,再实现根据不同大小的ROI生成同样大小的输入FC的特征。实现可以接受不同大小的图片作为输入
- 损失函数使用了multi-task loss(多任务损失)函数,将分类和检测框的回归合并在一个loss中
- 使用SVD,在精度损失不多的情况下,加速FC层(可以借鉴,但是略显鸡肋)
Faster R-CNN
主要特点
- Faster R-CNN相对于Fast R-CNN最大的改进点就是提出了使用RPN网络来对ROI进行预测
- 省去了selective search进行region proposal所花费的时间
- 提高准确率
- 实现端到端训练
训练过程
- 在原始论文中提出的训练过程是,采用分步训练的方式进行,分别训练特征提取网络、RPN网络、类别预测框回归网络。
- 后来证明,采用端到端的方式,直接将RPN网络的两个loss 和类别预测框回归的loss组合在一起,直接采用multi-task loss来进行网络的训练可以达到更好的效果。