学习经验分享【37】YOLOv10解读——最新YOLO版本

    YOLO算法更新速度很快,已经出到V10版本,后续大家有想发论文或者搞项目可更新自己的baseline了。有需要改进方法的和相关资料可以关注后私信获取。

56a5d97dae2c49d2bbc73999d0e7e365.png

 

db49040a570848949c7d8beb56366670.png

 

代码:GitHub - THU-MIG/yolov10: YOLOv10: Real-Time End-to-End Object Detection

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

1介绍

       实时目标检测一直是计算机视觉领域的研究热点,其目的是在低延迟下准确预测图像中目标的类别和位置。它被广泛应用于各种实际应用,包括自动驾驶[3]、机器人导航[11]、目标跟踪[66]等。近年来,研究人员致力于设计基于cnn的目标检测器来实现实时检测[18,22,43,44,45,51,12]。其中,yolo因其在性能和效率之间的平衡而越来越受欢迎[2,19,27,19,20,59,54,64,7,65,16,27]。yolo的检测流程由模型前处理和NMS后处理两部分组成。然而,这两种方法都有不足之处,导致精度-延迟边界不够理想。具体来说,yolo在训练过程中通常采用一对多的标签分配策略,即一个真值对象对应多个正样本。尽管这种方法产生了优越的性能,但需要NMS在推理过程中选择最佳的正预测。这降低了推理速度,使性能对NMS的超参数敏感,从而阻碍了YOLOs实现端到端最优部署[71]。解决这个问题的一个方法是采用最近引入的端到端DETR架构[4,74,67,28,34,40,61]。例如,RT-DETR[71]提出了一种高效的混合编码器和最小不确定性查询选择,将detr推进到实时应用领域。然而,部署der的固有复杂性阻碍了其在准确性和速度之间实现最佳平衡的能力。另一条路线是探索基于cnn的检测器的端到端检测,该检测器通常利用一对一分配策略来抑制冗余预测[5,49,60,73,16]。此外,模型架构设计仍然是YOLOs面临的一个基本挑战,它对精度和速度有重要影响[45,16,65,7]。为了实现更高效的模型架构,研究人员探索了不同的设计策略。为增强主干特征提取能力,提出了多种主计算单元,包括DarkNet[43,44,45]、CSPNet[2]、EfficientRep[27]和ELAN[56,58]等。对于颈部,研究了PAN[35]、BiC[27]、GD[54]、RepGFPN[65]等方法来增强多尺度特征融合。此外,还研究了模型缩放策略[56,55]和重新参数化[10,27]技术。虽然这些努力取得了显著的进展,但从效率和精度的角度对YOLOs中各种组件的全面检查仍然缺乏。因此,yolo内部仍然存在相当大的计算冗余,导致参数利用率低,效率次优。此外,由此产生的受约束的模型能力也导致了较差的性能,为精度的提高留下了充足的空间。在这项工作中,我们的目标是解决这些问题,并进一步推进YOLOs的精度-速度边界。我们的目标是整个检测管道的后处理和模型架构。为此,我们首先提出了一种具有双标签分配和一致匹配度量的无nms yolo的一致双分配策略,解决了后处理中的冗余预测问题。它使模型在训练过程中得到丰富和谐的监督,而在推理过程中不需要NMS,从而获得高效率的竞争性能。其次,通过对YOLOs中各部件的全面检测,提出了整体效率-精度驱动的模型体系结构设计策略;为了提高效率,我们提出了轻量化分类头、空间信道解耦下采样和秩引导块设计,以减少显式计算冗余,实现更高效的架构。为了提高准确性,我们探索了大核卷积,并提出了有效的部分自关注模块来增强模型能力,利用低成本下的性能改进潜力。基于这些方法,我们成功地实现了一系列具有不同模型尺度的实时端到端检测器,即YOLOv10- n / S / M / B / L / x。在目标检测的标准基准(即COCO)上进行的大量实验[33]表明,我们的YOLOv10在各种模型尺度的计算精度权衡方面可以显著优于以前最先进的模型。如图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倍。与YOLOv9-M / yolov10 - ms相比,YOLOv10-M实现了2个相似的AP,参数分别减少了23% / 31%。我们希望我们的工作能够激发该领域的进一步研究和进步。

2  工作

