YOLOv9:目标检测技术的飞跃

YOLOv9 标志着实时目标检测领域的重大进展,引入了可编程梯度信息 (PGI) 和通用高效层聚合网络 (GELAN) 等开创性技术。该模型在效率、准确性和适应性方面表现出色,并在 MS COCO 数据集上树立了新的基准。YOLOv9 项目尽管是由一个独立的开源团队开发的,但它构建在 Ultralytics YOLOv5 提供的强大代码库之上,展现了 AI 研究社区的协作精神。



Watch: YOLOv9 Training on Custom Data using Ultralytics | Industrial Package Dataset

YOLOv9 性能对比

YOLOv9 简介

在寻求最佳实时目标检测的过程中,YOLOv9 以其创新的方法脱颖而出,克服了深度神经网络中固有的信息丢失挑战。通过集成 PGI 和通用的 GELAN 架构,YOLOv9 不仅增强了模型的学习能力,还确保了在整个检测过程中保留关键信息,从而实现卓越的准确性和性能。

YOLOv9 的核心创新

YOLOv9 的进步从根本上解决了深度神经网络中信息丢失所带来的挑战。信息瓶颈原理 (Information Bottleneck Principle) 和可逆函数 (Reversible Functions) 的创新应用是其设计的核心,确保了 YOLOv9 保持高效和准确。

信息瓶颈原理

信息瓶颈原理揭示了深度学习中的一个基本挑战:当数据通过网络的连续层时,信息丢失的可能性会增加。这一现象在数学上表示为:

I(X, X) >= I(X, f_theta(X)) >= I(X, g_phi(f_theta(X)))

其中 I 表示互信息,fg 分别表示参数为 thetaphi 的变换函数。YOLOv9 通过实施可编程梯度信息 (PGI) 来应对这一挑战,该信息有助于在网络深度中保留重要数据,确保更可靠的梯度生成,从而实现更好的模型收敛和性能。

可逆函数

可逆函数的概念是 YOLOv9 设计的另一个基石。如果一个函数可以在不丢失任何信息的情况下被反转,则该函数被视为可逆,表达为:

X = v_zeta(r_psi(X))

其中 psizeta 分别是可逆函数及其反函数的参数。这一特性对于深度学习架构至关重要,因为它允许网络保持完整的信息流,从而实现对模型参数更准确的更新。YOLOv9 在其架构中集成了可逆函数,以降低信息退化的风险,特别是在较深层中,确保为目标检测任务保留关键数据。

对轻量级模型的影响

解决信息丢失问题对于轻量级模型尤为重要,因为这些模型通常参数不足,并且在向前传播过程中容易丢失大量信息。YOLOv9 的架构通过使用 PGI 和可逆函数,确保即使在流线型模型中,也能保留并有效利用准确目标检测所需的基本信息。

可编程梯度信息 (PGI)

PGI 是 YOLOv9 中引入的一个新概念,用于克服信息瓶颈问题,确保在深度网络层中保留重要数据。这有助于生成可靠的梯度,促进准确的模型更新并提高整体检测性能。

通用高效层聚合网络 (GELAN)

GELAN 代表了一种战略性架构进步,使 YOLOv9 能够实现卓越的参数利用率和计算效率。其设计允许灵活集成各种计算块,使 YOLOv9 能够在不牺牲速度或准确性的情况下适应广泛的应用。

YOLOv9 架构对比

YOLOv9 基准测试

使用 Ultralytics 对 YOLOv9 进行基准测试包括在现实场景中评估你训练和验证后的模型性能。此过程包括:

  • 性能评估: 评估模型的速度和准确性。
  • 导出格式: 在不同导出格式中测试模型,以确保其符合必要标准并在各种环境中表现良好。
  • 框架支持: 在 Ultralytics YOLOv8 中提供一个全面的框架,以促进这些评估并确保结果的一致性和可靠性。

通过基准测试,你可以确保你的模型不仅在受控测试环境中表现良好,而且在实际应用中也能保持高性能。



Watch: How to Benchmark the YOLOv9 Model Using the Ultralytics Python Package

在 MS COCO 数据集上的表现

YOLOv9 在 COCO 数据集上的表现体现了其在实时目标检测方面的重大进步,在各种模型尺寸上树立了新的基准。表 1 展示了当前最先进的实时目标检测器的全面对比,说明了 YOLOv9 出色的效率和准确性

性能
模型尺寸
(像素)
mAPval
50-95
mAPval
50
参数
(M)
FLOPs
(B)
YOLOv9t64038.353.12.07.7
YOLOv9s64046.863.47.226.7
YOLOv9m64051.468.120.176.8
YOLOv9c64053.070.225.5102.8
YOLOv9e64055.672.858.1192.5

YOLOv9 的迭代版本,从微小的 t 变体到庞大的 e 模型,不仅在准确性(mAP 指标)上有所提高,而且在减少参数数量和计算需求 (FLOPs) 方面也提高了效率。此表强调了 YOLOv9 在与先前版本和竞争模型相比,在保持或降低计算开销的同时提供高精度的能力。

相比之下,YOLOv9 展现了显著的增益:

  • 轻量级模型:YOLOv9s 在参数效率和计算负载方面超越了 YOLO MS-S,同时实现了 0.4∼0.6% 的 AP 提升。
  • 中大型模型:YOLOv9m 和 YOLOv9e 在平衡模型复杂性和检测性能之间显示出显著进步,与准确性提高的背景下,参数和计算量都有显著减少。

