专栏首页中科院渣渣博肆僧一枚Feature Pyramid Networks for Object Detection

Feature Pyramid Networks for Object Detection


1、摘要

特征金字塔是不同尺度目标识别系统的基本组成部分。但最近的深度学习对象检测器已经避免了金字塔表示,部分原因是它们需要大量的计算和内存。本文利用深卷积网络固有的多尺度金字塔结构构造了具有边际额外成本的特征金字塔。提出了一种具有横向连接的自顶向下体系结构,用于在所有尺度上构建高级语义特征图。该体系结构称为特征金字塔网络(FPN),作为一种通用的特征提取器,它在几个应用程序中得到了显著的改进。在一个基本的Fasater R-CNN系统中使用FPN,我们的方法在COCO检测基准上实现了最先进的单模型结果,没有任何附加条件,超过了所有现有的单模型条目,包括来自COCO 2016挑战赛冠军的条目。此外,我们的方法可以在GPU上以每秒6帧的速度运行,因此是一种实用而准确的多尺度目标检测解决方案。

2、简介

在计算机视觉中,识别不同尺度的物体是一个基本的挑战。构建在图像金字塔之上的特征金字塔(简而言之,我们称这些特征金字塔为featurized image pyramid)构成了标准解决方案的基础,如下图所示(a)所示。这些金字塔是尺度不变的,因为一个物体的尺度变化是通过改变其在金字塔中的层级来抵消的。直观地说,这个属性使模型能够通过扫描位置和金字塔级别上的模型来跨大范围地检测对象。

在手工设计特征的时代,大量使用了Featurized image pyramid。它们是如此重要,以至于像DPM这样的对象检测器需要密集的尺度采样才能获得良好的结果(例如,每八度10个尺度)。对于识别任务,手工特征在很大程度上已经被深卷积网络(ConvNets)计算的特征所取代。除了能够表示更高层次的语义外,ConvNets对尺度的变化也更健壮,从而便于从单个输入尺度上计算的特征进行识别,如上图(b)所示。但是即使有了这种鲁棒性,金字塔仍然需要得到最精确的结果。ImageNet和COCO检测挑战中最近的所有顶级方法都使用了对特征化图像金字塔的多尺度测试。提取特征金字塔每一层的优点是它产生了一个多尺度的特征表示,其中所有层在语义上都是强的,包括高分辨率层。

然而,使图像金字塔的每一层都饱和有明显的限制。推理时间显著增加,使得这种方法在实际应用中不切实际。此外,在图像金字塔上端到端训练深度网络在内存方面是不可行的,因此,如果利用图像金字塔,只在测试时使用,这造成了训练/测试时间推断之间的不一致。基于这些原因,Faster R-CNN在默认设置下选择不使用featurized image pyramid。

然而,图像金字塔并不是计算多尺度特征表示的唯一方法。深卷积神经网络逐层计算特征层次结构,通过子采样层,特征层次结构具有固有的多尺度金字塔形状。这种网络内的特征层次结构产生了不同空间分辨率的特征图,但由于深度不同,导致了较大的语义差异。高分辨率地图具有低水平的特征,损害了其对目标识别的表征能力。

单阶段检测器(SSD)是第一个尝试使用卷积神经网络的锥体特征层次结构,就像它是一个featurized图像金字塔,如上图(c)所示。理想情况下,ssd样式的金字塔将重用来自不同层的多尺度特征图,并在向前传递中计算,因此不需要成本。但是为了避免使用底层特性,SSD放弃了重用已经计算好的层,而是从网络的高层开始构建金字塔,然后添加几个新层。因此,它错过了重用特性层次结构的高分辨率映射的机会。我们证明了这些对于探测小物体是很重要的。

本文的目标是利用ConvNet的特征层次结构的金字塔形状,同时创建一个在所有尺度上都具有强大语义的特征金字塔。为了实现这一目标,我们依赖于通过自顶向下的路径和横向连接将低分辨率、语义强的特性与高分辨率、语义弱的特性结合起来的体系结构,如上图(d)所示。其结果是一个特征金字塔,具有丰富的语义,在所有级别,并从一个单一的输入图像规模迅速建立。换句话说,我们展示了如何创建网络内的特征金字塔,这些特征金字塔可以用来替代已饱和的图像金字塔,而不牺牲表征能力、速度或内存。

