yolov10算法原理

文章目录

  • 1. 模型效果
  • 2. 模型特点
    • 2.1 无NMS训练的一致性双重分配策略 (Consistent Dual Assignments for NMS-free Training)
      • 双重标签分配 (Dual Label Assignments)
      • 一致匹配度量(Consistent Match. Metric)
      • 一对一分配在一对多结果中的频率
    • 2.2. 效率-准确性驱动的YOLO模型设计策略
      • 准确性驱动模型设计
      • 效率驱动模型设计
  • 3. 参考文章

论文链接:https://arxiv.org/abs/2405.14458
代码链接:https://github.com/THU-MIG/yolov1

1. 模型效果

在这里插入图片描述
针对YOLO模型,在后处理方面,提出了一致性双重分配策略用于NMS训练,从而实现高效的端到端检测。模型架构方面,引入了全面的效率-准确性驱动模型设计策略,改善了性能和效率。

2. 模型特点

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

在这里插入图片描述
(a) Consistent dual assignments for NMS-free training (b) Frequence of one-to-one assignments in Top-1/5/10 of one-to-many results for YOLOv8-s which employs 𝛼𝑜⁢2⁢𝑜=0.5 and 𝛽𝑜⁢2⁢𝑜=0.6 by default . For consistency, 𝛼𝑜⁢2⁢𝑜=0.5 and 𝛽𝑜⁢2⁢𝑜=0.6. For inconsistency, 𝛼𝑜⁢2⁢𝑜=0.5 and 𝛽𝑜⁢2⁢𝑜=2

双重标签分配 (Dual Label Assignments)

双重标签分配是YOLOv10中提出的一种NMS-free训练策略, 旨在兼顾one-to-many分配的丰富监督信号和one-to-one分配的高效率:

  1. 引入双头结构, 包含一个one-to-many head和一个one-to-one head。这两个head结构相同,
    使用相同的损失函数, 但one-to-many head进行一对多标签分配, one-to-one head进行一对一标签分配。
  2. 训练时, 两个head同时优化, 让backbone和neck享受到one-to-many分配带来的丰富监督信号。
  3. 推理时, 舍弃one-to-many head, 仅使用one-to-one head进行预测。这样既不需要使用NMS后处理, 也不会带来额外的推理开销。
  4. 在one-to-one匹配中, 使用top-1选择, 即为每个gt选择一个最佳正样本, 其性能与使用Hungarian算法相当, 但节省了训练时间。

一致匹配度量(Consistent Match. Metric)

YOLOv10在两个分支中使用统一的matching metric来衡量预测框和GT间的匹配程度,公式为:
在这里插入图片描述
其中s表示空间因子, 即预测框的中心是否落在GT内部; p是分类置信度; b’和b分别是预测框和GT的坐标; α和β是平衡分类和回归任务的超参数。两个分支的α和β记为αA、βA和αB、βB。
为了让B的监督信息与A更加一致, 作者提出令αB = r·αA, βB = r·βA, 即B的超参数是A的r倍。通过数学推导, 可以证明当r=1时, 即αB=αA且βB=βA, 能够最小化A和B在理论上的监督差异。此时B选出的最佳正样本也同时是A的最佳正样本, 两个分支以一种更加协调的方式优化。

一对一分配在一对多结果中的频率

柱状图 (b) 展示了一对一分配在YOLOv8-S中的Top-1/5/10结果中的频率。

蓝色(Inconsistent):表示不一致的情况。
橙色(Consistent):表示一致的情况。

实验设置:
默认参数:对于一对多头(One-to-many head),𝛼𝑜⁢2⁢𝑜=0.5和 𝛽𝑜⁢2⁢𝑜=0.6
一致性参数:对于一对一头(One-to-one head),𝛼𝑜⁢2⁢𝑜=0.5和 𝛽𝑜⁢2⁢𝑜=0.6
非一致性参数:𝛼𝑜⁢2⁢𝑜=0.5和 𝛽𝑜⁢2⁢𝑜=2

从图中可以看出,采用一致性匹配度量的YOLOv8-S在Top-5和Top-10结果中具有更高的一致性频率。

引入Consistent matching metric的原因总结如下:

  1. 缩小Dual Label Assignments中两个分支的理论监督差异, 使其学习目标更加一致。
  2. 通过控制超参数的关系, 让两个分支以更加协调的方式优化, 使one-to-one分支的预测结果更加优质。
  3. 在实验中验证, Consistent matching metric能够显著提升one-to-one分支的性能, 缩小其与one-to-many分支的差距。
  4. 无需针对one-to-one分支额外调参, 大大简化了训练流程。

