目标检测中多尺度:特征金字塔FPN_Feature Pyramid Networks for Object Detection

特征金字塔网络(FPN)是目标检测的关键,它利用深度网络的多尺度特征,以低额外成本构建高层语义信息。FPN通过自下而上和自上而下的连接融合低层和高层特征,实现对不同尺度目标的检测。实验表明,FPN在RPN和Fast R-CNN上应用,显著提高了小目标检测的性能和整体的检测精度,且在保持速度的同时增强了鲁棒性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原始内容来源于:
https://blog.youkuaiyun.com/cdknight_happy/article/details/100528127
https://blog.youkuaiyun.com/WZZ18191171661/article/details/79494534
包含理解!

参考文献:https://arxiv.org/abs/1612.03144
代码实现:http://www.yueye.org/2018/faster-rcnn-coupled-with-fpn-in-tensorflow.html
https://github.com/DetectionTeamUCAS/FPN_Tensorflow

FPN:Feature Pyramid Networks for Object Detection

摘要

特征金字塔是目标识别系统能够进行多尺度目标识别的关键组件。但由于特征金字塔的内存占用和计算量很大,因此很多算法都不想使用它。本文利用深度卷积网络本身固有的多尺度、层次化构建特征金字塔,只带来了很少的额外成本。本文开发了具有横向结构的从上到下的连接,用于在所有尺度上构建高层语义特征。本文提出的网络叫做FPN,在很多应用中可以作为一个通用的特征提取器。将FPN和Faster R-CNN结合,我们的模型在不使用任何技巧的情况下,基于单模型在coco目标检测任务中取得了非常优秀的成果。另外,在单GPU上可以以6FPS进行多尺度目标检测。

1 引言

1.1 图像金字塔

图像金字塔广泛应用于SIFT、HOG等经典算法中,我们常用的是高斯金字塔,高斯金字塔是通过高斯平滑和亚采样获得一些下采样图像,也就是说第K层高斯金字塔通过平滑、亚采样操作就可以获得K+1层高斯图像,高斯金字塔包含了一系列低通滤波器,其截止频率从上一层到下一层是以因子2逐渐增加,所以高斯金字塔可以跨越很大的频率范围。总之,我们输入一张图片,我们可以获得多张不同尺度的图像,我们将这些不同尺度的图像的4个顶点连接起来,就可以构造出一个类似真实金字塔的一个图像金字塔。通过这个操作,我们可以为2维图像增加一个尺度维度(或者说是深度),这样我们可以从中获得更多的有用信息。整个过程类似于人眼看一个目标由远及近的过程(近大远小原理)。如图00所示,我们可以看到一个图像金字塔,中间是原始图像,最上边是下采样后的图像,最下边是上采样后的图像,你可以将其对应到图01中的不同层中。
在这里插入图片描述
图00 图像金字塔
在这里插入图片描述
图01 高斯金字塔效果

1.2 为什么需要构造特征金字塔?

前面已经提到了高斯金字塔,由于它可以在一定程度上面提高算法的性能,因此很多经典的算法中都包含它。但是这些都是在传统的算法中使用,当然也可以将这种方法直应用在深度神经网络上面,但是由于它需要大量的运算和大量的内存。但是我们的特征金字塔可以在速度和准确率之间进行权衡,可以通过它获得更加鲁棒的语义信息,这是其中的一个原因。

如图02所示,我们可以看到我们的图像中存在不同尺寸的目标,而不同的目标具有不同的特征,利用浅层的特征就可以将简单的目标的区分开来;利用深层的特征可以将复杂的目标区分开来;这样我们就需要这样的一个特征金字塔来完成这件事。图中我们在第1层(请看绿色标注)输出较大目标的实例分割结果,在第2层输出次大目标的实例检测结果,在第3层输出较小目标的实例分割结果。检测也是一样,我们会在第1层输出简单的目标,第2层输出较复杂的目标,第3层输出复杂的目标(理解:低层的特征语义信息比较少,但是目标位置准确;高层的特征语义信息比较丰富,但是目标位置比较粗略。)。
在这里插入图片描述
图02 特征金字塔

1.3 FPN算法

在这里插入图片描述
低层的特征语义信息比较少,但是目标位置准确;高层的特征语义信息比较丰富,但是目标位置比较粗略。

识别不同大小的物体是计算机视觉中的一个基本挑战,我们常用的解决方案是构造多尺度金字塔。如图1a所示,这是一个特征图像金字塔,整个过程是先对原始图像构造图像金字塔,然后在图像金字塔的每一层提出不同的特征,然后进行相应的预测(BB的位置)。这种方法的缺点是计算量大,需要大量的内存;优点是可以获得较好的检测精度。它通常会成为整个算法的性能瓶颈,由于这些原因,当前很少使用这种算法。

图1b是一种改进的思路,学者们发现我们可以利用卷积网络本身的特性,即对原始图像进行卷积和池化操作,通过这种操作我们可以获得不同尺寸的feature map,这样其实就类似于在图像的特征空间中构造金字塔。实验表明,浅层的网络更关注于细节信息,高层的网络更关注于语义信息,而高层的语义信息能够帮助我们准确的检测出目标,因此我们可以利用最后一个卷积层上的feature map来进行预测。这种方法存在于大多数深度网络中,比如VGG、ResNet、Inception,它们都是利用深度网络的最后一层特征来进行分类。这种方法的优点是速度快、需要内存少。它的缺点是我们仅仅关注深层网络中最后一层的特征,却忽略了其它层的特征,但是细节信息可以在一定程度上提升检测的精度。

