目标检测FPN(Feature Pyramid Networks)的使用

FPN(Feature Pyramid Networks), 论文:Feature Pyramid Network for Object Detection

使用FPN能给网络带来哪些好处呢?根据原论文的描述,可以知道:
针对目标检测任务:coco AP提升2.3个点,pascalAP提升3.8个点 ,这样的提升还是很明显的

1. 网络结构对比

  • 图a,Feature image pyramid(特征图像金字塔结构),该网络在传统的图像处理中也是非常常见的一个方法,针对需要检测不同尺度的目标。首先,将网络缩放到不同的尺度上,比如图中4个不同尺度,然后针对每个尺度,经过处理异依次进行预测。这里面临一个问题,我们生成多少个不同尺度,就需要重新预测多少次,这样的效率是很低的。
  • 图b,Single feature map,这个跟Fast-RCNN流程是一样的,将我们图片通过backbone得到特征图,通过卷积进行一步步特征提取,最后在最终的特征图进行预测。该网络针对小目标情况下,效果并不是很好。
  • 图c,Pyramidal feature hierarchy,图c,跟SSD算法比较类似,首先将我们一张图片输入给backbone,在backbone正向传播过程中得到的特征图上,分别进行预测。
  • 图d,就是本文要讲到的FPN结构,可以简单和图c进行对比下,我们能够发现图d不是简单的在我们backbone上的不同特征图上进行预测,而是会将不同特征图上的特征进行融合,再融合后的特征图之上再进行预测。根据论文的试验,这样做确实容易提升网络的检测效果。

2. FPN网络

2. 1 FPN网络的原理


不同层特征究竟是如何融合的呢?注意FPN中的不同的特征图的尺寸有一定要求的,比如这里我们按2的整数倍进行选取。比如最底层特征层对应的尺寸是28x28,在它上一层就对应14x14,最上面对应的是7x7的尺寸。在我们特征网络进行缩放时,基本上都是按2的整数倍进行缩放的。

针对上图所示的细节部分,首先针对backbone上的每一层特征图,都会利用1x1的卷积进行处理,这里1x1的卷积层主要目的是调整backbone上不同特征图的channel。因为一般情况下,不同特征图上它的channel是不一样的,一般情况是越来越多的,为了保证不同尺度上的特征图融合,就需要确保在处理后有相同的shape,因此首先通过1x1卷积层来确保特征图的channel是一样的。

然后我们看如何将高层次的特征图与低层次的特征图进行融合的,我们知道上一层的特征图的尺寸,在w,h维度上是下一特征图的一半。因此需要将上面的特征图进行2倍的上采样。比如上图中最上面的特征图尺寸为7×7,经过2倍上采样,就和中间的特征层经过1x1卷积后(保证具有一样的chanel),具有相同的shape。紧接着将中间的特征图经过2倍的上采样,与下面的特征图经1x1卷积后的特征层进行add融合,最后对得到的特征图进一步处理,并预测。注意:是对应像素的add融合,并不是与其他网络一样通过channel维度上的融合。

这里的2倍上采样是如何实现的呢?,论文中讲到是通过nearest neighbor upsampling,就是一个简单的临近插值算法。

2.2 完整的FPN网络结构


2.1节FPN网络的一些细节是没有展现出来的,这边重新绘制了更完整的FPN结构,这里以backbone为ResNet50为例进行绘制。假设输入图像是640x640的RGB 3通道图像,以它作为示例进行绘制的。

说先,我们讲一下backbone中的ResNet网络。

resNet网络的整体框架其实都是一样的,首先都是通过一个con1进行卷积操作,这里的卷积是包含有BN+Relu,然后通过conv2_x它所对应的一系列层结构,以及conv3_x对应的一系列残差结构,以及conv4_xconv5_x对应的一系列残差结构。

这里为了以便于后面讲解,将conv2_x ,conv3_x,conv4_x,conv5_x分别命名为C2 ~C5。接着将我们刚才说的特征图,分别都通过一个1x1的卷积层,来调整他们的channel为256。然后从C5到C2进行融合,首先对C5得到的特征进行2倍上采样,上采样之后和C4得到的特征层进行Add融合,然后将融合得到的特征图,再进行2倍上采样,与C3得到的特征图进行融合。然后再将C3融合后的特征图再进行2倍上采样,与C2得到的特征图进行融合。

