论文翻译:牛XX的YOLOX

Posted AI浩

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了论文翻译:牛XX的YOLOX相关的知识,希望对你有一定的参考价值。

摘要

在本报告中,我们介绍了 YOLO 系列的一些经验改进,形成了一个新的高性能探测器——YOLOX。我们将 YOLO 检测器切换为无锚方式并进行其他高级检测技术,即解耦头和领先的标签分配策略 SimOTA,以在大量模型中实现最先进的结果:对于 YOLONano仅 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 自动驾驶研讨会)的第一名。我们希望这份报告能够在实际场景中为开发者和研究人员提供有用的经验,我们也提供了支持 ONNX、TensorRT、NCNN 和 Openvino 的部署版本。源代码位于 https://github.com/Megvii-BaseDetection/YOLOX

1 简介

随着物体检测的发展,YOLO系列[23,24,25,1,7]始终追求实时应用的最佳速度和精度权衡。他们提取了当时可用的最先进的检测技术(例如,YOLOv2 [24] 的锚点 [26],YOLOv3 [25] 的残差网络 [9])并优化最佳实践的实现。目前,YOLOv5 [7] 在 COCO 上以 48.2% 的 AP 在 13.7 ms 上保持最佳的权衡性能。

尽管如此,在过去两年中,物体检测学术界的主要进步集中在无锚检测器 [29, 40, 14]、高级标签分配策略 [37, 36, 12, 41, 22, 4] 和结束端到端(无 NMS)检测器 [2, 32, 39]。这些尚未集成到 YOLO 系列中,因为 YOLOv4 和 YOLOv5 仍然是基于锚点的检测器,具有手工制作的训练分配规则。 这就是我们来到这里的原因,通过经验丰富的优化为 YOLO 系列提供了这些最新进展。考虑到 YOLOv4 和 YOLOv5 对于基于锚的管道可能有点过度优化,我们选择 YOLOv3 [25] 作为我们的起点(我们将 YOLOv3-SPP 设置为默认的 YOLOv3)。确实,由于计算资源有限,以及各种实际应用中的软件支持不足,YOLOv3仍然是业界应用最广泛的检测器之一。

如图 1 所示,随着上述技术的不断更新,我们在 COCO 上以 640 × 640 的分辨率将 YOLOv3 提升到 47.3% AP(YOLOX-DarkNet53),超过了目前 YOLOv3 的最佳实践(44.3% AP,ultralytics version2) 大幅提升。此外,当切换到采用先进 CSPNet [31] 骨干网和额外 PAN [19] 头的先进 YOLOv5 架构时,YOLOX-L 在 COCO 上实现了 50.0% 的 AP,分辨率为 640 × 640,比对应的 YOLOv5-L 高 1.8 % AP。我们还在小尺寸模型上测试我们的设计策略。 YOLOX-Tiny 和 YOLOX-Nano(仅 0.91M 参数和 1.08G FLOPs)分别比对应的 YOLOv4-Tiny 和 NanoDet3 高 10% AP 和 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 [17] 上训练模型总共 300 个 epochs,其中 5 个 epochs 预热。我们使用随机梯度下降 (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 精度和batch = 1 测量的。

YOLOv3 基线 我们的基线采用了 DarkNet53 主干和 SPP 层的架构,在一些论文中称为 YOLOv3-SPP [1, 7]。与原始实现 [25] 相比,我们略微更改了一些训练策略,添加了 EMA 权重更新、余弦 lr 计划、IoU 损失和 IoU 感知分支。我们使用 BCE 损失来训练 cls 和 obj 分支,使用 IoU 损失来训练 reg 分支。这些通用训练技巧与 YOLOX 的关键改进是正交的,因此我们将它们放在基线上。此外,我们只进行 RandomHorizontalFlip、ColorJitter 和 multi-scale 进行数据增强,而放弃 RandomResizedCrop 策略,因为我们发现 RandomResizedCrop 与计划的马赛克增强有点重叠。通过这些改进,我们的基线在 COCO val 上实现了 38.5% 的 AP,如表 2 所示。

解耦头 在目标检测中,分类和回归任务之间的冲突是一个众所周知的问题 [27, 34]。因此,用于分类和定位的解耦头广泛用于大多数一级和二级检测器 [16, 29, 35, 34]。然而,随着 YOLO 系列的主干和特征金字塔(例如,FPN [13]、PAN [20])不断发展,它们的检测头保持耦合,如图 2 所示。 我们的两个分析实验表明耦合检测头可能会损害性能。 1)。将YOLO的头部换成解耦的头部大大提高了收敛速度,如图3.2)。解耦头对于 YOLO 的端到端版本是必不可少的(将在下面描述)。从 Tab 可以看出。如图 1 所示,耦合头的端到端属性降低了 4.2% AP,而解耦头的降低降低到 0.8% AP。因此,我们将 YOLO 检测头替换为一个 lite 解耦头,如图 2 所示。具体来说,它包含一个 1×1 conv 层以减少通道维度,然后是两个分别具有两个 3×3 conv 层的平行分支。我们在表 2 中报告了 V100 上 batch=1 的推理时间,并且 lite 解耦头带来了额外的 1.1 ms(11.6 ms vs 10.5 ms)。

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

