YOLOv9: 用可编程梯度信息学习

论文: YOLOv9: Learning What You Want to Learn Using Programmable Gradient Information (2024)
作者: Chien-Yao Wang, I-Hau Yeh, Hong-Yuan Mark Liao (同 v4/v7 团队)


核心问题

深度神经网络逐层处理时,信息会不可逆地丢失。这导致最终用于计算损失的梯度不够可靠,影响模型学习。

YOLOv9 的回答: 用 PGI (Programmable Gradient Information,可编程梯度信息) 来确保梯度可靠。


两大核心技术

1. PGI (Programmable Gradient Information)

1
2
3
4
5
6
7
8
9
10
11
12
PGI 由三部分组成:
┌─────────────────────────────────────┐
│ (1) 主分支 (Main Branch) │ → 推理时使用
│ 标准前馈网络 │
├─────────────────────────────────────┤
│ (2) 辅助可逆分支 (Auxiliary Rev) │ → 训练时提供完整梯度
│ 可逆设计 → 零信息丢失 │
│ 为计算目标函数提供完整的输入信息 │
├─────────────────────────────────────┤
│ (3) 多级辅助信息 (Multi-level) │ → 控制主分支学习的语义层次
│ 在多个层级注入监督信号 │
└─────────────────────────────────────┘

核心直觉:

  • 深度网络 = 信息有损压缩管道
  • 辅助可逆分支 = 保持原始信息的”备份通道”
  • 多级辅助 = 确保各层都学到正确语义

2. GELAN (Generalized Efficient Layer Aggregation Network)

GELAN = ELAN 的泛化版本

1
2
3
4
传统 ELAN: 固定使用卷积块
GELAN: 可以使用任意计算块 (ConvBlock, CSPBlock 等)

最大信息流 + 最小计算开销

设计原理: 梯度路径规划

1
2
3
                          ┌─→ Block1 ──→ Block2 ─┐
输入 ──→ split ──→ BlockA ──→ Block3 ──→ Block4 ─┼──→ concat → 输出
└─→ Block5 ──→ Block6 ─┘

通过精心设计路径确保每层都获得有效的梯度流,避免”梯度消失”。


架构

1
2
3
4
5
6
7
8
9
输入图像

Backbone: GELAN (包含 PGI 辅助分支)

Neck: GELAN-FPN

Head: Anchor-Based (类似 v7)

输出预测

训练时使用 PGI 完整架构,推理时仅保留主分支(无额外开销)。


信息瓶颈问题的可视化

不同架构在随机初始权重下,输出特征图的信息保留程度:

1
2
3
4
PlainNet:   ░░░░ 大量信息丢失
ResNet: ░░ 残差有助于保留
CSPNet: ░ CSP改善梯度流
GELAN: ██ 几乎完整保留!

GELAN 保留最完整的信息 → 提供给损失函数的梯度最可靠


模型变体

变体 说明
yolov9s Small
yolov9m Medium
yolov9c Compact (紧凑版)
yolov9e Extended (扩展版)

优点与局限

✅ 优点

  • 理论上优雅:从根本上解决深度网络信息丢失问题
  • PGI 通用性强:可以用于其他网络架构

❌ 局限

  • 训练架构 vs 推理架构不同,调试复杂
  • 代码基于 v5 代码库实验性实现,不如 Ultralytics 稳定
  • 工业落地不如 v8/v11 成熟

相关链接

  • 📝 [[YOLO 系列总览]]
  • 📝 [[YOLOv7 详解]] — 同作者团队
  • 📋 [[10.clippings/感知算法/2D检测/单阶段/YOLO/一文全面梳理YOLO系列|从YOLOv1到YOLOv13,再到YOLO26]]