最后在每一层新得到的特征图,在接了一个3x3的卷积层进一步特征图提取,依次得到P2,P3,P4,P5。接着根据论文的描述。会在P5的基础上进行下采样得到P6,假设P5 wxh=20×20,到了P6就变为10x10。这里是通过Maxpool来实现的,这里池化核大小为1×1, 因此maxpool不起任何作用,注意这里步距为2的,所以将我们特征图进行了2倍下采样。

注意:P6只用于RPN部分,针对Faster-RCNN目标检测框架来说,它不在Fast-RCNN部分使用。RPN生成proposal(的时候,会在P2~P6这5个特征图上进行预测。但是针对我们Fast-RCNN部分,它只会在P2~P5这4个特征图上进行预测。

对于Faster-RCNN在backbone预测特征图上通过我们的RPN网络,生成得到一系列的proposal(,然后将proposal(映射到预测特征图上,然后将映射之后的特征输入到Fast -RCNN部分,得到我们最终的预测结果。

针对我们FPN结构中,我们首先在P2~P6预测特征层上通过RPN预测proposal((这是与不带FPN结构的Faster-RCNN不同),之后我们将得到的特征图映射到P2~P5中的特征图上,然后再输入到Fast-RCNN部分得到最终的预测结果。

注意:Faster-RCNN=RPN+Fast-RCNN 在结构上可以这么表达。
这里有个问题我们得到purpose,最后映射到哪个特征图上呢,这个会在下面文章中进行进一步讲解。

由于我们在FPN网络上生成了多个预测特征层P2-P5,所以可以在不同的特征层上分别针对不同尺度的目标进行预测。之前将Faster-RCNN我们只有一个预测特征层(指的是backbone 生成的预测特征层),因此只在这一个预测特征图上生成不同面积和不同比例的anchor,但是在FPN中,我们不同的预测特征图,针对不同的面积,比如P2相对于较低层的预测特征层,他会保留更多底层的信息,所以它更适合预测小型的目标,我们会将较小的32×32的尺寸上,比例为{1:2,1:1,2:1}的anchor在我们P2上进行生成。针对我们P3我们会将64×64,比例还是{1:2,1:1,2:1}的anchor在P3上生成,同理128×128尺寸的anchor在P4上生成,256×256在P5上生成,这里也是与我们不带FPN结构的Faster-RCNN存在区别的地方之一。

这里强调一点,论文作者在做实验过程中发现在不同的预测特征图上用不同的RPN和Fast-RCNN与共用同一个RPN以及Fast-RCNN,它的效果并没什么差别(检测精度),既然在检测效果上没什么差异,那么共享RPN和Fast-RCNN是最好的,这样可以减少我们网络的训练参数以及网络的大小,而且参数减少后还能提升网络的训练速度,所以在P2-P6使用的是同一个RPN模块。而Fast-RCNN部分我们的P2-P5也是使用同样的Fast-RCNN模块,这里需要大家注意下。

针对RPN得到的一些列purpose之后,该如何将他们映射到对应的特征图上呢?


计算公式如上图,这里的目标检测FPN(Feature Pyramid Networks)的使用是我们计算的最后映射到哪个预测特征图(P2-P5其中之一)。这里目标检测FPN(Feature Pyramid Networks)的使用设置为4,其中公式中w,h所对应的是我们RPN预测得到的一些列purpose它在原图上所对应的w,h。比如这里w,h为224的一半,那么log里面计算就为0.5,目标检测FPN(Feature Pyramid Networks)的使用底计算就为-1,所以目标检测FPN(Feature Pyramid Networks)的使用

总结

带FPN结构的Faster-RCNN与一般Faster-RCNN的区别:

  • 带FPN结构的Faster-RCNN,p2-p6预测特征层通过rpn生成purpose,而一般Faster-RCNN只在一个预测特征层通过RPN生成proposal(backbone对应的特征层)
  • 带FPN结构的Faster-RCNN在得到proposal(后,需要映射到在p2-p5中对应的特征图,对应是P2-P5中哪一个特征图,需要根据公式计算选择。
  • 另外论文作者在做实验过程中发现在不同的预测特征图上用不同的RPN和Fast-RCNN与共用同一个RPN以及Fast-RCNN,它的效果并没什么差别(检测精度),既然在检测效果上没什么差异,那么共享RPN和Fast-RCNN是最好的

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
乘风的头像乘风管理团队
上一篇 2022年5月17日
下一篇 2022年5月17日

相关推荐