YOLO系列概述

这篇文章是对YOLO系列产生时间线以及不同版本主要改进的概要性梳理,原论文参见[2304.00501] A Comprehensive Review of YOLO: From YOLOv1 and Beyond (arxiv.org)

注:文中缺乏的图表等信息由于作者精力有限暂未插入,可以参看原论文。 

背景

实时目标检测被官方应用于自动驾驶、机器人、AR、视频监控video survelliance等场景中。YOLO框架在事实目标检测框架中很出色,因为它很好的平衡了速度和检测精度之间的关系。目前YOLO系列已经有YOLOv1-YOLOv8八个版本,本文致力于阐述YOLO框架的发展和每一个版本之间的主要不同和提高。这些提升包括网络结构设计、损失函数变化、锚框的采用和输入处理的规模。

YOLO模型被广泛应用于医学、安全、交通等领域。

不同的数据集上计算AP

AP 准确率和召回率之间的平衡、处理多个物体种类、Intersection over Union(IoU)交并比

YOLOv1&v2使用PASCAL VOC 2007数据集,YOLOv3使用Microsoft COCO(Common Objects in Context)数据集,它们计算AP的方法存在一些不同。

VOC数据集包括20中物体类别,AP的计算方法是:对于每个类别,通过改变模型预测的置信度阈值来计算精度-召回曲线。使用插值的 11 点采样计算每个类别的平均精度 (AP)。通过对所有 20 个类别的 AP 取平均值来计算最终平均精度 (AP)。

Microsoft COCO 数据集 该数据集包括 80 个对象类别,并使用更复杂的方法计算 AP。它使用 101 点插值,即在从 0 到 1 的 101 个召回阈值中计算精度,步长为 0.01。此外,AP 是通过对多个 IoU 值进行平均而不是仅使用一个来获得的,除了一个称为 AP_50 的常见 AP 指标,它是单个 IoU 阈值 0.5 的 AP。在 COCO 中计算 AP 的步骤如下:

  1. 对于每个类别,通过改变模型的置信度阈值来计算精度-召回曲线。

  2. 使用 101 个召回阈值计算每个类别的平均精度 (AP)。

  3. 在不同的 Intersection over Union (IoU) 阈值上计算 AP,通常从 0.5 到 0.95,步长为 0.05。更高的 IoU 阈值需要更准确的预测才能被视为真正的正例。

  4. 对于每个 IoU 阈值,取所有 80 个类别的 AP 的平均值。

  5. 最后,通过对每个 IoU 阈值计算的 AP 值取平均值来计算总体 AP。

由于 AP 计算的差异,直接比较两个数据集中目标检测模型的性能很困难。当前的标准使用 COCO AP,因为它更细粒度地评估了模型在不同 IoU 上的表现

非极大抑制Non-Maximum Suppression(NMS)

增加重叠准确率,同一个物体周围多个框时,只保留最准确的那些。

YOLO概述——you only look once

第一个实时的端到端的目标检测方法,只需要一个pass就可以完成目标检测任务。不同于之前的需要一个滑动窗口附加一个分类器需要对一张图片跑成千上百次的方法,或者更先进一点的,将任务分成两个阶段,第一个阶段划分可能有物体的proposal,第二个阶段在proposals上跑一个分类器。YOLO使用了一个只需要回归去与猜测目标输出的方法,不同于Fast R-CNN使用两个单独的输出,一个可能性分类器和一个盒子坐标的回归a regression for the boxes coordinates.

YOLOv1

YOLOv1能够同时检测出所有的bounding boxes。它将输入分成SxS的网格然后对同一个类型预测B个bounding boxes,还有他对于每个网格元素是属于C个不同类型的可能性。并且每个bounding box预测包含五个值:Pc、bx、by、bh、bw,其中Pc反映了这个box包含物体的置信度以及这个box位置的准确度,bx和by反映了这个box中心相对于网格核心的距离,bh和bw表示box相对于正负图片的宽高。YOLO的输出是一个S*S*(B*5+C)的张量,通常加NMS来过滤掉重复目标。

YOLOv1实际在PASCAL VOC数据集上是7*7*(2*5+20)输出。AP达到63.4

YOLOv1的结构

24个卷积层+两个全连接层来预测bounding box的坐标和可能性。所有的层都是用leaky rectified linear unit activations (leaky ReLU激活函数),除了最后一层使用一个线性激活函数。YOLO使用1x1卷积层减少特征并且让相关参数数量尽可能少。表一描述了YOLOv1的结构,作者还介绍了一个更小型的模型叫做Fast YOLO只包含九个卷积层。

YOLOv1的训练

作者使用ImageNet数据集在224 x 224的分辨率下预训练了YOLO的前20层。然后,他们添加了最后四层,这些层的权重是随机初始化的,并使用PASCAL VOC 2007和VOC 2012数据集在448 x 448的分辨率下对模型进行了微调,以增加更多细节以实现更准确的目标检测。作者使用了最多不超过输入图像大小的20%的随机缩放和平移,以及在HSV颜色空间中具有1.5倍上限因子的随机曝光和饱和度,用于数据增强。

