【论文阅读笔记】YOLOv10: Real-Time End-to-End Object Detection

news2024/9/21 0:38:02

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

文章目录

  • 论文小结
  • 论文简介
  • 论文方法
    • 为NMS-free训练的一致性双标签分配
      • 双标签分配
      • 一致性匹配度量
    • 效率-精度整体驱动的模型设计
      • 效率驱动模型设计
        • 轻量级分类检测头
        • Spatial-channel 解耦下采样
        • Rank-guided block design
      • 精度驱动模型设计
        • 大Kernel卷积
        • Attention
  • 论文实验
    • 对比实验
    • 消融实验
      • 模块消融实验
      • NMS-free训练实验
      • 效率驱动模型设计
      • 精度驱动模型设计

论文小结

  简单来说,本文介绍了一个无NMS后处理的检测方法,并在COCO数据集上达到与NMS-based的方法一致的精度。因为无NMS,所以速度更快
  一般情况来说,一对一(gt object VS positive sample, o2o)的标签分配策略会导致模型收敛性能较低。作者提出使用一对多(o2m)的标签分配策略来辅助训练,并提出一个一致性指标来协调o2o标签和o2m标签。

  此外,文中提出使用dwConv加速模型推理,使用基于dwConv的attention来提升精度。同时,作者对分类检测头和回归检测头进行消融实验,明确分类检测头存在优化空间

论文简介

  YOLO系列的前作基本都含有网络的前馈部分以及NMS后处理部分。使用NMS的原因是因为o2m的标签分配策略(单个GT框对应多个正样本训练,也是平衡正负样本的一种方式)会导致预测时产生密集正样本,需要在最后选出最佳预测。此外,NMS对参数敏感,也让YOLO无法实现最佳端到端部署。

  摆脱NMS的限制有两个思路:

  1. 采用端到端的DETR架构。采用混合模型将DETR推向实时应用领域,如RT-DETR。此种方法复杂度高
  2. 探索端到端的CNN-based检测器,使用one-to-one的标签分配方式。

  有一些论文探索了端到端的CNN-based检测器,但由于缺乏像one-to-many标签分配的大量监督信息,最终检测器的性能差点意思。作者为NMS-free YOLO提出了双标签分配策略一致性匹配度量。简单来说,就是使用o2m的作为辅助监督分支,从而为网络训练提供大量监督信息。然后再提出一个指标来让辅助监督与推理时的o2o分支监督和谐

  作者在模型架构设计上,从效率和性能上分别进行考虑。
  从效率上来说,作者做了三点优化:

  1. 作者发现分类检测头的重要性不如回归检测头,所以对分类检测头进行了优化;
  2. 下采样层做了优化。一般使用下采样卷积的时候,会同时提升channel,这会在较高分辨率多进行计算。所以作者采用dwConv的策略,即使用pwConv升channel,使用dwConv下采样;
  3. 排序引导块设计。简单来说,对block的重要性进行排序,逐步进行高效率block的替换,直至性能有所下降;

  从性能上考虑,作者也做了两点尝试:

  1. 大kernel卷积的应用。但即使是大核dwConv,也会带来不少计算量的增加,降低延迟。故作者选择在网络的后半部分应用;
  2. attention的应用。attention的设计是transformer block的样式,但由于复杂度较高,所以在attention的输入上做了个channel split处理,以降低计算量;

  速度的测试是在Tesla T4 GPU上进行的,性能和效率如上图1所示。对比YOLOv8,YOLOv10的参数量和AP都要更优;对比YOLOv9,YOLOv10的参数量更低,速度更快

论文方法

为NMS-free训练的一致性双标签分配

双标签分配

  在前作的YOLOs中,经常使用TAL方法为每个实例分配多个正样本。这种一对多分配会产生大量监督信号,帮助模型优化和达到优秀性能。这也让YOLOs依赖于NMS后处理。
  一对一分配只有一个预测对应GT来避免NMS后处理,这就导致了弱监督,进而导致次优精度和次优收敛速度。其他作者的一对一分配方法,通常需要引入额外的推理开销或产生次优性能

  本文提出的NMS-free训练方法,是使用双标签分配及使用一致性匹配度量来达到高效高性能的结果。换句话说,是在训练时使用双检测头分支,一个o2o分支,一个o2m分支,如下图所示。如此设计,backbone和neck能充分接受o2m标签分配带来的大量监督信息,且在推理时丢弃o2m分支即可。

