机器之心 | 清华接手,YOLOv10问世:性能大幅提升,登上GitHub热榜

news2024/11/26 6:55:19

本文来源公众号“机器之心”,仅用于学术分享,侵权删,干货满满。

原文链接:清华接手,YOLOv10问世:性能大幅提升,登上GitHub热榜

相同性能情况下,延迟减少 46%,参数减少 25%。

目标检测系统的标杆 YOLO 系列,再次获得了重磅升级。

自今年 2 月 YOLOv9 发布之后, YOLO(You Only Look Once)系列的接力棒传到了清华大学研究人员的手上。

上周末,YOLOv10 推出的消息引发了 AI 界的关注。它被认为是计算机视觉领域的突破性框架,以实时的端到端目标检测能力而闻名,通过提供结合效率和准确性的强大解决方案,延续了 YOLO 系列的传统。

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

项目地址:https://github.com/THU-MIG/yolov10

新版本发布之后,很多人已经进行了部署测试,效果不错。

视频1:

图片

视频二:

图片

YOLO 因为性能强大、消耗算力较少,一直以来都是实时目标检测领域的主要范式。该框架被广泛用于各种实际应用,包括自动驾驶、监控和物流。其高效、准确的物体检测能力使其成为实时识别行人和车辆等任务的理想选择;在物流方面,它有助于库存管理和包裹跟踪,通过 AI 能力帮助人们在很多工作上提高了效率。

几年来,研究人员对 YOLO 的架构设计、优化目标、数据增强策略等进行了探索,取得了显著进展。然而,后处理对非极大值抑制(NMS)的依赖阻碍了 YOLO 的端到端部署,并对推理延迟产生不利影响。此外,YOLO 中各个组件的设计缺乏全面彻底的检查,导致明显的计算冗余并限制了模型的能力。

YOLOv10 的突破就在于从后处理和模型架构方面进一步提升了 YOLO 的性能 - 效率边界。

为此,研究团队首次提出了 YOLO 无 NMS 训练的一致双重分配(consistent dual assignment),这使得 YOLO 在性能和推理延迟方面有所改进。

研究团队为 YOLO 提出了整体效率 - 准确率驱动的模型设计策略,从效率和准确率两个角度全面优化 YOLO 的各个组件,大大降低了计算开销并增强了模型能力。

大量实验表明,YOLOv10 在各种模型规模上都实现了 SOTA 性能和效率。例如,YOLOv10-S 在 COCO 上的类似 AP 下比 RT-DETR-R18 快 1.8 倍,同时参数数量和 FLOP 大幅减少。与 YOLOv9-C 相比,在性能相同的情况下,YOLOv10-B 的延迟减少了 46%,参数减少了 25%。

方法介绍

为了实现整体效率 - 准确率驱动的模型设计,研究团队从效率、准确率两方面分别提出改进方法。

为了提高效率,该研究提出了轻量级分类 head、空间通道(spatial-channel)解耦下采样和排序指导的块设计,以减少明显的计算冗余并实现更高效的架构。

为了提高准确率,研究团队探索了大核卷积并提出了有效的部分自注意力(partial self-attention,PSA)模块来增强模型能力,在低成本下挖掘性能改进的潜力。基于这些方法,该团队成功实现了一系列不同规模的实时端到端检测器,即 YOLOv10-N / S / M / B / L / X

用于无 NMS 训练的一致双重分配

在训练期间,YOLO 通常利用 TAL 为每个实例分配多个正样本。一对多的分配方式产生了丰富的监督信号,促进了优化并使模型实现了卓越的性能。

然而,这需要 YOLO 依赖于 NMS 后处理,这导致了部署时次优的推理效率。虽然之前的研究工作探索了一对一匹配来抑制冗余预测,但它们通常引入了额外的推理开销。

与一对多分配不同,一对一匹配对每个 ground truth 仅分配一个预测,避免 NMS 后处理。然而,这会导致弱监督,以至于准确率和收敛速度不理想。幸运的是,这种缺陷可以通过一对多分配来弥补。

该研究提出的「双标签分配」结合了上述两种策略的优点。如下图所示,该研究为 YOLO 引入了另一个一对一 head。它保留了与原始一对多分支相同的结构并采用相同的优化目标,但利用一对一匹配来获取标签分配。在训练过程中,两个 head 联合优化,以提供丰富的监督;在推理过程中,YOLOv10 会丢弃一对多 head 并利用一对一 head 做出预测。这使得 YOLO 能够进行端到端部署,而不会产生任何额外的推理成本。

