当前位置: 首页 > news >正文

YOLOv10 论文学习

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

解决了什么问题?

实时目标检测是计算机视觉领域的研究焦点,目的是以较低的延迟准确地预测图像中各物体的类别和坐标。它广泛应用于自动驾驶、机器人导航和目标跟踪等任务。近些年来,研究人员基本聚焦于 CNN 目标检测器,从而实现实时检测。由于 YOLO 能很好地平衡计算成本和检测表现,它已经成为了实时目标检测的主流方法。YOLO 的检测流程包括两个部分:模型前向计算和 NMS 后处理。这两个部分到现在仍然有一些缺陷,没达到准确率-效率的最优解。

YOLOs 在训练时通常使用“一对多”的标签分配策略,一个 ground-truth 目标会被分配给多个正样本。尽管表现不错,但它在推理时仍要通过 NMS 来选取最佳的正样本。这就降低了推理速度,模型表现对 NMS 的超参数很敏感,使 YOLO 无法实现端到端的部署。一个解决办法就是采用端到端 DETR 的架构。RT-DETR 提出了高效的混合编码器和最低不确定性的 qeury selection,促进了 DETR 的实时应用。但是,DETR 的复杂度很高,使它无法最优地平衡准确率和速度。另一个办法就是研究 CNN 端到端的目标检测器,通常使用“一对一”的标签分配策略,抑制重复的预测。但是,这会造成额外的推理开支或表现不佳。

此外,模型架构设计也很关键,它会影响准确率和推理速度。为了找到更高效的模型结构,研究人员探索了不同的设计策略。针对主干网络,人们提出了不同的基础计算单元来增强特征提取能力,比如 DarkNet、CSPNet、EfficientRep、ELAN 等。对于 neck 结构,人们提出了 PAN、BiC、GD 和 RepGFPN 来增强多尺度特征融合能力。此外,人们也研究了模型缩放策略和重参数化技术。尽管这些努力取得了显著的提升,但还是缺乏一个关于 YOLO 效率和准确率的全面研究。在 YOLOs 中仍然存在明显的计算冗余,使参数利用率不高,效率并非最佳的。

本文在后处理和模型架构方面,进一步发掘了 YOLO 的表现和效率的边界。为了在训练中省去 NMS,作者提出了双标签分配策略和一致的匹配度量,这样模型能在训练时获得丰富且均衡的监督信号,推理时无需 NMS,从而改善了表现、降低了推理延迟。此外,作者针对 YOLO 提出了全面的效率-准确率驱动的模型设计策略。本文从效率和准确率的角度出发,优化了 YOLO 的多个部分,极大地降低了计算成本、增强了模型能力。在效率方面,作者提出了一个轻量级的分类头、空间-通道解耦下采样、rank-guided 模块设计,从而降低计算冗余,使结构更加高效。在准确率方面,作者研究了大卷积核,提出了有效的局部自注意力模块,增强模型的能力。

实验表明,各版模型大小的 YOLOv10 都取得了 SOTA 的表现和效率。例如,在 COCO 上,YOLOv10-S 要比 RT-DETR-R18 快 1.8 × 1.8\times 1.8× 倍,但 AP 相似,而且参数量和 FLOPs 要小 2.8 × 2.8\times 2.8× 倍。与 YOLOv9-C 相比,在表现接近的情况下,YOLOv10-B 的延迟要低 46 % 46\% 46%,参数量要少 25 % 25\% 25%

提出了什么方法?

Consistent Dual Assignments for NMS-free Training

训练时,YOLOs 通常利用 TAL 为每个实例分配多个正样本。该“一对多”的分配策略会产生充足的监督信号,促进模型的优化和表现。但是,YOLOs 就必须依赖 NMS 后处理,部署时的推理效率就不是最优的。尽管之前的工作研究了“一对一”的匹配策略,抑制重复的预测,它们通常会增加推理成本,表现非最优。本文提出了一个无需 NMS 的策略,即双标签分配和一致的匹配度量,实现最优的效率和表现。

Dual Label Assignment

与“一对多”的分配策略不同,“一对一”的匹配策略为每个 ground-truth 分配一个预测框,避免了 NMS 后处理。但是,它会弱化监督信号,降低了准确率和收敛速度。幸运的是,我们可以通过“一对多”的分配策略来补偿该缺陷。作者为 YOLO 引入了双标签分配策略,结合了这俩策略的优点。如下图(a)所示,作者在 YOLOs 中融合了另一个“一对一”的 head。它保留了和原本“一对多”分支一样的结构,采用了相同的优化目标函数,但是利用了“一对一”的匹配策略来完成标签分配。训练时,两个 heads 协同优化,使主干网络和 neck 能获得“一对多”分配机制提供的丰富的监督信号。推理时,作者没有用“一对多”的 head,只使用了“一对一”的 head 做预测。这使得端到端部署 YOLO 时不会增加推理成本。此外,在“一对一”的匹配时,作者采用了 top-1 选项,取得的表现和匈牙利匹配一样,额外的训练时间要更少。

