目标检测(一)R-CNN论文笔记
目标检测(一)R-CNN论文笔记
本博客是我阅读论文之余做笔记所写,只写了一些论文中我觉得比较重要的内容,如果想更深入地了解,还是建议大家去读原论文。个人水平有限,写得有问题的地方欢迎朋友在评论区留言指出。
R-CNN
R-CNN论文题目:Rich feature hierarchies for accurate oject detection and semantic segmentation
论文地址:https://arxiv.org/pdf/1311.2524.pdf
背景
R-CNN这篇论文是2014年CVPR的论文,在此之前目标检测并未使用基于深度学习的方法,所以R-CNN可以说是基于深度学习的目标检测算法的开山鼻祖。相比于之前基于传统方法的目标检测,R-CNN在PASCAL VOC2012数据集上的mAP提高了30%以上,达到了53.3%。
R-CNN的两个重要贡献在于:
- 这是首次将候选区域(Region Proposal)和CNN结合,用于目标检测和分割;
- 证明了在数据不足的情况下,预训练加fine-tune的方式可以大大提高模型的性能,而这种方式在之前可能还未受重视或未经证明;
R-CNN用于目标检测
R-CNN用于目标检测的流程如下图所示,该图来自于1。
流程具体为:
- 对输入的图片使用选择性搜索(Selective Search),得到大约2000个候选区域;
- 不管候选区域的大小和宽高比如何,都将其变换为227×227的固定大小(227×227是后面CNN要求的固定输入图片大小);
- 将变换后的候选区域一个个输入到CNN中,CNN的输出为一个4096维的特征向量;
- CNN输出的特征向量分别送入一系列的SVM用于分类, 以及为了得到更精准的预测框, 还会进行一个Bounding Box Regression;
R-CNN训练策略
对于CNN和SVM,作者使用了不同的训练策略,主要表现在对于正负样本的划分不同。
CNN:
- 作者首先在大规模的图像分类数据集ILSVRC 2012上对CNN网络进行了预训练;
- 接着,作者在VOC2012上对预训练的CNN网络进行了fine-tune。在这一步骤,CNN的输入是大小已经变换为227×227的候选区域。作者设定,与某个ground-truth box相比,如果候选区域的IoU大于等于0.5,则将该候选区域设定为该ground-truth box所对应类别的正样本,反之,则设定为负样本。
对于SVM,作者仅将各个类别的ground-truth box作为该类别的正样本,将IoU小于0.3的候选区域被作为该类别的负样本,其余候选区域被忽略。
Bounding Box Regression
为了得到更加精准的预测框,作者训练了一个线性回归模型。在给定输入为CNN网络最后一个池化层(在文中以表示)的输出特征图的情况下,可以输出一个更加精准的预测框。有关于Bounding Box Regression的原理在R-CNN补充材料中有详细说明, 有兴趣的朋友可以去看一下原文。另外, 这篇博客也对Bounding Box Regression的原理做了比较详细的解释, 可以作为参考。
边框回归(Bounding Box Regression)详解
总结
R-CNN是后面很多目标检测算法的基础,理解了R-CNN的原理对于理解其他算法很有帮助,所以如果有时间,还是建议大家去看看原论文。