目标检测算法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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Open To Buy(OTB)计划:零售业者的库存管理利器

在当今快速变化的服装市场中,如何高效、精准地进行商品管理成为了服装企业竞争的关键。OTB(Open-to-Buy)作为一种有效的商品管理方法,在企业管理中扮演着至关重要的角色。它基于预算、商品计划以及市场需求等多维度因素&#xff0…

《优化接口设计的思路》系列:第1篇—什么是接口缓存

一、缓存的定义: 缓存是一种存储数据的技术,用于提高数据访问的速度和效率。缓存通常存储在内存中,因为内存访问速度远快于磁盘和网络。数据接口通常会使用缓存技术,以降低对后端数据存储和处理的压力,提高系统性能。…

CSAPP -lecture01

##01COURSE OVERVIEW int or not intergers ,float and not reals that you need to understand what the system dose ,what make it run wll,what make it run poorly .in order to be able to do that kind of optimization

期货到底难在哪里?

第一难:使用杠杠,杠杠放大的其实是你性格、天赋和技能上的弱点,同时相应缩小你这三个方面的优点;第二难:双向交易。如果只能做多,理论上你每次交易将有50%的概率盈利。现在既能做多又能做空,只剩…

Semantic Kernel 直接调用本地大模型与阿里云灵积 DashScope

本文主要介绍如何在无需网关,无需配置 HttpClient 的情况下,使用 Semantic Kernel 直接调用本地大模型与阿里云灵积 DashScope 等 OpenAI 接口兼容的大模型服务。 1. 背景 一直以来,我们都在探索如何更好地利用大型语言模型(LLM&…

如何快速搭建产业数字化生态链?

如何快速搭建产业数字化生态链?这是当下许多企业都在思索的关键问题。 首先,要明确自身的核之心优势与定位,找到在数字化生态中的独特价值。 加强与产业链上下游企业的合作与协同,打破信息壁垒,实现资源共享与互补。 注…

重生奇迹mu圣导师介绍

出生地:勇者大陆 性 别:男 擅 长:统率&宠物使用 转 职:祭师(3转) 介 绍:当玩家账号中有一个Lv250以上角色时,便可以创建职业为圣导师的新角色,圣导师每升一级获得…

最适合程序员的编程字体,漂亮、独特、优雅!(2024-06-17)

Monaco Monaco 字体是一款专为编程和代码编辑设计的等宽字体,以其简洁明了的无衬线设计风格、高可读性和清晰的字符区分度,受到开发者们的青睐,Mac 自带 Monaco 字体。 Consolas Consolas 是一款等宽无衬线字体,专为编程和代码编…

C#语言入门详解 --- 方法(含传值 输出 引用 数组)

方法 方法标准式 <Access Specifier> <Return Type> <Method Name>(Parameter List) { Method Body } 让我们逐一对每一个模块进行解释&#xff1a; Access Specifier&#xff1a;访问修饰符&#xff0c;这决定了接下来的主题的可见性&#xff0c;包含p…

基于LangChain-Chatchat实现的RAG-本地知识库的问答应用[3]-参数配置详细版

基于LangChain-Chatchat实现的RAG-本地知识库的问答应用[3]-参数配置详细版 在开始参数配置之前,先执行以下脚本 python copy_config_example.py该脚本将会将所有config目录下的配置文件样例复制一份到config目录下,方便开发者进行配置。 接着,开发者可以根据自己的需求,对…

20个超实用的VS Code扩展(2024年版)

大家好&#xff0c;今天小程给大家带来一篇关于 VS Code 扩展的文章。VS Code 这几年做得是风生水起&#xff0c;可以算得上是微软的良心产品&#xff0c;其最大的优势就是拥有众多高质量的扩展。在本文中&#xff0c;将向大家推荐一些我认为在 2024 年对开发者来说又实用又好用…

GPT_AI高速发展中什么是Prompt提示词?

提示词&#xff08;Prompt&#xff09;是给大语言模型&#xff08;以下简称模型&#xff09;的输入文本&#xff0c;用于指定模型应该执行什么样的任务并生成什么样的输出。 提示词发挥了“提示” 模型 应该做什么的作用。设计高质量的提示词需要根据目标任务和模型能力进行精…

动态 ETL 管道:使用非结构化 IO 将 AI 与 MinIO 和 Weaviate 的 Web

在现代数据驱动的环境中&#xff0c;网络是一个无穷无尽的信息来源&#xff0c;为洞察力和创新提供了巨大的潜力。然而&#xff0c;挑战在于提取、构建和分析这片浩瀚的数据海洋&#xff0c;使其具有可操作性。这就是Unstructured-IO 的创新&#xff0c;结合MinIO的对象存储和W…

hadoop搭建本地hive库保姆级教程

安装本地hive 安装的前提是hadoop完全分布式可以正常的跑起来 第一部分&#xff1a;安装mysql8.0 1.安装wget工具 yum -y install wget2.通过wget工具下载mysql源文件 注意&#xff1a;以下版本过高&#xff0c;后面安装MySQL源会失败&#xff0c;所以建议刚开始尝试换成…

Python 五子棋游戏(人人对战人机对战)【含Python源码 MX_006期】

系统简介&#xff1a; 五子棋是一种双人对弈的策略棋类游戏&#xff0c;玩家轮流在棋盘上落子&#xff0c;目标是通过在水平、垂直或对角线上连成一条直线的方式&#xff0c;最先在棋盘上形成连续的五颗棋子。五子棋的规则相对简单&#xff0c;但是需要玩家在落子过程中进行深思…

python14 字典类型

字典类型 键值对方式&#xff0c;可变数据类型&#xff0c;所以有增删改功能 声明方式1 {} 大括号&#xff0c;示例 d {key1 : value1, key2 : value2, key3 : value3 ....} 声明方式2 使用内置函数 dict() 创建1)通过映射函数创建字典zip(list1,list2) 继承了序列的所有操作 …

数字人源码部署怎么做?如何高效搭建好用的数字人系统?

作为人工智能时代的风口项目&#xff0c;AI数字人自出现之日起便引发了大量的关注。不少创业者都有了搭建数字人系统的想法&#xff0c;但却苦于没有强大的专业背景和雄厚资金支撑&#xff0c;只能在局外徘徊&#xff0c;而这恰恰为数字人源码公司推出的数字人源码部署服务的火…

第28讲:Ceph集群使用RBD块存储与K8S Volumes集成

文章目录 1.Ceph集群使用RBD块存储与K8S集成简介2.Ceph集群RBD块存储与K8S Volume集成2.1.在Ceph集群中创建K8S集群使用的块存储2.2.创建用于K8S访问Ceph RBD块设备的认证用户2.3.将认证用户的Key存储在K8S Secret资源中2.4.在K8S集群的所有节点中安装Ceph命令2.5.创建Pod资源使…

基于粒子群优化算法的的微电网多目标优化调度----算法改进

前言&#xff1a; 当阅读过前一篇我的博客之后&#xff0c;并且认真去读懂了那篇文章末尾的代码&#xff0c;那么&#xff0c;后续的算法改进对于你来说应当是很容易的了。前文中提及过&#xff0c;粒子群在进行迭代时&#xff0c;每迭代一次&#xff0c;都会根据自己个体最优值…

JAVA小知识22:迭代器iterator与列表迭代器ListIterator

一、迭代器 在 Java 中&#xff0c;迭代器是一个设计模式&#xff0c;用于遍历集合中的元素。Java 提供了 Iterator 接口来实现这一功能。迭代器的主要作用是提供一种通用的遍历集合的方法&#xff0c;而不需要了解集合的具体实现细节。 1.1、迭代器的特点 统一接口&#xf…