YOLOX: 无锚点机制 + 解耦头部设计 + 动态标签分配策略的高性能目标检测器 + Apache-2.0 开源可商用

news2025/2/28 12:18:38

YOLOX: 无锚点机制 + 解耦头部设计 + 动态标签分配策略的高性能目标检测器 + Apache-2.0 开源可商用

      • 1. Decoupled Head 解耦头部的使用
      • 2. 强化数据增强策略
      • 3. 采用无锚点检测机制
      • 4. 多正样本策略
      • 5. SimOTA标签分配策略
      • 6. CSPDarkNet 网络结构
        • DarkNet53 的深度特征提取能力
          • DarkNet53 类比:图书馆系统
        • CSPNet 的高效计算方式
          • CSPNet 类比:文件存储系统
      • 7. PAFPN
      • 8. 损失函数
      • 9. 目标检测算法轻量化技巧

 


论文:https://arxiv.org/pdf/2107.08430

代码:https://github.com/Megvii-BaseDetection/YOLOX

YOLOX是YOLO对象检测算法系列的一个重要进展,这些算法以其有效性和效率而闻名。以下是YOLOX中突出的关键改进和特点:

  1. 无锚检测:YOLOX从以前的YOLO版本使用的传统基于锚的系统转变为无锚方式。这意味着它在没有预定义锚点的情况下预测边界框,简化了模型并可能减少了超参数。

  2. 解耦头部:模型在其架构中使用了一个解耦头部,这可能意味着它将边界框的预测和类别预测分离到不同的组件中。这可以提高学习和性能,因为每个部分都可以专注于更具体的任务。

  3. SimOTA标签分配:使用SimOTA(简化的最优运输分配)进行标签分配。这种先进的策略通过确保使用最相关的预测进行训练,优化了地面真实和预测对象之间的匹配,提高了精度。

  4. 不同规模的性能:YOLOX在各种模型大小上表现出强大的性能:

    • YOLO-Nano:尽管只有0.91百万参数和1.08亿FLOPs,它在COCO数据集上达到了25.3%的AP(平均精度),超过了NanoDet。
    • 增强的YOLOv3:将YOLOv3的性能提高到COCO上的47.3% AP。
    • YOLOX-L:该版本在Tesla V100 GPU上以68.9帧/秒(FPS)的速度达到了50.0%的AP,与其他高性能模型如YOLOv4-CSP和YOLOv5-L相当,但效率更高。
  5. 竞赛成功:YOLOX-L在CVPR 2021自动驾驶研讨会上的流媒体感知挑战中获得了第一名,表明了其在动态环境中的实用性和稳健性。

  6. 部署和支持:该模型支持使用各种框架(如ONNX、TensorRT、NCNN和OpenVINO)进行部署,使其能够适应不同的平台和设备。

  7. 开源可用性:源代码在GitHub上可用,为开发人员和研究人员提供了使用和适应YOLOX的可能性。

YOLOX代表了对象检测技术的一大飞跃,特别适用于需要实时环境中高性能的应用。其增强功能使其成为从自动驾驶到监控的广泛应用的强有力候选者。

 


1. Decoupled Head 解耦头部的使用

  • 子解法1: 引入解耦头部分别处理分类和定位任务。
  • 之所以使用解耦头部,是因为分类和定位任务在传统耦合头部中相互干扰,可能会导致性能下降。解耦头部可以让每个任务专注于其特定的功能,从而提高整体检测性能。例如,实验表明替换为解耦头部可以显著提高模型的收敛速度。

在这里插入图片描述

  1. YOLOv3的耦合头部

    • 使用了耦合头部,这意味着分类(Cls.)、回归(Reg.)、以及目标(Obj.)任务在同一神经网络层中处理。
    • 图中展示了从FPN(特征金字塔网络)特征分别经过1x1的卷积层,然后直接输出到一个混合输出层,这个输出层结合了不同的任务预测。
    • 输出维度为HxWxC(通道数乘以锚点数乘以(分类数 + 4个回归值 + 1个目标置信度))。
  2. YOLOX的解耦头部

    • YOLOX采用解耦头部设计,分开处理分类和回归任务,以及一个额外的IoU(交并比)分支。
    • 对每个FPN输出特征首先应用1x1的卷积层降低通道数至256,然后分为两个并行分支,每个分支包括两个3x3的卷积层,分别用于分类和回归任务。
    • 分类分支输出为HxWxC(每个位置的类别数),回归分支输出为HxWx4(每个位置的四个回归值),IoU分支输出为HxWx1(每个位置的IoU预测)。