损失函数

优缺点

比现有的实时目标检测器更快,但比Faster-CNN错误更多。

  • 只能检测一个格核里最多两个物体(限制了它检测临近物体的能力)

  • 训练集中没有见过的层叠样式预测效果不好

  • 因为降采样层,它学习到的是粗粒度特征。

YOLOv2: Better, Faster, and Stronger

比YOLOv1更快,能够检测9000种不同的类别。

YOLOv2的主要改进

  1. 批标准化(Batch normalization)。在所有卷积层上使用批标准化提高了收敛性,并作为正则化器减少过拟合。

  2. 高分辨率分类器。与YOLOv1类似,他们使用ImageNet在224×224的分辨率上预训练了模型。然而,这次他们在448×448的分辨率上对模型进行了微调,提高了对更高分辨率输入的网络性能。

  3. 完全卷积。他们去除了密集层,并使用了完全卷积的架构。

  4. 使用锚框来预测边界框。他们使用一组预定义形状的先验框或锚框,用于匹配对象的典型形状,如图6所示。为每个网格单元定义了多个锚框,并且系统预测每个锚框的坐标和类别。网络输出的大小与每个网格单元的锚框数量成比例。

  5. 尺寸聚类。选择好的先验框有助于网络学习预测更准确的边界框。作者对训练边界框运行了k-means聚类,以找到好的先验框。他们选择了五个先验框,提供了在召回率和模型复杂性之间的良好平衡。

  6. 直接位置预测。与其他预测偏移量的方法不同[45],YOLOv2采用了相同的思路,预测相对于网格单元的位置坐标。网络为每个单元预测了五个边界框,每个边界框有五个值tx、ty、tw、th和to,其中to等价于YOLOv1中的Pc,最终的边界框坐标如图7所示获取。

  7. 细粒度特征。与YOLOv1相比,YOLOv2去除了一个池化层,以获得一个尺寸为13×13的输出特征图或网格,适用于416×416的输入图像。YOLOv2还使用了一个透传层passthrough layer,将26×26×512的特征图重新组织,将相邻特征堆叠到不同的通道中,而不是通过空间下采样丢失它们。这样生成了尺寸为13×13×2048的特征图,与低分辨率的13×13×1024特征图在通道维度上连接起来,得到尺寸为13×13×3072的特征图。具体的架构细节可参考表2。

  8. 多尺度训练。由于YOLOv2不使用全连接层,输入可以是不同的尺寸。为了使YOLOv2能够适应不同的输入尺寸,作者随机训练模型,并在每十个批次中改变输入尺寸,从320×320到608×608。

在PASCAL VOC2007上达到了78.6%的准确率。

YOLOv2的结构

主干使用Darknet-19网络,包含19个卷积层和五个最大池化层。

与YOLOv1的架构相似,YOLOv2在3×3卷积之间使用1×1卷积来减少参数数量。此外,正如前面提到的,他们使用批标准化来进行正则化和帮助收敛。

表2展示了完整的Darknet-19主干网络和目标检测头部。当使用PASCAL VOC数据集时,YOLOv2预测五个边界框,每个边界框有五个值和20个类别。

目标分类头部在YOLOv2中使用单个卷积层替换网络的最后四个卷积层,该卷积层具有1000个滤波器。接下来是一个全局平均池化层,它计算每个特征图在其空间维度上的平均值。最后,对全局平均池化层的输出应用Softmax激活函数,以获得对1000个类别的概率分布。这个分类头部负责在YOLOv2中预测目标的类别。

YOLO9000是YOLOv2的加强版本

在YOLOv2的论文中,作者提出了一种联合训练分类和检测的方法。他们利用来自COCO数据集的检测标签数据来学习边界框的坐标,同时利用来自ImageNet的分类数据来增加模型可以检测的类别数量。

在训练过程中,作者将这两个数据集进行组合,这样当使用一个检测训练图像时,会将误差反向传播到检测网络,而当使用一个分类训练图像时,会将误差反向传播到模型的分类部分。通过这种联合训练的方式,模型能够同时学习检测和分类任务,并且能够在单个模型中进行综合的目标识别。

这种联合训练的结果是,YOLO模型能够检测超过9000个类别,因此被称为YOLO9000。通过结合两个数据集的信息,模型具备了更广泛的目标识别能力,可以同时进行物体检测和分类。

YOLOv3

