Connect with us

人工智能

YOLOv9:实时目标检测的飞跃

mm

目标检测 在近年来得到了快速的发展,得益于像 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 的研究人员专注于提高效率,以实现更广泛的设备上的实时性能。他们引入了两项关键创新:

  1. 一种名为 通用高效层聚合网络(GELAN) 的新模型架构,它最大限度地提高了准确性,同时最小化了参数和 FLOPs。
  2. 一种名为 可编程梯度信息(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% 更少的参数和 25% 更少的计算。这带来了速度和能力的显著改进,适用于不同模型大小。
  • YOLOv9 在参数效率和 FLOPs 方面超越了其他实时检测器,如 YOLO-MS 和 RT-DETR。它需要更少的资源才能达到一定的性能水平。
  • 较小的 YOLOv9 模型甚至超越了较大的预训练模型,如 RT-DETR-X。尽管使用了 36% 更少的参数,但 YOLOv9-E 仍然实现了 更好的 55.6% 的 AP,这得益于更高效的架构。

因此,通过在架构和训练级别解决效率问题,YOLOv9 为实时目标检测设定了新的状态。

GELAN – 优化的架构,用于效率

YOLOv9 引入了一种名为 通用高效层聚合网络(GELAN) 的新架构,它在最小的参数预算内最大化准确性。它建立在之前的 YOLO 模型之上,但优化了各种组件以实现效率。

CSPNet 和 ELAN 的背景

自 YOLOv5 以来,最近的 YOLO 版本使用基于跨阶段部分网络(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 的性能与 YOLOv7 中型模型相当

因此,GELAN 提供了一个优化的骨干来扩展 YOLOv9 跨不同的效率目标。接下来,我们将看到 PGI 如何帮助它们更好地训练。

PGI – 所有模型大小的改进训练

虽然架构选择会影响推理时的效率,但训练过程也会影响模型的资源使用。YOLOv9 使用了一种名为 可编程梯度信息(PGI) 的新技术来提高不同模型大小和复杂度的训练。

不可靠梯度的问题

在训练期间,损失函数将模型输出与ground truth 标签进行比较,并计算误差梯度以更新参数。 噪声或误导性梯度 导致收敛不良和效率低下。

非常深的网络通过 信息瓶颈 加剧了这个问题 – 来自深层的梯度被丢失或压缩的信号破坏。

深度监督 通过引入具有损失的附加侧分支来提供更干净的梯度。但是,它经常 对较小的模型失效,导致不同分支之间的干扰和发散。

因此,我们需要一种方法来提供可靠的梯度,这种方法适用于所有模型大小,尤其是较小的模型。

引入可编程梯度信息(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% 更少的参数和 25% 更少的 FLOPs

值得注意的是,较小的 YOLOv9 模型甚至超越了其他检测器中较重的模型,这些模型使用了预训练,如 RT-DETR-X。尽管参数数量少 4 倍,但 YOLOv9-E 在准确性方面超越了 RT-DETR-X。

这些结果表明了 YOLOv9 的卓越效率。改进使高准确性目标检测能够在更多现实世界的用例中实现。

YOLOv9 升级的关键要点

让我们快速回顾一下使 YOLOv9 实现新状态的性能的关键升级和创新:

  • 优化的 GELAN 架构 – 通过灵活的聚合块提高参数效率。允许根据不同的目标缩放模型。
  • 可编程梯度信息 – 通过可逆连接和聚合提供可靠的梯度。提高了所有模型大小的训练效率。
  • 更好的准确性,使用更少的资源 – 减少了 10-15% 的参数和计算,相比 YOLOv8,实现了更好的准确性。这带来了显著的速度和能力改进,适用于不同模型大小。
  • 跨所有模型大小的更好的结果 – 为轻量级、中型和大型模型配置设定了新的状态。超越了预训练的较重模型。
  • 扩大的适用性 – 更高的效率扩大了可行的用例,例如边缘设备上的实时检测。

通过直接解决准确性、效率和适用性的问题,YOLOv9 推动了目标检测向前发展,以满足多样化的现实世界需求。升级为未来在这一关键计算机视觉能力方面的创新提供了坚实的基础。

我过去五年一直沉浸在令人着迷的机器学习和深度学习世界中。我的热情和专业知识使我能够为超过50个不同的软件工程项目做出贡献,特别注重人工智能/机器学习。我的持续好奇心也使我对自然语言处理产生了兴趣,这是一个我渴望进一步探索的领域。