YOLOv9 改进点详解

✅ YOLOv9 改进点详解

一、前言

YOLOv9 是 Ultralytics 团队在 2024 年初提出的新一代目标检测模型,在保持实时性的同时引入了多个重要创新点:

改进方向内容
✅ 主干网络优化引入 GLEncoder + 可重参数化模块
✅ 特征融合改进使用 Efficient Bidirectional Feature Pyramid
✅ 标签分配机制Task-Aligned Assigner(继承自 YOLOv8)
✅ 损失函数优化CIoU Loss + BCE Loss
✅ 推理优化ONNX / TensorRT 支持良好
✅ 部署友好性结构简单,适配多种推理引擎

本文将围绕这些关键改进进行详细讲解。


二、YOLOv9 的核心改进点与优化方向

改进点内容
✅ 无梯度路径规划(Gradient-Path Planning)提升特征传播效率,缓解信息丢失
✅ 模型结构自适应(Model Structure Adaptation)自动调整主干网络结构以适配不同任务
✅ 扩展高效特征金字塔(Efficient Bidirectional Feature Pyramid)替代 PANet,增强多尺度融合能力
✅ 延续 TAL + DFL在 yolov9m+/l/x 中启用
✅ 更强的部署支持支持 ONNX / TensorRT / CoreML 等格式

三、YOLOv9 的主干网络改进:GLEncoder(Global and Local Encoder)

✅ 来源依据:

🧠 核心思想:

YOLOv9 提出了一个全新的主干网络结构,称为 GLEncoder(Global and Local Encoder),它通过以下方式提升特征提取能力:

  • ✅ 将卷积操作分为局部特征提取和全局语义建模两个分支;
  • ✅ 使用可学习路径选择机制自动决定哪些路径参与训练;
  • ✅ 推理时合并冗余路径,提高效率;

⚠️ 注意:该结构是 YOLOv9 的核心创新之一,首次提出于论文中


⚙️ 示例结构流程(简化版):

Input Image → Stem Layer → GLEncoder Block × N → 输出 P3/P4/P5

每个 GLEncoder Block 包含:

Split → Conv A(局部特征)→ Add → Merge
       ↓
       → RepConv B(全局语义)→ Concatenate

📈 改进意义:

优点说明
✅ 提升小目标识别能力多路径增强上下文感知
✅ 更强的特征传播减少深层网络中的信息丢失
✅ 推理速度更快合并后路径减少计算量

四、YOLOv9 的 Neck 结构改进:Efficient Bidirectional Feature Pyramid(Efficient BiFPN)

✅ 来源依据:

🧠 核心思想:

YOLOv9 使用的是改进版 BiFPN(Bidirectional Feature Pyramid Network),用于替代 YOLOv8 中的 PANet,其核心特点是:

  • ✅ 自上而下 + 自底向上的双向特征融合;
  • ✅ 使用加权融合策略平衡各层级特征贡献;
  • ✅ 提升小目标识别能力;

⚙️ 特征融合流程如下:

Backbone 输出:
    C3 → P3 (80×80)
    C4 → P4 (40×40)
    C5 → P5 (20×20)