图1c的设计思想是同时利用低层特征和高层特征,分别在不同的层同时进行预测,这是因为我的一幅图像中可能具有多个不同大小的目标,区分不同的目标可能需要不同的特征,对于简单的目标我们仅仅需要浅层的特征就可以检测到它,对于复杂的目标我们就需要利用复杂的特征来检测它。整个过程就是首先在原始图像上面进行深度卷积,然后分别在不同的特征层上面进行预测。它的优点是在不同的层上面输出对应的目标,不需要经过所有的层才输出对应的目标(即对于有些目标来说,不需要进行多余的前向操作),这样可以在一定程度上对网络进行加速操作,同时可以提高算法的检测性能。它的缺点是获得的特征不鲁棒,都是一些弱特征(因为很多的特征都是从较浅的层获得的)。

图1d是FPN,整个过程如下所示,首先我们在输入的图像上进行深度卷积,然后对Layer2上面的特征进行降维操作(即添加一层1x1的卷积层),对Layer4上面的特征就行上采样操作,使得它们具有相应的尺寸,然后对处理后的Layer2和处理后的Layer4执行加法操作(对应元素相加),将获得的结果输入到Layer5中去。其背后的思路是为了获得一个强语义信息,这样可以提高检测性能。我们使用了更深的层来构造特征金字塔,这样做是为了使用更加鲁棒的信息;除此之外,我们将处理过的低层特征和处理过的高层特征进行累加,这样做的目的是因为低层特征可以提供更加准确的位置信息,而多次的降采样和上采样操作使得深层网络的定位信息存在误差,因此我们将其结合其起来使用,这样我们就构建了一个更深的特征金字塔,融合了多层特征信息(理解:持续累加增加了低层特征的深度,也融合了多层特征信息),并在不同的特征进行输出。
在这里插入图片描述
近期的很多论文中也利用了上下和直连设计。他们的目的是产生一个高精度的特征映射图,然后在此上进行预测,简单讲就是经过多次上采样并融合特征到最后一步,拿最后一步生成的特征做预测,如图2上图。相反,我们的做法利用特征金字塔的各层进行单独预测(每一层都预测),如图2下图。

我们的算法叫做FPN,适用于目标检测和分割任务。基于单模型的FPN+Faster R-CNN,在coco数据集上取得了领先的目标检测效果。在消融实验中,我们发现使用FPN进行目标建议,可以将平均召回率AR提升8个点。对于目标检测,相比于基于ResNet的Faster R-CNN,可以将coco数据集的mAP提升2.3个点,将voc数据集的mAP提升3.8个点。FPN还可以应用于实例分割和其他需要图像金字塔的任务。

此外,我们的金字塔结构可以在所有尺度上进行端到端训练,并且在训练/测试时一致,这在使用图像金字塔时是不可行的。因此,FPN能够比所有现有的最先进方法获得更高的精度。此外,在不增加单一尺度基线的测试时间的情况下实现了这种改进。我们相信这些进步将有助于未来的研究和应用。

2 相关工作

手工设计的特征和早期神经网络:SIFT特征是在各尺度空间提取的极值点,可用于特征点匹配。HOG特征和SIFT特征都是在图像金字塔上进行密集计算得到的,它们广泛应用于图像分类、目标检测、行人姿态估计等任务。前面也有很多人在研究如果快速的构建特征金字塔。有的研究人员提出过构建一个稀疏的样本金字塔,然后通过插值得到其他尺度的特征。前面也有过在图像金字塔上提供浅层卷积网络实现跨尺度的人脸检测。

深度卷积目标检测器:随着深度卷积网络的发展,像OverFeat和R-CNN都在目标检测的准确率上有了极大的进步。Overfeat是利用滑动窗的思想,在图像金字塔上使用卷积网络实现目标检测。R-CNN则是使用建议区域进行目标检测。SppNet则进一步显示了在单个尺度的输入图像上进行特征提取,然后高效进行多尺度目标检测。Fast和Faster R-CNN利用单尺度图像的特征进行多尺度的目标检测,实现了良好的检测效果。但是,多尺度检测的效果往往更好,尤其是对小目标而言更是如此。

使用多层的方法:最近也有一些算法通过使用卷积网络中的多层特征改善检测和分割效果。FCN跨图像尺度为每类样本计算语义分割得分。很多算法是把多层的特征拼接到一起进行预测。SSD没有拼接特征,而是在多个层次化特征上进行预测。

3 FPN算法

我们的目标是利用ConvNet的金字塔特征的层次化结构,该层次结构具有从低级到高级的语义,并构建了一个具有高级语义的特征金字塔。本文中,我们将FPN用于了RPN和Fast R-CNN,也在第6部分将其用到了目标分割中。

我们的方法使用单尺度的输入图像,通过全卷积网络的方式输出多层特征。处理方式和卷积网络的骨干网络无关,本文中我们使用ResNet作为骨干网络。构建金字塔的方式涉及到了自下到上、自上到下及横向的连接

自下向上的连接:自下向上的路径是骨干ConvNet的前向计算,它计算一个由多个尺度的特征图组成的特征层次结构,其缩放步长为2。通常有许多层生成相同大小的输出特征,我们说这些层处于同一网络阶段(理解:只有尺度变化了才是另一阶段)。对于特征金字塔而言,每个阶段定义成一个金字塔层。我们选择每个阶段的最后一层的输出构建我们的特征映射集合,我们将丰富这些特征用于构建金字塔。这

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值