【论文阅读】 YOLOv10: Real-Time End-to-End Object Detection

文章目录

  • Abstract
  • Introduction
  • Related Work
  • Methodology
    • Consistent Dual Assignments for NMS-free Training (无NMS训练的一致性双重任务分配)
    • Holistic Efficiency-Accuracy Driven Model Design (效率-精度驱动的整体模型设计)
  • Experiment
  • Conclusion

YOLOv10:实时端到端的目标检测
GitHub
paper

单位:清华大学

Abstract

在过去几年中,YOLOs 因其在计算成本和检测性能之间的有效平衡而成为实时目标检测领域的主流模式。研究人员对 YOLOs 的架构设计、优化目标、数据增强策略等进行了探索,并取得了显著进展。然而,后处理对非最大抑制(NMS)的依赖阻碍了 YOLO 的端到端部署,并对推理延迟产生了不利影响。此外,YOLOs 中各种组件的设计缺乏全面彻底的检查,导致明显的计算冗余,限制了模型的能力。这使得效率不尽如人意,性能还有很大的提升空间。在这项工作中,我们旨在从后处理和模型架构两方面进一步推进 YOLO 的性能-效率边界。为此,我们首先提出了用于 YOLOs 无 NMS 训练的一致双分配,它同时带来了有竞争力的性能和较低的推理延迟。此外,我们还为 YOLOs 引入了效率-精度驱动的整体模型设计策略。我们从效率和准确性两个角度全面优化了 YOLO 的各个组成部分,从而大大降低了计算开销,提高了能力。我们努力的成果是用于实时端到端目标检测的新一代 YOLO 系列,被称为 YOLOv10。大量实验表明,YOLOv10 在各种模型规模下都实现了最先进的性能和效率。例如,在 COCO 上相似的 AP 下,我们的 YOLOv10-S 比 RT-DETR-R18 快 1.8 倍,同时参数和 FLOPs 数量少 2.8 倍。与 YOLOv9-C 相比,在性能相同的情况下,YOLOv10-B 的延迟减少了 46%,参数减少了 25%。

Introduction

实时目标检测一直是计算机视觉领域的研究热点。
YOLOs 的检测流程由两部分组成:**模型前向处理和 NMS 后处理。**然而,这两部分仍存在缺陷,导致精度-延迟边界不理想。

具体来说,YOLO 在训练过程中通常采用一对多的标签分配策略,即一个地面实况对象对应多个正样本。尽管这种方法性能优越,但在推理过程中,NMS 必须选择最佳的正向预测。这就降低了推理速度,使性能对 NMS 的超参数非常敏感,从而阻碍了 YOLOs 实现最佳端到端部署。解决这一问题的方法之一是采用最近推出的端到端 DETR 架构 。例如,RT-DETR 提出了一种高效的混合编码器和不确定性最小的查询选择,将 DETR 推向了实时应用领域。然而,部署 DETR 本身的复杂性阻碍了它在准确性和速度之间达到最佳平衡的能力。另一条思路是探索基于 CNN 的端到端检测,通常利用一对一分配策略来抑制冗余预测 。然而,这些方法通常会引入额外的推理开销,或实现次优性能。

此外,模型结构设计仍然是 YOLOs 面临的一个基本挑战,它对精度和速度有重要影响。为了实现更高效、更有效的模型架构,研究人员探索了不同的设计策略。为提高特征提取能力,骨干网采用了多种主要计算单元,包括 DarkNet [43, 44, 45]、CSPNet [2]、EfficientRep [27] 和 ELAN [56, 58] 等。对于颈部,则探索了 PAN [35]、BiC [27]、GD [54] 和 RepGFPN [65] 等增强多尺度特征融合的方法。此外,还研究了模型缩放策略[56, 55]和重新参数化[10, 27]技术。虽然这些努力取得了显著进展,但仍缺乏从效率和准确性两个角度对 YOLOs 中各种组件的全面检测。因此,在 YOLOs 中仍然存在相当多的计算冗余,导致参数利用效率低下和效率不理想。此外,由此产生的受限模型能力也会导致性能低下,为提高精度留下了很大的空间。