主要改进

  1. 边界框预测。与YOLOv2类似,网络对每个边界框预测四个坐标:tx、ty、tw和th。然而,与YOLOv2不同的是,YOLOv3使用逻辑回归为每个边界框预测一个目标得分。这个得分对于与真实边界框有最高重叠的锚框为1,对于其余的锚框为0。与Faster R-CNN不同,YOLOv3将每个真实目标对象只分配给一个锚框。此外,如果没有将锚框分配给某个目标对象,则只会产生分类损失,而不会产生定位损失或置信度损失。

  2. 类别预测:YOLOv3采用了二元交叉熵作为分类损失函数,而不是使用softmax。这样做的好处是可以训练独立的逻辑回归分类器,将问题视为多标签分类。这意味着一个边界框可以被分配多个标签,适用于一些复杂的数据集,其中标签可能存在重叠。例如,同一个物体可以同时被标记为"人"和"男人"。

  3. 新的主干网络:YOLOv3采用了一个更大的特征提取器,由53个卷积层和残差连接组成。这个主干网络的详细结构在论文的第6.1节中有更详细的描述。

  4. 空间金字塔池化(SPP):虽然论文中没有明确提到,但作者在主干网络中添加了一个修改过的空间金字塔池化块。这个块将多个最大池化的输出进行级联,每个输出都具有不同的核大小(例如,k = 1、5、9、13),从而扩大了感受野。这个版本被称为YOLOv3-spp,并且在性能上表现最好,将AP50提高了2.7%。

  5. 多尺度预测:与特征金字塔网络类似,YOLOv3在三个不同的尺度上预测三个边界框。这样可以更好地捕捉不同尺度下的目标信息。多尺度预测的机制在论文的第6.2节中有更详细的描述。

  6. 边界框先验:与YOLOv2类似,YOLOv3使用k-means算法确定锚框的边界框先验。不同之处在于,YOLOv2每个格子使用了五个先验框,而YOLOv3在三个不同尺度上使用了三个先验框。这样可以更好地适应不同尺度的目标。

YOLOv3结构

主干部分使用Darknet-53结构,它所有的最大池化层替换为了卷积步长并且加入残差结构。总共包含53个卷积层。

YOLOv3多尺度预测

除了更大的架构之外,YOLOv3的一个重要特性是多尺度预测,即在多个网格尺度上进行预测。这有助于获得更精细的边界框,并显著改善了对小物体的预测,这是之前版本的YOLO的主要弱点之一。

图9所示的多尺度检测架构的工作方式如下:第一个标记为y1的输出等同于YOLOv2的输出,其中一个13x13的网格定义了输出。第二个输出y2由Darknet-53的(Res * 4)输出和(Res * 8)输出进行串联组成。这些特征图具有不同的尺寸,即13x13和26x26,因此在串联之前需要进行上采样操作。最后,使用上采样操作,第三个输出y3将26x26的特征图与52x52的特征图进行串联。

对于包含80个类别的COCO数据集,每个尺度提供一个形状为N x N x [3 x (4+1+80)]的输出张量,其中N x N是特征图(或网格单元)的大小,3表示每个单元格的边界框数量,4+1包括四个坐标和目标得分。

性能

Microsoft COCO

平均精度36.2% AP_5 60.6% 20FPS

主干、颈部、头

在这个时候,目标检测器的架构开始被描述为三个部分:主干网络(backbone)、中间层(neck)和头部(head)。图10展示了一个高级的主干网络、中间层和头部的示意图。

主干网络负责从输入图像中提取有用的特征。通常它是一个在大规模图像分类任务(如ImageNet)上进行训练的卷积神经网络(CNN)。主干网络在不同尺度上捕捉到层次化的特征,较低层次的特征(如边缘和纹理)在较早的层中提取,而较高层次的特征(如物体部分和语义信息)在更深的层中提取。

中间层是连接主干网络和头部的组件。它聚合和优化主干网络提取的特征,通常着重于增强不同尺度上的空间和语义信息。中间层可以包括额外的卷积层、特征金字塔网络(FPN)[49]或其他机制,以改进特征的表示。

头部是目标检测器的最后一个组件,它根据主干网络和中间层提供的特征进行预测。它通常由一个或多个任务特定的子网络组成,执行分类、定位,以及最近增加的实例分割和姿态估计任务。头部处理中间层提供的特征,为每个候选物体生成预测。最后,通过后处理步骤(如非极大值抑制,NMS),过滤掉重叠的预测,并仅保留最有信心的检测结果。

在接下来的YOLO模型中,我们将使用主干网络、中间层和头部来描述它们的架构。

YOLOv4

另一个团队,通过大量实验,提升性能

主要更新

Bag-of-freebies:BoF增加了训练时间,但不增加推理时间,并且能让模型泛化性能和鲁棒性更好。