无锚点 YOLOv4 [1] 和 YOLOv5 [7] 都遵循 YOLOv3 [25] 的原始基于锚的管道。然而,锚点机制有许多已知的问题。首先,为了达到最优的检测性能,需要在训练前进行聚类分析,确定一组最优的anchors。那些聚集的锚点是特定于域的并且不太通用。其次,锚点机制增加了检测头的复杂性,以及每张图像的预测数量。在某些边缘 AI 系统上,在设备之间(例如,从 NPU 到 CPU)移动如此大量的预测可能会成为整体延迟方面的潜在瓶颈。

无锚点检测器 [29, 40, 14] 在过去两年发展迅速。这些工作表明,无锚检测器的性能可以与基于锚的检测器相提并论。 Anchor-free 机制显着减少了需要启发式调整和许多技巧(例如,Anchor Clustering [24]、Grid Sensitive [11])的设计参数的数量,以获得良好的性能,使检测器,尤其是其训练和解码阶段,相当简单 [29]。

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

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

SimOTA 高级标签分配是近年来物体检测的另一个重要进展。 基于我们自己的研究 OTA [4],我们总结了高级标签分配的四个关键见解:1)损失/质量意识。2) 中心优先。3)每个ground-truth的动态正锚数量4(缩写为动态top-k)。4) 全球视野。 OTA 满足上述所有四个规则,因此我们选择它作为候选标签分配策略。

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

我们在这里简单介绍一下 SimOTA。 SimOTA 首先计算成对匹配度,由每个预测-gt 对的成本 [4, 5,12, 2] 或质量 [33] 表示。例如,在 SimOTA 中,gt gi 和预测 pj 之间的成本计算如下:

其中 λ 是平衡系数。 L i j c l s L_{ij}^{cls} Lijcls L i j r e g L_{ij}^{reg} Lijreg g t g_{t} gt g i g_{i} gi 和预测 p i p_{i} pi 之间的分类损失和回归损失。然后,对于 g t g_{t} gt g i g_{i} gi,我们选择固定中心区域内成本最低的前k个预测作为其正样本。最后,这些正预测的相应网格被指定为正,而其余的网格是负。请注意,k 值因不同的真实情况而异。更多细节请参考 OTA [4] 中的动态 k 估计策略。 SimOTA 不仅减少了训练时间,而且避免了 SinkhornKnopp 算法中额外的求解器超参数。如表 2 所示,SimOTA 将检测器从 45.0% AP 提升到 47.3% AP,比 SOTA ultralytics-YOLOv3 高 3.0% AP,显示了高级分配策略的威力。

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

2.2 其他骨干

除了 DarkNet53,我们还在其他不同大小的主干上测试了 YOLOX,其中 YOLOX 相对于所有相应的对应物实现了一致的改进。

