目标检测算法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.rhkb.cn/news/351568.html

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

相关文章

如何通过Outlook大附件插件,加强外发附件的安全性和管控力度?

因邮件的便捷性和普遍性,企业间业务往来通常会采取邮箱业务,沟通使用成本也比较低,但容易出现附件太大无法上传的问题。Outlook大附件插件是为解决邮件系统中附件大小限制问题而开发的一系列工具。 使用邮件发送附件时,可能会遇到…

生信技能48 - 如何获取基因的SNP及RefSeq参考序列命名规则

1. SNP概念 SNP 是指基因组水平上由单个核苷酸的变异所引起的DNA 序列多态性,在群体中的发生频率不小于1 %,包括单个碱基的转换、颠换、插入和缺失等。每核苷酸发生突变的概率大约为10 -9 , 由于压力选择,SNP在单个基因和基因组以及动物不同种群间分布是不均匀的,在非编码…

【wiki知识库】06.文档管理页面的添加--前端Vue部分

📝个人主页:哈__ 期待您的关注 目录 一、🔥今日目标 二、🐻前端Vue模块的改造 BUG修改 1.wangeditor无法展示问题 2.弹窗无法正常关闭问题 2.1 添加admin-doc.vue 2.1.1 点击admin-ebook中的路由跳转到admin-doc 2.2.2 进入…

LoadBalance客户端负载均衡

1. 前言Ribbon Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端 负载均衡的工具。简单的说,Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法和服务调用。Ribbon客户端组件提供一系列完善的配置项如连接超时&#xff0…

数据结构——栈(Stack)详解

1. 栈(Stack) 1.1 概念 栈:一种特殊的线性表,只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中数据元素遵循后进先出LIFO(Last In First Out)的原则 压栈&am…

Java——LinkedList

1、链表 1.1 链表的概念及结构 链表在逻辑层面上是连续的,在物理层面上不一定是连续的 链表结构可分为,单向或双向、带头或不带头、循环或非循环,组合共计8种 重点:无头单向非循环链表、无头双向链表 1.2 模拟实现无头单向非…

梯度提升决策树(GBDT)

GBDT(Gradient Boosting Decision Tree),全名叫梯度提升决策树,是一种迭代的决策树算法,又叫 MART(Multiple Additive Regression Tree),它通过构造一组弱的学习器(树&am…

OpenCV绘制直线

一 绘制图形 画线 画矩形 画圆 画椭圆 画多边形 绘制字体 二 画线 line(img,开始点,结束点,颜色…) 参数结束 img:在那个图像上画线 开始点,结束点:指定线的开始与结束位置; 颜色,线宽,线体…

图解 Twitter 架构图

写在前面 两年前,马老板收购了twitter,并且做了一系列的大动作。那么今天我们来看一下这个全球最火的软件之一的架构。 Twitter解析 开始之前,我先提前说明一下,我之前不是做搜推广的,所以对这些了解不是很深&…

力扣 SQL题目

185.部门工资前三高的所有员工 公司的主管们感兴趣的是公司每个部门中谁赚的钱最多。一个部门的 高收入者 是指一个员工的工资在该部门的 不同 工资中 排名前三 。 编写解决方案,找出每个部门中 收入高的员工 。 以 任意顺序 返回结果表。 返回结果格式如下所示。 …

CSS 字体颜色渐变

CSS 字体颜色渐变 css 代码: 注意:background: linear-gradient(属性),属性可以调整方向 例如:to bottom 上下结构,to right 左右结构font-family: DIN, DIN;font-weight: normal;font-size: 22px;color:…

基于WPF技术的换热站智能监控系统09--封装水泵对象

1、添加用户控件 2、编写水泵UI 控件中用到了Viewbox控件,Viewbox控件是WPF中一个简单的缩放工具,它可以帮助你放大或缩小单个元素,同时保持其宽高比。通过样式和属性设置,你可以创建出既美观又功能丰富的用户界面。在实际开发中…

uniapp原生插件开发实战——集成Android端的Twitter登陆

Android集成Twitter登陆的官方教程:https://github.com/twitter-archive/twitter-kit-android/wiki 项目创建 首先可以先看下uniapp原生插件开发教程 uniapp原生插件类型分为两种: Module模式:能力扩展,无嵌入窗体的UI控件,类似于功能插件。Component模式:在窗体中内嵌…

【2024亲测无坑】Oracle--19C在Centos7上的静默安装(rpm版)

一、Oracle 19c Linux安装(Centos 7) 1.查看磁盘可用空间及配置ip地址 [rootlocalhost /]# df -h 文件系统 容量 已用 可用 已用% 挂载点 devtmpfs 1.4G 0 1.4G 0% /dev tmpfs 1.4G …

C#——值类型和引用类型的区别详情

值类型和引用类型的区别 值类型 值类型: 常用的基本数据类型都是值类型:bool 、char、int、 double、 float、long 、 byte 、ulong、uint、枚举类型、 结构体类型等特点: 在赋值的过程当中,把值的本身赋值给另一个变量,再修改…

【python】OpenCV—Histogram Matching(9.2)

学习来自OpenCV基础(17)基于OpenCV、scikit-image和Python的直方图匹配 文章目录 直方图匹配介绍scikit-image 中的直方图匹配小试牛刀风格迁移 直方图匹配介绍 直方图匹配(Histogram Matching)是一种图像处理技术,旨…

【图论应用】使用多路图(multigraph)对上海地铁站点图建模,并解决最短路径问题

文章目录 1 前言2 导包导入数据集3 创建多路图,导入节点和边信息3 绘制线路图4 计算最短路径 1 前言 最近正在学习图神经网络,先pick up了一些最基础的图论知识并学习了一些好玩的应用。 本文启发于B站视频(BV1LY411R7HJ)&#…

经验分享,如何去除文本中的空格

有时候我们需要去掉一窜文本中的空格,这里分享一个好用的免费网站,可实现在线去除 网址:http://www.txttool.com/t/?idMzM4 使用截图:

redis 笔记2之哨兵

文章目录 一、哨兵1.1 简介1.2 实操1.2.1 sentinel.conf1.2.2 问题1.2.3 哨兵执行流程和选举原理1.2.4 使用建议 一、哨兵 1.1 简介 上篇说了复制,有个缺点就是主机宕机之后,从机只会原地待命,并不能升级为主机,这就不能保证对外…

牛客网华为机试java版

目录 HJ1 字符串最后一个单词的长度HJ2 计算某字符出现次数HJ3 明明的随机数HJ4 字符串分隔HJ5 进制转换HJ6 质数因子HJ7 取近似值HJ8 合并表记录HJ9 提取不重复的整数HJ26 字符串排序HJ80 整型数组合并HJ101 输入整型数组和排序标识,对其元素按照升序或降序进行排序…