类似的采用自顶向下和跳过连接的架构在最近的研究中很流行。他们的目标是生成一个高分辨率的单一高级特征图,并据此做出预测,如下图的顶部。相反,我们的方法利用架构作为一个特征金字塔,在每个层次上独立地进行预测(例如,目标检测),如下图底部。我们的模型呼应了一个featurized image pyramid,这在这些fa中没有被探索过。

我们评估了我们的方法,称为特征金字塔网络(FPN),在各种系统中用于检测和分割。基于FPN和Faster R-CNN在COCO挑战赛上评估了目标检测结果,超越所有现有的设计良好的单阶段检测器。在消融实验中,我们发现对于bounding box proposal,FPN显著提高平均召回率(AR) 8.0个百分点;对于目标检测,它将coco数据集的平均精度(AP)提高了2.3个点,pascal数据集的AP提高了3.8个点,超过了ResNets上Faster R-CNN的强大单尺度baseline。我们的方法也很容易扩展到mask proposals和提高实例分割AR和速度的最先进的方法,严重依赖于图像金字塔。

此外,金字塔结构可以在所有尺度上进行端到端训练,并在训练/测试时始终如一地使用,这将是内存不可行的使用图像金字塔。因此,FPN能够达到比所有现有的最先进的方法更高的精度。此外,这种改进是在不增加测试时间的情况下实现的。我们相信这些进展将促进未来的研究和应用。

3、Feature Pyramid Networks

我们的目标是利用ConvNet的金字塔式特征层次结构,它具有从低到高的语义,并构建一个自始至终具有高级语义的特征金字塔。所得到的特征金字塔网络是通用的,本文主要研究滑动窗口提出器(区域建议网络,简称RPN)和基于区域的检测器(Fast R-CNN)[11]。

我们的方法以任意大小的单尺度图像作为输入,并以完全卷积的方式在多个级别按比例大小输出特征映射。该过程独立于骨干卷积架构,本文使用ResNets给出结果。金字塔的构建包括自下而上的路径、自上而下的路径和横向连接,如下所述。

自底向上的通道:自底向上路径是主干网的前馈计算,它计算一个由多个尺度的特征映射组成的特征层次结构,其缩放步长为2。通常有许多层生成相同大小的输出映射,我们说这些层处于相同的网络阶段。对于我们的特征金字塔,我们为每个阶段定义一个金字塔级别。我们选择每一阶段最后一层的输出作为我们的参考特征图集,我们将对其进行丰富以创建我们的金字塔。这种选择是自然的,因为每个阶段的最深层应该具有最强的特性。具体来说,对于ResNets,我们使用每个阶段最后剩余块的特性激活输出。我们将这些最后剩余块的输出表示为conv2、conv3、conv4和conv5输出的{C2、C3、C4、C5},并注意它们对于输入图像的步长为{4、8、16、32}。我们没有将conv1包含到金字塔中,因为它占用了大量内存。

自上而下的通路和横向连接:自顶向下的路径通过从更高的金字塔层次向上采样空间更粗但语义更强的特征图,从而产生更高分辨率的特征。然后,通过横向连接,自底向上路径的特征增强了这些特征。每个横向连接从自底向上的通路和自顶向下的通路合并相同空间大小的特征图。自底向上的特征图具有较低层次的语义,但由于它的子采样次数较少,其激活的本地化程度较高。图3显示了构建自顶向下特征映射的构建块。对于粗分辨率的特征图,我们将空间分辨率向上采样2倍(为了简单起见,使用最近邻向上采样)。然后将上采样的映射与相应的自底向上映射(该自底向上映射经过1×1卷积层以减少通道维数)通过元素的添加进行合并。此过程将迭代,直到生成最精确的分辨率映射。为了开始迭代,我们只需在C5上附加一个1×1的卷积层来生成最粗分辨率的map。最后,我们在每个合并后的map上追加一个3×3的卷积,生成最终的feature map,这是为了减小上采样的混叠效果。最后一组feature map称为{P2,P3,P4,P5},对应于空间大小相同的{C2,C3,C4,C5}。由于所有层次的金字塔都使用共享的分类器/回归器,就像传统的featurized image pyramid一样,我们在所有的feature map中固定了feature dimension(通道数,记作d)。我们在本文中设d = 256,因此所有额外的卷积层都有256通道输出。在这些额外的层中不存在非线性,我们从经验上发现它们的影响很小。简单性是我们设计的核心,我们发现我们的模型对许多设计选择都是健壮的。我们已经用更复杂的块进行了实验(例如,使用多层剩余块[16]作为连接),并观察到稍好一些的结果。设计更好的连接模块并不是本文的重点,所以我们选择了上面描述的简单设计。

