文章下载:

YOLOX-Exceeding YOLO Series in 2021.pdf


摘要

本篇文章中,我们展示了在 YOLO 系列检测器上的改进,并获得了一个高性能的目标检测器 —— YOLOX。我们将 YOLO 检测器转换为了一种无锚框的形式,并加入了其他一些先进的检测技术,比如 decoupled head 网络头解耦 以及 leading label assignment srategy SimOTA 标签分配策略,在大多数模型上都取得了目前最好的效果:在 YOLO-Nano 模型上,仅有 0.91M 的参数量以及 1.08 GFLOPs,在 COCO 数据集上获得了 25.3% AP,比 NanoDet 提高了 1.8% AP;在 YOLOv3 上,也是工业界最常用的检测器之一,在 COCO 数据集上获得了 47.3% AP 的效果,比 YOLOv3 目前最好的结果还提高了 3.0% AP;对于和 YOLOv4-CSP 以及 YOLOv5-L 有着大约相同参数量的 YOLOX-L 来说,在 Tesla V100 上,在 COCO 数据集上以 68.9 FPS 的速度获得了 50.0% AP 的性能表现,比 YOLOv5-L 提高了 1.8% AP。此外,我们还在 Streaming Perception Challenge (Workshop on Autonomous Driving at CVPR 2021) 上以 YOLOX-L 获得了第一名的好成绩。我们希望,本篇论文能够为研究者提供有效的经验;此外,我们还提供了支持 ONNX、TensorRT、NCNN 以及 Openvino 的版本。源代码在 https://github.com/Megvii-BaseDetection/YOLOX

1. Introduction

随着目标检测技术的发展,YOLO 系列一直在实时应用上追求速度与精确度的最佳取舍。他们使用当下最先进的检测技术,并将扩展应用优化到最好。目前,YOLOv5 有着最好的取舍性能表现,在 COCO 数据集上,以 13.7ms 的速度达到了 48.2% AP 的精确度。

此外,在过去的两年中,目标检测领域主要的先进技术是无锚框检测器、标签分配策略 label assignment strategies 检测器,以及端到端检测器(NMS-free)。但是这些技术并没有应用到 YOLO 系列的技术当中, YOLOv4 和 YOLOv5 依然是基于锚框的检测器,并且训练时需要手动匹配。

基于这种情况,我们就有了思路:将这些先进的技术应用到 YOLO 系列当中并加以优化。考虑到 YOLOv4 和 YOLOv5 对于 基于锚框的检测流水线来说可能会过拟合,我们选择 YOLOv3 作为优化起点(我们选择了 YOLOv3-SPP 作为 YOLOv3)。实际上,YOLOv3 仍旧是工业界最广泛使用的检测器之一,这得益于其有限的资源消耗以及在各种场景应用下,少量的软件支持,需要的维护精力很小。

图 1 YOLOX 与 其他目前最好的检测器之间,在移动平台上的轻量模型,关于速度与精确度、模型大小与精确度之间的曲线比较。

如图 1 所示,在以上提到的技术的加持下,我们将 ultralytics 版本的 YOLOv3 的最好性能表现,从 44.3% AP,提高到了YOLOX-DarkNet53 的 47.3% AP,该结果是在 COCO 数据集上以 640x640 分辨率得到的。此外,当我们将 YOLOv3 换成使用了 CSPNet 以及 PAN 网络头的 YOLOv5 时,同样在 COCO 数据集上以 640x640 分辨率训练,最终达到了 50.0% AP 的性能表现,比 YOLOv5-L 还要高了 1.8% AP。我们还在小模型上测试了我们的方法策略。 YOLOX-Tiny 和 YOLOX-Nano (仅有 0.91 M 参数量以及 1.08 GFLOPs)依然是比 YOLOv4-Tiny 和 NanoDet 提高了 10% AP 和 1.8% AP。

我们将我们的代码放在了 github 仓库,链接是:https://github.com/Megvii-BaseDetection/YOLOX ,支持 ONNX、TensorRT、NCNN 以及 Openvino。此外,我们使用 YOLOX-L 模型获得了 Streaming Perception Challenge (Workshop on Autonomous Driving at CVPR 2021) 第一名的成绩。

2. YOLOX

2.1 YOLOX-DarkNet53

我们选择使用 DarkNet53 作为骨干网络的 YOLOv3 作为基准。接下来的部分,我们将会一步一步进行 YOLOX 的系统设计。

Impleementation details

