简介

在RCNN之前的object detection方法,大都使用了SIFTHOG提取feature。而R-CNN使用了CNN定位、分割object。当有label的训练资料很少时,可以使用pre-train的model对现有的data再进行fine-tuning。R-CNN在VOC 2012上达到了53.3%的mAP。

在detection中需要定位object,因此RCNN把这个问题认为是回归问题。在test时,这个方法对一张图片产生大约2000个与类别无关的region proposal(预选框),对每个预选框使用CNN提取固定长度的feature vector,最后用linear SVM对预选框进行分类。

模型结构

RCNN结构
RCNN包含三个部分。第一个是产生与类别无关的region proposal的部分。第二个是提取固定长度feature的CNN。第三个是用来分类的linear SVM。

Region Proposals

使用selective search产生region proposal。

Feature Extraction

对每个region proposal提取4096维feature vector。CNN使用了AlexNet。原始图片大小为227×277,进行归一化后输入。对于每个bounding box,先dilate bounding box,使wrap后的大小bounding box正好有p=16个context(上下文)的pixel。

Test-time detection

在test时,在test image上run selective search,提取2000个region proposal。然后,wrap每个proposal,再经过CNN得到feature,最后用SVM得到每个class的分数。有了以上的分数,使用non-maximum supression(nms)分别拒绝每个类中重叠的region分数低的那些:如果两个region的intersection-over-union大于threshold,则只保留分数最高的那个。在GPU上test的速度为13s/image。

Training

CNN使用了ILSVRC2012 classification数据集进行pre-train。然后再在wraped proposal上使用SGD进行fine-tuning。将原来CNN的1000-way分类层换成随机初始化的N+1-way的分类层。
我们认为region proposal和ground truth的IoU大于或等于0.5的为positive,否则为negative。SGD起始的learning rate为0.001。在SGD每次iteration,随机采样32个positive window和96个background window来构建大小为128的mini-batch。
我们认为IoU小于0.3的proposal为negative,设置为其他值mAP都可能会下降。
对于SVM的训练,使用了val_1图片说明 作为positive examples。Negative examples是从 val_1中随机选取5000张图片(IoU小于0.3的proposal)。

Bounding-box Regression

输入为图片说明,其中,图片说明为proposal的中心以及宽和高 ,G为ground truth的bounding box,有相同的形式。
定义四个转换函数:图片说明 ,前两个定义了bounding box中心的移动,后两个定义了w和h取log之后的结果。因此,可以把P变换成预测的图片说明
图片说明
每个图片说明 可以看成是proposal feature的线性函数图片说明 ,则图片说明 。通过优化可以得到图片说明
图片说明
其中,
图片说明
我们设lambda为1000,只取距离ground-truth box较近的proposal。

结果

VOC2010

VOC2007

VOC2007

论文

Rich feature hierarchies for accurate object detection and semantic segmentation