R-CNN论文翻译解读

注:蓝色文字表示解读、疑问等。黑色字体表示原文翻译,红色标注处表示原文重要信息。

摘要

    目标监测在基准测试数据上的性能已经多年没有过很大的突破。具有最佳性能的方法常常是集成图像底层特征与图像高层上下文的复杂方法。该文提出了一个新的方法,极大的改善了之前最优方法的mAP。具体的,关键点有两处:

    (1)、为了定位和分割对象,在候选区域上应用了高容量的卷积神经网络。

    (2)、当标注数据稀少时,使用辅助的监督预训练模型和领域数据微调的方法,可以提升模型性能。

    由于将候选区域与CNN进行了结合,故取名R-CNN,与相似方法OverFeat的比较也更胜一筹。源码已经开源,详见:R-CNN

 

一、背景

    最近十年视觉任务大多基于SIFT(Distinctive image features from scale-invariant keypoints)和HOG(Histograms of oriented gradients for human detection)方法,且已经出现停滞状态。

SIFT和HOG都是分块定向直方图,可以粗略的将其与V1区域复杂的细胞关联起来,V1是灵长类视觉通路中的第一个皮层区域。同时,识别也是分为多个连续的阶段。对于视觉识别任务来说,这表明层级的、多阶段的特征计算能够提供更多的信息。2012年的ImageNet大赛,Hindon等提出的模型轻取传统模型,使得深度神经网络结束了寒冬,CNN进入了火热时期。

   深度学习研究者不禁发问,CNN在图像分类中的优越表现能发生在目标检测上吗?这篇论文就这个疑问做了解答。结论便是使用CNN的目标检测要远远优于传统的类似HOG的方法。关键问题有两个:一是对象的定位,二是只有少量标注数据情况下训练一个高容量模型。

   与图像分类不同,检测需要在图像中定位(可能有许多)对象一种方法将定位作为一个回归问题。已有研究人员发现这种方法效果并不好。另一种选择是建立一个滑动窗口检测器。CNN已经以这种方式使用了至少20年,通常用于受限对象类别,如人脸和行人。为了保持较高的空间分辨率,这些CNN通常只有两个卷积层和池化层。我们也考虑采用滑窗法。然而,我们的网络中有五个顶部的卷积层在输入图像中具有非常大的接收场(195×195像素)和步长(32×32像素),使得滑动窗口范式中的精确定位成为一个开放的技术挑战。相反,我们通过利用“使用区域识别”范式来解决CNN定位问题,该范式已经成功的应用在了目标检测和语义分割中。

   在测试时,我们的方法为输入图像生成大约2000个与类别无关的候选区域,使用CNN从每个候选区域中提取固定长度的特征向量,然后用特定于类别的线性支持向量机对每个区域进行分类。我们使用一种简单的技术(仿射图像扭曲)计算来自每个候选区域的固定大小的CNN输入,而不管区域的形状如何。图1概述了我们的方法。

                                                         

   注意:上图中的warped region表示对候选区域进行放射图像扭曲。其目的是使每个候选区域在输入给CNN之前,大小均保持一致。

   在本文的更新版本中,我们和OverFeat做了比较,结果是以31.4%比24.3%的mAP胜出。目标检测的第二个挑战在于标注数据稀疏且可用的标注数据不足以训练大型的CNN模型。解决这个问题的传统方法是使用无监督的预训练,然后进行监督微调。本文第二点贡献表明在大型辅助数据集(ILSVRC)上进行监督的预训练,然后在小型数据集(PASCAL)上进行特定领域的微调,是在数据稀缺时学习高容量CNN的有效范例。在实验中,微调提高了mAP性能8个百分点。

   了解我们的方法判别失误的样本对于改进它也是至关重要的,因此我们报告了Hoiem等人的检测分析工具的结果。作为这一分析的直接结果,我们证明了简单的边界框回归显着减少了错误定位,这是主要的错误模式这说明Bounding box regression对于精确的目标定位是很重要的。由于R-CNN在候选区域上工作,因此将其扩展到语义分割任务是很自然的。 稍做修改,我们也在PASCAL VOC分割任务上取得了有竞争力的结果。

 

