关于YOLOX的一些优势

YOLOX 是旷视开源的高性能检测器。旷视的研究者将解耦头、数据增强、无锚点以及标签分类等目 标检测领域的优秀进展与 YOLO 进行了巧妙的集成组合,提出了 YOLOX,不仅实现了超越 YOLOv3、 YOLOv4 和 YOLOv5 的 AP,而且取得了极具竞争力的推理速度。

其中YOLOX-L版本以 68.9 FPS 的速度在 COCO 上实现了 50.0% AP,比 YOLOv5-L 高出 1.8% AP! 还提供了支持 ONNX、TensorRT、NCNN 和 Openvino 的部署版本。

YOLOX 是旷视科技推出的一种高性能目标检测算法。以下是关于它的详细介绍:

  1. 主要特点
  • Anchor-free 机制:与传统的 YOLO 系列采用 anchor boxes 的方式不同,YOLOX 采用了 anchor-free 的目标检测方法,减少了对预定义锚框的依赖,更直接地预测边界框的位置信息。这种方式有助于提高小目标检测性能,并且在训练和推理过程中减少了计算量和参数数量。在传统的基于 anchor 的目标检测方法中,模型需要预先定义一系列不同尺寸和长宽比的锚框,然后预测这些锚框与真实目标框之间的偏移量等信息来确定目标的位置和大小。而 YOLOX 摒弃了这种预定义锚框的方式,直接预测目标边界框的位置信息。具体来说,模型会预测边界框的中心点坐标以及宽高信息,以此来确定目标的位置和大小。例如,对于一个目标,模型预测其边界框中心点在图像中的坐标 以及该边界框的宽度 和高度 。
  1. 正负样本的筛选2:

    • 初步筛选

    • 中心点判断:首先判断预测框的中心点是否落在真实目标框(Ground Truth)内。计算预测框中心点到真实目标框上下左右四条边的距离,如果这些距离同时大于 0,则该预测框有可能是正样本。这一步是基于目标的空间位置关系进行的初步筛选,目的是找到可能包含目标的预测框。

    • 中心区域判断:在第一步的基础上,进一步判断预测框中心点是否在真实目标框中心点附近的特定区域内。比如,判断预测框中心点到以真实目标框中心点为中心的一个边长为 5×5 的区域的四条边的距离是否同时大于 0,如果满足该条件,则该预测框通过初步筛选。这一步的目的是更精确地筛选出与真实目标更接近的预测框,减少误判。

    • 精细筛选(SimOTA):经过前两步初步筛选出来一部分正样本候选后,假设筛选出了 1000 个正样本候选,而真实目标框的数量为 3。在进行前向计算时,会计算这 1000 个样本与 3 个真实目标框的损失,同时计算这 1000 个正样本候选与真实目标框的交并比(IoU),得到一个维度为 (3, 1000) 的 IoU 矩阵。根据 IoU 筛选出 IoU 最大的若干个候选框(比如 10 个),即维度为 (3, 10) 的候选框。计算这 10 个 IoU 的总和,这个总和值作为动态选择正样本的数量标准。然后,通过比较损失值,为每个真实目标框挑选损失值最低的几个候选框作为最终的正样本。对于一个候选框同时与多个真实目标框匹配的情况,比较该候选框与各个真实目标框的损失,将其分配给损失最小的真实目标框。

  • 减少计算复杂度:不需要预先定义锚框,避免了与锚框相关的复杂计算,如锚框的聚类分析等,降低了检测头的复杂度,也减少了生成结果的数量,在一些边缘设备上具有更好的性能表现。

  • 提升泛化能力:避免了因锚框尺寸和比例固定而可能导致的对某些特定形状或大小目标的不适应问题,提高了模型对不同类型目标的泛化能力。

  • 解耦头(Decoupled Head):在目标检测中,分类和回归的任务存在相互冲突,将耦合的检测头分开为两个相互独立的检测分支,一个分支负责预测目标的类别,另一个分支负责预测目标的边界框位置。这种解耦的设计使得模型能够更好地学习不同的任务,提高检测的准确性。

  • 先进的标签分配策略:引入了新的标签分配策略,优化了正负样本的选择过程,使得模型能够更好地学习到物体边界框的真实分布。例如使用 SimOTA 策略,该策略考虑了损失 / 质量相关性、中心优先、每个真实框的正样本动态数量以及全局视角等因素,提高了标签分配的合理性和准确性。

  • 强数据增广:继承了 YOLOv4 的数据增强策略,使用了 Mosaic 增强方法,通过随机拼接多张图像来生成新的训练样本,增强了模型对于各种场景的适应性和鲁棒性。同时还使用了 Mixup 等其他数据增强技术,进一步提升了模型的性能。

  1. 网络结构
  • 骨干网络:通常使用 Darknet-53 作为骨干网络,这是一种具有 53 个卷积层的卷积神经网络,能够提取图像的特征。

  • 颈部结构:采用特征金字塔网络(FPN)和路径聚合网络(PAN)的结合,进行多尺度特征融合,以便更好地检测不同大小的目标。

  • a能检测出来物体但是不易准确定位位置,b消耗资源太多,c没有将高层的语义信息和底层的位置信息融合,因此提出了FPN
  • 在现实世界的图像中,目标物体的大小差异巨大,从小的物体如昆虫到巨大的建筑物等。FPN 通过融合不同层次的特征图,能够同时处理不同尺度的目标。例如,对于小目标,浅层特征图具有较高的分辨率,能够提供更精细的位置信息,帮助模型准确地定位小目标。而对于大目标,深层特征图具有更丰富的语义信息,能够更好地识别目标的类别和整体形状。
  • FPN 可以很容易地与其他网络结构结合,形成更强大的目标检测模型。例如,可以与不同的骨干网络(如 ResNet、VGG 等)结合,利用不同骨干网络的优势提取特征,然后通过 FPN 进行多尺度特征融合。
  • 头部结构:使用解耦头结构,包括分类头和回归头,分别用于预测目标的类别和位置。

  1. 性能优势
  • 高精度:在多个公开数据集上的实验结果表明,YOLOX 的检测精度相较于之前的 YOLO 系列算法有了显著提升,能够准确地检测出各种目标1。

  • 快速训练:通过优化训练过程,YOLOX 的训练速度比以往的版本更快,能够在较短的时间内完成模型的训练1。

  • 灵活的可扩展性:具有灵活的可扩展性,允许用户根据实际应用场景选择不同的模型变体,包括 YOLOX-Nano、YOLOX-Tiny、YOLOX-S、YOLOX-M 和 YOLOX-L 等不同规模的模型,满足从边缘设备到服务器级别的部署需求。

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

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