一致性匹配度量

  使用一个指标来量化预测和实例之间的一致性水平,如下面公式所示:其中 b ^ \hat{b} b^为预测框, b b b为实例框, s s s是空间先验(anchor point), α \alpha α β \beta β是平衡因子。o2o( m o 2 o = m ( α o 2 m , β o 2 m ) m_{o2o}=m(\alpha_{o2m}, \beta_{o2m}) mo2o=m(αo2m,βo2m))和o2m( m o 2 m = m ( α o 2 o , β o 2 o ) m_{o2m}=m(\alpha_{o2o}, \beta_{o2o}) mo2m=m(αo2o,βo2o))分开统计该度量。
m ( α , β ) = s ⋅ p α ⋅ I O U ( b ^ , b ) β m(\alpha,\beta)=s\cdot p^{\alpha} \cdot {IOU}(\hat{b}, b)^{\beta} m(α,β)=spαIOU(b^,b)β

  作者发现o2m和o2o分支的监督差异主要在不同分类目标上面。其中,预测最大的IoU为 u ∗ u^\ast u,最大的o2m和o2o分别为 m o 2 m ∗ 和 m o 2 o ∗ m^\ast_{o2m}和m^\ast_{o2o} mo2mmo2o,假定o2m产生的正样本集为 Ω \Omega Ω,o2o分支选择第 i i i个预测的指标 m o 2 o , i = m o 2 o ∗ m_{o2o,i}=m^\ast_{o2o} mo2o,i=mo2o。我们获得的分类目标 t o 2 m , i = u ∗ ⋅ m o 2 m , j m o 2 m ∗ < u ∗ t_{o2m,i}=u^{\ast}\cdot \dfrac{m_{o2m,j}}{m^\ast_{o2m}}\lt u^\ast to2m,i=umo2mmo2m,j<u对于 j ∈ Ω j\in\Omega jΩ t o 2 o , i = u ∗ ⋅ m o 2 o , i m o 2 o ∗ = u ∗ t_{o2o,i}=u^\ast\cdot\dfrac{m_{o2o,i}}{m^\ast_{o2o}}=u^\ast to2o,i=umo2omo2o,i=u。两个分支的监督差距由 1 - Wasserstein距离1获得。

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

  上述公式(1),当 t o 2 m , i t_{o2m,i} to2m,i上升时,gap会下降。当 t o 2 m , i = u ∗ t_{o2m,i}=u^\ast to2m,i=u时,gap达到最小,如上面的图2(a)所示。o2o和o2m的两个权重参数 α \alpha α β \beta β之间也存在关系,作者认为应该 α 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,即 r r r为一样的。故o2m最好的正样本,也是o2o检测最好的。因此两个检测头可以持续和谐地优化。为简化,作者设 r = 1 r=1 r=1

  一致性匹配的作用如上图2(b)所示。

效率-精度整体驱动的模型设计

效率驱动模型设计

轻量级分类检测头

  在YOLO系列中,分类头和回归头通常用一样的架构。但其表现出不一样的计算量。在类别较多时,分类头的计算量是回归头的好几倍。以YOLOv8为例,分类图的参数量和计算量是检测头的2.5倍和2.4倍。但从下表的消融实验结果来看,回归头承担了YOLOs大部分的性能,故作者打算简化分类头。使用2个dwCon 3 × 3 3\times3 3×3接着1个Conv 1 × 1 1\times1 1×1来组成分类头。

Spatial-channel 解耦下采样

  常规的下采样是使用 stride 为 2 2 2的Conv 3 × 3 3\times3 3×3,同时让channel变为输入的 2 2 2倍。在高分辨率进行更多的卷积,这会导致计算量较大。所以作者采用如下方案进行下采样:使用Conv 1 × 1 1\times1 1×1升channel,使用dwConv 3 × 3 3\times3 3×3下采样。这让计算量从 O ( 9 2 H W C 2 ) \Omicron(\frac92HWC^2) O(29HWC2)降到 O ( 2 H W C 2 + 9 2 H W C ) \Omicron(2HWC^2+\frac92HWC) O(2HWC2+29HWC),参数量从 O ( 18 C 2 ) \Omicron(18C^2) O(18C2)降到 O ( 2 C 2 + 18 C ) \Omicron(2C^2+18C) O(2C2+18C)

Rank-guided block design

  YOLOs经常在不同的stage中使用一样的基础block。作者统计每个stage上最后一个基础block的最后一个Conv,统计大于阈值的数量。统计结果如下图3(a)所示,深stage和大模型有更多的冗余。这表示简单应用一样的block是次优的,有冗余的。

  作者首先设计了一个紧凑可逆块(Compact Invert Block,CIB),主要是采用了dwConv和pwConv,如上图3(b)。以此block为基础,构建ELAN block等复杂Block。

  然后,作者提出一种排序引导的block分配策略,即按照图3(a)这样的统计顺序,一步步将冗余度较高的stage进行基础block的替换,直到性能下降为止。伪代码如下图所示

