FPN 笔记

说明
1.本文是博主的学习记录,主要为了方便以后查看,当然如果能为别人提供帮助就更好了,如果有不对的地方请指正
2.本文重点是了解FPN要解决的问题以及具体怎么做的,尽量用较少篇幅表达清楚论文整体思路,其他一些不影响理解论文算法的东西有需要的请查看其他博客
3.论文中的链接是我经过大量搜索,个人认为讲解最清楚的参考,看本文的过程中如对一些名词有疑惑可以直接点击参考链接

原论文
代码
论文翻译

创新点
1.利用特征金字塔进行多尺度特征图的融合及分别预测

问题引出
在目标检测中有一个一直存在的问题“多尺度,小目标”很难解决,一些传统算法用图像金字塔来解决这个问题,但是图像金字塔用在当今流行的深度卷积网络中计算量太大,导致现在很多检测算法回避这个问题,也有一些算法尝试用特征金字塔来代替图像金字塔,但在小目标检测上还是不太理想,FPN提出一种自上向下、带有侧向连接的层次结构来构建各个尺度的高层语义特征(FPN是一种通用的特征提取器,本身不是检测算法,需要和其他检测算法结合才能使用)
FPN 笔记
上图中:
a)图像金字塔,将图像缩放成不同尺度,然后在不同尺度图像上提取不同尺度的特征,计算量太大
b)高层特征图具有较高的语义信息,有些算法直接用最后一层特征图进行预测,例如R-CNN系列、YOLO
c)除了图像金字塔可以用来处理多尺度的物体,深度网络本身具有的多层次结构也可以用来提取多尺度的特征,SSD就利用了多个特征图分别做预测,但是SSD没有用到足够低层的特征(在SSD中,最低层的特征是VGG网络的conv4_3),作者认为足够低层的特征对于检测小物体是很有帮助的
d)FPN将上层特征上采样和下层特征融合,并且每层分别预测
FPN 笔记
低层的特征语义信息比较少,但是有高分辨率信息,利于定位;顶层分辨率低,但是有较高的语义信息,利于分类。也有一些算法尝试将上层特征上采样与下一层融合,进行多次融合,但是用的是最后一层特征图进行预测(上图中上半部分图所示,下半部分图为FPN)

FPN算法
FPN包含两个过程,一个是自底向上的过程,第二个是自顶向下和侧向连接的融合过程

1.自底向上
自底向上的过程就是网络的前向传播,前向传播的过程中特征图经过一些层会变小,还有一些层不会减小特征图尺寸(padding操作),将不减小特征图尺寸的层归为一个stage,每次抽取一个stage中最后一层组成特征金字塔,以ResNet为例,选取conv2、conv3、conv4、conv5层的最后一个残差block层特征作为FPN的特征,记为{C2、C3、C4、C5},这几个特征层相对于原图的步长分别为4、8、16、32

2.自顶向下过程以及侧向连接
将上层的特征图上采样(FPN用的是简单的最邻近插值)到和下层特征图相同的尺寸,再分别通过1×1卷积使上下特征图通道数一致,然后按像素相加(此时经过上采样和卷积上下特征图已经同尺寸同通道数),如下图所示
FPN 笔记
知乎一篇文章这部分讲解的很清楚(ResNet):
FPN 笔记
C5层先经过1x1卷积,得到M5特征;M5通过上采样,再加上C4经过1x1卷积后的特征,得到M4;这个过程再做两次,分别得到M3和M2。M层特征再经过3x3卷积(论文说是消除上采样的混叠效应(aliasing effect)),得到最终的P2、P3、P4、P5层特征(尺寸不同,通道数相同都是256)

应用
作者实在Faster R-CNN上做的试验,也就是FPN结合RPN和Fast R-CNN

1.FPN与RPN结合
由于之前RPN是在一张特征图上生成一些固定尺寸的锚框,现在如果用FPN就要在多张不同尺寸的特征图上生成anchor box,这样就需要定义不同尺寸的anchor box,对于P2,P3,P4,P5,P6(P6是专门为了RPN网络而设计的,用来处理512大小的框,它由P5经过下采样得到)这些层,定义anchor box的大小为32232^264264^21282128^22562256^25122512^2,每个层都处理1:1、1:2、2:1三种长宽比例的anchor box,所以整个特征金字塔有15种anchor,这5个网络头部的参数是共享的(类似SSD最后的预测部分)

2.FPN与Fast R-CNN结合
RPN只处理一个特征图时得到的候选框就映射到特征图上(就RPN处理那个)一起传入ROI Pooling,但是现在RPN处理多个特征图,如果不同尺寸的候选框只是简单映射到对应的特征图可能没有在中间秀一把操作效果好,具体操作就是大尺寸候选框和顶层特征图对应,小尺寸的和底层的对应(因为因为小尺寸的框意思就是小目标,这时候就需要大尺寸的底层特征图来预测;而大尺寸的框意思是大目标,对于大目标,小尺寸的顶层特征图就能安排的明明白白),具体怎么确定多大尺寸的候选框和哪层特征图对应,看公式:
FPN 笔记
w、h是候选框的宽高,224是原图尺寸,k代表哪层特征图,k=5就是P5P_5,初值k0k_0=5,此时意思就是原图大小的框对应最后一层P5P_5层,框的尺寸每减小一半,k就减1(可以自己根据公式验证一下)

注:
在Faster R-CNN中,ResNet的conv4层被用来提取RoI,经过RoI Pooling后映射到14x14的大小,经过RoI Pooling后的特征再进入原来的conv5层,进而得到最终的分类和边框回归结果;在FPN中,conv5层已经被用来作为特征提取器得到P5层;因此,这里单独设计两个1024维的全连接层作为检测网络的网络头部,新的网络头部是随机初始化的,它相比于原来的conv5层更加轻量级

其他
因为作者是把FPN结合Faster R-CNN做的实验,其他的参考Faster R-CNN