当前位置:   article > 正文

YOLOV10原理解析,实时端到端目标检测_yolov10详解

yolov10详解

YOLO目标检测创新改进与实战案例专栏

专栏目录: YOLO有效改进系列及项目实战目录 包含卷积,主干 注意力,检测头等创新机制 以及 各种目标检测分割项目实战案例

专栏链接: YOLO基础解析+创新改进+实战案例

这是YOLO模型的第十个版本。YOLO在计算机视觉领域中一直是最重要的模型之一,YOLO是最早的视觉模型之一,并被应用于无数场景。每个版本的YOLO都引入了一些新的技巧,这些技巧不仅适用于YOLO本身,也适用于整个深度学习架构的设计。例如,YOLOv7深入研究了如何更好地进行数据增强,YOLOv9引入了可逆架构等等。那么,YOLOv10有什么新特点呢?YOLOv10 提高了推理速度,尽管取得了进步,但迄今为止,YOLO 仍然是一个相当沉重的模型,通常需要 GPU 。

前言

近年来,YOLO模型由于其在计算成本和检测性能之间的有效平衡,已成为实时目标检测领域的主流范式。研究人员在YOLO的架构设计、优化目标、数据增强策略等方面进行了深入探索,取得了显著进展。然而,YOLO依赖于非极大值抑制(NMS)进行后处理,这限制了YOLO模型的端到端部署,并对推理延迟产生不利影响。此外,YOLO各组件的设计缺乏全面和深入的检验,导致明显的计算冗余,限制了模型的能力。这使得效率不尽如人意,且有很大的性能提升潜力。

所有的YOLO基本上都是由三部分组成的网络。Backbone, Neck, and Head

  • Backbone 是一种深度学习架构,主要起到特征提取器的作用。所有的 Backbone 模型本质上都是分类模型。
  • Neck 是一组特殊模块中的一部分,它基本上从 Backbone 的不同阶段收集特征图。简单来说,它是一个特征聚合器。
  • Head 也称为目标检测器,它基本上是找到可能存在目标的区域,但并不会告诉我们该区域中的具体目标是什么。我们有两阶段检测器和单阶段检测器,这些检测器进一步细分为基于锚框的检测器和无锚框检测器。

YOLOv10

论文地址:https://arxiv.org/pdf/2405.14458

代码地址:https://github.com/THU-MIG/yolov10

概念

YOLOv10 是清华大学研究人员在 UltralyticsPython 清华大学的研究人员在 YOLOv10软件包的基础上,引入了一种新的实时目标检测方法,解决了YOLO 以前版本在后处理和模型架构方面的不足。通过消除非最大抑制(NMS)和优化各种模型组件,YOLOv10 在显著降低计算开销的同时实现了最先进的性能。大量实验证明,YOLOv10 在多个模型尺度上实现了卓越的精度-延迟权衡。

YOLOv10 的结构建立在以前YOLO 模型的基础上,模型架构由以下部分组成:

  1. 主干网YOLOv10 中的主干网负责特征提取,它使用了增强版的 CSPNet(跨阶段部分网络),以改善梯度流并减少计算冗余。
  2. 颈部颈部设计用于汇聚不同尺度的特征,并将其传递到头部。它包括 PAN(路径聚合网络)层,可实现有效的多尺度特征融合。
  3. 一对多头:在训练过程中为每个对象生成多个预测,以提供丰富的监督信号并提高学习准确性。
  4. 一对一磁头:在推理过程中为每个对象生成一个最佳预测,无需 NMS,从而减少延迟并提高效率。

创新

  1. 无 NMS 训练:利用一致的双重分配来消除对 NMS 的需求,从而减少推理延迟。
  2. 整体模型设计:从效率和准确性的角度全面优化各种组件,包括轻量级分类头、空间通道去耦向下采样和等级引导块设计。
  3. 增强的模型功能:纳入大核卷积和部分自注意模块,在不增加大量计算成本的情况下提高性能。

模型

YOLOv10 有多种模型,可满足不同的应用需求:

  • YOLOv10-N:用于资源极其有限环境的纳米版本。
  • YOLOv10-S:兼顾速度和精度的小型版本。
  • YOLOv10-M:通用中型版本。
  • YOLOv10-B:平衡型,宽度增加,精度更高。
  • YOLOv10-L:大型版本,精度更高,但计算资源增加。
  • YOLOv10-X:超大型版本可实现最高精度和性能。

移除非最大抑制(NMS)

输入:一组候选的边界框 B,相应的置信度得分 S,以及重叠阈值 N。

