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

目标检测算法YOLOv10简介

      YOLOv10由Ao Wang等人于2024年提出,论文名为:《YOLOv10: Real-Time End-to-End Object Detection》,论文见:https://arxiv.org/pdf/2405.14458 ;源码见: https://github.com/THU-MIG/yolov10  

      以下内容主要来自论文:

      1.Introduction

      YOLO的检测流程由两部分组成:模型前向处理和NMS后处理(the model forward process and the NMS post-processing)。然而,它们都存在不足,导致准确率-延迟边界(accuracy-latency boundaries)不理想。

      具体来说,YOLO在训练期间通常采用一对多标签分配策略(one-to-many label assignment strategy),即一个真实目标对应多个正样本。尽管这种方法可以获得优异的性能,但它需要NMS在推理过程中选择最佳的正预测(positive prediction)。这会减慢推理速度并导致性能对NMS的超参数敏感,从而阻止YOLO实现最佳的端到端部署。解决这个问题的一种方法是采用最近推出的端到端DETR架构。例如,RT-DETR提供了一种高效的混合编码器(hybrid encoder)和不确定性最小查询选择(uncertainty-minimal query selection),将DETR推向了实时应用领域。然而,部署DETR的固有复杂性阻碍了其在准确度和速度之间实现最佳平衡的能力。另一条路线是探索基于CNN的检测器的端到端检测,这通常利用一对一分配策略来抑制冗余预测(redundant predictions)。然而,它们通常会引入额外的推理开销或实现次优性能。

      此外,模型架构设计仍然是YOLO面临的一个基本挑战,对准确率和速度有重要影响。为了实现更高效、更有效的模型架构,研究人员探索了不同的设计策略。为了增强特征提取能力,提出了各种主要的计算单元(computational units)作为主干网络(backbone),包括DarkNet、CSPNet、EfficientRep和ELAN等。对于neck,探索了PAN、BiC、GD和RepGFPN等以增强多尺度特征融合(multi-scale feature fusion)。此外,还研究了模型缩放策略和重新参数化(re-parameterization)技术。虽然这些努力取得了显著的进步,但仍然缺乏从效率和准确性角度对YOLO中各个组件的全面检查。因此,YOLO算法中仍然存在着大量的计算冗余,导致参数利用率低,效率不理想,同时模型能力受限也导致性能较差,准确率还有很大的提升空间。

      在这项工作中,我们旨在解决这些问题并进一步推进YOLO的准确度--速度边界(boundaries)。我们在整个检测流程中同时关注后处理和模型架构。为此,我们首先通过提出一种具有双标签分配和一致匹配度量(dual label assignments and consistent matching metric)的无NMS YOLO的一致双分配策略来解决后处理中的冗余预测问题。它使模型在训练期间享受丰富和谐(rich and harmonious)的监督,同时消除了推理期间对NMS的需求,从而以高效率实现具有竞争力的性能。其次,我们通过对YOLO中的各个组件进行全面检查,为模型架构提出了整体效率精度驱动的模型设计策略(holistic efficiency accuracy driven model design strategy)。为了提高效率,我们提出了轻量级分类头(lightweight classification head)、空间通道解耦下采样(spatial-channel decoupled downsampling)和等级引导块设计(rank-guided block design),以减少显性计算冗余并实现更高效的架构。为了提高准确性,我们探索了大核卷积(large-kernel convolution)并提出了有效的部分自注意力模块来增强模型能力,充分利用了低成本下的性能改进潜力。

      基于这些方法,我们成功实现了一系列具有不同模型规模的实时端到端检测器,即YOLOv10-N/S/M/B/L/X

      2.Related Work

      (1).Real-time object detectors:实时目标检测旨在低延迟地对目标进行分类和定位,这对于实际应用至关重要。在过去的几年中,人们付出了大量的努力来开发高效的检测器。特别是YOLO系列脱颖而出,成为主流。YOLOv1、YOLOv2和YOLOv3确定了由主干网络、颈部和头部(backbone, neck, and head)三部分组成的典型检测架构。YOLOv4和YOLOv5引入CSPNet设计来取代DarkNet,并结合数据增强策略、增强的PAN和更多种类的模型规模等。YOLOv6分别针对neck和backbone提出了BiC和SimCSPSPPF,并采用了锚点辅助训练和自蒸馏策略。YOLOv7引入了E-ELAN以实现丰富的梯度流路径(gradient flow path),并探索了几种可训练的 bag-of-freebies方法。YOLOv8提出了C2f构建块,用于有效特征提取和融合。Gold-YOLO提供了先进的GD机制来增强多尺度特征融合能力。YOLOv9提出GELAN来改进架构,并提出PGI来增强训练过程。

      (2).End-to-end object detectors:端到端目标检测已成为传统流程的范式转变(paradigm shift),提供了简化的架构。DETR引入了Transformer架构并采用匈牙利损失(Hungarian loss)实现一对一匹配预测,从而消除了手工制作的组件(hand crafted components)和后处理。从那时起,各种DETR变体被提出来以提高其性能和效率。可变形-DETR利用多尺度可变形注意模块来加速收敛速度。DINO将对比去噪、混合查询选择和前向两次(contrastive denoising, mix query selection, and look forward twice)方案集成到DETR中。RT-DETR进一步设计了高效的混合编码器(hybrid encoder)并提出了不确定性最小查询选择(uncertainty-minimal query selection)来提高准确性和延迟。实现端到端目标检测的另一种方式是基于CNN检测器。可学习的NMS和关系网络(relation network)提出了另一种网络来消除检测器的重复预测。OneNet和DeFCN提出了一对一匹配策略,以实现全卷积网络的端到端目标检测。FCOS引入了一个正样本选择器来选择最佳样本进行预测。

      3.Methodology

      (1).Consistent Dual Assignments for NMS-free Training

      在训练过程中,YOLO通常利用TAL为每个实例分配多个正样本。采用一对多分配可产生丰富的监督信号,从而促进优化并实现卓越的性能。然而,这要求YOLO依赖NMS后处理,这会导致部署的推理效率不理想。虽然先前的研究探索了一对一匹配以抑制冗余预测,但它们通常会引入额外的推理开销或产生次优(suboptimal)性能。在本研究中,我们提出了一种针对YOLO的无NMS训练策略,该策略具有双标签分配和一致匹配指标(dual label assignments and consistent matching metric),从而实现了高效率和有竞争力的性能。

      Dual label assignments:与一对多分配不同,一对一匹配只为每个ground truch分配一个预测,从而避免了NMS后处理。然而,这会导致监督不力,从而导致准确率和收敛速度不理想。幸运的是,这个缺陷可以通过一对多分配来弥补。为了实现这一点,我们为YOLO引入了双标签分配,以结合两种策略的优点。具体来说,如下图所示,我们为YOLO加入了另一个一对一头部(one-to-one head)。它保留了与原始一对多分支相同的结构并采用相同的优化目标,但利用一对一匹配来获得标签分配。在训练过程中,两个头部与模型联合优化,让主干网络和颈部享受一对多分配提供的丰富监督。在推理过程中,我们抛弃一对多头部,利用一对一头部进行预测。这使得YOLO能够端到端部署,而无需承担任何额外的推理成本。此外,在一对一匹配中,我们采用了最优选择,以更少的额外训练时间实现了与匈牙利匹配(Hungarian matching)相同的性能。

      Consistent matching metric:在分配过程中,一对一和一对多方法都利用一个指标来定量(quantitatively)评估预测和实例之间的一致性水平。为了实现两个分支的预测感知匹配,我们采用了统一的匹配指标。

      在双标签分配中,一对多分支比一对一分支提供更丰富的监督信号。直观地讲,如果我们能够协调(harmonize)one-to-one head和one-to-many head的监督,我们就可以朝着one-to-many head优化的方向优化one-to-one head。因此,one-to-one head可以在推理过程中提供更高质量的样本,从而提高性能。为此,我们首先分析两个heads之间的监督差距(supervision gap)。由于训练过程中的随机性,我们一开始就使用两个heads初始化相同的值并产生相同的预测来开始我们的检查。

      (2).Holistic Efficiency-Accuracy Driven Model Design

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

      Efficiency driven model design:YOLO中的组件包括主干、下采样层、具有基本构建块的阶段和头部(stem, downsampling layers, stages with basic building blocks, and the head)。主干产生的计算成本很少,因此我们对其他三个部分进行效率驱动的模型设计。

      Lightweight classification head:在YOLO中,分类头和回归头(classification and regression heads)通常共享相同的架构。然而,它们在计算开销方面表现出明显的差异。例如,在YOLOv8-S中,分类头的FLOP和参数数量均是回归头的2倍多。然而,在分析了分类误差和回归误差的影响后,我们发现回归头对YOLO的性能更为重要。因此,我们可以减少分类头的开销,而不必担心性能会受到太大影响。因此,我们简单地采用一个轻量级架构作为分类头,它由两个深度可分离卷积(核大小为3x3)和一个1x1卷积组成。

      Spatial-channel decoupled downsampling:YOLO通常利用步幅(stride)为2的常规3×3标准卷积,同时实现空间下采样(从H×W到H/2xW/2)和通道变换(从C到2C)。这引入了不可忽略的计算成本和参数数量。相反,我们建议将空间减少和通道增加操作(spatial reduction and channel increase operations)分离,从而实现更高效的下采样。具体来说,我们首先利用逐点卷积(pointwise convolution)来调节通道维度,然后利用深度卷积( depthwise convolution)进行空间下采样。这将既降低计算成本又降低参数数量。同时,它最大限度地提高了下采样过程中的信息保留,从而降低了延迟并实现了具有竞争力的性能。

      Rank-guided block design:YOLO通常在所有阶段都使用相同的基本构建块,例如YOLOv8中的瓶颈块(bottleneck block)。为了彻底检查YOLO的这种同质设计(homogeneous design),我们利用内在秩(intrinsic rank)来分析每个阶段的冗余(redundancy)。具体来说,我们计算每个阶段最后一个基本块中最后一个卷积的数值秩(numerical rank),该秩计算大于阈值的奇异值(singular values)的数量。如下图所示:下图(a)展示了YOLOv8的结果,表明深度阶段和大型模型(deep stages and large models)容易出现更多冗余。这一观察结果表明,简单地对所有阶段应用相同的块设计对于最佳容量效率权衡而言并非最优。为了解决这个问题,我们提出了一种等级引导块(rank-guided block)设计方案,旨在通过紧凑的架构设计来降低冗余阶段的复杂性。我们首先提出一种紧凑的倒置块(compact inverted block,CIB)结构,该结构采用廉价的深度卷积进行空间混合,采用成本效益高的逐点卷积进行通道混合,如下图(b)所示。它可以作为高效的基本构建块,例如嵌入到ELAN结构中。然后,我们提倡一种基于等级引导块的分配策略,以在保持竞争能力的同时实现最佳效率。具体来说,给定一个模型,我们根据其内在秩按升序对其所有阶段进行排序。我们进一步检查了用CIB替换前导阶段(in the leading stage)的基本块的性能变化。如果与给定模型相比没有性能下降,我们将继续替换下一阶段,否则停止该过程。因此,我们可以在各个阶段和模型规模上实现自适应的紧凑块设计,在不影响性能的情况下实现更高的效率。

      Accuracy driven model design:我们进一步探索大核卷积和自注意力机制来实现精度驱动设计,旨在以最小成本提高性能。

      Large-kernel convolution:采用大核深度卷积(large-kernel depthwise convolution)是扩大感受野和增强模型能力的有效方法。但是,在所有阶段都简单地使用它们可能会导致用于检测小目标的浅层特征受到污染(contamination),同时还会在高分辨率阶段引入大量的I/O开销和延迟。因此,我们建议在深度阶段(deep stages)利用CIB中的大核深度卷积。具体来说,我们将CIB中第二个3×3深度卷积的内核大小增加到7×7。此外,我们采用结构重参数化技术(structural reparameterization technique)引入另一个3×3深度卷积分支,以缓解优化问题,而无需推理开销。此外,随着模型规模的增大,其感受野(receptive field)自然会扩大,使用大核卷积的好处就会逐渐减少。因此,我们只在模型规模较小的情况下采用大核卷积。

      Partial self-attention(PSA):自注意力机制因其卓越的全局建模能力而被广泛应用于各种视觉任务。然而,它表现出较高的计算复杂度和内存占用。为了解决这个问题,考虑到普遍存在的注意头冗余(attention head redundancy),我们提出了一种高效的部分自注意(PSA)模块设计,如上图(c)所示。具体来说,我们在1×1卷积之后将特征均匀地划分为跨通道的两部分。我们只将一部分输入到由多头自注意力模块(multi-head self-attention module, MHSA)和前馈网络(feed-forward network, FFN)组成的PSA块中。然后将两部分连接起来并通过1×1卷积融合。此外,我们将查询和键的维度设置为MHSA 中值的一半,并用BatchNorm替换LayerNorm以加快推理速度。此外,PSA仅放置在分辨率最低的Stage 4之后,避免了自注意力二次计算复杂度带来的过大开销。这样,就可以以较低的计算成本将全局表示学习能力融入到YOLO中,从而很好地增强模型的能力并提高性能。

      GitHub:https://github.com/fengbingchun/NN_Test

