yolox原理

news2025/7/29 0:28:31

目录

1 Decoupled Head

 1.1 YOLOX的解耦头结构思考

2 Data Augmentation


别人讲的好的文章,yolox作者写的

以下正文部分内容,参考该链接

如何评价旷视开源的YOLOX,效果超过YOLOv5? - 知乎感谢大家对旷视开源的 YOLOX 关注,本篇回答我们邀请了旷视研究院的刘松涛、葛政来为大家解读,小编把话…https://www.zhihu.com/question/473350307/answer/2021031747

回到 YOLOX 设计的具体细节上,我们认为与之前 YOLO 最大的区别在于 Decoupled Head,Data Aug,Anchor Free 和样本匹配这几个地方。下面将从这几个方面展开聊。

1 Decoupled Head

 1.1 YOLOX的解耦头结构思考

参考这篇博客YOLOX的解耦头结构思考_望~的博客-CSDN博客_yolox 解耦头

讲的很好总结就是

分类更加关注所提取的特征与已有类别哪一类最为相近,而定位更加关注与GT Box的位置坐标从而进行边界框参数修正。因此如果采取用同一个特征图进行分类和定位,效果会不好,考虑到分类和定位所关注的内容的不同。因此采用不同的分支来进行运算,有利于效果的提升!同时为了避免计算量的大量增加,比如YOLOX的Decoupled Head结构,会先进行1x1的降维操作,然后再接上分类和定位两个分支,并在分类和回归分支里各使用了 2个3x3 卷积, 最终调整到仅仅增加一点点参数, 做一个检测效果和速度的trade-off,这也是很常见的一个思路!

根据表面上看,解耦检测头提升了 YOLOX 的性能和收敛速度,但更深层次的,它为 YOLO 与检测下游任务的一体化带来可能。比如:

1. YOLOX + Yolact/CondInst/SOLO ,实现端侧的实例分割。

2. YOLOX + 34 层输出,实现端侧人体的 17 个关键点检测。

以往或许已经有一些这方面的工作,但这些领域的 SOTA 依然拥有他们特殊的结构设计,使得该领域无法直接享用到 YOLO 系列发展的成果。如今一个打开了枷锁的检测头,我们认为会让 YOLO 与检测的下游任务更深层次的结合,为检测与下游任务的端到端一体化带来一些变化。

2 Data Augmentation

Mosaic 经过 YOLOv5 和 v4 的验证,证明其在极强的 baseline 上能带来显著涨点。我们组早期在其他研究上发现,为 Mosaic 配上 Copypaste,依然有不俗的提升。组内的共识是:当模型容量足够大的时候,相对于先验知识(各种 tricks,hand-crafted rules ),更多的后验(数据/数据增强)才会产生本质影响。通过使用 COCO 提供的 ground-truth mask 标注,我们在 YOLOX 上试了试 Copypaste,下表表明,在 48.6mAP 的 YOLOX-Large 模型上,使用 Copypaste 带来0.8%的涨点。

Mosaic 经过 YOLOv5 和 v4 的验证,证明其在极强的 baseline 上能带来显著涨点。我们组早期在其他研究上发现,为 Mosaic 配上 Copypaste,依然有不俗的提升。组内的共识是:当模型容量足够大的时候,相对于先验知识(各种 tricks,hand-crafted rules ),更多的后验(数据/数据增强)才会产生本质影响。通过使用 COCO 提供的 ground-truth mask 标注,我们在 YOLOX 上试了试 Copypaste,下表表明,在 48.6mAP 的 YOLOX-Large 模型上,使用 Copypaste 带来0.8%的涨点。

可 Copypaste 的实现依赖于目标的 mask 标注,而 mask 标注在常规的检测业务上是稀缺的资源。而由于 MixUp 和 Copypaste 有着类似的贴图的行为,还不需要 mask 标注,因此可以让 YOLOX 在没有 mask 标注的情况下吃到 Copypaste 的涨点。不过我们实现的 Mixup,没有原始 Mixup 里的 Bernoulli Distribution 和 Soft Label ,有的仅是 0.5 的常数透明度和 Copypaste 里提到的尺度缩放 ( scale jittering )。 YOLOX 里的 Mixup 有如此明显的涨点,大概是因为它在实现和涨点原理上更接近 Copypaste,而不是原版 Mixup。

