R-FCN: Object Detection via Region-based Fully Convolutional Networks

Abstract

我们提出了基于区域的、全卷积的网络,用于精确和有效的对象检测。与之前的基于区域的检测器(如Fast/Faster R-CNN[6,18])相比,我们的基于区域的检测器是全卷积的,几乎所有计算都在整个图像上共享。为了实现这一目标,我们提出了位置敏感的分数映射来解决图像分类中的平移不变性和目标检测中的平移可变性之间的矛盾。因此,我们的方法可以很自然地采用全卷积的图像分类器骨干,例如最新的残差网络(ResNets)[9],用于目标检测。我们使用的是101层的ResNet,在PASCAL VOC数据集(例如,2007集上的83.6%的mAP)上显示了竞争结果。同时,在测试时我们的结果是每幅图像的处理速度为170ms,比Faster R-CNN等的速度快2.5-20倍。代码可见:https://github.com/daijifeng001/r-fcn.

1 Introduction

一个流行的用于对象检测的深度网络族[8,6,18]可以通过感兴趣区域池化层[6]分成两个子网络:(i)一个独立于RoI的共享的“全卷积”子网络,(ii)一个不共享计算的基于RoI的子网络。这种[8]的分解在历史上是由开创性的分类体系结构产生的,如AlexNet[10]和VGG Nets[23],它们按照设计由两个子网组成——一个以空间池化层结尾的卷积子网,然后是几个全连接(fc)层。因此,图像分类网络中的(最后)空间池化层自然就转化为目标检测网络中的RoI池化层[8,6,18]。
但是,最近最先进的图像分类网络,如Residual Nets(ResNets)、[9]和GoogLeNets[24,26],在设计上完全令人费解。通过类比,在对象检测体系结构中使用所有的卷积层来构建共享的卷积子网是很自然的,这使得roi方面的子网没有隐含层。然而,在这项工作的经验调查中,这一天真的解决方案有相当低的检测精度,这与网络优越的分类精度不相匹配。为了解决这个问题,在ResNet的论文[9]中,Faster R-CNN检测器[18]的RoI池层被不自然地插入到两组卷积层之间——这创建了一个更深的基于RoI的子网络,它提高了准确性,但代价是由于每RoI计算的未共享而降低了速度。
我们认为,上述非自然设计是由于增加图像分类的平移不变性与尊重目标检测的平移可变性的两难境地。一方面,图像级分类任务倾向于物体在图像内的平移不变性,即物体在图像内的平移是不加区分的;因此,尽可能保持平移不变的深度(完全)卷积架构更可取,ImageNet分类的领先结果证明了这一点[9,24,26]。另一方面,对象检测任务在一定程度上需要平移可变的位置表示。例如,在候选框中对对象的平移应该产生有意义的响应,用于描述候选框与对象的重叠程度。我们假设在一个图像分类网络中更深的卷积层对平移不敏感。为了解决这个难题,ResNet论文的检测管道[9]将RoI池层插入到卷积中——这种特定于区域的操作打破了平移不变性,当跨不同区域进行评估时,后RoI卷积层不再是平移不变性。但是,这种设计牺牲了训练和测试效率,因为它引入了大量的区域层面(表1):

在本文中,我们开发了一个基于区域的全卷积网络(R-FCN)来进行目标检测。我们的网络由共享的全卷积架构组成,就像FCN[15]一样。为了将平移可变形合并到FCN中,我们使用一组专门的卷积层作为FCN输出,来构造了一组位置敏感的分数映射图。每一个分数映射图都编码了相对于空间位置的位置信息(例如,“在一个物体的左边”)。在这个FCN的基础上,我们附加了一个位置敏感的RoI池层,用于从这些分数图中获取信息,后面跟着没有权重的(卷积/fc)层。整个体系结构是端到端学习的。所有可学习的层都是卷积的,并在整个图像上共享,同时对目标检测所需的空间信息进行编码。图1说明了关键思想,表1比较了基于区域的检测器之间的方法:

 
使用101层的Residual Net(ResNet-101)[9]为骨干,我们R-FCN在PASCAL VOC 2007数据集中产生了83.6% mAP的竞争结果和在2012数据集中产生了82.0%的结果。与此同时,我们使用ResNet-101网络得到了每张图像在测试时达到了170 ms的速度,这是比在[9]的Faster R-CNN + resnet-101配对网络快2.5到20倍的结果。实验结果表明,该方法能够有效地解决平移不变性/可变形之间的矛盾,全卷积图像级分类器(如ResNets)能有效地转换为全卷积对象检测器。