在这项工作中,我们的目标是解决这些问题,并进一步推进 YOLO 的精度-速度界限。我们的目标是后处理和整个检测管道中的模型架构。为此,我们首先解决了后处理中的冗余预测问题,提出了无 NMS YOLOs 的一致双重分配策略,即双重标签分配和一致匹配度量。它使模型在训练过程中享受丰富而和谐的监督,同时在推理过程中无需 NMS,从而以高效率获得有竞争力的性能。其次,我们通过对 YOLOs 中的各个组件进行全面检查,为模型架构提出了效率-精度驱动的整体模型设计策略。在效率方面,我们提出了轻量级分类头、空间信道解耦下采样和等级引导块设计,以减少显性计算冗余,实现更高效的架构。在精度方面,我们探索了大核卷积,并提出了有效的部分自注意模块,以增强模型能力,在低成本的情况下利用潜在的性能改进。

基于这些方法,我们成功地实现了具有不同模型尺度的新型实时端到端检测器系列,即 YOLOv10-N / S / M / B / L / X。
在这里插入图片描述
如图 1 所示,在性能相似的情况下,我们的 YOLOv10-S / X 比 RT-DETRR18 / R101 分别快 1.8 倍和 1.3 倍。与 YOLOv9-C 相比,YOLOv10-B 在性能相同的情况下减少了 46% 的延迟。此外,YOLOv10 还表现出高效的参数利用率。我们的 YOLOv10-L / X 性能分别比 YOLOv8-L / X 高出 0.3 AP 和 0.5 AP,参数数量分别少 1.8 倍和 2.3 倍。OLOv10-M与 YOLOv9-M / YOLO-MS 相比,AP 与 YOLOv9-M / YOLO-MS 相似,参数分别减少了 23% 和 31%。

Related Work

Methodology

Consistent Dual Assignments for NMS-free Training (无NMS训练的一致性双重任务分配)

在训练过程中,YOLOs [20, 59, 27, 64] 通常利用 TAL [14] 为每个实例分配多个正样本。采用一对多的分配方式可以获得大量的监督信号,从而促进优化并获得卓越的性能。但是,这使得 YOLOs 必须依赖 NMS 的后处理,从而导致部署推理效率不理想。虽然之前的研究 [49, 60, 73, 5] 探索了一对一匹配来抑制冗余预测,但它们通常会引入额外的推理开销或产生次优性能。在这项工作中,我们提出了一种无 NMS 的 YOLOs 训练策略,它具有双标签分配和一致的匹配度量,实现了高效率和有竞争力的性能。

双标签分配。与一对多分配不同,一对一匹配只为每个真值分配一个预测,避免了 NMS 后处理。然而,这种方法会导致弱监督,从而使精度和收敛速度达不到最佳水平 [75]。幸运的是,这种缺陷可以通过一对多的分配来弥补 [5]。为此,我们为 YOLOs 引入了双标签分配,以结合两种策略的优点。具体来说,如图 2(a)所示,我们为 YOLOs 引入了另一种一对一头。它保留了与原来一对多分支相同的结构和优化目标,但利用一对一匹配来获得标签分配。在训练过程中,两个检测头与模型共同优化,让骨干和颈部享受一对多分配提供的丰富监督。在推理过程中,我们舍弃一对多检测头,利用一对一检测头进行预测。这样,端到端部署就可以实现 YOLO,而不会产生任何额外的推理成本。此外,在一对一匹配中,我们采用了前一个选择,这与匈牙利匹配[4]的性能相同,但额外的训练时间更少。