Data Augmentation 里面需要强调的一点是: 要在训练结束前的15个 epoch 关掉 Mosaic 和Mixup ,这对于 YOLOX 非常重要。可以想象,Mosaic+Mixup 生成的训练图片,远远脱离自然图片的真实分布,并且 Mosaic 大量的 crop 操作会带来很多不准确的标注框,见下图



3 Anchor Free 与 Label Assignmen
 

Anchor Free 的好处是全方位的。1). Anchor Based 检测器为了追求最优性能通常会需要对anchor box 进行聚类分析,这无形间增加了算法工程师的时间成本; 2). Anchor 增加了检测头的复杂度以及生成结果的数量,将大量检测结果从NPU搬运到CPU上对于某些边缘设备是无法容忍的。当然还有; 3). Anchor Free 的解码代码逻辑更简单,可读性更高。

至于为什么 Anchor Free 现在可以上 YOLO ,并且性能不降反升,这与样本匹配有密不可分的联系。与 Anchor Free 比起来,样本匹配在业界似乎没有什么关注度。但是一个好的样本匹配算法可以天然缓解拥挤场景的检测问题( LLA、OTA 里使用动态样本匹配可以在 CrowdHuman 上提升 FCOS 将近 10 个点),缓解极端长宽比的物体的检测效果差的问题,以及极端大小目标正样本不均衡的问题。甚至可能可以缓解旋转物体检测效果不好的问题,这些问题本质上都是样本匹配的问题。在我们的认知中,样本匹配有 4 个因素十分重要:

1) loss/quality/prediction aware :基于网络自身的预测来计算 anchor box 或者 anchor point 与 gt 的匹配关系,充分考虑到了不同结构/复杂度的模型可能会有不同行为,是一种真正的 dynamic 样本匹配。而 loss aware 后续也被发现对于 DeTR 和 DeFCN 这类端到端检测器至关重要。与之相对的,基于 IoU 阈值 /in Grid(YOLOv1)/in Box or Center(FCOS) 都属于依赖人为定义的几何先验做样本匹配,目前来看都属于次优方案。

2) center prior : 考虑到感受野的问题,以及大部分场景下,目标的质心都与目标的几何中心有一定的联系,将正样本限定在目标中心的一定区域内做 loss/quality aware 样本匹配能很好地解决收敛不稳定的问题。

3) 不同目标设定不同的正样本数量( dynamic k ):我们不可能为同一场景下的西瓜和蚂蚁分配同样的正样本数,如果真是那样,那要么蚂蚁有很多低质量的正样本,要么西瓜仅仅只有一两个正样本。Dynamic k 的关键在于如何确定k,有些方法通过其他方式间接实现了动态 k ,比如 ATSS、PAA ,甚至 RetinaNet ,同时,k的估计依然可以是 prediction aware 的,我们具体的做法是首先计算每个目标最接近的10个预测,然后把这个 10 个预测与 gt 的 iou 加起来求得最终的k,很简单有效,对 10 这个数字也不是很敏感,在 5~15 调整几乎没有影响。

4) 全局信息:有些 anchor box/point 处于正样本之间的交界处、或者正负样本之间的交界处,这类 anchor box/point 的正负划分,甚至若为正,该是谁的正样本,都应充分考虑全局信息。

我们在 CVPR 21 年的工作 OTA 充分考虑到了以上 4 点,通过把样本匹配建模成最优传输问题,求得了全局信息下的最优样本匹配方案,欢迎大家阅读原文。但是 OTA 最大的问题是会增加约 20~25 %的额外训练时间,对于动辄 300epoch 的 COCO 训练来说是有些吃不消的,此外 Sinkhorn-Iter 也会占用大量的显存,所以在 YOLOX 上,我们去掉了 OTA 里的最优方案求解过程,保留上面 4 点的前 3 点,简而言之: loss aware dynamic top k。由于相对 OTA 去掉了Sinkhorn-Iter 求最优解的过程,我们把 YOLOX 采用的样本匹配方案称为 SimOTA ( Simplified OTA )。我们在 Condinst 这类实例分割上用过 SimOTA ,获得了 box 近1个点, seg 0.5 左右的涨点。同时在内部 11 个奇奇怪怪,指标五花八门的业务数据上也测试过 SimOTA ,平均下来发现 SimOTA>FCOS>>ATSS ,这些实验都满足我们不去过拟合 COCO 和 COCO style mAP 的初衷。没有复杂的数学公式和原理,不增加额外的计算时间,但是有效。用今年非常流行的句式为这个小节结个尾: Anchor free and dynamic label assignment are all you need.