精度驱动模型设计

大Kernel卷积

  大Kernel dwConv能扩大感受野,加强模型容量。但简单应用它们可能会导致用于检测小目标的浅层特征受到污染。同时,在高分辨率阶段应用会带来 I/O 开销和延迟。所以,作者选择只在深层stage的CIB中使用大kernel dwConv。具体来说,是从dwConv 3 × 3 3\times3 3×3提升到dwConv 7 × 7 7\times7 7×7。此外,加入重参数分支dwConv 3 × 3 3\times3 3×3来缓解优化问题

  当深度增加时,感受野自然会扩大。所以,作者选择只在小尺度模型上应用大kernel卷积。

Attention

  本文使用的attention叫做 Partial self-attention(PSA) ,主题结构是transformer的attention block。

  整体结构如上图3©所示:输入经过Conv 1 × 1 1\times1 1×1之后按照channel划分为 2 2 2部分。只有一部分放入 N P S A N_{PSA} NPSA 个attention block中。然后两部分再Concat起来,接着Conv 1 × 1 1\times1 1×1

  此外,遵循[21]将Query和Key的维度设为MHSA的一半,并将LN替换为BN,从而快速推理。

  为了快速推理,作者选择只在低分辨率的stage4之后使用,避免自注意机制的二次计算复杂度带来的太大开销。在此情况下,就可以将全局表示学习能力融入到YOLO中,而只需少量计算开销。

论文实验

  论文实验以YOLOv8为baseline,可能是因为论文发布时,YOLOv9-t 和YOLOv9-s 模型未开放出来,无法测试延迟等。YOLOv10的相关性能指标都是training from scratch的,同YOLOv9一样。YOLOv10-B模型是YOLOv10-M模型的factor放大版。

  论文的延迟都是在Tesla T4 GPU,TensorRT FP16上测试的。

  训练参数如下表所示:

  YOLOv10相关指标如下表所示:

对比实验

  与其他SOTA方法的对比如下表所示:YOLOv10比YOLOv8的AP高,延迟低,参数少,计算量少。 L a t e n c y f Latency^f Latencyf是只看网络forward过程,不计算后处理耗时。只看forward过程,YOLOv10也是最有效率的。

消融实验

模块消融实验

  YOLOv10每个模块的消融实验如下表所示,对中等模型和小模型都进行了实验。
  在小模型上,NMS-free快了 4.63 4.63 4.63ms,AP少了 0.6 % 0.6\% 0.6%,Accuracy有效涨点 1.8 % 1.8\% 1.8%AP,时间只增加 0.18 0.18 0.18ms。
  在中模型上,efficiency就有较大区别,能够快 0.65 0.65 0.65ms,Accuracy涨 0.7 % 0.7\% 0.7%AP。

NMS-free训练实验

  从表 3 3 3可以看出,双标签分配方式达到与o2m相近的结果,简单的o2o标签分配方式有较大的AP下降( 1.5 % ↓ 1.5\%\downarrow 1.5%)。
  从表 4 4 4可以看出,引入一致性匹配让o2o和o2m检测头更协调。 α \alpha α β \beta β使用相同 r r r有最佳性能。默认 α o 2 m = 0.5 , β o 2 m = 6.0 \alpha_{o2m}=0.5,\beta_{o2m}=6.0 αo2m=0.5,βo2m=6.0 α o 2 o = r ⋅ α o 2 m , β o 2 o = r ⋅ β o 2 m \alpha_{o2o}=r\cdot\alpha_{o2m},\beta_{o2o}=r\cdot\beta_{o2m} αo2o=rαo2m,βo2o=rβo2m