Bag-of-specials:BoS只增加少量推理成本但能显著提高目标检测精度的插件模块和后处理方法。

  • 增强集成了Bag-of-Specials(BoS)的架构。作者尝试了多种主干网络的架构,例如ResNeXt50 、EfficientNet-B3 和Darknet-53。表现最好的架构是对Darknet-53进行了修改,引入了跨阶段部分连接(CSPNet)和Mish激活函数作为主干网络(参见图11)。在中间层方面,他们使用了YOLOv3-spp中改进的空间金字塔池化(SPP)和YOLOv3中的多尺度预测,但是用修改后的路径聚合网络(PANet)代替了FPN,并采用了修改后的空间注意力模块(SAM)。最后,在检测头部方面,他们使用了与YOLOv3相同的锚点。因此,该模型被称为CSPDarknet53-PANet-SPP。跨阶段部分连接(CSP)的添加有助于减少模型的计算量,同时保持相同的准确性。SPP块,如YOLOv3-spp中的一样,增加了感受野而不影响推理速度。修改后的PANet将特征连接而不是像原始PANet论文中那样进行相加。

  • 结合自由模块(BoF)进行提高训练方法。除了常规的数据增强方法,如随机亮度、对比度、缩放、裁剪、翻转和旋转,作者还实现了马赛克增强方法,将四个图像组合成一个图像,可以检测到物体在其常规上下文之外的情况,同时减少了批归一化所需的大批量大小。为了正则化,他们使用了DropBlock 作为卷积神经网络的Dropout 替代方法,以及类标签平滑化。对于检测器,他们添加了CIoU损失和交叉小批量归一化(CmBN),以从整个批次而不是单个小批次收集统计信息,这与常规批归一化[69]不同。

  • 自对抗训练(SAT)。为了使模型对扰动更加稳健,对输入图像进行对抗攻击,创建一个假象,使得真实对象不在图像中,但保持原始标签以便检测正确的对象。

  • 用遗传算法进行超参数优化。为了找到用于训练的最佳超参数,他们在前10%的周期上使用遗传算法,并使用余弦退火调度器[70]在训练过程中改变学习率。它开始缓慢降低学习率,然后在训练过程中快速降低一半,最后略微降低。

Table3展示了随后为主干和检测器选用的BoFs和BoS。

YOLOv4结果

MS COCO dataset test-dev 2017, AP 43.5% AP_{50} 65.7% 多余50的FPS NVIDIA V100

YOLOv5

YOLOv4分布几个月之后,没有论文,源码公开Ultralytics,使用了喝多v4使用的改进,以及一些Pytorch的提升而不是Darknet。目前有5个版本YOLOv5n (nano), YOLOv5s (small), YOLOv5m (medium), YOLOv5l (large), and YOLOv5x (extra large).

YOLOv5的性能

YOLOv5x MS COCO dataset test-dev 2017, AP 50.7% 200的FPS NVIDIA V100

YOLOv5 AP 55.8%

Scaled-YOLOv4

改用Pytorch

在YOLOv4发布一年之后,同样的作者在CVPR 2021中提出了Scaled-YOLOv4。与YOLOv4不同,Scaled YOLOv4是使用PyTorch而不是Darknet开发的。其主要创新点是引入了上尺度scaling-up和下尺度scaling-down技术。上尺度意味着生成一个在准确性上提高但速度较低的模型;另一方面,下尺度意味着生成一个在速度上提高但准确性牺牲的模型。此外,下尺度模型需要更少的计算资源,可以在嵌入式系统上运行。

下尺度架构被称为YOLOv4-tiny,它专为低端GPU设计,可以在Jetson TX2上以46 FPS的速度运行,或者在RTX2080Ti上以440 FPS的速度运行,在MS COCO数据集上达到22%的AP。

上尺度模型架构被称为YOLOv4-large,包括三个不同的尺寸P5、P6和P7。这个架构专为云GPU设计,实现了最先进的性能,超过了所有先前的模型,在MS COCO数据集上达到了56%的AP。

YOLOR

YOLOR 是由YOLOv4的同一研究团队在2021年5月在ArXiv上发表的论文。它代表着You Only Learn One Representation(你只学习一种表示)。在这篇论文中,作者采用了一种不同的方法,他们开发了一种多任务学习方法,旨在通过学习通用表示并使用子网络创建任务特定表示来为各种任务(例如分类、检测、姿态估计)创建单一模型。由于传统的联合学习方法常常导致次优的特征生成,YOLOR旨在通过将神经网络的隐式知识编码到多个任务中应用,类似于人类如何利用过去的经验来解决新问题。结果表明,引入隐式知识到神经网络中对所有任务都有益处。

在MS COCO数据集的test-dev 2017上评估,YOLOR在NVIDIA V100上以30 FPS的速度达到了55.4%的AP和73.3%的AP50。

YOLOX

YOLOX 是由Megvii Technology的研究团队于2021年7月在ArXiv上发表的论文。它基于PyTorch开发,并以Ultralytics的YOLOV3为起点,进行了五个主要改进:无锚点架构、多个正样本、解耦的检测头部、高级标签分配和强化增强。它在2021年取得了速度和准确性之间的最佳平衡,并在Tesla V100上以68.9%的FPS实现了50.1%的AP。接下来,我们将描述YOLOX相对于YOLOv3的五个主要改变:

  1. 无锚点架构:自YOLOv2以来,所有后续的YOLO版本都是基于锚点的检测器。受到无锚点最先进的目标检测器(如CornerNet ,CenterNet和FCOS )的启发,YOLOX回归到了无锚点架构,简化了训练和解码过程。相对于YOLOv3基准,无锚点架构提高了0.9个AP。

  2. 多个正样本:为了弥补缺少锚点带来的不平衡问题,作者使用中心采样,将中心3x3区域作为正样本。这种方法使AP提高了2.1个点。

  3. 解耦的检测头部:在[82, 83]中,研究表明分类置信度和定位准确性之间可能存在错位。因此,YOLOX将这两个任务分别分配给两个检测头部(如图12所示),一个用于分类任务,另一个用于回归任务,提高了1.1个AP,并加快了模型的收敛速度。

  4. 高级标签分配:在[84]中,研究表明当多个目标的边界框重叠时,地面真值标签分配可能存在歧义,并将分配过程形式化为最优传输(OT)问题。受到这项工作的启发,YOLOX提出了一个简化版本称为simOTA。这一改变使AP提高了2.3个点。

  5. 强化增强:YOLOX使用MixUP 和Mosaic增强。作者发现在使用这些增强方法后,ImageNet预训练不再有益。强化增强使AP增加了2.4个点。

