YOLOX

作者: Valar_Morghulis | 来源:发表于2022-03-29 17:38 被阅读0次

    原文地址:https://arxiv.org/abs/2107.08430

    YOLOX: Exceeding YOLO Series in 2021

    作者:旷视

    开源:https://github.com/Megvii-BaseDetection/YOLOX

    在本报告中,我们对YOLO系列进行了一些有经验的改进,形成了一种新的高性能探测器——YOLOX。我们将YOLO检测器切换为无锚方式,并采用其他先进的检测技术,即解耦头和领先的标签分配策略SimOTA,以在大范围的模型中实现最先进的结果:对于只有0.91M参数和1.08GFLOPs的YOLO Nano,我们在COCO上获得25.3%的AP,超过NanoDet 1.8%的AP;对于工业上使用最广泛的探测器之一YOLOv3,我们在COCO上将其AP提高到47.3%,比当前的最佳做法高出3.0%AP;对于与YOLOv4 CSP、YOLOv5-L参数量大致相同的YOLOX-L,我们在COCO上以68.9 FPS的速度在Tesla V100上实现了50.0%的AP,超过了YOLOv5-L 1.8%的AP。此外,我们还使用一款YOLOX-L模型赢得了流媒体感知挑战赛(CVPR 2021自动驾驶研讨会)的第一名。我们希望本报告能为实际场景中的开发人员和研究人员提供有用的经验,并提供支持ONNX、TensorRT、NCNN和Openvino的部署版本。

    1.引言

    随着目标检测技术的发展,YOLO系列[23,24,25,1,7]一直在追求实时应用的最佳速度和精度权衡。他们提取了当时可用的最先进检测技术(例如,YOLOv2[24]的锚[26],YOLOv3[25]的残余网[9]),并优化了最佳实践的实施。目前,YOLOv5[7]的折衷表现最好,COCO的AP为48.2%,为13.7 ms.(原注1:我们测试YOLOv5模型,分辨率为640x640,FP16精度,在V100上batchsize为1,以与YOLOv4和YOLOv4-CSP公平比较。编者注:YOLOv4-CSP即Scaled YOLOv4)

    然而,在过去两年中,目标检测学术界的主要进展集中在无锚探测器[29,40,14]、高级标签分配策略[37,36,12,41,22,4]和端到端(无NMS)探测器[2,32,39]上。由于YOLOv4和YOLOv5仍然是基于锚的探测器,带有手工编制的训练分配规则,因此这些探测器尚未被纳入YOLO系列。

    这就是我们来到这里的原因,通过经验丰富的优化,为YOLO系列带来这些最新的进步。考虑到YOLOv4和YOLOv5对于基于锚的管道可能有点过度优化,我们选择YOLOv3[25]作为起点(我们将YOLOv3 SPP设置为默认的YOLOv3)。事实上,由于计算资源有限以及各种实际应用中的软件支持不足,YOLOv3仍然是业界使用最广泛的探测器之一。

    如图1所示,通过对上述技术进行经验丰富的更新,我们以640×640的分辨率将COCO上的YOLOv3提高到47.3%的AP(YOLOX-DarkNet53),大大超过了YOLOv3当前的最佳实践(44.3%AP,ultralytics版本: https://github.com/ultralytics/yolov3)。此外,当切换到采用先进的CSPNet[31]主干网和额外的PAN[19]头的先进YOLOv5体系结构时,YOLOX-L在COCO上以640×640分辨率实现了50.0%的AP,比对应的YOLOv5-L高出1.8%的AP。我们也在小尺寸的模型上测试我们的设计策略。YOLOX Tiny和YOLOX Nano(仅0.91M参数和1.08GFLOPs)分别比对应的YOLOv4 Tiny和NanoDet3高出10%和1.8%的AP。

    我们已经开源在https://github.com/Megvii BaseDetection/YOLOX,支持ONNX、TensorRT、NCNN和Openvino。还有一件值得一提的事,我们使用一款YOLOX-L模型赢得了流媒体感知挑战赛(CVPR 2021自动驾驶研讨会)的第一名。

    2.YOLOX

    2.1. YOLOX-DarkNet53

    我们选择YOLOv3[25],以Darknet53作为基线。在接下来的部分中,我们将在YOLOX中逐步介绍整个系统设计。

    实施细节

    从基线到最终模型,我们的训练设置基本一致。我们在COCO train2017上对模型进行了总共300轮的训练,其中5轮为热身[17]。我们使用随机梯度下降(SGD)进行训练。我们使用的学习率为lr×BatchSize/64(线性缩放[8]),初始lr=0.01,余弦lr调度。权重衰减为0.0005,SGD动量为0.9。对于典型的8-GPU设备,批处理大小默认为128。其他批量大小包括单个GPU训练也可以很好地工作。输入大小从448到832均匀分布,步幅为32。本报告中的FPS和延迟均在单个Tesla V100上以FP16精度和批次=1进行测量。

    YOLOv3基线

    我们的基线采用了DarkNet53主干和SPP层的架构,在一些论文[1,7]中提到了YOLOv3 SPP。与最初的实现相比,我们稍微改变了一些训练策略[25],添加了EMA权重更新、余弦lr调度、IoU loss和IoU感知分支。我们将BCE损失用于训练cls和obj分支,将IoU损失用于训练回归分支。这些常规训练技巧与YOLOX的关键改进是正交的,因此我们将它们放在基线上。此外,我们只进行了随机水平翻转、颜色抖动和多尺度的数据增强,并放弃了RandomResizedCrop策略,因为我们发现RandomResizedCrop与计划的mosaic增强有点重叠。通过这些改进,我们的基线在COCO val上实现了38.5%的AP,如表2所示。

    解耦头

    在目标检测中,分类和回归任务之间的冲突是一个众所周知的问题[27,34]。因此,用于分类和定位的解耦头被广泛用于大多数单级和两级探测器[16、29、35、34]。然而,由于YOLO系列的主干和特征金字塔(例如,FPN[13],PAN[20])不断进化,它们的探测头保持耦合,如图2所示。

    我们的两个分析实验表明,耦合探测头可能会损害性能。1). 如图3所示,用一个解耦的头替换YOLO的头大大提高了收敛速度。2). 去耦头对于端到端版本的YOLO至关重要(将在下文中介绍)。从表1上可以看出,耦合头的端到端性能降低4.2%AP,而解耦头的端到端性能降低0.8%AP。因此,我们将YOLO检测头替换为lite解耦头,如图2所示。具体来说,它包含一个1×1 conv层以减少通道数,然后是两个分别具有两个3×3 conv层的并行分支。我们在表2中报告V100、批次=1的推断时间。lite解耦头带来额外的1.1毫秒(11.6毫秒vs.10.5毫秒)。

    强大的数据增强

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

    无锚

    YOLOv4[1]和YOLOv5[7]都遵循YOLOv3[25]最初基于锚的管道。然而,锚机制存在许多已知问题。首先,为了获得最佳检测性能,需要在训练之前进行聚类分析以确定一组最佳锚。这些聚集的锚是特定于领域的,不那么普遍。其次,锚定机制增加了检测头的复杂性,以及每个图像的预测数量。在一些边缘人工智能系统上,在设备之间移动如此大量的预测(例如,从NPU到CPU)可能会成为整体延迟的潜在瓶颈。

    无锚探测器[29,40,14]在过去两年中发展迅速。这些工作表明无锚探测器的性能可以与基于锚的探测器相媲美。无锚机制显著减少了需要启发式调整和许多技巧的设计参数数量(例如,锚聚类[24],网格敏感[11])为了获得良好的性能,使检测器,尤其是其训练和解码阶段,变得相当简单[29]。

    将YOLO转换为无锚方式非常简单。我们将每个位置的预测从3减少到1,并使其直接预测四个值,即网格左上角的两个偏移量,以及预测框的高度和宽度。我们将每个对象的中心位置指定为正样本,并预先定义一个比例范围,如[29]中所述,为每个对象指定FPN级别。这种修改降低了探测器的参数和GFLOP,使其更快,但获得了更好的性能——42.9%的AP,如表2所示。

    多个正样本

    为了与YOLOv3的分配规则保持一致,上述无锚版本仅为每个对象选择一个正样本(中心位置),同时忽略其他高质量预测。然而,优化这些高质量的预测也可能带来有益的梯度,这可能会缓解训练期间正/负采样的极端不平衡。我们只是将中心3×3区域指定为正,在FCOS中也称为“中心采样”[29]。探测器的性能提高到45.0%AP,如表2所示。已经超过了目前的最佳实践的ultralytics-YOLOv3(44.3%AP)。

    SimOTA

    高级标签分配是近年来目标检测的另一个重要进展。基于我们自己的研究[4],我们总结出高级标签分配的四个关键见解:1)损失/质量感知,2)中心优先,3)每个真值的正anchorsd的动态数量,简称为动态top-k,(注释4,这里的anchors指的是,在anchor-free检测器的上下文中指的就是anchor point,在YOLO的上下文中指的就是grid),4)全局视野。OTA符合上述四条规则,因此我们选择它作为候选标签分配策略。

    具体而言,OTA[4]从全局角度分析标签分配,并将分配过程表述为最优传输(OT)问题,在当前分配策略中产生SOTA性能[12、41、36、22、37]。然而,在实践中,我们发现通过Sinkhorn-Knopp算法解决OT问题会带来25%的额外训练时间,这对于训练300个epochs来说是相当昂贵的。因此,我们将其简化为动态top-k策略,命名为SimOTA,以获得近似解。

    我们在此简要介绍SimOTA。SimOTA首先计算成对匹配度,由每个预测gt对的cost[4,5,12,2]或质量[33]表示。例如,在SimOTA中,gt g_i和预测p_j之间的cost计算如下:

    c_{ij} =  L_{ij}^{cls} + \lambda L_{ij}^{reg}

    其中λ是一个平衡系数。L_{ij}^{cls}L_{ij}^{reg}是gt g_i和预测p_j之间的分类损失和回归损失。然后,对于gt g_i,我们选择固定中心区域内成本最小的前k个预测作为其正样本。最后,这些正预测的对应网格被指定为正,而其余网格则为负。注意,k值因不同的真值而不同。更多详细信息,请参考OTA[4]中的动态k估计策略。

    SimOTA不仅减少了训练时间,而且避免了Sinkhornkonpp算法中额外的解算器超参数。如表2所示。SimOTA将探测器的平均AP从45.0%提高到47.3%,比SOTA ultralytics-YOLOv3高出3.0%的平均AP,显示了先进分配策略的威力。

    端到端的YOLO

    我们按照[39]添加了两个额外的conv层、一对一标签分配和停止梯度。这些使检测器能够以端到端的方式执行,但会略微降低性能和推断速度,如表2所示。因此,我们将其作为可选模块,不包含在最终模型中。

    2.2. 其他主干

    除了DarkNet53之外,我们还在其他不同尺寸的主干上测试YOLOX,其中YOLOX与所有相应的主干相比实现了一致的改进。

    YOLOv5中改进的CSPNet

    为了进行公平比较,我们采用了精确的YOLOv5主干,包括改进的CSPNet[31]、SiLU激活和PAN[19]头。我们还遵循其缩放规则来生成YOLOX、YOLOX-M、YOLOX-L和YOLOX-X模型,表3中的YOLOv5相比,我们的模型有∼3.0%至∼1.0%AP的改进,只有边际时间增加(来自去耦头)。

    Tiny和Nano检测器

    我们进一步将模型缩小为YOLOX Tiny,以与YOLOv4 Tiny进行比较[30]。对于移动设备,我们采用深度卷积来构建YOLOX Nano模型,该模型只有0.91M参数和1.08GFLOPs。如表4所示,YOLOX的性能比同类对手更好,模型更小。

    模型大小和数据增强

    在我们的实验中,所有模型保持几乎相同的学习计划和优化参数,如2.1节所示。然而,我们发现合适的增强策略在不同大小的模型中有所不同。表5显示,虽然对YOLOX-L应用MixUp可以将AP提高0.9%,但对于像YOLOX Nano这样的小型模型,最好是减弱增强。具体来说,我们在训练小模型(即YOLOX-S、YOLOX-Tiny和YOLOX-Nano)时,消除了MixUp增强并削弱了mosaic(将比例范围从[0.1,2.0]减少到[0.5,1.5])。这样的修改将YOLOX Nano的AP从24.0%提高到25.3%。

    对于大型模型,我们还发现更强的增强更有用。实际上,我们的MixUp实现是[38]中原始版本的一部分。受Copypaste[6]的启发,我们通过随机采样的尺度因子对两幅图像进行抖动,然后将它们MixUp在一起。为了理解MixUp与尺度抖动的威力,我们将其与YOLOX-L上的Copypaste进行比较。注意到Copypaste需要额外的实例掩码注释,而MixUp则不需要。但如表5所示。这两种方法实现了具有竞争力的性能,表明在没有实例掩码注释可用时,尺度抖动的MixUp是Copypaste的合格替代品。

    3.与SOTA的比较

    传统上总是要和最先进模型对比一下的,如表6所示。然而,请记住,本表中模型的推断速度通常是不受控制的,因为速度随软件和硬件的不同而变化。因此,对于图1中的所有YOLO系列,我们使用相同的硬件和代码库,绘制出某种程度上受控的速度/精度曲线。

    我们注意到,有一些型号更大的高性能YOLO系列,如Scale-YOLOv4[30]和YOLOv5-P6[7]。当前的基于Transformer的探测器[21]将SOTA的精度提高到大约60AP。由于时间和资源的限制,我们在本报告中没有探讨这些重要特征。然而,它们已经在我们的视野内。

    4. 流媒体感知挑战赛第一名(WAD在CVPR 2021)

    流感知挑战WAD 2021是通过最近提出的度量:流精度(15)的准确性和延迟的联合评价。这个度量背后的关键洞察力是在每个时间瞬间共同评估整个感知堆栈的输出,迫使堆栈考虑在计算发生时应该忽略的流数据量[15 ]。我们发现,在30 FPS的数据流上,度量的最佳折衷点是一个具有推理时间的强大模型≤ 33毫秒。因此,我们采用了带有TensorRT的YOLOX-L模型来生产我们的最终模型,以迎接挑战,赢得第一名。有关更多详细信息,请参阅挑战网站5。

    5.结论

    在本报告中,我们对YOLO系列进行了一些实验的更新,它形成了一个名为YOLOX的高性能无 anchor探测器。YOLOX配备了一些最新的先进检测技术,即去耦头、无锚和先进的标签分配策略,与所有型号的其他同类产品相比,它在速度和准确性之间实现了更好的权衡。值得注意的是,我们将YOLOv3的体系结构提升到47.3%,超过当前最佳实践的3.0%,YOLOv3由于其广泛的兼容性仍然是业界使用最广泛的探测器之一。我们希望这份报告能帮助开发者和研究人员在实际场景中获得更好的体验。

    相关文章

      网友评论

          本文标题:YOLOX

          本文链接:https://www.haomeiwen.com/subject/svfbjrtx.html