在本报告中,我们对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)上获得了第一名。我们希望本报道可以为开发者提供有用的经验。
随着目标检测技术的发展,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。
我们选择基于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 lr×BatchSize/64的学习率(线性缩放),初始 l r = 0.01 lr=0.01 lr=0.01,用 cosine lr schedule。weight decay 为0.0005,SGD momentum 为0.9。对于典型的8-GPU设备,批处理大小默认为128。其他batch大小包括单个GPU训练也可以很好地工作。输入大小由stride=32从448到832均匀绘制。
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所示。
Decoupled head
在目标检测中,分类和回归任务之间的冲突是一个普遍存在的问题。因此,用于分类和定位的 decoupled head 广泛应用于大多数1-stage和2-stage探测器中。然而,作为YOLO系列的主干和特征金字塔(FPN,PAN)如图2所示,它们的head不断进化,并保持耦合。
我们的两个分析实验表明,耦合的探测头可能会降低性能。 如图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中的中心点采样方法,将中心点3x3邻域内的location都设为正样本。
SimOTA
先进的标签分配是近年来目标检测领域的另一个重大进展。基于旷视的OTA,作者总结了先进的标签分配的四个关键见解:
OTA满足上面四条规则,因此作者选其作为标签分配策略。具体的,OTA从一个全局视角分析了标签分配,并将分配过程表示为最优运输(Optimal Transport,OT)问题,在现有的分配策略中产生SOTA性能。然而,作者发现在使用Sinkhorn-Knopp算法解决OT问题时会带来25%的训练时间,这对于300个epochs的训练过程来讲是非昂贵。因此,作者将其简化为了dynamic top-k策略,命名为SimOTA,从而能得到近似解。
注意,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所示: