YOLOv9:对象检测技术的一大飞跃
YOLOv9 标志着实时对象检测的重大进步,引入了突破性技术,如可编程梯度信息 (PGI) 和广义高效层聚合网络 (GELAN)。该模型在效率、准确性和适应性方面表现出显著的改进,在 MS COCO 数据集上设置了新的基准。YOLOv9 项目虽然由一个独立的开源团队开发,但它建立在 Ultralytics YOLOv5 提供的强大代码库之上,展示了 AI 研究社区的协作精神。
观看: 使用 Ultralytics 在自定义数据上训练 YOLOv9 | 工业包数据集
YOLOv9 简介
在寻求最佳实时对象检测的过程中,YOLOv9 以其创新的方法脱颖而出,克服了深度神经网络中固有的信息丢失挑战。通过集成 PGI 和通用的 GELAN 架构,YOLOv9 不仅增强了模型的学习能力,还确保在整个检测过程中保留关键信息,从而实现卓越的准确性和性能。
YOLOv9 的核心创新
YOLOv9 的进步深刻地植根于解决深度神经网络中信息丢失带来的挑战。信息瓶颈原理和可逆函数的创新使用是其设计的核心,确保 YOLOv9 保持高效率和准确性。
信息瓶颈原理
信息瓶颈原理揭示了深度学习中的一个基本挑战:当数据通过网络的连续层时,信息丢失的可能性会增加。这种现象在数学上表示为:
I(X, X) >= I(X, f_theta(X)) >= I(X, g_phi(f_theta(X)))
其中 I
表示互信息,以及 f
和 g
表示具有参数的变换函数 theta
和 phi
。YOLOv9 通过实施可编程梯度信息 (PGI) 来应对这一挑战,该信息有助于在整个网络深度中保留基本数据,确保更可靠的梯度生成,从而实现更好的模型收敛和性能。
可逆函数
可逆函数的概念是 YOLOv9 设计的另一个基石。如果一个函数可以被反转而没有任何信息损失,则该函数被认为是可逆的,如以下表达式所示:
X = v_zeta(r_psi(X))
使用 psi
和 zeta
作为可逆函数及其反函数的参数。此属性对于 深度学习 架构至关重要,因为它允许网络保留完整的信息流,从而能够更准确地更新模型的参数。YOLOv9 在其架构中集成了可逆函数,以减轻信息退化的风险,尤其是在更深层中,从而确保为对象检测任务保留关键数据。
对轻量级模型的影响
解决信息丢失对于轻量级模型尤为重要,这些模型通常参数不足,并且容易在正向传播过程中丢失大量信息。YOLOv9 的架构通过使用 PGI 和可逆函数,确保即使使用简化的模型,也能保留并有效利用准确对象检测所需的基本信息。
可编程梯度信息 (PGI)
PGI 是 YOLOv9 中引入的一个新概念,旨在解决信息瓶颈问题,确保在深层网络层中保留基本数据。这允许生成可靠的梯度,从而促进准确的模型更新并提高整体检测性能。
广义高效层聚合网络 (GELAN)
GELAN 代表了一种战略性的架构进步,使 YOLOv9 能够实现卓越的参数利用率和计算效率。它的设计允许灵活地集成各种计算块,使 YOLOv9 能够适应广泛的应用,而不会牺牲速度或准确性。
YOLOv9 基准测试
在使用 Ultralytics 的 YOLOv9 中进行基准测试,包括评估您训练和验证过的模型在实际场景中的性能。此过程包括:
- 性能评估: 评估模型的速度和准确性。
- 导出格式: 测试模型在不同导出格式下的表现,以确保其符合必要的标准,并在各种环境中表现良好。
- 框架支持: 在 Ultralytics YOLOv8 中提供一个全面的框架,以促进这些评估,并确保一致和可靠的结果。
通过基准测试,您可以确保您的模型不仅在受控的测试环境中表现良好,而且在实际应用中也能保持高性能。
观看: 如何使用 Ultralytics Python 包对 YOLOv9 模型进行基准测试
在 MS COCO 数据集上的性能
YOLOv9 在 COCO 数据集 上的性能体现了其在实时对象检测方面的显著进步,为各种模型尺寸设定了新的基准。表 1 全面比较了最先进的实时对象检测器,展示了 YOLOv9 的卓越效率和准确性。
性能
模型 | 尺寸 (像素) |
mAPval 50-95 |
mAPval 50 |
参数 (M) |
FLOPs (B) |
---|---|---|---|---|---|
YOLOv9t | 640 | 38.3 | 53.1 | 2.0 | 7.7 |
YOLOv9s | 640 | 46.8 | 63.4 | 7.2 | 26.7 |
YOLOv9m | 640 | 51.4 | 68.1 | 20.1 | 76.8 |
YOLOv9c | 640 | 53.0 | 70.2 | 25.5 | 102.8 |
YOLOv9e | 640 | 55.6 | 72.8 | 58.1 | 192.5 |
模型 | 尺寸 (像素) |
mAPbox 50-95 |
mAPmask 50-95 |
参数 (M) |
FLOPs (B) |
---|---|---|---|---|---|
YOLOv9c-seg | 640 | 52.4 | 42.2 | 27.9 | 159.4 |
YOLOv9e-seg | 640 | 55.1 | 44.3 | 60.5 | 248.4 |
YOLOv9 的迭代版本,从微小的 t
变体到广泛的 e
模型,不仅在准确性(mAP 指标)方面有所改进,而且在效率方面也有所提高,减少了参数数量和计算需求(FLOPs)。该表强调了 YOLOv9 提供高 精度 的能力,同时与之前的版本和竞争模型相比,保持或降低了计算开销。
相比之下,YOLOv9 表现出显著的优势:
- 轻量级模型:YOLOv9s 在参数效率和计算负载方面超越了 YOLO MS-S,同时在 AP 方面提高了 0.4∼0.6%。
- 中型到大型模型:YOLOv9m 和 YOLOv9e 在平衡模型复杂性和检测性能之间的权衡方面表现出显著的进步,在提高准确性的同时,显著减少了参数和计算量。
特别是 YOLOv9c 模型,突出了架构优化的有效性。它以比 YOLOv7 AF 少 42% 的参数和少 21% 的计算需求运行,但实现了相当的准确性,证明了 YOLOv9 显著的效率改进。此外,YOLOv9e 模型为大型模型树立了新标准,与 YOLOv8x 相比,参数减少了 15%,计算需求减少了 25%,同时 AP 增量提高了 1.7%。
这些结果展示了 YOLOv9 在模型设计方面的战略性进步,强调了其在不影响实时对象检测任务所需精度的情况下,增强了效率。该模型不仅突破了性能指标的界限,而且强调了计算效率的重要性,使其成为计算机视觉领域的一项关键发展。
结论
YOLOv9 代表了实时对象检测领域的一项关键发展,在效率、准确性和适应性方面提供了显著的改进。通过 PGI 和 GELAN 等创新解决方案应对关键挑战,YOLOv9 为未来的研究和应用树立了新的先例。随着人工智能社区的不断发展,YOLOv9 证明了协作和创新在推动技术进步方面的力量。
使用示例
此示例提供简单的 YOLOv9 训练和推理示例。有关这些和其他模式的完整文档,请参见Predict、Train、Val和Export文档页面。
示例
PyTorch pretrained *.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")
可以使用 CLI 命令直接运行模型:
# Build a YOLOv9c model from scratch and train it on the COCO8 example dataset for 100 epochs
yolo train model=yolov9c.yaml data=coco8.yaml epochs=100 imgsz=640
# Build a YOLOv9c model from scratch and run inference on the 'bus.jpg' image
yolo predict model=yolov9c.yaml source=path/to/bus.jpg
支持的任务和模式
YOLOv9 系列提供了一系列模型,每个模型都针对高性能目标检测进行了优化。这些模型满足不同的计算需求和精度要求,使其能够广泛应用于各种应用。
模型 | 文件名 | 任务 | 推理 | 验证 | 训练 | 导出 |
---|---|---|---|---|---|---|
YOLOv9 | yolov9t.pt yolov9s.pt yolov9m.pt yolov9c.pt yolov9e.pt |
目标检测 | ✅ | ✅ | ✅ | ✅ |
YOLOv9-seg | yolov9c-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 上访问代码库。我们感谢他们为推动该领域发展并使其工作能够为更广泛的社区所用而做出的努力。
常见问题
YOLOv9 为实时对象检测引入了哪些创新?
YOLOv9 引入了突破性技术,例如可编程梯度信息 (PGI) 和通用高效层聚合网络 (GELAN)。这些创新解决了深度神经网络中的信息丢失挑战,确保了高效率、准确性和适应性。PGI 在网络层之间保留了重要数据,而 GELAN 优化了参数利用率和计算效率。了解更多关于 YOLOv9 的核心创新,这些创新在 MS COCO 数据集上设定了新的基准。
与其他模型相比,YOLOv9 在 MS COCO 数据集上的表现如何?
YOLOv9 通过实现更高的准确性和效率,优于最先进的实时目标检测器。在 COCO 数据集 上,YOLOv9 模型在各种尺寸上都表现出卓越的 mAP 分数,同时保持或降低了计算开销。例如,YOLOv9c 以减少 42% 的参数和减少 21% 的计算需求实现了与 YOLOv7 AF 相当的精度。请浏览性能比较以获取详细指标。
如何使用 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 能够适应各种实时计算机视觉应用。有关更多信息,请参阅支持的任务和模式部分。