特别是 YOLOv9c 模型,突显了该架构优化的有效性。与 YOLOv7 AF 相比,它的参数减少了 42%,计算需求减少了 21%,但实现了相当的准确性,证明了 YOLOv9 在效率方面的显著改进。此外,YOLOv9e 模型为大型模型设定了新标准,与 YOLOv8x 相比,参数减少了 15%,计算需求减少了 25%,同时 AP 提升了 1.7%。

这些结果展示了 YOLOv9 在模型设计方面的战略性进展,强调了其在不妥协实时目标检测任务所需的精度的情况下提高了效率。该模型不仅突破了性能指标的界限,还强调了计算效率的重要性,使其成为计算机视觉领域的一项关键发展。

总结

YOLOv9 于 2024 年 2 月发布,代表了实时目标检测领域的一项关键发展,在效率、准确性和适应性方面提供了显著改进。通过通过 PGI 和 GELAN 等创新解决方案解决关键挑战,YOLOv9 在发布时树立了新的基准。虽然 YOLO11YOLO26 等更新的模型此后已经发布并有了进一步的改进,但 YOLOv9 的架构创新继续影响着该领域。

使用示例

此示例提供了简单的 YOLOv9 训练和推理示例。有关这些和其他模式的完整文档,请参阅 PredictTrainValExport 文档页面。

示例

可以将 PyTorch 预训练的 *.pt 模型以及配置文件 *.yaml 传递给 YOLO() 类,以在 Python 中创建模型实例:

from ultralytics import YOLO

# Build a YOLOv9c model from scratch
model = YOLO("yolov9c.yaml")

# Build a YOLOv9c model from pretrained weight
model = YOLO("yolov9c.pt")

# Display model information (optional)
model.info()

# Train the model on the COCO8 example dataset for 100 epochs
results = model.train(data="coco8.yaml", epochs=100, imgsz=640)

# Run inference with the YOLOv9c model on the 'bus.jpg' image
results = model("path/to/bus.jpg")

支持的任务和模式

YOLOv9 系列提供了一系列模型,每个模型都针对高性能目标检测进行了优化。这些模型满足了不同的计算需求和准确性要求,使其能够广泛应用于各种场景。

模型文件名任务推理验证训练导出
YOLOv9yolov9t.pt yolov9s.pt yolov9m.pt yolov9c.pt yolov9e.pt目标检测
YOLOv9-segyolov9c-seg.pt yolov9e-seg.pt实例分割

此表详细概述了 YOLOv9 模型变体,重点介绍了它们在目标检测任务中的能力,以及它们与推理验证训练导出等各种操作模式的兼容性。这种全面的支持确保用户可以在广泛的目标检测场景中充分利用 YOLOv9 模型的功能。

注意

训练 YOLOv9 模型将需要更多资源,并且比同等大小的 YOLOv8 模型花费更长时间。

引文与致谢

我们感谢 YOLOv9 作者在实时目标检测领域所做的重大贡献:

引用
@article{wang2024yolov9,
  title={YOLOv9: Learning What You Want to Learn Using Programmable Gradient Information},
  author={Wang, Chien-Yao  and Liao, Hong-Yuan Mark},
  booktitle={arXiv preprint arXiv:2402.13616},
  year={2024}
}

原始 YOLOv9 论文可在 arXiv 上找到。作者已将其工作公开发布,代码库可在 GitHub 上访问。我们感谢他们在推动该领域发展并使广大社区能够获取其工作方面所做的努力。

常见问题 (FAQ)

YOLOv9 为实时目标检测引入了哪些创新?

YOLOv9 引入了可编程梯度信息 (PGI) 和通用高效层聚合网络 (GELAN) 等开创性技术。这些创新解决了深度神经网络中的信息丢失挑战,确保了高效率、准确性和适应性。PGI 保留了跨网络层的关键数据,而 GELAN 优化了参数利用率和计算效率。详细了解 YOLOv9 的核心创新,这些创新在 MS COCO 数据集上树立了新的基准。

与其它模型相比,YOLOv9 在 MS COCO 数据集上的表现如何?

YOLOv9 通过实现更高的准确性和效率,超越了当前最先进的实时目标检测器。在 COCO 数据集上,YOLOv9 模型在各种尺寸上展现了卓越的 mAP 分数,同时保持或降低了计算开销。例如,与 YOLOv7 AF 相比,YOLOv9c 以少 42% 的参数和少 21% 的计算需求实现了相当的准确性。浏览性能对比以获取详细指标。

如何使用 Python 和 CLI 训练 YOLOv9 模型?

你可以使用 Python 和 CLI 命令来训练 YOLOv9 模型。对于 Python,请使用 YOLO 类实例化模型并调用 train 方法:

from ultralytics import YOLO

# Build a YOLOv9c model from pretrained weights and train
model = YOLO("yolov9c.pt")
results = model.train(data="coco8.yaml", epochs=100, imgsz=640)

对于 CLI 训练,请执行:

yolo train model=yolov9c.yaml data=coco8.yaml epochs=100 imgsz=640

了解更多关于训练和推理的用法示例

使用 Ultralytics YOLOv9 进行轻量级模型有哪些优势?

YOLOv9 旨在减轻信息丢失,这对于容易丢失大量信息的轻量级模型尤为重要。通过集成可编程梯度信息 (PGI) 和可逆函数,YOLOv9 确保了基本数据的保留,增强了模型的准确性和效率。这使其非常适合需要高性能紧凑模型的应用。有关更多详细信息,请浏览关于 YOLOv9 对轻量级模型影响的部分。

YOLOv9 支持哪些任务和模式?

YOLOv9 支持包括目标检测和实例分割在内的各种任务。它与多种操作模式兼容,如推理、验证、训练和导出。这种多功能性使 YOLOv9 能够适应各种实时计算机视觉应用。有关更多信息,请参考支持的任务和模式部分。

评论