YOLOv10:实时端到端目标检测的新突破

目标检测作为计算机视觉领域的一个核心问题,其关键在于能够在图像中准确识别并定位对象。随着深度学习技术的发展,基于深度神经网络的目标检测方法不断涌现,其中YOLO(You Only Look Once)系列算法以其优异的实时性和准确性,成为实时目标检测领域的主流选择。最近,清华大学的研究团队推出了YOLO系列的最新力作——YOLOv10,本文将对这篇论文进行详细解读,并探讨YOLOv10在实时目标检测领域的新突破。

YOLOv10简介

YOLOv10是YOLO系列的最新一代算法,它继承了YOLO家族在实时目标检测上的优势,同时在模型架构和后处理上进行了创新性改进,进一步提升了检测性能和效率。YOLOv10的核心贡献可以概括为以下几点:

  1. 无NMS(Non-Maximum Suppression)训练:YOLOv10提出了一种新的一致性双重赋值策略(Consistent Dual Assignments),使得模型在训练时能够获得丰富的监督信号,在推理时则无需NMS即可实现高效的端到端检测。

  2. 全面优化的模型架构:研究者们从效率和准确性两个角度出发,全面优化了YOLO的各个组件,包括轻量级分类头、空间-通道解耦下采样、基于秩引导的模块设计等。

  3. 大核心卷积和部分自注意力模块:YOLOv10引入了大核心卷积来扩大感受野,并提出了部分自注意力模块(PSA),以较低的计算成本增强模型性能。

YOLOv10的主要贡献

一致性双重赋值策略

在传统的目标检测模型中,NMS是一个必要的后处理步骤,用于从多个候选框中选择最佳的检测结果。然而,NMS不仅增加了推理时间,还使得模型无法实现端到端的训练。YOLOv10通过一致性双重赋值策略解决了这一问题,该策略在训练时采用一对多的赋值方式提供丰富的监督信号,在推理时则切换到一对一的赋值方式,无需NMS即可快速得到检测结果。

在训练期间,YOLO 通常利用 TAL 为每个实例分配多个正样本。一对多的分配方式产生了丰富的监督信号,促进了优化并使模型实现了卓越的性能。然而,这需要 YOLO 依赖于 NMS 后处理,这导致了部署时次优的推理效率。虽然之前的研究工作探索了一对一匹配来抑制冗余预测,但它们通常引入了额外的推理开销。与一对多分配不同,一对一匹配对每个 ground truth 仅分配一个预测,避免 NMS 后处理。然而,这会导致弱监督,以至于准确率和收敛速度不理想。幸运的是,这种缺陷可以通过一对多分配来弥补。

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

全面优化的模型架构

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

YOLOv10对模型架构进行了全面优化,包括:

  • 轻量级分类头:简化分类头的网络结构,减少计算量而不影响检测性能。
  • 空间-通道解耦下采样:将空间下采样和通道变换操作分离,降低计算复杂度。
  • 基于秩引导的模块设计:根据模型不同阶段的冗余程度,动态调整网络模块,提高计算效率。

大核心卷积和部分自注意力模块

YOLOv10引入了大核心卷积来扩大模型的感受野,增强对小目标的检测能力。同时,通过部分自注意力模块(PSA),YOLOv10在保持计算效率的同时,引入了Transformer模型的全局建模能力,进一步提升检测精度。

采用大核深度卷积是扩大感受野和增强模型能力的有效方法。然而,简单地在所有阶段利用它们可能会在用于检测小物体的浅层特征中引入污染,同时在高分辨率阶段也会带来大量的I/O开销和延迟。因此,建议在深阶段利用CIB中的大核深度卷积。具体来说,本文将CIB中第二个3×3深度卷积的核大小增加到7×7。此外,本文采用结构重参数化技术引入另一个3×3深度卷积分支,以缓解优化问题,而无需推理开销。此外,随着模型大小的增加,其感受野自然扩大,使用大核卷积的好处会减少。因此,对于小模型尺度,我们只采用大核卷积。