End2end

端到端( 无需 NMS )是个很诱人的特性,如果预测结果天然就是一个 set ,岂不是完全不用担心后处理和数据搬运?去年有不少相关的工作放出( DeFCN,PSS, DeTR ),但是在 CNN 上实现端到端通常需要增加2个 Conv 才能让特征变的足够稀疏并实现端到端,且要求检测头有足够的表达能力( Decoupled Head 部分已经详细描述了这个问题),从下表中可以看到,在 YOLOX 上实现 NMS Free 的代价是轻微的掉点和明显的掉 FPS 。所以我们没有在最终版本中使用 End2End 特性。

 

yolox自己的理解

1,anchor point 

对应anchor box, anchor point 就是最后的特征图假如是3x3, 那么就是9个anchor point , 特征图上每一个点能表示一个框,(即预测一个框), 对应基于anchor的box

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

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

相关文章

数字化外协生产综合管理系统,实现信息自动同步,数据自动统计分析!

随着市场经济的不断发展,制造生产行业竞争不断加剧,精细化、无纸化办公已成为生产企业生存和发展的基本条件。要想将企业内部管理做的更精更细,就必须借助于现代先进的企业管理手段和工具,如企业资源计划系统、生产管理系统等。 …

Linux安装Apache(解压版)

安装依赖 yum -y install gcc perl wget make pcre-devel openssl-devel expat-devel 安装目录 mkdir /opt/apache && cd /opt/apache 安装包下载 wget https://dlcdn.apache.org/apr/apr-1.7.0.tar.gz --no-check-certificate wget https://dlcdn.apache.org/apr/apr-…

谈谈数据分析晓知识

随着数字化转型普遍开展,数据分析飞速发展。无论您的组织属于哪个行业,数据分析都可能在制定战略中发挥着关键作用。许多公司现在都有数据分析师,他们对原始数据采用数据挖掘技术,从这个过程中获得的许多可行的洞察和见解。 同时,数据分析软件市场迅速攀升。根据IDC的数据…

【iOS-UIImagePickerController访问相机和相册】

