当前位置: 首页 > article >正文

YOLOX算法及其改进

YOLOX算法及其改进

  • 1、YOLOX简介
  • 2、前处理
    • 2.1、Mixup数据增强
  • 3、YOLOX架构改进
    • 3.1、Backbone
    • 3.2、FPN+PAN
    • 3.3、YOLOX Decoupled-Head
  • 4、YOLOX样本匹配
    • 4.1、得分与BBox对不齐的问题
    • 4.2、IOU-Aware
    • 4.3、样本匹配

1、YOLOX简介

在这里插入图片描述
YOLOX的具体改进如下:
1、输入端:使用了Mosaic、Mixup、RandomHorizontalFlip以及ColorJitter;
2、Backbone:在DarkNet53的基础上添加了SPP模块;
3、Neck:是FPN+PAN的结构;
4、Head:使用了Decoupled Head、Multi Positives、IoU-Aware分支以及SimOTA;
5、训练策略:使用了余弦学习率策略、EMA。

2、前处理

2.1、Mixup数据增强

Mixup 是 YOLOX 在 Mosaic 数据增强的基础上,使用的另一种额外的增强策略。主要来源于 2017 年的 ICLR 会议的一篇论文《Mixup: Beyond Empirical Risk Minimization》。当时主要应用在图像分类任务中,可以在几乎无额外计算开销的情况下,稳定提升 1 个百分点的分类精度。Mixup 的核心公式为:
在这里插入图片描述
其中 λ ∈ [0,1],其中 λ ~ Beta(a,a), a 属于(0, ∞)。在这里需要注意的是用 Mixup 不仅需要线性插值样本 x,也需要线性插值标签 y。

Mixup 方式很简单,比如车辆检测图像的任务。如图所示,先读取一张图像,将图像上下两侧进行填充,缩放到 640×640 大小,即 Image-1。再随机选取一张图像,将图像上下填充,也缩放到 640×640 大小,即 Image-2。然后设置一个融合系数,YOLOX 里设置为 0.5,将 Image-1 和 Image-2 进行加权融合,最终得到右面的 Image。
在这里插入图片描述

3、YOLOX架构改进

3.1、Backbone

YOLOX 是基于 YOLOv3 进行的改进和升级,因此其 Backbone 依旧是 YOLOv3 中使用的 DarkNet53。
在这里插入图片描述
在这里插入图片描述
但是不同于 YOLOv3 的是,YOLOX 在 Backbone 网络的末尾使用了 SPP 结构。
如右图所示,SPP 主要结构是由不同的 Kernel Size 的池化层组成,池化层可以提取更高阶的特征,加强图像特征的不变性,增加图像的鲁棒性,也可以对卷积提取出来的信息做更进一步的降维。
因此,SPP 可以很好的实现局部特征和全局特征的融合,扩大了感受野,丰富最终特征图的表达能力进而提高 mAP。

3.2、FPN+PAN

YOLOX 与 YOLOv5 一样使用了 FPN+PAN 的形式,同时对于YOLOX-DarkNet使用了FPN结构,具体结构如图所示。

在这里插入图片描述
在这里插入图片描述
FPN上层特征图因为网络层数更深,包含的目标语义信息也就更强,而下层特征因为经过的卷积层数较少,目标的位置信息损失就更少,FPN 结构通过自顶向下进行上采样,使得底层特征图包含更强的目标强语义信息。
PAN 结构自底向上进行下采样,使顶层特征包含强目标位置信息,两个特征最后进行融合,使不同尺寸的特征图都包含强目标语义信息和强目标特征信息,保证了对不同尺寸的目标图片的准确预测。

3.3、YOLOX Decoupled-Head

