R-CNN读书笔记

参考论文:Rich feature hierarchies for accurate object detection and semantic segmentation。


《R-CNN读书笔记》

一、整个算法分四个部分,也是测试过程

1、region proposals

为了避免盲目的滑窗,自然相到先若干提取候选区域。提取候选区域的算法很多,RCNN对提取候选区域的算法没有先定,论文里使用的是selective search。具体参考What makes for effective detection proposals详细对比了各种region proposal的算法。本文提取了2k个region proposals,最终的检测结果就从这2k个中选择。

2、CNN提取特征

CNN网络使用的是ALXnet。输入的是region proposal图像,需要将每个包围region proposal的最小bounding box放缩到与CNN匹配的大小227*227.输出为4096维的特征。

3、SVM判断类别

每个类别对应一个二分类svm分类器,输入为CNN输出的4096维特征向量,输出为该region proposal输入该SVM对应类别的score。

本文使用的PASCALvoc数据库有20个类别,所以有20个SVM。一幅图像最终输出2k*20的矩阵。

为了减少重复的bounding box,要对进行非最大值抑制。非极大值抑制(NMS)对每一类,根据score进行排序,把score最大的bounding box作为选定的框,计算其余bounding box与当前最大score与box的IoU,去除IoU大于设定的阈值的bounding box。然后重复上面的过程,直至候选bounding box为空,然后再将score小于一定阈值的选定框删除得到一类的结果。

4、bounding box regression

进一步修正bounding box的大小和位置。

二、训练过程细节为:

1、先预训练ALXnet使用imagenet数据集,按分类任务pre-training。

2、fine-tune。使用pascal voc 数据集fine-tune。

输入为warped region proposal,输出为21维类向量。(与pre-training网络的唯一改变是由输出1000类改为输出21类)。包括20类目标和背景。把与ground truth的IOU>0.5的region proposal作为正例,其余为负例,即背景。每个batch里包含32个正例,96个负例共128个。学习率为0.001,是pre-training的1/10,为了不破坏与训练的结果。

3、训练SVM

训练某类别的SVM,与该类目标的groud-truth的IOU>0.3的region proposal的特征向量作为正例,其余作为负例。为了减小内存使用,采用standard hard negative mining method(这个还没研究是什么东西)

4、训练bounding box regression

受DPM (Object detection with discriminatively trained part based models)的灵感,训练一个线性回归模型,给定pool5层的特征预测一个新的检测窗口。

小结:R-CNN把CNN用到了目标检测任务中,使得mAP有了很大的提高,在VOC 2012上达到53.3%。存在的问题是速度慢一张图片需要几十秒,训练过程繁琐,分四个步骤,不优雅。

    原文作者:flyingmoth
    原文地址: https://www.jianshu.com/p/9bcbf6d98238
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