2.2. 效率-准确性驱动的YOLO模型设计策略

除了后处理,YOLO模型的架构设计对效率-准确性权衡也提出了巨大挑战。尽管之前的研究探索了多种设计策略,但对YOLO各个组件进行全面检查仍然不足。因此,YOLO模型架构表现出明显的计算冗余和受限的能力,阻碍了其在效率和性能方面的潜力。这里,我们旨在从效率和准确性两个方面对YOLO模型进行全面的设计。

在这里插入图片描述

图表 (a) 展示了YOLOv8不同模型(N、S、M、L、X)在各个阶段的内在秩值。每个阶段在骨干网络(backbone)和颈部(neck)中按模型前向过程的顺序编号。
Y轴:表示归一化的数值秩值 r/Co,阈值默认设置为λmax/2 ,其中Co 表示输出通道数,λmax是最大奇异值。
X轴:表示模型的不同阶段,从Stage 1到Stage 8。
观察:可以看到深层阶段和大模型表现出较低的内在秩值。这表明这些阶段和模型可能存在更多的计算冗余。

图 (b) 紧凑反向瓶颈模块(CIB, Compact Inverted Bottleneck),结构说明:
1×1卷积:用于特征的通道转换。
3×3深度卷积(DW):用于特征的空间转换。
CIB模块:通过多层卷积和非线性激活函数进行特征提取和转换。
N个堆叠的CIB模块:可以通过重复堆叠实现更深层次的特征提取。
特点:CIB可以用于替换YOLOv8中内在秩较低阶段的基本模块, 在保持性能的同时降低计算开销。

