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

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

摘要

我们提出了基于区域(region-based)的全卷积网络,以实现准确高效的目标检测。与先前的基于区域的检测器(如Fast/Faster R-CNN [6,18])相比,这些检测器应用高代价的每个区域子网络(per-region subnetwork)数百次,我们的基于区域的检测器是全卷积的,几乎所有计算都在整张图像上共享。为了实现这一目标,我们提出了位置敏感分数图(position-sensitive score maps,以解决图像分类中的平移不变性与目标检测中的平移变化之间的困境。因此,我们的方法可以自然地采用全卷积图像分类器的主干网络,如最新的残差网络(ResNets)[9],用于目标检测。我们使用101层ResNet在PASCAL VOC数据集上展示了具有竞争力的结果(例如,2007数据集上83.6%的mAP)。同时,我们的测试结果是以每张图像170ms的测试速度实现的,比Faster R-CNN对应部分速度快2.5-20

https://github.com/daijifeng001/r-fcn

1. 引言

流行的目标检测深度网络家族[8,6,18]通过感兴趣区域(RoI)池化层[6]可以划分成两个子网络:(1)独立于RoI的共享“全卷积”子网络,(ii)不共享计算的RoI子网络。这种分解[8]以往是由开创性的分类架构产生的,例如AlexNet[10]和VGG Nets[23]等,在设计上它由两个子网络组成——一个卷积子网络以空间池化层结束,后面是几个全连接(fc)层。因此,图像分类网络中的(最后一个)空间池化层在目标检测网络中[8,6,18]自然地变成了RoI池化层。

但是最近最先进的图像分类网络,如ResNet(ResNets)[9]和GoogLeNets[24,26]是全卷积的。通过类比,在目标检测架构中使用所有卷积层来构建共享的卷积子网络似乎是很自然的,使得RoI的子网络没有隐藏层。然而,在这项工作中通过经验性的调查发现,这个天真的解决方案有相当差的检测精度,不符合网络的优秀分类精度。为了解决这个问题,在ResNet论文[9]中,Faster R-CNN检测器[18]的RoI池化层不自然地插入在两组卷积层之间——这创建了更深的RoI子网络,其改善了精度,由于非共享的RoI计算,因此是以更低的速度为代价。

我们认为,前述的非自然设计是由于增加图像分类的转化不变性与目标检测的平移可变性而导致的两难境地。一方面,图像级别的分类任务有利于平移不变性——图像内目标的移动应该是无差别的。因此,深度(全)卷积架构尽可能保持平移不变,这一点可以从ImageNet分类[9,24,26]的主要结果中得到证实。另一方面,目标检测任务的定位表示需要一定程度上的平移可变性。例如,在候选框内目标变换应该产生有意义的响应,用于描述候选框与目标的重叠程度。我们假设图像分类网络中较深的卷积层对平移不太敏感。为了解决这个困境,ResNet论文的检测流程[9]将RoI池化层插入到卷积中——特定区域的操作打破了平移不变性,当在不同区域进行评估时,RoI后卷积层不再是平移不变的。然而,这个设计牺牲了训练和测试效率,因为它引入了大量的区域层(表1)。

表1:使用ResNet-101的基于区域的检测器方法[9]。

 

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

 

图1:R-FCN目标检测的主要思想。在这个例子中,由全卷积网络生成了k×k=3×3的位置敏感分数图。对于RoI中的每个k×k组块,仅在 个映射中的一个上执行池化(用不同的颜色标记)。

使用101层残差网络(ResNet-101)[9]作为主干网络,我们的R-FCN在PASCAL VOC 2007数据集和2012数据集上分别获得了83.6%的 mAP和 82.0%的 mAP。同时,使用ResNet-101,我们的结果在测试时是以每张图像170ms的速度实现的,比[9]中对应的Faster R-CNN + ResNet-101快了2.5倍到20倍。这些实验表明,我们的方法设法解决平移不变性/可变性和全卷积图像级分类器之间的困境,如ResNet可以有效地转换为全卷积目标检测器。

2. 我们的方法

概述。根据R-CNN[7],我们采用了流行的两阶段目标检测策略[7,8,6,18,1,22],其中包括:(i)区域提议和(ii)区域分类。尽管不依赖region proposal(区域提议)的方法确实存在(例如,[17,14]),但是基于区域的系统在几个基准数据集中仍然具有领先的准确性[5,13,20]。我们通过区域提议网络(RPN)提取candidate regions(候选区域) [18],其本身就是一个全卷积架构。在[18]之后,我们在RPN和R-FCN之间的共享特征。图2显示了系统的概述。

 

图2:R-FCN的总体架构。区域建议网络(RPN)[18]提出了候选RoI,然后将其应用于评分图上。所有可学习的权重层都是卷积的,并在整个图像上计算;每个RoI的计算成本可以忽略不计。

R-FCN以位置敏感的RoI池化层结束。该层聚合最后一个卷积层的输出,并为每个RoI生成分数。与[8,6]不同的是,我们的位置敏感RoI层进行选择性池化,并且k×k个组块中的每一个仅聚合k×k分数图中一个得分图的响应。通过端到端的训练,这个RoI层可以管理最后一个卷积层来学习专门的位置敏感分数图。图1说明了这个想法。图3和图4显示了一个例子。详细介绍如下。

 

图3:行人类别的R-FCN(k×k=3×3)可视化。

 

图4:当RoI不能正确重叠目标时的可视化。

主干架构。本文中典型的R-FCN是基于ResNet-101[9]的,但其他网络[10,23]也适用。ResNet-101有100个卷积层,后面是全局平均池化和1000类的全连接层。我们删除了平均池化层和全连接层,只使用卷积层来计算特征映射。我们使用由[9]的作者发布的ResNet-101,在ImageNet[20]上预训练。ResNet-101中的最后一个卷积块是2048维,我们附加一个随机初始化的1024维的1×1卷积层来降维(准确地说,这增加了表1中的深度)。然后,我们应用 通道卷积层来生成分数图,如下所述。

位置敏感的分数图和位置敏感的RoI池化。为了将位置信息显式地编码到每个RoI中,我们用规则网格将每个RoI矩形分成k×k的组块。对于大小为w×h的RoI矩形,组块的大小为  [8,6]。在我们的方法中,构建最后的卷积层为每个类别产生 分数图。在第(i,j)个组块0≤i,j≤k−1中,我们定义了一个位置敏感的RoI池化操作,它只在第(i,j)个分数映射中进行池化:

 

其中rc(i,j)是第(i,j)个组块中第c个类别的池化响应,zi,j,c是 分数图中的一个分数图, 表示一个RoI的左上角,n是组块中的像素数量,Θ表示网络的所有可学习参数。第(i,j)个组块跨越 。

公式(1)的操作如图1所示,其中颜色表示一对(i,j)。方程(1)执行平均池化(正如我们在本文中使用的那样),但是也可以执行最大池化。

位置敏感的分数会在RoI上投票。在本文中,我们通过对分数进行平均来简单地投票,为每个RoI产生一个(C+1)(维向量: 。然后,我们计算跨类别的softmax响应: 。它们被用来评估训练期间的交叉熵损失以及在推理过程中对ROI进行排序。    

我们以类似的方式进一步解决边界框回归[7,6]。除了上面的 维卷积层,我们在边界框回归上附加了一个 维兄弟卷积层。在这组 维映射上执行位置敏感的RoI池化,为每个RoI生成一个 维的向量。然后通过平均投票聚合到4维向量中。这个4维向量将边界框参数化为t=(tx,ty,tw,th),参见[6]中的参数化。我们注意到为简单起见,我们执行类别不可知的边界框回归,但类别特定的对应部分(即,具有 维输出层)是适用的。

位置敏感分数图的概念部分受到了[3]的启发,它开发了用于实例级语义分割的FCN。我们进一步介绍了位置敏感的RoI池化层,它可以让学习的分数图用于目标检测。RoI层之后没有可学习的层,使得区域计算几乎是零成本的,并加速训练和推断。

训练。通过预先计算的区域提议,很容易端到端训练R-FCN架构。根据[6],我们定义的损失函数是每个RoI的交叉熵损失和边界框回归损失的总和: 。

这里c*是RoI的真实标签( =0表示背景)。 是分类的交叉熵损失,Lreg是[6]中定义的边界框回归损失,表示真实的边界框。[ >0]是一个指标,如果参数为true,则等于1,否则为0。我们将平衡权重设置为λ=1,如[6]中所示。我们将正样本定义为与真实边界框重叠的交并比(IoU)至少为0.5的ROI,否则为负样本。

我们的方法很容易在训练期间采用联机硬示例挖掘(OHEM)[22]。我们可忽略的每个RoI计算使得几乎零成本的样例挖掘成为可能。假设每张图像有N个提议,在前向传播中,我们评估所有N个提议的损失。然后,我们按损失对所有的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×)。在VOC上我们对R-FCN进行微调,使用0.001学习率进行2万次迭代和使用0.0001学习率进行1万次迭代。为了使R-FCN与RPN共享特征(图2),我们采用[18]中的四步交替训练,交替训练RPN和R-FCN。

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

空洞和步长。我们的全卷积架构享有FCN广泛使用的语义分割的网络修改的好处[15,2]。特别的是,我们将ResNet-101的有效步长从32像素降低到了16像素,增加了分数图的分辨率。conv4阶段[9](stride = 16)之前和之后的所有层都保持不变;第一个conv5块中的stride=2操作被修改为stride=1,并且conv5阶段的所有卷积滤波器都被“hole algorithm”[15,2](“Algorithme atrous”[16])修改来弥补减少的步幅。为了进行公平的比较,RPN是在conv4阶段(与R-FCN共享)之上计算的,就像[9]中Faster R-CNN的情况那样,所以RPN不会受空洞行为的影响。下表显示了R-FCN的消融结果(k×k=7×7,没有hard example mining)。这个空洞行为提高了2.6点的mAP。

 

可视化。在图3和图4中,当k×k=3×3时,我们可视化R-FCN学习的位置敏感分数图。期望这些专门的分数图将在目标特定的相对位置被强烈激活。例如,“顶部中心敏感”分数图大致在目标的顶部中心位置附近呈现高分数。如果一个候选框与一个真实目标精确重叠(图3),则RoI中的大部分 组块都被强烈地激活,并且他们的投票导致高分。相反,如果一个候选框与一个真实的目标没有正确的重叠(图4),那么RoI中的一些 组块没有被激活,投票分数也很低。

3. 相关工作

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)预测边界框。最初的RPN在[18]中是类不可知的,但是它的类特定的对应部分也是适用的(参见[14]),我们在下面进行评估。

