YOLOX

YOLOX#

标题: YOLOX: Exceeding YOLO Series in 2021

作者: Zheng Ge, Songtao Liu, Feng Wang, Zeming Li, Jian Sun (Megvii Technology)

摘要: YOLOX是YOLO系列的一个新成员,旨在提供更优的速度和准确性权衡。YOLOX采用了无锚点(anchor-free)的方式,并结合了其他先进的目标检测技术,如解耦的检测头(decoupled head)、标签分配策略SimOTA等。YOLOX在不同模型尺寸上均取得了优异的性能,例如YOLOX-L在COCO数据集上达到了50.0% AP的检测性能,同时在Tesla V100上以68.9 FPS的速度运行。

1. 问题: 论文试图解决如何在目标检测任务中提高YOLO系列的性能,特别是在速度和准确性之间的权衡。

2. 新问题: 这不是一个全新的问题,而是对现有YOLO系列目标检测模型的改进。

3. 科学假设: 假设通过结合无锚点检测、解耦的检测头和先进的标签分配策略等技术,可以提高目标检测的性能。

4. 相关研究:

  • 目标检测模型:YOLO系列、EfficientDet、SSD、RetinaNet等。

  • 无锚点检测器:CornerNet、FCOS等。

  • 标签分配策略:OTA、AutoAssign等。

  • 领域内值得关注的研究员包括但不限于Joseph Redmon、Ali Farhadi(YOLO系列的主要贡献者)。

5. 解决方案关键: YOLOX的关键技术包括:

  • 无锚点(anchor-free)检测。

  • 解耦的检测头(decoupled head)。

  • 先进的标签分配策略SimOTA。

  • 强数据增强策略,如Mosaic和MixUp。

6. 实验设计: 实验在COCO数据集上进行,使用300个训练周期,采用SGD优化器,余弦学习率调度,以及一系列数据增强技术。模型在不同尺寸的输入上进行训练和测试。

7. 数据集与代码: 使用的数据集是COCO,源代码在GitHub上开源:https://github.com/Megvii-BaseDetection/YOLOX。

8. 实验结果: 实验结果表明,YOLOX在不同模型尺寸上均取得了优异的性能,支持了论文提出的科学假设。

9. 贡献:

  • 提出了YOLOX,一个高性能的无锚点目标检测模型。

  • 在多个模型尺寸上实现了速度和准确性的优异权衡。

  • 在Streaming Perception Challenge (WAD at CVPR 2021)中获得了第一名。

  • 提供了ONNX、TensorRT、NCNN和Openvino支持的部署版本。

10. 下一步工作:

  • 进一步探索和优化YOLOX模型,以提高对小目标的检测能力。

  • 在更多的数据集上测试YOLOX的性能。

  • 探索YOLOX在不同应用场景中的实用性和效果。

回答问题

  1. 问题: 提高YOLO系列目标检测模型的速度和准确性。

  2. 新问题: 不是新问题,是对YOLO系列的改进。

  3. 科学假设: 结合先进技术可以提升YOLO系列的性能。

  4. 相关研究: YOLO系列、EfficientDet、无锚点检测器、标签分配策略等。

  5. 解决方案关键: 无锚点检测、解耦头、SimOTA策略、数据增强。

  6. 实验设计: 在COCO数据集上进行,使用SGD优化器和其他训练技巧。

  7. 数据集与代码: 使用COCO数据集,代码已在GitHub开源。

  8. 实验结果: 支持假设,YOLOX在不同尺寸模型上均取得了优异性能。

  9. 贡献: 提出了YOLOX模型,提供了多种部署版本,并在比赛中获奖。

  10. 下一步工作: 提高小目标检测能力,测试更多数据集,探索应用场景。


yolox-fig1

图表展示了YOLOX模型与其他先进目标检测器在速度-准确性和尺寸-准确性方面的性能对比。以下是对图表的分析和总结:

左图:速度-准确性权衡

  • 横轴:VL100批次延迟(ms),表示模型处理一批次数据所需的时间,数值越小表示速度越快。

  • 纵轴:COCO AP(%),表示在COCO数据集上的平均精度,数值越大表示准确性越高。

  • 标记:不同颜色和形状的标记代表不同的模型。

从左图可以看出:

  • YOLOX系列模型(红色标记)在速度和准确性之间表现出良好的平衡。特别是YOLOX-L和YOLOX-S在保持较高准确性的同时,延迟相对较低。

  • YOLOX-DarkNet53YOLOX-S的性能优于其他模型,显示出较高的COCO AP和较低的延迟。

  • EfficientDet系列(蓝色标记)在准确性上表现较好,但延迟较高。

右图:尺寸-准确性曲线

  • 横轴:参数数量(M),表示模型的参数量,数值越大表示模型越复杂。

  • 纵轴:COCO AP(%),表示在COCO数据集上的平均精度,数值越大表示准确性越高。

  • 标记:不同颜色和形状的标记代表不同的模型。