图 (c`) 部分自注意力模块(PSA),结构说明:
1×1卷积:用于特征的通道转换和分割(split)。
多头自注意力模块(MHSA):用于全局特征建模。
前馈网络(FFN):用于特征变换。
N_psa个堆叠的PSA模块:通过重复堆叠实现更强的特征建模能力。
将特征在channel维度均匀分成两部分, 一部分送入多头自注意力(MHSA)和前馈网络(FFN), 与另一部分concat后用1x1卷积融合。PSA只放在最后一个stage, 在引入全局建模能力的同时控制了计算量。

准确性驱动模型设计

  1. 大核卷积
    采用大核深度卷积是扩大感受野和增强模型能力的有效方式。然而,简单地在所有阶段采用大核卷积可能会对用于检测小物体的浅层特征造成污染,同时在高分辨率阶段引入显著的I/O开销和延迟。因此,我们建议在CIB的深层阶段中使用大核深度卷积。具体来说,我们将CIB中第二个3×3深度可分离卷积的核尺寸增大到7×7。此外,我们采用结构重新参数化技术,在不增加推理开销的情况下添加另一个3×3深度可分离卷积分支,以缓解优化问题。此外,随着模型规模的增加,其感受野自然扩展,使用大核卷积的好处会减小。因此,我们仅在小规模模型中采用大核卷积。

  2. 部分自注意力(PSA)
    自注意力由于其出色的全局建模能力在各种视觉任务中得到了广泛应用。然而,它具有较高的计算复杂度和内存占用。为了解决这个问题,鉴于注意力头冗余的普遍性,论文提出了一种高效的部分自注意力模块设计。 旨在以较低的计算开销捕获全局依赖关系, 提升模型的特征表示能力。

效率驱动模型设计

YOLO的组件包括起始层、下采样层、具有基本构建块的各阶段以及头部。由于起始层的计算成本较低,因此我们主要针对其他三个部分进行效率驱动的模型设计。

  1. 轻量级分类头
    在YOLO中,分类头和回归头通常共享相同的架构。然而 ,它们在计算开销上存在显著差异。例如,在YOLOv8-S中,分类头的FLOPs和参数数量分别是回归头的2.5倍和2.4倍。然而,通过分析分类错误和回归错误对性能的影响,我们发现回归头对YOLO性能的影响更大。因此,我们可以减少分类头的开销而不会显著影响性能。因此,我们采用了轻量级架构的分类头,它由两个3×3的深度可分离卷积和一个1×1卷积组成。

  2. SCDown
    Spatial-channel decoupled downsampling (空间-通道解耦下采样)是YOLOv10中提出的一种提高下采样效率的方法。
    采用depthwise卷积进行spatial mixing, pointwise卷积进行channel mixing, 是一种计算高效的模块。即首先利用点卷积调节通道维度,然后利用深度可分离卷积进行空间下采样。
    Spatial-channel decoupled downsampling是YOLOv10中提出的一种提高下采样效率的方法。
    采用depthwise卷积进行spatial mixing, pointwise卷积进行channel mixing, 是一种计算高效的模块。即首先利用点卷积调节通道维度,然后利用深度可分离卷积进行空间下采样。

  3. 基于秩的模块设计
    内在秩(Intrinsic Rank)是评估卷积层冗余度的一个指标, 它反映了卷积核张量的有效维度。作者提出了一种秩引导的模块替换策略(Rank-guided Block Design)。即针对内在秩较低的阶段, 将原有的基础模块替换为更加轻量化的CIB模块。总的来说, 内在秩度量了卷积层的信息冗余程度, 是一个简洁而有效的指标。

总结:yolov10是在yolov8的基础上做了改进,如下图第5步SC-Down、第8步C2f-CIB、第10步PSA、第23步预测头部等。


在这里插入图片描述
在这里插入图片描述

模型对比图
(图片来自B站白老师人工智能学堂)

3. 参考文章

  1. 【YOLO系列】YOLOv10论文超详细解读(翻译 +学习笔记)

  2. YOLOv10 正式发布!原理、部署、应用一站式齐全

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

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

相关文章

C++基础:第一个C++程序

初学C #include<iostream> int main() {std::cout << "Enter two numbers:" << std::endl;int v1 0, v2 0;std::cin >> v1 >> v2;std::cout << "The sum of "<< v1 << " and " << v2&…

Ubuntu磁盘不足扩容

1.问题 Ubuntu磁盘不足扩容 2.解决方法 安装一下 sudo apt-get install gpartedsudo gparted

JavaWeb--小白笔记07:servlet对表单数据的简单处理

这里的servlet对表单数据的处理是指使用IDEA创建web工程&#xff0c;再创建html和class文件进行连接&#xff0c;实现html创建一个表单网页&#xff0c;我们对网页中的表单进行填充&#xff0c;可以通过class文件得到网页我们填充的内容进行打印到控制台。 一登录系统页面---h…

【速成Redis】04 Redis 概念扫盲:事务、持久化、主从复制、哨兵模式

前言&#xff1a; 前三篇如下&#xff1a; 【速成Redis】01 Redis简介及windows上如何安装redis-CSDN博客 【速成Redis】02 Redis 五大基本数据类型常用命令-CSDN博客 【速成Redis】03 Redis 五大高级数据结构介绍及其常用命令 | 消息队列、地理空间、HyperLogLog、BitMap、…

自然语言处理-基于注意力机制的文本匹配

背景&#xff1a; 任务三&#xff1a;基于注意力机制的文本匹配 输入两个句子判断&#xff0c;判断它们之间的关系。参考ESIM&#xff08;可以只用LSTM&#xff0c;忽略Tree-LSTM&#xff09;&#xff0c;用双向的注意力机制实现。 参考 《神经网络与深度学习》 第7章 Reaso…

rar文件怎么打开?这几款软件压缩和查看很方便!

在这个数字化信息爆炸的时代&#xff0c;我们每天都会接触到各种各样的文件&#xff0c;其中RAR格式文件以其高压缩率和良好的文件保护特性&#xff0c;成为了许多人分享和存储大文件的首选。然而&#xff0c;面对这样一个看似“神秘”的文件格式&#xff0c;不少朋友可能会感到…

如何基于Flink CDC与OceanBase构建实时数仓,实现简化链路,高效排查

本文作者&#xff1a;阿里云Flink SQL负责人&#xff0c;伍翀&#xff0c;Apache Flink PMC Member & Committer 众多数据领域的专业人士都很熟悉Apache Flink&#xff0c;它作为流式计算引擎&#xff0c;流批一体&#xff0c;其核心在于其强大的分布式流数据处理能力&…

简单多状态dp第一弹 leetcode -面试题17.16.按摩师 -213.打家劫舍II

a​​​​​​​面试题 17.16. 按摩师 按摩师 题目: 分析: 使用动态规划解决 状态表示: dp[i] 表示&#xff1a;选择到 i 位置时&#xff0c;此时的最长预约时长。 但是我们这个题在 i 位置的时候&#xff0c;会面临 选择 或者 不选择 两种抉择&#xff0c;所依赖的状态需要…

大数据Flink(一百二十四):案例实践——淘宝母婴数据加速查询

文章目录 案例实践——淘宝母婴数据加速查询 一、​​​​​​​创建数据库表并导入数据 二、​​​​​​​​​​​​​​创建session集群 三、​​​​​​​​​​​​​​源表查询 四、​​​​​​​​​​​​​​指标计算 案例实践——淘宝母婴数据加速查询 随着…

GS-SLAM论文阅读笔记--GLC-SLAM

前言 最近GS-SLAM回环检测的工作已经逐步发展了&#xff0c;看一下这篇新文章。 文章目录 前言1.背景介绍2.关键内容2.1 tracking2.2 local mapping2.3 Loop Closing2.4总体流程 3.文章贡献 1.背景介绍 现有的基于3dgs的SLAM方法往往存在累积的跟踪误差和地图漂移&#xff0c…

【后端开发】JavaEE初阶—线程安全问题与加锁原理(超详解)

前言&#xff1a; &#x1f308;上期博客&#xff1a;【后端开发】JavaEE初阶—Theard类及常见方法—线程的操作&#xff08;超详解&#xff09;-CSDN博客 &#x1f308;感兴趣的小伙伴看一看小编主页&#xff1a;GGBondlctrl-CSDN博客 &#x1f308;小编会在后端开发的学习中不…

Java反射机制入门:解锁运行时类信息的秘密

反射技术&#xff1a; 其实就是对类进行解剖的技术 类中有什么&#xff1f;构造方法 成员方法成员变量 结论&#xff1a;反射技术就是把一个类进行了解剖&#xff0c;然后获取到 构造方法、成员变量、成员方法 反射技术的应用案例&#xff1a; idea框架技术&#xff1a;Spr…

通过document获取节点元素

1.层级节点 <ul><li id"li1">1</li><li>2</li><li id"li3">3</li><li>4</li><li>5</li></ul><script>//获取id名为li1的元素赋值给li1let li1document.getElementById(li…

爬虫----webpack

目录 一. 什么是webpack 出现的原因&#xff1a;同名函数 概念: 特征&#xff1a;大量缩进 webpack的格式 简单的webpack格式&#xff1a; 详细的webpack格式&#xff1a; 几个参数的运用 1. webpack数组形式 2. webpack对象格式 3.多个js文件打包 打印要扣的代码 …

【chromedriver编译-绕过selenium机器人检测】

有小伙伴说使用selenium没能绕过机器人检测&#xff0c;盘他。 selenium机器人检测有2种&#xff0c;一是cdp检测&#xff0c;二是webdriver特征检测。cdp检测前面的博客已写过&#xff0c;这里就提下webdriver特征检测。一、selenium简介 Selenium 是一个强大的工具&#xff…

单片机带隙电压基准电路

单片机带隙电压基准电路 一、带隙电压基准电路概述 带隙电压基准电路在单片机中占据着至关重要的地位。它能够为各种模拟集成电路提供稳定的参考电压&#xff0c;确保电路的正常运行。例如&#xff0c;在高精度的比较器中&#xff0c;带隙电压基准电路可以提供一个精确的参考…

linux 的 sed 命令的 使用学习

&#xff08;1&#xff09; sed 概述&#xff1a; &#xff08;2&#xff09; 首先谢谢 b 站这位老师&#xff0c;这位专家的完美讲解 讲解继续&#xff1a; &#xff08;3&#xff09; 关于 sed 里的模式&#xff1a; &#xff08;4&#xff09; sed 支持的常用的对文本编辑的…

Matlab|考虑柔性负荷的综合能源系统低碳经济优化调度

目录 1 主要内容 2 部分代码 3 程序结果 4 下载链接 1 主要内容 程序主要实现的是考虑柔性负荷的综合能源系统低碳经济优化调度&#xff0c;模型参考《考虑柔性负荷的综合能源系统低碳经济优化调度》&#xff0c;求解方法采用的是混合整数规划算法&#xff0c;通过matlabc…

【设计模式】UML类图

目录 前言 一、类图概述 二、类图的作用 三、类图表示法 四、类之间关系的表示方法 1. 关联关系 1.1 单向关联 1.2 双向关联 1.3 自关联 2. 聚合关系 3. 组合关系 4. 依赖关系 5. 继承关系 6. 实现关系 总结 前言 统一建模语言&#xff08; Unified Modeling La…

如何快速上手一个Github的开源项目

程序研发领域正是有一些热衷开源的小伙伴&#xff0c;技能迭代才能如此的迅速&#xff0c;因此&#xff0c;快速上手一个GitHub上的开源项目&#xff0c;基本上已经变成很个程序员小伙伴必须掌握的技能&#xff0c;因为终究你会应用到其中的一个或多个项目&#xff0c;帮助自己…