1. 磐创AI首页
  2. Medium

YOLOX:最新YOLO算法背后的主要思想

在本文中,我们将对YOLO系列的新型高性能探测器YOLOX进行一些改进。

1_什么是YOLO?

首先,让我们简要解释一下YOLO算法的基本逻辑。你只看一次(YOLO)是一个实时的物体检测系统。YOLO算法与其他目标检测算法的主要区别在于,由于其速度快,能够实时检测目标,并能做出准确的预测。

计算机视觉中的目标检测算法基本上可以分为基于分类的目标检测算法和基于回归的目标检测算法。基于分类的算法在图像上搜索找到目标概率较高的感兴趣区域,然后用CNN对这些区域进行分类。它们通常运行缓慢,因为需要两个不同的操作。基于区域的卷积神经网络(RCNN)是最著名的基于分类的算法。即使尝试加速快速RCNN、快速RCNN和R-CNN,YOLO算法的运行速度仍然要快得多。

基于回归的算法不像其他算法那样在图像上搜索感兴趣的区域,而是一次通过神经网络传递整个图像,从而允许在测试时查看整个图像。它们一次检测对象类和边界框。这组中最著名的两个例子是YOLO(只看一次)系列算法和SSD(单镜头多盒探测器)。这些算法通常用于实时目标检测,因为它们的工作速度要快得多。

Yolo算法首先将图像划分为N×N个网格。每个网格检查其字段中是否存在搜索到的类的对象。如果存在对象,则此网格负责使用此网格中的边界框确定对象的位置。边框必须指定它检测到的对象的框中心、宽度、高度和类别。虽然这种情况看起来不错,但每个网格只能找到一个对象。但是,如果同一网格中有多个对象怎么办?YOLO解决了这个问题,Anchor Box开始与YOLOv2一起使用。

[-

-]

在YOLO可以在单个栅格中检测到多个对象之后,另一个问题是绘制不是对象的边界框或为对象绘制多个边界框。YOLO用非极大值抑制方法解决了这个问题。

[-

-]

2_YOLOX

虽然目前YOLOv5已经运行良好,但最近在目标检测方面的一些工作已经触发了这个新的YOLOX算法的开发。无锚点检测器、先进的标签分配策略和端到端检测器是近年来目标检测领域最重要的研究热点。这些新的焦点仍然没有集成到YOLO算法中,并且YOLOv4、YOLOv5仍然是基于锚点的检测器,并且使用手工制定的分配规则进行训练。这是YOLOX算法发展的一个重要原因。

2.1_简介、基线、数据增强

在YOLOX公告正文中,以YOLOv3和Darknet53为基线,这两款探测器目前仍是业内使用最广泛的探测器之一。

[-

-]