YOLOv6

2022Meituan Vision AI Department

YOLOv6 [86]是由美团点评旗下的美团视觉AI部门于2022年9月在ArXiv上发表的论文。类似于YOLOv4和YOLOv5,它为工业应用提供了不同规模的各种模型。YOLOv6基于锚点方法的趋势[78, 81],采用了无锚点检测器。该模型的主要创新如下所述:

  1. 基于RepVGG [87]的新骨干网络,称为EfficientRep,它比之前的YOLO骨干网络具有更高的并行性。对于中间特征层,他们使用了PAN [62]结合RepBlocks [87]或CSPStackRep[61]块来构建更大模型。并且受到YOLOX的启发,他们开发了一个高效的解耦检测头部。

  2. 使用TOOD [88]中引入的任务对齐学习方法进行标签分配

  3. 新的分类和回归损失。他们使用了分类的VariFocal损失函数[89]以及SIoU [90]/GIoU [91]回归损失函数。

  4. 回归和分类任务的自蒸馏策略self-distillation。

  5. 检测的量化方案,使用RepOptimizer[92]和通道级蒸馏 [93],有助于实现更快的检测器。

YOLOv6性能表现

MS COCO dataset test-dev 2017

YOLOv6-L AP 52.5% AP_{50} 70% 大约50 FPS NVIDIA Tesla T4

YOLOv7

2022年发布,和YOLOv4和YOLOR是一个作者团队。

YOLOv7 [94]是由YOLOv4和YOLOR的作者于2022年7月在ArXiv上发表的论文。它在5FPS到160FPS的范围内,超越了所有已知的目标检测器在速度和准确性上的表现。与YOLOv4类似,YOLOv7只使用了MS COCO数据集进行训练,没有使用预训练的骨干网络。YOLOv7提出了一些架构变化和一系列的"bag-of-freebies",这些变化提高了准确性,同时不影响推理速度,只增加了训练时间。

YOLOv7的架构变化包括:

  • 扩展的高效层聚合网络(E-ELAN)。E-ELAN是一种策略,通过控制最短的最长梯度路径,使深层模型能够更高效地学习和收敛。YOLOv7提出了适用于具有无限叠加计算块的模型的E-ELAN。E-ELAN通过洗牌shulffiing和合并基数merging cardinality来结合不同组的特征,增强网络的学习能力,而不破坏原始的梯度路径。

  • 基于连接的模型的模型缩放。通过调整一些模型属性,缩放可以生成不同大小的模型。YOLOv7的架构是基于连接的架构,在其中标准的缩放技术(如深度缩放)会导致过渡层的输入通道和输出通道之间的比例变化,从而减少模型的硬件使用。YOLOv7提出了一种新的缩放策略,即通过相同因子缩放块的深度和宽度,以保持模型的最佳结构。

在YOLOv7中使用的"bag-of-freebies"包括:

  • 计划重新参数化的卷积。与YOLOv6类似,YOLOv7的架构也受到了重新参数化卷积(RepConv)[87]的启发。然而,他们发现RepConv中的身份连接破坏了ResNet [53]中的残差和DenseNet [96]中的连接。因此,他们去除了身份连接,称之为RepConvN。

  • 为辅助头部使用粗略标签分配,为主要头部使用精细标签分配。主要头部负责最终输出,而辅助头部用于辅助训练。

  • 在卷积-批归一化-激活中使用批归一化。这将批归一化的均值和方差集成到推理阶段的卷积层的偏置和权重中。

  • 受YOLOR [77]启发的隐式知识。

  • 在最终推理模型中使用指数移动平均。

与YOLOv4和YOLOR的不同

与YOLOv4相比,YOLOv7在同时提高平均精度(AP)1.5%的情况下,参数减少了75%,计算量减少了36%。

与YOLOv4-tiny相比,YOLOv7-tiny在保持相同AP的同时,参数减少了39%,计算量减少了49%。

最后,与YOLOR相比,YOLOv7的参数数量减少了43%,计算量减少了15%,同时AP略微增加了0.4%。

YOLOv7的性能表现

MS COCO dataset test-dev 2017

