Faster_rcnn论文阅读


论文资料

Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks


博客相关

【目标检测】RCNN算法详解

【目标检测】Fast RCNN算法详解

【目标检测】Faster RCNN算法详解

深度学习论文笔记:Faster R-CNN

深度学习实践经验:用Faster R-CNN训练行人检测数据集Caltech——准备工作

fasterRCNN详解

Object Detection and Classification using R-CNNs 非常需要深入了解的博客。


代码实现

技术上将RPN网络和Fast R-CNN网络结合到了一起,将RPN获取到的proposal直接连到ROI pooling层,是一个CNN网络实现端到端目标检测的框架。

RCNN的思路最为简单,首先使用Selective Search将图像的目标候选区域筛选出来,然后通过使用ImageNet网络将候选区域的特征提取出来并作为SVM的特征进行训练,分类得到是否是目标。

边框回归(Bouding Box Regression):是对RegionProposal进行纠正的线性回归算法,目的是为了让Region Proposal提取到的窗口与目标窗口(Ground Truth)更加吻合。

下面是网络对比图

TFFRCNN

py-faster-rcnn

faster_rcnn_pytorch

Faster RCNN anchor_target_layer.py

simple-faster-rcnn-pytorch 简化版本的pytorch faster rcnn实现。

Faster R-CNN CPU环境搭建 在CPU下实现faster RCNN,对应的代码faster-rcnn-cpu Faster RCNN CPU模式下进行训练 py-faster-rcnn

RCNN

RCNN算法的原理较为简单,首先通过Selective Search提取图像Bouding Box(大约2000个),输入CNN网络(AlexNet预先训练作为特征提取层类似与将候选区域做一个sift的特征提取),然后将fc7特征输入SVM分类器中训练21个label的结果。

训练完 CNN 后,我们就可以通过它提取物体的特征了。这里使用 fc7 层输出的 4096 维的向量作为特征。

对于每一类物体,我们要训练一个二分类的 SVM 模型,由 SVM 来判断矩形区域内是否有物体存在。SVM 的训练数据是 CNN 提取的特征向量,对应的 label 和上面一样分为 21 类。与 CNN 不同的是,我们重新调整了 IoU 的阈值。在 CNN 中,我们将 >= 0.5 IoU 的矩形都标为正样本,但在训练 SVM 的时候,作者发现,取 0.3 IoU 效果最好。所以,这一次我们将 >= 0.3 IoU 的矩形都标记为正样本作为 SVM 的训练数据。

预测的时候,我们先通过 Selective Search 选出 2000+ 矩形区域,用 CNN 的 fc7 层提取特征向量,再用 SVM 对这些矩形区域进行评分判断。由于矩形区域存在大量的重叠,因此论文最后用非极大值抑制(non-maximum suppression)的方法对这些区域进行筛选。

具体做法是:先从所有矩形区域中,选出 SVM 得分最高的区域,将与该区域的 IoU 面积超过阈值的都删除,然后从剩下的矩形区域中再挑选出得分最高的,继续剔除 IoU 超过阈值的区域,如此往复直到没有矩形区域可选为止。

做完这一步,剩下的矩形基本就是比较可靠的物体所在的位置了。但作者还想更进一步,结合 CNN 的 pool5 层提取的特征以及 DPM 中的 box regression 对矩形位置进一步微调。这一步论文没有详细说明,而我自己也知之甚少,日后明白了再补上。

论文笔记:Rich feature hierarchies for accurate object detection and semantic segmentation

pytorch实现

几个Faster RCNN中重要的变量信息说明一下: + anchor [w1, h1, w2, h2] + im_info [[H, W, Scale]] + bbox_target [cls, tx, ty, tw, th] + gt_boxes [x1, y1, x2, y2, cls] 或者 [w1, h1, w2, h2, cls] + rois 里面的一个roi [batch_ind, w1, h1, w2, h2]

根据代码faster_rcnn_pytorch并结合下图可以较快的明白网络的流图,这张图来源于代码chainer-faster-rcnn