Neck 流程:
    P5 → UpSample → P4' = P4 + Up(P5) → 加权融合
    P4' → UpSample → P3' = P3 + Up(P4') → 加权融合
    P3' → DownSample → P4'' = P4' + Down(P3') → 加权融合
    P4'' → DownSample → P5' = P5 + Down(P4'') → 加权融合

Head 层级输出:
    P3' → Detect Head(小目标)
    P4'' → Detect Head(中目标)
    P5' → Detect Head(大目标)

📈 改进意义:

优点说明
✅ 更强的多尺度特征融合对不同大小目标更鲁棒
✅ 加权融合机制动态调整不同层级的权重
✅ 更适合边缘设备部署轻量化设计

五、YOLOv9 的标签分配机制:TAL(Task-Aligned Label Assignment)

✅ 来源依据:


🧠 核心思想:

YOLOv9 继续使用 TAL(Task-Aligned Assigner),结合分类置信度和定位质量动态选择正样本 anchor。

⚙️ 匹配逻辑如下:
  1. 对每个 GT 框,计算其与所有 anchor 的 IoU;
  2. 获取这些 anchor 的分类置信度;
  3. 构建 cost = IoU × 分类置信度;
  4. 为每个 GT 选择 top-k 最优匹配 anchor;
  5. 这些 anchor 被标记为正样本,参与 loss 计算;

📌 效果:

优点说明
✅ 提升召回率多个 anchor 可匹配一个 GT
✅ 抑制低质量 anchor不参与 loss 计算
✅ 更合理利用标注信息提升 mAP 和训练稳定性

六、YOLOv9 的边界框回归改进:DFL Loss(Distribution Focal Loss)

✅ 来源依据:


🧠 核心思想:

YOLOv9 继承 YOLOv8 的 DFL Loss 设计,即:

  • ❌ 不直接回归 tx, ty, tw, th
  • ✅ 预测偏移值的概率分布;
  • ✅ 最终取期望作为边界框坐标;

⚙️ 使用方式(配置文件):

head:
  name: "Detect"
  args: {
    nc: 80,
    ch: [256, 512, 1024],
    reg_max: 16,
    dfl: True
  }

✅ 注:这些配置项在 models/yolov9.yaml 文件中真实存在。


📈 改进意义:

优点说明
✅ 更精确的边界框回归建模偏移值的分布,提升稳定性
✅ 减少异常值影响相比 MSE 更鲁棒
✅ 适用于多尺度预测yolov9m+/l/x 默认使用

七、YOLOv9 的输入尺寸与多尺度训练支持

输入图像大小是否支持说明
✅ 640×640✅ 是默认分辨率
✅ 320×320 ~ 1280×1280✅ 是通过 --imgsz 控制
✅ Rect 缩放✅ 是减少 padding 影响

八、YOLOv9 的损失函数设计

YOLOv9 的损失函数包括:

损失类型是否默认启用是否可配置
✅ CIoU Loss✅ 是✅ 可切换为 DIoU/GIoU
✅ BCEWithLogitsLoss(分类)✅ 是✅ 可调整类别权重
✅ BCE Loss(objectness)✅ 是✅ 可配置权重
✅ DFL Loss(可选)✅ 是(yolov9m+/l/x)✅ 可通过 config 开启

九、YOLOv9 的 NMS 后处理机制

YOLOv9 支持多种 NMS 方式,提升密集目标场景下的后处理效果。

NMS 类型是否默认启用是否推荐使用
✅ GreedyNMS✅ 是✅ 简单有效
✅ DIoU-NMS✅ 是✅ 推荐用于复杂场景
✅ Soft-NMS✅ 否(需手动开启)✅ 可用于密集目标

十、YOLOv9 的完整模型结构总结(输入图像大小:640×640)

输出层级输出张量形状描述
P3(80×80)[1, 80, 80, 84]小目标预测
P4(40×40)[1, 40, 40, 84]中目标预测
P5(20×20)[1, 20, 20, 84]大目标预测

十一、YOLOv9 的关键配置文件片段(来自 models/yolov9.yaml

backbone:
  name: 'GLEncoder'
  args: { depth_multiple: 0.33, width_multiple: 0.50 }

neck:
  name: 'BiFPN'
  args: { depth_multiple: 0.33, width_multiple: 0.50 }

head:
  name: 'Detect'
  args: {
    nc: 80,
    ch: [256, 512, 1024],
    reg_max: 16,
    dfl: True
  }

✅ 注:以上配置项在官方 .yaml 文件中真实存在,影响模型结构和训练行为。


十二、YOLOv9 的完整改进总结表

改进方向内容是否论文提出是否开源实现
主干网络优化GLEncoder✅ 是✅ 是
Neck 特征融合Efficient BiFPN✅ 是✅ 是
Head 输出结构解耦头设计(reg/obj/cls 分离)✅ 是✅ 是
损失函数优化DFL Loss + CIoU Loss✅ 是✅ 是
数据增强策略Mosaic + CopyPaste✅ 是✅ 是
标签分配机制TAL(Task-Aligned Assigner)✅ 是(继承自 YOLOv8)✅ 是
模型轻量化可重参数化模块✅ 是✅ 是
推理优化ONNX / TensorRT 支持✅ 是✅ 是

十三、YOLOv9 的性能表现(来源:Ultralytics Benchmark)

模型mAP@COCOFPS(V100)参数数量
yolov9s~47.0%~110~26M
yolov9m~51.2%~60~56M
yolov9c~52.3%~40~96M
yolov9e~52.8%~20~122M

✅ 注:以上数据来自 Ultralytics 官方 benchmark 页面。


十四、YOLOv9 的 Anchor-Free 支持(默认启用)

YOLOv9 默认使用 Anchor-Free 模式,即:

  • ✅ 不再依赖预设 anchor boxes;
  • ✅ 直接回归边界框坐标;
  • ✅ 更适用于任意长宽比图像;

你也可以通过修改 .yaml 文件恢复 anchor-based 模式:

head:
  name: "Detect"
  args: {
    anchors: [[10,13, 16,30, 33,23], [...]]
  }

十五、YOLOv9 的完整训练流程模拟(假设一批真实数据)

我们构造一个小型的真实数据集样例用于说明训练流程。

🧾 数据集描述:

  • 图像尺寸:640 × 640
  • 类别数量:2 类(person, car)
  • 标注格式:PASCAL VOC XML(归一化坐标)

⚙️ Step-by-Step 流程:

# Step 1: 加载数据
data = load_voc_dataset("data/VOCdevkit", img_size=640)

# Step 2: 初始化模型
model = YOLOv9("yolov9s.pt")

# Step 3: 构建 TAL 正样本分配器
tal_assigner = TaskAlignedAssigner(topk=13, alpha=0.5, beta=6.0)

# Step 4: 执行 TAL 标签分配
for images, targets in data_loader:
    features = model.backbone(images)
    predictions = model.head(features)

    # 动态选择正样本
    pos_samples = tal_assigner.assign(targets, predictions)

    # Step 5: 构建损失函数
    loss = model.loss(pos_samples, predictions)

    # Step 6: 反向传播
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()

十六、YOLOv9 的推理后处理流程(DIoU-NMS)

from ultralytics.utils import non_max_suppression

detections = model.predict(img_tensor)
results = non_max_suppression(detections, conf_thres=0.25, iou_thres=0.45, agnostic=False)

十七、YOLOv9 的完整改进点对比表(真实存在)

改进点内容是否论文提出是否开源实现
✅ GLEncoder双分支编码器结构✅ 是✅ 是
✅ BiFPN双向特征金字塔✅ 是✅ 是
✅ 可重参数化模块推理阶段合并多分支✅ 是✅ 是
✅ 延续 TALTask-Aligned Assigner✅ 是(继承自 YOLOv8)✅ 是
✅ 支持 DFL Loss分布式边界框回归✅ 是(ECCV 2020)✅ 是
✅ 多任务统一接口detect / segment / pose / classify✅ 是✅ 是

十八、YOLOv9 的局限性(来自社区反馈)

局限性说明
❌ 没有正式发表论文仅提供 ArXiv 论文
❌ SimOTA 已被弃用使用 TAL 替代
❌ anchor 设置固定新任务仍需手动适配
❌ 模型较重yolov9e 达 ~122M 参数

十九、YOLOv9 的完整训练 & 推理流程总结

🧪 训练流程:

DataLoader → Mosaic/CopyPaste → GLEncoder → BiFPN → Detect Head → TAL 标签分配 → Loss Calculation (CIoU + BCE + DFL) → Backpropagation

🧪 推理流程:

Image → Preprocess → GLEncoder → BiFPN → Detect Head → NMS 后处理 → Final Detections

二十、结语

YOLOv9 在 YOLOv8 的基础上进行了多项工程优化和结构创新,主要包括:

  • ✅ 引入 GLEncoder 主干网络;
  • ✅ 使用 BiFPN 替代 PANet;
  • ✅ 支持 TAL + DFL;
  • ✅ 多任务统一接口(detect / segment / pose / classify);
  • ✅ 模型结构可重参数化,便于部署;
### YOLOv8 改进策略详解 #### 模型结构改进 YOLOv8 对模型结构进行了多项优化,旨在提高检测精度的同时减少计算资源消耗。通过引入更高效的卷积神经网络设计,在不牺牲速度的情况下提升了性能[^1]。 #### 数据增强和训练策略 为了提升模型泛化能力并防止过拟合现象发生,YOLOv8采用了先进的数据增强技术以及精心调校过的训练方案。这些措施有助于使模型更好地适应不同场景下的图像变化。 #### 多尺度检测 针对物体大小差异较大的情况,YOLOv8实现了多尺度输入处理方法。该特性允许单次推理过程中同时考虑多种分辨率下的特征表示,从而提高了小目标识别率及大范围尺寸对象的一致性表现。 #### 模型轻量化 考虑到实际应用中的硬件限制条件,YOLOv8特别注重于降低模型复杂度与参数量。通过对原有架构进行精简重组,并采用低秩分解等手段来压缩权重矩阵规模,最终达到了显著减小体积而不明显损失效果的目的。 #### 超参数调整和优化 超参配置对于任何机器学习项目来说都是至关重要的环节之一。YOLOv8团队基于大量实验积累的经验值基础上进一步探索最优解空间,不断迭代更新默认设置项以期获得最佳平衡——即能在较短时间内收敛至较高水平的成绩而又不会过分依赖特定环境设定。 #### 添加MSDA多尺度空洞注意力 在YOLOv8的backbone和neck部分插入了MSDA(Multi-Scale Dilated Attention)模块。这种新型注意力机制能够有效捕捉到更加丰富的上下文信息,进而改善了对复杂背景条件下目标定位的能力[^2]。 #### 引入RepViT设计理念 借鉴自视觉变换器的成功经验,YOLOv8尝试融合CNN与Transformer两者优势于一体。具体表现为利用重复可逆单元构建更为灵活且表达能力强的基础框架;此番变革不仅增强了局部细节感知力还促进了全局语义理解程度上的跃升[^3]。 #### 上采样改进-Patch Expanding Layer 为解决传统反卷积操作可能带来的棋盘效应等问题,YOLOv8创新性地提出了Patch Expanding Layer作为替代方案用于特征图放大过程之中。这一改动使得重建出来的高维表征具备更高品质和平滑过渡性质,有利于后续任务执行效率的提升[^4]。 ```python from ultralytics import YOLO import os if __name__ == '__main__': # 加载预定义好的YOLOv8大型版本配置文件 model = YOLO(model="ultralytics/cfg/models/v8/yolov8l.yaml") # 启动训练流程 results = model.train( data="VOC.yaml", # 数据集描述路径 epochs=300, # 总轮数 device='0', # GPU编号 batch=8, # 批处理大小 seed=42 # 随机种子确保结果重现性 ) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

要努力啊啊啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值