整体效率 - 准确率驱动的模型设计 

除了后处理之外,YOLO 的模型架构也对效率 - 准确率权衡提出了巨大挑战。尽管之前的研究工作探索了各种设计策略,但仍然缺乏对 YOLO 中各种组件的全面检查。因此,模型架构表现出不可忽视的计算冗余和能力受限。

YOLO 中的组件包括 stem、下采样层、带有基本构建块的阶段和 head。作者主要对以下三个部分执行效率驱动的模型设计。

  1. 轻量级分类 head

  2. 空间通道解耦下采样

  3. 排序指导的模块设计

为了实现准确率驱动的模型设计,研究团队进一步探索了大核卷积和自注意力机制,旨在以最小的成本提升模型性能。

实验

如表 1 所示,清华团队所开发的的 YOLOv10 在各种模型规模上实现了 SOTA 的性能和端到端延迟。

该研究还针对 YOLOv10-S 和 YOLOv10-M 进行了消融实验,实验结果如下表所示:

如下表所示,双标签分配实现了最佳的 AP - 延迟权衡,采用一致匹配度量可以达到最优性能。

如下表所示,每个设计组件,包括轻量级分类 head、空间通道解耦下采样和排序指导的模块设计,都有助于减少参数数量、FLOPs 和延迟。重要的是,这些改进是在保持卓越性能的同时所实现的。

针对准确性驱动的模型设计的分析。研究人员展示了基于 YOLOv10-S/M 逐步集成准确性驱动设计元素的结果。

如表 10 所示,采用大核卷积和 PSA 模块分别在延迟最小增加 0.03ms 和 0.15ms 的情况下,使 YOLOv10-S 的性能有了 0.4% AP 和 1.4% AP 的显著提升。

参考内容:

https://visionplatform.ai/yolov10-object-detection/

https://www.youtube.com/watch?v=29tnSxhB3CY

THE END !

文章结束,感谢阅读。您的点赞,收藏,评论是我继续更新的动力。大家有推荐的公众号可以评论区留言,共同学习,一起进步。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

知识产权与标准化

知识产权与标准化 导航 文章目录 知识产权与标准化导航一、知识产权概述二、保护范围与对象三、保护期限四、知识产权归属五、侵权判定六、标准的分类 一、知识产权概述 知识产权:知识产权是指人们就其智力劳动成果所依法享有的专有权利,通常是国家赋予创造者对其…

SNP数据转型解析:云服务在现代企业数字化转型的必要性

为什么当今的企业想为数字化工作环境做好准备并保持竞争力,很难避免使用云服务呢? 要理解为什么企业没有云的替代选择,我们需要了解云服务的含义 - 它不仅仅指存储数据的另一个位置。各种云模型提供了极大的灵活性,可以根据需要操…

149.二叉树:二叉树的前序遍历(力扣)

代码解决 这段代码实现了二叉树的前序遍历,前序遍历的顺序是:访问根节点 -> 递归遍历左子树 -> 递归遍历右子树。以下是详细解释,包括各个部分的注释: // 二叉树节点的定义 struct TreeNode {int val; // 节…

栈的特性及代码实现(C语言)

