目标检测——YOLOX算法解读

2024-03-20 22:12

本文主要是介绍目标检测——YOLOX算法解读,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

论文:YOLOX: Exceeding YOLO Series in 2021(2021.7.18)
作者:Zheng Ge, Songtao Liu, Feng Wang, Zeming Li, Jian Sun
链接:https://arxiv.org/abs/2107.08430
代码:https://github.com/Megvii-BaseDetection/YOLOX


YOLO系列算法解读:

  • YOLOv1通俗易懂版解读
  • SSD算法解读
  • YOLOv2算法解读
  • YOLOv3算法解读
  • YOLOv4算法解读
  • YOLOv5算法解读
  • YOLOR算法解读
  • YOLOX算法解读

PP-YOLO系列算法解读:

  • PP-YOLO算法解读
  • PP-YOLOv2算法解读
  • PP-PicoDet算法解读
  • PP-YOLOE算法解读
  • PP-YOLOE-R算法解读

文章目录

  • 1、算法概述
  • 2、YOLOX细节
  • 3、实验
  • 4、总结


1、算法概述

YOLOX是旷视科技2021年提出的目标检测算法,它基于YOLOv3-SPP进行改进,将原有的anchor-based调整为了anchor-free形式,并且集成了其他先进检测技术(比如decoupled head、label assignment SimOTA)取得了SOTA性能。类似于YOLOv5,它也提供了多个尺度版本的模型,Nano/Tiny/s/m/l/x,而且该方法的ONNX、TensorRT、NCNN、OpenVino推理模型均已开源。下图是YOLOX与其他检测算法的对比情况图:
在这里插入图片描述
以我实际的使用情况来看,对比YOLOv5算法,YOLOX在检测精度方面确实比YOLOv5更加优秀,但速度会稍微慢一点点。


2、YOLOX细节

作者以YOLOv3-SPP为基准,即backbone为Darknet-53,neck为SPP+FPN,head部分为分3个特征图输出NxNx(3x(4+1+80))。YOLOX对其进行一步步改进,下面来看具体的改进手段。

  • 首先训练YOLOv3-SPP baseline
    和YOLOv3论文中不一样的是,作者增加了一些策略,比如在训练过程中加入EMA权重更新技术,cosine学习率下降,IoUloss和IoU感知分支;用BCEloss训练分类分支和obj分支,用IoUloss训练回归分支。对于数据增强部分,作者只采用了随机水平翻转和颜色抖动以及多尺度训练,没有使用随机尺寸裁剪(因为作者认为这和后面的马赛克数据增强重叠了,不好评估马赛克数据增强带来的影响)。最终在COCO val数据集上是38.5%mAP。
  • Decoupled head
    在目标检测中,分类与回归任务的冲突是一种常见问题。因此,分类与定位头的解耦已被广泛应用到单阶段、两阶段检测中。然而YOLOv3/v4/v5都没有把检测头解耦,作者通过实验发现,解耦检测头能让训练收敛更快,如下图:
    在这里插入图片描述
    解耦头,意味着会检测头会多一个分支结构,所以参数量会增加,为了尽量少增加参数,作者在进入预测分支之前先用1x1卷积将特征通道减少,然后再接分类分支和回归分支。其结构如下所示:
    在这里插入图片描述
  • Strong data augmentation
    数据增强部分,作者将Mosaic和MixUp添加到增强策略中,以提高YOLOX的性能。在模型训练过程中采用MixUp和Mosaic对数据进行增强,并在最后15个epoch关闭它。实际应用下来看,最后15epoch关闭数据增强很有用。
  • Anchor-free
    Anchor-based方法的弊端:1、需要在优化之前,聚类分析数据集标注框的情况,这会导致训练出来的模型使用场景及泛化性能受限。2、锚框设计增加了检测头的复杂性,预测框数量会根据锚框设计的增加而增加。
    而无锚框机制显著减少了需要启发式调整的设计参数的数量和涉及的许多技巧(例如,锚框聚类,网格敏感)的良好性能,使检测器的训练和解码阶段大大简化。将anchor-based调整为anchor-free比较简单,作者将每个位置的预测从3个(YOLOv3是每个grid设置3个anchor)减少到1个,并使它们直接预测4个值,即网格左上角的两个偏移量,以及预测框的高度和宽度。改成anchor-free后,作者参考FCOS,将每个目标的中心定位正样本并预定义一个尺度范围以便于对每个目标指派FPN特征尺度。经过这个改进后,模型参数和GFLOPs都减少了,推理速度更快,而且性能还提升至42.9%mAP了。
  • Multi positives
    上面的匹配策略,一个gt框只能匹配一个正样本(因为采用center location匹配),这意味着会忽略掉周边高质量预测框,所以作者划定gt框中心点3x3的区域内匹配正样本,这个区域就类似于FCOS中的”center sampling”。这一改进促使模特mAP提升至45.0%。
  • SimOTA
    OTA从全局角度分析标签分配,并将分配过程制定为最优运输(Optimal Transport, OT)问题,从而产生当前分配策略中的SOTA性能。然而,在实践中我们发现用Sinkhorn-Knopp算法求解OT问题带来了额外25%的训练时间,这对于训练来说是相当昂贵的。因此,我们将其简化为动态top-k策略,命名为SimOTA,以获得近似解。在SimOTA中,预测框pj与gt框gi的匹配代价计算为
    在这里插入图片描述
    λ为平衡系数,前者为gi与pj的分类损失,后者为gi与pj的回归损失。
    对于每一个gt框gi,选择前topk个与之损失最小的预测框,且该预测框中心点在gi中心点3x3的范围内的可作为该gt框gi的正样本,其余则作为负样本。通过这个改进,mAP又提升至47.3%。
  • End-to-end YOLO
    即模型最后直接输出结果,不需要最后做nms,这样的改进会导致掉点,所以作者最终没有采用。