YOLOv7-E6 AP 55.9% AP_{50} 73.5% 大约50 FPS NVIDIA V100 输入1280px

DAMO-YOLO

DAMO-YOLO [97]是由阿里巴巴集团于2022年11月在ArXiv上发表的论文。受到当前技术的启发,DAMO-YOLO包括以下内容:

  1. 神经架构搜索(NAS)。他们使用阿里巴巴开发的一种名为MAE-NAS [98]的方法,自动找到高效的架构。

  2. 大型中间层(neck)。受到GiraffeDet [99]、CSPNet [61]和ELAN [95]的启发,作者设计了一种能够实时工作的中间层,称为Efficient-RepGFPN。

  3. 小型输出层(head)。作者发现大型中间层和小型输出层可以获得更好的性能,他们只保留了一个用于分类和一个用于回归的线性层。他们将这种方法称为ZeroHead。

  4. AlignedOTA标签分配。动态标签分配方法,如OTA[84]和TOOD[88],由于相对于静态方法的显著改进而受到关注。然而,分类和回归之间的不对齐仍然是一个问题,部分原因是由于分类和回归损失之间的不平衡。为了解决这个问题,他们的AlignOTA方法将焦点损失[focal loss] [75]引入到分类成本中,并使用预测框和真实框的IoU作为软标签,使得可以为每个目标选择对齐的样本,并从整体上解决问题。

  5. 知识蒸馏。他们提出的策略包括两个阶段:第一阶段,教师指导学生;第二阶段,学生独立进行微调。此外,他们在蒸馏方法中加入了两个增强:Align模块,将学生特征调整为与教师相同的分辨率;通道动态温度,将教师和学生特征归一化,减小实际值差异的影响。

作者生成了名为DAMO-YOLO-Tiny/Small/Medium的多个缩放模型,其中最佳模型在NVIDIA V100上以233 FPS的速度实现了50.0%的AP。

YOLOv8

YOLOv8 [100]是由Ultralytics在2023年1月发布的,Ultralytics是开发YOLOv5的公司。由于在撰写此文时尚无关于YOLOv8的论文,我们需要对其与其他YOLO版本相比的架构决策进行了解。遵循当前的趋势,YOLOv8是无锚点的,减少了盒子预测的数量并加快了非极大值抑制(NMS)的速度。此外,YOLOv8在训练过程中使用了马赛克数据增强;然而,研究发现如果在整个训练过程中都使用这种增强会产生负面影响,因此在最后十个epochs中禁用了该增强。

YOLOv8可以通过命令行界面(CLI)运行,也可以作为PIP包进行安装。此外,它还提供了多种用于标注、训练和部署的集成功能。

YOLOv8提供了五个缩放版本:YOLOv8n(nano)、YOLOv8s(small)、YOLOv8m(medium)、YOLOv8l(large)和YOLOv8x(extra large)。

YOLOv8性能

MS COCO dataset test-dev 2017

YOLOv8x AP 53.9% 大约280 FPS NVIDIA A100和TensorRT 输入640px

PP-YOLO, PP-YOLOv2 and PP-YOLOE

PP-YOLO模型与我们描述的YOLO模型并行发展。然而,由于它们始于YOLOv3并逐步改进了之前的PP-YOLO版本,我们决定将它们归为一个单独的部分。尽管如此,这些模型在YOLO的演进中起到了重要作用。PP-YOLO [76]与YOLOv4和YOLOv5类似,基于YOLOv3。它由百度公司的研究人员于2020年7月在ArXiv上发表。作者使用了百度的深度学习平台PaddlePaddle [101],因此得名PP。遵循从YOLOv4开始的趋势,PP-YOLO添加了十种已有的技巧来提高检测器的准确性,同时保持速度不变。根据作者的说法,该论文的目的不是介绍一种新的目标检测器,而是展示如何逐步构建一个更好的检测器。PP-YOLO使用的大多数技巧与YOLOv4使用的技巧不同,并且重叠的技巧使用了不同的实现方式。PP-YOLO相对于YOLOv3的改变包括:

  1. 使用ResNet50-vd作为主干网络,替换了DarkNet-53主干网络,并在最后阶段使用了可变形卷积[102]扩展的架构,还使用了一个经过蒸馏的预训练模型,该模型在ImageNet上具有更高的分类准确性。这个架构被称为ResNet5-vd-dcn。

  2. 增加了批量大小以提高训练稳定性,批量大小从64增加到192,并更新了训练计划和学习率。

  3. 保持训练参数的移动平均值,并在推理时使用移动平均值代替最终训练值。

  4. DropBlock仅应用于FPN。

  5. 在边界框回归中添加了IoU损失,与L1损失一起使用。

  6. 添加了一个IoU预测分支来测量定位准确性,同时使用了IoU感知损失。在推理过程中,YOLOv3将分类概率和目标性得分相乘以计算最终检测结果,PP-YOLO还将预测的IoU乘以这个结果以考虑定位准确性。

  7. 使用类似于YOLOv4的Grid Sensitive方法来改进在网格边界处的边界框中心预测。

  8. 使用Matrix NMS [103],可以并行运行,速度比传统的NMS更快。

  9. 在FPN的1×1卷积和检测头的第一层卷积中使用CoordConv [104]。CoordConv允许网络学习平移不变性,从而改善检测的定位。

  10. 仅在顶部特征图上使用空间金字塔池化,以增加主干网络的感受野。

