YOLO系列算法全家桶——YOLOv1-YOLOv9详细介绍 !!(一):https://developer.aliyun.com/article/1508518
6. YOLOX(2021)
(论文地址:https://arxiv.org/pdf/2107.08430.pdf)
(代码地址:https://github.com/Megvii-BaseDetection/YOLOX?tab=readme-ov-file)
6.1 模型介绍
YOLOX在YOLO系列的基础上做了一系列的工作,其主要贡献在于:在YOLOv3的基础上,引入了Decoupled Head,Data Aug,Anchor Free和SimOTA样本匹配的方法,构建了一种anchor-free的端到端目标检测框架,并且达到了一流的检测水平。此外,本文提出的 YOLOX-L 模型在视频感知挑战赛(CVPR 2021年自动驾驶研讨会)上获得了第一名。作者还提供了支持ONNX、TensorRT、NCNN和Openvino的部署版本
为什么提出YOLOX:
目标检测分为Anchor Based和Anchor Free两种方式。
在Yolov3、Yolov4、Yolov5中,通常都是采用 Anchor Based的方式,来提取目标框。
Yolox 将 Anchor free 的方式引入到Yolo系列中,使用anchor free方法有如下好处:
- 降低了计算量,不涉及IoU计算,另外产生的预测框数量较少。
假设feature map的尺度为80x80,anchor based方法在Feature Map上,每个单元格一般设置三个不同尺寸大小的锚框,因此产生3x80x80=19200个预测框。而使用anchor free的方法,仅产生80x80=6400个预测框,降低了计算量。
- 缓解了正负样本不平衡问题
anchor free方法的预测框只有anchor based方法的1/3,而预测框中大部分是负样本,因此anchor free方法可以减少负样本数,进一步缓解了正负样本不平衡问题。
- 避免了anchor的调参
anchor based方法的anchor box的尺度是一个超参数,不同的超参数设置会影响模型性能。anchor free方法避免了这一点。
6.2 网络结构
(图片来源:jiangdabai)
- 输入端:表示输入的图片,采用的数据增强方式:RandomHorizontalFlip、ColorJitter、多尺度增强。
- Backbone:用来提取图片特征,采用Darknet53。
- Neck:用于特征融合,采用PAFPN。
- Prediction:用来结果预测。Decoupled Head、End-to-End YOLO、Anchor-free、Multi positives。
6.3 改进部分
无锚(Anchor-free):自YOLOv2以来,所有后续的的YOLO版本都是基于锚点的检测器。YOLOX受到CornerNet、CenterNet和FCOS等最先进的无锚物体检测器的启发,回到了一个无锚结构,简化了训练进和解码过程。与YOLOv3基线相比,无锚的AP增加了0.9;
多重正样本(Multi positives):为了弥补因缺乏锚点而产生的巨大不平衡,作者使用了中心采样。他们将中心3x3的区域作为正例区域。这种方法使得AP增加了2.1。
解耦头(Decoupled head):分类置信度和定位精度之间可能存在错位。由于这个原因,YOLOX将这两者分离成两个头(如图2所示),一个用于分类任务,另一个用于回归任务,将AP提高了1.1分,并加快了模型收敛。
高级标签分配:有研究表明,当多个对象的bounding box重叠时,ground truth标签分配可能存在模糊性,并将分配程序表述为最佳传输(OT)问题。YOLOX在这项工作的启发下,提出了一个简化的版本,称为simOTA。这一变化使AP增加了2.3分。
强化增强:YOLOX使用MixUP和Mosaic增强。作者发现,在使用这些增强后,ImageNet预训练不再有好处。强势增强使AP增加了2.4分。
6.4 性能表现
YOLOX的性能超越了YOLOV5,YOLOX-X的AP值达到了51.2,超过YOLOV5-X 0.8个百分点,此外模型推理速度和参数量都具有比较大的优势。
7. YOLOv6(2022)
(论文地址:https://arxiv.org/pdf/2209.02976.pdf)
(代码地址:https://github.com/meituan/YOLOv6/)
7.1 模型介绍
YOLOv6于2022年9月由美团视觉人工智能部发布在ArXiv。与YOLOv4和YOLOv5类似,它为工业应用提供了各种不同尺寸的模型。跟随基于锚点的方法的趋势,YOLOv6采用了无锚点的检测器。
YOLOv5/YOLOX 使用的 Backbone 和 Neck 都基于 CSPNet 搭建,采用了多分支的方式和残差结构。对于 GPU 等硬件来说,这种结构会一定程度上增加延时,同时减小内存带宽利用率。因此,YOLOv6对Backbone 和 Neck 都进行了重新设计,Head层沿用了YOLOX中的Decoupled Head并稍作修改。相当于YOLOv5而言,v6对网络模型结构进行了大量的更改。
7.2 网络结构
(图片来源:cainiaoxiaoqiao)
由上图所示,从整体上看,YOLOv6的网络结构与YOLOv4、YOLOv5是很相似的,尤其是backbone和neck部分,但是其中的实现模块是有变化的;但最大的不同在于Head部分,采用的是YOLOX的hHead方式,将分类和回归分为两个支路,进行了解耦操作。
7.3 改进部分
(1)输入端
无锚框,取消了YOLOv1到YOLOv5一直沿用的锚框。
(2)主干网络
YOLOv6的Backbone的实现的基本模块为RVB1_X结构,其全程为RepVGGBlock_X,表示由多个RepVGGBlock组成。
RepVGGBlock是RepVGG网络的重复模块,由多个RepVGGConv模块组成。每个RepVGGBlock由两个RepVGGConv模块组成,第一个RepVGGConv是一个3x3卷积操作,而第二个RepVGGConv是一个1x1卷积操作。
这两个卷积模块之间使用了批归一BatchNorm)和ReLU激活函数。RepVGGConv模块是RepVGG网络中的基本卷积模块,由一个卷积层、批归一化和ReLU激活函数组成。这样的设计使得RepVGGBlock具有较强的表达能力,并且可以适应不同的特征提取需求。
RepVGGBlock在RepVGG网络中被重复堆叠多次,形成了深层的网络结构。通过堆叠多个RepVGGBlock,可以提高网络的表示能力和复杂度,从而实现更准确的特征提取和目标识别。
(3)颈部网络
PANet结构类似更换为RepVGGBlock结构。
(4)输出端
YOLOv6对检测头进行了解耦,分开了边框与类别的分类过程。
7.4 性能表现
YOLOv6 的检测精度和速度均优于以前最先进的模型,同时设计了 8 种缩放模型为不同场景中的工业应用定制不同规模的网络模型,可以检测不同尺度的图像从而提高检测效果,其部署简单、计算量较低,适用于实时检测。并且支持在不同平台上面的部署,简化工程部署的适配工作。但检测准确率其同时期的其他先进算法相比较低。
下表为与 COCO 2017 val 上其他 YOLO 系列的比较。FPS 和延迟是在使用 TensorRT 的 Tesla T4 上以 FP16 精确度测量的。我们的所有模型都在没有预训练或任何外部数据的情况下训练了 300 个epoch。在输入分辨率为 640×640 的情况下,我们对模型的准确性和速度性能进行了评估。'‡'表示所提出的自蒸馏方法是倾斜化的。∗"表示通过官方代码发布的模型的重新评估结果。
8. YOLOv7(2022)
(论文地址:https://arxiv.org/pdf/2207.02696.pdf)
(代码地址:https://github.com/WongKinYiu/yolov7)
8.1 模型介绍
YOLOv7由YOLOv4和YOLOR的同一作者于2022年7月发表在ArXiv。当时,在5 FPS到160 FPS的范围内,它的速度和准确度超过了所有已知的物体检测器。与YOLOv4一样,它只使用MS COCO数据集进行训练,没有预训练的骨干。YOLOv7提出了一些架构上的变化和一系列的免费包,在不影响推理速度的情况下提高了准确率,只影响了训练时间。
8.2 网络结构
首先对输入的图片 resize 为 640x640 大小,输入到 backbone 网络中,然后经 head 层网络输出三层不同 size 大小的 **feature map**,经过 Rep 和 conv输出预测结果,这里以 coco 为例子,输出为 80 个类别,然后每个输出(x ,y, w, h, o) 即坐标位置和前后背景,3 是指的 anchor 数量,因此每一层的输出为 (80+5)x3 = 255再乘上 feature map 的大小就是最终的输出了。
8.3 改进部分
(1)输入端
与YOLOv5类似。
(2)主干网络
Backbone为骨干网络由CBS、ELAN、MP-1组成。
- CBS结构:特征提取和通道转换。
- ELAN:通过不同的分支将特征图拼接起来,进而促进更深层网络的有效学习和收敛。
- MP-1:将经过不同下采样方式所得到的特征图进行融合,在不增加计算量的同时保留更多的特征信息。
(3)颈部网络
该网络主要包括SPPCSPC、ELANW、UPSample三个子模块和Cat结构,其中,SPPCSPC模块用于提高特征提取的效率和准确率;ELANW模块相比于ELAN模块增加了两个拼接操作;UPSample模块用于实现不同层次特征的高效融合;Cat结构旨在进一步优化卷积层的效果。
(4)输出端
与YOLOv6类似。检测头负责网络最终的预测输出,针对Neck处理后的特征信息进行解耦,采用重参数化模块对Neck输出的三种不同尺寸的特征进行通道数调整,再经过1x1的卷积操作,得出目标物体的位置、置信度和类别的预测。
8.4 性能表现
YOLOv7 算法提出了基于级联的模型缩放策略从而生成不同尺寸的模型,减少参数量和计算量,可以进行实时目标检测,在大数据集进行训练检测有较高精度且整体检测性能有所提升。但是其网络架构也相对复杂进行训练测试需要大量计算资源,且对小目标和密集场景的检测效果较差。
9. YOLOv8(2023)
(代码地址:https://github.com/ultralytics/ultralytics)
9.1 模型介绍
YOLOv8 与YOLOv5出自同一个团队,是一款前沿、最先进(SOTA)的模型,基于先前 YOLOv5版本的成功,引入了新功能和改进,进一步提升性能和灵活性。
YOLOv8是一种尖端的、最先进的 (SOTA) 模型,它建立在以前成功的 YOLO 版本的基础上,并引入了新的功能和改进,以进一步提高性能和灵活性。YOLOv8 旨在快速、准确且易于使用,这也使其成为对象检测、图像分割和图像分类任务的绝佳选择。具体创新包括一个新的骨干网络、一个新的 Ancher-Free 检测头和一个新的损失函数,还支持YOLO以往版本,方便不同版本切换和性能对比。
YOLOv8 有 5 个不同模型大小的预训练模型:n、s、m、l 和 x。关注下面的参数个数和COCO mAP(准确率),可以看到准确率比YOLOv5有了很大的提升。特别是 l 和 x,它们是大模型尺寸,在减少参数数量的同时提高了精度。
9.2 网络结构
整体结构上与YOLOv5类似: CSPDarknet(主干) + PAN-FPN(颈) + Decoupled-Head(输出头部),但是在各模块的细节上有一些改进,并且整体上是基于anchor-free的思想,这与yolov5也有着本质上的不同。
9.3 改进部分
(1)输入端
与YOLOv7类似。
(2)主干网络
Backbone部分采用的结构为Darknet53,其中包括基本卷积单元Conv、实现局部特征和全局特征的Feature Map级别的融合的空间金字塔池化模块SPPF、增加网络的深度和感受野,提高特征提取能力的C2F模块。
(3)颈部网络
与YOLOv5类似。
(4)输出端
在损失函数计算方面,采用了Task AlignedAssigner正样本分配策略。由分类损失VFL(Varifocal Loss)和回归损失CIOU(Complete-IOU)+DFL(Deep Feature Loss)两部分的三个损失函数加权组合而成。
9.4 性能表现
YOLOv8 的检测、分割和姿态模型在 COCO 数据集上进行预训练,而分类模型在 ImageNet 数据集上进行预训练。在首次使用时,模型会自动从最新的 Ultralytics 发布版本中下载。
YOLOv8共提供了5中不同大小的模型选择,方便开发者在性能和精度之前进行平衡。以下以YOLOv8的目标检测模型为例:
YOLOv8的分割模型也提供了5中不同大小的模型选择:
从下图我们可以看到,YOLOv8 在目标检测和实例分割任务上的性能都很好:
(图片来源:YOLOv8来了!)
10. YOLOv9(2024)
(论文地址:https://arxiv.org/pdf/2402.13616.pdf)
(代码地址:https://github.com/WongKinYiu/yolov9)
10.1 模型介绍
YOLOv9是原YOLOv7团队打造,提出了可编程梯度信息(PGI)的概念来应对深度网络实现多个目标所需的各种变化。 PGI可以为目标任务计算目标函数提供完整的输入信息,从而获得可靠的梯度信息来更新网络权值。此外,还设计了一种新的轻量级网络架构——基于梯度路径规划的通用高效层聚合网络(GELAN)。 GELAN的架构证实了PGI在轻量级模型上取得了优异的结果。
10.2 网络结构
下图展示了不同网络架构的随机初始权重输出特征图的可视化结果:(a) 输入图像,(b) PlainNet,(c) ResNet,(d) CSPNet,和 (e) 提议的GELAN。从这些可视化结果中,我们可以看出在不同的架构中,提供给目标函数用以计算损失的信息在不同程度上有所丢失,而提议的GELAN架构能够保留最完整的信息,并为计算目标函数提供最可靠的梯度信息。
具体来说,输入图像(a)是原始未处理的图像。接下来的四个图像(b-e)分别展示了当这个输入图像通过不同的网络架构时,在网络的某一层上的特征图。这些特征图通过网络层的权重随机初始化得到,旨在展示网络在处理数据时的特征提取能力。图中的颜色变化代表特征的激活程度,激活程度越高,说明网络对于图像的某一部分特征越敏感。
- PlainNet (b) 显示了一个基本网络结构的特征图,可以看到有大量的信息丢失,这意味着在实际应用中可能不会捕捉到所有有用的特征。
- ResNet (c) 作为一个经典的深度学习架构,展示了更好的信息保留能力,但仍有一些信息损失。
- CSPNet (d) 通过其特殊的结构设计,进一步减少了信息的丢失。
- GELAN (e) 展示了该研究提出的架构,从图中可以看出,与其他架构相比,它保留了最完整的信息,这表明GELAN架构能更好地保留输入数据的信息,为后续的目标函数计算提供更准确的梯度信息。
10.3 主要贡献
- 我们从可逆函数的角度理论分析了现有的深度神经网络架构,并通过这一过程成功解释了过去难以解释的许多现象。我们还基于这一分析设计了PGI和辅助可逆分支,并取得了优异的结果。
- 我们设计的PGI解决了深度监督只能用于极深神经网络架构的问题,因此允许新的轻量级架构真正应用于日常生活中。
- 我们设计的GELAN仅使用传统卷积就实现了比基于最先进技术的深度卷积设计更高的参数利用率,同时展现了轻巧、快速和准确的巨大优势。
- 结合所提出的PGI和GELAN,YOLOv9在MS COCO数据集上的对象检测性能在所有方面都大大超过了现有的实时对象检测器。
核心算法:(具体参考:http://t.csdnimg.cn/1LWuY)
(1)可编程梯度信息(PGI)
为了解决上述问题,论文提出了一种新的辅助监督框架,称为可编程梯度信息(PGI),如图3(d)所示。 PGI主要包括三个组成部分:主分支、辅助可逆分支、多级辅助信息。
从图3(d)中我们可以看出,PGI的推理过程仅使用主分支,因此不需要任何额外的推理成本。至于其他两个组件,它们仅用于训练阶段而不在推理阶段,用于解决或减缓深度学习方法中的几个重要问题:
- 辅助可逆分支:是为了处理神经网络加深带来的问题而设计的。网络加深会造成信息瓶颈,导致损失函数无法生成可靠的梯度。
- 对于多级辅助信息:旨在处理深度监督带来的误差累积问题,特别是针对多个预测分支的架构和轻量级模型。
(2)GELAN
通过结合采用梯度路径规划设计的两种神经网络架构CSPNet 和ELAN ,论文设计了兼顾轻量级、推理速度和准确性的广义高效层聚合网络(GELAN)。其整体架构如图 4 所示。论文将最初仅使用卷积层堆叠的 ELAN 的功能推广到可以使用任何计算块的新架构。
10.4 性能表现
我们基于YOLOv7和Dynamic YOLOv7分别构建了YOLOv9的通用和扩展版本。在网络架构设计中,我们用GELAN替换了ELAN,GELAN使用CSPNet块作为计算块,并计划采用RepConv。我们还简化了下采样模块,并优化了无锚点的预测头。至于PGI的辅助损失部分,我们完全遵循了YOLOv7的辅助头设置。
如表1所示,与轻量级和中型模型YOLO MS相比,YOLOv9的参数减少了约10%,计算量减少了5∼15%,但AP仍然有0.4∼0.6%的提升。与 YOLOv7 AF 相比,YOLOv9-C 的参数减少了 42%,计算量减少了 22%,但达到了相同的 AP(53%)。与YOLOv8-X相比,YOLOv9-E参数减少16%,计算量减少27%,AP显着提升1.7%。上述对比结果表明,论文提出的YOLOv9与现有方法相比在各方面都有显著改进。
参考:
https://arxiv.org/pdf/2304.00501.pdf
http://t.csdnimg.cn/pQb6X
http://t.csdnimg.cn/GfUXC
http://t.csdnimg.cn/f9x3z
http://t.csdnimg.cn/gSuBb
http://t.csdnimg.cn/eIzHw
http://t.csdnimg.cn/0e7zR
https://www.cnblogs.com/cvlinke/p/16496988.html
http://t.csdnimg.cn/CvyTo
http://t.csdnimg.cn/aKEOi
http://t.csdnimg.cn/1LWuY