在这里插入图片描述
一致匹配度量。在分配过程中,一对一和一对多方法都会利用一个指标来定量评估预测和实例之间的一致程度。为了实现两个分支的预测感知匹配,我们采用了统一匹配度量,即
在这里插入图片描述
其中 p 是分类得分,ˆb 和 b 分别表示预测和真实的边界框。s 代表空间先验,表示预测的锚点是否在实例内 [20, 59, 27, 64]。α 和 β 是两个重要的超参数,用于平衡语义预测任务和位置回归任务的影响。我们将一对多指标和一对一指标分别记为
在这里插入图片描述
这些指标会影响两个标头的标签分配和监督信息。

在双标签分配中,一对多分支提供的监督信号比一对一分支丰富得多。直观地说,如果我们能协调一对一标头和一对多标头的监督,我们就能朝着一对多标头的优化方向优化一对一标头。因此,一对一标头可以在推理过程中提高样本质量,从而获得更好的性能。为此,我们首先分析了两个计算头之间的监督差距。由于训练过程中的随机性,我们在一开始就对两个 "头 "进行检查,这两个 "头 "以相同的值初始化并产生相同的预测,即一对一 "头 "和一对多 "头 "对每个预测-实例对产生相同的 p 和 IoU。我们注意到,两个分支的回归目标并不冲突,因为匹配的预测会共享相同的目标,而不匹配的预测则会被忽略。因此,监督差距在于不同的分类目标。给定一个实例,我们将其最大的预测 IoU 记为 u ∗ ,最大的一对多和一对一匹配分数分别记为 m∗ o2m 和 m∗ o2o。假设一对多分支产生正样本 Ω,一对一分支选择第 i 个预测,其指标为 mo2o,i=m∗ o2o、 然后,我们可以得出分类目标 to2m,j=u ∗ - mo2m,j m∗ o2m ≤ u ∗(对于 j∈ Ω)和 to2o,i=u ∗ - mo2o,i m∗ o2o =u ∗(对于任务对齐损失),如 [20,59,27,64,14] 所示。因此,两个分支之间的监督差距可以通过不同分类目标的 1-Wasserstein 距离得出:
在这里插入图片描述
我们可以观察到,差距随着 to2m,i 的增大而减小,即 i 在 Ω 中的排名靠前。如图 2.(a) 所示,当 to2m,i=u∗ 时,差距达到最小,即 i 是 Ω 中最好的正样本。为此,我们提出了一致匹配度量,即 αo2o=r - αo2m 和 βo2o=r - βo2m,这意味着 mo2o=mr o2m。因此,一对多磁头的最佳正样本也是一对一磁头的最佳正样本。因此,这两个磁头可以得到一致、和谐的优化。为简单起见,我们默认 r=1,即 αo2o=αo2m 和 βo2o=βo2m。为了验证改进后的监督配准,我们统计了训练后一对多结果的前 1 / 5 / 10 中一对一匹配对的数量。如图 2(b)所示,在一致匹配度量下,配准得到了改善。如需更全面地了解数学证明,请参阅附录。

Holistic Efficiency-Accuracy Driven Model Design (效率-精度驱动的整体模型设计)

效率驱动的模型设计。YOLO 的组件包括stem, downsampling layers, stages with basic building blocks, and the head.。stem的计算成本较低,因此我们对其他三个部分进行了效率驱动模型设计。

(1) 轻量级分类头。在 YOLOs 中,分类头和回归头通常采用相同的架构。但是,它们在计算开销方面表现出明显的差异。例如,在 YOLOv8-S 中,分类头的 FLOPs 和参数数(5.95G/1.51M)分别是回归头(2.34G/0.64M)的 2.5 倍和 2.4 倍。不过,在分析了分类误差和回归误差的影响后(见表 6),我们发现回归头对 YOLO 性能的影响更大。因此,我们可以减少分类头的开销,而不必担心性能会受到很大影响。因此,我们简单地采用了一种轻量级的分类头架构,它由两个深度可分离卷积[24, 8]组成,内核大小为 3×3,然后是 1×1 卷积。