Consistent Matching Metric

分配时,“一对一”和“一对多”的方法都采用了一个度量,从而对预测框和 ground-truths 之间的一致性做量化评估。作者使用了一个一致的匹配度量:

m ( α , β ) = s ⋅ p α ⋅ IoU ( b ^ , b ) β m(\alpha, \beta)=s\cdot p^\alpha \cdot \text{IoU}(\hat{b},b)^\beta m(α,β)=spαIoU(b^,b)β

其中 p p p是分类得分, b ^ \hat{b} b^ b b b表示预测框和 ground-truth 框。 s s s表示空间先验,预测框的 anchor point 是否在 ground-truth 内。 α \alpha α β \beta β是两个重要超参数,平衡类别预测任务和定位回归任务的影响力。将“一对多”和“一对一”度量分别记做 m o 2 m = m ( α o 2 m , β o 2 m ) m_{o2m}=m(\alpha_{o2m}, \beta_{o2m}) mo2m=m(αo2m,βo2m) m o 2 o = m ( α o 2 o , β o 2 o ) m_{o2o}=m(\alpha_{o2o}, \beta_{o2o}) mo2o=m(αo2o,βo2o)。这些度量会影响两个 heads 的标签分配和监督信息。

在双标签分配策略,“一对多”分支要比“一对一”分支提供更加丰富的监督信号。如果我们能使“一对一” head 的监督信号和“一对多” head 提供的信号一致,我们可以让“一对一” head 朝着“一对多” head 的优化方向来做优化。这样在推理时,“一对一” head 能提供更高质量的样本,表现就会更好。作者首先分析了这两个 heads 监督信号之间的差距。由于训练的随机性,作者用相同的值来初始化这俩 heads,产生相同的预测结果,也就是说,对于每对预测-ground-truth,“一对一” head 和“一对多” head 输出相同的 p p p IoU \text{IoU} IoU。作者发现,这两个分支的回归目标互不冲突,因为匹配上的预测框会共享 ground-truth,而没有匹配上的框会被忽略掉。所以,监督差异就存在于分类目标。给定一个 ground-truth,我们将和预测框 IoU \text{IoU} IoU 最高的 ground-truth 记做 u ∗ u^\ast u,“一对多”和“一对一”最高的匹配分数记做 m o 2 m ∗ m_{o2m}^\ast mo2m m o 2 o ∗ m_{o2o}^\ast mo2o。假设“一对多”分支输出的正样本集合为 Ω \Omega Ω,“一对一”分支选取度量值为 m o 2 o = m o 2 o ∗ m_{o2o}=m_{o2o}^\ast mo2o=mo2o 的第 i i i个预测框,然后我们可以推导 TAL 的分类目标为 t o 2 m , j = u ∗ ⋅ m o 2 m , j m o 2 m ∗ ≤ u ∗ , j ∈ Ω t_{o2m,j}=u^\ast \cdot \frac{m_{o2m,j}}{m_{o2m}^\ast}\leq u^\ast,\quad j\in \Omega to2m,j=umo2mmo2m,ju,jΩ t o 2 o , i = u ∗ ⋅ m o 2 o , i m o 2 o ∗ ≤ u ∗ , j ∈ Ω t_{o2o,i}=u^\ast \cdot \frac{m_{o2o,i}}{m_{o2o}^\ast}\leq u^\ast,\quad j\in \Omega to2o,i=umo2omo2o,iu,jΩ。这两个分支的监督差异因此就可以用不同分类目标函数的 1-Wasserstein 距离来推导,

A = t o 2 o , i − I ( i ∈ Ω ) t o 2 m , i + ∑ k ∈ Ω \ { i } t o 2 m , k A=t_{o2o,i}-\mathbb{I}(i\in \Omega)t_{o2m,i} + \sum_{k\in\Omega \backslash \{i\}} t_{o2m,k} A=to2o,iI(iΩ)to2m,i+kΩ\{i}to2m,k