YOLOX 的作者通过实验发现 Dcoupled Head 可能会影响目标检测最终的性能。如图所示,做出了改进,将预测的 Coupled Head 分支进行了解耦,得到了 Decoupled Head,极大的改善收敛速度,同时提升了检测的精度。但是将 Coupled Head 解耦为 Decoupled Head会增加运算的复杂度、降低检测速度。
在这里插入图片描述
在这里插入图片描述
具体,YOLOv3 中,针对 x 个类别的目标检测任务,每 1 个 Anchor 会对应产生 h×w×x维度的预测结果,其中 obj(区分是前景背景)占用 1 个通道,reg(坐标)占用 4 个通道,cls(预测是 x 类中的哪一个类)占用 x 个通道。而 YOLOX,首先使用 1×1 卷积将原本不同通道数的特征图先统一到 256(主要目的是降维),然后使用2个平行分支分别 2 个 3×3 卷积,同时在回归分支里还添加了IoU-Aware 分支。

4、YOLOX样本匹配

4.1、得分与BBox对不齐的问题

当前单阶段目标检测器在做推理的时候需要使用NMS来对输出的bboxes进行筛选,目前筛选时主要考虑分类得分,但是由于分类得分和定位是分开训练的,因此,可能会出现分类得分高而IOU低的情况,或者是高IoU分类得分低的情况,导致分类得分和定位之间相关性较差,使得网络预测的bboxes在AP上的表现较差。
针对上述分类得分与定位对不齐的问题,《IoU-Aware Single-stage Object Detector》作者提出了通过预测每一个bboxes的IoU,然后使用预测的IoU乘上分类得分来作为NMS最终的筛框标准,从而在一定程度上提升AP。
在这里插入图片描述

4.2、IOU-Aware

IoU-Aware 出自于论文《IoU-Aware Single-stage Object Detector for Accurate Localization》。在目标检测问题中,模型需要输出目标分类分数和与其对应的目标定位的边界框,在以往的模型中,经常使用分类分数作为目标定位准不准的置信度,并基于此对大量候选目标边界框 NMS,现在越来越多的研究工作发现,分类分数高并不能保证定位精度高。
而 IoU-Aware 作者认为 IoU 是直接反应定位准不准的直接指标,可以在分类和定位任务的基础上添加 IoU 预测的任务,可以在一定程度上反应定位置信度。
如图所示,作者在 RetinaNet 基础上做改进,在边界框回归分支添加一个并行的预测 IoU 的任务。然后将分类得分和预测得到的 IoU 相乘,得到的相乘结果既能反映是不是这个目标,又能反映该位置和真实目标的可能 IoU。这样便可以进一步提升整体的检测性能,YOLOX 的使用也验证了这一点。
在这里插入图片描述

4.3、样本匹配

Anchor-Base 方法主要的问题是使用 Anchor 时,为了调优模型,需要对数据集聚类分析,确定最优 Anchor,缺乏泛化性;同时由于 Anchor 机制增加了检测 Head 的复杂度,导致每幅图像的预测结果比较多,给后处理带来了一定的困难。
为了避免上述 Anchor-Base 的问题,YOLOX 去掉了 Anchor box,如图所示,使用下采样 32 倍的分支进行讲解,每个 Grid Cell(在 640×640 的原图代表一个 32×32 的区域)都只预测一个目标。
在这里插入图片描述
为了与 YOLOv3 的分配规则保持一致,上述 Anchor-Free 为每个 Grid cell 仅仅选择一个正样本(中心位置),而忽略其他邻近区域的高质量 Grid cell 预测。然而,优化那些高质量的预测也可能带来一定的提升,这也会缓解训练过程中正负采样极度不平衡的问题。

如图所示,YOLOX 中直接将中心临近的 3×3 区域分配为正样本,这样便增加了样本采样的数量,进而可以加快模型训练过程的收敛,同时也一定程度上缓解了正负样本采样极度不均衡的问题,这个过程也就是论文中所说的 Multi positives。
在这里插入图片描述
在这里插入图片描述
预测的 Anchor Box 的中心点落在标注对应的 GT 内即可认为是正样本,换做数学表达式就是:
在这里插入图片描述

