title:Rich feature hierarchies for accurate object detection and semantic segmentation
题目:用于精确的目标检测和语义分割的丰富的特征层次结构
摘要
过去几年,在经典数据集PASCAL上,物体检测的效果已经达到了一个稳定水平。效果最好的方法是一个复杂的混合系统,它通常将多个低维图像特征和高维上下文环境结合起来。在这篇论文里,我们提出了一种简单并且可扩展的检测算法,这个算法可以将 mAP(1)在VOC 2012最好结果的基础上提高30%以上——达到了53.3%。我们的方法结合了两个关键的因素:(1) 在候选区域上自下而上使用高容量的卷积神经网络(CNNs)(网络容量:人工神经网络塑造复杂函数的能力),用以定位和分割对象。(2) 当带标签的训练数据不足时,先针对辅助任务进行有监督的预训练好的模型,加上在特定域上进行微调(6)后,就可以产生明显的性能提升。因为我们将候选区域(region proposals)与CNNs结合,因此我们将我们的方法称为 R-CNN(Regions with CNN features):具有CNN特性的候选区域。完整系统的源代码可以从:http://www.cs.berkeley.edu/~rbg/rcnn 获得。(作者也将R-CNN效果跟OverFeat 比较了一下(Overfeat是最近提出的在与我们相似的基于类似CNN架构的滑动窗口检测器),结果发现R-CNN在200类ILSVRC2013检测数据集上的性能明显优于Overfeat(2))
特征很重要。在过去十年,各类视觉识别任务的进展都很大程度取决于SIFT和HOG的使用。但是,如果我们观察经典的视觉识别任务(PASCAL VOC目标检测)上的性能表现,则通常公认的是,2010~2012年期间这方面的进度缓慢,在这期间只是通过构建一些集成系统和在一些成功方法上做一些小改动,收效甚微。
SIFT和HOG是块状方向直方图(blockwise orientation historgrams),它是一种表示方法,可以大致与V1(灵长类动物视觉通路的第一个皮质区域)中的复杂细胞相关联。但是我们知道识别发生在几个下游阶段(我们是先看到了一些特征,然后才意识到这是什么东西),这表明可能有层次化的,多阶段的过程用于计算特征,这些特征甚至具有更多的视觉识别信息。
Fukushima 的 “neocognitron”[19],是一种受生物学启发,用于模式识别的分层和转移不变的模型,算是在这方面最早的尝试。然而“neocognitron”缺乏一个有监督的训练算法。LeCun等人的工作表明基于反向传播的随机梯度下降(SGD)对训练卷积神经网络(CNNs)非常有效,CNNs被认为是一种“neocognitron”模型的扩展。
CNNs在1990年代被广泛使用,但是随着SVM的崛起而淡出研究主流。2012年,Krizhevsky等人在ILSVRC( ImageNet 大规模视觉识别挑战赛)上的出色表现(显示出了更高的图像分类精度),重新燃起了世界对CNNs的兴趣(AlexNet)。他们的成功源自于在120万个标签图像上训练了一个大型的CNN,并且结合了一些LeCun 的CNN中使用的一些小技巧(比如ReLU激活函数和Dropout正则化)。
这个ImageNet 的结果的重要性在ILSVRC2012 研讨会上得到了热烈的讨论。提炼出来的核心问题是:在ImageNet上的CNN分类结果在多大程度上能够推广应用到 PASCAL VOC挑战赛的目标检测结果上?
我们通过缩小图像分类和目标检测之间的差距,回答了这个问题。本论文是第一个说明在PASCAL VOC的目标检测任务上CNN比基于简单的HOG类似特征的系统有大幅的性能提升。为了达到这个结果,我们主要关注了两个问题:使用深度网络定位目标和在小规模的标注数据集上进行高容量的网络模型的训练。
与图像分类不同的是,检测需要定位一个图像内的许多物体。一个方法是将定位看作是回归问题。但Szegedy等人的工作(和我们一样),表明了这种策略在实际情况下那么并不是很有效(在VOC2007上他们的mAP是30.5%,而我们达到了58.5%)。另一个可替代的方法是构建一个滑动窗口探测器,通过这种方法使用CNNs至少已经有20年的时间了。通常用于一些限定的物体类别上,如人脸,行人等。为了保持高的空间分辨率,这些CNNs都仅采用了两个卷积层和两个池化层。我们本来也考虑过使用滑动窗口的方法,但是由于我们的网络层次更深(有五个卷积层),在输入图形上有非常大的感受野(195×195像素)和步长(32×32像素),这使得采用滑动窗口的方法精确定位成为一个开放的技术挑战。
相反,我们是通过使用“用候选区域的识别”的方法,解决了CNN的定位问题(这在目标检测和语义分割方面都取得了成功)。测试时,我们的方法为输入图像,生成了接近2000个类别无关的候选区域,利用CNN从每个候选区域抽取一个固定长度的特征向量,然后借助专门针对特定类别的线性SVM对每个候选区域进行分类。我们不考虑区域的大小,使用放射图像变形的方法来对每个候选区域产生一个固定长度的作为 CNN 输入的特征向量(也就是把不同大小的候选区域放到同一个大小)。图1 展示了我们方法的概述并突出介绍了一些实验结果。由于我们的系统结合了候选区域和CNNs,所以起名为R-CNN(regions with CNN features):具有CNN特征的候选区域。
图1:目标检测系统概述。我们的系统(1)接收一个输入图像,(2)抽取大约2000个从下到上的候选区域,(3)对于每一个大的候选区域使用一个大的CNN去计算特征,然后(4)使用特定类的线性SVM对每一个区域进行分类。R-CNN在PASCAL VOC 2010 上实现了一个平均精度(mAP)53.7%。为了比较,[39]使用相同的候选区域方法实现了35.1%的mAP,但是使用了空间金字塔和视觉词袋方法。
在本论文的更新版本中,我们通过在200类ILSVRC2013 检测数据集上运行R-CNN,对R-CNN和最近提出的OverFeat检测系统进行了直接的比较。OverFeat使用滑动窗口CNN进行检测,到目前为止是ILSVRC2013检测的最佳性能方法。我们发现R-CNN显著优于OverFeat,mAP分别为31.4%和24.3%。
目标检测中面对的第二个挑战是标记的数据太少,现在可获得的数据远远不够用于训练一个大型CNN。解决这个问题的传统方法是使用无监督进行预训练,然后进行有监督的微调。本文的第二个主要贡献是表明,在大辅助数据集(ILSVRC)上进行有监督的预训练,然后在小数据集(pascal)上进行领域特定的微调,这是在训练数据稀少的情况下的一个非常有效的训练高容量卷积神经网络的方法。我们的实验中,针对检测的微调将mAP调高了8个百分点。微调后,我们的系统在VOC2010上达到了 54%的 mAP,远远超过高度优化的基于 HOG的可变性部件模型(deformable part model,DPM(3))。我们还向读者指出 Donahue等人的同期工作,其研究表明,Krizhevsky 的CNN可以用作一个黑盒使用(无需进行微调)来进行特征提取,从而在某些识别任务(包括场景分类,细粒度子分类和领域自适应)上表现出出色的性能。
我们的系统也很高效。都是小型矩阵向量相乘和贪婪的非极大值抑制(NMS)这些特定类别的计算。这个计算特性源自于特征在不同类别之间的共享(对于不同类别,CNNs提取到的特征是一样的),这比之前使用的区域特征少了两个数量级的维度。
分析我们方法的失败案例,对进一步提高它很有帮助,所以我们借助 Hoiem等人的检测分析工具做实验结果的报告和分析。分析结果,我们发现,一个简单的边界框回归( bounding-box regression)方法,显著地减少了误定位,这是主要的错误模式。
介绍技术细节之前,我们提醒大家由于 R-CNN 是在候选区域上进行操作,所以可以很自然地扩展到语义分割任务上。只要很小的改动,我们就在 PASCAL VOC 语义分割任务上达到了很有竞争力的结果,在 VOC2011测试集上平均语义分割精度达到了 47.9%。
我们的物体检测系统包含三个模块,第一个,生成类别无关的候选区域,这些候选区域定义了一个可用于我们的检测器的候选检测区域的集合;第二个模块是一个大型卷积神经网络,用于从每个候选区域抽取一个固定长度的特征向量;第三个模块是一系列特定类别的线性SVM。在本节,我们将展示每个模块的设计,并介绍他们的测试阶段的用法,以及参数是如何学习的细节,最后给出在PASCAL VOC 2010~2012和 ILSVRC2013上的检测结果。
候选区域(region proposals)
近年来有很多研究都提出了生成类别无关候选区域的方法。比如:objectness(物体性),selective search(选择性搜索),category-independent object proposals(独立的候选对象),constrained parametric min-cuts(受限参最小剪切,CPMC),multi-scal combinatorial grouping(多尺度联合分组),以及Ciresan等人的方法,他将CNN用在规则间隔的方形剪裁以检测有丝分裂细胞,也算是一种特殊的候选区域类型。由于R-CNN对特定区域方法是不可知的,所以我们采用了选择性搜索以方便和前面的工作进行可控的比较。
特征提取(Feature extraction)
我们使用Krizhevsky等人所描述的CNN的一个Caffe实现版本对每个候选区域抽取了一个 4096维度的特征向量。把一个输入为减去均值的227×227大小的图片,通过五个卷积层和两个全连接层进行前向传播,最终得到了一个 4096维的特征向量。读者可以参考AlexNet获得更多的网络架构细节。
为了计算一个候选区域的特征,我们首先要对该区域内的图像转换成与CNN兼容的形式(其体系结构需要固定的227×227像素尺寸的输入)。这个转换有很多办法,我们使用了最简单的一种。无论候选区域是什么尺寸和宽高比,我们都会将其周围的紧密边界框中的所有像素变形成想要的尺寸。在变形之前,我们扩大紧密边界框,使得在变形大小处,在原始框周围正好有p个像素的扭曲图像上下文(我们使用p=16)。这种形变使得mAP提高了3到5个百分点,在补充资料中,作者对比了各向异性和各向同性缩放方法。图2显示了对变形的训练候选区域的随机抽样。在附录A中讨论了变形的替代方案。
在测试阶段,我们在测试集图像上使用 选择性搜索(selective search )抽取了2000个候选区域(实验中,我们使用了选择性搜索的快速模式)。我们对每一个候选区域变形,再通过CNN前向传播计算出特征。然后我们使用对每个类别训练出的SVM给整个特征向量中的每个类别打分。然后给出一张图像中所有的打分区域,然后使用NMS(每个类别都是独立进行的),拒绝掉一些和高分区域的IOU大于阈值的候选框。
运行时间分析
有两个特性让检测变得很高效。首先,所有类别共享所有CNN参数。其次,通过CNN计算的特征向量相比其他通用方法(比如spatial pyramids with bag-of-visual-word encodings 带有视觉词袋编码的空间金字塔)相比,维度是更低。例如,UVA检测系统的使用的特征比我们的特征要大两个数量级(360K vs 4K维度)。
这种共享的结果就是计算候选区域和特征的耗时,可以分摊到所有类别的头上(GPU:每张图13s,CPU:每张图53s)。唯一的特定类别有关的计算是特征向量和SVM权重和非极大值抑制之间的点积。实践中,图像的所有的点积都可以分批成单个矩阵-矩阵的乘积运算。特征矩阵的典型大小是 2000×4096,SVM权重的矩阵是 4096×N,其中N是类别的数量。
分析表明R-CNN可以扩展到上千个类别,而不需要借用近似技术(如哈希)。即使有10万个类别,矩阵乘法在现代多核CPU上只需要 10s 而已。但是这种高效不仅仅是因为使用了候选区域和共享特性的结果。由于较高维度的特征,UVA系统存储 100k线性预测器,需要 134G的内存,而我们只要 1.5GB,UVA比我们高了两个数量级。
有趣的是R-CNN和最近 Dean等人使用 DPMs 和哈希的可扩展的检测方法的工作相比,他们用了1万个干扰类,每五分钟可以处理一张图片,在VOC 2007上的 mAP能达到 16%,而使用我们的方法,1万个检测器,可以在CPU上一分钟跑完,由于没有做近似,mAP将保持在 59%。(第3.2节)
有监督的预训练
我们有区别的在仅使用图像级注释的大型辅助数据集(ILSVRC212分类)上预训练CNN(边界框标签不可用于该数据)。预训练采用了开源的Caffe的CNN库。总体来说,我们的CNN十分接近Krizhevsky等人的网络的性能,在ILSVRC2012分类验证集在top-1错误率上比他们高2.2%。这种差异主要来自于训练过程的简化。
特征领域的微调
为了让我们的CNN适应新的任务(即检测任务)和新的领域(变形后的候选窗口)。我们只使用变形后的候选区域对CNN参数进行随机梯度下降(SGD)训练。除了用随机初始化的(N+1)类分类层(其中N是对象类的数目,加上背景的1)来替换CNN的ImageNet特定的1000类分类层之外,CNN架构没有改变。对于VOC来说,N = 20,并且对于ILSVRC2013来说,N = 200。我们将所有候选区域与真实框重叠大于等于0.5的作为该框类的正例,其余的作为负例。我们以0.01的学习率(初始预训练率的1/10)开始SGD,这允许微调进行而不破坏初始化。在每一次的SGD迭代中,我们均匀地采样32个正窗口(在所有类上),和96个背景窗口以构造大小为128的小批量。我们将采样偏向正窗口,因为它们与背景相比非常少。
目标类别分类器
考虑训练一个检测汽车的二分类器。很显然,紧紧包围一个汽车的图像应该是一个正例。同样的,与汽车无关的背景区域应该是一个负例。较为不明确的是,怎么样标注那些之和汽车部分重叠的区域,我们使用IoU重叠阈来解决这个问题,低于这个阈值的就是负例。这个阈值我们选择了 0.3,是在验证集上基于{0, 0.1,…0.5}通过网格搜索得到的。我们发现小心地选择这个阈值是非常重要的。如果将其设置为0.5,可以降低mAP 5个点。相似地,设置为0,就会降低4个点。正例仅仅被定义为每个类的真实边界框。
Tips:IOU < 0.3 被作为负例,ground-truth是正例,其余的全部丢弃。
一旦特征提取出来,并应用标签数据,我们优化了每个类的线性SVM。由于训练数据太大,难以装进内存,我们选择了标准的 hard negative mining method(4),难负例挖掘算法收敛很快,实践中只需要在所有图像上经过一轮训练,mAP就可以基本停止增加了。
在附录B中,我们讨论了为什么在微调与SVM训练中正例和负例的定义不同。我们还将讨论为什么必须训练检测SVM的权衡,而不是简单地使用经过微调的CNN的最后一层(fc8)softmax的输出。(原因(5))
遵循PASCAL VOC 最佳实践[15],我们验证了VOC 2007数据集(第3.2节)中所有的设计决策和超参数。对于在VOC 2010-12数据集上的最后的结果,我们微调了VOC 2012训练上的CNN并且在VOC 2012 训练验证集上优化了我们的检测SVM。我们对于两个主要算法变量(有和没有边界回归)中的每一个都只向评估服务器提交测试结果一次。
表1展示了在VOC 2010的完整结果,我们将自己的方法同四种强基准方法做对比,其中包括SegDPM,这种方法将DPM检测器与语义分割系统的输出相结合并且使用了附加的检测器上下文和图像分类器重新评分。更加恰当的是比较同Uijling的UVA系统比较,因为我们的系统也是用了相同的候选区域算法。对于候选框区域的分类,他们的方法是通过构建一个四层的空间金字塔,并且用密集采样的SIFT,扩展OpponentSIFT,和RGBSIFT描述符来填充他们,每个矢量都用4000个字的编码本来进行量化。使用一个直方图相交核的SVM进行分类。与它们的多特征,非线性核SVM方法相比,我们在mAP上实现了一个大的改进,从35.1%到 53.7% mAP,同时也快得多(第2.2节)。我们的方法在VOC 2011/12测试中达到了相似的性能(53.3%的mAP)。
表1:在2010测试集上检测平均精度(%),R-CNN与UVA和Regionlet最直接对比,因为所有的方法都使用选择性搜索候选区域。边界框回归会在C节描述。在提交的时候,SegDPM是在PASCAL VOC排行榜上表现最出色的。DPM和SegDPM使用了一种其它方法没有使用的上下文重新评估的方法。
我们在200类ILSVRC2013检测数据集上运行R-CNN,使用了与我们使用的pascalVOC相同的系统超参数。我们遵循相同的方案,只向ILSVRC2013评估服务器提交测试结果两次,一次有,一次没有边界框回归。
图3比较了R-CNN与ILSVRC2013竞赛中的条目以及竞赛后的OverFeat结果。R-CNN实现了31.4%的mAP,显著超过了OverFeat的24.3%的次优结果。为了给出对类别分布的一个感觉,呈现了一个盒图,并且在论文的结尾处的表8里出现了类别AP的表格。大多数的竞赛提交(OverFeat, NEC-MU, UvAEuvision, Toronto A, and UIUC- IFP)都使用了卷积神经网络,指示在CNN如何应用于对象检测方面存在显著差异,导致了极大变化的结果。
在第4节,我们概述了ILSVRC2013检测数据集,并提供了在运行R-CNN时我们做出的选择的详细信息。
图3: **(左)在ILSVRC2013检测测试数据集上的mAP。**带*的方法都是使用了外部训练数据(所有情况下都是从ILSVRC分类数据集中的图像和标签)。 **(右)每种方法的200个平均精度值的箱线图。**未显示竞争后的OverFeat结果的框图,因为每类的APs尚不可用(R-CNN的每类AP在表8中,也包含在上传到arXiv.org的技术报告源中;见R-CNN- ILSVRC2013-APs.txt)。红线标示中值AP,箱底和箱顶是25和75百分位数。虚线延伸到每种方法的最小和最大的AP值。每个AP被绘制成虚线上的一个绿点(最好用数字缩放)。
第一层的过滤器可以直接被可视化并且很容易理解。它们捕获有方向的边和对比色。难以理解的是后面的层,Zeiler and Fgrgus 在[42]上提出了一种可视化的很棒的反卷积方法。我们则使用了一种简单的(和互补的)非参数化方法,直接显示了网络学习的内容。
这个想法就是在网络中单独出一个特定的单元(特征),然后把它当做一个正确类别的目标检测器来使用。方法是这样的,先计算所有抽取出来的候选区域(大约1000万),计算每个区域所导致的对应单元的激活值,然后按激活值对这些区域进行排序,然后进行非最大值抑制,最后展示分值最高的若干个区域。这个方法让被选中的单元在遇到它想激活的输入时“自己说话”。我们避免平均化是为了看到不同的视觉模式,并且可以获得由单元计算的不变性的洞察。
我们可视化了第五层的池化层 pool5,是卷积网络的最后一个卷积层的最大池化的输出,其特征映射的大小是 6×6×256 = 9216维。忽略边界的影响,每一个第5层的池化单元在原始的227 × 227个像素输入上都有一个195 × 195像素的感受野。一个中心的pool5的单元具有几乎全局的视野,而一个靠近边缘的单元具有更小的,剪裁的支持。
图4中的每一行显示了我们在VOC 2007 trainval上微调的CNN的一个pool6单元的前16个激活值。256个功能独特的单元中的六个被可视化(附录D包括更多)。选择这些单元来显示网络学习的代表性样本。在第二行中,我们看到在狗脸和点阵上触发的单元。对应于第三行的单元是一个红色斑点检测器。还有用于人脸的检测器和更多抽象的图案,例如文本和带有窗口的三角形结构。网络似乎学习将少量的调整的类特征与形状,纹理,和材料属性的分布式表式组合在一起的表示。随后的全连接层fc具有6对这些丰富特征的大量组合进行建模的能力。
图4:6个 pool5pool5单元的靠前的区域。感受野和活性值以白色画出。某些单元与概念对齐,例如人(第1行)或文本(4)。其他单元捕获纹理和材料属性,例如点组(2)和特殊的反射(6)
tips:Albation study 就是为了研究模型中所提出的一些结构是否有效而设计的实验。如你提出了某某结构,但是要想确定这个结构是否有利于最终的效果,那就要将去掉该结构的网络与加上该结构的网络所得到的结果进行对比,这就是 ablation study,也就是控制变量法。
没有微调的各层性能
为了理解哪些层对于检测的性能十分重要,我们分析了CNN最后三层的每一层在 VOC 2007上面的结果。Pool5在3.1节 中做过简短的表述。最后两层下面来总结一下。
fc6 是一个与pool5连接的全连接层。为了计算特征,它和 pool5的 feature map(reshape成一个 9216维度的向量)做了一个 4096×9216的矩阵乘法(将4096×9216权重矩阵乘以pool5特征映射),并添加了一个 bias 向量。这个中间的向量是逐个组件的半波整流(component wise half wave rectified)(RELU (x <- max(0, x)))
fc7是网络的最后一层,它通过将由fc6计算的特征乘以4096 × 4096的权重矩阵,并且类似的添加了 bias 向量和应用了RELU。
我们先来看看没有微调的CNN在PASCAL 上的表现,即所有的CNN的参数仅在ILSVRC2012上进行预训练。分析每一层的性能(表2 1-3行)显示,来自于fc7的特征泛化能力不如fc6的特征。这意味着29%的CNN参数,也就是 1680万的参数可以移除掉,而且不影响mAP。更令人惊讶的是,即使同时移除fc6和fc7,仅仅使用pool5的特征,只使用CNN参数的6%也能有非常好的结果。可见CNN的主要表示能力来自于卷积层,而不是全连接层。这个发现提醒我们也许可以在计算一个任意尺寸的图片的稠密特征图(dense feature map)时仅仅使用CNN的卷积层。这种表示可以直接在 pool5 的特征上进行滑动窗口检测的实验。
表2:**在VOC 2007测试集上的检测的平均精度(%)。**1-3行展示的是没有经过微调的R-CNN的性能。4-6行展示了在ILSVRC2012上预训练过,并且在VOC2007trainval上微调过的CNN的结果。7行包括一个简单的边界框回归(BBbox)阶段,其减少了定位错误(C节)。8-10行展示了DPM方法作为一个强基准线。第一个仅使用了HOG,然而接下来的2个使用了不同的特征学习方法来增强或替换HOG。
微调后的各层性能
我们现在看看微调后在VOC 2007上的结果表现。提升非常明显(表2 4-6行),mAP提升了8个百分点,达到了54.2%。fc6和fc7的提升明显优于pool5,这说明 pool5从ImageNet学习的特征通用性很强,在它之上层的大部分提升主要是在学习领域相关的非线性分类器。
对比最近的特征学习方法
相当少的特征学习方法应用于VOC数据集。我们找到的两个最近的方法都是基于固定探测模型。为了参照的需要,我们也将基于基本HOG的DFM方法的结果加入比较。
第一种DPM特征学习方法DPM ST[28]用“草图标记”概率的直方图来增强HOG特征。直观来说,一个草图标记就是穿过图像块中心的轮廓的紧密分布。草图标记概率在每个像素处由随机森林计算,该森林被训练成将35×35像素块分类成150个草图标志或背景中的一个。
第二种方法,DPM HSC[31],用稀疏编码(HSC)的直方图代替HOG。为了计算HSC,使用100个7*7像素(灰度)原子的学习字典来解决每个像素处的稀疏码激活。所得激活以三种方式(全半波和两半波)来进行修正,空间池化,单元 l2l2正则化,然后是功率变换( x←sign(x)|x|α)。
所有的R-CNN变体都要强于这三个 DPM 方法(表2,8~10行),包括两种特征学习的方法。与最新版本的 DPM方法比较,我们的mAP要多大约20个百分点,61%的相对提升。略图表征与HOG相结合的方法比单纯HOG的性能高出2.5%,而HSC的方法相对于HOG提升4个百分点(当内在的与他们自己的DPM基准比较,全都是用的非公共 DPM执行,这低于开源版本)。这些方法分别达到了 29.1%和34.3%。
本文的大部分结果使用了m Krizhevsky等人的网络架构。然而,我们发现,结构的选择对R-CNN的检测性能有很大的影响。在表3中,我们展示了使用Simonyan和Zisserman最近提出的16层深度网络的VOC2007测试结果。该网络是在最近的ILSVRC2014年分类挑战中表现最好的网络之一。该网络由13层3×3卷积核组成,其间有5个最大池化层,最后有3个全连接层。对于OxfordNet,我们将此网络称为“O-Net”,对于TorontoNet的基线称为“T-Net”。
为了在R-CNN中使用O-Net,我们从Caffe Model Zoo下载了VGGILSVRC16层模型的公开的预训练网络权值。然后,我们使用与T-Net相同的协议对网络进行了微调。唯一的区别是根据需要使用更小的小批量(24个示例),以适应GPU内存。表3中的结果显示,O-Net的RCNN明显优于T-Net的R-CNN,mAP从58.5%提高到66.0%。然而,在计算时间方面有一个相当大的缺点,O-Net的正向传递所花费的时间大约是T-Net的7倍。
**表3:两个不同的CNN结构在VOC2007上测试集上目标检测的平均精度(%)。**前两行是来自于表2,使用了Krizhevsky等人的结构(T-Net)。3,4行使用了最近由Simonyan and Zisserman(O-Net)提出的16层的结构。
为了揭示出我们方法的错误之处,我们使用Hoiem等人提出的优秀的检测分析工具,来理解调参是怎么改变他们的,并且看看我们的错误模式与DPM的比较。这个分析方法全部的介绍超出了本文的介绍范围,我们建议读者查阅文献[23]来了解更加详细的介绍(例如“normalized AP”的介绍),由于这些分析是不太有关联性,所以我们放在图4和图5的题注里讨论。
图5:排名最高的FP类型的分布。每幅图展示了FP类型的演变分布,因为更多的FP按照分数递减的顺序被考虑。每个FP分类成4种类型中的1种:Loc-poor定位(和正确类别的IoU重叠在0.1和0.5,或重复);Sim-与相似的类别混淆;Oth-与不同对象类别的混淆;BG-在背景上触发的FP。与DPM相比(参见[23]),我们的错误更多的是来自于差的定位,而不是与背景或其他对象类的混淆,表明CNN特征比HOG更有区别性。差的定位可能是由于我们使用自下而上的候选区域和从预训练CNN进行整体图像分类学习的位置不变性。第三列显示了我们的简单的边界框回归方法如何修复很多定位错误。
**图6:对对象特征的敏感性。**每个图展示出了六个不同对象特征(遮挡,截断,边界框区域,宽高比,视角,部分可见性)内的最高和最低的表现子集的平均(所有类)归一化AP。我们在图上展示了我们的方法(R-CNN),带有和不带有fine-tuning(FT)和边界框回归(BB),以及DPM 的voc-release5。总的来说,微调并不会降低敏感性(最大值和最小值之间的差值),但是对于几乎所有的特性,基本上改善了最高和最低性能子集。这表明微调不仅仅改善了长宽比和边界框区域的最代性能子集,因为人们可能基于我们如何扭曲网络输入来进行推测。相反,微调改变了所有类别的鲁棒性,包括遮挡,截断,视角,部分可见。
基于错误分析,我们实现了一个简单的用于减少定位错误的方法。受在DPM中使用的边界框回归的启发,在给定了一个选择性搜索候选区域的pool5特征的情况下,我们训练了一个线性回归模型用来预测一个新的检测窗口。完整细节在附录C中给出。表1,表2和表5的结果表明这种简单的方法改善了大量错误定位的检测,将mAP提高了3至4个点。
在文章最后的图8和图9上展示了ILSVRC2013上的定性的检测结果。每一个图像都是从val2数据集上随机抽取的,并且在所有检测器上精度大于0.5的检测都展示出来了。注意到,这些不是策划的,并且在行动上给了检测器一个现实印象。更加定性的结果展示在图10和图11中,并且这些被策划过。我们选择的每一张图片,都是因为它包含了有趣的,令人惊讶的,或令人欣喜的结果。在这里,同样的,所有精度大于0.5的检测都展示出来的。
图8:对 val2集合的示例检测,使用了从在val2上实现了31.0%mAP的配置。每个图像都是被随机抽取的(都没有进行过策划)。所有精度大于0.5的检测都展示出来了。每一个检测都标注有预测的类和从检测的precision-recall曲线上的精确值。建议放大来看。
图9:更加随机的选择的样本。看图8的标题以获得更详细的描述。建议放大来看。
图10:策划过的样例。每一张选择的图片,都是因为我们发现他们印象深刻,令人惊叹,非常有趣,或者使人开心。建议放大来看。
图11:更多策划过的样例。详情请看图10的标题。建议放大来看。
在第2节中,我们展示了在ILSVRC2013检测数据集上的结果。这个数据集和PASCAL VOC数据集有很少是一样的,需要选择怎样去用它。因为这些决定是不容易的,我们在本节中讨论。
ILSVRC2013数据集被划分成3个集合:训练集(395,918),验证集(20,121),和测试集(40,152),每一个集合的图像的数量都在括号中。val和test的拆分是从相同的图像分布中绘制的。这些图像是类似于场景的,并且在复杂度上与PASCAL VOC的图像相似(物体的数量,混乱的数量,姿势的变化等等)。val和test拆分具有详细的注解,意味着在每个图像中,所有200类的所有实例都用边界框标记。相反,训练集是从ILSVRC2013分类图像分布中提取到的。这些图像具有更多变化的复杂性,单个居中物体的图像较多。不像val和test,训练图像没有完全标注(由于它们的数量较多)。在任意给定的图像中,这200类的实例有可能标注了也有可能没有标注。除了这些图像集合,每一个类都有一个额外的负例图像的集合。手动检查这些负例图像,以验证它们不包含他们关联类的任何实例。负例图像集合在本工作中没有被用到。关于ILSVRC是怎么收集和标注的更多的信息可以在[11,36]中查看到。
这些拆分的本质为训练R-CNN提供了大量的选择。训练图像不能用于hard negative mining,因为标注是不充分的。负例应该来自于哪里呢?训练图像具有与val和test不同的统计量。训练图像应该被使用吗?如果是,以什么程度呢?虽然我们没有完全评估大量的选择,基于以前的经验,我们提出了似乎是最明显的路径。
我们的一般策略就是大量依赖于val集,并且使用训练图像中的一些作为一个正例的辅助源。为了将val用于训练和验证,我们将它大致分成相等的大小“val1”和”val2”集合。因为在val中一些类具有非常少的样本(最小的只有31个,并且一半的少于110个),重要的是产生大致类均衡的分区。为此,产生了大量的候选拆分并且选择了最大相关类不平衡最小的拆分。通过使用它们的类计数作为特征来对val图像进行聚类,然后进行可以改进分割平衡的随机局部搜索来生成每个候选分割。这里使用的特定分裂具有约11%的最大相对不平衡和4%的中值相对不平衡。val1和val2的分割和用于生成他们的代码将会被公开,以允许其它研究人员比较其在本报告中使用的val分割的方法。
我们遵循用于在PASCAL上检测的相同的候选区域的方法。对val1,val2和test上的每一个图像(但不是训练中的图像),以“快速模式”运行选择性搜索。需要一个小的修改来处理选择性搜索不是尺度不变性的事实,因此产生的候选区域的数量取决于图像分辨率。ILSVRC图像大小范围从很小到几个几兆像素,因此我们在运行选择性搜索之前将每个图像调整为固定宽度(500pixels)。在val上,选择性搜索在每幅图像上得到了平均2403个候选区域,具有所有的真实的边界框的91.6%的召回率(0.5的IoU的阈值)。这个召回率明显低于在PASCAL上面的,在PASCAL上大约是98%,表明在候选区域阶段还有很大的提升。
对于训练数据,我们形成了一组图像和框,其包括来自val1的所有选择性搜索和真实框,以及来自训练的每个类别的多达N个真实框(如果在训练中,一个类有少于N个真实框,然后这些我们就都要了)。我们将会称这个图像和框的数据集为val1+trainN。在消融研究中,我们在val2上为N∈0,500,1000展示了mAP(4.5节)。
在R-CNN中在三个过程中需要训练数据:(1)CNN微调,(2)检测器SVM的训练,和(3)边界框回归训练。CNN微调使用与用于PASCAL VOC上的完全相同的配置,在val1+trainN上运行了50k的SGD迭代。使用Caffe在在单个NVIDIA Tesla K20上花费了13个小时进行微调。对于SVM训练,来自val1+trainN的所有真实值被用于它们各自类的正例。对从val1随机选择的5000个图像的子集进行hard negative mining。最初的实验表明,对比于一个5000个图像的子集(大约一半),从所有的val1上挖掘负例,仅仅造成了在mAP上0.5个百分点的下降,然而将SVM的训练时间减少了一半。没有从训练集取得负例,因为标注不详尽。未使用额外的验证的负例图像的集合。边界框回归是在val1上训练的。
在提交结果到评估服务器之前,我们使用上述训练数据验证了数据使用选择以及在val2集合上的微调和边界框回归的效果。所有的系统超参数都与PASCAL中使用的值相同(例如,SVM C超参数,在区域扭曲中的填充,NMS阈值,边界框回归超参数)。毫无疑问,一些超参数的选择对于ILSVRC来说是次优,然而这项工作的目标是在ILSVRC上产生初步的R-CNN结果,而没有广泛的数据集调整。在val2上选择了最好的选择之后,我们提交给了ILSVRC2013评估服务器两个结果文件。第一个是没有边界框回归的,第二个是带有边界框回归的。对于这些提交,我们扩展了SVM和边界框回归训练集去分别使用val+train1k和val。我们使用在val1+train1k微调的CNN来避免重新运行微调和特征计算。
表4显示了不同数量的训练数据,微调和边界框回归的效果的消融研究。第一个观察到的是,在val2上的mAP和在测试上的mAP匹配的非常接近。这使得我们相信在val2上的mAP是测试集性能的一个很好的指标。第一个结果,20.9%,是R-CNN使用在ILSVRC2012分类数据集上预训练的CNN实现的(没有微调),并且允许访问val1中的少量训练集(回想在val1中的一半的类具有15到55个实例)。将训练集扩展到val1+trainN将性能提高到24.1%,在N=500和N=1000之间基本没有差别。使用仅仅来自val1中的样例微调CNN给出了26.5%的适度改进,然而由于少量的正训练示例,可能存在着显著的过拟合。将微调集扩展到val1+train1k,从而从训练集中每类增加了1000个正例,效果显著,将mAP提升到29.7%。边界框回归将结果提高到31.0%,这是在PASCAL中观察到的相对较小的增益。
表4:ILSVRC2013消融研究,不同的数据使用选择,微调,和边界回归
在R-CNN和OverFeat之间有一个有趣的关系:OverFeat可以看成是R-CNN的一个特殊的例子。如果要用正规的正方形区域的多尺度金字塔替换选择搜索候选区域,并且将每类的边界框回归改成单一的边界框回归,则系统则会非常类似(以某些潜在的重要的不同为模,如他们是怎么训练的:CNN检测微调,使用SVM等)。值得注意的是OverFeat比R-CNN具有显著的速度优势:基于[34]引用的每个图像2秒的数字,它快了大约9倍。该速度来自于OverFeat的滑动窗口(即候选区域)在图像不级别不扭曲的事实,因此在重叠窗口之间可以容易的共享计算。通过在任意大小的输入上以卷积的方式运行整个网络来实现共享。加快R-CNN应该可以以各种方法,并且作为未来的工作。
区域分类是用于语义分割的标准技术,允许我们容易地将R-CNN应用于PASCAL VOC 分割挑战中。为了促进与当前领先的语义分割系统(称为O2P二阶池化)的直接比较[4],我们研究了他们的开源框架。O2P使用CPMC为每个图像产生了150个候选区域,然后使用支持向量回归(SVR)为每个类预测每个区域的质量。他们的方法的高性能是由于CPMC区域的质量和多个特征类型的强大的二级池化(丰富的SIFT和LBP变体)。我们也注意到Farabet等人使用一个CNN作为多尺度每像素分类器证明了良好的结果。我们遵循[2,4]并扩展PASCAL分割训练集以包括由Hariharan等人提供的额外注释。设计决策和超参数在VOC 2011验证集上进行了交叉验证。最终测试结果仅评估一次。
**用于分割的CNN特征。**我们评估了三种计算CPMC区域特征的策略,所有的这些策略都是通过将该区域周围的矩形窗口扭曲成227×227来开始的。第一个策略(full)忽略了区域的形状,并且直接在扭曲的窗口上计算CNN特征,正如我们为检测做的一样。然而,这些特征忽略了区域的非矩形形状。两个区域可能有非常相似的边界框,然而几乎没有重叠。因此,第二种策略(fg)仅仅在区域的前景掩码上计算CNN特征。我们用平均输入替换背景,使得背景区域在减去平均值后为零。第三种策略(full+fgfull+fg)仅仅简单地连接了fullfull和fgfg特征;我们的实验结果验证了他们的互补性。
**在VOC 2011上的结果。**表5显示了我们对VOC 2011验证集与O2P相比的结果的总结。(完整的每个类别的结果请看附录E)在每个特征计算策略中,fc6总是胜过fc7,并且以下的讨论都涉及fc6的特征。fg策略稍稍优于fullfull策略,表明掩蔽区域形状提供更强的信号,匹配我们的直觉。然而,full+fg策略实现了47.9%的平均准确度,我们最好的结果是4.2%的边界(也适度超过了O2P),表明即使给定fg特征,由full特征提供的上下文也是有高度信息的。
表5:在VOC 2011验证集上的分割平均准确性(%)。第一列展示了 O2PO2P;2-7列使用了我们在ILSVRC2012上预训练的CNN。
在表6中,我们展示了在VOC 2011测试集上的结果,将我们的表现最好的方法, fc6(full+fg),与两个强基准线进行了对比。我们的方法在21个类别中的11个达到最高的分割精度,并且达到了最高的总体分割精度47.9%,在所有类别中平均得来(但是在任何合理的误差范围内可能与 O2P结果相关)。通过微调可能实现更好的性能。
表6:在VOC2011测试集上的分割准确性(%)。我们对比了两个强大的基线:[2]中的“Region and Parts”(R&P)方法,和[4]中的second-order pooling( O2P)方法。没有任何微调,我们的CNN实现了最好的分割性能,优于P&R并且大致匹配了 O2P。
在最近几年,目标检测性能停滞不前。最好的系统是将多个低级图像特征与来自于目标检测器和场景分类器的高级上下文组合在一起的复杂集合。本文提出了一种简单的和可扩展的对象检测算法,与PASCAL VOC2012上的最佳以前的结果相比提供了30%的相对改进。
我们通过两个见解实现了这一表现。第一个是将高容量的卷积神经网络应用于自下而上的候选区域以便定位和分割对象。第二个就是当标记的训练数据不足时训练大的CNN的范例。我们表明,对于一个具有丰富数据集(图像分类)的辅助任务,带监督的预训练网络,并且为数据稀缺的(检测)的目标任务微调网络是非常有效的。我们推测,“监督的预训练/特定领域的微调”范例将对于各种数据稀缺的视觉问题都非常有效。
我们最后指出,我们通过使用计算机视觉和深度学习的经典工具(从底向上的候选区域和卷积神经网络)的组合实现了这些结果是非常重要的。这两者不是反对科学家探究的线,而是自然的和不可避免的伙伴。
致谢
这项研究得到了DARPA Mind的Eye和MSEE计划的部分支持,由NSF授予IIS-0905647,IIS-1134072和IIS-1212798,MURI N000014-10-1-0933的支持,以及丰田的支持。 本研究中使用的GPU由NVIDIA Corporation慷慨捐赠。
这项工作中用到的卷积神经网络需要一个固定的227×227的像素。对于检测来说,我们考虑到候选对象是任意大小的图像矩形。我们评估了两种用于将候选目标转换成一个有效的CNN输入的方法。
第一个方法(“具有上下文的最紧密方框”)将每个候选对象包围在最紧凑的正方形内,然后将包含在该正方形中的图像(各向同性)绽放为CNN的输入大小。 图7的B列展示了这种改变。此方法的一个变种(“没有上下文的最紧凑的方形”)排除了原始候选对象周围的图像内容。图7的(C)列展示了这种改变。第二种方法(“warp”)将每个候选对象各向异性地缩放为CNN输入大小。图7的(D)列展示了这种扭曲转换。
图7:不同的候选对象转换。(A)相对于经变换的CNN的输入的具有实际大小的原始候选对象;(B)最紧密的带有上下文的方格;(C)不带有上下文的最紧密的方框;(D)扭曲;在每一列和候选示例中,顶行对应于上下文填充的 p=0个像素,而底行具有 p=16个上下文填充的像素。
对于这些变换中的每一个,我们还考虑在原始的候选对象周围包括上额外的图像上下文。上下文填充量( p)被定义为在经过变换了的输入坐标系中原始候选对象周围的边界大小。图7展示了在每个示例的顶行p=0并且在底行 p=16。在所有方法中,如果源矩阵扩展延伸超过了图像,则丢失的数据就由图像均值替代(然后在将图像输入到CNN之前被减去)。一组实验表明,使用上下文填充( p=16像素)的扭曲优于替代方案很多(3-5mAP)。显然,更多的选择也是有可能的,包括使用复制而不是平均值进行填充。对这些替代品的详尽评价留作未来的工作。
两种设计选择值得进一步的讨论。为什么为微调CNN和训练对象检测SVM时定义的正例和负例是不同的?简单回顾一下定义,对于微调,我们将每一个候选对象映射到它具有最大的IoU重叠(如果有)真实实例上,并且如果IoU至少为0.5,就将它标记为匹配的真实类的正例。所有其它的候选区域都被标记为“背景”(即所有类别的负例)。相反的,对于训练SVMs,我们只把真实框作为它们各自类别和候选标签的正例,与一个类的所有实例的IoU少于0.3的作为该类的负例。落入灰色区域(超过0.3IoU重叠,但不是真实值)的候选区域被忽略。
从历史上来说,我们得出这些定义,因为我们开始通过由ImageNet预训练的CNN计算的特征训练SVM,因此在当时没有考虑微调。在该设置中,我们发现我们的用于训练SVM的特定的标签定义在我们评估的选项集(其中包括我们现在用于微调的配置)中是最佳的。当我们开始使用微调时,我们使用与SVM训练时使用的相同的正例和负例。然而,我们发现结果比使用我们现在的正例和负例的定义要差的多。
我们的假设是在正例和负例如何定义上面的不同并不是根本重要的,而是来自于微调数据有限这个事实。我们目前的方案引入了许多“抖动”方案(这些候选值具有0.5到1之间的重叠,但不是真实值),这将正例的数量扩展了大约30倍。我们推测当微调整个网络而避免过拟合的话,是需要这个大的集合的。然而,我们也注意到使用这些抖动样例也可能是次优的,因为这些网络没有微调以精确定位。
这也导致了第二个问题,为什么微调后训练SVM?简单地应用微调网络的最后一层(这是一种21路的softmax回归分类器)作为对象检测器是非常清晰的。我们尝试这么做了,发现在VOC 2007上的性能从54.2%mAP降到50.9%mAP。这种性能的下降可能是由于几种因素的结合,包括在微调中使用的微调的定义不强调精确定位,并且训练softmax分类器是在随机采样的负例上进行的,而不是在用于SVM训练使用的“hard negative”的子集中进行的。
该结果表明,在微调之后不训练SVM可能会获得接近相同水平的性能。我们推测通过一些额外的对微调的调整,剩余的表现差距可能会被关闭。如果是真的话,这将简化和加速R-CNN训练,而在检测性能上不会有损失。
对于训练对(P,G)的回归目标 t∗定义如下:
作为一种标准的正则化最小二乘问题,这可以以封闭形式有效地解决。
我们在实现边界框回归的时候发现了两个微妙的问题。第一个就是正则化是非常重要的:基于验证集,我们设置 λ=1000。第二个问题是,在选择使用哪个训练对(P;G)时必须小心。直观地,如果远离所有的真实框,那么将P转换到真实框G的任务就没有意义。使用像P这样的例子将会导致一个无望的学习问题。因此,我们只从这样的候选P中进行学习,其至少与一个真实框离的比较近。我们通过将P分配给真实框G,当前仅当重叠大于阈值(我们使用一个验证集设置成0.6)时,它与其具有最大的IoU重叠(以防重叠超过一个)。所有未分配的候选区域都被丢弃。对于每一个对象类我们只做一次,以便学习一组特定类边界框的回归器。
在测试的时候,我们为每一个候选框打分,并且预测一次它的新检测窗口。原则上来说,我们可以迭代这个过程(即,为新得到的预测框重新打分,然后从它再预测一个新的边界框,以此类推)。然而,我们发现迭代没有改善结果。
图12为20个pool5单元展示了附加的可视化。对于每一个单元来说,我们展示了可以最大激活VOC 2007 测试集的全部的大约1000万个区域中的24个候选区域。我们在6×6×256维的pool5特征图上为每个单元都标记了它的(y,x,channel)位置。在每个通道内,CNN计算输入区域的完全相同的函数,
图12:我们展示了在VOC2007测试中大约1000万个候选区域中的24个候选区域,其最强烈地激活20个单元中的每一个。每个剪辑都用 6∗6∗256维的 pool5特征图的单元(y, x, channel)的位置标记。每一个图像区域都用白色的单元的接受场的覆盖图绘制。激活值(我们通过除以通道中所有单元的最大激活值来进行归一化)显示在接受场的左上角。建议放大来看
在表7中,我们展示了我们6个分割方法中的每一个(除了O2P方法)在VOC 2011val集上的每类分割准确度。这些结果展示了对于20个PASCAL类别加上背景类,哪一个方法是最强的。
当在辅助数据集上进行训练时,一个问题是它与测试集之间可能存在冗余。即使对象检测和整个图像分类的任务有很大的不同,为了使这种交叉冗余不那么令人担忧,我们仍然进行了彻底的调查,量化了PASCAL测试图像包含在ILSVRC2012训练和验证集的程度。我们发现可能对那些有兴趣使用ILSVRC2012作为PASCAL图像分类任务的训练数据的研究人员有用。我们对重复(和近重复)图像执行了再次检查。第一个测试是基于flicker图像ID的精确匹配,这些ID包括在VOC 2007测试注释中(这些ID有意的为后续的PASCAL测试集保密)。所有的PASCAL图像,和约一半的ILSVRC图像,从flickr.com收集。这个检查证明了在4952有31个匹配(0.63%)。
第二个检测使用了GIST描述符匹配,在[13]中显示在大(>100万)图像集合中的近似图像检测中具有优异的性能。在[13]之后,我们计算了所有的ILSVRC2012trainval和PASCAL 2007测试图像的扭曲32*32像素版本上的GIST描述符。GIST描述符的欧氏距离最近邻匹配揭示了38个近似重复图像(包括通过flickrID匹配找到的31个)。匹配在JPEG压缩级别和分辨率略有变化,并且趋向较小程度的裁剪。这些发现表明重叠是小的,小于1%。对于VOC 2012来说,因为flickrID是不可用的,我们只使用了GIST匹配方法。基于GIST匹配,VOC 2012测试图像的1.5%是在ILSVRC 2012trainval中的。对于VOC 2012略高的比率可能是由于这两个数据集在时间上收集的比VOC 2007和ILSVRC 2012更接近。
本文跟踪的R-CNN的进度。为了帮助读者它是怎样随着时间改变的,这里是一个简明的更改日志描述了这些修定。
V1 最初的版本
V2 CVPR相机就绪版本。包括在检测性能上的大量改进,由以下带来的:(1)以更高的学习率开始微调(0.001而不是0.0001),(2)当准备CNN时使用上下文填充,(3)边界框回归用于修复定位误差。
V3 在ILSVRC 2013检测数据集上的结果,并且与OverFeat的比较被集成到几个章节内(主要在第2和第4节)。
V4 在附录B上的softmax对SVM的结果包含了一个错误,已经被修复了。我们要感谢Sergio Guadarrama帮助指出了这个问题。
V5 将使用Simonyan and Zisserman 16层网络结构得到的结果添加到了3.3节,和表3中。
https://blog.csdn.net/william_hehe/article/details/80006758
目标检测中衡量识别精度的指标。
多个类别目标检测中,每个类别都可以根据recall(召回率)和percision(准确率)绘制一条曲线(P-R曲线)。AP就是该曲线下的面积,mAP意思是对每一类的AP再求平均。
mAP计算方法:
首先用训练好的模型得到所有测试样本的confidence score,每一类(如car)的confidence score保存到一个文件中(如comp1_cls_test_car.txt)。假设共有20个测试样本,每个的id,confidence score和ground truth label如下:
接下来对confidence score排序,得到:
然后计算precision和recall,这两个标准的定义如下:
上图比较直观,圆圈内(true positives + false positives)是我们选出的元素,它对应于分类任务中我们取出的结果,比如对测试样本在训练好的car模型上分类,我们想得到top-5的结果,即:
在这个例子中,true positives就是指第4和第2张图片,false positives就是指第13,19,6张图片。方框内圆圈外的元素(false negatives和true negatives)是相对于方框内的元素而言,在这个例子中,是指confidence score排在top-5之外的元素,即:
其中,false negatives是指第9,16,7,20张图片,true negatives是指第1,18,5,15,10,17,12,14,8,11,3张图片。
那么,这个例子中Precision=2/5=40%,意思是对于car这一类别,我们选定了5个样本,其中正确的有2个,即准确率为40%;Recall=2/6=30%,意思是在所有测试样本中,共有6个car,但是因为我们只召回了2个,所以召回率为30%。
实际多类别分类任务中,我们通常不满足只通过top-5来衡量一个模型的好坏,而是需要知道从top-1到top-N(N是所有测试样本个数,本文中为20)对应的precision和recall。显然随着我们选定的样本越来也多,recall一定会越来越高,而precision整体上会呈下降趋势。把recall当成横坐标,precision当成纵坐标,即可得到常用的precision-recall曲线。这个例子的precision-recall曲线如下:
接下来说说AP的计算,此处参考的是PASCAL VOC CHALLENGE的计算方法。首先设定一组阈值,[0, 0.1, 0.2, …, 1]。然后对于recall大于每一个阈值(比如recall>0.3),我们都会得到一个对应的最大precision。这样,我们就计算出了11个precision。AP即为这11个precision的平均值。这种方法英文叫做11-point interpolated average precision。
当然PASCAL VOC CHALLENGE自2010年后就换了另一种计算方法。新的计算方法假设这N个样本中有M个正例,那么我们会得到M个recall值(1/M, 2/M, …, M/M),对于每个recall值r,我们可以计算出对应(r’> r)的最大precision,然后对这M个precision值取平均即得到最后的AP值。计算方法如下:
相应的Precision-Recall曲线(这条曲线是单调递减的)如下:
AP衡量的是学出来的模型在每个类别上的好坏,mAP衡量的是学出的模型在所有类别上的好坏,得到AP后mAP的计算就变得很简单了,就是取所有AP的平均值。
Overfeat:是改进了AlexNet网络,并用图像缩放和滑窗方法在test数据集上测试网络;提出一种图像定位的方法;最后通过一个卷积神经网络来同时进行分类,定位和检测三个计算机视觉任务,并在 ILSVRC 2013中获得了很好的结果。
多尺度形变部件模型,连续获得07~09的检测冠军,2010年起作者 Felzenszwalb Pedro 被VOC授予“终身成就奖”。DPM把物体看成多个组成的部件(比如人脸的鼻子,嘴巴等),用部件间的关系来描述物体,这个特性非常符合自然界很多物体的非刚体特征。DPM可以看做是HOG+SVM的扩展,很好地继承了两者的优点,在人脸检测,行人检测等任务上取得了不错的效果,但是 DPM相对复杂,检测速度也较慢,从而也出现了很多改进的方法。
hard negative mining method:难负例挖掘算法,用途就是正负例样本数量不均衡,而负例分散代表性又不够的问题,hard negative 就是每次把哪些顽固的棘手的错误,再送回去继续练,练到你成绩不再提升为止,这一个过程就叫‘hard negative mining’
fine-tuning阶段是由于CNN对小样本容易过拟合,需要大量训练数据,故对IOU限制宽松:IoU > 0.5 的建议框为正样本,否则为负样本;SVM这种机制是由于其适用于小样本训练,故对样本IoU限制严格:Ground Truth 为正样本,与Ground Truth 相交 IoU < 0.3 的建议框为负样本。
为什么单独训练了一个SVM而不是直接用softmax,作者提到,刚开始时只是用了ImageNet预训练了CNN,并用提取的特征训练了SVM,此时用正负样本标记方法就是前面所述的0.3,后来刚开始使用 fine-tuning时,也使用了这个方法,但是发现结果很差,于是通过调试选择0.5 这个方法,作者认为这样可以加大样本的数量,从而避免过拟合。然而,IoU大于0.5就作为正样本会导致网络定位准确度的下降,故使用了SVM做检测,全部使用ground-truth严格不作为正副本,且使用非正样本的,且IoU大于 0.3的“hard negatives”,提高了定位的准确度。
使用fine-tuning的原因
使用别人训练好的网络模型进行训练,前提是必须和别人用同一个网络,因为参数是根据网络而来的。当然最后一层是可以修改的,因为我们的数据可能并没有1000类,而只有几类。把最后一层的输出类别和层的名称改一下。用别人的参数、修改后的网络和自己的数据进行训练,使得参数适应自己的数据,这样一个过程,通常称之为微调(fine tuning). 也就是说,我们所拥有的数据很小,不足以训练一个网络,这是用别人训练过的参数以及网络训练我们自己的数据的过程就是微调(fine tuning)。
怎么fine-tuning?
Fine tuning 之所以有效的原因是,用到的网络是同一个网络,用到的参数是别人已经训练好的数据,所以在准确率上会有保证,这时候再稍微调整别人训练好的参数,往往会能达到我们想要的效果。
调整net文件
因为我们自己的数据集变化了,所以要修改net网络文件,大部分的内容都不变,变的只有data层、output层、batch的大小、前几层的学习率。data层需要改成我们自己的数据,output层的修改主要包括层的名字(使用不同的名字,预训练网络中该层的参数会重新初始化)和输出类别数目,并且要减小batch的大小,但是要和GPU的大小成比例。对于学习率的调整是很重要的,如果有的层的参数不需要更新,可以把学习率设置为0.比如有4个全连接层,希望C层的参数不会改变,C前面的AB层的参数也不会改变,这种情况也就是D层的梯度不往前反向传播到D层的输入blob(也就是C层的输出blob 没有得到梯度),你可以通过设置D层的学习率为0,layer的梯度就不会反向传播了,前面的所有layer的参数也就不会改变了。对于有参数的更新的层,学习率可以减小10倍或100倍(最后一层除外),对于最后一层的学习率可以提高10倍,加快学习速率,因为该层需要重新学习。
调整solver文件
solver.prototxt文件中的参数一般只需要修改net训练网络的名称、学习率、最大迭代次数和snapshot。首先将net从预训练使用的net换为现在使用的net,然后降低学习率(一般降低10倍或者100倍),同时,将最大迭代次数和snapshot的数目相对减少。
fine-tuning原理
Fine tuning的原理就是利用已知的网络结构和已知的网络参数,修改output层为我们自己的层,微调最后一层前的所有层的参数,加大最后一层的学习率,因为最后一层我们需要重新学习,所以与其它层相比要有相对较大的学习率,这样就有效利用了深度神经网络强大的泛化能力,又免去了设计复杂的模型以及耗时良久的训练,所以fine tuning是当数据量不足时的一个比较合适的选择。
后面还会更新该论文涉及的知识点讲解(下一次看这篇论文时)