FPN网络结构及源码分析

FPN即Feature Pyramid Networks,特征金字塔。

特征金字塔是多尺度(muiti-scale)目标检测领域中的重要组成部分,但是由于此方法对计算和内存的需求,在FPN之前的深度学习任务都刻意回避了这类模型。在文献阅读2中,作者利用深度神经网络固有的多尺度、多层级的金字塔结构,使用一种 自上而下的侧边连接 在所有尺度上构建出高级语义特征图,构造了特征金字塔的经典结构。

具体做法是:把低分辨率、高语义信息的高层特征和高分辨率、低语义信息的低层特征自上而下进行融合,使得所有尺度下的特征都有丰富的语义信息。

其结构如下图所示:

在FPN网络结构中,还有很多图像算法。

Featurized image pyramid

生成不同尺寸的图片,每张图片生成不同的特征,分别进行预测,最后统计所有尺寸的预测结果。

一种比较笨的多尺度方法,对输入图像设置不同的缩放比例实现多尺度。这样可以解决多尺度,但是相当于训练了多个模型(假设要求输入大小固定),即便允许输入大小不固定,但是也增加了存储不同尺度图像的内存空间。

Single feature map

相当于早期的CNN模型,通过卷积层不断学习图像的高级语义特征。

使用神经网络某一层输出的feature map进行预测,一般是网络最后一层feature map(例如Fast R-CNN、Faster R-CNN等);然而靠近网络输入层的feature map包含粗略的位置信息,导致预测的目标狂bbox不准确,靠近最后网络最后一层的feature map会忽略小物体信息。

Pyramidal feature hierarchy

使用不同层次的金字塔层feature map进行预测。SSD就是采用这种多尺度特征融合方法,从网络不同层抽取不同尺寸的特征做预测,没有增加额外的计算量。但是SSD没有使用足够底层的特征,SSD使用最底层的特征是VGG的conv4_3。

SSD较早尝试了使用CNN金字塔形的层级特征,重用了前向过程计算出的多尺度特征图,因此这种形式是不消耗额外的资源的。但是SSD为了避免使用low-level的特征,放弃了浅层的特征图信息,直接从conv4_3开始建立金字塔,并且加入了一些新的层,但是这些低层级、高分辨率的特征图信息对检测小目标是非常重要的。

Feature Pyramid Network

对最底层的特征进行向上采样,并与该底层特征进行融合,得到高分辨率、强语义的特征(即加强了特征的提取)。

FPN为了能够自然地利用CNN层级特征的金字塔形式,同时生成在所有尺度上都具有强语义信息的特征金字塔,便以此为目的设计了top-down结构和lateral connection。这种金字塔结构以此融合具有高分辨率的浅层feature和具有丰富语义信息的深层feature。这样就实现了从单尺度的单张输入图像,快速构建在所有尺度上都具有强语义信息的特征金字塔,同时不产生明显的代价。

上述四种的FPN的网络结构如下图所示:

FPN特征金字塔

FPN官方的backbone是ResNet。CNN的前馈计算就是自下而上的路径,特征图经过卷积核计算,通常是越变越小的,也有一些特征层的输出大小和输入大小一样。

特征金字塔网络包括自底向上、自顶向下和横向连接。

resnet特征提取(feature map):自底向上

最后一层feature map上采样:自顶向下

特征融合:横向连接

横向连接的两层特征在空间尺寸上要相同,主要是为了利用底层的定位细节信息(由于底部的feature map包含更多的定位细节,而顶部的feature map包含更多的目标特征信息)。