为了对前面提到的正样本分配进行进一步的细化,YOLOX作者本人说:“我们不可能为同一场景下的西瓜和蚂蚁分配同样的正样本数,如果真是那样,那要么蚂蚁就会有很多低质量的正样本,要么西瓜仅仅只有一两个正样本!”,其实作者想做的就是为不同规模的目标分配不同数量的正样本,小目标就少分配一些,大目标就多分配一些,尽可能地提升样本分配的质量。
YOLOX 在这里引入了 SimOTA 来进行精细化正样本的分配。SimOTA 不仅能够做到自动分析每个 GT 要拥有多少个正样本;而且还能自动决定每个 GT 要从哪个特征图来检测;同时相较于原始的 OTA 算法运算速度更快,也不需要额外的超参数。
在这里插入图片描述

为更好的理解,如图所示为选择 Top-5 进行计算,假设粗分配后的 Anchor。假设这里经过粗分配后该车的 GT 对应 13 个 Anchor,其之间的 IoU 分别是 0.65、0.64、0.61、0.60、0.59、0.57、0.53、0.35、0.33、0.31、0.30、0.22、0.15。这里让预测的 cls score和 IoU 一样方便计算。
在这里插入图片描述

第一步:通过计算位置损失和分类损失得到每个 Anchor 的 Cost(这里的损失),这里令λ=3;
在这里插入图片描述
Lreg为:[-0.4308, -0.4463, -0.4943, -0.5108, -0.5276, -0.5621, -0.6349, -1.0498,-1.1087, -1.1712, -1.2040, -1.5141, -1.5141]
Lcls为:[0.4201, 0.4235, 0.4340, 0.4375, 0.4410, 0.4482, 0.4629, 0.5334,0.5417, 0.5501, 0.5544, 0.5892, 0.5892]
Cost为:[-0.8723, -0.9154, -1.0489, -1.0950, -1.1419, -1.2381, -1.4418,-2.6161, -2.7843, -2.9634, -3.0576, -3.9532, -3.9532]

第二步:计算 Dynamic k,这里只取 Top-5的 IoU 的和为:
0.65+0.64+0.61+0.60+0.59=3.0900
然后对 Top-5 的 IoU 求和后进行取整,结果为 3,也就是说 Dynamic k=3;

第三步:对 Cost 进行排序,并将前 Dynamic k=3 的结果作为正样本,其他均为负样本。通过前面的 Cost 计算和排序可以知道,Top-3 Cost 分别为:[-0.8723, -0.9154, -1.0489],它们分别对应如图所示中的 3 个最优匹配结果。

在这里插入图片描述


http://www.kler.cn/a/456857.html

相关文章:

  • pyinstaller打包exe可执行文件
  • MyBatis使用的设计模式
  • 2024年RAG:回顾与展望
  • Python用K-Means均值聚类、LRFMC模型对航空公司客户数据价值可视化分析指标应用|数据分享...
  • vue3 Teleport瞬移组件
  • C++——deque的了解和使用
  • C语言实现跨主机通讯
  • 6-Gin 路由详解 --[Gin 框架入门精讲与实战案例]
  • 电商项目-数据同步解决方案(三)商品上架同步更新ES索引库
  • vue3使用element-plus,解决 el-table 多选框,选中后翻页再回来选中失效问题
  • 如何部署SparkHistoryServer
  • 【Unity/C#】Fisher-Yates洗牌算法
  • 湖仓一体架构解析:数仓架构选择(第48天)
  • 软件安全性测试有多重要?好用的安全测试工具有哪些?
  • 使用 CSS 的 `::selection` 伪元素来改变 HTML 文本选中时的背景颜色
  • docker安装记录
  • leetcode hot100 括号生成
  • 实战ubuntu22.04 软raid查看命令
  • 【AI学习】DeepSeek-V3 技术报告学习:总体架构
  • pugixml XML配置文件 的增删改查
  • Qt中QWidget自定义形状
  • 基于Spring Boot的个人健康管理系统
  • 数据库课程设计-工资管理系统-MySQL
  • Gateway Timeout504 网关超时的完美解决方法
  • 自动化测试启动chrome debug模式
  • Elasticsearch检索方案之一:使用from+size实现分页