2 Our approach

Overview. 继R-CNN[7]之后,我们采用了流行的两阶段对象检测策略[7,8,6,18,1,22],包括:(i)区域建议,(ii)区域分类。虽然不依赖于区域建议的方法确实存在(例如,[17,14]),但是基于区域的系统在几个基准上仍然具有领先的准确性[5,13,20]。我们使用区域建议网络(RPN)[18]来提取候选区域,该网络本身是一个完全卷积的体系结构。在[18]之后,我们共享RPN和R-FCN之间的特性。图2显示了系统的概述:

考虑到建议区域(RoIs), R-FCN体系结构被设计成将RoIs分类为对象类别和背景。在R-FCN中,所有可学习的权值层都是卷积的,并对整个图像进行计算。最后一个卷积层为每个类别生成一组k2位置敏感的分数图,因此有一个k2(C +1)的通道输出层和,其中C为对象类别数(+1作为背景)。k2的分数图对应一个k×k空间网格描述的相对位置。例如,当k×k = 3×3时,9个分值映射编码对象类别的{左上角,左上角,右上角,…,右下角}。


R-FCN以位置敏感的RoI池层结束。该层汇总最后一层卷积的输出,并为每个RoI生成分数。与[8,6]不同的是,我们的位置敏感RoI层进行选择性池化,每个k×k bin只聚合来自k×k分数图库中的一个分数图的响应。通过端到端训练,这个RoI层将指导最后一个卷积层,以学习专门的位置敏感分数地图。图1说明了这一思想。图3和图4显示了一个示例:

感觉这像是每张底图就是c+1维的一个颜色的分数图,左上角的底图就对应着之前的橙色(也表示的是左上角)的分数图,因此该对应位置(左上角)的大小为w/k × h/k的bin分别计算该(C+1)个类别层(橙色的)的平均池化,得到左上角1*1*(C+1)的输出。所有k*k=9个对应位置和对应位置的相应颜色的分数图得到k*k=9个位置的结果后,再对9*9*(C+1)平均得到vote的1*1*(C+1)的分类概率结果,用来判别该图是否为人

具体介绍如下:

Backbone architecture. 本文中R-FCN的化身是基于ResNet-101[9],尽管其他网络[10,23]是适用的。ResNet-101有100个卷积层,然后是全局平均池化层和1000类fc层。我们去掉了平均池化层和fc层,只使用卷积层来计算特征图。我们使用由[9]作者发布的ResNet-101,在ImageNet[20]上预训练。ResNet-101中的最后一个卷积块是2048维的,我们附加了一个随机初始化的1024维的1×1卷积层来减小维数(准确的说是将Table 1中的depth增加了1),然后我们使用k2(C + 1)通道数的卷积层来生成分数图,下面会进行介绍。


Position-sensitive score maps & Position-sensitive RoI pooling.  为了明确地将位置信息编码到每个RoI中,我们将每个RoI矩形按规则网格划分为k×k个 bin。对于大小为w×h的RoI矩形,bin的大小为≈w/k × h/k [8,6]。在我们的方法中,构造最后一个卷积层去为每个类别生成k2维的分数图(输出为k*k*(c+1))。在第(i, j)的bin(0≤i, j≤k−1)中,我们定义了一个位置敏感的RoI池操作,该操作仅在第(i, j)得分图上进行池操作:

rc(i, j)是对类别c在第(i, j)个bin上的池化回应,zi,j,c是k2(c + 1)分数图中的一个分数图,(x0, y0)表示一个RoI的左上角,n是该bin中像素的数量,Θ表示网络的所有可学的参数。第(i, j)个bin的范围为

