存根 YOLOv9:实时目标检测的飞跃 - Unite.AI
关注我们.

人工智能

YOLOv9:实时目标检测的飞跃

mm

发布时间

 on

物体检测 近年来取得了快速的进步,这得益于 深入学习 像 YOLO(你只看一次)这样的算法。最新的迭代, YOLOv9,与之前的版本相比,在准确性、效率和适用性方面带来了重大改进。在这篇文章中,我们将深入探讨使 YOLOv9 成为实时目标检测的最新技术的创新。

物体检测快速入门

在了解 YOLOv9 的新增功能之前,我们先简要回顾一下对象检测的工作原理。对象检测的目标是识别和定位图像中的对象,例如汽车、人或动物。这是自动驾驶汽车、监控系统和图像搜索等应用的一项关键功能。

检测器将图像作为输入并输出检测到的对象周围的边界框,每个边界框都有一个关联的类标签。 MS COCO 等流行数据集提供了数千张标记图像来训练和评估这些模型。

目标检测有两种主要方法:

  • 两级探测器 像Faster R-CNN一样,首先生成区域提案,然后对每个区域的边界进行分类和细化。它们往往更准确但更慢。
  • 单级探测器 与 YOLO 一样,一次性将模型直接应用到图像上。他们牺牲了一些准确性来换取非常快的推理时间。

YOLO 开创了单阶段方法。让我们看看它是如何演变多个版本以提高准确性和效率的。

YOLO 之前版本回顾

自 2016 年发布原始版本以来,YOLO(You Only Look Once)系列模型一直处于快速目标检测的最前沿。以下是 YOLO 在多次迭代中取得的进展的快速概述:

  • YOLOv1 提出了一个统一的模型,可以在单次传递中直接从完整图像预测边界框和类别概率。与之前的两级模型相比,这使其速度极快。
  • YOLOv2 通过使用批量归一化来提高稳定性、以各种比例和纵横比锚定框以检测多个尺寸以及各种其他优化,对原始版本进行了改进。
  • YOLOv3 添加了一个名为 Darknet-53 的新特征提取器,具有更多层和它们之间的快捷方式,进一步提高了准确性。
  • YOLOv4 结合其他对象检测器和分割模型的想法,在保持快速推理的同时提高准确性。
  • YOLOv5 在 PyTorch 中完全重写了 YOLOv4,并添加了一个名为 CSPDarknet 的新特征提取主干以及其他一些增强功能。
  • YOLOv6 继续优化架构和训练过程,在大型外部数据集上预先训练模型,以进一步提高性能。

综上所述,之前的YOLO版本通过对模型架构、训练技术和预训练的改进,实现了更高的准确率。但随着模型变得越来越大、越来越复杂,速度和效率开始受到影响。

提高效率的需要

许多应用程序需要对象检测在计算资源有限的设备上实时运行。随着模型变得越来越大、计算量越来越大,它们的部署变得不切实际。

例如,自动驾驶汽车需要使用车内处理器以高帧速率检测物体。安全摄像头需要在其自己的嵌入式硬件内的视频源上运行对象检测。电话和其他消费设备具有非常严格的功耗和热量限制。

最近的 YOLO 版本通过大量参数和乘加运算 (FLOP) 获得了高精度。但这是以速度、尺寸和功效为代价的。

例如,YOLOv5-L 需要超过 100 亿次 FLOP 来处理单个 1280×1280 图像。对于许多实时用例来说这太慢了。模型变得越来越大的趋势也增加了过度拟合的风险,并使泛化变得更加困难。

因此,为了扩大目标检测的适用性,我们需要提高效率的方法——用更少的参数和计算量获得更好的精度。让我们看看 YOLOv9 中用于应对这一挑战的技术。

YOLOv9 – 用更少的资源获得更高的准确性

YOLOv9 背后的研究人员专注于提高效率,以便在更广泛的设备上实现实时性能。他们引入了两项关键创新:

  1. 一种新的模型架构称为 通用高效层聚合网络(GELAN) 最大限度地提高准确性,同时最大限度地减少参数和失败次数。
  2. 一种训练技术称为 可编程梯度信息 (PGI) 这提供了更可靠的学习梯度,特别是对于较小的模型。

让我们看看这些进步如何帮助提高效率。

GELAN 更高效的架构

模型架构本身对于在推理过程中平衡准确性与速度和资源使用至关重要。神经网络需要足够的深度和宽度来从输入图像中捕获相关特征。但太多的层或过滤器会导致模型缓慢且臃肿。

作者专门设计了 GELAN,以从尽可能小的架构中获得最大的精度。