相关文章

springboot项目引入了第三方jar包

应该把jar包放在resource目录下,新建一个lib目录放进去,不然打包的时候会报错找不到jar包,放入jar包,右键添加到库,才可以使用。 _g().startMarquee();

Allegro视频去除走线的小方块

走线出现小方块图如下: 其实这种情况并不影响PCB生产和布线的联通性,只是多少会影响美观和性能,在Allegro视频中去除的方法比较简单,是由模块复用以后,没有打散模块引起的。只要我们将模块的打散即可。具体操作如下:…

[vulnhub] SickOS1.1

https://www.vulnhub.com/entry/sickos-11,132/ 主机发现端口扫描 探测存活主机,136是靶机,因为靶机是我最后添加的 nmap -sP 192.168.75.0/24 // Starting Nmap 7.93 ( https://nmap.org ) at 2024-09-22 11:36 CST Nmap scan report for 192.168.75.1 …

前端——阿里图标的使用

阿里图标 将小图标定义成字体,通过引入字体的方式来展示这些图标 1.打开阿里图标库 https://www.iconfont.cn/ 2.登录 / 注册一个账号 3.选中你需要使用的图标 并且把它加入购物车 4.全部选择完之后 点击右上角 购物车 然后下载代码 5.解压后你下载的文…

day-59 四数之和

思路 双指针&#xff1a;类似16. 最接近的三数之和&#xff0c;将数组排序后&#xff0c;只需要枚举第一个数&#xff0c;则会变为与第16题相似的解题思路 解题过程 枚举选取的第一个数&#xff0c;0<i<len-3,然后就是第16题的解题思路 Code class Solution {public L…

裸土检测算法实际应用、裸土覆盖检测算法、裸土检测算法

裸土检测算法主要用于环境保护、农业管理、城市规划和土地管理等领域&#xff0c;通过图像识别技术来检测和识别地表上的裸露土壤。这种技术可以帮助管理者实时监控裸土面积&#xff0c;及时采取措施&#xff0c;防止水土流失、环境污染和生态退化。 一、技术实现 裸土检测算…

Qt开发-comboBox 所有槽函数介绍(2024.09)

activated(int): 触发于ComboBox中某一项被激活时&#xff0c;参数为该项的索引。 currentIndexChanged(QString)/currentIndexChanged(int): 当前选中项变化时触发&#xff0c;前者传递文本&#xff0c;后者传递索引。 currentTextChanged(QString): 当前选中项的文字变更时触…

【命令操作】Windonws端口被占用,查找占用端口的进程id,以及使用id杀死进程