我们最终模型的训练配置与基准保持了一致。我们在 COCO train2017 数据集上总共训练了 300 epochs,其中前 5 轮为warmup;并采用随机梯度下降法(SGD,stochastic gradient decent)进行训练。学习率设置为 l r × B a t c h S i z e / 64 lr \times BatchSize / 64 lr×BatchSize/64,并将 l r lr lr 初始化为 0.01,采用余弦变化。另外,权重衰减系数设置为 0.0005,SGD 的动量系数设置为 0.9。训练设备为 8-GPUs,并将 batch size 设置为 128。这样的 batch size 即使在云端单卡 GPU 也可以进行训练。此外,还以 32 的步长,将输入的大小从 832 降低到了 448。本文中的 FPS 和 latency 是在 Tesla V100 上,以 FP16-precision 以及 batch size 为 1 进行测量的。

YOLOv3 baseline

我们采用了 YOLOv3-SPP,骨干网络是 DarkNet5 并且有一个 SPP 层。相比原始版本的 YOLOv3,我们做了一些训练策略的改变:加入了 EMA 权重移动平均方法、consine lr schedule、IoU-aware branch。我们使用了 BCE Loss 来训练 class 和 object,使用 IoU Loss 来训练 reg。These general training tricks are orthogonal to the key improvement of YOLOX, we thus put them on the baseline。此外,我们使用了 RandomHorizontalFlip、ColorJitter 以及 multi-scale 来做数据增广手段,并丢弃 RandomResizedCrop 策略,这是因为我们发现 RandomResizedCrop 在某种程度上与马赛克增强功能重叠。在这些增强技术的加持下,我们的基准程序在 COCO val 数据集上,达到了 38.5% AP 的性能表现,如表 2 所示。

表 2 YOLOX-Darknet53 在 COCO val 数据集上 AP 指标的结果。所有的模型均在 640x640 分辨率下,且在Tesla V100上以 FP16-precision、batch=1 的条件下测试。表格中的延迟 latency 和 FPS 指标均不带有后处理测量。

Decoupled head

在目标检测领域中,分类任务与回归任务之间的冲突是一个著名的问题。因此,回归任务与定位任务的分离头就成为了大多数 one-stage 和 two-stage 检测器中广泛使用的技术。然而,随着 YOLO 系列的骨干网络和特征金字塔(如 FPN、PAN)不断进步,他们的检测网络头保持了耦合状态,如图 2 所示。

图 2 YOLOv3 网络头和本文提出的分离网络头之间的不同。对于 FPN 特征的每一层来说,我们首先使用一个 1x1 的卷积层来将特征通道减少到 256,然后加上两个分支:分类分支与回归分支,每个分支均有两个 3x3 的卷积层。其中,回归分支中还加入了 IoU 分支。

我们的分析实验表明,耦合网络头可能会损害检测器的性能表现。

  1. 如图 3 所示,将 YOLO 的网络头换为解耦的网络头之后,能够大大提高网络速度;
  2. 分离网络头是 YOLO 的端到端版本中的基础组成部分(接下来将会讲解);

表 1 端到端的 YOLO 中,分离头之后在 COCO 上的性能表现,指标为 AP。

如表 1 所示,带有耦合网络头的端到端的版本,下降了 4.2% AP 的性能,而分离网络头的下降了 0.8% AP 的性能。因此,我们将 YOLO 的检测网络头替换成了如图 2 所示的分离的网络头。具体来说,它包含了一个 1x1 的卷积层来降低通道维数,然后跟了带有两个平行分支的网络,且每个分支均由两个 3x3 的卷积层组成。如图 2 所示,我们在 Tesla V100 上以 batch = 1 测量了模型的推理时间,发现分离网络头带来了 1.1 ms 的时长增加,从 10.5 ms 增加到了 11.6ms。

Strong data augmentation

为了提高 YOLOX 的性能表现,我们加入了 Mosaic 马塞克增强以及 MixUp 的数据增广手段。马赛克增强是由 ultralytics 版本 YOLOv3 提出的一种有效的数据增广策略。然后就被广泛使用到 YOLOv4、YOLOv5 以及其它目标检测器当中。MixUp 最开始是为了图像分类任务而设计的,但是后来被修改了后应用到了目标检测任务的训练阶段。我们在模型中应用了 MixUp 和 马赛克增强技术,并在最后的 15 个 epochs 的训练当中移除不用,最终达到了 42.0% AP 的性能表现,如表 2 所示。在使用了这种强力的数据增广手段之后,我们发现 ImageNet 预训练出来的 backbone 不再有效了,we thus train all the following models from scratch。

Anchor-free