效率驱动模型设计

  下表 5 5 5展示了(1) lightweight classification head;(2) spatial-channel decouple downsample;(3) rank-guided block的消融实验结果。

  下表 6 6 6展示了无class error和regression error的对照组。 A P w / o   r v a l AP^{val}_{w/o\ r} APw/o rval A P w / o   c v a l AP^{val}_{w/o\ c} APw/o cval更高,表示消除回归误差有更大的改善。性能瓶颈更多地在回归任务上。
  下表 7 7 7展示了采用了pwConv和dwConv后,原策略优化性能和本文优化策略的对比。
  下表 8 8 8展示了以IRB(Inverted Residual block)作为baseline( 43.7 % 43.7\% 43.7%AP),添加一个dwCon 3 × 3 3\times3 3×3命名为“IRB-DW”,这带来了 0.5 % 0.5\% 0.5%AP的增长。对比 I R B − D W IRB-DW IRBDW,本文的CIB又增长了 0.3 % 0.3\% 0.3%AP。
  下表 9 9 9展示了使用高效CIB逐步代替各阶段的瓶颈块,按照图 3 3 3(a)的顺序 S t a g e   8 − 4 − 7 − 3 − 5 − 1 − 6 − 2 Stage\ 8-4-7-3-5-1-6-2 Stage 84735162,在阶段 7 7 7才有所下降。故本文CIB替换应用只在stage8和stage4.

精度驱动模型设计

  下表 10 10 10展示了Large Kernel和PSA的消融实验,
  下表 11 11 11,Large Kernnel的Kernel Size实验,Kernel Size为 7 7 7效果最好。此外,没有重参数分支时,少 0.1 % 0.1\% 0.1%AP。
  下表 12 12 12,在YOLOv10-N/S上,Large Kernel带来小幅提升。
  下表 13 13 13,引入transformer快,标为"Trans"。对比下,PSA带来 0.3 % 0.3\% 0.3%AP提升,且降低 0.05 0.05 0.05ms的延迟。对PSA block的重复数量进行实验, N P S A N_{PSA} NPSA=2能带来 0.2 % 0.2\% 0.2%AP提升,但增加了 0.1 0.1 0.1ms延迟。故选择 N P S A = 1 N_{PSA}=1 NPSA=1


  1. https://arxiv.org/abs/1806.05500 ↩︎

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

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

相关文章

Vue3中的Pinia——管理应用程序的全局状态

介绍Pinia Pinia 是 Vue.js 的状态管理库&#xff0c;主要用于管理应用程序的全局状态。它是 Vuex 的替代品&#xff0c;提供了更简单和更灵活的 API。Pinia 的主要作用包括&#xff1a; 1. 状态管理&#xff1a;Pinia 允许你在应用中集中管理状态&#xff0c;方便不同组件之…

微服务以及注册中心

一、什么是微服务 微服务是指开发一个单个小型的但有业务功能的服务&#xff0c;每个服务都有自己的处理和轻量通讯机制&#xff0c;可以部署在单个或多个服务器上。微服务也指一种松耦合的、有一定的有界上下文的面向服务架构。也就是说&#xff0c;如果每个服务都要同时修改…

Errorresponsefromdaemon:toomanyrequests:Youhavereachedyourpullratelimit.

Errorresponsefromdaemon:toomanyrequests:Youhavereachedyourpullratelimit.Youmayincreasethelimitbyauthenticatingandupgrading:https://www.docker.com/increase−rate−limit.See ′ dockerrun−−help 在拉取docker进行的时候遇到这个问题,如何解决呢?本文提供的解决方…

石英晶体谐振器:核心功能材料及其工作原理与应用

晶发电子专注17年晶振生产,晶振产品包括石英晶体谐振器、振荡器、贴片晶振、32.768Khz时钟晶振、有源晶振、无源晶振等&#xff0c;产品性能稳定,品质过硬,价格好,交期快.国产晶振品牌您值得信赖的晶振供应商。 石英晶体谐振器&#xff0c;又称为无源晶振&#xff0c;是现代电子…

【代码】使用c#实现串口通信的基础模板

一、分享代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;using System.IO.Ports; using…

云平台在大规模设备管理和数据分析中的作用

在当代数字化转型的浪潮中&#xff0c;云平台作为信息技术基础设施的核心组件&#xff0c;扮演着无可替代的角色&#xff0c;尤其在大规模设备管理和数据分析领域&#xff0c;其重要性和影响力日益凸显。本文旨在深入探讨云平台如何通过其独特的优势&#xff0c;促进数据的高效…

ROS第五梯:ROS+VSCode+C++单步调试

解决问题&#xff1a;在ROS项目中进行断点调试。 第一步&#xff1a;创建一个ROS项目或者打开一个现有的ROS项目。 第二步&#xff1a;修改c_cpp_properties.json 增加一段命令: "compileCommands": "${workspaceFolder}/build/compile_commands.json"第三…

11.第二阶段x86游戏实战2-找人物状态

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 本人写的内容纯属胡编乱造&#xff0c;全都是合成造假&#xff0c;仅仅只是为了娱乐&#xff0c;请不要…

gma 2.0.13 (2024.09.16) 更新日志

