📝 前言
在计算机视觉领域,目标检测一直是一个核心的研究方向。当我们试图让计算机理解图像中的物体时,一个根本性的挑战摆在我们面前:图像中的物体尺寸差异巨大。
想象一下这样的场景:一张街景照片中,近处的汽车可能占据数百个像素,而远处的行人可能只有几十个像素。如何让一个深度学习模型同时准确地检测出这些大小迥异的物体?
这就是FPN(Feature Pyramid Network,特征金字塔网络)试图解决的核心问题。

🎯 问题的起源:多尺度检测的困境
目标检测模型处理多尺度问题的方式主要有以下几种:
1. 图像金字塔
传统方法构建图像金字塔,对同一图像的不同缩放版本分别提取特征:

✅ 优点 :效果好,能检测各种尺度的物体
❌ 缺点:计算量巨大,训练和推理速度慢
2. 单层特征图
常规的卷积网络,像早期的Faster R-CNN,只使用网络的最后一层特征进行预测:

✅ 优点 :计算简单,速度快
❌ 缺点:小物体信息在多次下采样后丢失严重
3. 多层特征图独立预测
放弃了重利用更高分辨率的feature map,但是这些feature map对检测小目标非常重要,像SSD,使用网络中多个不同层的特征图分别进行预测:

✅ 优点 :一定程度上解决多尺度问题
❌ 缺点:浅层特征信息不足,影响检测精度
🏗️ FPN的核心思想
FPN的核心洞察是:高层特征有丰富的语义信息,但分辨率低;低层特征有精细的空间信息,但语义不足。如果将两者融合,就能得到既有强语义又有高分辨率的特征。

FPN的三大组件
FPN由三条路径组成,形成了一种"横向连接的金字塔"结构:
1️⃣ 自底向上路径
这是标准的卷积神经网络前向传播过程。随着网络加深,特征图分辨率不断降低,但语义信息不断增强:
-
C2层:步长4,高分辨率,低级特征(边缘、纹理)
-
C3层:步长8,中等分辨率,中级特征(形状、部件)
-
C4层:步长16,低分辨率,高级特征(物体部件)
-
C5层:步长32,最低分辨率,最强语义(完整的物体概念)
2️⃣ 自顶向下路径
这条路径将高层的强语义特征进行上采样,使其与下一层特征图尺寸匹配:
高层特征 (C5: 7×7)
↓ 1×1卷积(降维)
↓ 上采样(放大2倍)
融合后的特征 (与C4尺寸相同)
3️⃣ 横向连接
这是FPN的"神来之笔"。它将自顶向下路径上采样后的特征,与自底向上路径中对应尺寸的特征进行融合:
-
对自底向上的特征先做1×1卷积(统一通道数)
-
与上采样后的特征进行逐元素相加
-
再经过3×3卷积(消除混叠效应)
🔄 FPN的工作原理详解
让我们通过一个具体的例子,一步步理解FPN的工作流程:

步骤1:特征提取
假设输入图像尺寸为 224×224,经过ResNet骨干网络:
输入: 224×224×3
↓
C2: 56×56×256 (步长4) ← 丰富的空间细节
↓
C3: 28×28×512 (步长8) ← 细节与语义的平衡
↓
C4: 14×14×1024 (步长16) ← 较强的语义信息
↓
C5: 7×7×2048 (步长32) ← 最强的语义信息
步骤2:构建金字塔
现在开始构建特征金字塔 {P2, P3, P4, P5}:
构建P5:
- 从C5开始,经过1×1卷积得到P5(7×7×256)
构建P4:
-
将P5上采样(2倍)得到14×14×256
-
对C4做1×1卷积得到14×14×256
-
两者相加,再经过3×3卷积得到P4(14×14×256)
构建P3:
-
将P4上采样(2倍)得到28×28×256
-
对C3做1×1卷积得到28×28×256
-
两者相加,再经过3×3卷积得到P3(28×28×256)
构建P2:
-
将P3上采样(2倍)得到56×56×256
-
对C2做1×1卷积得到56×56×256
-
两者相加,再经过3×3卷积得到P2(56×56×256)
步骤3:多尺度预测
最终,我们在不同层上进行目标检测:
-
P2层 (步长4):负责检测小物体
-
P3层 (步长8):负责检测中等偏小物体
-
P4层 (步长16):负责检测中等偏大物体
-
P5层 (步长32):负责检测大物体
💫 FPN的优势与贡献
优势一:强大的多尺度检测能力
通过特征融合,每一层特征图都同时具备强语义信息和高分辨率,无论物体大小都能被很好地表示。
优势二:计算效率高
相比图像金字塔,FPN几乎不增加额外计算量,因为它复用了主干网络的计算结果。
优势三:易于集成
FPN可以无缝集成到各种目标检测框架中:
-
两阶段检测器:Faster R-CNN + FPN
-
一阶段检测器:YOLOv3、RetinaNet
-
实例分割:Mask R-CNN
优势四:对小物体特别友好
小物体检测是FPN的最大受益者。在P2层,小物体的特征得以保留,同时融入了高层语义,大大提高了检测精度。
🔬 FPN的演进:从经典到现代
自2017年提出以来,FPN衍生出许多优秀的变体:
PANet (2018)
BiFPN (2020)
NAS-FPN (2019)
📚 参考文献
原论文:Feature Pyramid Networks for Object Detection (CVPR 2017)
PANet:Path Aggregation Network for Instance Segmentation (CVPR 2018)
BiFPN:EfficientDet: Scalable and Efficient Object Detection (CVPR 2020)
NAS-FPN:NAS-FPN: Learning Scalable Feature Pyramid Architecture for Object Detection(CVPR 2019)