(2) 空间-通道解耦降采样。YOLO 通常利用步长为 2 的常规 3×3 标准卷积,同时实现空间降采样(从 H × W 到 H 2 × W 2)和通道转换(从 C 到 2C)。这将带来不可忽略的计算成本 O( 9 2HW C2 ) 和参数数量 O(18C 2 ) 。取而代之的是,我们建议将空间缩小和通道增加操作解耦,从而实现更高效的下采样。具体来说,我们首先利用点卷积来调节通道维度,然后利用深度卷积来执行空间下采样。这将计算成本降低到 O(2HW C2 + 9 2HW C),参数数量降低到 O(2C 2 + 18C)。同时,它最大限度地保留了下采样过程中的信息,从而在降低延迟的同时实现了极具竞争力的性能。

(3) 等级引导的模块设计。YOLO 通常在所有阶段采用相同的基本构件 [27, 59],例如 YOLOv8 [20] 中的瓶颈构件。为了彻底检查 YOLO 的这种同构设计,我们利用本征等级 [31, 15] 来分析每个阶段的冗余度。具体来说,我们计算每个阶段中最后一个基本块中最后一次卷积的数值秩,其中计算大于阈值的奇异值的数量。图 3.(a) 显示了 YOLOv8 的结果,表明深度阶段和大型模型容易出现更多冗余。这一观察结果表明,简单地对所有阶段应用相同的块设计并不能实现最佳的容量-效率权衡。为了解决这个问题,我们提出了一种等级引导的区块设计方案,旨在通过紧凑的架构设计来降低冗余阶段的复杂性。我们首先提出了一种紧凑型反转块(CIB)结构,它采用廉价的深度卷积进行空间混合,并采用经济高效的点卷积进行信通道混合。它可以作为高效的基本构件,例如嵌入 ELAN 结构[58, 20](图 3.(b))。然后,我们主张采用等级引导的模块分配策略,在保持有竞争力的容量的同时实现最佳效率。具体来说,给定一个模型后,我们根据其内在等级以升序对其所有阶段进行排序。我们将进一步检验用 CIB 替换领先阶段基本区块的性能变化。如果与给定模型相比性能没有下降,我们就继续替换下一阶段,反之则停止这一过程。因此,我们可以实现跨阶段和跨模型规模的自适应紧凑块设计,在不影响性能的情况下实现更高的效率。由于篇幅限制,我们在附录中提供了算法的详细信息

在这里插入图片描述
精度驱动模型设计。我们进一步探索了大核卷积和自注意力的精度驱动设计,旨在以最小的成本提高性能。

(1) 大核卷积。采用大核深度卷积是扩大感受野和增强模型能力的有效方法 [9, 38, 37]。但是,如果在所有阶段都简单地利用它们,可能会对用于检测小物体的浅层特征造成污染,同时也会在高分辨率阶段带来巨大的 I/O 开销和延迟[7]。因此,我们建议在深度阶段利用 CIB 中的大核深度卷积。具体来说,我们仿照文献[37],将 CIB 中第二个 3×3 深度卷积的核大小增加到 7×7。此外,我们还采用了结构重参数化技术 [10, 9, 53],引入了另一个 3×3 深度卷积分支,在不增加推理开销的情况下缓解了优化问题。此外,随着模型大小的增加,其感受野自然也会扩大,使用大核卷积的好处也会随之减少。因此,我们只在模型规模较小的情况下采用大核卷积。