GELAN 使用两个堆叠在一起的主要构建块:

  • 高效层聚合块 – 这些跨多个网络分支的聚合转换可以有效地捕获多尺度特征。
  • 计算模块 – CSPNet 块有助于跨层传播信息。任何块都可以根据计算约束进行替换。

通过仔细平衡和组合这些模块,GELAN 在性能、参数和速度之间找到了最佳平衡点。相同的模块化架构可以在不同规模的模型和硬件上进行扩展或缩小。

实验表明,与之前的 YOLO 架构相比,GELAN 将更多性能融入到更小的模型中。例如,具有 7M 参数的 GELAN-Small 优于 11M 参数的 YOLOv7-Nano。具有 20M 参数的 GELAN-Medium 的性能与需要 7-35M 参数的 YOLOv40 中型模型相当。

因此,通过设计专门针对效率进行优化的参数化架构,GELAN 允许模型在资源更加受限的设备上运行得更快。接下来我们将了解 PGI 如何帮助他们更好地训练。

利用可编程梯度信息 (PGI) 进行更好的训练

模型训练对于利用有限的资源最大限度地提高准确性同样重要。 YOLOv9 作者发现了由不可靠的梯度信息引起的训练较小模型的问题。

渐变 确定模型权重在训练期间更新的程度。嘈杂或误导性的梯度会导致收敛不良。对于较小的网络,这个问题变得更加明显。

的技术 深度督导 通过引入具有损耗的附加侧分支来解决这个问题,以通过网络传播更好的梯度信号。但它往往会发生故障,并导致较小的轻量级模型出现分歧。

YOLOv9:使用可编程梯度信息学习您想学习的内容

YOLOv9:使用可编程梯度信息学习您想学习的内容 https://arxiv.org/abs/2402.13616

为了克服这个限制,YOLOv9引入了 可编程梯度信息 (PGI)。 PGI 有两个主要组成部分:

  • 辅助可逆分支 – 这些通过使用 RevCols 等块维持与输入的可逆连接来提供更清晰的梯度。
  • 多级梯度积分 – 这避免了不同侧分支干扰的分歧。它在反馈到主模型之前结合所有分支的梯度。

通过生成更可靠的梯度,PGI 可以帮助较小的模型与较大的模型一样有效地训练:

实验表明,PGI 提高了所有模型尺寸的准确性,尤其是较小的配置。例如,与基线 GELAN-Small 相比,它使 YOLOv9-Small 的 AP 分数提高了 0.1-0.4%。对于像 YOLOv9-E 这样的更深层次模型,其增益更为显着,mAP 为 55.6%。

因此,PGI 使更小、更高效的模型能够训练到以前只能通过过度参数化模型才能实现的更高准确度水平。

YOLOv9 树立了新的最先进的效率

通过将 GELAN 的架构进步与 PGI 的训练改进相结合,YOLOv9 实现了前所未有的效率和性能:

  • 与之前的 YOLO 版本相比,YOLOv9 获得 精度更高,参数减少 10-15%,计算量减少 25%。这带来了跨模型尺寸的速度和功能的重大改进。
  • YOLOv9 在以下方面超越了 YOLO-MS 和 RT-DETR 等其他实时检测器 参数效率和 FLOPs。它需要更少的资源来达到给定的性能水平。
  • 较小的 YOLOv9 模型甚至击败了 RT-DETR-X 等较大的预训练模型。尽管使用 参数减少 36%,YOLOv9-E实现 更好的 55.6% AP 通过更高效的架构。

因此,通过解决架构和训练级别的效率问题,YOLOv9 为在有限的资源内最大化性能设定了新的最先进技术。

GELAN – 优化架构以提高效率

YOLOv9 引入了一种称为通用高效层聚合网络 (GELAN) 的新架构,可在最小参数预算内最大限度地提高准确性。它建立在之前的 YOLO 模型之上,但专门针对效率优化了各种组件。

https://arxiv.org/abs/2402.13616

YOLOv9:使用可编程梯度信息学习您想学习的内容
https://arxiv.org/abs/2402.13616

CSPNet 和 ELAN 的背景

自 v5 以来的最新 YOLO 版本已经利用基于跨阶段部分网络 (CSPNet) 的主干来提高效率。 CSPNet 允许跨并行网络分支聚合特征映射,同时增加最小的开销:

这比仅仅串行堆叠层更有效,后者通常会导致冗余计算和过度参数化。

YOLOv7将CSPNet升级为高效层聚合网络(ELAN),简化了块结构:

ELAN 删除了各层之间的快捷连接,转而采用输出处的聚合节点。这进一步提高了参数和 FLOP 效率。

推广 ELAN 以实现灵活的效率