YOLOv4 和 YOLOv5 都沿用了 YOLOv3 中基于锚框的流程。但是,锚框机制有许多皆知的问题。首先,为了获取最优的检测性能表现,在训练之前就需要进行聚类分析以确定一个最优的锚框集合。这些聚类出来的锚框是特异域的,且不具有普适性。其次,锚框机制增加了检测网络头的复杂度,同时也增加了每张图像中预测出来的目标数量。在一些边缘 AI 系统中,在设备之间(比如从 NPU 到 CPU)移动大量的预测结果,可能会成为潜在的延迟性能瓶颈。

无锚框检测器在最近两年中快速发展。这些无锚框检测器的研究工作显示,它的检测性能表现同基于锚框的检测器性能基本相同。无锚框机制显著减少了那些需要启发式调整以及一些技巧(比如 Anchor Clustering,Grid Sensitive)的参数的数量,这些参数能够使得检测器有着更好的性能表现,尤其是能够让训练与解码变得更简洁。

将 YOLO 转换为无锚框的形式很简单。我们首先将每个位置的预测框数量从 3 降低到 1 个,并使他们直接预测四个值:在网格中距离左上角的两个偏移量、预测框的宽和高。然后我们将每个物体的中心位置当作正值样本,且如同《Fcos: Fully convolutional one-stage object detection》中,预定义一个尺度范围,去为每个目标指定 FPN level。这种改变减少了参数量和检测器的 GFLOPs,且使得检测器更快;但是却有着更好的性能表现 —— 如表 2 所示的 42.9% AP。

Multi positives

为了与 YOLOv3 中的匹配规则保持一致,上文中提到的无锚框版本,仅为每个物体选择一个正值样本,同时忽略其他高质量的预测结果。However, optimizing those high quality predictions may also bring beneficial gradients, which may alleviates the extreme imbalance of positive/negative sampling during training。因此,我们就简单地制定了中间的 3x3 的区域作为正值样本,在 FCOS 中也叫做 “center sampling”。如表 2 中所示,检测器的性能提升到了 45.0% AP,这已经超过了 ultralytics 版本的 YOLOv3 的最好的 44.3% AP 的性能表现。

SimOTA

标签分配是近年来目标检测领域中另外一个重要的进展。基于我们的 OTA 研究,我们总结了标签分配技术的四个要点:

  1. loss/quality aware;
  2. center prior;
  3. dynamic number of positive anchors for each ground-truth (abbreviated as dynamic top-k) 真值框的正值锚框数量动态变化;
  4. global view 全局;

OTA 满足以上四点要求,因此我们将其作为一种候选的标签分配策略。

具体来说,OTA 方法从全局的视角来进行标签分配,并将 Optimal Transport 问题看做分配过程,从而达到了目前分配策略当中性能表现最好的方法 SOTA。然而,在实际应用中,我们发现通过 Sinkhorn-Knopp 算法来解决 OT 问题时,还带来了额外的 25% 的训练时间,这对于 300 epochs 的训练过程来说耗费过于昂贵。因此,我们将其简化为了动态 top-k 策略,并命名为 SimOTA,来得到一个近似的效果。

接下来简要介绍一下 SimOTA。SimOTA 首先计算每一对的匹配程度,用 cost 或者 quality 表达这个程度。比如,在 SimOTA 算法中,真值框 g i g_i gi​ 和预测框 p j p_j pj​ 之间的 cost 计算过程如下:

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​ 表示真值框 g i g_i gi​ 和预测框 p j p_j pj​ 之间的分类误差和回归误差。然后,对于真值框 g i g_i gi​ 来说,我们在一个固定的中心区域内,挑选前 k k k 个 cost 最小的预测框,作为它的正值样本 positive samples。最后,这些正值样本相关联的 grids 就被标记为正值 positives,剩下的则是负值 negatives。需要注意, k k k 值对于不同的正值框是不同的。关于 k k k 的动态估算策略可在 《Ota: Optimal transport assignment for object detection》中查看详情。

SimOTA 不仅仅减少了训练时长,而且还避免了在 Sinkhorn-Knopp 算法中引入额外的超参数。如表 2 所示,SimOTA 将检测器的性能从 45.0% AP 提高到了 47.3% AP,比最优秀的(SOTA)ultralytics 版本的 YOLOv3 还要高 3% AP,这说明这种标签分配策略十分优秀。

End-to-end YOLO

我们根据《Object detection made simpler by eliminating heuristic nms》描述,加入了两个额外的卷积层、一对一的标签分配,以及梯度停止策略。这些使得检测器以端到端的方式工作,但是稍微降低了性能表现且减慢了推理速度,如表 2 所示。因此,我们将其作为一个可选的模块,并且没有加入到我们最终的模型当中。