我们可以发现该差距会随着 t o 2 m , i t_{o2m,i} to2m,i增长而减少,即在 Ω \Omega Ω i i i 的排序比较高。当 t o 2 m , i = u ∗ t_{o2m,i}=u^\ast to2m,i=u 时,它达到最低,即它是 Ω \Omega Ω 中最优的正样本,如上图(a)所示。作者提出了一致的匹配度量,即 α o 2 o = r ⋅ α o 2 m \alpha_{o2o}=r\cdot \alpha_{o2m} αo2o=rαo2m β o 2 o = r ⋅ β o 2 m \beta_{o2o}=r\cdot \beta_{o2m} βo2o=rβo2m,也就是说 m o 2 o = m o 2 m r m_{o2o}=m_{o2m}^r mo2o=mo2mr。因此,“一对多” head 的最佳正样本也是“一对一” head 的最佳正样本。于是,这俩 heads 都能一致地被优化。为了简洁,作者默认地取 r = 1 r=1 r=1,即 α o 2 o = α o 2 m \alpha_{o2o}=\alpha_{o2m} αo2o=αo2m β o 2 o = β o 2 m \beta_{o2o}=\beta_{o2m} βo2o=βo2m。为了验证该监督对齐后的效果,作者在“一对多”匹配的结果里,数了“一对一”匹配上 top-1/5/10 的样本对。如上图2(b) 所示,有了一致的匹配度量后,对齐效果得到改善。

Holistic Efficiency-Accuracy Driven Model Design

除了后处理,YOLO 模型的结构也是一个挑战。尽管之前的工作研究了各种设计策略,但仍欠缺一个对 YOLO 各构成的系统全面的分析。模型架构带来不可忽视的计算冗余,制约了性能。于是,作者从效率和准确率的角度,系统地分析了模型架构的设计。

Efficiency driven model design

YOLO 由 stem、下采样层、基础构建模块构成的 stages 和 head 组成。Stem 带来的计算成本不多,因此作者从另外三个部分下手。

轻量级的分类 head

在 YOLO 中,分类和回归 heads 通常共享相同的结构。但是,它们的计算成本是明显不同的。例如,在 YOLOv8-S 中,分类 head 的计算量和参数量( 5.95 G / 1.51 M 5.95G/1.51M 5.95G/1.51M)是回归 head ( 2.34 G / 0.64 M 2.34G/0.64M 2.34G/0.64M)的 2.5 × 2.5\times 2.5× 2.4 × 2.4\times 2.4×。但是,分析了分类损失和回归损失的影响后,作者发现回归 head 在 YOLO 的表现上要承担更加重要的角色。因此,作者可以降低分类 head 的成本,而无需担心表现变差。所以,作者只为分类 head 使用了一个轻量级的结构,包括两个深度可分离卷积(核大小是 3 × 3 3\times 3 3×3),后面是一个 1 × 1 1\times 1 1×1卷积。

空间-通道解耦下采样

YOLOs 通常使用标准的 3 × 3 3\times 3 3×3 卷积,步长为 2 2 2,同时做空间下采样(从 H × W H\times W H×W变到 H 2 × W 2 \frac{H}{2}\times \frac{W}{2} 2H×2W)和通道变换(从 C C C 变成 2 C 2C 2C)。这回引入的计算量约为 O ( 9 2 H W C 2 ) \mathcal{O}(\frac{9}{2}HWC^2) O(29HWC2),参数量约为 O ( 18 C 2 ) \mathcal{O}(18C^2) O(18C2)。相反,作者提出将空间尺寸降低和通道增加的操作解耦,使下采样更加高效。首先利用 pointwise 卷积来调节通道维度,然后利用深度卷积来进行空间下采样。这就将计算成本降低到了 O ( 2 H W C 2 + 9 2 H W C ) \mathcal{O}(2HWC^2+\frac{9}{2}HWC) O(2HWC2+29HWC),参数量为 O ( 2 C 2 + 18 C ) \mathcal{O}(2C^2 + 18C) O(2C2+18C)。同时在下采样时最大可能地保留信息,提升表现,降低延迟。

Rank-guided block design

YOLOs 通常会在多个 stages 中用到相同的结构,比如 YOLOv8 的 bottleneck block。为了彻底地验证该设计,作者使用了 intrinsic rank 来分析每个 stage 的冗余性。作者计算每个 stage 最后一个基础模块的最后一个卷积的数值 rank,计数超过特定阈值的奇异值个数。下图(a) 展示了 YOLOv8,表明较深的 stages 和较大的模型存在更多的冗余。这个观察表明,给所有的 stages 简单地添加更多的相同模块并不是最优的。于是,作者提出了 rank-guided 模块设计,目的是降低冗余 stages 的复杂度。如下图b 所示,作者首先提出了一个紧凑的倒转模块(CIB)结构,采用廉价的深度卷积做空间混合,pointwise 卷积做通道混合。它可以作为基础构建模块用,嵌入到 ELAN 结构中。然后,作者提出了 rank-guided 模块分配策略来实现最优的效率,而保持模型性能。给定一个模型,我们根据 intrinsic rank 将所有的 stages 做升序排序。作者用 CIB 替换第一个 stage 的基础模块,进一步校验表现差异。如果表现没有退化,我们就在下一个 stage 继续该替换,不然就停止替换。因此,我们能跨 stages 和模型尺度,实现一个自适应的模块设计,实现更高的计算效率,而不会牺牲准确率。