作者进一步概括了 ELAN 来创建 格兰,YOLOv9 中使用的主干。 GELAN 进行了关键修改以提高灵活性和效率:

  • 可互换的计算模块 – 以前的 ELAN 具有固定的卷积层。 GELAN 允许替换任何计算模块,例如 ResNets 或 CSPNet,从而提供更多架构选项。
  • 深度参数化 – 主分支与聚合器分支的单独块深度简化了资源使用的微调。
  • 跨配置性能稳定 – GELAN 保持不同块类型和深度的准确性,允许灵活的缩放。

这些变化使 GELAN 成为一个强大但可配置的骨干网,以最大限度地提高效率:

在实验中,GELAN 模型在每个参数的准确性方面始终优于先前的 YOLO 架构:

  • GELAN-Small 7M 参数击败 YOLOv7-Nano 11M 参数
  • GELAN-Medium 匹配较重的 YOLOv7 中型型号

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

PGI – 改进所有模型尺寸的训练

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

不可靠梯度的问题

在训练期间,损失函数将模型输出与地面真实标签进行比较,并计算误差梯度以更新参数。 嘈杂或误导性的梯度 导致收敛性和效率较差。

非常深的网络通过以下方式加剧了这种情况 信息瓶颈 – 来自深层的梯度被丢失或压缩的信号破坏。

深度监管 通过引入具有损耗的辅助侧分支来提供更清晰的梯度来提供帮助。但常常 较小型号的故障,造成不同分支之间的干扰和分歧。

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

引入可编程梯度信息 (PGI)

为了解决不可靠的梯度问题,YOLOv9 提出了可编程梯度信息(PGI)。 PGI 有两个主要组件旨在提高梯度质量:

1. 辅助可逆分支

其他分支机构提供 可逆连接 使用 RevCols 等块返回输入。这保持了干净的梯度,避免了信息瓶颈。

2. 多级梯度融合

融合块在反馈到主模型之前聚合来自所有分支的梯度。这可以防止跨分支的分歧。

通过生成更可靠的梯度,PGI 提高了所有模型大小的训练收敛性和效率:

  • 轻量化型号 受益于他们以前无法使用的深度监督
  • 较大型号 获得更清晰的梯度,从而实现更好的泛化

实验表明,与基线 GELAN 相比,PGI 提高了小型和大型 YOLOv9 配置的准确性:

  • YOLOv0.1-Small +0.4-9% AP
  • 对于较大的 YOLOv0.5 模型,+0.6-9% AP

因此,PGI 的可编程梯度使大大小小的模型能够更有效地训练。

YOLOv9 创下了最先进的新精度

通过结合 GELAN 的架构改进和 PGI 的训练增强功能,YOLOv9 实现了实时目标检测的新的最先进的结果。

COCO 数据集上的实验表明 YOLOv9 在准确性和效率方面超越了之前的 YOLO 版本以及 YOLO-MS 等其他实时检测器:

一些关键亮点:

  • YOLOv9-Small 比 YOLO-MS-Small 少了 10% 的参数和计算量
  • YOLOv9-Medium 使用不到一半的资源来匹配较重的 YOLOv7 模型
  • YOLOv9-Large 的性能优于 YOLOv8-X,参数减少了 15%,FLOP 减少了 25%

值得注意的是,较小的 YOLOv9 模型甚至超过了使用 RT-DETR-X 等预训练的其他检测器的较重模型。尽管参数减少了 4 倍,YOLOv9-E 的准确度仍优于 RT-DETR-X。

这些结果证明了 YOLOv9 的卓越效率。这些改进可以在更真实的用例中实现高精度物体检测。

YOLOv9 升级的关键要点

让我们快速回顾一下实现 YOLOv9 最先进性能的一些关键升级和创新:

  • GELAN优化架构 – 通过灵活的聚合块提高参数效率。允许针对不同目标缩放模型。
  • 可编程梯度信息 – 通过可逆连接和融合提供可靠的梯度。改进跨模型大小的训练。
  • 用更少的资源获得更高的准确性 – 与 YOLOv10 相比,参数和计算量减少了 15-8%,且精度更高。实现更有效的推理。
  • 不同型号尺寸的卓越结果 – 为轻型、中型和大型模型配置设定了新的最先进技术。优于经过大量预训练的模型。
  • 扩大适用性 – 更高的效率拓宽了可行的用例,例如边缘设备上的实时检测。

通过直接解决准确性、效率和适用性问题,YOLOv9 推动了目标检测的发展,以满足各种现实世界的需求。这些升级为这一关键计算机视觉功能的未来创新奠定了坚实的基础。

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