Windonws端口被占用&#xff0c;查找占用端口的进程id,以及使用id杀死进程 Windonws端口被占用 查询端口 netstat -ano查询指定端口-获得占用端口的进程ID netstat -ano | findstr "端囗号"如查询8888端口 netstat -ano | findstr "8888"命令截图 命令…

基于 RealSense D435i相机实现手部姿态检测

基于 RealSense D435i相机进行手部姿态检测&#xff0c;其中采用 Mediapipe 进行手部检测&#xff0c;以下是详细步骤&#xff1a; Mediapipe 是一个由 Google开发的开源框架&#xff0c;专门用于构建多媒体处理管道&#xff0c;特别是计算机视觉和机器学习任务。它提供了一系列…

身为程序员,转行请慎重:考虑以下几点再决定是否转向大模型领域

在决定从程序员转型到大模型领域之前&#xff0c;有几个关键点需要认真考虑。这些因素将帮助你更全面地评估这一转变是否适合你的职业规划和个人情况。 个人兴趣与激情 自我反思&#xff1a;你对人工智能、深度学习和自然语言处理等领域是否有浓厚的兴趣&#xff1f;兴趣是最好…

35岁程序员转行大模型岗位:详细学习路线,从零基础到精通2024最新

随着人工智能&#xff08;AI&#xff09;和深度学习技术的飞速发展&#xff0c;越来越多的技术人才开始考虑转向这一前沿领域。对于已经拥有丰富编程经验但希望转型到大模型开发领域的35岁程序员来说&#xff0c;虽然面临一定的挑战&#xff0c;但也具备了坚实的基础。本文将提…

C++(学习)2024.9.24

目录 容器 1.标准模板库STL 2.概念 3.顺序容器 &#xff08;1&#xff09;array数组 &#xff08;2&#xff09;vector向量 &#xff08;3&#xff09;list列表 &#xff08;4&#xff09;deque 队列 4.关联容器 5.迭代器 面向对象核心 继承 概念 构造函数 1.派生…

HTML段落,换行,水平线标签与其属性

段落标签 段落标签是通过<p> </p>来定义的。 </head> <body><p>这是一个段落</p> </body> </html> 换行标签 换行标签通过<br>来定义&#xff0c;换行标签可以在不产生新的段落的情况下进行换行操作。 </head> …

更新C语言题目

1.以下程序输出结果是() int main() {int a 1, b 2, c 2, t;while (a < b < c) {t a;a b;b t;c--;}printf("%d %d %d", a, b, c); } 解析:a1 b2 c2 a<b 成立 ,等于一个真值1 1<2 执行循环体 t被赋值为1 a被赋值2 b赋值1 c-- c变成1 a<b 不成立…

RTE大会报名丨 重塑语音交互:音频技术和 Voice AI,RTE2024 技术专场第一弹!

Voice AI 实现 human-like 的最后一步是什么&#xff1f; AI 视频爆炸增长&#xff0c;新一代编解码技术将面临何种挑战&#xff1f; 当大模型进化到实时多模态&#xff0c;又将诞生什么样的新场景和玩法&#xff1f; 所有 AI Infra 都在探寻规格和性能的最佳平衡&#xff0…

Java—反射机制详解

介绍反射 反射的基本概念 反射&#xff08;Reflection&#xff09;是Java语言中的一种机制&#xff0c;它允许程序在运行时检查和操作类、接口、字段和方法等类的内部结构。通过反射&#xff0c;你可以在运行时获取类的信息&#xff0c;包括类的构造器、字段、方法等&#xf…

服务器安装pytorch_geometric torch_scatter踩坑记录

conda create -n pyg python3.8.12 pip install torch1.13.0安装的版本如下 pip install torch-scatter pip install torch-sparse pip install torch-cluster pip install torch-spline-conv pip install torch-geometric2.2.0 pip install ipykernel python -m ipykernel i…

Java—注解机制详解

概念 注解是类的组成部分&#xff0c;可以为类携带额外的信息&#xff0c;提供一种安全的注释标记机制&#xff0c;用于将任何信息或元数据与程序元素&#xff08;如类、方法、成员变量等&#xff09;关联。 注解是供编译器或JVM使用的&#xff0c;编译器或JVM可以根据注解执…

云岚到家 第一天实战总结

为什么使用post发送请求&#xff0c;参数依旧会被拼接带url上呢&#xff1f;这应该就是param 与data传参的区别。即param传参数参数会被拼接到url后&#xff0c;data会以请求体传递 不一定post发送请求&#xff0c;数据一定在请求体中&#xff0c;主要是看数据的格式。 后端c…

c++924

2 #include <iostream> #include <cstring>using namespace std;class MyString { private:char *str; // 记录C风格的字符串int size; // 记录字符串的实际长度public:// 定义无参构造MyString() : size(0) {str new char[1];str[0] \0;cou…