二、用R-CNN进行对象检测

    检测系统由三个模块组成。第一个模块生成与类别无关的多个候选区域;第二个模块是一个大的CNN,它从每个候选区域提取一个固定长度的特征向量;第三个模块是一组特定类的线性支持向量机。

 

2.1、模块设计

   候选区域。最近的各种论文提供了生成与类别无关的候选区域的方法。本文为了和先前的工作做比较,采用了选择搜索来生成候选区域。

   特征提取。使用Krizhevsky等人描述的CNN的Caffe实现从每个候选区域中提取了一个4096维的特征向量。特征是将一个减去了像素均值的227×227RGB图像通过五个卷积层和两个全连接层的前向传播计算的

   为了计算候选区域的特征,首先必须将该区域中的图像数据转换为与CNN模型兼容的形式(其体系结构需要固定的227×227像素大小的输入)。在诸多可用的转换方法中,我们选择了最简单的方法。

   无论候选区域的大小或纵横比如何,我们将所有在一个紧密的包围框中的像素扭曲到所需的大小。

   在进行扭曲之前,我们扩大了候选区域的边界框,以便在扭曲的图像尺寸下,在未扭曲前的边界框周围恰好有 p 个扭曲图像的上下文像素。为何要这样做那?

   图二是扭曲后续图像区域的一些例子。

   

                                                   

   可以看到,有些图像变形了,如鸟的候选区域图像。

 