目录 栈的定义 栈的结构选取 链式储存结构和顺序栈储存结构的差异 栈的代码实现 "stack.h" "stack.c" 总结 栈的定义 栈:栈是限定仅在表尾进行插入和删除操作的线性表。 我们把运行插入的和删除的一段叫做栈顶(TOP&#xff…

坦克飞机大战项目详解:从包结构到测试发布

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、项目初始化与包结构构建 代码案例: 二、资源文件与配置文件管理 代码案例…

Clickhouse 嵌套数据类型总结—— Clickhouse 基础篇(三)

文章目录 创建嵌套类型的表插入读取数据在嵌套类型上使用数组函数 在 clickhouse 中存储嵌套类型的关键字是 Nested, 只支持一级嵌套。数据结构类似于在数据结构类似于在表的单元格里面嵌套“一张表格”,如下图所示: 嵌套类型是列存储,本质…

rv1126 imx307修改驱动使能图像垂直反转180度

查看imx307芯片手册 修改,3007地址的bit0为1 修改imx307驱动代码加入这一句代码,直接写死,这样拍出来的照片就使垂直翻转180度的了 // SPDX-License-Identifier: GPL-2.0 /** imx307 driver** Copyright (C) 2020 Rockchip Electronics Co.…

Elasticsearch 认证模拟题 - 1

1、题目 定义一个数据流,满足 data-stream_*_*,数据首先分布在 data_hot,5分钟后移动到 data_warm,3分钟后到 data_cold,再过 8 分钟删除。 1.1 考点 生命周期索引模板数据流 1.2 答案 # 修改生命周期策略修改时间…

SpringBoot整合RabbitMQ的快速使用教程

目录 一、引入依赖 二、配置rabbitmq的连接信息等 1、生产者配置 2、消费者配置 三、设置消息转换器 四、生产者代码示例 1、配置交换机和队列信息 2、生产消息代码 五、消费者代码示例 1、消费层代码 2、业务层代码 在分布式系统中,消息队列是一种重要…

RTOS(6)任务

重点: 一、FreeRtos任务的API调用 1.创建任务(静态、动态创建) 动态创建: ①先写任务函数 ②定义函数的handle指针 ③调用动态创建任务的API:xTaskCreate(任务函数,任务名称,栈深度&#x…

【css3】01-css3新特性样式篇

目录 1 背景 1.1 设置背景图片的定位 1.2 背景裁切-规定背景的绘制区域 1.3 设置背景图片尺寸 2 边框 2.1 盒子阴影box-shadow 2.2 边框图片border-image 3 文本 -文字阴影text-shadow 1 背景 1.1 设置背景图片的定位 background-origin:规定背景图片的定位…

遇到了导师放养,该怎么坚持?

最近收到学生读者的留言,抱怨科研的困难。导师忙碌且学生众多,自己只是众多学生之一,常常处于放养状态。除了每周的组会外,几乎无法接触到导师。在这种状态下,缺乏方向和动力,非常担心无法顺利毕业&#xf…

Llama模型家族之使用 Supervised Fine-Tuning(SFT)微调预训练Llama 3 语言模型(三)通过web页面方式微调

LlaMA 3 系列博客 基于 LlaMA 3 LangGraph 在windows本地部署大模型 (一) 基于 LlaMA 3 LangGraph 在windows本地部署大模型 (二) 基于 LlaMA 3 LangGraph 在windows本地部署大模型 (三) 基于 LlaMA…

【Linux】自己实现一个bash进程

bash就是命令行解释器,就是Linux操作系统让我们看到的,与用户进行交互的一种外壳(shell),当然了bash也是一个进程,它有时候就是通过创建子进程来执行我们输入的命令的。这无疑就离不开我们上篇博客所说的进…

如何解决链游中可能出现的延迟或网络拥堵问题?

随着区块链技术的不断发展和普及,链游(基于区块链的游戏)作为新兴的娱乐形式,正逐渐走进大众的视野。然而,与传统游戏相比,链游在运行过程中可能会遇到一些特有的问题,其中最为突出的就是延迟和…

Windows hook介绍与代码演示

Windows Hook 是一种机制,允许应用程序监视系统或处理特定事件。它可以拦截和更改消息,甚至可以插入到其他应用程序的消息处理机制中。Windows 提供了多种挂钩类型,例如键盘挂钩、鼠标挂钩、消息挂钩等。 hook代码实现 下面是一个使用 Wind…

微服务架构下的‘黑带’安全大师:Spring Cloud Security全攻略!

深入探讨了微服务间的安全通信、安全策略设计以及面对经典安全问题的应对策略。无论你是微服务的新手还是资深开发者,都能在本文中找到提升安全功力的秘籍。让我们一起成为微服务架构下的‘黑带’安全大师! 文章目录 1. 引言微服务安全挑战与重要性Sprin…

【软件工程】【23.04】p1

关键字: 软件模型、提炼、加工表达工具、通信内聚、访问依赖、边界类交互分析、RUP核心工作流、首先测试数据流、软件验证过程、CMMI过程域分类工程类; 软件工程目的、功能需求是需求的主体、结构化方法、耦合、详细设计工具、类、类图、RUP采用用例技…

rk3568_mutex

文章目录 前言1、什么是mutex?1.1mutex互斥体API函数二、实验2.1实验目的2.2源码2.3结果图前言 本文记录的是rk3568开发板基础上做的mutex实验 1、什么是mutex? mutex是互斥体,它是比信号量semaphore更加专业的机制。 在我们编写Linux驱动的时候遇到需要互斥的地方建议使用…

Nginx企业级负载均衡:技术详解系列(12)—— 深入解析root、alias及location

你好,我是赵兴晨,97年文科程序员。 在生产服务器的Nginx配置中,我们总会遇到形形色色的配置方案。你是否曾注意到root和alias指令的巧妙应用?是否对那些五花八门的location匹配规则感到好奇? 今天,咱们来聊…