(2) 部分自注意力(PSA)。自注意力[52]因其卓越的全局建模能力而被广泛应用于各种视觉任务中[36, 13, 70]。然而,它的计算复杂度和内存占用都很高。为了解决这个问题,考虑到普遍存在的注意头冗余问题 [63],我们提出了一种高效的部分自注意(PSA)模块设计,如图 3©所示。具体来说,我们在 1×1 卷积后将各通道的特征平均分成两部分。我们只将其中一部分输入由多头自注意模块(MHSA)和前馈网络(FFN)组成的 NPSA 模块。然后,两部分通过 1×1 卷积进行连接和融合。此外,我们遵循文献[21],将查询和关键字的维度分配为 MHSA 中值的一半,并用 BatchNorm [26] 代替 LayerNorm [1],以实现快速推理。此外,PSA 只放在分辨率最低的第 4 阶段之后,避免了自注意力的二次计算复杂度带来的过高开销。这样,全局表示学习能力就能以较低的计算成本融入 YOLOs,从而很好地增强了模型的能力,提高了性能。

Experiment

在这里插入图片描述

在这里插入图片描述

Conclusion

在本文中,我们将后处理和模型架构作为整个 YOLOs 检测流程的目标。在后处理方面,我们提出了无 NMS 训练的一致双重分配,实现了高效的端到端检测。在模型架构方面,我们引入了效率-精度驱动的整体模型设计策略,改善了性能-效率的权衡。这些都为我们带来了全新的实时端到端对象检测器 YOLOv10。广泛的实验表明,与其他先进的检测器相比,YOLOv10 的性能和延迟都达到了最先进的水平,充分证明了它的优越性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/331386.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

huggingface 笔记:查看GPU占用情况

