YOLOX论文解读

paper:YOLOX: Exceeding YOLO Series in 2021

official implementation:https://github.com/Megvii-BaseDetection/YOLOX

本文的创新点

本文在YOLOv3的基础上进行了一些改进:包括将检测头进行解耦的decoupled head、从anchor-based转为anchor-free、标签分配使用OTA的简化版本SimOTA,提出了YOLOX,在large-scale和light-weight模型方面都取得了SOTA的结果,如图1所示。

YOLOX

YOLOX-DarkNet53

Implementation details 训练设置从baseline到最终的模型基本是一致的。我们在COCO train2017上总共训练了300个epoch,包括5个epoch的warm-up。优化器选择SGD。使用 \(lr\times Batchsize/64\) 的学习率,初始 \(lr=0.01\) 和cosine lr schedule。weight decay大小为0.0005,SGD momentum为0.9。对于8-GPU的设置,batch size默认为128。输入大小以步长32均匀的从448到832。本文中FPS和lantency都是在Tesla V100上以FP16精度和batch=1进行测量。

YOLO v3 baseline baseline采用DarkNet-53和SPP层的YOLOv3。与原来的实现相比,作者稍微改变了一些训练策略,增加了EMA权重更新、余弦学习衰减策略、IoU损失和IoU-aware分支。用BCE loss训练 \(cls\) 和 \(obj\) 分支,用IoU loss训练 \(reg\) 分支。这些通用的训练技巧与YOLOX的关键改进是orthogonal的关系,因此把它们放到了baseline上。此外,我们只进行随机水平翻转RandomHorizontalFlip、颜色抖动ColorJitter和多尺度multi-scale的数据增强,并丢弃了RandomResizedCrop,因为作者发现RandomResizedCrop和mosaic增强有一些重叠。通过这些增强,baseline在COCO val上得到了38.5% AP,如表2所示。

Decoupled head 在目标检测中,分类和回归任务之间的conflit是一个众所周知的问题,因此解耦头decoupled head被广泛用于大多数one-stage和two-stage检测模型中。但YOLO系列骨干网络和特征金字塔不断进化,检测头却仍然是coupled,如图2所示。

两个分析实验表明coupled head可能会损害性能。1)用decoupled head代替coupled head,大大提高了收敛速度,如图3所示。2)decoupled head对end-to-end版本的YOLO至关重要(后面会详述)。

 

从表1可以看出,耦合头的端到端版本AP下降了4.2,而解耦头只下降了0.8。因此我们将coupled head换成了decoupled head,如图2所示。具体而言,它包含一个1x1卷积层用来降低通道维度,两个平行分支中各有两个3x3卷积层。从表2可以看出,decoupled head带来了额外1.1ms的推理时间(11.6ms v.s. 10.5ms)。

 

Strong data augmentation 我们添加了Mosaic和MixUp到数据增强策略中来提高YOLOX的性能。Mosaic是ultralytics-YOLOv3提出的一种有效的数据增强策略,后续被广泛用于YOLOv4、YOLOv5和其它检测模型中。MixUp最初是为图像分类设计的,后来在BoF中修改用于目标检测训练。在我们的模型中,我们使用了Mosaic和MixUp,并在最后15个epoch关闭它们,得到了42%的AP,如表2所示。在使用了更强的数据增强后,我们发现ImageNet预训练不再有用,因此接下来的模型我们全部都从头训练。 

Anchor-free YOLOv4和YOLOv5都遵循了YOLOv3最初基于anchor的pipeline。然而,anchor机制存在许多问题。首先,为了达到最优检测性能,需要在训练前进行聚类分析以确定一组最优anchor,这些anchor是特定于领域的并且泛化性较差。其次,anchor机制增加了检测head的复杂性以及每张图片的预测数量。在一些边缘AI系统中,在设备之间(例如从NPU到CPU)移动如此大量的预测可能成为总体延迟的潜在瓶颈。

Anchor-free机制在过去两年发展迅速,这些工作表明,anchor-free检测模型的性能可以达到anchor-based模型的相同水平。Anchor-free机制显著减少了为了获得好的性能需要的启发式调优和相关trick的设计参数(比如Anchor Clustering, Grid Sensitive),使得检测模型,特别是训练和解码阶段变得非常简洁。

