YOLOX: 让YOLO重回Anchor-Free, 成为最强YOLO

2024-03-13 12:40

本文主要是介绍YOLOX: 让YOLO重回Anchor-Free, 成为最强YOLO,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

论文地址:https://arxiv.org/abs/2107.08430

1. 动机

yolo系列一直以来都是目标检测领域最火的方法. 从yolo2开始, yolo系列就一直是Anchor-based的检测器, 而近年来Anchor-free类的方法发展迅猛, 已经可以达到甚至超越Anchor-based的方法了. 但是yolo4和yolo5依然沿用了Anchor-based架构. 于是, 作者将Anchor-free引入到yolo中, 并使用了各种最新技术(如: decoupled head, SimOTA等), 从而形成了一个全新的yolo检测--YOLOX.

2. 方法

2.1. Baseline and backbone

考虑到yolo4和yolo5可能会在anchor-based pipline上过拟合, 以及yolo3的通用性, 于是作者采用yolo3-SPP作为yolox的baseline.

backbone方面,作者采用了3套:

  • yolo3中的DarkNet53, 用于和yolo3进行对比;
  • yolo5中的CSPNet, 用于达到较高的性能;
  • Tiny 和 Nano, 用于轻量化检测;

2.2. Decoupled Head

在目标检测领域, 分类和回归之间的矛盾是一个众所周知的问题. 解耦头(Decoupled Head)是一个很好的解决方案, 但yolo还未将此方案纳入其中. 作者设计了两个实验,验证了Decoupled Head能够提升yolo的性能:

  • 1).  将yolo原有的head替换为Decoupled Head可以极大加速收敛;
  • 2). Decoupled Head对于end2end是十分必要的(可降低性能下降的幅度);

于是,作者设计了一个轻量级的解耦头, 结构如图2所示:

从图2可以看出: 对于FPN输出的feature maps, 先经过一个1*1卷积层进行通道降维; 然后经过两个并行的分支, 每个分支有两个3*3卷积层;最后,再经过1*1卷积, 得到三个分支(Cls, Rge, IoU)。

2.3. Strong Data Augmentation

作者使用Mosaic和Mixup作为yolox中的数据增强策略, 并在最后15个epochs关闭。使用了这种强数据增强策略后,作者发现Imageet预训练就不再起作用了,因此,yolox是train from scratch的。

2.4. Anchor Free

yolo4和yolo5都延续了yolo3的anchor-based pipline,然而,anchor机制有很多已知的问题:

  • 首先,为了达到最优性能,需要在训练前对数据集做聚类分析,来生成一组最优的anchors;这些anchors是特定于该数据集的,因此泛化性不佳;
  • 其次,anchor机制增加了检测头的复杂度,以及每个图像中的预测数量;这对一些边缘AI设备不友好;

而anchor-free近些年发展迅猛,已经能够达到anchor-based方法的性能,且其显著减少了手工设计的内容以及各种tricks,从而使得训练和解码阶段得以简化。

将yolo切换到anchor-free也相当简单:

将每个位置预测个数从3减少到1,并直接预测四个值(即:到网格的左上角的偏移量和box的高宽);同时,将中心点设为正样本,并预设了一个尺度范围为每个对象指定FPN级别。

如此一来,检测器的参数量和GFLOPS大大降低,速度更快,性能更好。

2.5. Multi Positives

上面的anchor-free版本为了和yolo3保持一致,只为每个对象分配一个正样本(中心点)。但其实其他高质量预测的位置同样又用,可以有利于梯度更新并缓解训练过程中正负样本不均衡的问题。这里采用了FCOS中的中心点采样方法,将中心点3*3邻域的位置都设为正样本。

2.6. SimOTA

先进的标签分配是近年来目标检测领域的另一个重大进展。基于旷视自家的OTA,作者总结了先进的标签分配的四个关键见解:1)损失/质量感知;2)中心点先验;3)每个ground-truth具有动态正anchor数量(dynamic top-k);4)全局视野。OTA满足上面四条规则,因此作者选其作为标签分配策略。

具体的,OTA从一个全局视角分析了标签分配,并将分配过程表示为最优运输(Optimal Transport,OT)问题,在现有的分配策略中产生SOTA性能。然而,作者发现在使用Sinkhorn-Knopp算法解决OT问题时会带来25%的训练时间,这对于300个epochs的训练过程来讲是非昂贵。因此,作者将其简化为了dynamic top-k策略,命名为SimOTA,从而能得到近似解。

这里简要介绍SimOTA:

  • 首先,对于每个“预测-GT”对,计算其成对匹配度,表示为代价或者质量:

c_{i j}=L_{i j}^{c l s}+\lambda L_{i j}^{r e g}   (1)

        其中,\lambda表示平衡系数,L_{i j}^{c l s}L_{i j}^{r e g}分别表示GT与预测之间的分类损失和回归损失。

  • 然后,对于每个GT,在其固定邻域内,选择top-k个代价最小的预测作为其正样本。
  • 最后,这些正预测所对应的网格就分配为正例,而其他的则为负例。

需要注意,top-k中的k值随着GT而变化,这是动态的。

SimOTA不仅减少了训练时间,而且避免了Sinkhorn-Knopp算法中的额外超参。

2.7. NMS-Free

作者尝试了end2end:增加了两个卷积层,一对一标签分配,以及梯度停止。这使得检测器可以端到端执行,但会轻微降低性能和推理速度。因此,最终模型并没有使用该策略。