这种设计的变化主要是为了改善模型的性能,通过分离任务以减少不同任务间的干扰,提高模型在分类和定位准确性上的效率。

解耦头部允许模型更加专注于每个特定任务的学习,从而在实际应用中提供更准确的预测。

2. 强化数据增强策略

  • 子解法1: 使用马赛克和MixUp策略。
  • 之所以使用马赛克和MixUp,是因为这些策略能有效地增加训练数据的多样性和复杂性,从而增强模型的泛化能力。特别是马赛克策略,它通过将多个训练图像拼接成一个大图来模拟更复杂的场景,而MixUp通过图像间的线性插值增加样本多样性。

3. 采用无锚点检测机制

  • 子解法1: 移除传统的锚点机制,直接预测边界框的尺寸和位置。
  • 之所以采用无锚点检测机制,是因为锚点机制需要在训练前通过聚类分析确定最佳锚点,这不仅增加了预训练的复杂性,而且锚点的设计往往是领域特定的,缺乏通用性。无锚点检测通过简化模型结构,减少了需要启发式调整的设计参数数量,使模型更简洁,训练和部署更高效。

4. 多正样本策略

  • 子解法1: 采用中心3×3区域的多个样本作为正样本。
  • 之所以采用多正样本策略,是因为在传统的单一正样本选择中,高质量的预测可能被忽视,从而导致训练不足。通过将中心区域内的多个预测都视为正样本,可以利用这些高质量预测带来的有益梯度,减轻训练中正/负样本极度不平衡的问题。

5. SimOTA标签分配策略

  • 子解法1: 实现基于全局视角的动态顶k正样本选择。
  • 之所以采用SimOTA标签分配策略,是因为传统的标签分配方法可能无法有效识别和优化最有潜力的预测框。SimOTA通过考虑损失和质量,动态选择对每个真实标签贡献最大的预测,从而优化训练过程并提高模型性能。这种方法通过减少计算复杂度,同时避免额外的求解器超参数,有效提升了训练效率和性能。

6. CSPDarkNet 网络结构

CSPDarkNet 代码地址:https://github.com/WongKinYiu/CrossStagePartialNetworks

CSPDarkNet主要建立在DarkNet神经网络架构的基础上,增加了Cross Stage Partial Network (CSPNet) 的设计,以改善模型的性能并减少计算成本。

  • DarkNet53 的深度特征提取能力
  • CSPNet 的高效计算方式
DarkNet53 的深度特征提取能力

DarkNet53是一个由53层卷积组成的深度神经网络,原本设计用作YOLOv3的主干网络。

这个网络是为了提取从简单到复杂的特征而精心设计的,具体包括:

  • 层级特征提取:DarkNet53通过多层卷积网络逐层提取图像特征,每一层都在前一层的基础上进一步抽象和提炼信息。这种分层方式允许网络捕捉从边缘和纹理到更复杂的对象部分的特征。
  • 残差连接:DarkNet53使用残差连接(Residual Connections)帮助解决深层网络中可能出现的梯度消失问题,确保即使在网络很深的情况下也能有效地训练。
  • 高效特征利用:通过这种深层次的特征提取,DarkNet53能够识别和处理图像中的各种对象,为后续的分类和定位任务提供了丰富的特征基础。
DarkNet53 类比:图书馆系统

想象DarkNet53像是一座大型图书馆系统,其中包括从基础文献到高级专业书籍的多层次收藏。

每个层次的书籍都建立在前一个层次的基础上,提供更深入、更专业的知识。

  • 层级特征提取:就像从图书馆的不同楼层逐层获取知识,每一层都提供更深入的信息。从简单的概念书籍到复杂的研究论文,读者(网络)可以逐步深入理解各种主题。
  • 残差连接:如果某个楼层的知识直接与另一个楼层链接,读者可以直接访问需要的资源而无需重复阅读基础材料,类似于跳过已知信息,直接获取新知识。
  • 高效特征利用:如同一个高效的图书管理员,DarkNet53可以准确快速地找到并处理所需的信息,无论是简单的查询还是复杂的研究问题。