下面是上述改进的消融实验结果:
在这里插入图片描述
从表中可以看出,数据增强,划分3x3领域取更多正样本和SimOTA动态匹配正样本这三个改进对YOLOX提升比较大。

  • Other Backbones
    仿照YOLOv5的网络规模改进得到YOLOX-S/M/L/X,仿照YOLOv4-Tiny提出YOLOX-Tiny及YOLOX-Nano,实验结果均表明YOLOX的这些改进很优秀。
    在这里插入图片描述

3、实验

与现如今其他检测算法对比
在这里插入图片描述


4、总结

YOLOX和YOLOv5是我个人用得比较熟练的算法,工程代码都仔细研读过,写得都是非常优秀,代码结构清晰明了,如今YOLOX和YOLOv5都在工业界得到了广泛的应用,就我个人使用感觉而言,YOLOX的精度是略高于YOLOv5的,但速度比YOLOv5稍慢,两个算法都有不同的应用版本,可以方便各个平台适配;个人使用下来,YOLOX似乎对小目标漏检比较多,YOLOv5泛化性能更强一点。

这篇关于目标检测——YOLOX算法解读的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

解读GC日志中的各项指标用法

《解读GC日志中的各项指标用法》:本文主要介绍GC日志中的各项指标用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、基础 GC 日志格式(以 G1 为例)1. Minor GC 日志2. Full GC 日志二、关键指标解析1. GC 类型与触发原因2. 堆

Java设计模式---迭代器模式(Iterator)解读

《Java设计模式---迭代器模式(Iterator)解读》:本文主要介绍Java设计模式---迭代器模式(Iterator),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录1、迭代器(Iterator)1.1、结构1.2、常用方法1.3、本质1、解耦集合与遍历逻辑2、统一

Java中的雪花算法Snowflake解析与实践技巧

《Java中的雪花算法Snowflake解析与实践技巧》本文解析了雪花算法的原理、Java实现及生产实践,涵盖ID结构、位运算技巧、时钟回拨处理、WorkerId分配等关键点,并探讨了百度UidGen... 目录一、雪花算法核心原理1.1 算法起源1.2 ID结构详解1.3 核心特性二、Java实现解析2.

MySQL之InnoDB存储页的独立表空间解读

《MySQL之InnoDB存储页的独立表空间解读》:本文主要介绍MySQL之InnoDB存储页的独立表空间,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、独立表空间【1】表空间大小【2】区【3】组【4】段【5】区的类型【6】XDES Entry区结构【

C++ 检测文件大小和文件传输的方法示例详解

《C++检测文件大小和文件传输的方法示例详解》文章介绍了在C/C++中获取文件大小的三种方法,推荐使用stat()函数,并详细说明了如何设计一次性发送压缩包的结构体及传输流程,包含CRC校验和自动解... 目录检测文件的大小✅ 方法一:使用 stat() 函数(推荐)✅ 用法示例:✅ 方法二:使用 fsee

MySQL主从复制与读写分离的用法解读

《MySQL主从复制与读写分离的用法解读》:本文主要介绍MySQL主从复制与读写分离的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、主从复制mysql主从复制原理实验案例二、读写分离实验案例安装并配置mycat 软件设置mycat读写分离验证mycat读

Python的端到端测试框架SeleniumBase使用解读

《Python的端到端测试框架SeleniumBase使用解读》:本文主要介绍Python的端到端测试框架SeleniumBase使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全... 目录SeleniumBase详细介绍及用法指南什么是 SeleniumBase?SeleniumBase

OpenCV实现实时颜色检测的示例

《OpenCV实现实时颜色检测的示例》本文主要介绍了OpenCV实现实时颜色检测的示例,通过HSV色彩空间转换和色调范围判断实现红黄绿蓝颜色检测,包含视频捕捉、区域标记、颜色分析等功能,具有一定的参考... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间

Nacos注册中心和配置中心的底层原理全面解读

《Nacos注册中心和配置中心的底层原理全面解读》:本文主要介绍Nacos注册中心和配置中心的底层原理的全面解读,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录临时实例和永久实例为什么 Nacos 要将服务实例分为临时实例和永久实例?1.x 版本和2.x版本的区别

C++类和对象之默认成员函数的使用解读

《C++类和对象之默认成员函数的使用解读》:本文主要介绍C++类和对象之默认成员函数的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、默认成员函数有哪些二、各默认成员函数详解默认构造函数析构函数拷贝构造函数拷贝赋值运算符三、默认成员函数的注意事项总结一