简介
在RCNN之前的object detection方法,大都使用了SIFT和HOG提取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包含三个部分。第一个是产生与类别无关的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的训练,使用了 和 作为positive examples。Negative examples是从 中随机选取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。
结果
论文
Rich feature hierarchies for accurate object detection and semantic segmentation