人工智能
YOLOv9:实时目标检测的飞跃
目标检测 在最近几年经历了快速的发展,得益于像 深度学习 算法如 YOLO(You Only Look Once)。最新的版本 YOLOv9 为准确率、效率和适用性带来了重大改进。在本文中,我们将深入探讨使 YOLOv9 成为实时目标检测新状态的创新。
目标检测快速入门
在深入探讨 YOLOv9 的新特性之前,让我们简要回顾一下目标检测的工作原理。目标检测的目标是识别和定位图像中的物体,如汽车、人或动物。这是自驾车、监控系统和图像搜索等应用程序的关键功能。
检测器将图像作为输入,并输出带有相关类标签的边界框。流行的数据集如 MS COCO 提供了成千上万的标记图像来训练和评估这些模型。
目标检测有两种主要方法:
- 两阶段检测器 如 Faster R-CNN 首先生成区域提议,然后对每个区域进行分类和边界精化。它们往往更准确,但速度较慢。
- 单阶段检测器 如 YOLO 将模型直接应用于图像的一次传递中。它们用一些准确率换取非常快的推理时间。
YOLO 开创了单阶段方法。让我们看看它如何在多个版本中演变以提高准确率和效率。
之前的 YOLO 版本回顾
YOLO(You Only Look Once)模型家族自 2016 年发布原始版本以来,一直处于快速目标检测的前沿。以下是 YOLO 多个版本的快速概述:
- YOLOv1 提出了一种统一模型,可以直接从完整图像中预测边界框和类概率。这使得它与之前的两阶段模型相比非常快。
- YOLOv2 通过使用批量归一化来提高稳定性、使用不同尺度和长宽比的锚框来检测多个大小以及其他优化来改进原始版本。
- YOLOv3 添加了一个新的特征提取器称为 Darknet-53,具有更多层和之间的捷径,进一步提高了准确率。
- YOLOv4 结合了其他目标检测器和分割模型的思想,将准确率推得更高,同时保持快速推理。
- YOLOv5 完全用 PyTorch 重写了 YOLOv4,并添加了一个新的特征提取骨干称为 CSPDarknet,以及其他几项增强。
- YOLOv6 继续优化架构和训练过程,使用大型外部数据集预训练模型以进一步提高性能。
因此,之前的 YOLO 版本通过对模型架构、训练技术和预训练的改进实现了更高的准确率。但是,随着模型变得更大、更复杂,速度和效率开始受到影响。
需要更好的效率
许多应用程序需要目标检测在具有有限计算资源的设备上实时运行。随着模型变得更大、计算更密集,它们变得不切实际地部署。
例如,自动驾驶汽车需要在车辆内的处理器上以高帧率检测物体。安全摄像头需要在其自己的嵌入式硬件上运行目标检测。手机和其他消费设备具有非常严格的功率和热约束。
最近的 YOLO 版本通过大量参数和乘加运算(FLOPs)获得高准确率。但这以速度、大小和功率效率为代价。
例如,YOLOv5-L 需要超过 100 亿 FLOPs 来处理单个 1280×1280 图像。这对于许多实时用例来说太慢了。更大的模型的趋势也增加了过拟合的风险,并使其更难推广。
因此,为了扩大目标检测的适用性,我们需要改进效率的方法——用更少的参数和计算获得更好的准确率。让我们看看 YOLOv9 中使用的技术来解决这个挑战。
YOLOv9 – 准确率和资源的改进
YOLOv9 的研究人员专注于提高效率,以实现更广泛设备上的实时性能。他们引入了两项关键创新:
- 一种新的模型架构称为 通用高效层聚合网络(GELAN),它最大限度地提高了准确率,同时最小化了参数和 FLOPs。
- 一种训练技术称为 可编程梯度信息(PGI),它提供了更可靠的学习梯度,尤其适用于较小的模型。
让我们看看每个进步如何帮助提高效率。
使用 GELAN 的更高效架构
模型架构本身对于在推理时间内平衡准确率和速度以及资源使用至关重要。神经网络需要足够的深度和宽度来捕获输入图像中的相关特征。但是,太多的层或过滤器会导致模型变慢和臃肿。
作者专门为 GELAN 设计了一个模型架构,以便在最小的可能架构中挤出最大限度的准确率。
GELAN 使用两个主要的构建块:
- 高效层聚合块 – 这些块跨多个网络分支聚合变换,以高效地捕获多尺度特征。
- 计算块 – CSPNet 块有助于跨层传播信息。任何块都可以根据计算约束进行替换。
通过仔细平衡和组合这些块,GELAN 在性能、参数和速度之间找到一个最佳点。相同的模块化架构可以根据不同的模型大小和硬件进行扩大或缩小。
实验表明,GELAN 将更多性能整合到较小的模型中,相比之前的 YOLO 架构。例如,GELAN-Small 具有 700 万个参数,超越了 YOLOv7-Nano 的 1100 万个参数。而 GELAN-Medium 具有 2000 万个参数,其性能与 YOLOv7 中型模型相当,后者需要 3500-4000 万个参数。
因此,通过设计一个专门针对效率优化的参数化架构,GELAN 允许模型在更多资源受限的设备上运行得更快。接下来我们将看到 PGI 如何帮助它们更好地训练。
使用可编程梯度信息(PGI)的更好训练
模型训练对于最大限度地提高准确率至关重要。YOLOv9 的作者确定了训练较小模型时由于不可靠的梯度信息而导致的问题。
梯度 确定了模型的权重在训练期间更新的程度。噪声或误导性的梯度会导致收敛不良。这一问题在较小的网络中更加明显。
深度监督技术通过引入具有损失的附加侧分支来解决这个问题,从而通过网络传播更好的梯度信号。但是,它往往会在较小的轻量级模型中崩溃并导致发散。
为了克服这一限制,YOLOv9 引入了 可编程梯度信息(PGI)。PGI 有两个主要组件:
- 辅助可逆分支 – 这些分支提供更干净的梯度,通过像 RevCols 这样的块保持输入的可逆连接。
- 多级梯度集成 – 这避免了不同分支之间的发散。它在将梯度反馈到主模型之前从所有分支中组合梯度。
通过生成更可靠的梯度,PGI 有助于较小的模型训练得更好:
实验表明,PGI 改进了所有模型大小的准确率,尤其是较小的配置。例如,它提高了 YOLOv9-Small 的 AP 分数 0.1-0.4%,相比基线 GELAN-Small。对于更深的模型,如 YOLOv9-E,收益更为显著,达到 55.6% 的 mAP。
因此,PGI 启用了较小、更高效的模型,以以前只能通过过参数化模型才能实现的更高准确率水平进行训练。
YOLOv9 为效率设定了新的状态
通过结合 GELAN 的架构进步和 PGI 的训练改进,YOLOv9 实现了前所未有的效率和性能:
- 与之前的 YOLO 版本相比,YOLOv9 获得了 更好的准确率,参数和计算量减少了 10-15%。这带来了速度和能力的显著改进,适用于不同模型大小。
- YOLOv9 在参数效率和 FLOPs 方面超越了其他实时检测器,如 YOLO-MS 和 RT-DETR。它需要更少的资源才能达到给定的性能水平。
- 较小的 YOLOv9 模型甚至击败了更大的预训练模型,如 RT-DETR-X。尽管使用了 36% 更少的参数,但 YOLOv9-E 仍然实现了 55.6% 的 AP,这得益于更高效的架构。
因此,通过在架构和训练级别解决效率问题,YOLOv9 为最大化性能而设定了新的状态。
GELAN – 优化的架构,用于效率
YOLOv9 引入了一种新的架构,称为通用高效层聚合网络(GELAN),它最大限度地提高了准确率,同时最小化了参数预算。它建立在之前的 YOLO 模型之上,但优化了各种组件以实现效率。
CSPNet 和 ELAN 的背景
最近的 YOLO 版本自第 5 版以来一直使用基于跨阶段部分网络(CSPNet)的骨干,以提高效率。CSPNet 允许在网络的平行分支之间聚合特征图,同时添加最小的开销:
这比简单地串联层更高效,后者往往导致冗余计算和过参数化。
YOLOv7 将 CSPNet 升级为高效层聚合网络(ELAN),简化了块结构:
ELAN 删除了层之间的捷径连接,取而代之的是输出的一个聚合节点。这进一步提高了参数和 FLOPs 的效率。
ELAN 的泛化,用于灵活的效率
作者进一步将 ELAN 泛化为 GELAN,它是 YOLOv9 中使用的骨干。GELAN 对架构进行了以下关键修改,以提高灵活性和效率:
- 可交换的计算块 – 之前的 ELAN 具有固定的卷积层。GELAN 允许替换任何计算块,如 ResNets 或 CSPNet,提供更多的架构选项。
- 深度参数化 – 主分支和聚合器分支的单独块深度简化了资源使用的细化。
- 稳定的性能,适用于不同配置 – GELAN 在不同块类型和深度下保持准确率,允许灵活的缩放。
这些更改使 GELAN 成为一个强大且可配置的骨干,以最大限度地提高效率:
实验表明,GELAN 模型在准确率与参数方面始终优于之前的 YOLO 架构:
- GELAN-Small(700 万参数)击败了 YOLOv7-Nano(1100 万参数)
- GELAN-Medium(2000 万参数)匹配了更重的 YOLOv7 中型模型
因此,GELAN 提供了一个优化的骨干,以便在不同的效率目标之间缩放 YOLO。接下来我们将看到 PGI 如何帮助它们更好地训练。
PGI – 所有模型大小的改进训练
虽然架构选择会影响推理时间的效率,但训练过程也会影响模型的资源使用。YOLOv9 使用了一种称为可编程梯度信息(PGI)的新技术,以提高不同模型大小和复杂度的训练。
不可靠梯度的问题
在训练期间,损失函数将模型输出与真实标签进行比较,并计算错误梯度以更新参数。 噪声或误导性的梯度 会导致收敛不良和效率低下。
非常深的网络会通过 信息瓶颈 加剧这一问题 – 来自深层的梯度被丢失或压缩的信号所破坏。
深度监督 通过引入具有损失的附加侧分支来提供更干净的梯度。然而,它通常会 在较小的模型中崩溃,导致不同分支之间的干扰和发散。
因此,我们需要一种可靠的梯度方法,适用于所有模型大小,尤其是较小的模型。
引入可编程梯度信息(PGI)
为了解决不可靠的梯度问题,YOLOv9 提出了可编程梯度信息(PGI)。PGI 有两个主要组件,旨在提高梯度质量:
1. 辅助可逆分支
附加分支提供 可逆连接 回到输入,使用像 RevCols 这样的块。这保持了干净的梯度,避免了信息瓶颈。
2. 多级梯度集成
一个融合块在将梯度反馈到主模型之前从所有分支中聚合梯度。这防止了分支之间的发散。
通过生成更可靠的梯度,PGI 改进了所有模型大小的训练收敛和效率:
- 轻量级模型 从之前无法使用的深度监督中受益
- 更大的模型 获得了更干净的梯度,实现了更好的泛化
实验表明,PGI 提高了小型和大型 YOLOv9 配置的准确率,相比基线 GELAN:
- +0.1-0.4% AP,适用于 YOLOv9-Small
- +0.5-0.6% AP,适用于较大的 YOLOv9 模型
因此,PGI 的可编程梯度使得大型和小型模型都能更高效地训练。
YOLOv9 为准确率设定了新的状态
通过结合 GELAN 的架构改进和 PGI 的训练增强,YOLOv9 实现了实时目标检测的新状态结果。
在 COCO 数据集上的实验表明,YOLOv9 超越了之前的 YOLO 版本,以及其他实时检测器,如 YOLO-MS,在准确率和效率方面:
一些关键亮点:
- YOLOv9-Small 超越了 YOLO-MS-Small,参数和计算量减少了 10%
- YOLOv9-Medium 匹配了更重的 YOLOv7 模型,使用的资源不到一半
- YOLOv9-Large 超越了 YOLOv8-X,参数减少了 15%,FLOPs 减少了 25%
值得注意的是,较小的 YOLOv9 模型甚至超越了其他检测器的更重的模型,这些模型使用了预训练,如 RT-DETR-X。尽管参数减少了 4 倍,但 YOLOv9-E 在准确率方面超越了 RT-DETR-X。
这些结果表明了 YOLOv9 的优越效率。这些改进使得高准确率的目标检测能够在更多的实际应用场景中实现。
YOLOv9 升级的关键要点
让我们快速回顾一下使 YOLOv9 实现新状态性能的一些关键升级和创新:
- 优化的 GELAN 架构 – 通过灵活的聚合块提高参数效率。允许根据不同目标对模型进行缩放。
- 可编程梯度信息 – 通过可逆连接和融合提供可靠的梯度。提高了所有模型大小的训练效率。
- 更好的准确率,使用更少的资源 – 参数和计算量减少了 10-15%,相比 YOLOv8,准确率提高。使得推理更高效。
- 跨模型大小的卓越结果 – 为轻量级、中型和大型模型配置设定了新的状态。超越了重型预训练模型。
- 扩大的适用性 – 更高的效率扩大了可行的应用场景,如边缘设备上的实时检测。
通过直接解决准确率、效率和适用性,YOLOv9 将目标检测推进到满足多样化的实际需求。这些升级为未来在这一关键计算机视觉能力方面的创新提供了坚实的基础。