将YOLO转换到anchor-free的方式非常简单,我们将每个位置的预测数量从3减为1,并直接预测四个值,即相对网格左上角的两个偏移和预测框的宽高。我们将每个对象的中心位置指定为正样本,并像FCOS一样预先定义一个尺度范围来指定每个对象所属的FPN层级。这种修改减少了检测模型的参数和GFLOPs使其更快,并取得了更高的性能 - 42.9% AP,如表2所示。

Multi positives 为了和YOLOv3的分配规则一致,上述anchor-free的版本只为每个对象分配了一个正样本(中心位置),但同时忽略了其它高质量的预测。但是,优化这些高质量的预测也会带来有益的梯度,这可能会缓解训练过程中正负样本的极端不平衡。因此我们将中心3x3区域分配为正样本,这在FCOS中被称为"center sampling"。如图2所示,检测模型的性能提升到了45.0% AP,已经超越了目前最好的ultralytics-YOLOv3(44.3% AP)。

SimOTA 先进的标签分配方法是近年来目标检测领域的另一项重要进展。基于我们自研的OTA,我们总结了先进标签分配的四个关键点:1)loss/quality aware 损失/质量感知的,2)center prior 中心先验,3)每个ground-truth动态的positive anchor数量(简写为动态top-k),4)global view 全局视野。OTA同时满足了上述四条,因此我们选择它作为候选标签分配策略。关于OTA的具体介绍见OTA: Optimal Transport Assignment for Object Detection 原理与代码解读-CSDN博客

具体来说,OTA从全局角度来分析标签分配,并将分配过程定义为一个最优传输问题(Optimal Transport, OT),在现有的分配策略中取得了SOTA的性能。但是我们发现通过Sinkhorn-Knopp算法解决OT问题导致训练时长增加了25%,对于训练300个epoch来说代价很大。因此我们将其简化为动态top-k策略,成为SimOTA,以得到一个近似解。

SimOTA首先计算每对prediction-gt的匹配程度,即cost。SimOTA中,gt \(g_{i}\) 和预测 \(p_j\) 之间的cost计算如下

其中 \(\lambda\) 是平衡系数,\(L_{ij}^{cls}\) 和 \(L_{ij}^{reg}\) 分别是 \(g_{i}\) 和 \(p_j\) 的分类损失和回归损失。然后对于 \(g_{i}\),我们在一个固定的中心区域内选择cost最小的 \(k\) 个预测作为它的正样本。最后,这些positive预测对应的网格grid划分为正样本,其余的grid作为负样本。注意对于不同ground-truth,\(k\) 值也不同,具体可以参考OTA中的Dynamic \(k\) Estimation策略。

SimOTA不仅减少了训练时间,而且避免了inkhorn-Knopp算法中额外的超参。如表2所示,SimOTA将模型的AP从45.0%提升到47.3%,比SOTA的ultralytics-YOLOv3高了3.0%,显示出了先进标签分配策略的作用。

End-to-end YOLO 作者遵循《Object detection made simpler by eliminating heuristic nms》的方法额外添加了两个卷积层,一对一的标签分配,停止梯度。这使模型可以端到端的执行检测,但会略微降低性能和推理速度,如表2所示。作者这里将它作为一个可选的模块,并不包含在最终的模型中。

Other Backbones

除了DarkNet53,作者还在其它不同大小的backbone上测试了YOLOX,都得到了提升。

Modified CSPNet in YOLOv5 为了公平比较,我们采用了YOLOv5的backbone,包括改进的CSPNet,SiLU激活,和PAN检测头。我们还仿照其缩放规则得到了YOLOX-S,YOLOX-M,YOLOX-L和YOLOX-X。如表3所示,和YOLOv5相比,我们的模型得到了一致的提升,~3.0%到~1.0%,只增加了少量的时间(来自于decoupled head)。

Tiny and Nano Detectors 我们进一步缩小得到了YOLOX-Tiny从而可以和YOLOv4-Tiny进行比较。对于移动设备,我们采用深度构建了YOLOX-Nano,该模型只有0.91M的参数和1.08G的FLOPs。如表4所示,YOLOX在更小的模型上也表现良好。

 