输出:一组过滤后的候选 D。

算法:

  • 选择置信度得分最高的候选,将其从 B 中移除并添加到最终的候选列表 D 中。(初始时 D 为空)。
  • 现在将这个候选与所有其他候选进行比较——计算这个候选与每个其他候选的交并比(IOU)。如果 IOU 大于阈值 N,则从 B 中移除该候选。
  • 再次从 B 中剩余的候选中选出置信度最高的候选,将其从 B 中移除并加入到 D 中。
  • 再次计算这个候选与 B 中所有候选的 IOU,并淘汰那些 IOU 高于阈值的边界框。
  • 重复此过程,直到 B 中没有更多的候选为止。

image-20240527165213785

YOLO 使用 IOU(交并比)指标来衡量两个候选框之间的重叠程度。

image-20240527165503487

现在我们已经了解了 NMS(非极大值抑制),让我们看看 YOLOv10 是如何处理的。为每个检测到的目标计算 NMS 会增加相当大的开销,特别是在实时设置中。YOLOv10 完全移除了 NMS 的概念,这是第一个这样做的 YOLO 版本。

双重标签分配

与一对多分配不同,一对一匹配只将每个预测分配给一个真实值,从而避免了 NMS 后处理。然而,这会导致较弱的监督,进而导致次优的准确性和收敛速度。

YOLOv10 引入了双标签分配,结合了一对一和一对多的优势。如下面的图所示,它为 YOLOs 引入了另一个一对一的 Head。

  • 一对多 Head:这个 Head 保留了原始结构和优化目标,受益于密集的监督。
  • 一对一 Head:这个 Head 使用一对一匹配来获得标签分配,类似于匈牙利匹配方法,但训练时间更短。

这两个 Head 同时训练,使模型的 Backbone 和 Neck 可以利用一对多分配的全面监督,从而提高模型的学习能力和准确性。

在推理过程中,一对多 Head 会被丢弃(类似于深度监督)。仅使用一对一 Head 来进行预测。这种方法确保模型可以端到端部署而不会增加推理时的计算成本。

image-20240527165704106

空间信道解耦向下采样

image-20240527165811763

看看上面的图,这是一个标准的VGG16网络,它在空间(宽度和高度)和通道上对特征进行缩放。这是在任何类型的视觉模型中,对模型进行宽度、高度和通道的缩放是标准做法。

但是,为什么我们需要进行缩放呢?为什么我们不能直接添加相同大小和分辨率的层来进行预测呢?有两个原因:首先,使用相同大小的层会导致参数数量的大幅增加(更多的参数意味着更多的内存需求);其次,我们希望在不同尺度上读取特征,以便在数据流中发现更多隐藏的模式(可以将卷积层的分辨率类比为显微镜的分辨率)。虽然可以选择这些缩放参数,但模型的性能不会得到优化。正确的缩放是模型成功的关键。