PP-YOLO的增强和预处理

PP-YOLO使用了以下增强和预处理技术:

  1. Mixup训练[85]:使用从Beta(α, α)分布中采样的权重进行Mixup训练,其中α = 1.5和α = 1.5。

  2. 随机颜色扭曲:对输入图像进行随机颜色扭曲,以增加模型对颜色变化的鲁棒性。

  3. 随机扩展:对图像进行随机扩展,通过在边界周围填充像素来增加输入图像的大小。

  4. 随机裁剪和随机翻转:以0.5的概率对图像进行随机裁剪和随机翻转,增加数据的多样性。

  5. RGB通道的z-score标准化:对图像进行RGB通道的z-score标准化,使用均值为[0.485, 0.456, 0.406],标准差为[0.229, 0.224, 0.225]。

  6. 均匀抽样的多个图像尺寸:从[320, 352, 384, 416, 448, 480, 512, 544, 576, 608]中均匀地抽样多个图像尺寸,以增加对不同尺寸目标的检测能力。

PP-YOLO的结果

MS COCO dataset test-dev 2017

PP-YOLO AP 45.9% AP_{50} 65.2% 73 FPS NVIDIA V100 输入640px

PP-YOLOv2

PP-YOLOv2 [105]是在2021年4月在ArXiv上发表的,它在PP-YOLO的基础上添加了四个改进,将性能从45.9% AP提升到了49.5% AP,在NVIDIA V100上的帧率为69 FPS。PP-YOLOv2相对于PP-YOLO的改变如下:

  1. 主干网络从ResNet50改为ResNet101:PP-YOLOv2将主干网络从ResNet50升级为了更深的ResNet101,以提升特征提取能力。

  2. 使用路径聚合网络(Path Aggregation Network,PAN)而不是类似于YOLOv4的特征金字塔网络(Feature Pyramid Network,FPN):PP-YOLOv2采用了路径聚合网络来进行特征融合和上采样,以提高目标检测的准确性。

  3. 使用Mish激活函数:与YOLOv4和YOLOv5不同,PP-YOLOv2仅在检测部分使用Mish激活函数,保持主干网络部分使用ReLU激活函数不变。Mish激活函数可以提供更平滑的非线性特性,有助于改善检测的表现。

  4. 较大的输入尺寸有助于提高小目标的性能。他们将最大输入尺寸从608扩展到768,并将每个GPU的批量大小从24张图像减少到12张图像。输入尺寸均匀地选择自[320、352、384、416、448、480、512、544、576、608、640、672、704、736、768]。

  5. 修改的IoU感知分支:在PP-YOLOv2中,修改了IoU感知损失的计算方式。与原始PP-YOLO使用软权重格式不同,采用了软标签格式。这种修改可能旨在在训练和推理过程中提高目标定位的准确性。

PP-YOLOE

PP-YOLOE [106]是在2022年3月在ArXiv上发表的,它在PP-YOLOv2的基础上进行了改进,达到了在NVIDIA V100上的51.4% AP和78.1 FPS的性能。PP-YOLOE相对于PP-YOLOv2的主要改变如下:

  1. 无锚点(Anchor-free):PP-YOLOE采用了无锚点的架构,这是受到[81, 80, 79, 78]等相关工作的影响,追随当时的趋势。

  2. 新的主干网络和特征融合(neck):受到TreeNet [107]的启发,作者修改了主干网络和特征融合部分的架构,采用了结合残差连接和稠密连接的RepResBlocks。

  3. 任务对齐学习(Task Alignment Learning,TAL):YOLOX首次提出了任务不对齐的问题,即分类置信度和位置准确性在某些情况下不一致。为了减少这个问题,PP-YOLOE实现了TAL,该方法是根据TOOD [88]提出的,包括动态标签分配和任务对齐损失。

  4. 高效的任务对齐头部(Efficient Task-aligned Head,ET-head):与YOLOX不同,YOLOE使用了基于TOOD的单个头部,而不是将分类和位置头部解耦,以提高速度和准确性。

  5. 变焦损失(Varifocal Loss,VFL)和分布焦点损失(Distribution Focal Loss,DFL):VFL [89]使用目标分数(target score)对正样本的损失进行加权,对具有较高IoU的样本给予更高的权重,从而在训练过程中优先考虑高质量样本。类似地,两者都使用基于IoU的分类分数(IACS)作为目标,允许联合学习分类和定位质量,实现训练和推理之间的一致性。另外,DFL [108]将Focal Loss从离散标签扩展到连续标签,成功地优化了结合质量估计和类别预测的改进表示,允许准确地描述真实数据中的灵活分布,消除了不一致性的风险。