另一个目标检测器家族采用全连接(fc)层来在整张图像上生成整体的目标检测结果,如[25,4,17]。

4. 实验

4.1 PASCAL VOC上的实验

我们在有20个目标类别的PASCAL VOC[5]上进行实验。我们根据[6]对VOC 2007 trainval和VOC 2012 trainval(“07 + 12”)的联合数据集进行训练,并在VOC 2007测试集上进行评估。目标检测精度通过平均精度均值(mAP)来度量。

 

 

 

与其它全卷积策略的比较

虽然全卷积检测器是可用的,但是实验表明,它们要达到良好的精度是复杂的。我们使用ResNet-101研究以下全卷积策略(或“几乎”全卷积策略,每个RoI只有一个分类器全连接层):

Naive Faster R-CNN如介绍中所讨论的,可以使用ResNet-101中的所有卷积层来计算共享特征映射,并且在最后的卷积层(conv5之后)之后采用RoI池化。在每个RoI上评估一个廉价的21类全连接层(所以这个变体是“几乎”全卷积的)。空洞窍门是用来进行公平比较的。

Class-specific RPN这个RPN按照[18]进行训练,除了两类(是目标或不是)卷积分类器层被替换为21类卷积分类器层。为了公平的比较,对于这个类别特定的RPN,我们使用具有空洞窍门的ResNet-101的conv5层来处理。

R-FCN without position-sensitivity通过设置k=1,我们移除了R-FCN的位置灵敏度。这相当于在每个RoI内进行全局池化。

分析。表2显示了结果。我们注意到在ResNet论文[9]中的标准(非简单)Faster R-CNN与ResNet-101(参见表3)达到了76.4%的mAP,在conv4和conv5之间插入了RoI池化层[9]。相比之下,简单的Faster R-CNN(在conv5之后应用RoI池化)具有68.9%的更低的mAP(表2)。这种比较通过在Faster R-CNN系统的层之间插入RoI池化在经验上证明了尊重空间信息的重要性。在[19]中报道了类似的观测结果。

表2:使用ResNet-101的全卷积(或“几乎”全卷积)策略之间的比较。表中的所有竞争者都使用了空洞窍门。不执行难例挖掘。

 

表3:使用ResNet-101比较Faster R-CNN和R-FCN。实际是在单个Nvidia K40 GPU上评估的。使用OHEM,在前向传播中计算每张图像的N个RoI,并且选择128个样本用于反向传播。在下面的[18]中使用了300个RoI进行测试。

 

类别特定的RPN具有67.6%(表2)的mAP,比标准Faster R-CNN的76.4%低约9个百分点。这个比较符合[6,12]中的观测结果——实际上,类别特定的RPN类似于使用密集滑动窗口作为提议的一种特殊形式的Fast R-CNN[6],如[6,12]中所报道的较差结果。

另一方面,我们的R-FCN系统具有更好的准确性(表2)。其mAP(76.6%)与标准Faster R-CNN(76.4,表3)相当。这些结果表明,我们的位置敏感策略设法编码有用的空间信息来定位目标,而在RoI池化之后不使用任何可学习的层。

位置灵敏度的重要性通过设置k=1来进一步证明,其中R-FCN不能收敛。在这种退化的情况下,在RoI内不能显式捕获空间信息。此外,我们还报告了,如果简单Faster R-CNN的ROI池化输出分辨率为1×1,其能够收敛,但是mAP进一步下降到61.7%(表2)。

 

与使用ResNet-101的Faster R-CNN的比较

接下来,我们与标准的“Faster R-CNN + ResNet-101”[9]进行比较,它是PASCAL VOC,MS COCO和ImageNet基准测试中最强劲的竞争对手和最佳表现者。我们在下面使用k×k=7×7。表3显示了比较。Faster R-CNN评估了每个区域的10层子网络以达到良好的精度,但是R-FCN每个区域的成本可以忽略不计。在测试时使用300个RoI,Faster R-CNN每张图像花费0.42s,比我们的R-FCN慢了2.5倍,R-FCN每张图像只有0.17s(在K40 GPU上,这个数字在Titan X GPU上是0.11s)。R-FCN的训练速度也快于Faster R-CNN。此外,硬示例挖掘[22]没有增加R-FCN的训练成本(表3)。当从2000个RoI挖掘时训练R-FCN是可行的,在这种情况下,Faster R-CNN慢了6倍(2.9s vs. 0.46s)。但是实验表明,从更大的候选集(例如2000)中进行挖掘没有好处(表3)。所以我们在本文的其他部分使用了300个RoI来进行训练和推断。

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

表4:使用ResNet-101在PASCAL VOC 2007测试集上的比较。“Faster R-CNN +++”[9]使用迭代边界框回归,上下文和多尺度测试。

 

表5:使用ResNet-101在PASCAL VOC 2012测试集上的比较。“07 ++ 12”[6]表示07训练+测试和12训练的联合数据集。

 

关于深度的影响

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

 

关于区域提议的影响

R-FCN可以很容易地应用于其它的区域提议方法,如选择性搜索(SS)[27]和边缘框(EB)[28]。下表显示了使用不同提议的结果(使用ResNet-101)。R-FCN使用SS或EB运行,竞争性地展示了我们方法的泛化性。

 

4.2 MS COCO上的实验

接下来,我们评估MS COCO数据集[13]中的80个目标类别。我们的实验包括8万张训练集,4万张验证集和2万张测试开发集。我们将9万次迭代的学习率设为0.001,接下来的3万次迭代的学习率设为0.0001,有效的最小批数据大小为8。我们将交替训练[18]从4步扩展到5步(即在RPN训练步骤后停止),当共享特征时略微提高了在该数据集上的准确性;我们还报告了两步训练足以达到相当好的准确性,但不共享这些特征。

结果如表6所示。我们单尺度训练的R-FCN基准模型的验证结果为48.9%/27.6%。这与Faster R-CNN的基准模型相当(48.4%/27.2%),但我们的测试速度是Faster R-CNN的2.5倍。值得注意的是,我们的方法在小尺寸的目标上表现更好(由[13]定义)。我们的多尺度训练(但仍是单一尺度测试)的R-FCN在验证集上的结果为49.1%/27.8%,在测试开发集上的结果是51.5%/29.2%。考虑到COCO广泛的目标尺度,按照[9]我们进一步评估多尺度的测试变种,并使用{200,400,600,800,1000}的测试尺度。mAP是53.2%/31.5%。这个结果在MS COCO 2015比赛中接近第一名的成绩(Faster R-CNN+++和ResNet-101,55.7%/34.9%)。尽管如此,我们的方法更简单,并没有添加[9]中所使用的多样功能例如上下文或迭代边界框回归,并且在训练和测试中都更快。

表6:使用ResNet-101在MS COCO数据集上比较。COCO式的AP在IoU∈[0.5,0.95]处评估。AP@0.5是PASCAL式的AP,在IoU=0.5处评估。

 

5. 总结和将来的工作

我们提出了基于区域的全卷积网络,这是一个简单但精确且高效的目标检测框架。我们的系统自然地采用了设计为全卷积的最先进的图像分类骨干网络,如ResNet。我们的方法实现了与Faster R-CNN对应网络相比更具竞争力的准确性,但是在训练和推断上都快得多。

我们故意保持R-FCN系统如论文中介绍的那样简单。已经有一系列针对语义分割(例如,参见[2])开发的FCN的正交扩展,以及用于目标检测的基于区域的方法的扩展(例如参见[9,1,22])。我们期望我们的系统能够轻松享有这个领域的进步带来的好处。

 

上一篇:python图像处理常用方法


下一篇:Web Service via SSL