YOLOv10的实验结果

研究团队在COCO数据集上对YOLOv10进行了广泛的实验验证。实验结果表明,YOLOv10在不同模型规模下均取得了优异的检测性能,与当前最先进的目标检测模型相比,在保持相似精度的同时,显著降低了推理延迟。

结论

YOLOv10作为YOLO系列的最新成员,通过创新性的一致性双重赋值策略和全面优化的模型架构,实现了实时目标检测领域的新突破。它不仅在学术上具有重要意义,也为自动驾驶、机器人导航、视频监控等实际应用提供了强大的技术支持。随着YOLOv10的开源,我们期待它在未来能够在更多的应用场景中发挥重要作用。

相关参考:

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

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

其他:https://zhuanlan.zhihu.com/p/700329479

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

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

相关文章

C++类和对象下篇

🐇 🔥博客主页: 云曦 📋系列专栏:[C] 💨路漫漫其修远兮 吾将而求索 💛 感谢大家👍点赞 😋关注📝评论 文章目录 📔1、再谈构造函数📰…

【C++】类和对象——构造和析构函数

目录 前言类的六个默认构造函数构造函数1.构造函数的概念2.构造函数的特性 初始化列表1.构造函数整体赋值2.初始化列表 析构函数1.析构函数的概念2.析构函数的特性 前言 类和对象相关博客:【C】类和对象   我们前面一个内容已经讲了关于类好对象的初步的一些知识&…

Python量化交易学习——Part5:通过相关系数选择对收益率影响比重大的因子(1)

上一节中我们学习了如何通过单因子策略进行股票交易,在实际的股市中,因子(也就是指标)数量往往非常之多,比如市盈率/市净率/净资产收益率等,在使用这些因子的过程中,我们会发现有的因子与收益率为正相关,有的因子为负相关,而有些因子几乎完全无关。 所以我们可以通过计…

JS-10-es6常用知识-对象扩展

目录 1 Object.assign:实现拷贝继承 2 扩展运算符(...) 1)介绍 2)数组中的扩展运算符 3)对象中的扩展运算符 1 Object.assign:实现拷贝继承 1)目的:Object.assign()方法在 JavaScript 中被…

Flutter开发效率提升1000%,Flutter Quick教程之定义构造参数和State成员变量