在训练过程中,YOLOs[20,59,27,64]通常利用TAL[14]为每个实例分配多个阳性样本。采用一对多分配,可以产生丰富的监控信号,便于优化,实现更优的性能。但是,它需要yolo依赖NMS的后处理,导致部署的推理效率不够理想。虽然以前的研究[49,60,73,5]探索一对一匹配来抑制冗余预测,但它们通常会引入额外的推理开销或产生次优性能。在这项工作中,我们提出了一种具有双标签分配和一致匹配度量的无nms的yolo训练策略,实现了高效率和竞争性的性能。双标签分配。与一对多分配不同,一对一匹配只对每个基本事实分配一个预测,避免了NMS的后处理。然而,它导致弱监督,导致次优精度和收敛速度[75]。幸运的是,这个缺陷可以通过一对多赋值来弥补[5]。为了实现这一目标,我们为yolo引入了双标签分配,以结合两种策略的优点。具体来说,如图2.(a)所示,我们为yolo加入了另一个一对一的头部。它保留了与原始一对多分支相同的结构和优化目标,但利用一对一匹配来获得标签分配。在训练过程中,两个头部与模型共同优化,使脊柱和颈部享受到一对多分配所提供的丰富监督。在推理过程中,我们抛弃了一对多头像,利用一对一头像进行预测。这使yolo能够进行端到端部署,而不会产生任何额外的推理成本。此外,在一对一匹配中,我们采用了top 1的选择,达到了与匈牙利匹配[4]相同的效果,并且减少了额外的训练时间。c33397820e8d46a0bf6d498e8928ffe2.png

3.2整体效率-精度驱动的模型设计除了后处理之外,yolo的模型架构也对效率-精度权衡提出了很大的挑战[45,7,27]。尽管之前的作品探索了各种设计策略,

380bb1c50eb84880b0b202d37dfa7dc3.png

b8cf480ee8b442a7956490c94c5c5092.png

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

LabVIEW控制Trio控制器

将LabVIEW与Trio控制器结合,可以实现对复杂运动系统的控制和监测。以下是详细的方法和注意事项: 一、准备工作 软件安装: 安装LabVIEW开发环境,确保版本兼容性。 安装Trio控制器的相关驱动程序和软件,如Trio Motion …

数据驱动的UI艺术:智能设计的视觉盛宴

数据驱动的UI艺术:智能设计的视觉盛宴 引言 在当今这个数据泛滥的时代,大数据不仅仅是一种技术手段,它更是一种艺术形式。当大数据遇上UI设计,两者的结合便催生了一种全新的艺术形式——数据驱动的UI艺术。本文将探讨如何将数据…

项目如何有效做资源管理?易趋项目管理软件让资源管理可视化

在项目管理的过程中,有效的资源管理能够确保资源得到合理的分配和使用,避免资源的浪费和冗余,进而提高整体工作效率、确保项目的成功;同时降低组织的运营成本。 但在项目推进过程中,项目经理总会面临各种资源管理的难…

Linux-命令上

at是一次性的任务,crond是循环的定时任务 如果 cron.allow 文件存在,只有在文件中出现其登录名称的用户可以使用 crontab 命令。root 用户的登录名必须出现在 cron.allow 文件中,如果这个文件存在的话。系统管理员可以明确的停止一个用户&am…

Langchain-Chatchat的markdownHeaderTextSplitter使用

文章目录 背景排查步骤官方issue排查测试正常对话测试官方默认知识库Debug排查vscode配置launch.json命令行自动启动condadebug知识库搜索测试更换ChineseRecursiveTextSplitter分词器 结论 关于markdownHeaderTextSplitter的探索标准的markdown测试集Langchain区分head1和head…

Notes for video: EDC-Con 2022/01 - EDC Conceptual Overview and Architecture

Eclipse Dataspace Connector 中文概念 Eclipse Dataspace Connector (EDC) 是一个开源项目,旨在提供一种标准化的方法来连接和共享数据空间中的数据。它是 Eclipse Foundation 下的一个项目,目标是促进数据共享和数据交换的互操作性。以下是 EDC 的一些…

【前端学习——react坑】useState使用