Model size and data augmentation 在我们的实验中,所有的模型都使用了相同的learning schedule和优化参数。但我们发现,对不同大小的模型,合适的数据增强策略也不同。如表5所示,对YOLOX-L应用MixUp可以提高0.9% AP,对小模型最好减小数据增强的强度。具体来说,当训练小模型(YOLOX-S, YOLOX-Tiny, YOLOX-Nano)时,我们去掉了mix-up并削弱了mosaic(尺度范围从[0.1, 2.0]变成[0.5, 1.5])。这将YOLOX-Nano的AP从24.0%提高到了25.3%。

 

对于大模型,我们发现更强的数据增强更有帮助。实际上,我们的MixUp实现比原始实现heavier一些。受Copypaste(具体介绍见Copy-Paste(CVPR 2021)原理与代码解析-CSDN博客)的启发,在mixup之前,我们对两张图片都进行了抖动,抖动的比例因子是随机采样的。为了理解Mixup结合scale jittering的表现,我们将其与YOLOX-L上的Copypaste进行比较,注意到Copypaste需要额外的instance mask标注而MixUp不需要。但如表5所示,这两种方法获得了差不多的精度,表明当没有实例掩码标注时,MixUp结合scale jittering是CopyPaste的合格替代品。

Comparision with the SOTA

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python使用错误总结

【1】cannot import name ‘ParameterSource’ from ‘click.core’ 其根本原因在于是black模块,其模块版本可能过时,升级black模块版本即可: pip install black --upgrade【2】partially initialized module ‘charset_normalizer’ has n…

React-父传子

1.概念 说明:父组件传递数据子组件标签身上绑定属性;子组件接受数据props的参数。props是一个对象,包含父组件传递的所有数据。例如数字、字符串、布尔值、数组、对象、函数、JSX。不允许直接修改父组件传递的数据。 2.例子 // 父传子 // …

社区服务类创业项目推荐:抓住社区商业新机遇

大家好,我是一名90后鲜奶吧创业者,目前在社区经营5年时间,今天我想和大家分享一些关于社区服务类创业项目的推荐,都是这么多年我见证过生意最好的店面。 1、社区便利店: 随着人们生活节奏的加快,对便利购…

刨析数据结构(三)

🌈个人主页:小田爱学编程 🔥 系列专栏:数据结构-带你无脑刨析 🏆🏆关注博主,随时获取更多关于IT的优质内容!🏆🏆 😀欢迎来到小田代码世界~ &…

typeorm-入门

简述 typeorm是一个数据库orm框架,在nestjs官网中有提到,可以充分发挥利用typescript的特性,当然也支持js其中涉及的概念包括 DataSource 数据源,Connection 连接数据库Entity 实体,实体类映射数据库表Relation 关系…

《TCP/IP详解 卷一》第13章 TCP连接管理

目录 13.1 引言 13.2 TCP连接的建立与终止 13.2.1 TCP半关闭 13.2.2 同时打开与关闭 13.2.3 初始序列号 13.2.4 例子 13.2.5 连接建立超时 13.2.6 连接与转换器 13.3 TCP 选项 13.3.1 最大段大小选项 13.3.2 选择确认选项 13.3.3 窗口缩放选项 13.3.4 时间戳选项与…

开启AI绘画新纪元:让创意在指尖绽放

文章目录 一、了解AI绘画的基本原理二、选择合适的AI绘画工具三、掌握AI绘画的基本技巧四、借鉴与创新:从模仿到创作五、参与社区交流,共同成长《AI绘画教程:Midjourney使用方法与技巧从入门到精通》亮点推荐内容简介作者简介目录 在科技日新…

OpenAI (ChatGPT)中国免费试用地址

GitHub - click33/chatgpt---mirror-station-summary: 汇总所有 chatgpt 镜像站,免费、付费、多模态、国内外大模型汇总等等 持续更新中…… 个人能力有限,搜集到的不多,求大家多多贡献啊!众人拾柴火焰高!汇总所有 cha…

