1. 摘要
2. 引言
3. 目标检测
4. 附录
1. 摘要
R-CNN的两个关键点:①通过CNNs自下而上的获取proposals,用于定位和目标分割;②当标签数据不足时,通过监督预训练作为辅助,然后在特定区域进行微调来提升性能。
2. 引言
近十来年,在各种视觉识别任务中,人们基本在使用SIFT和HOG描述子。但在2010-2012年之间视觉识别研究进展缓慢,通过集成系统和一系列小组件来实现识别的进展甚微。
3.R-CNN 目标检测
R-CNN包含3个模型,①proposal生成器,②生成固定长度特征向量的CNN网络,③SVM分类器。
(1)模块设计
Region proposals
:如objectness,selective search等
Feature extraction
:通过CNN提取一个4096-d的特征向量,特征提取通过5层卷积层和2层全连接层实现。
(2)Test-time detection
Run-time annalysis
:两个特性使检测有效:①所有类别的CNN参数共享,②相对于其他方法,CNN计算得到的特征向量是低维的。共享的结果就是计算proposal和特征的时间被分摊到所有类别。只有在特定类别的计算上,如特征向量和SVM参数及非极大值抑制之间是通过点积计算。实际上这种点积在运行时被转化为批量化的矩阵相乘。
因此R-CNN即使对于上千类别也是有效的。这种有效性,不仅是由于proposal和共享参数,R-CNN的存储空间相对UVA也较小,仅1.5G。
(3)训练
Supervised pre-training
:首先通过ILSVRC2012对CNN进行预训练,训练集具有类别标签,但没有box标签。
Donmain-specific fine-tuning
:为适应检测任务,通过SGD和proposal内图像对CNN进行微调。除了替换ImageNet的1000类分类层,其他结构未作改变。当IoU > 0.5时,视为正样本。初始学习率未0.001,每个batch正负样本比例为32:96。
4. 附录
(1)proposal转换
CNN需要固定大小的输入(如227x227)。对于检测任务,proposal是任意的矩形框。对于将proposal转化为CNN输入大小,在此进行了两种方法的比较。①将obj包括在最小范围内的背景中,并缩放到CNN输入大小,如B列,图片中包含了一部分背景,缩放后,图像不扭曲,有的位置用灰度值填充。这种方法的另一变种是,包含的背景部分很小,缩放后,很大一部分用灰度值填充。②截取obj,直接进行缩放,不会产生灰度值填充,但是图像会发生扭曲。
(2)正负样本和softmax
为什么在CNN微调时和SVM分类时的正负样本定义不同?在微调CNN时,计算proposal与ground-truth之间的IoU,当大于0.5时标记为正样本。在训练SVM时,对于每个类仅使用ground-truth作为正样本,但IoU小于0.3的作为负样本。也就是,IoU在0.3-1之间但不是ground-truth的proposal被忽略了。
一个历史原因是,刚开始,我们是在ImageNet预训练的CNN的基础上对SVMs进行训练,当时没考虑CNN的微调。在这个过程中,发现SVMs这种设定标签的方式是最优的(包括在微调CNN之后)。当我们开始对CNN进行微调时,采用和SVM相同的标签设置时,发现性能不如现在这种微调标签设置。
我们的假设是,在微调时的正负样本定义不是根本性问题,而是用于微调的数据较少导致的。当我们引入0.5-1的proposal作为正样本时,正样本容量增加近30倍。我们推测,在微调这么大的网络时,这么大的数据集是有效的。但是我们也注意到这部分数据不是最优的,因为这部分正样本实际上并没有对obj进行准确定位(假设只有ground-truth是准确定位的)。
这就导致了第二个问题:为什么要在微调后再训练SVMs?如果直接用微调网络的最后一层(21-way softmax分类器)作为obj detector会更为简洁。我们进行过测试,但性能明显下降。这可能是以下因素导致的:①用于微调的正负样本,对于定位并不精确;②这个softmax分类器是在随机负样本上训练得到的,性能不如困难负样本训练的结果好。
所以,推论是,如果在微调阶段,采用足够多及精确定位的数据,那么不采用SVM层,直接softmax分类性能也可能不低于训练后的SVM,这将有效加速训练过程,增加检测的实时性能。
(3)Bbox 回归
通过SVM检测分类得到一个score之后,采用一个回归器来预测一个检测的bbox。这类似于DPM中的回归方法。与DPM的区别是,直接通过CNN计算得到的特征进行回归,而不是通过DPM计算的几何特征进行回归。
R-CNN中,存在N个proposal和ground-truth对:
总共要学习四个函数: