摘
我们提出了基于区域的全卷积网络,用于精确和有效的目标检测。与之前的基于区域的检测器(如Fast/Faster R-CNN)相比,我们的基于区域的检测器是全卷积的,几乎所有计算都在整个图像上共享。为了实现这一目标,我们提出了位置敏感的分数映射来解决图像分类中的平移不变性与目标检测中的平移方差之间的矛盾。因此,我们的方法可以很自然地采用完全卷积的图像分类器骨干网络,如最新的残差网络(ResNets),用于目标检测。我们使用101层ResNet在PASCAL VOC数据集上显示了很有竞争的结果(例如,在2007年的集上显示了83.6%的mAP)。同时,我们的结果在测试时的速度为每张图像170ms,比Faster R-CNN对应图像快2.5-20倍。
1、简介
利用感兴趣区域池化层SPP-net可以将深度目标检测网络的等价族(SPPnet、Fast R-CNN、Faster R-CNN)划分为两个子网络:(i)一个独立于RoI的共享的“完全卷积”子网络,和(ii)一个不共享计算的RoI-wise子网络。Fast R-CNN分解在历史上是由开创性的分类体系结构(如AlexNet和VGG Nets)产生的,这些分类体系结构按照设计由两个子网组成——一个以空间池化层结尾的卷积子网,后面是几个全连接(fc)层。因此,图像分类网络中最后的空间池层自然转化为目标检测网络中的RoI池层。
但最近最先进的图像分类网络,如残差网(ResNets)和GoogLeNets,在设计上却完全令人费解。通过类比,在目标检测体系结构中使用所有卷积层来构建共享的卷积子网络似乎是很自然的,这使得roi方面的子网络没有隐藏层。然而,在本文的实证研究中,这种朴素的解决方案的检测精度较低,与网络较高的分类精度不匹配。为了解决这个问题,在ResNet的论文中,Faster R-CNN检测器的RoI池层不自然地插入到两组卷积层之间——这创建了一个更深的RoI明智子网络,提高了精度,但由于每RoI计算的非共享,速度较慢。
我们认为,上述非自然的设计是由于增加图像分类的平移不变性与尊重目标检测平移变化的两难困境。一方面,图像级分类任务更倾向于平移不变性,图像中目标的平移应该是不区分的。因此,像ImageNet分类的主要结果所证明的那样,尽可能平移不变的深度(完全)卷积架构是更好的选择。另一方面,目标检测任务需要在一定程度上具有平移变化的定位表示。例如,候选框内目标的翻译应该产生有意义的响应,用于描述候选框与目标重叠的程度。我们假设图像分类网络中更深的卷积层对平移不那么敏感。为了解决这个难题,ResNet论文的检测流程将RoI池层插入到卷积中——这种特定于区域的操作打破了平移不变性,当跨不同区域进行评估时,后RoI卷积层不再是平移不变性。然而,这种设计牺牲了训练和测试效率,因为它引入了大量的区域性层(表1)。
本文提出了一种基于区域的全卷积网络(R-FCN)的目标检测框架。我们的网络由共享的、完全卷积的架构组成,就像FCN一样。为了将平移变化合并到FCN中,我们使用一组专门的卷积层作为FCN输出,构造了一组位置敏感的分数图。每一个分数映射都编码相对于空间位置的位置信息(例如,“在一个目标的左边”)。在这个FCN之上,我们添加了一个位置敏感的RoI池层,用于从这些分数图中引导信息,下面没有权值(卷积/fc)层。整个体系结构是端到端学习的。所有可学习的层都是卷积的,并在整个图像上共享,但编码了目标检测所需的空间信息。图1说明了关键思想,表1比较了基于区域的检测器之间的方法。使用101-层Residual Net(resnet - 101)[10]为骨干,R-FCN在2007 PASCAL VOC的mAP达到了83.6%,2012达到了82.0%。与此同时。使用ResNet-101我们的结果对测试时,每幅图像达到了170ms,比Faster R-CNN resnet - 101快2.5倍到20倍。实验表明,该方法能够有效地解决平移不变性/变化问题,并将ResNets等全卷积图像级分类器有效地转换为全卷积目标检测器。
2、本文的方法
概述:继R-CNN之后,我们采用了流行的两阶段目标检测策略,包括:(i)区域建议,(ii)区域分类。虽然不依赖于区域建议的方法确实存在,但是基于区域的系统在几个基准上仍然具有领先的准确性。我们使用区域建议网络(RPN)来提取候选区域,该网络本身就是一个完全卷积的体系结构。在Faster R-CNN之后,我们分享了RPN和R-FCN之间的特性。图2显示了系统的概述。
给出了建议区域(RoIs),设计了R-FCN体系结构将RoIs划分为目标类别和背景。在R-FCN中,所有可学习的权值层都是卷积的,并对整个图像进行计算。最后一个卷积层为每个类别生成一个k2位置敏感的分数映射库,因此有一个k^{2}(C 1) 个通道输出层,其中C对象类别( 1作为背景)。存储k2的映射对应一个k×k的空间网格描述相对位置。例如,当k×k = 3×3时,9个分值映射编码的是{左上角,左上角,右上角,…目标类别的右下角}。R-FCN以位置敏感的RoI池层结束。这个层汇总了最后一个卷积层的输出,并为每个RoI生成分数。与SPPnet、Fast R-CNN不同,我们的位置敏感RoI层进行选择性池化,每个k×k bin只聚合来自k×k score map库中的一个score map的响应。通过端到端训练,这个RoI层将引导最后一个卷积层来学习专门的位置敏感评分映射。图1说明了这个想法。图3和图4显示了一个示例。具体介绍如下。
骨干结构:本文中R-FCN的化身是基于ResNet-101,但也适用于其他网络。ResNet-101有100个卷积层,然后是全局平均池和1000级fc层。我们去掉了平均池化层和fc层,只使用卷积层来计算特征图。使用ResNet-101,是在ImageNet上预先训练的。ResNet-101中最后一个卷积块是2048-d,我们随机初始化1024-d 1×1个卷积层来减小维数(准确地说,这增加了表1中的深度1),然后我们使用k2(C 1)通道卷积层生成score map,如下所述。
位置敏感分数映射和位置敏感RoI池化:为了将位置信息显式编码到每个RoI中,我们将每个RoI矩形用一个规则网格划分为k×k个bin。对于大小为w×h的RoI矩形,bin的大小约为frac{w}{k} times frac{h}{k} 。在我们的方法中,构造最后一个卷积层来生成每个类别的k^2 分数图。在第(i, j)的bin(0≤i, j≤k k1)中,我们定义了一个位置敏感的RoI池操作,该操作仅在第(i, j)个分数图上进行池:
r_{c}(i, j mid Theta)=sum_{(x, y) in operatorname{bin}(i, j)} z_{i, j, c}left(x x_{0}, y y_{0} mid Thetaright) / n
对第C类来说r_{c}(i, j) 是第(i,j)个bin中的分数响应。
z_{i, j, c}是k^{2}(C 1) 分数图中的一个分数图,left(x_{0}, y_{0}right) 代表RoI的左上角坐标,n是bin内的像素数,Theta 代表网络中所有可学习的参数。第(i,j)个bin的范围为left.mid i frac{w}{k}rightrfloor leq x leqleft[(i 1) frac{w}{k}rightrceil 和left.mid j frac{h}{k}rightrfloor leq y leqleft[(j 1) frac{h}{k} midright. 。上式的操作如图1所示,其中一个颜色表示一对(i, j)。上式执行平均池化操作(正如我们在本文中所使用的),但是也可以执行最大池操作。
k^2的位置敏感得分然后对RoI进行投票。在本文中,我们简单地通过平均分数投票,生产(C 1)维向量为每个RoI: r_{c}(Theta)=sum_{i, j} r_{c}(i, j mid Theta) 。然后我们计算将softmax反应跨类别: s_{c}(Theta)=e^{r_{c}(Theta)} / sum_{c^{prime}=0}^{C} e^{r_{c^{prime}}(Theta)} 。它们用于评估训练过程中的交叉熵损失和推理过程中的roi排序。
我们还用类似的方法处理了边界框回归。除了上述k^{2}(C 1)-d 卷积层外,我们还增加了一个同级的4 k^{2}-d 卷积层用于边界盒回归。位置敏感的RoI池是在这组4 k^{2}-d 映射上执行的,为每个RoI生成一个4k^2 向量。然后通过平均投票将其聚合为一个4-d向量。这个4-d向量将一个边界框参数化为t = (tx, ty, tw, th)。我们注意到,为了简单起见,我们执行了与类无关的边界框回归,但是类特定的对应项(即,采用4k^2C-d 输出层)。
训练:通过预先计算区域建议,很容易对R-FCN体系结构进行端到端训练。Fast R-CNN后,我们的损失函数定义在每个RoI上交叉熵损失和bounding box损失之和:
Lleft(s, t_{x, y, w, h}right)=L_{c l s}left(s_{c^{*}}right) lambdaleft[c^{*}>0right] L_{r e g}left(t, t^{*}right)
这里是c^* 是RoI的ground-truth标签(c∗= 0表示背景)。
t^*代表ground truth框。[c > 0]是一个指示器,如果参数为true,它等于1,否则等于0。我们设置了平衡权重λ= 1。我们将正样本定义为roi与ground-truth的IoU至少为0.5,否则为负。该方法在训练过程中易于采用在线难例挖掘(OHEM)。我们忽略每个roi计算支持几乎免费的示例挖掘。假设每个图像有N个建议,在正向传递中,我们评估所有N个建议的损失。然后我们根据损失对所有的roi(正的和负的)进行排序,并选择损失最大的B roi。根据所选的示例执行反向传播。因为我们的每roi计算是可以忽略的,所以正向时间几乎不受N的影响,而在OHME中,OHEM Fast R-CNN可能会使训练时间加倍。我们在下一节的表3中提供了全面的计时统计信息。我们使用重量衰减为0.0005,动量为0.9。默认情况下使用单尺度训练:将图像调整为600像素的尺度(图像的短边)。每个GPU持有1张图像,并选择B = 128 roi作为支持。我们用8个gpu来训练模型(因此有效的小批量大小为8)。我们对R-FCN进行微调,20k个小批次的学习率为0.001,10k个小批次的学习率为0.0001。为了使R-FCN与RPN具有相同的特性(图2),我们在Fast R-CNN中采用4步交替训练3,交替训练RPN和R-FCN。
推断:如图2所示,计算了RPN和R-FCN之间共享的特征映射(在单一比例尺为600的图像上)。然后RPN部分提出RoIs, R-FCN部分在此基础上评估分类得分并回归边界框。在推理过程中,我们评估了300 RoIs在作为公平的比较。以0.3 IoU阈值为标准,采用非最大抑制(NMS)对结果进行后处理。
空洞卷积核步长:我们的全卷积架构得益于FCNs广泛用于语义分割的网络修改。特别地,我们将ResNet-101的有效步长从32个像素降低到16个像素,从而提高了score map的分辨率。conv4阶段(stride=16)前后各层均未发生变化;将第一个conv5块中的stride=2操作修改为stride=1,并将conv5级上的所有卷积滤波器修改为“hole algorithm”(“Algorithme a trous”)来补偿减少的stride。为了进行公平的比较,RPN是在conv4阶段(与R-FCN共享)的顶部计算的,就像Faster R-CNN一样,因此RPN不受空洞卷积技巧的影响。下表为R-FCN消融结果(k×k = 7×7,无难例开采)。空洞卷积将mAP提升了2.6%。
可视化:在图3和图4中,我们可视化了R-FCN在k×k = 3×3时学习的位置敏感评分图。这些专门化的映射将在目标的特定相对位置被强激活。例如,“top-center-sensitive”评分地图显示的高分大致位于对象的顶部中心位置附近。如果一个候选框恰好与一个真实的目标重叠(图3),RoI中的大部分k^2 bin都会被强烈激活,并且它们的投票结果会得到高分。相反,如果一个候选框没有正确地与一个真实的目标重叠(图4),RoI中的一些k^2 bin没有被激活,并且投票得分很低。
3、相关工作
R-CNN已经证明了在深度网络中使用区域建议的有效性[28,29]。R-CNN 评估卷积网络剪裁和扭曲的区域, 计算并不是在区域 之间共享(Table 1)。SPPnet, Fast R-CNN, 和 Faster R-CNN“semiconvolutional”, 中卷积子网执行共享计算整个图像 , 另一 个子网评估单个区域。有一些目标检测器可以被认为是“完全卷积”模型。OverFeat通过在共享卷积特征图上滑动多尺度窗口来检测目标;同样,在Fast R-CNN和R-CNN中,研究了替代区域建议的滑动窗口。在这些情况下,可以将单个尺度的滑动窗口重新转换为单个卷积层。Faster R-CNN中的RPN组件是一个全卷积检测器,它预测相对于多个大小的参考框(锚)的边界框。在Faster R-CNN中,原始的RPN是与类无关的,但是它的类特定的对应项是适用的,正如我们在下面的评估中所述。另一类目标检测器则使用全连接(fc)层在整个图像上生成整体对象检测结果。
4、实验
4.1、在PASCAL VOC上的实验
我们在PASCAL VOC上进行了20个对象类别的实验。我们在随后的VOC 2007 trainval和VOC 2012 trainval(“07 12”)的联合集上对模型进行训练,并对VOC 2007测试集进行评估。
与其他全卷积策略的比较
虽然全卷积检测器是可用的,但实验表明,它们要达到良好的精度并非易事。我们使用ResNet-101研究了以下全卷积策略(或者“几乎”全卷积策略,每个RoI只有一个分类器fc层):
原始的Faster R-CNN:如引言所述,可以使用ResNet-101中的所有卷积层计算共享特征图,并在最后一个卷积层(conv5之后)采用RoI池。每个RoI上评估一个廉价的21级fc层(因此这个变体“几乎”完全卷积)。这是一个用于公平比较的技巧。
指定类的RPN:该RPN是在Faster R-CNN之后进行训练的,只是将2类卷积分类器层替换为21类卷积分类器层。为了公平比较,对于这个特定于类的RPN,我们使用ResNet-101的conv5层和一个trous技巧。
没有position-sensitivity R-FCN:通过设置k = 1,我们去掉了R-FCN的位置灵敏度。这相当于每个RoI中的全局池。
表2显示了结果。我们注意到,ResNet论文中标准的Faster R-CNN使用ResNet-101实现了76.4%的mAP(见表3),它将RoI池层插入conv4和conv5之间。作为对比,单纯的Fast R-CNN(即在conv5之后应用RoI池)的mAP显著低于68.9%(表2)。通过在层与层之间插入RoI池,Fast R-CNN系统证明了尊重空间信息的重要性。特定于类的RPN的mAP为67.6%(表2),比标准的Faster R-CNN的76.4%低9个点。这种比较与R-CNN和Fast R-CNN中的观察结果一致——事实上,RPN类似于一种特殊形式的Fast R-CNN[7],它使用密集的滑动窗口作为提案,其结果不如R-CNN和Fast R-CNN中报道的那样。另一方面,我们R-FCN系统有更好的准确性(表2)。这些结果表明,我们的位置敏感的战略管理编码有用的空间信息定位对象,不使用任何RoI合用后可学的层。通过设置k = 1进一步证明了位置敏感性的重要性,其中R-FCN无法收敛。在这种降级的情况下,RoI中不能显式捕获空间信息。此外,我们还报道,如果R-CNN的RoI池输出分辨率为1×1,那么它可以收敛得更快,但是mAP进一步大幅下降到61.7%(表2)。
与基于ResNet-101的Faster R-CNN比较:
接下来,我们将与标准的“fast R-CNN ResNet-101”[10]进行比较。下面我们使用k×k = 7×7。表3显示了比较结果。Faster R-CNN为每个区域评估一个10层的子网,以达到良好的精度,但R-FCN的每个区域的成本可以忽略不计。在测试时有300个roi,Faster R-CNN每幅图像需要0.42秒,比我们的R-FCN每幅图像需要0.17秒慢2.5×(在K40 GPU上;这个数字在泰坦X GPU上是0.11秒)。R-FCN的训练速度也比R-CNN快。此外,挖掘并没有增加R-FCN训练的成本(表3)。从2000个roi开始挖掘时,训练R-FCN是可行的,此时Faster R-CNN是6×慢(2.9s vs. 0.46s)。但是实验表明,从更大的候选集合中挖掘(例如,2000)没有任何好处(表3),因此我们在本文的其他部分使用300个roi进行训练和推理。表4显示了更多的比较。在SPPnet中的多尺度训练之后,我们在每次训练迭代中调整图像的大小,以便从{400,500,600,700,800}像素中随机采样尺度。我们仍然测试600像素的单一比例尺,因此不增加测试时间成本。这个比例是80.5%。此外,我们在MS COCO trainval set上对模型进行训练,然后在PASCAL VOC set上进行微调,R-FCN的mAP达到83.6%(表4),接近ResNet中使用ResNet-101的“Faster R-CNN ”系统。我们注意到,我们的竞争结果是在每幅图像0.17秒的测试速度下获得的,比Faster R-CNN 快20倍,这需要3.36秒,因为它进一步集成了迭代盒回归、上下文和多尺度测试。在PASCAL VOC 2012测试集上也可以看到这些比较(表5)。
下表显示了使用不同深度的ResNets以及VGG-16模型得到的R-FCN结果。对于VGG-16模型,将fc层(fc6, fc7)转化为滑动卷积层,并在其上应用1×1卷积层生成位置敏感的分数图。使用VGG-16的R-FCN性能略低于ResNet-50。在ResNet中,当深度从50增加到101时,我们的检测精度增加,但当深度达到152时,我们的检测精度达到饱和。
关于区域建议的影响:R-FCN可以很容易地应用于其他区域建议方法,如选择性搜索(SS)和边缘框(EB)。下表显示了不同提案的结果(使用ResNet-101)。R-FCN在使用SS或EB时具有较强的竞争力,说明了我们方法的通用性。
4.2、在MS COCO上的实验
接下来,我们将对具有80个目标类别的MS COCO数据集进行评估。我们的实验包括80k训练集、40k val集和20k test-dev集。我们将90k迭代的学习率设置为0.001,接下来的30k迭代的学习率设置为0.0001,有效的小批量大小为8。我们将交替训练Faster R-CNN从4步扩展到5步。,再经过一个RPN训练步骤后停止),这将略微提高该数据集在共享特征时的准确性;我们还报告说,两步训练足以达到相当好的准确性,但没有共享的特点。结果如表6所示。我们的单尺度训练R-FCN基线的val结果为48.9%/27.6%。这相当于Faster R-CNN基线(48.4%/27.2%),但我们的测试速度是2.5×更快。值得注意的是,我们的方法在较小的目标上执行得更好。我们的多尺度训练(但单尺度测试)R-FCN在val集上的结果为49.1%/27.8%,在test-dev集上的结果为51.5%/29.2%。考虑到COCO目标尺度的广泛性,我们进一步评估了ResNet之后的多尺度测试变体,并使用了{200,400,600,800,1000}的测试尺度。mAP为53.2%/31.5%。这一结果接近2015年MS COCO大赛的第一名(Faster R-CNN , ResNet-101, 55.7%/34.9%)。然而,我们的方法更简单,并且没有添加[10]使用的上下文或迭代框回归之类的额外功能,并且对于训练和测试都更快。
5、结论和将来的工作
提出了一种基于区域的全卷积网络,这是一种简单、准确、高效的目标检测框架。我们的系统自然采用了最先进的图像分类骨干,如ResNets,它的设计完全是卷积的。我们的方法达到了精度与Faster R-CNN竞争对手,但在训练和推理过程中都快得多。我们有意使本文中介绍的R-FCN系统保持简单。已有一系列针对语义分割的FCNs正交扩展,以及基于区域的目标检测方法的扩展。我们希望我们的系统能够很容易地从这一领域的进展中获益。