基于java+springboot+vue实现的宠物健康咨询系统(文末源码+Lw)23-206

摘 要 本宠物健康咨询系统分为管理员还有用户两个权限,管理员可以管理用户的基本信息内容,可以管理公告信息以及宠物健康知识信息,能够与用户进行相互交流等操作,用户可以查看宠物健康知识信息,可以查看公告以及查看…

目标检测——摩托车头盔检测数据集

一、简介 首先,摩托车作为一种交通工具,具有高速、开放和稳定性差的特点,其事故发生率高,伤亡率排在机动车辆损伤的首位。因此,摩托车乘员头盔对于保护驾乘人员头部安全至关重要。在驾乘突发状况、人体受冲击时&#…

【微信小程序】传参存储

目录 一、本地数据存储 wx.setStorage wx.setStorageSync 1.1、异步缓存 存取数据 1.2、同步缓存 存取数据 二、使用url跳转路径携带参数 2.1、 wx.redirectTo({}) 2.2、 wx.navigateTo({}) 2.3、 wx.switchTab({}) 2.4 、wx.reLaunch({}) 2.5、组件跳转 三、…

自动化测试框架robotframework安装教程

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1.下载安装robotframework2.安装wxpython3.在线安装robotframework-ride4.安装selenium2library5.安装databaselibrary7.安装PyMySql8.下载浏览器驱动程序*9.启动ro…

C++:Stack和Queue的模拟实现

创作不易,感谢三连! 一、容器适配器 适配器是一种设计模式(设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结),该种模式是将一个类的接口转换成客户希望的另外一个接口。 就如同是电源适配器将不适用的交流电…

阿里云服务器怎么使用?3分钟搭建网站教程2024新版

使用阿里云服务器快速搭建网站教程,先为云服务器安装宝塔面板,然后在宝塔面板上新建站点,阿里云服务器网aliyunfuwuqi.com以搭建WordPress网站博客为例,来详细说下从阿里云服务器CPU内存配置选择、Web环境、域名解析到网站上线全流…

代码随想录第53天|● 1143.最长公共子序列 ● 1035.不相交的线 ● 53. 最大子序和 动态规划

文章目录 ● 1143.最长公共子序列思路:代码一:dp二维数组代码二:滚动数组 ● 1035.不相交的线思路:代码:(滚动数组) ● 53. 最大子序和 动态规划思路代码:代码二:单一元素…

许多人可能还不了解这个信息差:美赛的第一批 EI 已经录用,不用再犹豫啦

格局打开,美赛论文转学术论文发表 🚀🚀 各位同学,美赛已经结束了一段时间,你们是否还在焦急地等待最终成绩的公布?一些有远见的同学已经提前收到了一份喜讯:他们的美赛论文已被转化为学术论文并…

2024年博管办香江学者、澳门青年学者、中德博士后 交流项目申报工作启动

近日,中国博士后科学基金会官网发布了2024年博士后国(境)外学术交流项目申报指南,以下知识人网小编仅转载香江学者计划、澳门青年学者计划、中德博士后交流项申报指南并做重点解读。 知识人网整理 各省、自治区、直辖市及新疆生产…

Sora的双重边缘:视频生成的革新与就业的再思考

随着科技的日新月异,人工智能(AI)和机器学习(ML)技术如潮水般涌入我们的日常生活,为各个领域带来了翻天覆地的变化。在这一浪潮中,Sora作为一款前沿的AI视频生成工具,凭借其高度逼真…

vue 使用 PrintJs 实现打印pdf效果

一、print.js介绍 Print.js主要是为了帮助我们直接在应用程序中打印PDF文件,而无需离开界面,并且不使用嵌入。对于用户不需要打开或下载PDF文件的特殊情况,他们只需要打印它们。 例如,当用户请求打印在服务器端生成的报告时&…

便携式测速仪的工作原理

TH-LS5】便携式测速仪的工作原理主要基于多普勒效应。当测速仪发射电磁波并碰触到物体时,电磁波会被反射回来。如果触碰到的物体有朝向或背向的位移运动,那么测速仪发射与反射回来的电磁波之间会存在一个频率差。这个频率差会被测速仪捕获,并…