FPN简介
\space\space\space\space\space\space 特征金字塔可以让识别系统检测不同大小的目标物体。而最近的目标检测网络却避开了特征金字塔,部分原因是它们需要大量的计算和内存消耗。这篇文章利用卷积网络本身的这种金字塔型的层级结构构造了FPN(Feature Pyramid Network),网络只带来很少的额外消耗。(如下图(d)所示)
\space\space\space\space\space\space 如上图所示不同方案的金字塔。
(a)通过图像金字塔来构建特征金字塔。模型在不同层级的图片上检测物体。不同比例的图像单独计算特征,每一级产生的特征图语义都很强(浅层的网络更关注于细节信息,高层的网络更关注于语义信息),但速度很慢。(在手工设计特征的年代使用广泛)
(b)只用单一尺度的图片,速度快。卷积网络可以表示更高级的语义,对图像尺度的变化也更鲁棒,从而便于识别在单个输入尺度上计算的特征。所以使用卷积网络,在单一尺度的图像上识别效果也可以很好(也就取代了手工设计)。
(c )为了达到更高的精度,特征金字塔还是必不可少。卷积网络本身就是一个多层级的金字塔型,所以自然想到直接利用卷积网络中间层的特征图,这样就不会有多余的计算消耗。但是不同深度的特征图语义差别太大,比如网络前面几层的特征图只包含低级别的特征信息,不利于目标识别。
SSD是首先利用卷积网络金字塔结构来进行检测的检测网络之一。为了避免使用低级别特征(网络靠前层产生的特征图),它只使用了基础网络(VGG-16)最后生成的特征图,以及新加入的几层卷积层产生的特征图,并没有重新利用前面已经生成的特征图,而这些像素更大的特征图有利于检测小物体。
(d)这是本文FPN的结构。将语义强的低像素的特征图与语义弱的高像素的特征图相结合,以及横向连接,使得特征金字塔中每一层特征图的语义都很强。
\space\space\space\space\space\space 有一些类似于FPN结构的网络,但它们只通过高像素的特征图产生预测结果,并没有实现特征金字塔。而FPN是每一个特征图都会产生单独的预测结果,与图像金字塔一样,如下图所示。
FPN细节
\space\space\space\space\space\space FPN的结构如下图所示。FPN是一个全卷积网络,所以可以输入任意尺寸大小的图片。基础网络(backbone)使用的是ResNet。
ResNet的网络结构如下所示。
自下而上的路径(Bottom-up)
\space\space\space\space\space\space 自下而上的路径就是基础网络(backbone)的前向传播。FPN利用每一次pooling前(特征图长宽缩小2倍)的特征图构造特征金字塔。这里就是ResNet每个building block(文中提到的stage)最后输出的特征图构造特征金字塔。即上图中的conv2_x,conv3_x,conv4_x,conv5_x的输出,记为 { C 2 , C 3 , C 4 , C 5 } \{C_2,C_3,C_4,C_5\} { C2,C3,C4,C5}。不使用conv1是因为conv1输出的特征图会占用大量内存。
自上而下的路径(Top-down)以及横向连接(lateral connection)
\space\space\space\space\space\space