一个Flutter页面,可以定义页面构造参数和State成员变量。所谓页面构造参数,就是当前页面构造函数里面的参数。 比如下面代码,a就是构造参数,a1就是State成员变量。 class Testpage extends StatefulWidget {String a;const Test…

Python的文件管理

读取文件 首先我们可以先创建一个工程项目,如图所示: 打开我们名为1.读取文件.py的python文件,然后我们可以写下读取Python文件的代码,代码如下: f open("1.txt", "r") print(f.read()) f.clos…

【PB案例学习笔记】-14使用次数和日期限制

写在前面 这是PB案例学习笔记系列文章的第14篇,该系列文章适合具有一定PB基础的读者。 通过一个个由浅入深的编程实战案例学习,提高编程技巧,以保证小伙伴们能应付公司的各种开发需求。 文章中设计到的源码,小凡都上传到了gite…

【工具】探索 ARPU:平均每用户收入

缘分让我们相遇乱世以外 命运却要我们危难中相爱 也许未来遥远在光年之外 我愿守候未知里为你等待 我没想到为了你我能疯狂到 山崩海啸没有你根本不想逃 我的大脑为了你已经疯狂到 脉搏心跳没有你根本不重要 🎵 邓紫棋《光年之外》 什么是 ARP…

UE5.1_常用快捷键

UE5.1_常用快捷键 shift1,,模式选择 shift2,,模式选择 shift3,,模式选择 shift4,,模式选择 shift5,,模式选择 shift6,,模式选择 …

2.3Docker部署java工程

2.3Docker部署java工程 1.导入jar包 2.在Docker部署jdk(容器名为myjdk17) 3.修改jar包名 mv 原包名 新包名4. 配置启动脚本 Dockerfile是一个文本文件,其中包含了构建 Docker 镜像所需的一系列步骤和指令。通过编写 Dockerfile 文件&…

Adversarial Nibbler挑战:与多元社区持续开展开放红队测试

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

RPG Maker MV角色战斗动画记录

角色战斗动画记录 角色战斗状态判断的语句赋值 战斗管理战斗精灵创建精灵进行角色的更新 角色战斗状态 角色的战斗状态是由 Game_Battler 类中的 _actionState 属性的字符串决定的,它有哪些值呢? undecided 未确定或者说是操作状态inputting 输入waiti…

QA 未能打开位于 D:/Computer999/Computer999.vbox 的虚拟电脑

前言 未能打开位于 xxx/Computer999.vbox 的虚拟电脑,并提示E_INVALIDARG (0X80070057),是最常见的一个错误,下面是解决办法。 内容 1、提示下面的错误,注册Computer999失败: 未能打开位于 D:/Computer999/Compute…

K210视觉识别模块学习笔记1:第一个串口程序_程序烧录与开机启动

今日开始学习K210视觉识别模块:简单的认识与串口程序 亚博智能的K210视觉识别模块...... 固件库版本: canmv_yahboom_v2.1.1.bin 既然K210作为一个视觉识别外设模块来使用,我认为第一个程序 就没必要学点灯之类的了,直接学习串口如何配置开始为妥&…

ctfshow-web入门-爆破(web21-web24)

目录 1、web21 2、web22 3、web23 4、web24 1、web21 爆破什么的,都是基操 需要认证才能访问 随便输一个用户名和密码抓包看看: 多出来一个认证的头 Authorization: Basic YWRtaW46MTIzNDU2 base64 解码看看: 就是我们刚才输入的用于测…

C语言 | Leetcode C语言题解之第127题单词接龙

题目&#xff1a; 题解&#xff1a; struct Trie {int ch[27];int val; } trie[50001];int size, nodeNum;void insert(char* s, int num) {int sSize strlen(s), add 0;for (int i 0; i < sSize; i) {int x s[i] - ;if (trie[add].ch[x] 0) {trie[add].ch[x] size;m…

计算机系统结构之FORK和JOIN

程序语言中用FORK语句派生并行任务&#xff0c;用JOIN语句对多个并发任务汇合。 FORK语句的形式为FORK m&#xff0c;其中m为新领程开始的标号。 JOIN语句的形式为JOIN n&#xff0c;其中n为并发进程的个数。 例1&#xff1a;给定算术表达式ZEA*B*C/DF经并行编译得到如下程序…

刘强东的简历很拉风!

正式宣布&#xff1a;GPT 4o 在国内直接使用 ~ 来看一下江湖人称“东哥”刘强东的简历&#xff0c;大佬确实很拉风&#xff1a; 刘强东&#xff0c;京东的创始人&#xff0c;是中国互联网行业的传奇人物。他的故事充满了奋斗和创新&#xff0c;以下是我对他简历的一些看法&…

Vitis HLS 学习笔记--HLS流水线类型

目录 1. 简介 2. 优缺点对比 2.1 Stalled Pipeline 2.2 Free-Running/Flushable Pipeline 2.3 Flushable Pipeline 3. 设置方法 4. FRP的特殊优势 5. 总结 1. 简介 Vitis HLS 会自动选择正确的流水线样式&#xff0c;用于流水打拍函数或循环。 停滞的流水线&#xff…

K8S SWCK SkyWalking全链路跟踪工具安装

官方参考&#xff1a;如何使用java探针注入器? 配置两个demo&#xff0c;建立调用关系&#xff0c; 首先创建一个基础镜像dockerfile from centos 先安装java 参考: linux rpm方式安装java JAVA_HOME/usr/java/jdk1.8.0-x64 CLASSPATH.:$JAVA_HOME/lib/tools.jar PATH…