虽然以YOLOv3为基准,但YOLOX对列车部分进行了一些修改和改进。(您可以在YOLOX(https://arxiv.org/abs/2107.08430)))公布的纸条上查看列车区段变动详情https://arxiv.org/abs/2107.08430

数据增强部分结合YOLOX、RandomHorizontalFlip、ColorJitter和多尺度等技术。不再使用以前的YOLO版本中用于数据扩充的RandomResizedCrop。YOLOX不使用RandomResizedCrop,因为RandomResizedCrop策略被马赛克增强所抵消。

[-

-]

添加到YOLOX的另一种数据增强方法是MIXUP。虽然MIXUP最初是为图像分类而开发的一种数据增强方法,但现在它已经可以用于BoF的目标检测。作为重点,在混合和马赛克数据增强方法之后,摒弃了以前使用的ImageNet预训练方法,对以下所有模型进行了从头开始的训练。

2.2_解耦头部

分类与回归之间的冲突是目标检测中最基本的问题之一。我们已经说过,在目标检测中,基本上有两种基于分类和基于回归的方法,R-CNN和YOLO算法就是其中的例子。基于分类的算法分为两个阶段,第一阶段用于寻找感兴趣区域。基于回归的方法由单个阶段组成。分离分类和定位过程的解耦头部结构可以应用于一级(基于回归)和二级(基于分类)检测器。然而,到目前为止,YOLO版本仍然在骨干中使用耦合头部,即特征提取。研究表明,使用对偶头会损害性能。因此,在YOLOX中包含了分离分类和定位操作的解耦头部方法。这既提高了YOLOX的收敛速度,也是端到端所必需的,这是YOLOX的创新之一,我们将在稍后讨论这一点。

2.3_免锚

YOLOv4和YOLOv5具有基于锚点的结构,就像基线YOLOv3一样。虽然锚框允许我们在同一网格中查找多个对象,但它们也有一些缺点。首先,为了最优的目标检测,应该确定最优锚盒。为此,我们尝试在训练前通过聚类分析找到最优锚盒。这对我们来说是额外的工作量和时间的浪费。另一个问题是锚框结构机制增加了要对每个图像进行的预测的数量。这可能会在某些系统上造成延迟和速度减慢。近年来,人们已经确定无锚系统与基于锚的系统一样成功。无锚系统也取得了类似的成功,降低了设计参数,提高了速度。

[-

YOLO如何切换到Anchor Free?

与预期相反,在YOLO上切换到无锚设计很简单。它将每个位置的预测次数从3个减少到1个。同时,YOLOX为每个对象选择1个正样本,以避免干扰与基线YOLOv3的一致性。该正样本是对象的中心位置,甚至忽略了其他高速率估计。

-]

2.3_多个正面

如上所述,为了与YOLOv3的分配规则一致,没有锚定框的YOLOX为每个对象(对象的中心)选择一个正样本。如果它选择单个阳性样本,它会忽略其他预测,即使它们是高质量的。然而,优化这些高质量的预测也可能带来有益的梯度,这可能会缓解训练过程中正/负抽样的极端不平衡

2.4_Simota

近年来目标检测部分的另一个重点是高级标签分配。YOLO与他们的工作OTA一起触及了高级标签分配中的4个关键点:1)损失/质量感知2)中心优先级3)每个地面事实(简称为动态top-k)的积极锚点的动态数量4)全局视图

OTA是候选标签分配方法之一,它满足这四个基本要点。它将OTA标签分配视为最优传输(OT)问题。然而,可以看到,最优运输问题也可以用Sinkhorn-Knopp算法来解决。问题是需要增加25%的列车时间,这对300个纪元来说太多了。为此,本文试图通过简化Sinkhorn-Knopp算法SIMOTA来寻求近似解。(你可以在YOLOX(https://arxiv.org/abs/2107.08430)))公布的论文上查看SIMOTA的详细信息https://arxiv.org/abs/2107.08430

2.5_端到端YOLO

在YOLO中增加了2个卷积层。第一个是一对一的标签分配,第二个是停止梯度。这些确保了检测器是端到端的。但是,由于它们会导致性能和推理速度略有下降,因此不会将它们添加到YOLOX的最终版本中,而是以可选方式提供。

[-什么是端到端学习?

-]

2.6_其他主干

除了YOLOX Darknet-53之外,它还使用不同大小的主干执行特征提取。与其他YOLO版本一样,这些差异对于YOLOX也是不同的。您可以在下表中查看不同的YOLOX版本及其性能。(您可以在YOLOX(https://arxiv.org/abs/2107.08430)))公布的论文上查看YOLOX不同版本的详细信息https://arxiv.org/abs/2107.08430

2.7_结论

YOLOX是YOLO新推出的高性能目标检测算法。与以前的YOLO算法不同,它包括三个基本创新。这三种策略分别是去耦头策略、无锚点策略和高级标签分配策略。有了这些创新,YOLOX在速度和性能上都比它的对手提供了更好的性能。你可以在https://github.com/Megvii-BaseDetection/YOLOX上找到关于YOLOX的源代码和实现细节https://github.com/Megvii-BaseDetection/YOLOX

YOLOX支持以下部署。

1)C++和Python语言中的MegEngine;2)ONNX导出和ONNXRunme3)C++和Python语言中的TensorRT;4)C++和Java语言中的ncnn;5)C++和Python中的OpenVINO

注意事项

参考文献

原创文章,作者:fendouai,如若转载,请注明出处:https://panchuang.net/2021/08/10/yolox%ef%bc%9a%e6%9c%80%e6%96%b0yolo%e7%ae%97%e6%b3%95%e8%83%8c%e5%90%8e%e7%9a%84%e4%b8%bb%e8%a6%81%e6%80%9d%e6%83%b3/

联系我们

400-800-8888

在线咨询:点击这里给我发消息

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息