与之前的YOLO版本类似,作者通过调整主干网络和特征融合的宽度和深度生成了多个不同尺度的模型。这些模型被称为PP-YOLOE-s(小型)、PP-YOLOE-m(中型)、PP-YOLOE-l(大型)和PP-YOLOE-x(超大型)。

比较总结

这篇论文研究了15个YOLO版本,从最初的YOLO模型到最新的YOLOv8。表格4提供了所讨论的YOLO版本的概述。从这个表格中,我们可以识别出几个关键模式:

• 锚点(Anchors):最初的YOLO模型相对简单,并没有使用锚点,而当时最先进的模型则采用了带有锚点的两阶段检测器。YOLOv2引入了锚点,提高了边界框预测的准确性。这一趋势持续了五年,直到YOLOX引入了一种无锚点的方法,取得了最先进的结果。此后,后续的YOLO版本都放弃了使用锚点。

• 框架(Framework):最初,YOLO是使用Darknet框架开发的,随后的版本也都采用了相同的框架。然而,当Ultralytics将YOLOv3移植到PyTorch后,其余的YOLO版本也开始使用PyTorch进行开发,从而带来了大量的改进。另一个用于YOLO的深度学习语言是PaddlePaddle,这是百度最初开发的开源框架。

• 主干网络(Backbone):YOLO模型的主干网络架构随着时间的推移发生了重大变化。最初的Darknet架构由简单的卷积和最大池化层组成,后来的模型中引入了交叉阶段部分连接(CSP)(YOLOv4)、重参数化(YOLOv6和YOLOv7)以及神经架构搜索(DAMO-YOLO)。

• 性能(Performance):随着时间的推移,YOLO模型的性能有所提升。然而,值得注意的是,这些模型往往更注重在速度和准确性之间取得平衡,而不仅仅追求准确性。这种权衡是YOLO框架的一个重要方面,使其能够在各种应用中进行实时的目标检测。

速度和准确性之间的权衡

YOLO系列目标检测模型一直专注于在速度和准确性之间取得平衡,旨在提供实时性能的同时不牺牲检测结果的质量。随着YOLO框架在不同版本中的演变,这种权衡成为一个不断出现的主题,每个版本都试图以不同的方式优化这些竞争目标。在最初的YOLO模型中,主要关注的是实现高速目标检测。该模型使用单个卷积神经网络(CNN)直接从输入图像中预测目标的位置和类别,实现了实时处理。然而,这种对速度的强调导致了准确性的折衷,特别是在处理小目标或具有重叠边界框的目标时。

随后的YOLO版本引入了改进和增强措施,以解决这些限制,同时保持框架的实时能力。例如,YOLOv2(YOLO9000)引入了锚框和传递层(passthrough layers)来改善目标的定位,从而提高了准确性。此外,YOLOv3通过采用多尺度特征提取架构,实现了更好的跨不同尺度的目标检测。

随着YOLO框架的发展,速度和准确性之间的权衡变得更加微妙。YOLOv4和YOLOv5等模型引入了创新,例如新的网络主干、改进的数据增强技术和优化的训练策略。这些发展使得准确性显著提高,同时并没有极大地影响模型的实时性能。

从Scaled YOLOv4开始,所有官方的YOLO模型都对速度和准确性之间的权衡进行了精细调整,提供了不同的模型规模,以适应特定的应用和硬件需求。例如,这些版本通常提供了针对边缘设备进行优化的轻量级模型,以减少计算复杂性和加快处理速度为代价来换取准确性。

YOLO的未来

随着YOLO框架的不断演进,我们预计以下趋势和可能性将影响未来的发展:

  • 整合最新技术:研究人员和开发人员将继续利用深度学习、数据增强和训练技术中的最新方法,不断改进YOLO架构。这种持续的创新过程很可能提高模型的性能、鲁棒性和效率。

  • 基准评估的演进:目前用于评估目标检测模型的基准测试集COCO 2017可能最终会被更先进和具有挑战性的基准测试集所取代。这反映了从YOLO的前两个版本中使用的VOC 2007基准测试集的转变,体现了随着模型变得更加复杂和准确,需要更具挑战性的基准测试集的需求。

  • YOLO模型和应用的扩展:随着YOLO框架的进一步发展,我们预计每年发布的YOLO模型数量将增加,并相应扩大应用领域。随着框架变得更加多功能和强大,它很可能被应用于更多不同的领域,从家用电器设备到自动驾驶汽车等。

  • 进入新领域:YOLO模型有潜力将其能力扩展到目标检测和分割之外的领域,例如视频中的目标跟踪和3D关键点估计。随着这些模型的发展,它们可能成为解决更广泛的计算机视觉任务的新解决方案的基础。

  • 适应不同硬件:YOLO模型将进一步覆盖从物联网设备到高性能计算集群的硬件平台。这种适应性将使得可以根据应用的需求和限制在不同的上下文中部署YOLO模型。此外,通过根据不同的硬件规格定制模型,YOLO可以为更多用户和行业提供普及和有效的解决方案。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值