0 准备部分 0.1 创建虚拟数据 import numpy as npfrom datasets import Datasetseq_len, dataset_size 512, 512 dummy_data {"input_ids": np.random.randint(100, 30000, (dataset_size, seq_len)),"labels": np.random.randint(0, 1, (dataset_size…

C++与Android处理16进制大端/小端数据实例(二百七十六)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…

民国漫画杂志《时代漫画》第14期.PDF

时代漫画14.PDF: https://url03.ctfile.com/f/1779803-1247458399-6732ac?p9586 (访问密码: 9586) 《时代漫画》的杂志在1934年诞生了,截止1937年6月战争来临被迫停刊共发行了39期。 ps:资源来源网络!

OWASP top10--SQL注入(一)

SQL注入式攻击技术,一般针对基于Web平台的应用程序.造成SQL注入攻击漏洞的原因,是由于程序员在编写Web程序时,没有对浏览器端提交的参数进行严格的过滤和判断。用户可以修改构造参数,提交SQL查询语句,并传递至服务器端…

基本IO接口

引入 基本输入接口 示例1 示例2:有数据保持能力的外设 #RD端由in指令控制:将数据由端口传输到CPU内存中 #CS244信号由译码电路实现 示例3: a)图中由于输出端口6有连接到端口1,当开关与端点1闭合时期间,仍能维持3端口…

使用DataGrip连接Elasticsearch

使用DataGrip连接Elasticsearch 前言,公司需要使用ES来做数据的查询,我安装完ES,安装完Kibana的时候,想先开始尝试一下,插入查询数据能否可用,但是上次使用ES是好久前了,增删改查的请求根本记不…

欧拉函数、快速幂、扩展欧几里得算法、中国剩余定理和高斯消元

欧拉函数 给定 n 个正整数 ai,请你求出每个数的欧拉函数。 欧拉函数的定义1∼N 中与 N 互质的数的个数被称为欧拉函数,记为 ϕ(N)。 若在算数基本定理中,Np1a11p2a2…pmm,则:ϕ(N) Np1−1/p1p2−1/p2…pm−1/pm 输…

javas-core VS java-object-diff

对照工具选择 javas-core 和 java-object-diff ,对比demo https://github.com/kofgame/objectdiff-vs-javers,都为同源对比,都支持嵌套对象。 使用JMH测试方法进行性能测试,使用题库的QuestionResponseVO对象来进行对照对比,进行…

mac上简单实现一个java调用C接口的JNI

目录 安装JDK及配置环境变量写Java代码生成头文件实现本地方法编译本地代码运行 Java 程序总结步骤 安装JDK及配置环境变量 参考:MAC系统安装JDK1.8及环境变量配置 写Java代码 // 文件名:Calculator.java public class Calculator {// 声明本地方法pu…

如何禁止U盘拷贝文件|禁止U盘使用的软件有哪些

禁止U盘拷贝文件的方法有很多,比如使用注册表、组策略编辑器等,但这些方法都适合个人,不适合企业,因为企业需要对下属多台电脑进行远程管控,需要方便、省时、省力的方法。目前来说,最好的方法就是使用第三方…

嵌入式单片机笔试题

DC-DC 和 LDO两者有何区别? DC-DC转换器(直流-直流转换器)和LDO(低压差线性稳压器)都是用于电源管理的设备,但它们在原理和特性上有一些显著的区别: 原理: DC-DC转换器通过改变输…

WGCAT工单系统如何配置通知

WGCAT工单系统可以配置邮件通知 只要配置了邮件通知,那么一旦我们账号有新的工单需要处理,就会接受到邮件通知 除了邮件之外,还可以配置其他方式的通知,比如微信钉钉短信等方式,参考如下 https://www.wgstart.com/wgc…

2024年贵州特岗教师招聘报名流程,速速查收哦!

2024年贵州特岗教师招聘报名流程,速速查收哦!

利用开源工具创建WEBGIS应用

在本文中,我们将大致说明利用开源工具如何与服务器交互以构建交互式或动态 Web GIS。 WebGIS 应用程序已成为展示地理数据的重要模式。我们现在拥有允许用户交互的机制,以便用户可以选择数据,甚至修改或添加新数据。 什么是WEBGIS? 通过网络…

博客说明 5/12~5/24【个人】

博客说明 5/12~5/24【个人】 前言版权博客说明 5/12~5/24【个人】对比最后 前言 2024-5-24 13:39:23 对我在2024年5月12日到5月24日发布的博客做一下简要的说明 以下内容源自《【个人】》 仅供学习交流使用 版权 禁止其他平台发布时删除以下此话 本文首次发布于CSDN平台 作…

嵌入式单片机启动地址映射关系

一、内核只会从0地址启动 1.0地址第一个字是sp栈指针,第二个字是Reset_Handler入口,参考图1中启动代码中的中断向量表。具体使用流程参考图2(参考自野火) 图1 图2 2.0地址映射以后,软件上使用0地址访问的空间是映射到的器件的空间 3.0地址映射只会影响单个器件上的地址,…

轻量级 K8S 环境 安装minikube

文章目录 操作系统DockerDocker CE 镜像源站使用官方安装脚本自动安装 (仅适用于公网环境)安装校验Docker代理docker permission denied while trying to connect to the Docker daemon socket minikubekubectl工具minikube dashboard参考资料 操作系统 …

AI大模型探索之路-基础篇5:GLM-4解锁国产大模型的全能智慧与创新应用

目录 前言一、GLM4大模型总体概述二、GLM4和GPT4功能对比三、GLM4和GPT4性能对比1、基础能力(英文)2、指令跟随能力3、对齐能力4、长文本能力5、多模态-文生图 四、GLM-4 ALL Tools1、文生图2、代码解释器3、网页浏览4、Function Call5、多工具自动调用 …

23种设计模式(持续输出中)

一.设计模式的作用 设计模式是软件从业人员长期总结出来用于解决特定问题的通用性框架,它提高了代码的可维护性、可扩展性、可读性以及复用性。 二.设计模式 1.工厂模式 工厂模式提供了创建对象的接口,而无需制定创建对象的具体类,工厂类…

HarmonyOS之ArkUI布局设计常见细节

这里写目录标题 1. Button设置带有渐变色的背景图片无效1.1 问题分析1.2 成功案例 2. 路由跳转失败2.1 问题分析 1. Button设置带有渐变色的背景图片无效 1.1 问题分析 说明:设置颜色渐变需先设置backgroundColor为透明色。 Button($r(app.string.login), { type…