CSPNet 的高效计算方式

CSPNet通过改变特征图的传递和处理方式,优化了计算过程,特别适用于在计算资源受限的环境下运行。

它的主要优势包括:

  • 特征分割和并行处理:CSPNet将来自前一层的特征图分为两部分,一部分直接传递到深层网络,而另一部分则通过额外的卷积层进行处理。这种结构减少了重复计算,使得整个网络的参数更有效地被利用。
  • 降低计算成本:通过分割特征图,CSPNet实际上减少了每层的参数数量,这直接降低了模型的训练和推理时的计算成本。
  • 增强的特征融合:在网络的后续部分,直接传递的特征与经过卷积处理的特征合并,这样的设计增加了网络在不同级别上特征的融合,提高了模型对复杂场景的适应能力。
CSPNet 类比:文件存储系统

将CSPNet想象为一个高效的文件存储系统,其中文件被划分为直接使用的部分和需要进一步处理的部分。

  • 特征分割和并行处理:类似于一个办公室环境,其中一些文件直接存档以备未来快速访问,而其他文件则由不同的团队成员加工和更新。这样做可以减少不必要的重复工作,提高整体效率。
  • 降低计算成本:就像将大文件拆分为更小的、更易于处理的部分一样,这使得文件系统更加高效,减少了处理大文件时的资源消耗。
  • 增强的特征融合:最终,所有处理过的文件和直接存档的文件会汇总到一起,这就像一个会议,各方信息汇总后提供了一个全面的决策基础。

两种不同的网络结构设计:传统的ResNe(X)t和CSPResNe(X)t。

(a) ResNe(X)t

  • Base layer:基础层,是网络的输入层,用于接收输入数据。
  • Res(X) Block with Bottleneck:包含瓶颈结构的残差块。这种设计通过使用1x1、3x3和再次1x1的卷积核,旨在减少特征维度,从而减少计算量,同时保持网络深度和复杂性。
  • 这些块被重复n次,以增加网络的深度,提高其学习复杂表示的能力。

(b) CSPResNe(X)t

  • Base layer:同样作为网络的输入层。
  • Part 1 and Part 2:在CSPResNe(X)t结构中,特征图在进入残差块之前被分割成两部分。这种分割有助于降低冗余计算,优化内存使用和计算效率。
  • Res(X) Block w/o Bottleneck:这里的残差块没有瓶颈设计,意味着它避免了减少特征维度的1x1卷积操作。这可能有助于保持更多的特征信息,虽然可能会增加一些计算负担。
  • Partial Transition:部分过渡层用于合并处理过的特征部分,这在网络中提供了一个更加丰富的特征集合,有助于提高最终的性能。

ResNe(X)t 结构致力于通过瓶颈设计减少参数和计算复杂性,而 CSPResNe(X)t 则通过分割特征图和部分过渡来优化训练过程的速度和效率。

CSPResNe(X)t结构尤其适用于需要处理大量数据和在硬件资源受限的环境中运行的应用。

对比ResNe(X)t和CSPResNe(X)t的架构可以通过一个现实生活中的类比来更形象地理解它们的设计差异和相应的优势:

想象一个工厂有两条产品装配线,每条装配线都设计用来制造相同的产品,但每条线的组织结构和流程不同。

  1. 传统的装配线(ResNe(X)t)
  • 像传统的装配线一样,每个工作站(残差块)负责完成产品的一个特定部分,并且在进入下一个工作站之前会通过一系列的精简步骤(瓶颈设计)来确保效率。 这种方法的目的是优化资源使用,通过减少每个工作站所需处理的材料数量(特征维度),从而减少整个生产过程的复杂性和成本。
  1. 分割任务装配线(CSPResNe(X)t)
  • 此装配线将原材料(输入特征)在进入流程前分成两部分。一部分直接进入最后的组装阶段,而另一部分则在多个工作站(残差块)中经过加工处理。 最后,这两部分在装配线的末端(部分过渡层)合并,以完成最终产品。这种结构允许工厂更灵活地管理资源,因为它可以并行处理多个任务,同时减少了因重复工序导致的时间和资源浪费。