安装 gma 2.0.13 pip install gma2.0.13网盘下载&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1P0nmZUPMJaPEmYgixoL2QQ?pwd1pc8 提取码&#xff1a;1pc8 注意&#xff1a;此版本没有Linux版&#xff01; 编译gma的Linux虚拟机没有时间修复&#xff0c;本期Linux版…

WinRAR 创建自解压文件 添加桌面快捷方式 自定义图标

一、需求描述 将我们开发的软件&#xff0c;打包成exe安装包形式&#xff0c;让用户双击后可以选择安装位置&#xff0c;并在安装完成后&#xff0c;自动生成桌面快捷方式&#xff08;以任意我们自定义的图标和描述&#xff09; 二、准备 1.根据需求准备如下几种图标 软件安…

解析药用植物重楼甾体皂苷生物合成中的连续糖基化及其抗真菌作用-文献精读49

Unraveling the serial glycosylation in the biosynthesis of steroidal saponins in the medicinal plant Paris polyphylla and their antifungal action 解析药用植物重楼甾体皂苷生物合成中的连续糖基化及其抗真菌作用 摘要 糖–糖糖基转移酶在构建复杂的具有生物活性的…

走进低代码表单开发(五):高效开发的利器

前面我们已经介绍了勤研低代码开发平台的权限管理相关的内容&#xff0c;当表单设计完成后&#xff0c;我们将继续探索表单的其他功能&#xff0c;接下来&#xff0c;我们一起来看看勤研低代码平台还能如何为用户带来更便捷的开发体验。 一、表单导入 表单导入功能是勤研低代码…

电气自动化入门03:安全用电

视频链接&#xff1a;2.1 电工知识&#xff1a;触电原因与防触电措施_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1PJ41117PW/?p4&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5 1.电流对人体的危害 电击&#xff1a;电流通过人体。 电伤&#xff1a;电流热效应…

深入理解Unreal中的AI感知系统

StimuliSource和PerceptionListener 感知作为一种信号&#xff0c;整个场景中存在这个信号的生产者和消费者。这种信号在Unreal中被叫做刺激Stimuli 生产者就是StimuliSource&#xff0c;通过挂载StimuliSourceComponent并RegisterForSense来注册成为哪些类型刺激的刺激源 消费…

聚焦API安全未来,F5打造无缝集成的解决方案

研究发现&#xff0c;目前超过90%的基于Web的网络攻击都以API端点为目标。随着对API使用需求的增加&#xff0c;这些攻击还会持续增长。现代企业需要一种动态防御策略&#xff0c;在风险升级成代价高昂、令人警惕且往往无法预防的API安全漏洞之前&#xff0c;发现并降低风险。 …

Android 开发高频面试题之——Flutter

Android开发高频面试题之——Java基础篇 flutter高频面试题记录 Flutter1. dart中的作用域与了解吗2. dart中. .. ...分别是什么意思?3. Dart 是不是单线程模型?如何运行的?4. Dart既然是单线程模型支持多线程吗?5. Future是什么6. Stream是什么7. Flutter 如何和原生交互…

微信getUserProfile不弹出授权框

当我们在微信小程序开发工具中想要使用getUserProfile来获取个人信息的时候&#xff0c;会发现不弹出授权框&#xff0c;这是什么原因呢&#xff1f; 早在2022年的小程序官方公告中就已经明确给出了小程序用户头像昵称获取规则调整公告 因此如果还想继续使用getUserProfile的弹…

uni-app-通过vue-cli命令行快速上手

环境安装 全局安装 vue-cli npm install -g vue/cli创建uni-app 使用正式版&#xff08;对应HBuilderX最新正式版&#xff09; vue create -p dcloudio/uni-preset-vue my-project使用alpha版&#xff08;对应HBuilderX最新alpha版&#xff09; vue create -p dcloudio/uni-p…

ARMxy车辆数据采集Linux智能控制器

在当今科技日新月异的时代&#xff0c;高效智能的边缘计算设备在众多领域发挥着关键作用。我们的 ARM 边缘计算机&#xff0c;凭借其卓越的性能和广泛的适用性&#xff0c;成为车队管理智能化的核心力量。 一、强大硬件配置&#xff0c;完美适配车队管理需求 ARM 边缘计算机支…

2024 全新利器:API 微查接口登场

在信息时代的浪潮中&#xff0c;数据查询和核验成为了人们生活中必不可少的一部分。然而&#xff0c;为了满足各种不同的查询需求&#xff0c;开发和维护一个高效、全面的查询系统对于个人或者小团队来说往往是一项不小的挑战。好在现在有了全新的利器&#xff1a;API 微查接口…