YOLO模型通常利用3×3的标准卷积,步幅为2,同时实现空间降采样 (从 H × W 到 H / 2 × W / 2 ) (从H × W到H/2 × W/2) (从H×WH/2×W/2和通道转换 (从 C 到 2 C ) (从C到2C) (从C2C

这引入了不可忽略的计算成本 ( O ( 9 2 H W C 2 ) ) (O\left(\frac{9}{2}HW C^2\right)) (O(29HWC2)) 和参数数量 ( O ( 18 C 2 ) ) (O(18C^2)) (O(18C2))

相反,YOLOv10提出了解耦空间降采样和通道增加操作,从而实现更高效的降采样。具体而言,它首先利用逐点卷积来调节通道维度,然后利用深度卷积来执行空间降采样。

简而言之,首先我们使用逐点卷积(1x1卷积滤波器)来增加通道数量,然后使用深度卷积来减少空间维度。相比于同时减少空间维度和增加通道数量的单一卷积层,解耦的方式在实现相同效果的同时减少了计算量。

image-20240527170037705

解耦将计算成本降低到 ( O ( 2 H W C 2 + 9 2 H W C ) ) (O(2HW C^2 + \frac{9}{2}HW C)) (O(2HWC2+29HWC)) 并将参数数量降低到 (O(2C^2 + 18C))$。同时,它最大限度地保留了降采样过程中的信息,从而在降低延迟的同时实现了具有竞争力的性能。

排序引导块设计(梯级引导程序块设计

YOLO模型通常在所有阶段使用相同的基本构建块,这会导致瓶颈块的出现。为了彻底检查这种同质化设计,YOLOv10利用内在秩来分析每个阶段的冗余性。

具体来说,它计算每个阶段最后一个基本块中的最后一个卷积层的数值秩,统计大于某个阈值的奇异值数量。

image-20240527170226605

上图展示了YOLOv8的结果,表明深层阶段和大型模型更容易出现冗余。这个观察结果表明,仅仅在所有阶段应用相同的块设计对于最佳的容量-效率权衡是次优的。

为了解决这个问题,YOLOv10提出了一种秩引导的块设计方案,旨在通过紧凑的架构设计减少被证明冗余的阶段的复杂性。

研究人员提出了一种紧凑的倒置块(CIB)结构,它采用低成本的深度卷积进行空间混合,并使用高效的逐点卷积进行通道混合,如上图所示。它可以作为高效的基本构建块,例如嵌入到ELAN结构中。ELAN的详细解释在YOLOv9的说明中。

YOLOv10倡导一种秩引导的块分配策略,以在保持竞争力的容量的同时实现最佳效率。具体而言,给定一个模型,它根据不同阶段的内在秩按升序排序。

研究人员进一步检查了在领先阶段用CIB替换基本块的性能变化。如果与给定模型相比没有性能下降,他们继续替换下一个阶段,否则停止这个过程。最终,他们在不同阶段和模型尺度上实现了自适应的紧凑块设计,在不损失性能的情况下提高了效率。

轻量级分类头

分类头

  • 目标识别:分类头负责确定每个检测到的目标在给定边界框内的类别。例如,它可能将目标分类为“人”、“车”、“狗”等。
  • 类别概率估计:它计算检测到的目标属于每个可能类别的概率。这涉及应用softmax函数,将概率分布到多个类别上,确保概率总和为1。

回归头

  • 边界框预测:回归头负责预测包含检测到的目标的边界框的精确坐标。这包括预测每个边界框的中心坐标(x, y)、宽度和高度。
  • 边框置信度得分:它还输出每个边界框的置信度得分,指示该框内包含目标的可能性。这个得分有助于在后处理过程中过滤掉低置信度的预测。

image-20240527170527943

研究人员发现,回归头对于YOLO模型的性能更为重要。因此,我们可以减少分类头的开销,而不用过于担心性能受到较大影响。因此,他们采用了轻量级的分类头架构,该架构由两个核大小为3×3的深度可分离卷积和一个1×1卷积组成。

精度驱动的模型设计

大核卷积

采用大核深度卷积是一种扩大感受野并增强模型能力的有效方法。然而,仅仅在所有阶段使用它们可能会对用于检测小目标的浅层特征引入污染,同时在高分辨率阶段引入显著的I/O开销和延迟。

image-20240527170636441

YOLOv10建议在深层阶段的CIB中利用大核深度卷积。具体来说,他们将CIB中第二个3×3深度卷积的核大小增加到7×7。

此外,他们采用结构重参数化技术,引入另一个3×3深度卷积分支,以缓解优化问题而不增加推理开销。此外,随着模型规模的增加,其感受野自然扩展,使用大核卷积的益处逐渐减小。因此,他们仅在小模型规模中采用大核卷积。

局部自注意力 (PSA)

自注意力是整个AI领域中最知名的算法之一。然而,它具有高计算复杂度和内存占用。YOLOv10提出了一种高效的局部自注意力(PSA)模块设计,如下图所示。

image-20240527170801615

首先,我们在1×1卷积后将特征在通道上划分为两部分。我们仅将其中一部分输入到由多头自注意力模块(MHSA)和前馈网络(FFN)组成的N_PSA块中。然后将这两部分连接起来,并通过1×1卷积融合。

PSA仅在分辨率最低的第4阶段后放置,避免了自注意力平方计算复杂度带来的过度开销。通过这种方式,可以以低计算成本将全局表示学习能力引入到YOLO模型中,从而显著增强模型的能力并提升性能。

关于结果,没有太多需要说的,只需看看基准测试就能明白。

image-20240527170824695

image-20240527170834230

我们可以清楚地看到,YOLOv10在推理速度方面提供了巨大的提升。YOLOv10 在准确性和速度上都优于其前身和其他最先进的模型。例如,YOLOv10-S(较小的变体)比具有相似性能的 RT-DETR-R18 快 1.8×并且使用的参数更少 2.8×。与 YOLOv9-C 相比,YOLOv10-B(平衡变体)在保持相同性能水平的同时,延迟降低了 46%,参数数量减少了 25%。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/人工智能uu/article/detail/837314
推荐阅读
相关标签