2.8. 其他的backbone

除了DarkNet53,作者还在其他不同尺寸的backbone上进行了改进,且都能达到提升性能的效果。作者修改了yolo5的CSPNet,并设计了Tiny和Nano版的yolox,改进效果分别如表3表4所示:

 2.9. 模型尺寸和数据增强策略

作者发现,对于不同模型大小,调整不同的数据增强策略有助于提高性能,具体如表5所示:

3. 实验结果

这篇关于YOLOX: 让YOLO重回Anchor-Free, 成为最强YOLO的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/804913

相关文章

YOLO v3 训练速度慢的问题

一天一夜出了两个模型,仅仅迭代了200次   原因:编译之前没有将Makefile 文件里的GPU设置为1,编译的是CPU版本,必须训练慢   解决方案: make clean  vim Makefile make   再次训练 速度快了,5分钟迭代了500次

二本毕业,我是如何成为BAT-安卓开发工程师?

1.对基础原理不断挖掘 进入公司,我的职位是Linux应用开发工程师,做App网络传输模块,本质上就是把本地的数据通过socket传输到服务端。用到的技术是C语言,网络编程,多线程编程。 那时是最痛苦的几个月,因为非计算机出生,很多东西都不会,经常程序段错误,都不能定位到问题代码。 当时处于试用期间,秉承着不成功则成仁的心态开始恶补相关的基础知识以及代码规范。那时网络上没有现成的视频资料,艰

▶《强化学习的数学原理》(2024春)_西湖大学赵世钰 Ch5 蒙特卡洛方法【model-based ——> model-free】

PPT 截取必要信息。 课程网站做习题。总体 MOOC 过一遍 1、视频 + 学堂在线 习题 2、 过 电子书 是否遗漏 【下载:本章 PDF GitHub 页面链接 】 【第二轮 才整理的,忘光了。。。又看了一遍视频】 3、 过 MOOC 习题 看 PDF 迷迷糊糊, 恍恍惚惚。 学堂在线 课程页面链接 中国大学MOOC 课程页面链接 B 站 视频链接 PPT和书籍下载网址: 【Gi

《三国:谋定天下》成为了SLG游戏现象级的成功案例

原标题:《三国:谋定天下》引领SLG游戏新潮流,B站股价五个飙升了30%   易采游戏网6月23日:B站作为年轻人喜爱的文化社区和视频平台,再次用一款新的游戏证明了其在游戏发行领域的独到眼光与强大实力。最近大火的策略角色扮演游戏《三国:谋定天下》成为了现象级的成功案例,不仅游戏本身质量受到认可,而且在竞争激烈的iOS畅销榜上勇夺第三的位置,仅排在了资深巨头DNF手游和《王者荣耀》之后。更加引人注

八爪鱼现金流-025-工作的终极目标,不是为了成为更好的员工

工作的终极目标,不是为了成为更好的员工。 而是解放时间和收入自动化 打造自己的被动收入!!! 八爪鱼现金流 八爪鱼

如何与情绪好好相处,真正成为情绪的主人

一、教程描述 若要成为一个聪明的人,就要学会做情绪的主人,而不是被情绪控制自己,为什么要做情绪的主人?至少有以下两个方面原因。 其一,都说,世上还是好人多。可是,为什么你身边没有一个好人?其实,不是你身边没有好人,是因为你自己不够好。很多事情,就是“一环扣一环,环环相扣”的,如果事情在你的手上搞砸了,那么整件事就搞砸了。事情搞砸了还可以挽救,要是情绪也坏了,那么就真的没有挽回的余地了,只会越

lock_free 锁无关

锁无关的(Lock-Free)数据结构——在避免死锁的同时确保线程继续 C/C++ Users Journal October, 2004 锁无关的(Lock-Free)数据结构 在避免死锁的同时确保线程继续   Andrei Alexandrescu 刘未鹏 译 Andrei Alexandrescu是华盛顿大学计算机科学系的在读研究生,也是《Modern C++ Design》一书的作者。

[数据集][目标检测]棉花叶子害虫检测数据集VOC+YOLO格式595张1类别

数据集格式:Pascal VOC格式+YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):595 标注数量(xml文件个数):595 标注数量(txt文件个数):595 标注类别数:1 标注类别名称:["insect"] 每个类别标注的框数: insect 框数 = 823 总框数:823 使用标注工具:

【Rust日报】2020-10-23 - rust-gpu v0.1发布,尝试让Rust成为GPU编程的一等语言

rust-gpu v0.1发布,尝试让Rust成为GPU编程的一等语言 纵观游戏开发的历史,离不开GPU编程,其中最为重要的一个概念是Sharder language,即着色器语言。如今主流的着色器语言主要有三种: 基于 OpenGL 的 OpenGL Shading Language,简称 GLSL;基于 微软DirectX 的 High Level Shading Language,简称 H

掌握Three.js:学习路线,成为3D可视化开发的高手!

学习Three.js可以按照以下路线进行: 基础知识: 首先要了解基本的Web开发知识,包括HTML、CSS和JavaScript。如果对这些知识已经比较熟悉,可以直接进入下一步。 Three.js文档: 阅读Three.js官方文档是学习的第一步。官方文档提供了详细的API参考和示例代码,可以了解Three.js的基本概念、核心功能和用法。 示例代码: 在