从右图可以看出:

  • YOLOX系列模型(红色标记)在参数数量和准确性之间表现出良好的平衡。特别是YOLOX-Tiny和YOLOX-Nano在保持较高准确性的同时,参数数量较少。

  • EfficientDet系列(蓝色标记)在参数数量和准确性上也表现出色,但与YOLOX相比,参数数量相对较多。

  • PPYOLO-TinyNanoDet(绿色标记)在参数数量上有优势,但准确性较低。

总结

  • YOLOX模型在速度、准确性和参数数量之间表现出良好的平衡,特别是在移动设备上具有较高的实用性。

  • EfficientDet模型在准确性上表现出色,但在速度和参数数量上相对劣势。

  • PPYOLO-TinyNanoDet在参数数量上有优势,但准确性较低。

总体而言,YOLOX系列模型在多个维度上表现优异,适合需要高效且准确的目标检测任务。


yolox-fig2

以下是对YOLOv3和YOLOX模型头部结构的更详细分析,以及输入输出流程的详细描述:

输入输出流程

输入特征

  • FPN特征:输入特征来自特征金字塔网络(FPN),包括不同尺度的特征图(如P3, P4, P5)。

  • 特征图尺寸:特征图的尺寸为 (H \times W),通道数为512或256。

YOLOv3的耦合头部(Coupled Head)

  1. 输入特征图

    • 输入特征图的尺寸为 (H \times W \times 512) 或 (H \times W \times 256)。

  2. 1x1卷积层

    • 通过一个 (1 \times 1) 卷积层,保持特征图的空间尺寸不变,但调整通道数。

    • 输出特征图的尺寸为 (H \times W \times 256)。

  3. 3x3卷积层

    • 通过一个 (3 \times 3) 卷积层,进一步提取特征。

    • 输出特征图的尺寸为 (H \times W \times 256)。

  4. 输出层

    • 最后通过一个卷积层,输出包含分类(Cls.)、回归(Reg.)和目标(Obj.)信息的特征图。

    • 输出通道数为 ((#anchor \times C) + (#anchor \times 4) + (#anchor \times 1)),其中:

      • (#anchor) 是每个网格单元的锚框数量。

      • (C) 是类别数量。

      • 4 是边界框的回归参数(x, y, w, h)。

      • 1 是目标置信度。

YOLOX的解耦头部(Decoupled Head)

  1. 输入特征图

    • 输入特征图的尺寸为 (H \times W \times 512) 或 (H \times W \times 256)。

  2. 1x1卷积层

    • 通过一个 (1 \times 1) 卷积层,将特征通道数减少到256。

    • 输出特征图的尺寸为 (H \times W \times 256)。

  3. 分支处理

    • 将特征图分成两条并行分支,分别处理分类和回归任务。

    分类分支

    • 第一个3x3卷积层:提取分类特征。

      • 输出特征图的尺寸为 (H \times W \times 256)。

    • 第二个3x3卷积层:进一步提取分类特征。

      • 输出特征图的尺寸为 (H \times W \times C)。

    • 分类输出层:输出分类结果。

      • 输出特征图的尺寸为 (H \times W \times C)。

    回归分支

    • 第一个3x3卷积层:提取回归特征。

      • 输出特征图的尺寸为 (H \times W \times 256)。

    • 第二个3x3卷积层:进一步提取回归特征。

      • 输出特征图的尺寸为 (H \times W \times 4)。

    • 回归输出层:输出回归结果。

      • 输出特征图的尺寸为 (H \times W \times 4)。

    IoU分支

    • 在回归分支上增加一个IoU分支,输出IoU特征图。

      • 输出特征图的尺寸为 (H \times W \times 1)。

总结

  • YOLOv3的耦合头部:将分类、回归和目标信息耦合在一起,通过一个卷积层同时输出。这种结构简单,但可能在分类和回归任务之间产生干扰。

  • YOLOX的解耦头部:将分类和回归任务分离,通过两个并行分支分别处理。这种结构可以减少任务之间的干扰,提高模型的性能。此外,增加了IoU分支,有助于提高定位精度。

通过解耦头部结构,YOLOX模型在分类和回归任务上能够更好地优化,从而提高整体性能。


yolox-fig3
  1. 收敛速度

    • 解耦头部的检测器在训练初期收敛速度明显快于YOLOv3头部的检测器。这表明解耦头部在优化过程中更高效,能够更快地达到较高的性能。

  2. 最终性能

    • 解耦头部的检测器在训练结束时的AP明显高于YOLOv3头部的检测器。这表明解耦头部在最终性能上优于YOLOv3头部。

  3. 稳定性

    • 解耦头部的检测器在达到较高AP后,性能保持稳定,显示出较好的训练稳定性。

    • YOLOv3头部的检测器在训练过程中AP逐渐上升,但最终未能达到解耦头部的性能水平。

总结

解耦头部(Decoupled head)在训练过程中表现出更快的收敛速度和更高的最终性能,且在达到较高AP后保持稳定。相比之下,YOLOv3头部(YOLO head)在训练初期收敛较慢,最终性能也低于解耦头部。因此,解耦头部在目标检测任务中具有明显的优势。