2.2、测试时间检测

   在测试时,我们对测试图像进行选择性搜索,以提取大约2000个候选区域(在所有实验中都使用选择性搜索的“快速模式")。我们扭曲每个候选区域,并通过CNN计算特征。

然后,对于每个类,我们使用为该类训练的SVM对每个提取的特征向量进行评分。给定图像中所有的打分区域,我们应用贪婪的非最大抑制,简称NMS(每个类独立进行)。

  非极大抑制过程: 所有候选区域在某个类别打分之下,如果一个候选区域,它与另外一个与其相比得分更高的候选区域的交叉重叠(IoU)大于某个阈值,则被拒绝。

  例如:在猫和狗的目标检测任务中,在猫类别打分下,2000个候选框打分结果中属于猫的有10个,打分最高的是BOX_1, 如果BOX_2与BOX_1之间的IOU大于0.5,则从10个属于猫类的BOX中删除BOX_2。

  目的:对于图像中的某个对象,仅仅保留置信度最高的一个候选区域。降低了后续任务的存储和计算量。

  运行时分析。两个性质使检测高效。首先,所有CNN参数在所有类别中共享。第二,CNN提取的特征维度相比其他方法是低维的(存储空间需求少)。

  这种共享的结果是,花费在计算候选区域和特征(GPU上的13s/映像或CPU上的53s/映像)的时间在所有类中摊销。 唯一的特定类的计算是特征与SVM权重之间的点积和非最大抑制过程。在实践中,图像的所有点积都被组织为一个矩阵与矩阵乘积。 特征矩阵一般为2000×4096,SVM权重矩阵为4096×N,其中N为类别数。利用优化的矩阵运算库,可以大大提高计算速度。

  这一分析表明,R-CNN可以扩展到数千个分类,而不需要使用近似技术,如散列。即使有10万个分类,生成的矩阵乘法在现代多核CPU上只需要10秒(10秒其实很慢了

  这种效率不仅仅是使用候选区域和共享特征的结果。 由于UVA系统的高维特征,它将慢两个数量级,且需要134GB的内存存储10万个线性预测器,而对于我们的低维特征,它只需要1.5GB来存储。

2.3、训练

   监督预训练。我们仅使用图像级注释(没有边界框标签可用)在大型辅助数据集(ILSVRC2012分类)上对CNN进行有区别的预训练。预训练是使用开源Caffe CNN库进行的

简而言之,我们的CNN几乎与Krizhevsky等人提出的模型表现相匹配,在ILSVRC2012分类验证集上获得了比top-1错误率2.2个百分点高一些的错误率。这种差异是由于简化了训练过程

   特定领域下的微调。为使我们的CNN适应新的任务(检测)和新的领域(扭曲的候选区域),我们继续在CNN模型上进行随机梯度下降(SGD)以微调CNN的参数,只使用扭曲的候选区域训练。

除了用随机初始化的(N+1)路分类层替换ImageNet的1000路分类层之外,(其中N是对象类的数目,外加背景),原始ImageNet CNN模型的架构保持不变。对于VOC,N=20,对于ILSVRC2013,N=200。对于每个候选区域,如果它与某个真实类别的标注边界框的IOU大于0.5,那么将认为是那个类的正样本,不符合这个条件的候选区域将认为是负样本(背景)。

   例如:某个候选区域R,与猫类的一个真实标注边界框的IOU大于0.5,则认为该候选区域是猫类的正样本。若与任何真实标注框的IOU均小于等于0.5,则被认为是背景。注意,一定是大于0.5,而不是大于等于0.5,否则正负样本的判别会出现歧义,如在一个候选区域与两个真实标注边界框的IOU都等于0.5的情况下。下图给出了一个示例。

                                                                                                                    

   如图,黄色框是真实标注框,蓝色候选区域IoU为0.78,大于0.5,因此被视为正样本,红色候选区域IoU为0.34,不足0.5,被视为负样本(背景)。

   我们开始SGD的学习速率为0.001(初始预训练速率的十分之一),这允许微调取得进展,而不是搞乱初始化。在每次SGD迭代中,我们均匀地采样32个正窗口(在所有类上)和96个背景窗口,以构造大小为128的小批量训练样本。我们将抽样偏向于正窗口,因为它们与背景相比非常罕见这是解决背景区域较大的一种方法)。

   对象类别分类器。考虑训练一个二分类器来检测汽车,很明显,紧紧包围汽车的图像区域应该是一个正样本。同样,很明显,与汽车无关的背景区域应该是一个负样本。不太清楚的是如何标记一个与汽车有部分重叠的区域。我们用一个IoU重叠阈值来解决这个问题,IoU低于某个阈值的候选区域被定义为负样本。阈值0.3是通过在验证集上对{0,0.1,...,0.5}进行网格搜索来选择的(此处使用了网格搜索来确定超参数)。我们发现仔细选择这个阈值是很重要的。将其设置为0.5,如文献[39],使mAP降低5个百分点(正样本可能太少)。 同样,将其设置为0,使mAP降低4个百分点(正样本可能太多)。正样本被简单地定义为每个类的真实标注框。一旦特征被提取并关联了训练标签,我们就对每个类优化一个线性SVM分类器。由于训练数据太大,无法一次性放入内存,我们采用标准的硬负挖掘方法。硬负挖掘收敛速度很快,在实践中,mAP在仅对所有图像进行一次传递后就收敛了

 

2.4、2010-12年PASCAL VOC的结果

   遵循PASCALVOC最佳实践,我们验证了VOC2007数据集上的所有设计决策和超参数。对于VOC2010-12数据集上的最终结果,我们在VOC2012训练上对CNN进行了微调,并在VOC2012训练上优化了我们的检测支持向量机。对于有边界框回归和没有边界框回归这两个主要算法变体,我们只向评估服务器提交了每个变体的测试结果一次。与已有方法相比,我们的方法更准确,也更快。

2.5、在ILSVRC2013检测上的结果

   我们在200个分类的ILSVRC2013检测数据集上运行R-CNN,使用与我们用于PASCALVOC的相同的超参数。我们遵循相同的协议,只向ILSVRC2013评估服务器提交测试结果两次,一次有边界框回归,另外一次一次没有边界框回归。

 

三、可视化、消融和错误模式

   3.1、可视化学习的特征

   (这部分很有意思,可以有助于我们分析模型学到了什么)

   第一层过滤器可以直接可视化,易于理解。它们捕获定向边缘和颜色。理解后续的层更具挑战性。Zeiler和Fergus提供了有吸引力的反卷积可视化方法。我们提出了一种简单(和互补)的非参数方法,它直接显示了网络所学到的东西。

   其思想是在网络中挑出一个特定的单元(特征),并使用它,就好像它本身就是一个对象检测器一样。也就是说,我们在一组大的候选区域集合(约1000万)上计算该单元的激活,按照激活值从高到低将候选区域进行排序。

执行非最大抑制,然后显示得分最高的区域。我们的方法允许选定的单元“为自己说话”,准确地显示使它兴奋的输入。为了看到不同的视觉模式,我们避免平均,并深入了解单元计算的不变性。

   我们可视化层化池5中的单元,这是网络第五层和最终卷积层的最大池化输出。池化层5的特征映射为6×6×256=9216维。忽略边界效应,每个pool5单元在原始227×227像素输入中有195×195个像素的感受野。中央的单元具有几乎全局的视图,

而靠近边缘的单元具有较小的剪裁信息。

   图4中的每一行显示了来自CNN的pool5单元的最大的前16个激活,这些单元是我们在VOC2007trainval上进行微调的结果。在256个功能独特的单元中,有6个被可视化(附录D包括更多)。这些单元被选中以显示网络所学到内容中的代表性样本。

在第二行中,我们看到一个单元在狗的脸和点阵上出现兴奋。第三行对应的单位是红色块检测器。还有人脸探测器和更抽象的图案,如文本和带有窗口的三角形结构。网络似乎学习了一种将少量的类别调整的特征与形状、纹理、颜色和材料属性的

分布式表示结合起来的表示。随后的全连接层fc6具有建模这些丰富特征的大量组合的能力(全连接层可以学习更加抽象的特征,这意味如果将全连接层从CNN后面去掉,模型的表示能力可能会有所降低)

                                         

 

   3.2、消融研究

    性能逐层进行,无微调。为了了解哪些层对检测性能至关重要,我们在VOC2007数据集上分析了CNN最后三个层的的结果。第3.1节简要描述了层池5。

   最后两层总结如下。全连接层fc6连接到pool5,为了计算特征,它将一个4096×9216权重矩阵乘以pool5特征映射(重塑为9216维向量),然后加上一个偏差向量。这个中间向量的分量是半波整流(x←max(0,x))。

   层fc7是网络的最后一层。它是通过将fc6计算的特征乘以4096×4096权重矩阵来实现的,并且类似地添加一个偏差向量并应用半波整流。(此处半波整流就是Relu).

   我们首先看在PASCAL数据集上没有进行微调的CNN的结果。所有CNN参数仅在ILSVRC2012上预训练。逐层分析性能表明,逐层分析性能(表2行1-3)表明,fc7的特性比fc6的特性泛化更差。

这意味着29%,或约1680万的CNN参数可以删除,而不降低mAP。更令人惊讶的是,删除fc7和fc6也会产生相当好的结果,尽管pool5的特征只使用CNN的6%的参数进行计算。CNN的表示能力大部分来自它的卷积层,

而不是更大而密集的全连接层。这一发现表明,通过只使用CNN的卷积层来计算任意大小图像的HOG意义上的密集特征映射具有潜在的效用。这种表示可以在pool5层的特征上进行滑动窗口检测器实验,包括DPM。

                                   

    性能逐层进行,有微调。我们现在看看具有微调过程的CNN。改进是显著的(表2行4-6):微调使mAP增加8.0个百分点,达到54.2%(这说明微调是很重要的)。微调对fc6和fc7的促进作用远大于pool5,这表明从Image Net学习到的pool5特征是通用的,并且大多数改进都是通过在它们之上学习针对特定领域的非线性分类器中获得的。

    与最近的特征学习方法的比较。主要说明了R-CNN远远优于这些最近提出的特征学习方法。

    小结:预训练和微调缺一不可,预训练利用大型网络结构提取通用的特征,而微调将使模型拟合特定领域的数据特征(全连接层通过特征组合发挥大的作用),去掉微调将对泛化性造成影响。

 

3.3、网络结构

    本文中大多数的实验结果或结论均在Krizhevsky et al.等提出的网络结构基础上得出。然而,我们发现结构的选择对于R-CNN的性能有着很大的影响。

    在表3中,我们展示了在VOC 2007上的测试结果,使用了由Simonyan and Zisserman提出的具有16层的深度神经网络。该网络结构是ILSVRC 2014分类塞中取得性能较高的网络结构之一。其由13个同类型的3\times 3卷积核构成,5个最大池化层穿插其中,最顶层是3个全连接层。我们称其为O-Net。

    使用O-Net的一点特征之处是minibatch的大小变为了24,主要是为了能把它们放入GPU的内存中(GPU的内存比CPU要小一些),虽然性能较T-Net提升了,但计算效率下降了7倍。

 

3.4、检测错误分析

    使用了开源的工具分析了检测的错误模式。图5和图6对此进行了分析。分析的结论便是微调+边界框回归对于分类和定位的性能非常重要,其中微调可以提高检测的鲁棒性,特别是针对有歧义,遮挡,部分可见的情况。而边界框回归则能够修正框的位置,说白了,就是圈的更准一点

 

3.5、边界框回归。

    训练了一个线性回归模型,预测一个新的边界框,该边界框较已有的边界框更加准确。

 

3.6、定性结果

   略。

 

四、The ILSVRC2013检测数据集

4.1、数据集概览

    验证集和测试集来自同一分布,这两个集合里面的图片场景很类似,所有对象都经过了边界框标注。然而,训练集的采样分布是不同的,这里面的图片和场景形态各异,有些图片中的对象甚至有些变形。并且,由于训练集合太大,并不是每张图片都有边界框标注。由于训练集不是完全标注的,作者将验证集采用近似平衡的分割策略分成了两份,一份用于训练,一份用于测试。

4.2、候选区域

   候选区域生成算法采用Select Search算法的快速模式,并应用在val1,val2和测试集上(训练集除外)。作者做了一点小的改动,由于Select Search算法并不是一个尺度不变的算法,所以候选区域的数量应视图片的分辨率而定。图片尺寸有很小的,也有一些达到几百万像素,因此在运行候选区域生成算法之前统一将所有图片变成固定的大小(500pixl宽)。在验证集上,算法在每个图片上生成2403个候选区域,其中91.6%被召回了(IoU为0.5)。比在PASCAL上的98.8%的召回率要低,表明还有很大空间可以在候选区域生成阶段提升检测效果。

4.3、训练数据

    对于训练数据,我们组成了一个图片和边界框的集合,其中边界框一部分来自选择搜索算法的输出,另外一部分来自val1的真实边界框,以及训练集中每个类别的边界框,每个类别最多有N个边界框(如果某个类的真实边界框数目少于N,则全部拿来用),我们称这个图片和边界框的集合为 val_1+train_N。在消融研究中,我们在val2上显示了N∈{0,500,1000}的mAP(第4.5节)。 

    训练数据在R-CNN中需要经过三个处理步骤:(1)CNN微调,(2)检测器SVM训练,(3)边界框回归训练。CNN微调在 val_1+train_N 上运行50000次迭代,使用在用PASCAL做实验中完全相同的设置。使用caffe微调花了13个小时。对于SVM训练,所有来自 val_1+train_N 的真实边界框都被用作各个类的正样本,其它的自然都用做负样本。对从val1中随机选择的5000幅图像子集进行了硬负挖掘(?)。初步的实验表明,从所有val1中挖掘负样本,相对于5000个图像子集(大约一半),只导致mAP下降0.5个百分点,但是将SVM的训练时间减半。因为训练集的标注不充分,所以没有用训练集中的任何负样本。额外的一组已经验证的负样本没有使用。边界框回归器是在val1上训练的。

4.4、验证和评估

    在向评估服务器提交结果之前,通过使用上面描述的训练数据,我们验证了数据的选择使用方法以及微调和边界框回归在val2的影响。所有超参数同在使用PASCAL时的一样。在val2得到最佳选择之后,我们向ILSVRC2013评估服务器提交了准确的两个结果文件。第一个没有边界框回归,第二个有边界框回归。对于这些提交,我们扩大了支持向量机和边界盒回归的训练集规模,分别使用了 val+train_{1k} 和 val,同时我们使用了在 val_1+train_N 上进行微调的CNN,以避免重新进行CNN微调和特征计算工作

4.5、消融研究

    表4显示了不同数量的训练数据、微调和边界框回归的各自效果的消融研究。第一个观察是,val2上的mAP与测试上的mAP非常接近。 这使我们相信,val2上的mAP是测试集性能的一个很好的指标。第一个结果,20.9%,是R-CNN使用在ILSVRC2012分类数据集上预训练的CNN模型实现的(没有微调),允许获得val1中的少量训练数据(val1中的一半的类别的样本数在15到55之间)。将训练集扩展到 val_1+train_N 将性能提高到24.1%,在N=500和N=1000之间基本上没有区别。使用仅从val1的样本对CNN进行微调,使其略有改进,达到26.5%,然而,由于正样本数量很少,很可能存在严重的过拟合将微调使用的数据集扩展到 val_1+train_N,这将从训练集中每个类别里增加1000个正样本,这个显著的将mAP提高到29.7%,bounding-box回归将结果提高到31.0%,这个收益相对较小。

 

4.6、与OverFeat的关系

    R-CNN和Over Feat之间有一个有趣的关系:OverFeat可以被看作是R-CNN的一个特例。如果将候选区域的选择搜索替换为一个方形区域的多尺度金字塔,并将每个类的边界框回归器改为单一边界框回归器,那么这两者是很相似的。OverFeat在速度上相比R-CNN有明显优势,大约是后者的9倍快。速度快的原因是OverFeat的滑动窗口(也就是候选区域)并没有再图像级别进行扭曲变形,因此重叠的窗口可以共享计算。计算共享是通过在任意大小的输入上以卷积的方式运行整个网络,R-CNN有多种可以加速的方法,留待以后研究。

 

五、语义分割

    区域分类是语义分割的标准技术,允许我们使用R-CNN进行PASCAL VOC上的语义分割检测挑战。为了便于与现有的最好的语义分割算法(O2P,二阶池化)比较,我们在它们开源的框架下开展工作。O2P使用CPMC为每个图片生成150个候选区域,然后使用支持向量回归,预测每个区域在每个类别下的质量。该方法的高性能源于CPMC区域的质量以及强大的多特征类型的二阶池化(对SIFT和LBP的丰富)。超参数是通过在VOC 2011验证集上进行交叉验证得出的。

    由于分割的CNN特征。我们评估了三种在CPMC区域上计算特征的策略。这些策略均将矩形的候选区域扭曲成227\times 227的区域。第一种策略(full)忽略候选区域的形状,直接在扭曲后的候选区域上进行特征提取,如在前面目标检测时所得做的一样。然而,这些特征忽略了区域中的非矩形形状,如圆,三角等。两个区域虽然相交的部分很少,但是却有非常相似的边界框。因此,第二种策略(fg)仅仅在区域的前景mask(?)上进行特征计算,我们将背景部分替换为输入像素的平均值,这样背景部分的像素值在减去均值后都会变成0。第三种策略是将前两种策略计算的特征进行了连接。实验验证了它们的互补性。

    在VOC 2011上的结果。 表5是我们在VOC 2011验证集的实验结果同O2P的比较。fg策略略优于full策略,表明前景masked区域形状可以提供更强的信号,然而,full+fg的策略实现了47.9%的精度,表明即便给出了fg策略计算的特征,full策略计算的特征所提供的上下文信息也是非常有用的。

 

附录

A. 候选对象转换

    本文使用的CNN需要227\times 227固定尺寸的输入。对于检测来说,我们认为候选对象是任意的矩形框。我们评估了两种将候选对象转换为CNN输入的方法。

    第一种方法(有上下文的极大紧致方框),把候选对象封闭在一个极其紧致的方形框中,然后各向同性的缩放在这个方形框中的对象,使其变成CNN的输入。

 

    方法一的变体(无上下文的极大紧致方框),只是去掉了目标对象周围的上下文;第三种策略是各向同性的变形候选目标,以使其成为CNN的输入。图7是这几种方法的说明。

    对于上述转换方法,我们也考虑在候选对象周围包含附加的上下文内容。上下文padding的数量被定义为在转换后的坐标系下目标对象周围的边界尺寸。所有方法中,如果原来的矩形框延伸到图像之外,则丢失的数据用图像均值替代(在输入图像到CNN之前应该减去均值)。

B. 正负样本以及softmax

    两种设计选择为进一步的讨论提供了必要性。第一个是:对于微调CNN和训练SVM,为什么正负样本的定义是不同的?对于微调阶段,我们将候选目标与其有最大IoU的那些真实候选框相关联(可能有多个),对于IoU大于0.5的,则将候选目标标识为与其关联的真实候选框所属的类别的正样本,所有其他的候选区域标识为背景(也即所有类别的负样本)。相反,对于训练SVM,我们仅将每个类别的真实边界框作为正样本,将与某个类的所有真实边界框的IoU值均小于0.3的候选区域标识为某个类的负样本,落在灰色区域的候选目标忽略不计(IoU大于0.3,但小于1)。

    一般说来,我们得出这些定义是因为我们在由CNN预训练模型计算得到的特征上训练SVM开始,所以微调在当时并不是一个在考虑之内的因素。在那种情况下,我们发现特殊的标记定义在一些选项的设定下对于训练SVM来说是最优的,当我们开始使用微调的时候,我们使用了同训练SVM时相同的正负样本。然而,我们发现,相比于用我们对于微调阶段定义的正负样本所训练的结果,直接使用训练SVM时定义的正负样本的结果非常糟糕(也就是说,微调阶段和SVM训练阶段的正负样本存在差别是有原因的)。

    我们的假设是,微调阶段和SVM训练阶段正负样本定义上的差别是不重要的,差异由微调阶段有限的可利用数据是导致。我们当前的方案引入了许多“抖动”的样本(重叠在0.5和1之间,但不是真实标注框),这大约扩大了正样本数量的30倍。我们猜想在微调整个网络时为了减轻过拟合,这个大的训练集合是必须的。然而,我们也注意到了使用这些抖动的样本并不是最优的选择,因为对于精确定位来说网络并不会得到微调。

    这引出了第二个问题:微调之后为何要训练SVM?简单的将微调网络的最后一层,也就是21路输出的softmax回归分类器作为对象检测器,是更简单而纯粹的。经尝试并发现在VOC 2007上的性能从54.2%下降到了50.9%,性能下降可能由多个因素导致,一是微调阶段定义的正样本并不强调精确定位,其次是softmax分类器是在随机采样负样本的情况下进行训练的,而不是像训练SVM那样使用的硬负样本集合。

    结果表明微调之后不进行SVM的训练也能得到相近的性能。我们猜想在微调时附加一些调整手段可以弥合这点差距。如果确实是这样,可以在不损失检测精度情况下简化并加速R-CNN的训练。

    下面是引用自R-CNN文章详细解读中的解释,解释的比较合理:

    1)SVM正负样本的定义,为什么fine-tuning与SVM正负样本定义不一样?
     在训练SVM时,正样本为groundtruth,负样本定义为与ground truth的IoU小于0.3的候选区域为负样本,介于0.3与0.7之间的样本忽略。fine-tuning时担心过拟合的原因,要扩大正样本的样本量,所以定义比较宽松,但是SVM是最终用于分类的分类器,而且SVM原理就是最小的距离最大化,越难分的数据越有利于SVM的训练,所以对样本的定义比较严格。

    2)为什么不直接用softmax的输出结果?
     因为在训练softmax的时候数据本来就不是很准确,而SVM的训练使用的是hard negative也就是样本比较严格,所以SVM效果会更好,识别出来的正样本和真实边界框基本是重叠的,如果用softmax的输出,则很多正样本与真实样本框重叠部分不是很大,即便通过后续的回归也不会有很大的矫正。

    总结: 假设候选区域与真实边界框的IOU服从正态分布,则大约0.3~0.7之间的候选区域占据2000个候选区域中的大多数。对于微调阶段,正样本的定义比较宽松,可以放入更多的正样本,主要的作用是可以缓解过拟合。正样本增多之后,模型可以提取的特征形态会更多、更丰富,因此会更加具有泛化性,但是太大和太小都不合适。如果阈值为0.9,正样本就太少,模型能看到的基本都是负样本,而且大量的负样本和正样本特征基本相似,分类边界非常难以确定,很容易欠拟合,更不用说提高泛化性了。如果阈值为0.1,则模型看到的基本都是正样本,负样本很少,大量的正样本充斥着大面积的背景,模型很可能会把背景特征学习到,并作为目标对象的关键特征(如猫和狗的特征),这对后面用到CNN提取的4096维的特征的SVM来说,很可能会陷入过拟合。