4、应用

我们的方法是在深对流中构造特征金字塔的一种通用解决方案。下面我们采用RPN中生成边界框的方法和Fast R-CNN中生成目标检测的方法。

4.1、Feature Pyramid Networks for RPN

RPN是一个滑动窗口的类无关目标检测器。在原始的RPN设计中,在一个单尺度卷积特征图上,在密集的3×3滑动窗口上对一个小的子网络进行评估,执行对象/非对象二分类和边界盒回归。这是通过一个3×3卷积层和两个同级的1×1卷积进行分类和回归来实现的,我们称之为网络头。对象/非对象标准和边界框回归目标是根据一组称为锚的参考框定义的。锚具有多个预定义的尺度和纵横比,以覆盖不同形状的目标。

通过用FPN替换单尺度特征图来适应RPN。在特征金字塔的每一层上附加一个相同设计的头部(3×3 conv和两个同级的1×1 convs)。由于头部在所有金字塔层的所有位置上都密集地滑动,因此没有必要在特定的层上使用多尺度锚。相反,为每个级别分配单一比例的锚。在形式上,我们定义锚点在{P2,P3,P4,P5,P6}上分别具有{322,642,1282,2562,5122}像素的区域。我们也在每一层使用多个纵横比{1:2,1:1,2:1}的锚,金字塔上总共有15个锚。

我们根据锚点与地面真实边界框的相交-联合(IoU)比为锚点分配训练标签。如果一个锚点对一个给定的ground-truth框有最高的IoU,或者对任何ground-truth框有超过0.7的IoU,那么它就被赋予一个正标签;如果对所有ground-truth框有低于0.3的IoU,那么它就被赋予一个负标签。请注意,地面真相盒的比例并没有显式地用于将它们分配到金字塔的级别;相反,ground truth框与锚相关联,锚被分配到金字塔级别。因此,除了中的规则外,我们不引入任何额外的规则。我们注意到头部的参数在所有特征金字塔级别上是共享的;我们也评估了不共享参数的替代方案,并观察到类似的准确性。共享参数的良好性能表明,我们的金字塔的所有层共享相似的语义层。这一优点类似于使用一个非饱和的图像金字塔,其中一个通用的头部分类器可以应用于任何图像尺度计算的特征。有了以上的适应性,rpnn就可以像在中一样,通过我们的FPN进行自然的训练和测试。我们在实验中详细阐述了实现细节。

4.2、Feature Pyramid Networks for Fast R-CNN

Fast R-CNN[11]是一种基于区域的目标检测器,其中使用感兴趣区域(RoI)池来提取特征。Fast R-CNN通常在单尺度特征图上执行。要将其与FPN一起使用,我们需要将不同尺度的roi分配到金字塔级别。我们把我们的特征金字塔看作是由一个图像金字塔产生的。因此,当基于区域的检测器在图像金字塔上运行时,我们可以采用这种分配策略。在形式上,我们将宽度为w,高度为h(在网络输入图像上)的RoI分配到特征金字塔的Pk级,方法为:

这里224是标准的ImageNet训练前大小,k0是将w×h = 224^2的RoI映射到的目标级别。类似于基于resnet的Faster R-CNN系统使用C4作为单尺度特征图,我们将k0设置为4。表示如果RoI的比例变小(例如,224的1/2),则应该将其映射到一个更精细的分辨率级别(例如,k = 3)。

我们将预测头(在Fast R-CNN中,头是类特定的分类器和边界框回归器)附加到所有级别的roi。同样的,不管它们的水平如何,头部都共享参数。ResNet的conv5层(9层深子网)作为conv4特征的头部,但我们的方法已经利用conv5构造了特征金字塔。因此,与ResNet不同的是,我们简单地采用RoI池来提取7×7个特征,并在最终的分类和边界盒回归层之前附加两个隐藏的1024 -d全连通(fc)层(每个fc层后面跟着ReLU)。这些层是随机初始化的,因为ResNets中没有预先训练好的fc层。注意,与标准的conv5头相比,我们的2-fc MLP头重量更轻,速度更快。基于这些适应性,我们可以在特征金字塔的顶部训练和测试Faster R-CNN。

5、目标检测上的实验

在80类COCO检测数据集上进行了实验。我们使用80k个火车图像和一个35k个val图像子集(trainval35k[2])的组合进行训练,并报告一个5k个val图像子集(minival)的消融实验。还报告了没有公开标签的标准测试集(test-std)的最终结果。与R-CNN方法一样,所有的网络骨架都是在ImageNet1k分类集上进行预训练,然后在检测数据集上进行微调。我们使用预训练的ResNet-50和ResNet-101模型,这些模型是公开可用的。

5.1、Fast R-CNN (在固定的区域建议上)

实现细节:输入图像调整大小,使其较短的一面有800像素。同步SGD用于在8个gpu上对模型进行训练。每个小批处理涉及每个GPU 2张图像和每个图像512 roi。我们使用权重衰减为0.0001,动量为0.9。前60k个小批的学习率为0.02,后20k为0.002。我们使用每幅图像2000 roi进行训练,1000 roi进行测试。在COCO数据集上用FPN训练Faster R-CNN大约需要10个小时。

5.1.1、消融实验

与baseline的比较:为了与原始的rpn进行公平地比较,我们使用C4或C5的单比例尺地图运行两个baseline(下表(a, b)),两者都使用与我们相同的超参数,包括使用{

}的5个比例尺锚。下表(b)没有显示出比(a)更好的性能,这表明一个更高级别的功能图是不够的,因为在更粗的分辨率和更强的语义之间存在权衡。将FPN放入RPN后,AR1k提高到56.3(下表(c)),比单尺度RPN基线提高8.0个百分点(下表(a))。此外,在小对象(AR1ks)上的性能提高了12.9个百分点。我们的金字塔表示大大提高了RPN对对象尺度变化的鲁棒性。

横向连接有多重要?下表(e)为无1×1横向连接的自顶向下特征金字塔消融结果。这种自顶向下的金字塔具有较强的语义特征和较好的分辨率。但是我们认为这些特征的位置并不精确,因为这些地图已经被向下采样和向上采样了好几次。更精确的特征位置可以通过自底向上映射到自顶向下映射的横向连接直接从更精细的自底向上映射传递。因此,FPN的AR1k得分比下表(e)高10分。

横向连接有多重要?下表(e)为无1×1横向连接的自顶向下特征金字塔消融结果。这种自顶向下的金字塔具有较强的语义特征和较好的分辨率。但是我们认为这些特征的位置并不精确,因为这些地图已经被向下采样和向上采样了好几次。更精确的特征位置可以通过自底向上映射到自顶向下映射的横向连接直接从更精细的自底向上映射传递。因此,FPN的AR1k得分比下表(e)高10分。

金字塔代表有多重要?我们可以将头部连接到P2的高分辨率、强语义特征图(即,是金字塔中最高的一层)。与单尺度baseline类似,我们将所有锚点分配到P2 特征图。这种变体(表1(f))比baseline好,但不如我们的方法。RPN是一种固定窗口大小的滑动窗口检测器,对金字塔级的扫描增强了其对尺度方差的鲁棒性。此外,我们注意到,单独使用P2会产生更多的锚点(750k,表1(f)),这是由于P2的空间分辨率较大造成的。这一结果表明,大量的锚点本身不足以提高精度。

5.2、用Fast/Faster R-CNN进行目标检测

接下来我们研究基于区域(非滑动窗口)检测器的FPN。我们使用coco平均精度(AP)和pascal的AP(在单个IoU阈值为0.5)来评估目标检测器的性能。我们还根据COCO中的定义给出了关于小、中、大目标的COCO AP。