Accuracy driven model design

作者进一步研究了大卷积核的卷积和自注意力,以最低的代价提升模型表现。

大卷积核卷积
大卷积核的深度卷积能有效地扩大感受野,增强模型表现。但是,直接在 stages 中使用它们会污染检测小目标的浅层特征,也会增加高分辨率 stages 的 I/O 开支和延迟。所以,作者提出在深度 stages 的 CIB 中使用大卷积核的深度卷积。作者增加 CIB 的第二个 3 × 3 3\times 3 3×3 深度卷积的卷积核大小为 7 × 7 7\times 7 7×7。此外,作者使用了结构重参数化技术,加入了另一个 3 × 3 3\times 3 3×3 深度卷积分支,降低优化难度,而不会增加推理代价。此外,由于模型大小增加,感受野自然地就变大了,使用大卷积核卷积的优势就没了。所以,作者只在小模型使用了大卷积核。

Partial self-attention
自注意力被广泛使用在各视觉任务上。但是,它带来的计算复杂度和内存占用都太高了。于是,作者提出了一个高效的局部自注意力模块设计,如上图© 所示。在 1 × 1 1\times 1 1×1 卷积后,作者将特征平均地拆分成两个部分。作者只将一个部分输入进由 multi-head 自注意力和 FFN 组成的 N P S A N_{PSA} NPSA 模块。这俩部分然后 concat 一起,输入一个 1 × 1 1\times 1 1×1 卷积。此外,为了提高推理速度,在 MHSA 中,query 和 key 的维度是 value 的一半,将 LayerNorm 替换为了 BatchNorm。PSA 只放在了分辨率最低的 Stage 4 后,避免自注意力了高复杂度计算成本。这样,YOLO 中就加入了全局表征学习的能力,而且计算代价最低,很好地增强了模型能力,提升表现。

相关文章:

  • 一.架构设计
  • 互联网十万个为什么之什么是虚拟化?
  • kubenetes中K8S的命名空间状态异常强制删除Terminating的ns
  • 架构师必考题--软件系统质量属性
  • 【蓝桥杯】国赛普及-
  • 变分自动编码器(VAE)深入理解与总结
  • ffplay 使用文档介绍
  • js 生成二维码
  • Spring Boot:SpringBoot 如何优雅地定制JSON响应数据返回
  • 民国漫画杂志《时代漫画》第16期.PDF
  • 虹科Pico汽车示波器 | 免拆诊断案例 | 2012 款雪佛兰科鲁兹车偶尔多个故障灯异常点亮
  • 27【Aseprite 作图】盆栽——拆解
  • 重学java 43.多线程 多等待多唤醒案例
  • 智能家居完结 -- 整体设计
  • 汽车以太网发展现状及挑战
  • Android交互
  • Git 使用集
  • Javascript编码规范
  • leetcode讲解--894. All Possible Full Binary Trees
  • python3 使用 asyncio 代替线程
  • tab.js分享及浏览器兼容性问题汇总
  • Transformer-XL: Unleashing the Potential of Attention Models
  • WebSocket使用
  • 初识 webpack
  • 给Prometheus造假数据的方法
  • 基于MaxCompute打造轻盈的人人车移动端数据平台
  • 浏览器缓存机制分析
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 盘点那些不知名却常用的 Git 操作
  • 如何解决微信端直接跳WAP端
  • 如何设计一个微型分布式架构?
  • 设计模式 开闭原则
  • 通过几道题目学习二叉搜索树
  • 小程序滚动组件,左边导航栏与右边内容联动效果实现
  • 阿里云服务器购买完整流程
  • #NOIP 2014#day.2 T1 无限网络发射器选址
  • #Z0458. 树的中心2
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • (1) caustics\
  • (1)Jupyter Notebook 下载及安装
  • (STM32笔记)九、RCC时钟树与时钟 第二部分
  • (附源码)springboot码头作业管理系统 毕业设计 341654
  • (附源码)springboot掌上博客系统 毕业设计063131
  • (接口自动化)Python3操作MySQL数据库
  • (没学懂,待填坑)【动态规划】数位动态规划
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、Prompt提示词优化实战
  • (转)可以带来幸福的一本书
  • .【机器学习】隐马尔可夫模型(Hidden Markov Model,HMM)
  • .apk 成为历史!
  • .net Application的目录
  • .net打印*三角形
  • .NET分布式缓存Memcached从入门到实战
  • .net实现客户区延伸至至非客户区
  • .net中生成excel后调整宽度