FPN(Feature Pyramid Network)个人学习记录

论文名称:
Feature Pyramid Networks for Object Detection
来源:
CVPR2017
下载地址:
https://arxiv.org/abs/1612.03144
代码地址(好像没有官方代码,这是Facebook的代码):
https://github.com/facebookresearch/Detectron/blob/main/detectron/modeling/FPN.py

FRN(Feature Pyramid Networks)

Feature Pyramid(特征金字塔),可以用于检测不同尺度的目标,将图片缩放到不同尺寸大小,并分别提取其特征并进行检测。FPN结构使用少量成本,利用CNN卷积网络固有的多尺度金字塔层次结构来构建特征金字塔,结合一种带有侧向连接的自顶向下的结构,实现了多尺度特征融合。

核心思路:

1、高层网络(深层网络):语义信息丰富、表征能力强,但特征图分辨率低,空间几何信息的表征能力弱,目标位置比较粗略(总结就是,不容易定位)

2、低层网络(浅层网络):语义信息较少、表征能力弱,但特征图分辨率高,空间几何信息的表征能力强,目标位置准确(省流总结,容易定位)

模型设计:
FPN(Feature Pyramid Network)个人学习记录_第1张图片
Bottom-up自底向上:
如图左半部分,下采样(downsampling),对图像进行下采样产生特征图,特征图随着网络的加深,尺寸会不断变小,语义信息更加丰富。
Top-down自顶向下:
如图右半部分,上采样(upsampling),对高层特征图进行上采样,放大特征图,使低层特征图也包含丰富语义信息。
Lateral connection横向连接:
如图中虚线框部分,将左边上采样的特征图和右边自顶向下生成的特征图进行融合。那么是如何去结合低层高分辨率的特征进行融合呢?方法就是,上图右边把语义更强的高层特征图(比如图中4)进行上采样,然后把左边前一层的特征图(比如图中2)进行1 × \times × 1的卷积,接着将4上采样后得到的特征图和2进行1 × \times × 1卷积后的特征图进行特征相加融合,最后得到5。5再经过3 × \times × 3的卷积得到predict的特征输出(图中没画出来,其中3 × \times × 3的卷积是为了消除上采样产生的混叠效应)。
注意点:
横向连接的两层特征图在空间尺寸上要相同,通道数要相同,1 × \times × 1卷积的目的就是转换通道数。举个例子:如上图,左边部分,对原始图像进行下采样,产生不同尺寸的特征图,一般相邻两层尺寸之间相差2倍,假设原始图像是56 × \times × 56,那从底到上的特征图尺寸依次是:1层是28 × \times × 28,2层是14 × \times × 14,3层是7 × \times × 7。再看右边,最上层(第4层)的特征图尺寸是7 × \times × 7,所以要想进行特征融合,4层要先进行2倍上采样,把尺寸从7 × \times × 7转换为相同尺寸14 × \times × 14,然后2层要经过1 × \times × 1的卷积,转换通道数,因为融合要求二者通道数也要相等,最后通过做像素间的加法进行结合。

FPN与其他金字塔网络对比

如下图所示,基于Feature pyrimid(特征金字塔)来检测不同尺寸目标有几种思路,其中D种思路就是FPN。
FPN(Feature Pyramid Network)个人学习记录_第2张图片
a方式:Featurized image pyramid,对原始图像构造图像金字塔,就是将输入图像缩放到不同的尺度建立图像金字塔,然后在图像金字塔的每一层提取出不同的特征,再分别进行相应的预测目标位置。
优点:每层都具有很强的特征,具有较好的检测效果。
缺点:每层提取特征并检测,有多少层,就要预测多少次,效率低,推理计算时间就会相应加倍,需要大量内存。

b方式:Single feature map,利用CNN卷积网络的本身金字塔特性,通过对图像进行卷积和池化,获取不同尺寸的feature map,利用最后一个卷积层上的单个feature map来进行预测。
优点:高层网络的语义信息有助于准确地检测出位置,细节信息在一定程度上提升检测精度,速度快,需要内存少;
缺点:仅仅关注深层网络中最后一层的特征,却忽略了其它层的特征,对小目标的处理不好。

c方式:Pyramidal feature hierachy,同时利用低层特征和高层特征,分别在不同层的特征图上同时进行预测,通过对图像进行深度卷积,直接在卷积网络生成的不同特征层上进行检测(本人理解的跟a方式不同的在于,c方式是直接在特征图上预测,a是提出特征再预测)。
优点:在不同的层上面输出对应的目标,不需要经过所有的层才输出对应的目标,这样可以在一定程度上对网络进行加速操作,同时可以提高算法的检测性能。
缺点:是获得的特征不鲁棒,都是一些弱特征(因为很多的特征都是从较浅的层获得的),不同层之间存在语义差异。

d方式Feature Pyramid Network(FPN),运用了top-down、bottom-up、横向连接,融合具有高分辨率的浅层layer和具有丰富语义信息的深层layer。
优点:FPN使用了更深的层来构造特征金字塔,这样做是为了使用更加鲁棒的信息;将处理过的低层特征和处理过的高层特征进行累加,目的是因为低层特征可以提供更加准确的位置信息,而多次的降采样和上采样操作使得深层网络的定位信息存在误差,因此将其结合其起来使用,构建了一个更深的特征金字塔,融合了多层特征信息,并在不同的特征进行输出。

FPN特点

FPN(Feature Pyramid Network)个人学习记录_第3张图片

如上图,上图1部分,是一个带有skip connection的网络结构,预测的时候在自顶向下的最后一层上进行的,简单来说,经过多次上采样并融合特征,最后生成特征图进行预测。
下面的2号图,是FPN网络结构,和上面的类似,但区别在于预测是在每一层中独立进行的。实验证明,只在最后一层预测的效果不如FPN好,原因在于FPN网络是一个窗口大小固定的滑动窗口检测器,因此在金字塔的不同层滑动可以增加其对尺度变化的鲁棒性。

总结
FPN(Feature Pyramid Network)个人学习记录_第4张图片
根据上图,FPN虽然通过横向连接将高层的语义特征传递了下来,但只增强了特征金字塔的语义信息,比如4,从原始图像到特征图4,中间要经过很多层网络,此时底层的目标信息已经损失了很多。

最后附一张完整的基于ResNet50加上FPN的流程图:
FPN(Feature Pyramid Network)个人学习记录_第5张图片
参考链接:

https://www.bilibili.com/video/BV1dh411U7D9?spm_id_from=333.337.search-card.all.click

你可能感兴趣的:(opencv,计算机视觉,python,深度学习,人工智能)