实现细节:输入图像调整大小,使其较短的一面有800像素。同步SGD用于在8个gpu上对模型进行训练。每个小批处理涉及每个GPU 2张图像和每个图像512 roi。我们使用重量衰减率为0.0001,动量为0.9。前60k个小批的学习率为0.02,后20k为0.002。我们使用每幅图像2000 roi进行训练,1000 roi进行测试。在COCO数据集上用FPN训练Faster R-CNN大约需要10个小时。

5.2.1、在固定proposal上的Fast R-CNN

为了更好地研究FPN单独对基于区域的检测器的影响,我们在一组固定的方案上对Fast R-CNN进行了消融实验。选择将RPN在FPN上计算得到的建议冻结(上表(c)),因为它对待检测器识别的小对象具有良好的性能。为简单起见,我们不共享功能之间的Faster R-CNN和RPN,除非指定。作为一个基于resnet的Faster R-CNN基线,在Resnet之后,我们采用输出大小为14×14的RoI池,将所有conv5层作为头部的隐藏层。下表(a)给出了AP为31.9。下表(b)是一个baseline,它利用了一个具有两个隐藏fc层的MLP磁头,类似于我们架构中的磁头。它的AP值为28.8,表明2-fc头部与表2(a)中的基线相比没有任何正交优势。下表(c)显示了我们的FPN在Fast R-CNN中的结果。与下表(a)中的基线相比,我们的方法提高了AP 2.0点,小对象AP 2.1点。与同样采用2fc头的基线相比(表2(b)),我们的方法提高了AP 5.1个点。这些比较表明,对于基于区域的目标检测器,我们的特征金字塔要优于单尺度特征。

下表(d)和(e)显示,删除自顶向下连接或删除横向连接会导致较差的结果,类似于我们在上述RPN小节中观察到的情况。值得注意的是,去掉自顶向下的连接(下表(d))显著降低了精度,这表明Faster R-CNN在高分辨率地图上使用低水平的特征。在下表(f)中,我们对P2的单个最细尺度feature map采用快速R-CNN。其结果(33.4 AP)略低于使用所有金字塔级别的结果(33.9 AP,下表(c))。我们认为,这是因为投资回报率池是一种类似于翘曲的操作,对该地区的规模不那么敏感。尽管这种变体的精度很高,但它是基于{Pk}的RPN建议的,因此已经受益于金字塔表示。

5.2.2、在连续proposal上的Fast R-CNN

在上面我们使用了一组固定的proposal来研究检测器。但是在一个Faster R-CNN系统中,RPN和Faster R-CNN必须使用相同的网络骨干网才能实现功能共享。下表显示了我们的方法与两个baseline之间的比较,它们都使用了RPN和Faster R-CNN的一致主干架构。(a)显示了我们复制的baseline FasterR-CNN系统。在受控设置下,我们的FPN下表(c))比这个强baseline好2.3点AP和3.8点AP@0.5。我们发现以下实现导致了这种差距:(i)我们使用800像素的图像比例尺,而不是[11,16]中的600像素;(ii)每幅图像训练512个roi,加速收敛;(iii)我们在残差网络中使用5个尺度锚,而不是4个(添加322);(iv)在测试时,我们使用每幅图像1000个提案,而不是[16]中的300个。因此,与表3(*)中He等人更快的ResNet-50 R-CNN的baseline相比,我们的方法提高了AP 7.6个点,AP@0.5提高了9.6个点。分享功能。在上面,为了简单起见,我们不共享RPN和Faster R-CNN之间的特性。在表5中,我们评估了遵循[29]中描述的4步训练的共享特性。与Faster R-CNN类似,我们发现共享特性可以小幅提高准确性。特性共享还减少了测试时间。

分享功能:在上面,为了简单起见,我们不共享RPN和Faster R-CNN之间的特性。在表5中,我们评估了遵循[29]中描述的4步训练的共享特性。与[29]类似,我们发现共享特性可以小幅提高准确性。特性共享还减少了测试时间。

运行时间:在功能共享的情况下,我们基于fpga的Faster R-CNN系统在单个NVIDIA M40 GPU上对ResNet-50的每张图像的推理时间为0.148秒,相比之下,对ResNet-101.6的推理时间为0.172秒,表3(a)中的单尺度ResNet-50基线运行时间为0.32秒。我们的方法引入了额外的层在FPN小额外成本,但有一个较轻的重量头。总的来说,我们的系统比基于resnet的更快的R-CNN对应的更快。我们相信我们的方法的效率和简单性将有利于未来的研究和应用。

