目录
- 前言
- YOLOv1
- YOLOv2
- YOLOv3
- YOLOv4
- YOLOv5
- YOLOv6
- YOLOv7
- YOLOv8
- YOLOv9
- YOLOv10
- 对比
- 待更新
前言
YOLO(You Only Look Once)是一种革命性的目标检测算法,以其快速和高效的性能而闻名。自2015年YOLOv1的首次推出以来,YOLO系列已经经历了多次迭代,每一次迭代都在速度、准确性和计算效率方面做出了显著的贡献。
版本号 | 年份 | 主要贡献与特点 |
---|---|---|
YOLOv1 | 2015 | 实时端到端物体检测,将检测视为回归问题,单次网络评估预测位置和类别 |
YOLOv2 | 2016 | 引入批量归一化,高分辨率分类器,全卷积网络,能检测超过9000个类别 |
YOLOv3 | 2018 | 使用更深的Darknet-53网络,引入特征金字塔网络提高多尺度目标检测能力 |
YOLOv4 | 2020 | 结合CSPNet、PANet、SAM等技术,提高特征提取和检测效率 |
YOLOv5 | 2020 | 使用Pytorch框架,不同大小模型版本适应不同环境,易用性和性能显著改进 |
YOLOv6 | 2021 | 多种不同尺寸模型适应工业应用,继续在YOLO系列基础上改进 |
YOLOv7 | 2022 | 架构变化和一系列免费包提高准确率,保持实时性 |
YOLOv8 | 2023 | 新功能和改进,包括新的骨干网络、Anchor-Free检测头和新损失函数,提升性能和灵活性 |
YOLOv9 | 2023 | 引入可编程梯度信息(PGI)和基于梯度路径规划的通用高效层聚合网络(GELAN)架构 |
YOLOv10 | 2024 | 通过消除非最大抑制(NMS-Free)和优化各种模型组件,实现了最先进的性能。 |
YOLOv1
- 核心思想:
将目标检测任务视为一个回归问题,直接在整幅图像上进行边界框的预测和类别分类,一次性输出目标的位置和类别信息。 - 网络结构: 输入图像被 resize 到 448x448,经过一系列卷积层和全连接层处理。最后一个全连接层输出一个 7x7x30 的张量,其中 7x7 表示将图像划分为 7x7 的网格,每个网格对应 30 维的预测信息,包括 2 个边界框的位置(4 个值)、置信度(2 个值)和 20 类对象分类的概率。
- 优点: 检测速度快,能够在一张图像上同时预测多个目标的位置和类别;对背景的误检率相对较低,因为是基于整幅图像进行检测,能利用上下文信息。
- 缺点: 定位精度不够高,尤其是对于小目标的检测效果较差;每个网格只能预测一组类别概率,对于多个目标位于同一网格的情况处理能力有限;边界框的预测不够准确,召回率相对较低。
YOLOv2
- 改进之处:
- 输入尺度: 支持更高分辨率的输入,提高了对小目标的检测能力。
- 网络层改进:
- 在卷积和激活函数之间添加批量归一化(Batch Normalization),加快训练速度并提高准确率,减少了对 Dropout 层的依赖。
- 借鉴 ResNet 的思想,进行特征图的拼接操作,融合不同层次的特征信息,增强了模型对多尺度特征的表达能力。
- 输出结果处理:
- 引入先验框(Anchor Boxes)的概念,每个网格预先定义多个不同尺寸和比例的先验框,提高了对不同形状目标的适应性,虽然准确率略有下降,但召回率提升明显。
- 对边界框的预测值进行编码(Encode)处理,将预测值的范围控制在一定范围内,使模型训练更加稳定。
- 性能提升: 在保持较快检测速度的同时,一定程度上提高了检测精度和召回率,尤其是对小目标的检测效果有所改善。
YOLOv3
- 改进之处:
- 多尺度预测: 在三个不同尺度上进行边界框的预测,利用类似特征金字塔网络的思想,融合不同层次的特征图,提高了对不同大小目标的检测能力,尤其是对小目标的检测效果进一步提升。
- 特征提取器: 采用新的 Darknet-53 作为特征提取器,它是 YOLOv2 中的 Darknet-19 与残差链接混合的方法改进而来,具有更深的网络层次(53 层),性能优于 ResNet-101,速度更快,能够提取更丰富、更具代表性的特征。
- 边界框预测: 沿用 YOLOv2 的维度聚类方式生成先验框,并为每个边界框预测一个物体得分,使用逻辑回归进行预测,同时采用单独的逻辑分类器对每个类别进行预测,不使用 Softmax 分类器,以适应一些标签不完全互斥的数据集。
- 性能特点: 检测精度较高,速度也相对较快,在不同尺度的目标检测上表现较为均衡,能够处理较为复杂的检测场景。
YOLOv4
- 改进之处:
- 骨干网络: 采用了更强大的 CSPDarknet53 作为骨干网络,结合了跨阶段局部网络(CSPNet)的思想,增强了网络的特征提取能力和学习能力,提高了模型的准确性和效率。
- 数据增强: 使用了多种数据增强技术,如 Mosaic 数据增强,通过将多张图片拼接在一起进行训练,丰富了训练数据的多样性,提高了模型的泛化能力和鲁棒性。
- 激活函数: 使用 Mish 激活函数代替传统的 Leaky ReLU 激活函数,Mish 函数在负值区域有更平滑的过渡,有助于提高模型的收敛速度和准确性。
- 优化算法: 在训练过程中采用了一些优化技巧,如学习率余弦退火衰减、标签平滑等,进一步提高了模型的训练效果和稳定性。
- 检测头: 对检测头进行了改进,采用了更高效的结构,提高了检测的速度和精度。
- 性能优势: 在保持较高检测速度的前提下,显著提高了检测精度,尤其是在复杂场景下对各种目标的检测能力较强,具有较好的泛化性能和鲁棒性。
YOLOv5
- 改进之处:
- 灵活的模型架构: YOLOv5 提供了多种不同规模的模型,如 YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x 等,以适应不同的应用需求和计算资源。用户可以根据实际情况选择合适的模型,在速度和精度之间进行权衡。
- 更高效的训练策略: 采用了自适应锚框计算、自适应图像缩放等技术,提高了训练效率和模型的适应性。同时,在数据增强方面也进行了优化,使用了多种数据增强方法的组合,进一步提升了模型的性能。
- 优化的网络结构: 对网络的各个组件进行了优化,如改进了骨干网络的结构,使其在特征提取方面更加高效;优化了颈部网络(Neck)和头部网络(Head)的设计,提高了特征融合和目标检测的效果。
- 性能特点: 具有较高的检测精度和较快的检测速度,训练和部署相对简单方便,能够在各种硬件平台上高效运行,广泛应用于实际场景中的目标检测任务。
YOLOv6
- 改进之处:
- 骨干网络: 使用了更高效的 EfficientRep 作为骨干网络,它是基于 RevGG 结构改进而来,对硬件更加友好,能够在 GPU 设备上实现更高效的计算,提高了模型的推理速度。
- 颈部网络: 基于 Rep 和 PAN 搭建了 Rep-PAN 颈部网络,通过引入 Rep 结构,降低了硬件上的延时,提高了特征融合的效率。
- 检测头: 与 YOLOX 一样对检测头进行解耦,将边框回归与类别分类分开,提高了模型的性能和收敛速度。同时,重新设计了一个更高效的解耦头结构,在不影响精度的情况下降低了延时,实现了速度与精度的平衡。
- 标签分配: 沿用了 YOLOX 的 SimOTA 标签分配方法,能够为不同目标设定不同的正样本数量,解决了正负样本不均衡的问题,提高了模型的训练效果。
- 边框回归损失: 引入了新的边框回归损失 SIoU,通过考虑框与框之间的向量角度,重新定义了距离损失,有效降低了回归的自由度,加速了网络的收敛,进一步提升了回归的准确性。
- 性能表现: 在保持较高检测精度的同时,大幅提高了推理速度,尤其在工业界的实际应用中具有很大优势,能够满足对实时性要求较高的场景需求。
YOLOv7
- 改进之处:
- 网络结构设计:
- 使用了 ELAN 和 MP 结构等新颖的模块。ELAN 结构通过控制最短和最长的梯度路径,使更深的网络能够更有效地学习和收敛,并且基于 ELAN 设计的 E-ELAN 进一步增强了网络的学习能力。MP 结构则同时采用了最大池化和步长为 2 的卷积,在不增加太多计算量的情况下,丰富了特征提取的方式。
- 采用了重参数化结构(Rep structure),将多个分支的参数进行整合,在训练时具有多分支结构的优势,而在推理时可以等效为单路模型,提高了推理速度。
- 激活函数: 使用 SiLU 激活函数,相比传统的激活函数,SiLU 在负值区域有更平滑的过渡,有助于提高模型的收敛速度和准确性。
- 损失函数和匹配策略: 在损失函数方面,整体和 YOLOv5 保持一致,分为坐标损失、目标置信度损失和分类损失三部分,并采用了 CIoU 损失作为坐标损失函数。在匹配策略上,参考了 YOLOv5 和 YOLOv6 使用的 SimOTA 方法,并进行了一些改进和优化,如在训练前通过 k-means 聚类算法获得先验的 anchor 框,根据 gt 框的中心位置扩充正样本等,提高了模型的训练效果和对目标的检测能力。
- 网络结构设计:
- 性能特点: 在速度和精度方面都有较好的表现,尤其是在处理复杂场景和小目标检测方面具有一定优势,能够在不同的硬件平台上实现高效的目标检测。
YOLOv8
- 改进之处:
- 统一的模型架构: YOLOv8 采用了统一的模型架构,包括骨干网络、颈部网络和检测头,使得不同规模的模型(如 YOLOv8n、YOLOv8s、YOLOv8m、YOLOv8l、YOLOv8x)之间具有更好的一致性和可扩展性。
- 新骨干网络: 为模型提供了更强大的特征提取能力。它能够从输入图像中捕捉到更丰富、更细致的特征信息,使得模型在检测不同目标时更加准确。
- Anchor-Free 检测头:
- 摆脱了传统 Anchor-Based 方法中对预设锚框的依赖,极大地提高了检测的灵活性。在不同的应用场景中,无需再为不同的目标大小和形状手动调整锚框参数,减少了模型的复杂性和调参的难度。
- 对于形状不规则或尺度变化较大的目标,Anchor-Free 检测头能够更好地适应,从而提高检测的准确率。
- 先进的训练策略: 采用了诸如标签平滑、IoU-aware loss 等训练技巧,进一步提升了模型的性能和泛化能力。
- 多任务学习支持: 除了目标检测任务,YOLOv8 还支持实例分割等多任务学习,能够满足更多不同的应用需求。
- 性能优势: 在保持高速度的同时,显著提高了检测精度,尤其是在小目标检测和密集目标检测场景下表现出色。模型具有较高的灵活性和可定制性,能够适应不同的应用场景和硬件环境。
YOLOv9
-
改进之处:
1. 可编程梯度信息(PGI):- 增强学习能力
- PGI 允许模型根据不同的任务和数据特点,灵活地调整梯度的计算和传播方式。这使得模型能够更好地适应各种复杂的场景,提高对不同类型目标的检测精度。
- 通过对梯度进行编程,可以更加有针对性地优化模型的参数,加快模型的收敛速度,减少训练时间。
- 提高鲁棒性
- PGI 使得模型在面对噪声、遮挡和光照变化等干扰因素时,具有更强的鲁棒性。它能够自动调整梯度,使模型更加关注重要的特征,减少对干扰因素的敏感程度。
2. 基于梯度路径规划的通用高效层聚合网络(GELAN)架构
- 高效的特征融合
- GELAN 架构通过精心设计的梯度路径规划,实现了不同层之间的高效特征融合。这使得模型能够充分利用不同层次的特征信息,提高对目标的表征能力。
- 不同层的特征具有不同的分辨率和语义信息,GELAN 能够将它们有效地结合起来,从而在不同尺度上更好地检测目标。
- 通用的架构设计
- GELAN 架构具有通用性,适用于各种不同的任务和数据集。它可以很容易地与其他模块结合,进一步提升模型的性能。
- 这种通用的架构设计使得 YOLOv9 在不同领域的应用中具有更大的潜力和灵活性。
- 增强学习能力
YOLOv10
-
改进之处:
1. 消除非最大抑制(NMS-Free)- 提高检测速度
- 传统的目标检测算法中,非最大抑制(NMS)步骤需要消耗一定的时间来筛选和去除重复的检测框。消除 NMS 后,YOLOv10 能够显著提高检测速度,尤其在处理大量目标和实时应用场景中具有明显优势。
- 这使得模型能够更快地响应,满足对实时性要求极高的应用,如自动驾驶、智能监控等。
- 减少误检和漏检
- NMS 过程中可能会因为阈值设置不当而导致误检或漏检。消除 NMS 后,YOLOv10 采用了更加先进的策略来处理重复检测框,降低了误检和漏检的概率。
- 模型能够更准确地检测出不同大小和形状的目标,提高了检测的精度和可靠性。
2. 优化各种模型组件
- 增强特征提取能力
- YOLOv10 对模型的各个组件进行了优化,进一步增强了特征提取能力。这包括改进的骨干网络、更有效的特征融合策略等。
- 强大的特征提取能力使得模型能够更好地捕捉目标的特征,提高检测的准确性。
- 提高模型的稳定性和泛化能力
- 通过优化模型组件,YOLOv10 提高了模型的稳定性和泛化能力。它能够在不同的数据集和场景下表现出更好的性能,减少过拟合的风险。
- 这使得模型更加可靠,适用于各种实际应用场景。
- 提高检测速度
对比
YOLOv1至YOLOv3主要由Joseph Redmon及其合作者提出,而后续版本则由不同的研究者和团队负责开发。YOLOv4之后的版本,尤其是YOLOv5和YOLOv8,由Ultralytics公司开发和维护。YOLOv5和YOLOv8也是现在比较流行的版本。
待更新
随着技术的不断发展,它们可能在以下方面进行改进和创新:
- 模型结构优化: 进一步改进骨干网络、颈部网络和头部网络的结构,提高特征提取和融合能力,以提高检测精度。
- 检测速度提升: 通过优化算法和硬件加速等方式,进一步提高检测速度,满足实时性要求更高的应用场景。
- 小目标检测: 持续改进对小目标的检测效果,提高在复杂场景下对小目标的识别能力。
- 多模态融合: 结合其他传感器数据或模态信息,如红外图像、深度信息等,提高检测的准确性和鲁棒性。
- 模型压缩和轻量化: 开发更高效的模型压缩技术,使模型在保持高性能的同时,能够在资源受限的设备上运行。
- 自适应性和泛化能力: 提高模型对不同数据集和场景的自适应性和泛化能力,减少对大量标注数据的依赖。
提示:这些版本之间的关联在于它们都是在不断改进和优化目标检测算法,以满足不同应用场景的需求。每个版本都继承了前一版本的优点,并针对前一版本的不足进行改进和创新。同时,它们也为后续版本的发展提供了经验和基础。