YOLOX:超越2021年前的YOLO系列

YOLOX:超越2021年前的YOLO系列

目录

; 摘要

在本报告中,我们对YOLO系列进行了一些有经验的改进,形成了一种新的高性能探测器YOLOX。我们将YOLO检测器切换为Anchor Free方式,并采用其他先进的检测技术,即解耦头(decoupled head)和新的标签分配策略SimOTA,以在不同模型比较中实现最先进的结果:对于YOLO-Nano(使用了本文的改进)仅使用0.91M参数和1.08G FLOPs,我们在COCO上获得25.3%的AP,超过NanoDet 1.8%的AP;对于行业中使用最广泛的探测器之一YOLOv3,我们在COCO上将其提高到47.3%AP,比当前的最佳做法高出3.0%AP;对于参数量与YOLOv4-CSP、YOLOv5-L大致相同的YOLOX-L,我们在Tesla V100上以68.9 FPS的速度在COCO上实现了50.0%的AP,超过了YOLOv5-L 1.8%的AP。此外,我们使用一个YOLOX-L模型在流媒体感知挑战赛(CVPR 2021年自动驾驶WorkShop)上获得了第一名。我们希望本报道可以为开发者提供有用的经验。

1.Introduction

随着目标检测技术的发展,YOLO系列始终追求实时应用的最佳速度和精度权衡。他们吸取了当时可用的最先进的检测技术(例如,YOLOv2的anchor、YOLOv3的残差网络),并优化了最佳的操作结果。目前,YOLOv5保持着最佳的折衷表现,COCO的AP为48.2%,时间消耗一般为13.7 ms。

尽管如此,在过去两年中,目标检测学术界的主要进展集中在anchor-free探测器、更先进的标签分配策略和端到端(无NMS)的探测器。这些都没有融入YOLO系列,直到YOLOv4和YOLOv5也还是依赖anchor-based的检测器和手工分配标签的训练策略。

这就是我们写下这个报告的原因,通过经验丰富的优化策略为YOLO系列提供了这些最新的改进。考虑到YOLOv4和YOLOv5对于基于anchor的pipeline已经存在很先进的优化策略,我们选择YOLOv3作为起点(我们将YOLOv3 SPP设置为默认的YOLOv3)。事实上,由于计算资源有限,各种实际应用中的软件支持不足,YOLOv3仍然是业界使用最广泛的探测器之一。

如图1所示,通过对上述技术的经验更新,我们以640×640分辨率将COCO上的YOLOv3提高到47.3%AP(YOLOX-DarkNet),大大超过了YOLOv3当前的最佳表现(44.3%AP)。此外,当切换到采用 CSPNet backbone 和 PAN head 的高级YOLOv5体系结构时,YOLOX-L在COCO上以640×640的分辨率实现了50.0%的AP,比对应的YOLOv5-L高出1.8%的AP。我们还在小尺寸模型上测试我们的设计策略。YOLOX Tiny和YOLOX Nano(仅0.91M参数和1.08G FLOPs)分别比对应的YOLOv4 Tiny和NanoDet3高出10%和1.8%的AP。

YOLOX:超越2021年前的YOLO系列
  • 图1:Speed-accuracy 权衡(trade-off)和 Size-accuracy 曲线比较,包括了YOLOX与其他sota模型。

; 2.YOLOX

2.1.YOLOX-DarkNet53

我们选择基于DarkNet53的YOLOv3作为baseline,在以下部分,我们将逐步了解YOLOX中的整个系统设计。

实现细节
从baseline到最终模型,我们的训练设置基本一致。我们在2017年COCO train2017上对模型进行了总共300个epoch的训练,其中有5个epoch的warm-up。我们使用随机梯度下降(SGD)进行训练。我们使用l r × B a t c h S i z e / 64 lr×BatchSize/64 l r ×B a t c h S i z e /6 4的学习率(线性缩放),初始l r = 0.01 lr=0.01 l r =0 .0 1,用 cosine lr schedule。weight decay 为0.0005,SGD momentum 为0.9。对于典型的8-GPU设备,批处理大小默认为128。其他batch大小包括单个GPU训练也可以很好地工作。输入大小由stride=32从448到832均匀绘制。

YOLOX:超越2021年前的YOLO系列
  • 表1:端到端YOLO的 decoupled head 对COCO上表现的影响(AP)。

YOLOv3 baseline
我们的baseline采用了DarkNet53主干和SPP层的架构,在一些论文中提到了YOLOv3-SPP。与原始实现相比,我们稍微改变了一些训练策略,添加了EMA权重更新、cosine lr schedule、IoU loss 和 IoU-aware 分支。我们将BCE损失用于训练cls和obj分支,将IoU损失用于训练reg分支。这些常规训练技巧与YOLOX的关键改进是一致的,因此我们将它们放在baseline上。此外,我们只进行了随机水平翻转(RandomHorizontalFlip)、颜色抖动(ColorJitter)和多尺度缩放(multi-scale)的数据增强,而放弃了RandomResizedCrop策略,因为我们发现RandomResizedCrop与提出的马赛克增强(mosaic)有重复。通过这些增强,我们的baseline在COCO val上实现了38.5%的AP,如表2所示。

YOLOX:超越2021年前的YOLO系列
  • 表2:YOLOX-Darknet53在各项技巧下的AP(COCO val 上衡量)。输入图像均为640分辨率,此表中的延迟latency和FPS是在不进行后处理的情况下测量的。