优势与用途:

  • 传统装配线(ResNe(X)t):适用于资源有限但需要维持高质量输出的情况。通过瓶颈设计,它确保每一步都尽可能高效,适合在资源受限或成本敏感的生产环境中使用。
  • 分割任务装配线(CSPResNe(X)t):通过并行处理和优化工作流程的灵活性,这种方法可以更快地处理大量任务,特别适合需要快速响应和高效率的大规模生产环境。

 

当将DarkNet53的深度特征提取能力与CSPNet的高效计算方式结合时,CSPDarkNet53能够在确保深度和复杂特征提取的同时,保持网络的运行效率。

这种结合使得CSPDarkNet53特别适合用于需要实时处理的目标检测任务中,如视频监控和自动驾驶,因为它可以快速且准确地处理大量图像数据。

这种结构优化的目标是在不牺牲性能的情况下提供更高的速度和效率,使得CSPDarkNet53成为计算资源受限环境中的理想选择。

7. PAFPN

8. 损失函数

9. 目标检测算法轻量化技巧

 


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

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

相关文章

简单http客户端程序

要求和目的 深入理解http协议以及http下载相关功能的程序设计 实验环境 Java语言,PC平台 实验要求 基本要求:使用Socket类,实现一个简单的HTTP客户端程序。用户输入URL,该程序可以从服务器下载URL指定的资源,并将之…

LabVIEW RT在非NI硬件上的应用与分析

LabVIEW RT(实时操作系统)可运行在非NI(National Instruments)硬件上,如研华工控机,但需要满足特定硬件要求。本文从硬件要求、开发和运行差异、可靠性、稳定性、优势和成本等多角度详细分析在非NI硬件上运…

后端返回前端时间格式化

