原文链接:http://arxiv.org/abs/1311.2524
工程链接:https://github.com/rbgirshick/rcnn
R-CNN,即Regions with CNN features, 是目前比较流行的目标检测中Region Proposal+CNN框架的基础,之后的Fast-RCNN、Faster-RCNN都是以它为基础。R-CNN的出发点在于"Features matter",不同于传统的回归方法,R-CNN是用分类方法来解决目标检测问题。很多传统特征可以用图片经过CNN后得到的feature map表示,其中既包括what,也包括where。对得到的特征进行分类,对特征的位置进行回归。
R-CNN在解决目标检测问题时面临的主要挑战和解决办法是:(1) 用CNN进行定位。借鉴"Recognition using regions"模型,得到input image后,用CNN在每个proposal中得到一个定长的特征向量,对每个region proposal计算一个固定大小的CNN输入后计算CNN features,最后用线性SVM对每个区域进行分类。如下图所示
(2) 对于训练一个大的CNN来说,在目标检测中标记的数据比较稀少。需要用无监督的pre-training和有监督的fine-tuning来解决这个问题。
用R-CNN进行目标检测
一共可分成三个模块:(1) 第一个模块生成独立类别的用来定义可用的候选检测集的region proposal。(2) 第二个模块是从每个区域中提取一个定长的特征向量。(3) 第三个模块是一系列特殊类别的线性SVM。
Test-time detection . (1) 使用selective search在训练图像上抽取大约2000个region proposal; (2) warp每个proposal,通过CNN的前向传播计算features;(3) 对于每个类别,用SVM训练抽取feature向量;(4) 如果一个区域和一个higher scoring selected区域间的intersection-over-union(IoU: 2个重叠的边界框,计算边界框的并集,然后通过并集分割边界框)overlap大于阀值,使用greedy non-maximum suppression舍弃它。
Supervised pre-training.
descent)。CNN的结构除了用一个随即初始化的(N+1)-way分类层替代ImageNet-specific 1000-way的分类层外, 其他不改变。在实际中,选择与包含真实结果的框重叠大于等于0.5的作为正样本,其余的作为副样本。设置SGD初始learning rate为0.001。在每次迭代中,选择32个正窗口和96个背景窗口来构造一个大小为128的mini-batch。
Object category classifiers. 在fine-tuned CNN的最终softmax layer之后对每一个类别用一个线性SVM进行优化。
Network
第一层获取定向的边和相反的颜色。Layer pool5是网络的第五个也是最后一个卷积层的max-pooled输出。它的feature map有6*6*256=9216维。Layer fc6和pool5全连接,它用一个4096*9216维的权重矩阵和pool5的feature map相乘后加上偏移向量来计算features。Layer fc7是网络的最后一层,它用fc6得到的特征和一个4096*4096的权重矩阵相乘,并且加上偏移向量,实现hale-wave校正。
效果较好的一个网络结构的例子是,网络由相同的结构组成:有3*3卷积核的13个卷积层,5个散布的最大池化层和最顶端的3个全连接层。
为了减小定位误差,使用Bounding-box regression来训练预测一个针对pool5 features的新的定位窗口。(Bounding-box regression:训练出一个从proposed box P到ground-truth box Q的一个变化。和四个有关:bounding box中心的坐标位置,宽度,高度。)