我们发现表5中的ResNet-101模型没有使用默认的学习速率计划进行足够的训练。因此,我们在训练Faster R-CNN步骤时,以每一个学习率增加2倍的小批量数量。在不共享功能的情况下,将minival上的AP增加到35.6。这个模型是我们提交给COCO检测排行榜的模型,如表4所示。由于时间有限,我们还没有评估它的功能共享版本,如表5所示,这应该会稍微好一些。表4将我们的方法与COCO竞赛获胜者的单模型结果进行比较,包括2016年的冠军G-RMI和2015年的冠军Faster R-CNN+++。在没有添加额外功能的情况下,我们的单机产品已经超过了这些强大的、设计精良的竞争对手。在测试开发集上,我们的方法比现有的最佳结果提高了0.5个AP点(36.2 vs. 35.7)和3.4个AP点(59.1 vs. 55.7)。值得注意的是,我们的方法不依赖于图像金字塔,只使用单一的输入图像比例尺,但在小尺度对象上仍然有出色的AP。这只能通过以前方法的高分辨率图像输入来实现。

6、结论

我们提出了一个简洁的框架,用于在对卷积网络内构建特征金字塔。我们的方法在几个强大的基线和竞争对手上显示了显著的改进。为特征金字塔的研究和应用提供了一种实用的解决方案,不需要计算图像金字塔。最后,我们的研究表明,尽管深对卷积网络具有强大的表示能力和对尺度变化的隐式鲁棒性,但使用金字塔表示显式地解决多尺度问题仍然是至关重要的。

承接Matlab、Python和C++的编程,机器学习、计算机视觉的理论实现及辅导,本科和硕士的均可,咸鱼交易,专业回答请走知乎,详谈请联系QQ号757160542,非诚勿扰。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • MATLAB批量读取一个文件夹下的图片

    于小勇
  • M2Det: A Single-Shot Object Detector based on Multi-Level读)

    为解决目标实例尺度变化带来的问题,特征金字塔广泛用在一阶段目标检测器(比如,DSSD,RetinaNet,RefineDet)和两阶段目标检测器(比如Mask ...

    于小勇
  • Tukey法

    在介绍Tukey方法前,首先了解学生化极差分布。在概率论和统计学中,学生化极差分布是极差的抽样分布。该分布是一种连续型概率分布,用于在样本量较小且总体标准差未知...

    于小勇
  • 在bash中检测进程是否正在运行

    比如我们启动了一个这样的进程python -m SimpleHTTPServer 8000,我们想检测这个进程是否存在,可以这样。

    技术小黑屋
  • All In! 我学会了用强化学习打德州扑克

    选自willtipton 机器之心编译 参与:Jane W、蒋思源 最近,强化学习(RL)的成功(如 AlphaGo)取得了大众的高度关注,但其基本思路相当简单...

    机器之心
  • 奇偶数线程交替执行问题

    一个面试题:两个线程,一个打印偶数,一个打印奇数,并且轮流打印,我们可以看到这种场景模式肯定是需要通过同步来实现,

    小勇DW3
  • 如何运用领域驱动设计 - 实体

    本文将介绍领域驱动设计(DDD)战术模式中另一个常见且非常重要的概念 - 实体。相对战术模式中其他的一些概念(例如 值对象、领域服务等)来说,实体应该比较容易让...

    句幽
  • 省 市 区(县) 街道(乡) plist 文件

    developerbfl
  • 你必须知道的指针基础-5.指针的几个小应用案例

      实现一个方法“多个返回值”的效果:返回一个三位数数字的个位、十位、百位。这里,我们借助指针来”返回“分解后的结果。这种应用也是最常见的指针应用。

    Edison Zhou
  • 数据挖掘实践指南读书笔记3

    http://guidetodatamining.com/ 这本书理论比较简单,书中错误较少,动手锻炼较多,如果每个代码都自己写出来,收获不少。总结:适合入门。...

    公众号---志学Python

扫码关注云+社区

领取腾讯云代金券