YOLOv5 中修改的 CSPNet 为了公平比较,我们采用了精确的 YOLOv5 主干,包括修改后的 CSPNet [31]、SiLU 激活和 PAN [19] 头。 我们也遵循其缩放规则来生产 YOLOXS、YOLOX-M、YOLOX-L 和 YOLOX-X 模型。 与表 3 中的 YOLOv5 相比,我们的模型持续改进了 ∼3.0% 到 ∼1.0% AP,仅增加了边际时间(来自解耦头)。

微型和纳米探测器 我们将模型进一步缩小为 YOLOX-Tiny 以与 YOLOv4-Tiny [30] 进行比较。 对于移动设备,我们采用深度卷积来构建 YOLOX-Nano 模型,该模型只有 0.91M 参数和 1.08G FLOP。 如表 4 所示,YOLOX 在比同类产品更小的模型尺寸下表现良好。

模型大小和数据增强 在我们的实验中,所有模型都保持几乎相同的学习计划和优化参数,如 2.1 所示。然而,我们发现合适的增强策略因模型大小而异。作为选项卡。如图5所示,虽然对YOLOX-L应用MixUp可以提高0.9%的AP,但对于像YOLOX-Nano这样的小模型,最好弱化增强。具体来说,我们在训练小模型(即 YOLOX-S、YOLOX-Tiny 和 YOLOX-Nano)时去除混合增强并削弱马赛克(将尺度范围从 [0.1, 2.0] 减少到 [0.5, 1.5])。这样的修改将 YOLOX-Nano 的 AP 从 24.0% 提高到 25.3%。

对于大型模型,我们还发现更强的增强更有帮助。事实上,我们的 MixUp 实现是比 [38] 中的原始版本更重的一部分。受 Copypaste [6] 的启发,我们在混合它们之前通过随机采样的比例因子对两个图像进行抖动。为了了解 Mixup 与缩放抖动的威力,我们将其与 YOLOX-L 上的 Copypaste 进行比较。注意到 Copypaste 需要额外的实例掩码注释,而 MixUp 不需要。但如表 5 所示,这两种方法都取得了有竞争力的性能,说明在没有实例掩码标注的情况下,带缩放抖动的 MixUp 是 Copypaste 的合格替代品。

3 与 SOTA 的比较

有一个传统显示 SOTA 比较表,如表 6 所示。 但是,请记住,此表中模型的推理速度通常不受控制,因为速度因软件和硬件而异。 因此,我们对图 1 中的所有 YOLO 系列使用相同的硬件和代码库,绘制了一些受控的速度/精度曲线。 我们注意到有一些模型尺寸更大的高性能 YOLO 系列,例如 Scale-YOLOv4 [30] 和 YOLOv5-P6 [7]。 当前基于 Transformer 的检测器 [21] 将准确度-SOTA 推高到 60 AP。 由于时间和资源限制,我们没有在本报告中探讨这些重要特征。 但是,它们已经在我们的范围内。

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

WAD 2021 上的流媒体感知挑战是通过最近提出的度量标准对准确性和延迟进行的联合评估:流媒体准确性 [15]。该指标背后的关键见解是在每个时刻联合评估整个感知堆栈的输出,迫使堆栈考虑在计算发生时应忽略的流数据量 [15]。我们发现 30 FPS 数据流的度量的最佳折衷点是推理时间≤ 33ms 的强大模型。所以我们采用带有 TensorRT 的 YOLOX-L 模型来制作我们的最终模型,以赢得第一名的挑战。请参阅挑战网站5了解更多详情。

结论

时间≤ 33ms 的强大模型。所以我们采用带有 TensorRT 的 YOLOX-L 模型来制作我们的最终模型,以赢得第一名的挑战。请参阅挑战网站5了解更多详情。

结论

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

以上是关于论文翻译:牛XX的YOLOX的主要内容,如果未能解决你的问题,请参考以下文章

YOLOX网络结构详解

目标检测从YOLOv1到YOLOX(理论梳理)

YOLOX项目源码结构拆解

YOLO系列的又一集大成者:YOLOX!

YOLO系列的又一集大成者:YOLOX!

一群牛人翻译:The Swift Programming Language 中文版