时间格式化的方法总共包含以下 5 种。 1.前端时间格式化 JS 版时间格式化 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 function dateFormat(fmt, date) { let ret; const opt { "Y": date.getFullYear().toString(), // 年 …

挂耳式耳机哪个牌子好性价比高、五大招牌力作精选归纳

如果说你很喜欢户外运动,日常生活中也是需要经常佩戴耳机,那么你一定有了解到耳机是开放式耳机,这类耳机无论在户外运动防水防汗还是在耳朵健康方面都具备它的优点,在市面上是很受欢迎的。 但面对市面上不同品牌的耳机都会显得眼…

【面试干货】深入理解Java中的final关键字

【面试干货】深入理解Java中的final关键字 一、被 final 修饰的类二、被 final 修饰的方法三、被 final 修饰的变量四、被 final 修饰的常量 💖The Begin💖点点关注,收藏不迷路💖 在Java中,final关键字有多种用途&…

组合和外观模式

文章目录 组合模式1.引出组合模式1.院系展示需求2.组合模式基本介绍3.组合模式原理类图4.解决的问题 2.组合模式解决院系展示1.类图2.代码实现1.AbsOrganizationComponent.java 总体抽象类用于存储信息和定义方法2.University.java 第一层,University 可以管理 Coll…

atcoder ABC 355-C题详解

atcoder ABC 355-C题详解 ​ Problem Statement There is an NN grid, where the cell at the i-th row from the top and the j-th column from the left contains the integer N(i−1)j. Over T turns, integers will be announced. On Turn i, the integer Ai​ is anno…

C++入门8 构造函数析构函数顺序|拷贝构造

一&#xff0c;构造函数析构函数 调用顺序 我们先来看下面的代码&#xff1a; #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <cstring> using namespace std; class student { public:char my_name[20];int my_id;student(int a) {my_id a;co…

使用超声波麦克风阵列预测数控机床刀具磨损

预测性维护是使用传感器数据来推断机器状态&#xff0c;并从这些传感器数据中检测出在故障发生之前存在的缺陷或故障的过程。预测性维护在所有工业领域都是一种日益增长的趋势&#xff0c;包括轴承故障检测、齿轮磨损检测或往复式机器中的活塞磨损等许多其他例子。在预测性维护…

ADS基础教程20 - 电磁仿真(EM)参数化

EM介绍 一、引言二、参数化设置1.参数定义2.参数赋值3.创建EM模型和符号 四、总结 一、引言 参数化EM仿真&#xff0c;是在Layout环境下创建参数&#xff0c;相当于在原理图中声明变量。 二、参数化设置 1.参数定义 1&#xff09;在Layout视图&#xff0c;菜单栏中选中EM&g…

哈喽GPT-4o——对GPT-4o 写论文的思考与看法

目录 几小时即可完成一份1万字论文的编写1、改写降重2、同义词替换降重3、避免连续相同4、缩写扩写降重5、关键词汇替换降重6、句式变换降重7、逻辑重组8、综合改写9、数据呈现方式变更10、概念解释降重 大家好&#xff0c;我是哪吒。 在ChatGPT4o对话框中输入&#xff1a;写一…

继承-进阶-易错点

子类同名方法隐藏父类方法 即使调用不匹配也不会再去父类寻找&#xff0c;而是直接报错 //下面代码输出结果&#xff1a;( )&#xfeff;class A { public:void f(){ cout<<"A::f()"<<endl; }int a; };class B : public A { public:void f(int a){c…

若依微服务Docker部署验证码出不来怎么办?

最近,有许多人反馈在使用 Docker 部署若依微服务项目时,遇到验证码无法显示的问题。本文将重点介绍解决该问题的注意事项以及整个项目的部署流程。之前我们也撰写过微服务部署教程,本文将在此基础上进行优化和补充。你也可以参考我之前写的部署教程:https://yang-roc.blog.…

做材料科学领域研究热点:高通量多尺度材料计算和机器学习

研究背景 材料科学是一个重要领域&#xff0c;涉及物质的研究和利用。随着科技进步&#xff0c;材料学已成为多学科交叉的前沿领域之一&#xff0c;融合物理、化学、数学、信息、力学和计算科学等知识。寻找更坚固的新材料已成为当今急需解决的问题。 材料基因工程作为一项颠覆…

万相台的功能是什么?如何使用万相台?

1.特点&#xff1a; 万相台是一个智能渠道&#xff0c;可控性弱&#xff0c;高转化&#xff0c;人群&关键词是黑盒&#xff1b; 2.场景多&#xff1a; 有拉新快、活动加速、上新快、货品加速、活动加速、多目标直投、全站推等&#xff1b; 3.扣费逻辑&#xff1a;cpc付…

Elasticsearch:简化数据流的数据生命周期管理

作者&#xff1a;来自 Elastic Andrei Dan 今天&#xff0c;我们将探索 Elasticsearch 针对数据流的新数据管理系统&#xff1a;数据流生命周期&#xff0c;从版本 8.14 开始提供。凭借其简单而强大的执行模型&#xff0c;数据流生命周期可让n 你专注于数据生命周期的业务相关方…

动态规划-简单多状态dp问题 -- 按摩师

动态规划-简单多状态dp问题 – 按摩师 文章目录 动态规划-简单多状态dp问题 -- 按摩师题目重现算法流程示例代码 题目重现 题目链接&#xff1a;按摩师 - 力扣 一个有名的按摩师会收到源源不断的预约请求&#xff0c;每个预约都可以选择接或不接。在每次预约服务之间要有休息时…

Linux网络编程:多路转接|select|poll

目录 前言&#xff1a; 1.IO多路转接---select 1.1.接口认识 1.2.select如何进行多路转接 1.3.select多路转接的优缺点 2.IO多路转接---poll 2.1.接口认识 2.2.poll如何进行多路转接 2.3.poll多路转接优缺点 前言&#xff1a; 多路转接&#xff08;也称为IO多路复用&a…

留住马斯克和AI,股价连续大涨,但特斯拉还是贵?

留住马斯克和AI&#xff0c;股价连续大涨&#xff0c;但特斯拉还是贵&#xff1f; 特斯拉股东们花了560亿美元留住马斯克&#xff0c;但特斯拉的前景依旧迷雾重重&#xff0c;估值比一众科技巨头贵&#xff0c;汽车一季度销量疲弱&#xff0c;股价今年来累计下跌29%&#xff0…

mysql导入sql文件失败及解决措施

1.报错找不到表 1.1 原因 表格创建失败&#xff0c;编码问题mysql8相较于mysql5出现了新的编码集 1.2解决办法&#xff1a; 使用vscode打开sql文件ctrlh&#xff0c;批量替换&#xff0c;替换到你所安装mysql支持的编码集。 2.timestmp没有设置默认值 Error occured at:20…