目标检测 | FPN,多尺度目标检测经典Backbone
1. 论文信息
论文标题: Feature Pyramid Networks for Object Detection
论文发表:CVPR2017
论文链接:CVPR2017 open access
1 | @inproceedings{lin2017feature, |
2. 归纳总结
Name | Value |
---|---|
标签 | #多尺度 |
目的 | 针对目标检测任务中,目标尺度变化的问题,设计了特征金字塔网络 |
方法 | 构建多层特征图之间的联系,合理利用高层语义信息和底层位置信息 |
总结 | 是目标检测模型的标配,较好地解决了多尺度检测问题 |
3. 问题背景
作者提到,在2017年以前,目标检测中的一个基本挑战就是目标检测模型在处理目标多尺度变化问题的不足,因为在当时很多网络都使用了利用单个高层特征,(比如说Faster R-CNN利用下采样四倍的卷积层——Conv4,进行后续的物体的分类和bounding box的回归),但是这样做有一个明显的缺陷,即小物体本身具有的像素信息较少,在下采样的过程中极易被丢失,而之前的图像金字塔结构虽然也能解决多尺度问题,但计算量大,内存消耗大,因此作者提出了特征金字塔结构,能在增加极小的计算量的情况下,处理好物体检测中的多尺度变化问题。
4. 主要工作
针对上诉问题,提出了一个利用深度卷积神经网络固有的多尺度金字塔结构来以极小的计算量构建特征金字塔的网络结构,即FPN。
4.1 模型结构
作者对比了多种金字塔结构,其中:
- 图(a)所示的是经典的图像金字塔结构,其通过对不同尺度的图像提取特征,来构建特征金字塔,因此其需要对不同尺度图像分别提取特征,计算量大且消耗内存多;
- 图(b)所示的是2017年常见的利用最后一层(高层)特征图检测目标的模型结构,其对于多尺度目标的检测能力不足;
- 图(c)是一种利用卷积神经网络固有的多尺度特征图构建的多尺度检测模型(如SSD),但是其没有结合高层语义信息和底层位置信息,因此检测精度一般;
- 图(d)即FPN结构,是一种具有侧向连接(lateral connections)的自上而下的网络结构,用来构建不同尺寸的具有高级语义信息的特征图,并且很好的利用了不同层特征的信息。
下图是FPN的网络结构:
其主要包含两个部分:
- 自下而上的特征提取:即常规的前馈Backbone网络,以Faster R-CNN为例,假设选择ResNet每级最后一个Residual Block的输出,记为{C1,C2,C3,C4,C5},那么FPN用2-5级参与预测,其中C2, C3, C4, C5表示conv2,conv3,conv4和conv5的输出层(最后一个残差block层)作为FPN的特征,分别对应于输入图片的下采样倍数为{4,8,16,32}。
- 自上而下的特征融合以及横向连接:即将高层的语义信息和本层的细节信息相融合。自上而下的过程通过上采样(Up-Sampling)实现,上采样的方法是最近邻插值法,如下图所示。具体过程为:C5层先经过1 x 1卷积,改变特征图的通道数(文章中设置d=256,与Faster R-CNN中RPN层的维数相同便于分类与回归)。然后通过上采样,再加上(特征图中每一个相同位置元素直接相加)C4经过1 x 1卷积后的特征图M4(固定通道256)。这个过程再做两次,分别得到C3对应的特征图M3(固定通道256)以及C2对应的特征图M2(固定通道256)。M层特征图再经过3 x 3卷积(减轻最近邻近插值带来的混叠影响,周围的数都相同),得到最终的P2,P3,P4,P5层特征。
图片来自【论文笔记】FPN —— 特征金字塔 - 知乎 (zhihu.com)
4.2 代码
可参考Pytorch官方的代码https://github.com/pytorch/vision
5. 实验结果
6. 参考文献
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Justlovesmile's BLOG!
评论