R-CNN论文笔记
一.介绍
作者主要关注两个问题:
1.使用深度网络定位物体
2.在小规模的标注数据集上的进行大型网络模型的训练
关于第一个问题有两种方案可以参考:
1.将定位问题看做是回归问题,但Szegedy等人的工作说明这个策略不太行(VOC2007的mAP为30.5%)。
2.使用滑动窗口检测器,通过此方法使用CNN已经超过20年,通常用于人脸、行人等,一般采用两个卷积层和两个池化层。但由于作者的而网络层次更深,输入的图片感受野大(195×195)步长大(32×32),使得这个方法充满挑战。
最终作者选择使用”recognition using regions”范式,对每张图片产生近2000个类别无关的region proposal(定义了一个候选检测区域的集合) ,将这些proposal resize到统一大小,使用CNN计算特征,最后使用专门针对特定类别数据的线性SVM对每个区域进行分类。
关于第二个问题,传统方法先进行无监督与预训练,再进行有监督调优。作者采用的方法是在辅助数据集(ILSVRC)上进行有监督预训练,再在小数据集上针对特定问题进行调优,调优将mAP提高的8个百分点。
二.物体检测
(1)模块设计
作者的物体检测系统由三个模块构成:
1.产生类别无关的region proposal
2.使用大型CNN提取特征向量
3.指定类别的线性SVM
产生类别无关的区域推荐算法有objectness(物体性),selective search(选择性搜索),category-independent object proposals(类别无关物体推荐),constrained parametric min-cuts(受限参最小剪切, CPMC),multi-scal combinatorial grouping(多尺度联合分组)等等,由于R-CNN对特定区域算法是不关心的,所以作者采用了选择性搜索以方便和前面的工作进行可控的比较。
在特征提取前,要先进行图像变形,先在候选区域的外围加上16的padding,再进行各向异性缩放到277×277(这种形变使得mAP提高了3到5个百分点),通过五个卷积层和两个全连接层进行前向传播,最终得到一个4096-D的特征向量。
(2)测试阶段
在测试阶段,使用选择性搜索的快速模式抽取约2000个推荐区域,变形推荐区域后通过前向传播算出特征,使用每个类别的SVM分别对2000个推荐区域打分,然后每个类别独立使用非极大似然估计删掉一些和得分更高的区域的IOU大于阈值的候选框。
两个特性让检测高效:
1.所有CNN参数都是跨类别共享的
2.通过CNN计算的特征向量相比其他通用方法(比如spatial pyramids with bag-of-visual-word encodings)维度是很低的。
R-CNN可以扩展到上千个类别,而不需要借用近似技术(如hashing)。即使有10万个类别,矩阵乘法在现代多核CPU上只需要10s而已。但这种高效不仅仅是因为使用了区域推荐和共享特征。
(3)训练阶段
作者在大型辅助数据集ILSVRC2012(没有bounding box labels)进行有监督预训练,性能十分接近krizhevsky等人的网络。
使用变形后的推荐区域进行微调,使用了随机梯度下降(初始学习率为0.001),替换掉了ImageNet专用的1000-way分类成,换成21-way,其中20代表VOC的类别数,1代表背景。对于所有的推荐区域,如果其和真实标注的框的IoU>= 0.5就认为是正例,否则就是负例。mini-batch的大小为128,统一包括32个正例窗口和96个背景窗口。
使用IoU阈值来标注区域,作者选择阈值为0.3,低于0.3即为负例。由于训练数据太大,难以装进内存,作者选择了标准的hard negative mining method(难负例挖掘算法,用途就是正负例数量不均衡,而负例分散代表性又不够的问题,hard negative就是每次把那些顽固的棘手的错误,再送回去继续练,练到你的成绩不再提升为止.这一个过程就叫做’hard negative mining’)
作者在补充材料讨论了为什么在fine-tunning和SVM训练这两个阶段定义得正负样例是不同的(fine-tunning阶段是由于CNN对小样本容易过拟合,需要大量训练数据,故对IoU限制宽松: IoU>0.5的建议框为正样本,否则为负样本; SVM这种机制是由于其适用于小样本训练,故对样本IoU限制严格:Ground Truth为正样本,与Ground Truth相交IoU<0.3的建议框为负样本)以及为什么训练一个分类器是必要的,而不只是简单地使用来自调优后的CNN的最终fc8层的输出(为什么单独训练了一个SVM而不是直接用softmax,作者提到,刚开始时只是用了ImageNet预训练了CNN,并用提取的特征训练了SVMs,此时用正负样本标记方法就是前面所述的0.3,后来刚开始使用fine-tuning时,也使用了这个方法,但是发现结果很差,于是通过调试选择了0.5这个方法,作者认为这样可以加大样本的数量,从而避免过拟合。然而,IoU大于0.5就作为正样本会导致网络定位准确度的下降,故使用了SVM来做检测,全部使用ground-truth样本作为正样本,且使用非正样本的,且IoU大于0.3的“hard negatives”,提高了定位的准确度)
(4)在PASCAL VOC 2010-12上的结果
作者在VOC2007的数据集上验证了所有的设计思想和参数处理,在VOC2012上训练和优化了SVMs
三.可视化、消融和错误模式
(1)可视化学习特征
作者采用一种简单的非参数化方法,直接展示网络学到的东西。这个想法挑选出一个特定单元(特征),然后把它当做一个正确类别的物体检测器来使用。
具体方法如下:
1.计算大约1000万个推荐区域的对应单元的激活值
2.按激活值进行排序,然后进行非最大值抑制
3.展示分值最高的若干个区域
作者可视化了第五层的池化层pool5,这也是卷及网络的最后一层,大小为6 x 6 x 256 = 9216,每个pool5单元对应的感受野为195×195。
(2)消融研究
注:ablation study 就是为了研究模型中所提出的一些结构是否有效而设计的实验。如你提出了某某结构,但是要想确定这个结构是否有利于最终的效果,那就要将去掉该结构的网络与加上该结构的网络所得到的结果进行对比,这就是ablation study。也就是(控制变量法)
此阶段主要研究三个layer,pool5上文有介绍,fc6是与pool5直接对接的全连接层,它和pool5的feature map(reshape成一个9216维度的向量)做了一个4096×9216的矩阵乘法,并添加了一个bias向量;fc7是网络的最后一层。跟fc6之间通过一个4096×4096的矩阵相乘。也是添加了bias向量和应用了ReLU。
(3)检测错误分析
与DPM相比,作者的错误明显更多的是由于定位不良,而不是与背景或其他对象类混淆。
(4)Bounding-box回归
作者训练了一个线性回归模型在给定一个选择区域的pool5特征时去预测一个新的检测窗口。
四.语义分割
为了计算CPMC区域上的特征,作者执行了三个策略(每个策略都先将矩形窗口变形到227×227大小):
1.完全忽略区域的形状(full ignore),直接在变形后的窗口上计算CNN特征,但是,这些特征忽略了区域的非矩形形状。两个区域也许包含相似的约束框却几乎没有重叠。
2.只计算前景遮罩(foreground mask)的CNN特征,将所有的背景像素替换成平均输入,这样减除平均值后他们就会变成0。
3.简单的并联全部(full)特征和前景(fg)特征;作者的实验验证了他们的互补性。
五.结论
作者取得这个性能主要通过两个各个方面:
1.应用了自底向上的候选框训练的高容量的卷积神经网络进行定位和分割物体。
2.使用在标签数据匮乏的情况下训练大规模神经网络的一个方法。
最后,将计算机视觉中经典的工具和深度学习(自底向上的推荐区域和卷积神经网络)组合是非常重要的。