下载地址:https://arxiv.org/pdf/2107.08430
项目地址:https://github.com/Megvii-BaseDetection/YOLOX
在本文中,我们对YOLO系列进行了一些基于经验的改进,形成了一种新的高性能探测器YOLOX。我们将YOLO探测器转换为无锚定方式,并采用了其他先进的检测技术,例如解耦头部和高级标签分配策略SimOTA,并在不同尺寸上实现最先进的结果:YOLONano仅有0.91M参数和1.08g Flops,在COCO上获得25.3%的AP,超过NanoDet 1.8%的AP;对于工业中使用最广泛的检测器之一的YOLOv3,我们将其COCO成绩提高到47.3%的AP。对于与YOLOv4-CSP、YOLOv5-L参数大致相同的YOLOX-L,我们在Tesla V100上以68.9FPS的速度在COCO上获得了50.0%的AP,比YOLOv5-L高1.8%AP。此外,我们使用YOLOX-L在流媒体感知挑战赛(CVPR 2021年自动驾驶研讨会)上获得了第一名。
本文主要是利用了这些年的一些先进成果,加入到了YOLO网络中,包括了anchor-free等
随着目标检测技术的发展,YOLO系列一直在追求实时应用的速度和精度的平衡。他们使用了当时可用的最先进的检测技术(例如,YOLOv2的锚,YOLOv3的residual net),并针对SOTA进行优化实施。目前,YOLOv5拥有最佳的折衷性能,COCO上的AP为48.2%,速度为13.7毫秒。
然而,在过去的两年里,目标检测学术界的主要进展集中在无锚检测器,高级标签分配策略,以及端到端(NMS-free)检测器。这些还没有集成到YOLO系列中,因为YOLOv4和YOLOv5仍然是基于锚点的探测器,且具有手工制定的训练分配规则。
这就是本文产生的原因,通过一些最新经验优化提供了对YOLO系列的最新改进。考虑到YOLOv4和YOLOv5中提出的对于基于锚点的管道可能有些过度优化,我们选择YOLOv3作为起点(我们将YOLOv3-SPP设置为默认的YOLOv3)。事实上,YOLOv3仍然是业界使用最广泛的探测器之一,原因是计算资源有限。
如图1所示,通过以上技术,我们在640×640分辨率的COCO上将YOLOv3(YOLOX-DarkNet53)的AP提升到了47.3%,大大超过了目前YOLOv3的最好结果(44.3%AP)。此外,当切换到采用先进的CSPNet主干和额外的PAN头部的YOLOv5架构时,YOLOX-L在640×640分辨率的COCO上获得了50.0%的AP,比对应的YOLOv5-L高1.8%的AP。我们还在小尺寸的模型上测试了我们的设计策略。YOLOX-TINY和YOLOX-Nano(仅0.91M参数和1.08G Flops)的性能分别比相应的YOLOv4-TINY和NanoDet3高10%AP和1.8%AP。
我们选择YOLOv3和Darknet53作为我们的基准。在接下来的部分中,我们将逐步介绍YOLOX中的整个系统设计。
我们的训练设置从baseline到最终模型基本上是一致的。我们在COCOTrain 2017上训练了总共300个epoch,以及5个预热epoch的模型。使用随机梯度下降(SGD)进行训练,以及 l r lr lr×BatchSize/64(线性缩放)的学习率,初始 l r = 0.01 lr=0.01 lr=0.01,还包括余弦lr。weight decay为0.0005,momentum为0.9%。对于典型的8-GPU设备,默认批处理大小为128。其他批次大小包括单GPU训练也运行良好。输入大小从448到832,跨度为32。本文中的FPS和延迟都是在一台Tesla V100上以FP16精度和Batch=1进行测量的。
我们的baseline采用DarkNet53主干的体系结构和一个SPP层,即在一些论文中提到了YOLOv3-SPP。与原来的实现相比,我们稍微改变了一些训练策略,增加了EMA权重更新、余弦LR调度、IOU丢失和IOU感知分支。我们将BCE损失用于 c l s cls cls分支和 o b j obj obj分支,将IOU损失用于 r e g reg reg分支。这些通用的训练技巧与YOLOX的关键改进是相关的,因此我们把它们放在了baseline上。此外,我们只进行了随机水平翻转、颜色缩放和多尺度数据增强,而放弃了随机调整裁剪策略,因为我们发现随机调整裁剪与计划的mosaic增强有些重叠。通过这些改进,我们在COCO上实现了38.5%的AP.
解耦的head可以解决一些因为classification和regression之间造成的问题,利用了1x1的卷积核,将cls和reg的过程分开
在目标检测中,分类和回归任务之间的冲突是一个众所周知的问题。因此,用于分类和定位的decoupled head在大多数单级和两级探测器中得到了广泛的应用。然而,在YOLO系列的主干和特征金字塔中,head仍然保持耦合,如图2所示。我们的两个分析实验表明,耦合head可能会影响性能。1)将YOLO的头部替换为解耦的头部,极大地提高了收敛速度,如图3所示。2)。分离的头部对于端到端版本的YOLO(将在下面描述)是必不可少的。从表1可以看出,耦合head的端到端特性降低了4.2%AP,而解耦head的端到端特性降低了0.8%AP。因此,我们用一个如图2所示的轻型解耦head替换YOLO检测磁头。具体地说,它包含1×1的卷积层以减小通道尺寸,然后是两个平行的分支,分别具有两个3×3的卷积层。
在数据增强方面主要使用了之前在YOLOv4中出现过的Mosaic和MixUp方法
我们将Mosaic和MixUp加入到我们的数据增强策略中,以提升YOLOX的性能。Mosaic是由YOLOv3提出的一种有效的增强策略。随后,它被广泛应用于YOLOv4、YOLOv5和其他探测器中。MixUp最初设计用于图像分类任务,但在BoF中进行了修改以用于目标检测训练。在我们的模型中,我们采用了Mosaic和MixUp,并在最后的15个epoch中关闭,获得了42.0%的AP。在使用强数据增强后,我们发现ImageNet预训练没有更多的好处,因此我们从头开始对所有模型进行训练。
Anchor-free算是这次在目标预测中带来的最大的变化,YOLOX中直接将每个位置预测对象从3减少到1,并且直接预测四个值,分别是grid的左上角坐标值,以及框的长和宽
YOLOv4和YOLOv5都遵循YOLOv3的原始锚定pipeline。然而,锚定机制有许多已知的问题。首先,为了获得最优的检测性能,需要在训练前进行聚类分析来确定一组最优锚点。这些集群锚点是特定于领域的,不那么通用。其次,锚定机制增加了检测head的复杂度,增加了每幅图像的预测次数。在一些边缘系统上,在设备之间移动如此大量的预测(例如,从NPU到CPU),可能会成为总体延迟方面的潜在瓶颈。
anchor-free探测器在过去的两年中发展迅速。这些工作表明,无锚检测器的性能可以与基于锚的检测器相媲美。无锚定机制显著减少了需要启发式调整的设计参数的数量和许多技巧(例如,锚定群集、网格敏感)。可以让检测器的训练和译码阶段变得相当简单。
将YOLO切换到无锚点模式非常简单。我们将每个位置的预测从3个减少到1个,并让它们直接预测4个值,即网格左上角的两个偏移量,以及预测框的高度和宽度。我们将每个对象的中心位置指定为正样本,并预定义一个比例范围,以指定每个对象的FPN级别。这种改进降低了探测器的参数和GFLOP,使其速度更快,但获得了更好的性能-42.9%AP,
为了与YOLOv3的分配规则一致,上面的无锚版本只为每个对象选择一个正样本(中心位置),同时忽略了其他高质量的预测。然而,优化这些高质量的预测也可能带来收益,这可能会缓解训练期间正/负样本的极端失衡。我们简单地将中心3×3区域指定为正数,在FCOS中也称为“中心采样”。检测器的性能提高到45.0%AP,已经超过了YOLOv3(44.3%AP)。
高级标签分配策略中,YOLOX使用的是OTA中的方法,但是为了加快速度,新提出了SimOTA
高级标签分配是近年来目标检测的又一重要进展。基于我们自己的研究OTA,我们总结了四个关于高级标签分配的关键见解:1)。loss/quailiy aware,2)。居中优先,3)。每个GT(ground-truth)的动态数字正anchor(简写为动态top-k),4)。全局视图。OTA满足上述所有四个规则,因此我们选择它作为候选标签分配策略。具体地说,OTA从全局的角度分析了标签分配问题,并将分配过程描述为一个最优传输(OT)问题,在当前的分配策略中产生了SOTA性能。然而,在实践中,我们发现用Sinkhorn-Knopp算法求解OT问题会带来25%的额外训练时间,这对于训练300个epoch来说是相当昂贵的。因此,我们将其简化为动态TOP-K策略,称为SimOTA,以获得近似解。
我们在这里简要介绍一下SimOTA。SimOTA首先计算成对匹配度,该匹配度由每个预测GT对的成本或质量表示。例如,在SimOTA中,GT g i g_i gi和预测值 p j p_j pj之间的成本计算如下:
c i j = L i j c l s + λ L i j r e g c_{ij} = L^{cls}_{ij}+\lambda L^{reg}_{ij} cij=Lijcls+λLijreg
其中 λ \lambda λ是平衡系数, L i j c l s L^{cls}_{ij} Lijcls和 L i j r e g L^{reg}_{ij} Lijreg是GT和预测值之间的分类损失和回归损失。然后,对于GT g i g_i gi,我们选择固定中心区域内代价最小的TOP-K预测作为其正样本。最后,这些正面预测的对应网格被指定为正面,而其余网格则被指定为负面。注意到不同的GT的 k k k值是不同的。有关详细信息,请参考OTA中的动态 k k k估计策略。
SimOTA算法不仅减少了训练时间,而且避免了Sinkhorn-Knopp算法中额外的求解器超参数。SimOTA将探测器从45.0%AP提高到47.3%AP,比SOTA Ultralytics-YOLOv3高3.0%AP,显示了高级分配策略的威力。
我们按照这个方法添加两个额外的转换面层、一对一标签分配和停止渐变。这些使检测器能够执行端到端方式,但会略微降低性能和推断速度,如表2所示。因此,我们将其作为一个可选模块保留,最终模型中不涉及此模块。
除了DarkNet53,我们还在其他不同大小的主干上测试了YOLOX,在这些主干上,YOLOX相对于所有对应大小的其他网络主干都取得了一些改进。
为了进行公平的比较,我们采用了YOLOv5的主干,包括修改后的CSPNet、SiLU激活函数和PAN head。我们还遵循它的比例规则来实现YOLOX、YOLOX-M、YOLOX-L和YOLOX-X模型。与表3中的YOLOv5相比,我们的模型获得了∼3.0%到∼1.0%AP的改善,只有部分边际时间增加(来自解耦的头部)。
我们将我们的模型进一步缩小为YOLOX-TINY,以与YOLOv4-TINY进行比较。对于移动设备,我们采用深度卷积的方法构建了一个只有0.91M参数和1.08G FLOP的YOLOX-Nano模型。如表4所示,YOLOX在模型尺寸甚至比对应的模型尺寸更小的情况下表现得很好。
在我们的实验中,所有的模型都保持了与2.1中描述的几乎相同的学习进度和优化参数。然而,我们发现在不同规模的模型上,合适的增强策略是不同的。如表5所示,虽然对YOLOX-L应用MixUp可以使AP提高0.9%,但对于YOLOX-Nano这样的小模型,最好减弱这种增强作用。具体地说,在训练小模型YOLOX-S、YOLOX-TINY和YOLOX-Nano时,我们去掉了混合增强,削弱了Mosaic(尺度范围从[0.1,2.0]减小到[0.5,1.5])。这样的改进将YOLOX-Nano的AP从24.0%提高到25.3%。
对于大型模型,我们还发现更多的数据增强有帮助。事实上,我们的混合实现比原始版本更加重了一些。受Copypaste[6]的启发,我们通过随机采样的比例因子对两幅图像进行抖动,然后再将它们混合。为了了解标尺抖动混合的威力,我们将其与YOLOX-L上的Copypaste进行了比较。注意到Copypaste需要额外的实例遮罩注释,而Mixup不需要。但如表5所示,这两种方法的性能相当,这表明当没有实例掩码注释可用时,混合比例抖动是Copypa的合格替代品。
表6展示了一些之前的SOTA对照信息。但是,请记住,此表中模型的推断速度通常不受控制,因为速度随软件和硬件的不同而不同。因此,我们对图1中的所有YOLO系列使用相同的硬件和代码库,绘制受控的速度/精度曲线。
WAD 2021上的流媒体感知挑战是通过最近提出的一项指标:流媒体准确度,对准确性和延迟进行联合评估。这一指标背后的关键是在每个时刻联合评估整个感知堆栈的输出,迫使堆栈考虑在进行计算时应该忽略的流数据量。我们发现,该度量在30FPS数据流上的最佳折衷点是推理时间为≤33ms的强大模型。因此我们采用了带有TensorRT的YOLOX-L模型来作为最终模型,最终获得了第一名。
在本文中,我们介绍了YOLO系列的一些经验更新,该系列形成了一个名为YOLOX的高性能AnclFree探测器。配备了一些最新的先进检测技术,即解耦头部、无锚点和先进的标签分配策略,YOLOX在所有型号的速度和准确性之间实现了更好的平衡。值得注意的是,我们在COCO上将YOLOv3的架构提升至47.3%AP,超过当前最佳实践3.0%的AP,YOLOv3因其广泛的兼容性仍是工业中使用最广泛的检测器之一。我们希望这份报告能帮助开发人员和研究人员在实际场景中获得更好的体验。