问题 使用useState 时,例如 const [selectedId, setSelectedId] useState([false,true,false]);这样直接利用,无法引发使用selectedId状态的组件的变化,但是selectedId是修改了的 let tempselectedId;temp[toggledId]selectedId[toggledId…

MySQL数据库的数据文件保存在哪?MySQL数据存在哪里

在安装好MySQL数据库使用一段时间后,会产生许多的数据库和数据。那这些数据库的数据文件存放在本地文件夹的什么位置呢 一、默认位置 一般来说MySQL数据库的数据文件都是存放在data文件夹之中,但是根据使用的存储引擎不同,产生的一些文件也…

C++初阶之模板进阶

个人主页:点我进入主页 专栏分类:C语言初阶 C语言进阶 数据结构初阶 Linux C初阶 算法 欢迎大家点赞,评论,收藏。 一起努力,一起奔赴大厂 目录 一.非类型模板参数 二.模板的特化 2.1引入 2.2全特化 2.3…

关于pytest中用例名称使用中文乱码的解决

场景:使用pytest.mark.parametrize装饰器为用例自定义名称时,运行显示乱码。如下图所示: 解决方案: 1.在根目录 pytest.ini中增加一行代码 [pytest] disable_test_id_escaping_and_forfeit_all_rights_to_community_supportTrue…

Point-Nerf 理论笔记和理解

文章目录 什么是point nerf 和Nerf 有什么区别Point Nerf 核心结构有哪些?什么是point-based radiance field? 点云位置以及置信度是怎么来Point pruning 和 Point Growing 什么是point nerf 和Nerf 有什么区别 基本的nerf 是通过过拟合MLP来完成任意视角场景的重…

【CTF Web】CTFShow web6 Writeup(SQL注入+PHP+位运算)

web6 1 阿呆一口老血差点噎死自己&#xff0c;决定杠上了 解法 注意到&#xff1a; <!-- flag in id 1000 -->拦截很多种字符&#xff0c;连 select 也不给用了。 if(preg_match("/\|\"|or|\||\-|\\\|\/|\\*|\<|\>|\^|\!|x|hex|\(|\)|\|select/i"…

IOS开发者证书快捷申请

App Uploader 在进行iOS应用开发中,可以借助appuploader辅助工具进行证书制作、上传和安装测试等操作。首先,您需要访问官方网站获取最新版本的appuploader。最新版本已经优化了与Apple账号的登录流程,无需支付688元,并提供了Windows版和Mac版供用户选择。下载完成后,解压…

地质考察AR远程交互展示系统辅助老师日常授课

广东这片充满活力的土地&#xff0c;孕育了一家引领ARVR科技潮流的杰出企业——深圳华锐视点&#xff0c;作为一家专注于VR/AR技术研究与业务开发的先锋公司。多年来&#xff0c;我们不断突破技术壁垒&#xff0c;将AR增强现实技术与各行各业的实际需求完美结合&#xff0c;助力…

【lambdastreammaven】

lambda 匿名函数 为了简化java中的匿名内部类 事件监听 写一个类 实现 ActionListener 接口 (外部类) | | 内部类 类在其他地方用不到, 索性就把这个类定义在类的内部使用 好处: 1.内部可以使用外部类的成员 …

都2024年了!是谁还不会优化 Hive 的小文件啊!!!速看!

文章目录 小文件产生的原因1.查询建表或者插入2.装载数据3.动态分区小文件影响解决方法针对已经存在的小文件进行优化1.小文件归档2.getmerge3.concatenate4.重写针对写入数据时的优化1.调参优化2.动态分区优化3.使用 Spark 算子控制小文件数量查看 HDFS 上的文件时,无意间点进…

已有yarn集群部署spark

已有yarn集群的情况下&#xff0c;部署spark只需要部署客户端。 一、前提条件 已部署yarn集群&#xff0c;部署方式参考&#xff1a;https://blog.csdn.net/weixin_39750084/article/details/136750613?spm1001.2014.3001.5502&#xff0c;我部署的hadoop版本是3.3.6已安装j…

Java的结构与运行机制

1. JDK JRE JVM三者的区别 JDK(Java Development Kit)&#xff1a;Java开发工具包 JDK包含JRE&#xff0c;还包括其他例如&#xff1a;编译器(javac)、javadoc、jar等&#xff0c;JDK是能够创建和编译程序的。 JRE(Java runtime environment)&#xff1a;Java运行环境 JRE是运…

逻辑分析仪 - 采样率/采样深度

采样深度&#xff08;Sampling Depth&#xff09; 采样深度指的是逻辑分析仪在一次捕获过程中可以记录的最大样本数量。简单来说&#xff0c;采样深度越大&#xff0c;逻辑分析仪可以记录的数据量就越多。这对于分析长时间的信号变化或复杂的信号序列非常重要。 采样率&#…

java面试(JVM)

JVM是什么 Java Virtual Machine Java程序的运行环境&#xff08;java二进制字节码的运行环境&#xff09; 好处&#xff1a; 一次编写&#xff0c;到处运行自动内存管理&#xff0c;垃圾回收机制 JVM由哪些部分组成&#xff0c;运行流程是什么 什么是程序计数器 程序计数器…