Eqn.(1)执行平均池化(在本文中我们一直使用),但是也可以执行最大池。(其实就是对ROI位置(w*h大小)分成的k2个bin中所有像素值/像素数量 得到一个平均池化值,一个bin的大小为w/k × h/k,池化方法就是左上角的bin对应的是橙色的(c + 1)层分数图,对该位置的(c + 1)个类别层各求平均值得到输出的左上角的橙色(c + 1)类别层结果

k2的位置敏感的分数在ROL中vote。在这篇文章中,我们简单地通过平均分数来vote,为每个RoI生成一个(C + 1)维向量:,然后我们计算跨类别的softmax响应:。它们用于评估训练过程中的交叉熵损失,并在推理过程中对roi进行排序。

我们以类似的方式进一步处理了边界框回归[7,6]。除了上述k2(C +1)维卷积层外,我们还附加了一个同胞4k2维卷积层用于边界框回归。位置敏感的RoI池是在这一组4k2映射上执行的,为每个RoI生成一个4k2维向量。然后通过平均voting将其聚合为一个4维向量。这个4维向量在[6]中参数化为一个边界框t = (tx,ty,tw,th)。我们注意到,为了简单起见,我们执行了与类无关的边界框回归,但是对类特定的对应项(如具有4k2C维输出层)是适用的。
位置敏感分数图的概念部分是受[3]的启发,[3]开发了FCNs用于实例级语义分割。我们进一步介绍了位置敏感的感兴趣区域池层,该层指导学习目标检测的分数图。在RoI层之后没有可学习的层,这使得区域级的计算几乎是免费的,并且加快了训练和推断的速度。

Training. 通过预先计算的区域建议,很容易对R-FCN体系结构进行端到端训练。根据[6],我们在每个RoI上定义的损失函数是交叉熵损失和box回归损失之和:。这里c*是RoI的真实标签(c*=0表示背景)。为分类的交叉熵损失,Lreg为[6]中定义的边界框回归损失,t*表示真实框。[c> 0]是一个指示器,如果参数为真,它就等于1,否则就是0。我们设置了平衡权重λ= 1 [6]。我们将正样本定义为RoI与真实框的交并比(IoU)至少为0.5,否则为负样本。

我们的方法在训练过程中很容易采用在线困难样本挖掘(OHEM)[22]。我们可忽略不计的每RoI计算可以实现几乎免费的样本挖掘。假设每个图像有N个proposals,在前向传递中,我们估计所有N个proposals的损失。然后我们根据损失对所有的RoI(正的和负的)进行排序,并选择损失最大的B个RoI。根据选择的样本执行反向传播[11]。因为我们每个RoI的计算是可以忽略的,所以前向时间几乎不受N的影响,相比之下,在[22]中使用OHEM Fast R-CNN可能会使训练时间增加一倍。在下一节中,我们将在表3中提供全面的时间统计信息:


我们使用权重衰减为0.0005,动量为0.9。默认情况下,我们使用单尺寸训练:调整图像大小,使尺寸(图像的短边)为600像素[6,18]。每个GPU持有1张图片,并选择B = 128 RoI。我们用8个gpu来训练模型(因此有效的小批量大小是8的倍数)。我们对R-FCN进行了微调,20k个小批次的学习率为0.001,10k个小批次的学习率为0.0001。为了使R-FCN与RPN共享特征(图2),我们采用在[18]中的4步交替训练法,交替训练RPN和R-FCN。

Inference. 如图2所示,计算RPN和R-FCN之间共享的特征图(在单一比例尺为600的图像上)。然后,RPN部分提出RoI, R-FCN部分评估分类方面的得分并回归边界框。在推理过程中,我们为公平的比较,如在[18]一样评估300个RoIs。使用0.3 IoU[7]阈值的非最大抑制(NMS)对结果进行后处理,将其作为标准实践。


À trous and stride. 我们的全卷积架构得益于FCNs广泛用于语义分割的网络修饰[15,2]。特别是,我们将ResNet-101的有效步幅从32像素降低到16像素,从而提高了分数图的分辨率。在conv4 stage[9]之前和上的所有层(stride=16)不变;在第一个conv5块的stride=2修改为stride=1,在conv5 stage上的卷积过滤器使用"hole算法"[15,2](“Algorithme À trous”[16])修改来弥补减少的步长。为了公平的比较,RPN计算在conv4阶段上(其与R-FCN共享),像[9] Faster R-CNN 一样,所以RPN没有受到À trous技巧的影响。下表为R-FCN ablation 结果(k×k = 7×7,无困难样本挖掘)。̀À trous技巧把mAP提高了2.6个点:



Visualization.  在图3和图4中,我们可视化了R-FCN在k×k = 3×3时学习的位置敏感分数图。这些专门化的映射将在对象的特定相对位置被强烈激活。例如,“top-center-sensitive”分数图显示的高分大致位于对象的top-center位置附近。如果一个候选框恰好与一个真实的对象重叠(图3),那么RoI中的大多数k2个bin都会被强烈激活,并且它们的投票会导致较高的分数。相反,如果一个候选框没有正确地与一个真实的对象重叠(图4),RoI中的一些k2 bin没有被激活,并且投票得分很低。 

3 Related Work

R-CNN[7]已经证明了在深度网络中使用区域建议的有效性[27,28]。R-CNN在裁剪和扭曲区域上对卷积网络进行计算,区域之间不共享计算(表1)。SPPnet[8]、Fast R-CNN[6]和Faster R-CNN[18]是“半卷积”,其中一个卷积子网络对整个图像进行共享计算,另一个子网络对单个区域进行计算。
有一些对象检测器可以被认为是“完全卷积”模型。OverFeat[21]通过在共享卷积特征图上滑动多尺度窗口来检测对象;类似地,在Fast R-CNN[6]和[12]中,替代区域建议的滑动窗口也被研究。在这种情况下,可以将一个单尺度的滑动窗口重新转换为一个单独的卷积层。在Faster R-CNN[18]中,RPN组件是一个全卷积检测器,用于预测相对于多个大小的参考框(anchors)的边界框。在[18]中,原始的RPN是与类无关的,但是如我们在下面的评估中所述,它的类特定副本是适用的(也参见[14])。
另一类对象检测器则借助于全连接(fc)层来生成整个图像上的整体对象检测结果,如[25,4,17]。

4 Experiments

4.1 Experiments on PASCAL VOC

我们在PASCAL VOC[5]上做了20个对象类别的实验。我们在[6]之后的VOC 2007 trainval和VOC 2012 trainval(“07+12”)的联合集上对模型进行训练,并在VOC 2007测试集上进行评估。

Comparisons with Other Fully Convolutional Strategies

虽然全卷积检测器是可用的,但实验表明,要达到良好的精度并非易事。我们使用ResNet-101研究了以下全卷积策略(或“几乎”全卷积策略,每个RoI只有一个分类器fc层):
Naïve Faster R-CNN.  如引言所述,可以使用ResNet-101中的所有卷积层来计算共享特征图,并在最后一个卷积层(conv5之后)采用RoI池。在每个RoI上评估一个RoI的21类fc层(因此这个变体“几乎”完全是卷积的)。一个̀à trous技巧用于实现公平的比较。
Class-specific RPN. 这个RPN是按照[18]进行训练的,只是将2类(对象或非对象)卷积分类器层替换为21类卷积分类层。为了公平的比较,我们为这个特定类的的RPN使用conv5层̀带有à trous技巧的ResNet-101网络。
R-FCN without position-sensitivity. 通过设置k = 1,我们去掉了R-FCN的位置灵敏性。这等价于每个RoI中的全局池化。


Analysis. 表2显示了结果:

我们注意到标准(不是naïve)Faster R-CNN在ResNet论文[9]使用ResNet-101网络达到76.4% mAP 的结果(参见表3),其将RoI池化层插入conv4和conv5 [9]之间:

作为比较,naïve Faster R-CNN (conv5后应用RoI池化层)获得了大大降低的68.9% mAP(表2)结果。这种比较经验上证明通过在Faster R-CNN系统层间插入RoI池化层来尊重空间信息的重要性。类似的观察结果在[19]中也有报道。
特定类的RPN获得67.6% mAP结果(表2),比标准的Faster R-CNN的76.4%低9个百分点。这种比较与[6,12]的观察结果一致——事实上,特定类的RPN类似于一种特殊形式的Fast R-CNN[6],它使用密集的滑动窗口作为proposals,其结果不如[6,12]所报道的那样。
另一方面,我们的R-FCN系统有更好的准确性(表2),其mAP(76.6%)与标准Faster R-CNN(76.4%,表3)相近。这些结果表明,我们的位置敏感策略成功编码有用的空间信息去定位对象,不需要在RoI池化层后使用任何可学习的层。

通过设置k = 1进一步证明了位置敏感性的重要性,对于k = 1, R-FCN不能收敛。在这种降级的情况下,在RoI中不能显式地捕获空间信息。此外,我们报告了当RoI池输出分辨率是1×1时naïve FasterR-CNN能够收敛,但其mAP进一步大幅下降到61.7%(表2)。


接下来,我们将与标准的“Faster R-CNN + ResNet-101”[9]进行比较,[9]是在PASCAL VOC、MS COCO和ImageNet基准测试中最强的竞争对手和最佳表现。我们在下面使用k×k = 7×7。表3显示了比较结果。Faster R-CNN为每个区域评估一个10层的子网以获得良好的准确性,但是R-FCN对于每个区域的开销可以忽略不计。在测试时的300个RoIs,对于每张图像Faster R-CNN需要0.42秒,比我们的R-FCN慢2.5倍,我们的R-FCN每张图像需要0.17秒(在一个K40 GPU上;这个数字在Titan X GPU上是0.11秒)。R-FCN的训练速度也比Faster R-CNN快。此外,困难样本挖掘[22]不增加R-FCN训练的成本(表3)。从2000个RoIs开始挖掘时,训练R-FCN是可行的,在这种情况下,Faster R-CNN是R-FCN的6倍慢(2.9s vs. 0.46s)。但是实验表明,从更大的候选集合中挖掘(例如2000)没有任何好处(表3),因此我们在本文的其他部分使用300个RoI进行训练和推理。


表4显示了更多的比较:

在[8]中进行多尺度训练之后,我们在每次训练迭代中调整图像的大小,以便从{400,500,600,700,800}像素中随机采样尺度。我们仍然测试600像素的单一比例,因此不增加测试时间成本。mAP是80.5%。此外,我们在MS COCO [13] trainval集合上训练我们的模型,然后在PASCAL VOC集合上进行微调。R-FCN实现了83.6%的mAP结果(表4),接近于[9]中使用ResNet-101的“Faster R-CNN +++”系统。我们注意到,我们的竞争结果是在每幅图像0.17秒的测试速度下获得的,比Faster R-CNN +++快20倍,其需要3.36秒,因为它进一步整合了迭代框回归、上下文和多尺度测试[9]。这些比较也可以在PASCAL VOC 2012测试集上观察到(表5)。

On the Impact of Depth

下表显示了使用不同深度[9]的ResNets的R-FCN结果。当深度从50增加到101时,我们的检测精度会增加,但是当深度达到152时,我们的检测精度就会饱和。

On the Impact of Region Proposals

R-FCN可以很容易地与其他区域建议方法一起应用,比如Selective Search (SS) [27]和Edge Boxes (EB) [28]。下表显示了不同proposals的结果(使用ResNet-101)。R-FCN使用SS或EB进行比较,显示了我们方法的通用性。

4.2 Experiments on MS COCO

接下来,我们对有80个对象类别的MS COCO数据集[13]进行评估。我们的实验包括80k的训练集、40k的val集和20k的test-dev集。我们将90k迭代的学习率设置为0.001,接下来的30k迭代的学习率设置为0.0001,有效的小批量大小为8。我们将交替训练[18]从4步扩展到5步????(即在超过一个RPN训练步骤后停止),这将略微提高该数据集在共享特征时的准确性;我们还报告说,两步训练足以达到相对较好的准确性,但特性没有共享。
结果如表6所示:

我们的单尺寸训练R-FCN基线的val结果为48.9%/27.6%。这相当于Faster R-CNN基线(48.4%/27.2%),但我们的测试速度是2.5倍快。值得注意的是,我们的方法在小尺寸对象(由[13]定义)上执行得更好。我们的多尺度训练(单尺度测试)R-FCN在val集合上的结果是49.1%/27.8%,在test-dev集合上的结果是51.5%/29.2%。考虑到COCO的对象尺度范围很广,我们在[9]之后进一步评估一个多尺度测试变量,并使用{200,400,600,800,1000}的测试尺度。mAP为53.2%/31.5%。这个结果接近MS COCO 2015比赛的第一名(Faster R-CNN +++ with ResNet-101, 55.7%/34.9%)。然而,我们的方法更简单,并且没有添加[9]使用的上下文或迭代框回归之类的附加功能,并且在训练和测试都更快。

5 Conclusion and Future Work

提出了一种基于区域的全卷积网络,这是一种简单、准确、高效的目标检测框架。我们的系统自然采用了最先进的图像分类backbones,例如ResNets,它的设计完全是卷积的。我们的方法达到可以与对手Faster R-CNN竞争的精度,但更快的训练和推理。
我们有意保持本文中介绍的R-FCN系统的简单性。已有一系列为语义分割而开发的FCNs的正交扩展(如[2]),以及基于区域的对象检测方法的扩展(如[9,1,22])。我们希望我们的系统能够很容易地享受到这一领域的进步所带来的好处。

原文地址:https://www.cnblogs.com/wanghui-garcia/p/12235934.html