相关文章:

  • whisper 模型源码解读
  • JavaScript-转换成布尔型
  • 短视频矩阵系统/源码搭建---拆解热门视频功能开发上线
  • 如何选择合适的大模型框架:LangChain、LlamaIndex、Haystack 还是 Hugging Face
  • 【Linux硬盘读取】Windows下读取Linux系统的文件解决方案:Linux Reader4.5 By DiskInternals
  • GitLab教程(二):快速上手Git
  • k8s学习--kubernetes服务自动伸缩之垂直伸缩(资源伸缩)VPA详细解释与安装
  • 【机器学习】机器学习重要分支——强化学习:从理论到实践
  • 【git使用三】git工作机制与命令用法
  • 大数据开发语言Scala入门
  • VScode中连接并使用docker容器
  • React基础教程:TodoList案例
  • 【探索Linux】P.34(HTTPS协议)
  • [AIGC] 解题神器:Python中常用的高级数据结构
  • GenICam标准(一)
  • [译]前端离线指南(上)
  • extract-text-webpack-plugin用法
  • Fundebug计费标准解释:事件数是如何定义的?
  • JDK 6和JDK 7中的substring()方法
  • js学习笔记
  • Netty源码解析1-Buffer
  • SQLServer插入数据
  • Vue UI框架库开发介绍
  • 对象引论
  • 湖南卫视:中国白领因网络偷菜成当代最寂寞的人?
  • 欢迎参加第二届中国游戏开发者大会
  • 网页视频流m3u8/ts视频下载
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • 走向全栈之MongoDB的使用
  • 最近的计划
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • ​1:1公有云能力整体输出,腾讯云“七剑”下云端
  • ​io --- 处理流的核心工具​
  • ​马来语翻译中文去哪比较好?
  • # Java NIO(一)FileChannel
  • #周末课堂# 【Linux + JVM + Mysql高级性能优化班】(火热报名中~~~)
  • (17)Hive ——MR任务的map与reduce个数由什么决定?
  • (2)nginx 安装、启停
  • (26)4.7 字符函数和字符串函数
  • (DenseNet)Densely Connected Convolutional Networks--Gao Huang
  • (附源码)springboot猪场管理系统 毕业设计 160901
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (南京观海微电子)——I3C协议介绍
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • (原創) 如何安裝Linux版本的Quartus II? (SOC) (Quartus II) (Linux) (RedHat) (VirtualBox)
  • (转载)CentOS查看系统信息|CentOS查看命令
  • .NET MAUI Sqlite程序应用-数据库配置(一)
  • .NET 材料检测系统崩溃分析
  • .sh 的运行
  • .sys文件乱码_python vscode输出乱码
  • /bin、/sbin、/usr/bin、/usr/sbin
  • @Async 异步注解使用
  • @Transactional事务注解内含乾坤?
  • [ 数据结构 - C++]红黑树RBTree
  • [④ADRV902x]: Digital Filter Configuration(发射端)