Decoupled head
在目标检测中,分类和回归任务之间的冲突是一个普遍存在的问题。因此,用于分类和定位的 decoupled head 广泛应用于大多数1-stage和2-stage探测器中。然而,作为YOLO系列的主干和特征金字塔(FPN,PAN)如图2所示,它们的head不断进化,并保持耦合。

YOLOX:超越2021年前的YOLO系列
  • 图2:YOLOv3的head与本文的decoupled head的差异说明。对于FPN的每一级特征,我们首先用1×1卷积层将特征图维数降低至256,然后加两个并行的3×3卷积分支分别用于分类和回归任务。另外,IoU分支被加入到回归分支里。

YOLOX:超越2021年前的YOLO系列
  • 图3:带有YOLOv3头或去耦头的探测器的训练曲线。我们每10个epoch在COCO val上评估AP。很明显,去耦头的收敛速度比YOLOv3头快得多,最终获得了更好的结果。

我们的两个分析实验表明,耦合的探测头可能会降低性能。 如图3所示,将YOLO的head替换为去耦的head可以极大地提高收敛速度。去耦头对于端到端版本的YOLO至关重要(将在下文中介绍)。从表1可以看出,具有耦合头的端到端模型性能降低4.2%AP,而去耦头的端到端模型性能降低至0.8%AP。因此,我们将YOLO的head换成去耦的head,如图2所示。具体来说,它包含一个1×1 conv层以减小通道数,然后是两个分别具有两个3×3 conv层的平行分支。

Strong data augmentation
我们将Mosaic和MixUp添加到我们的数据增强策略中,以提高YOLOX的性能。Mosaic是ultralytics-YOLOv3提出的一种有效的增强策略。然后,它被广泛用于YOLOv4、YOLOv5和其他探测器。MixUp最初是为图像分类任务设计的,但后来在BoF中进行了修改,用于目标检测训练。我们在模型中采用了MixUp和Mosaic实现,并在最后15个epoch内将其关闭,在表2中实现了42.0%的AP。 在使用数据增强后,我们发现ImageNet预训练不再有效,因此,我们从头开始训练所有不同型号的模型。

Anchor-free
YOLOv4和YOLOv5均遵循YOLOv3的anchor-based pipeline。然而,anchor机制存在许多已知问题。首先,为了获得最佳检测性能,需要在训练之前进行聚类分析以确定一组最佳anchor。这些clustered anchors是特定于域的(domain-specific),缺少泛化性。其次,anchor机制增加了检测头的复杂性,以及每个图像的预测数量。在一些边缘AI系统上,在设备之间(例如,从NPU到CPU)移动如此大量的预测对象可能会成为整体延迟方面的潜在瓶颈。

无锚探测器在过去两年中发展迅速。很多工作表明,无锚探测器的性能可以与基于锚的探测器媲美。无锚机制显著减少了需要启发式调整的参数数量和涉及的许多技巧(例如,anchor clustering,grid sensitive)为了获得良好的性能,使用无anchor检测器,尤其是其训练和解码阶段,会变得简单。

将YOLO转换为anchor-free的方式非常简单。我们将每个location的预测从3(anchor的序号,偏移量和尺度缩放,后面两个预测用于微调先验的anchor)减少到1,使其直接预测四个值,即网格左上角的两个位置,以及预测框的高度和宽度。我们令每个object中心的location作为正样本,并预设一个尺度范围以便将object指定到对应的FPN特征级别里,这使模型获得了更好的性能。

Multi positive
Anchor-free为了与YOLOv3的分配规则保持一致,anchor-free版本仅为每个object分配一个正样本(中心位置),但其实其他高质量预测是有用的。可以有利于梯度更新并缓解训练过程中正负样本不均衡的问题。这里采用了FCOS中的中心点采样方法,将中心点3×3邻域内的location都设为正样本。

SimOTA
先进的标签分配是近年来目标检测领域的另一个重大进展。基于旷视的OTA,作者总结了先进的标签分配的四个关键见解:

  • 损失/质量感知;
  • 中心点先验;
  • 每个ground-truth具有动态正anchor数量(dynamic top-k);
  • 全局视野。

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

  • 首先,对于每个”预测-GT”的pair,计算成对的匹配度,表示为代价或者质量:c i j = L i j c l s + λ L i j r e g c_{ij}=L_{ij}^{cls}+\lambda L_{ij}^{reg}c i j ​=L i j c l s ​+λL i j r e g ​其中,λ \lambda λ为平衡系数,L i j c l s , L i j r e g L_{ij}^{cls},L_{ij}^{reg}L i j c l s ​,L i j r e g ​分别表示GT与预测之间的分类损失和回归损失。
  • 然后,对于每个GT,在其固定的邻域内,选择top-k个代价最小的预测作为其正样本。
  • 最后,这些正预测所对应的网格就被分配为正样本,其他则为负样本。

注意,top-k中的k值随着GT变化,这是动态的。SimOTA不仅减少了训练时间,而且避免了Sinkhorn-Knopp算法中的额外超参。

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

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

YOLOX:超越2021年前的YOLO系列
  • 表3:比较YOLOX和YOLOv5在COCO上的AP。

YOLOX:超越2021年前的YOLO系列
  • 表4:比较YOLOX-Tiny和YOLOX Nano与对应模型在COCO val上的AP。

; 实验结果

测试了YOLOX与其他模型的比较结果:

YOLOX:超越2021年前的YOLO系列
  • 表5:比较COCO 2017 test-dev上不同检测器的速度和精度。我们选择了300个epoch的所有模型进行公平比较。

Original: https://blog.csdn.net/qq_40943760/article/details/124888329
Author: tzc_fly
Title: YOLOX:超越2021年前的YOLO系列

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/529885/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球