FPN
FPN应该算是CNN中的一个小部件,主要应用于目标检测等领域.主要的思想来源是传统的图像处理领域中一种常见的方法,image pyramid,也叫图像金字塔,就是将图像进行一层一层的下采样,图像金字塔可以广泛应用于图像识别,目标检测,还有光流匹配,块匹配都能看到它的身影。图像金字塔主要有两种,一种是高斯金字塔(gaussian pyramid),另一种是拉普拉斯金字塔(Laplacian Pyramid)
其中$G_k$表示每一层金字塔种的图像,F表示高斯卷积核,$* $表示卷积操作,Down表示下采样,上面的表达式,就可以构建一个图像金字塔.OpenCV种有现成的函数1
2
3
4
5
6
7
8
9
10
11
12import numpy as np
import matplotlib.pyplot as plt
import cv2
A=cv2.imread("./Test1.jpg")
row,col,dpt=A.shape
pyr_level=4#层数
G=A.copy()
gpA=[G]#记录各层的输出图
for i in range(pyr_level):
G=cv.pyrDown(G)
gpA.append(G)
不跑偏,继续讲FPN
Featurized image pyramid
存在上述四种不同的生成多维度特征组合的方法
上图(a)种的方法即为常规的生成一张图片的多维度特征组合的经典方法,即对某一输入图片我们通过压缩或放大从而形成不同维度的图片作为模型输入,使用同一模型对这些不同维度的图片分别处理后,最终再将这些分别得到的特征组合起来就得到了我们想要的可反映多维度信息的特征集.此种方法缺点在于需要对同一图片在更改维度后输入处理多次,因此对计算机的算力以及内存大小都有较高要求
图(b)的方法则只拿单一维度的图片作为输入,然后经过CNN模型处理后,拿最终一层的feature maps作为最终的特征集.显然此种方法只能得到单一维度的信息.优点是计算简单,对计算机算力以及内存大小都无过高需求.此方法为大多数RCNN系列目标检测方法所用,像R-CNN/Fast-RCNN/Faster-RCNN等.因此最终这些模型对小维度的目标检测性能不是很好.
图(c)中的方法同样是拿单一维度的图片作为输入,不过最终选取用于接下来分类或检测任务时的特征组合时,此方法不只选用最后一层的high level feature maps,同样也会选用稍靠下的反映图片low level 信息的feature maps.然后将这些不同层次(反映不同level的图片信息)的特征简单合并起来(一般为concat处理),用于最终的特征组合输出.此方法可见于SSD当中.不过SSD在选取层特征时都选用了较高层次的网络.(比如它以VGG16为主干网络的检测模型里所选用的最低的Convolution的层为Conv4,这样一些具有更低级别信息的层特征像Conv2/Conv3就被它给漏掉了,于是它们对更小维度的目标检测效果就不太好)
图(d)中的方法同图(c)中的方法有相似,也是拿单一维度的图片作为输入,然后它会选取所有层的特征来处理然后再联合起来作为最终的特征输出组合。(作者在论文中拿Resnet为实例时并没选用Conv1层,那是为了算力及内存上的考虑,毕竟Conv1层的size还是比较大的,所包含的特征跟直接的图片像素信息也过于接近).另外还对这些反映不同级别图片信息的各层自上向下进行了再处理以能更好地组合从而形成较好地特征表达(详细过程会在后面介绍).而此方法正是我们文本中要将地FPN特征提取方法.
FPN基本架构
可以描述为三个过程:
- 自下至上的通路即自下至上的不同维度特征生成;
- 自上至下的通路即自上至下的特征补充增强
- CNN网络层特征与最终输出的各维度特征之间的关联表达
FPN的特征组合详细描述
- 自下至上的通路(Bottom-top pathway):即普通CNN特征自底至上逐层表达特征的一个过程.此过程很早即被认识到了即较低的层反映较浅层次的图片信息特征像边缘等;较高的层则反映较深层次的图片特征比如物体轮廓、乃至类别等
- 自上至下的通路(Top-bottom pathway):上层的特征输出一般其feature map size比较小,但却能表示更高层次(high level)的图片信息.此类high level信息经实验证明能够对后续的目标检测、物体分类等任务发挥关键作用.因此我们再处理每一层信息时会参考上一层的high level 信息作为其输入(这里只是再将上层feature map等比例放大(文中说的是上采样,然后用最近邻补足分辨率)后再与本层的feature map做element wise 相加)
- CNN层特征与每一级别输出之间的表达关联:在这里作者实验表明使用1×1的Conv即可生成较好的输出特征,它可有效地降低中甲层次地channels数目.最终这些1×1的Convs使得我们输出不同维度的各个feature maps有着相同的channel数目(本文用到的Resnet-101主干网络中,各个层次特征的最终输出channel数目为256)
FPN在目标检测中的实际应用
在原文中举了许多例子,比如将FPN加入Faster RCNN中的RPN里.不再赘述,有需要可以看原文