C. 边界框回归

    我们使用了一个简单的边界框回归阶段来改善定位性能。当为每个选择搜索产生的候选区域针对某个指定类别的SVM检测器打分后,再通过使用指定类别的边界框回归器为候选区域指定一个新的边界框,这个和DPM模型中使用的边界框回归方法类似。两种边界框回归方法的不同在于,我们在与CNN计算出来的特征上进行回归,而不是在推断的DPM部分定位上计算的几何特征上进行回归。

    训练算法的输入是N个训练数据对 \left \{ \left ( P^i,G^i \right ) \right \}_{i=1,...,N},其中 P^i=\left ( P^i_x,P^i_y,P^i_w,P^i_h \right ) 指定了候选区域 P^i 的中心像素坐标位置以及它的像素宽度和像素高度,真实的标注框 G^i 同 P^i 定义类似。我们的目标是学习一个转换,将 P^i 映射到 G^i

    通过四个函数对这个转换进行参数化,四个函数分别是 d_x(P)d_y(P)d_w(P) 和 d_h(P)。前两个函数指定了一个尺度不变的关于 P^i 的中心点变换,后两个函数指定了 P^i 的宽度和高度在log空间下的变换。当学习到这些函数的表示后,在测试时,便可以通过下面的公式将 P^i 转换为一个预测的真实边界框 \hat{G}

    上面的每个函数 d_*(P) (其中 \ast 是 x,y,w,h 其中之一)被建模为 P 在pool5后的特征(表示为 \Phi _5(P))上的线性函数。因此,d_*(P)=w_*^T\Phi _5(P),其中 w_* 是可学习的模型参数向量,我们通过优化具有正则化项的均方损失(岭回归)来学习 w_*

    回归目标 t_* 定义如下:

    作为标准的正则化的均方损失优化问题,可以高效的得到解决。 

    在实现边界框回归过程中我们发现了两个微妙的问题。第一个是正则化是很重要的,基于验证集我们将 \lambda 设为了1000。第二个问题是必须小心选择用于训练边界框回归的数据对 \left ( P,G \right )。直观上看,如果 P 距离所有的真实边界框均较远, 把 P 转换为一个真实的边界框是没有意义的。使用这样的数据训练会导致一个无效的学习问题。因此,我们仅选择那些至少和一个真实边界框离得比较近的 P 进行边界框回归。我们是这样定义离得近的:如果 P 与某个真实边界框的 IoU值大于某个阈值(我们通过使用验证集确定的阈值是0.6),那就认为它们之间离得比较近,忽略所有不满足这条件的 P对于每一个类别,我们独立的进行边界框回归,学习了多个特定类别的边界框回归器

    在测试时,我们为每个候选区域打分,然后仅预测它的新的检测窗口一次。实质上,我们可以迭代这个过程(也即,对新的检测窗口打分,再预测一个新的检测窗口,如此反复多次)。然而,我们发现迭代并没有改善结果。

    关于边界框回归,这里推荐一篇讲的很有深度的文章: R-CNN目标检测系列】二、边界框回归(Bounding-Box Regression)

 

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值