2.2 Other Backbones

除了 DarkNet53,我们还在 YOLOX 上测试了其它不同大小的 backbones,而结果 YOLOX 都取得了相一致的结果。

Modified CSPNet in YOLOv5

表 3 在 COCO 数据集上,YOLOX 与 YOLOv5 以 AP 指标的对比结果。所有模型的测试条件均为 640x640分辨率、FP16-precision、batch=1、测试平台为 Tesla V100。

为了进行一个公平的比较,我们使用了带有修改的 CSPNet 的骨干网络、SiLU 激活函数,以及 PAN 网络头的 YOLOv5。我们也按照 YOLOv5 的模型缩放规则,生成了 YOLOX-S、YOLOX-M、YOLOX-L 以及 YOLOX-X 模型。如表 3 所示,与 YOLOv5 相比,在很小的时间增加(来自于分离网络头)的条件下,所有模型都提高了 1.0% AP 到 3.0% AP。

Tiny and Nano detectors

表 4 在 COCO val 数据集上,YOLOX-Tiny 和 YOLOX-Nano 在指标 AP 的比较结果。所有的模型测试分辨率均为 416x416。

我们进一步将我们的模型缩小为 YOLOX-Tiny,并与 YOLOv4-Tiny 进行比较。对于移动设备来说,我们使用了深度卷积 depth wise convolution 来构建 YOLOX-Nano 模型,它仅有 0.91M 的参数量以及 1.08GFLOPs。如表 4 所示,YOLOX 比其他模型性能表现更好,同时模型也更小。

Model size and data augmentation

表 5 不同模型数据增广策略的影响。

在我们的实验中,所有的模型都保持了同 2.1 章节中描述的学习训练规划以及优化参数。然而,我们发现,对于不同大小的模型,最合适的数据增广策略也需要有所变化。如表 5 所示,“Scale Jit.” 表示马赛克图像 scale jittering 的范围。另外,在使用 Copypaste 的时候,使用了 COCO trainval 数据集中的 instance mask annotations。

3. Comparison with the SOTA

表 6 在 COCO 2017 test-dev 数据集上,各种目标检测器之间速度与精确度的对比。我们将所有的模型,都训练了 300 epochs,以达到公平比较。

表 6 显示了当前 SOTA 方法的对比。然而,需要注意的是,表格中模型的推理时间是不受控制的,因为软件和硬件环境不会完全一样。因此,图 1 中的数据结果,我们使用了相同的硬件环境,以及同样的 YOLO 系列代码,以稍微控制无关变量。

我们注意到,YOLO 系列中更大的模型,比如 Scale-YOLOv4 和 YOLOv5-P6,有着很高的性能表现。当前基于 Transformer 的检测器将 SOTA 模型的精确度提高到了大约 60% AP。由于时间和资源限制,本文中没有进一步探究这一重要特征。然而,他们已经加入了我们的模型中。

4. 1st Place on Streaming Perception Challenge (WAD at CVPR 2021)

Streaming Perception Challenge onWAD 2021 is a joint evaluation of accuracy and latency through a recently proposed metric: streaming accuracy。The key insight behind this metric is to jointly evaluate the output of the entire perception stack at every time instant, forcing the stack to consider the amount of streaming data that should be ignored while computation is occurring. We found that the best trade-off point for metric on 30 FPS data stream is a powerful model with the inference time ≤ 33 ms. So we adopt a YOLOX-L model with TensorRT to product our final model for the challenge to win the 1st place. Please refer to the challenge website5 for more details.

5. Conclusion

本文中,我们展示了 YOLO 系列的一些改进,并构建了一个高性能的无锚框检测器 YOLOX。在加入了一些先进的检测技术之后,比如分离头 decoupled head、无锚框技术 anchor-free、标签分配策略等,相比于其它模型,YOLOX 在各种大小的模型上,都达到了一个更好的速度与精确度的平衡。值得注意的是,我们还加速了目前工业界广泛应用的 YOLOv3 目标检测器,使它在 COCO 数据集上达到了 47.3% AP 的结果,提高了 3% AP。