文章目录记录UIImagePickerControllerUIImagePickerController的sourceType主要代码点击imageView事件跳转到相机和相册![请添加图片描述](https://img-blog.csdnimg.cn/0a5a307de371421eba7e3472075dcaeb.png)总结记录 在写知乎日报的时候用到过imageVIew点击事件&#xff0c…

函数式编程

Lambda表达式介绍 Lambda简介 Lambda 表达式是 JDK8 的一个新特性,可以取代大部分的匿名内部类,写出更优雅的 Java 代码,尤其在集合的遍历和其他集合操作中,可以极大地优化代码结构。 在Java语言中,可以为变量赋予一…

连续六个季度实现盈利改善,达达集团内外双重确定性凸显

当消费迈向复苏时,今年的社会消费品零售也在总额恢复增长的情况下,迎来结构性变化。 其中,一股消费力量的加速增长成为了重点——即时零售。今年7月,商务部在官网发布的《2022年上半年中国网络零售市场发展报告》,首次…

VOACAP 软件的下载与安装

VOACAP 简介 VOACAP(Voice of America Coverage Analysis Program,美国之音覆盖分析程序)软件是NTIA/ITS开发的高频规划软件包 ITS HF Propagation 中的一个电路计算模块,它是对原 ITS IONCAP 模块(高频传输系统应用预测模块之一)的改进,并根…

LogTAD:无监督跨系统日志异常域检测

摘要 日志异常检测,其对开发稳定、可持续的系统具有重要意义。但当系统刚上线时,收集足够的数据训练一个无监督模型是不现实的。为此本文提出了一个可转移的日志异常检测(LogTAD)框架,该框架利用对抗域适应技术使来自不同系统的日志数据具有…

小程序最新获取用户头像昵称

目录 一、前言 二、遇到的问题 三、效果页面 四、代码实现 记录: 一、前言 昨天打开编辑器后,发现小程序用户的头像与昵称都给变默认了,就去网上搜了一下: 小程序用户头像昵称获取规则调整公告 | 微信开放社区 我去&…

Spring6整合JUnit5

十七、Spring6整合JUnit5 17.1 Spring对JUnit4的支持 准备工作&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instanc…

[附源码]java毕业设计暖暖猫窝系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Linux之软连接和硬连接的用法和区别【详细!!!】

目录软连接创建一个软连接删除软连接硬链接创建硬链接删除硬链接硬链接和软连接之间的区别软连接 创建一个软连接 ln -s [源文件或目录] [软连接名称] 例子&#xff1a; 在/home目录下创建一个软连接linkToRoot 链接到/root目录 删除软连接 rm -f /linkToRoot例子&#x…

供应CAS:73342-16-2,N3-PEG-OH,Azide-PEG-Hydroxy,叠氮-聚乙二醇-羟基

一&#xff1a;产品描述 1、名称 英文&#xff1a;N3-PEG-OH&#xff0c;Azide-PEG-Hydroxy 中文&#xff1a;叠氮-聚乙二醇-羟基 2、CAS编号&#xff1a;73342-16-2 3、所属分类&#xff1a;Azide PEG Hydroxyl PEG 4、分子量&#xff1a;可定制&#xff0c;叠氮-PEG 34…

[附源码]java毕业设计某公司酬薪管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

无需重启应用,动态采集任意点位日志

作者&#xff1a; 屿山 现实系统往往有着较高的复杂度&#xff0c;我们借助 Trace、Log、Metric 三驾马车使我们的系统具备了一定的可观测性&#xff0c;但观测位置和信息往往是固定的&#xff0c;而我们所遇到的问题常常是意料之外的&#xff0c;这就导致我们能够定位问题的范…

BLE学习(1):蓝牙协议栈的介绍

蓝牙官方(The Bluetooth Special Interest Group)定义了低功耗蓝牙(Bluetooth low energy,即LE)和基础/增强速率蓝牙(Bluetooth basic rate/enhanced data rate ,即BR/EDR)两种技术的协议栈。这两种协议栈可以单独使用&#xff0c;也可以同时使用&#xff0c;如下图所示&#x…

泛型「generic」讲解

标题1. 泛型语法1.1 泛型的引出1.2 泛型介绍1.3 泛型语法1.4 泛型使用细节1.5 练习题2.自定义泛型2.1自定义泛型-类2.2自定义泛型-接口2.3自定义泛型-方法2.4练习题3.范型继承和通配符3.1JUnit单元测试框架3.2练习题1. 泛型语法 1.1 泛型的引出 传统方法不能对加入到集合中的…

Docker部署ELK

Docker部署ELK安装包下载1、安装docker2、安装docker compose3、使用docker加载离线镜像4、上传yml文件并初始化密码5、造数据&#xff0c;看采集结果安装包下载 链接:https://pan.baidu.com/s/1LOHyhTHm3-30v6wAfYLTAg 提取码:5uno 1、安装docker &#xff08;1&#xff09…

Python新手的福音,涵盖20+种初学者必练项目!

前言 对学Python的新手同学来说&#xff0c;最最最想要的干货是什么&#xff1f;是大量可以练手的项目啊。俗话说&#xff0c;三天不练手生&#xff0c;三天不念口生。#技术派的书架# &#xff08;文末送读者福利&#xff09; 在某乎上有一个关于"Python的练手项目”的问…

【线程】线程同步

目录 一、信号量 1.函数 2.使用 二、读写锁 1.函数 2.使用 三、互斥锁 1.函数 2.使用 四、条件变量 1.函数 2.使用 前言 线程同步的实现方法&#xff1a;信号量、互斥锁、条件变量、读写锁。 下面就对着四种方法进行展开描述 一、信号量 与进程间通信的信号量类似&a…