《YOLOX: Exceeding YOLO Series in 2021》阅读相关推荐

  1. 阅读《SentiLARE: Sentiment-Aware Language Representation Learning with Linguistic Knowledge》

    SentiLARE: Sentiment-Aware Language Representation Learning with Linguistic Knowledge Abstract 现有的预训 ...

  2. Align before Fuse: Vision and Language Representation Learning with Momentum Distillation

    ALBEF:Align before Fuse: Vision and Language Representation Learning with Momentum Distillation 论文链接 ...

  3. # 互信息最大化[视角统一]:Align before Fuse: Vision Language Representation Learning with Momentum Distillation

    互信息最大化[视角统一]:Align before Fuse: Vision and Language Representation Learning with Momentum Distillati ...

  4. 【论文模型讲解】VideoBERT: A Joint Model for Video and Language Representation Learning

    文章目录 前言 0 摘要 1 Introduction 2 相关工作 3 模型 3.1 BERT 3.2 VideoBERT 4 实验与分析 4.1 数据集 4.2 视频和语言预处理 4.3 模型预训 ...

  5. [论文学习]TDN: An Integrated Representation Learning Model of Knowledge Graphs

    [论文学习以及翻译]TDN: An Integrated Representation Learning Model of Knowledge Graphs 文章主要内容 摘要 前言 相关工作 基于T ...

  6. Kaiming He论文阅读笔记三——Simple Siamese Representation Learning

    Kaiming He大神在2021年发表的Exploring Simple Siamese Representation Learning,截至目前已经有963的引用,今天我们就一起来阅读一下这篇自监 ...

  7. [论文阅读] iCaRL: Incremental Classifier and Representation Learning

    论文地址:https://openaccess.thecvf.com/content_cvpr_2017/html/Rebuffi_iCaRL_Incremental_Classifier_CVPR_ ...

  8. 自然语言处理学习——论文分享——A Mutual Information Maximization Perspective of Language Representation Learning

    资料放在前面:https://blog.csdn.net/Arnetminer/article/details/105840669 文章的贡献如下: (1)提出了一个基于最大化MI的理论框架来理解词表 ...

  9. CVPR 2020 《12-in-1: Multi-Task Vision and Language Representation Learning》论文笔记

    目录 简介 动机 贡献 方法 实验 简介 本文是在NIPS 2019 ViLBERT上的拓展. 论文链接 动机 本文修改了ViLBERT的预训练过程,有两个小修改:1. 对regions进行mask时 ...

  10. 论文阅读Unsupervised Corpus Aware Language Model Pre-training for Dense Passage Retrieval

    密集文本检索的无监督语料库感知语言模型预训练 ACL2022 论文链接 摘要 最近的研究证明了使用微调语言模型(LM)进行密集检索的有效性.然而,密集检索器很难训练,通常需要经过精心设计的微调管道才能 ...

最新文章

  1. C++程序员学Python:C与Python进行交互
  2. 光栅尺与PLC的配合使用
  3. cstring 不明确_股价不可预测明确时间点的涨跌
  4. cef在android中使用_关于富文本在Android中的应用以及遇到的坑
  5. linux 安装 vmvare
  6. mongodb数据库安装和启动及操作笔记
  7. 【VBA研究】利用DateAdd函数取上月或上年同期的日期
  8. LIN雨量传感器:MQB平台与PQ自带的传感器类型分析
  9. Epubor Ultimate for mac(mac电子书转换软件)
  10. 纵向联邦线性模型在线推理过程中成员推断攻击的隐私保护研究
  11. 湖南省邵阳市谷歌高清卫星地图下载
  12. {}System.Threading.ThreadAbortException: 正在中止线程。
  13. SP3458芯片相关配置
  14. MATLAB基本常识知识总结
  15. 华硕z97不识别m2固态_安全解决方案:华硕Z97-A主板无法识别Intel M.2 NVME SSD的解决方案...
  16. IntelliJ IDEA 代码编辑区迷你缩放图插件 CodeGlance
  17. c语言过河小游戏代码,闲来没事撸了一个控制台小游戏
  18. 惠普大中华区总裁退休感言
  19. 剩余电流动作保护继电器的应用探讨
  20. 列正交矩阵一定是行正交矩阵,反之亦然

热门文章

  1. 笔记本电池应该怎样维护保养
  2. 鸿蒙手机手表,不再是大号手环!华为鸿蒙手表来了:要和苹果抢生态?
  3. 统计学之变异系数与是非标志
  4. 【C语言】sizeof和strlen的区别
  5. 知乎专栏-水面的满月
  6. 关于Windows PowerShell运行其他程序闪退的解决办法
  7. Vue 路由的基本使用
  8. css减去自身宽度的一半,xHTML / CSS:如何使内部div获得100%的宽度减去另一个div的宽度...
  9. c++攻读方向_攻读硕士学位的好,坏与丑
  10. python实现对图像的平移、旋转、镜像、拉伸、缩放