【YOLO系列】YOLO算法改进史


目录

  • 前言
  • YOLOv1
  • YOLOv2
  • YOLOv3
  • YOLOv4
  • YOLOv5
  • YOLOv6
  • YOLOv7
  • YOLOv8
  • YOLOv9
  • YOLOv10
  • 对比
  • 待更新


前言

YOLO(You Only Look Once)是一种革命性的目标检测算法,以其快速和高效的性能而闻名。自2015年YOLOv1的首次推出以来,YOLO系列已经经历了多次迭代,每一次迭代都在速度、准确性和计算效率方面做出了显著的贡献。

版本号年份主要贡献与特点
YOLOv12015实时端到端物体检测,将检测视为回归问题,单次网络评估预测位置和类别
YOLOv22016引入批量归一化,高分辨率分类器,全卷积网络,能检测超过9000个类别
YOLOv32018使用更深的Darknet-53网络,引入特征金字塔网络提高多尺度目标检测能力
YOLOv42020结合CSPNet、PANet、SAM等技术,提高特征提取和检测效率
YOLOv52020使用Pytorch框架,不同大小模型版本适应不同环境,易用性和性能显著改进
YOLOv62021多种不同尺寸模型适应工业应用,继续在YOLO系列基础上改进
YOLOv72022架构变化和一系列免费包提高准确率,保持实时性
YOLOv82023新功能和改进,包括新的骨干网络、Anchor-Free检测头和新损失函数,提升性能和灵活性
YOLOv92023引入可编程梯度信息(PGI)和基于梯度路径规划的通用高效层聚合网络(GELAN)架构
YOLOv102024通过消除非最大抑制(NMS-Free)和优化各种模型组件,实现了最先进的性能。

YOLOv1

  • 核心思想:
    将目标检测任务视为一个回归问题,直接在整幅图像上进行边界框的预测和类别分类,一次性输出目标的位置和类别信息。
  • 网络结构: 输入图像被 resize 到 448x448,经过一系列卷积层和全连接层处理。最后一个全连接层输出一个 7x7x30 的张量,其中 7x7 表示将图像划分为 7x7 的网格,每个网格对应 30 维的预测信息,包括 2 个边界框的位置(4 个值)、置信度(2 个值)和 20 类对象分类的概率。
  • 优点: 检测速度快,能够在一张图像上同时预测多个目标的位置和类别;对背景的误检率相对较低,因为是基于整幅图像进行检测,能利用上下文信息。
  • 缺点: 定位精度不够高,尤其是对于小目标的检测效果较差;每个网格只能预测一组类别概率,对于多个目标位于同一网格的情况处理能力有限;边界框的预测不够准确,召回率相对较低。

YOLOv2

  • 改进之处:
    1. 输入尺度: 支持更高分辨率的输入,提高了对小目标的检测能力。
    2. 网络层改进:
      • 在卷积和激活函数之间添加批量归一化(Batch Normalization),加快训练速度并提高准确率,减少了对 Dropout 层的依赖。
      • 借鉴 ResNet 的思想,进行特征图的拼接操作,融合不同层次的特征信息,增强了模型对多尺度特征的表达能力。
    3. 输出结果处理:
      • 引入先验框(Anchor Boxes)的概念,每个网格预先定义多个不同尺寸和比例的先验框,提高了对不同形状目标的适应性,虽然准确率略有下降,但召回率提升明显。
      • 对边界框的预测值进行编码(Encode)处理,将预测值的范围控制在一定范围内,使模型训练更加稳定。
  • 性能提升: 在保持较快检测速度的同时,一定程度上提高了检测精度和召回率,尤其是对小目标的检测效果有所改善。

YOLOv3

  • 改进之处:
    1. 多尺度预测: 在三个不同尺度上进行边界框的预测,利用类似特征金字塔网络的思想,融合不同层次的特征图,提高了对不同大小目标的检测能力,尤其是对小目标的检测效果进一步提升。
    2. 特征提取器: 采用新的 Darknet-53 作为特征提取器,它是 YOLOv2 中的 Darknet-19 与残差链接混合的方法改进而来,具有更深的网络层次(53 层),性能优于 ResNet-101,速度更快,能够提取更丰富、更具代表性的特征。
    3. 边界框预测: 沿用 YOLOv2 的维度聚类方式生成先验框,并为每个边界框预测一个物体得分,使用逻辑回归进行预测,同时采用单独的逻辑分类器对每个类别进行预测,不使用 Softmax 分类器,以适应一些标签不完全互斥的数据集。
  • 性能特点: 检测精度较高,速度也相对较快,在不同尺度的目标检测上表现较为均衡,能够处理较为复杂的检测场景。

YOLOv4

  • 改进之处:
    1. 骨干网络: 采用了更强大的 CSPDarknet53 作为骨干网络,结合了跨阶段局部网络(CSPNet)的思想,增强了网络的特征提取能力和学习能力,提高了模型的准确性和效率。
    2. 数据增强: 使用了多种数据增强技术,如 Mosaic 数据增强,通过将多张图片拼接在一起进行训练,丰富了训练数据的多样性,提高了模型的泛化能力和鲁棒性。
    3. 激活函数: 使用 Mish 激活函数代替传统的 Leaky ReLU 激活函数,Mish 函数在负值区域有更平滑的过渡,有助于提高模型的收敛速度和准确性。
    4. 优化算法: 在训练过程中采用了一些优化技巧,如学习率余弦退火衰减、标签平滑等,进一步提高了模型的训练效果和稳定性。
    5. 检测头: 对检测头进行了改进,采用了更高效的结构,提高了检测的速度和精度。
  • 性能优势: 在保持较高检测速度的前提下,显著提高了检测精度,尤其是在复杂场景下对各种目标的检测能力较强,具有较好的泛化性能和鲁棒性。

YOLOv5

  • 改进之处:
    1. 灵活的模型架构: YOLOv5 提供了多种不同规模的模型,如 YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x 等,以适应不同的应用需求和计算资源。用户可以根据实际情况选择合适的模型,在速度和精度之间进行权衡。
    2. 更高效的训练策略: 采用了自适应锚框计算、自适应图像缩放等技术,提高了训练效率和模型的适应性。同时,在数据增强方面也进行了优化,使用了多种数据增强方法的组合,进一步提升了模型的性能。
    3. 优化的网络结构: 对网络的各个组件进行了优化,如改进了骨干网络的结构,使其在特征提取方面更加高效;优化了颈部网络(Neck)和头部网络(Head)的设计,提高了特征融合和目标检测的效果。
  • 性能特点: 具有较高的检测精度和较快的检测速度,训练和部署相对简单方便,能够在各种硬件平台上高效运行,广泛应用于实际场景中的目标检测任务。

YOLOv6

  • 改进之处:
    1. 骨干网络: 使用了更高效的 EfficientRep 作为骨干网络,它是基于 RevGG 结构改进而来,对硬件更加友好,能够在 GPU 设备上实现更高效的计算,提高了模型的推理速度。
    2. 颈部网络: 基于 Rep 和 PAN 搭建了 Rep-PAN 颈部网络,通过引入 Rep 结构,降低了硬件上的延时,提高了特征融合的效率。
    3. 检测头: 与 YOLOX 一样对检测头进行解耦,将边框回归与类别分类分开,提高了模型的性能和收敛速度。同时,重新设计了一个更高效的解耦头结构,在不影响精度的情况下降低了延时,实现了速度与精度的平衡。
    4. 标签分配: 沿用了 YOLOX 的 SimOTA 标签分配方法,能够为不同目标设定不同的正样本数量,解决了正负样本不均衡的问题,提高了模型的训练效果。
    5. 边框回归损失: 引入了新的边框回归损失 SIoU,通过考虑框与框之间的向量角度,重新定义了距离损失,有效降低了回归的自由度,加速了网络的收敛,进一步提升了回归的准确性。
  • 性能表现: 在保持较高检测精度的同时,大幅提高了推理速度,尤其在工业界的实际应用中具有很大优势,能够满足对实时性要求较高的场景需求。

YOLOv7

  • 改进之处:
    1. 网络结构设计:
      • 使用了 ELAN 和 MP 结构等新颖的模块。ELAN 结构通过控制最短和最长的梯度路径,使更深的网络能够更有效地学习和收敛,并且基于 ELAN 设计的 E-ELAN 进一步增强了网络的学习能力。MP 结构则同时采用了最大池化和步长为 2 的卷积,在不增加太多计算量的情况下,丰富了特征提取的方式。
      • 采用了重参数化结构(Rep structure),将多个分支的参数进行整合,在训练时具有多分支结构的优势,而在推理时可以等效为单路模型,提高了推理速度。
    2. 激活函数: 使用 SiLU 激活函数,相比传统的激活函数,SiLU 在负值区域有更平滑的过渡,有助于提高模型的收敛速度和准确性。
    3. 损失函数和匹配策略: 在损失函数方面,整体和 YOLOv5 保持一致,分为坐标损失、目标置信度损失和分类损失三部分,并采用了 CIoU 损失作为坐标损失函数。在匹配策略上,参考了 YOLOv5 和 YOLOv6 使用的 SimOTA 方法,并进行了一些改进和优化,如在训练前通过 k-means 聚类算法获得先验的 anchor 框,根据 gt 框的中心位置扩充正样本等,提高了模型的训练效果和对目标的检测能力。
  • 性能特点: 在速度和精度方面都有较好的表现,尤其是在处理复杂场景和小目标检测方面具有一定优势,能够在不同的硬件平台上实现高效的目标检测。

YOLOv8

  • 改进之处:
    1. 统一的模型架构: YOLOv8 采用了统一的模型架构,包括骨干网络、颈部网络和检测头,使得不同规模的模型(如 YOLOv8n、YOLOv8s、YOLOv8m、YOLOv8l、YOLOv8x)之间具有更好的一致性和可扩展性。
    2. 新骨干网络: 为模型提供了更强大的特征提取能力。它能够从输入图像中捕捉到更丰富、更细致的特征信息,使得模型在检测不同目标时更加准确。
    3. Anchor-Free 检测头:
      • 摆脱了传统 Anchor-Based 方法中对预设锚框的依赖,极大地提高了检测的灵活性。在不同的应用场景中,无需再为不同的目标大小和形状手动调整锚框参数,减少了模型的复杂性和调参的难度。
      • 对于形状不规则或尺度变化较大的目标,Anchor-Free 检测头能够更好地适应,从而提高检测的准确率。
    4. 先进的训练策略: 采用了诸如标签平滑、IoU-aware loss 等训练技巧,进一步提升了模型的性能和泛化能力。
    5. 多任务学习支持: 除了目标检测任务,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也是现在比较流行的版本。

待更新

随着技术的不断发展,它们可能在以下方面进行改进和创新:

  1. 模型结构优化: 进一步改进骨干网络、颈部网络和头部网络的结构,提高特征提取和融合能力,以提高检测精度。
  2. 检测速度提升: 通过优化算法和硬件加速等方式,进一步提高检测速度,满足实时性要求更高的应用场景。
  3. 小目标检测: 持续改进对小目标的检测效果,提高在复杂场景下对小目标的识别能力。
  4. 多模态融合: 结合其他传感器数据或模态信息,如红外图像、深度信息等,提高检测的准确性和鲁棒性。
  5. 模型压缩和轻量化: 开发更高效的模型压缩技术,使模型在保持高性能的同时,能够在资源受限的设备上运行。
  6. 自适应性和泛化能力: 提高模型对不同数据集和场景的自适应性和泛化能力,减少对大量标注数据的依赖。

提示:这些版本之间的关联在于它们都是在不断改进和优化目标检测算法,以满足不同应用场景的需求。每个版本都继承了前一版本的优点,并针对前一版本的不足进行改进和创新。同时,它们也为后续版本的发展提供了经验和基础。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/412062.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux常见基础命令

Linux基础 初级学习阶段需要了解的知识一、Linux基础命令查阅命令帮助信息1.man2.help Linux命令的基本实用目录操作文件内容操作查看某文件下的用户操作日志压缩和解压缩sudo用户权限操作用户权限操作TOP文件安装 上一篇 VMware安装linux环境 初级学习阶段需要了解的知识 1.…

音视频入门基础:WAV专题(7)——FFmpeg源码中计算WAV音频文件每个packet的size值的实现

一、引言 从文章《音视频入门基础:WAV专题(6)——通过FFprobe显示WAV音频文件每个数据包的信息》中我们可以知道,通过FFprobe命令可以显示WAV音频文件每个packet(也称为数据包或多媒体包)的信息&#xff0…

YOLO环境搭建备忘教程

注:该文本是在完成anaconda、pycharm后进行的过程,请注意! 1、conda下创建一个新环境: conda create -n 环境名称 python版本号 #注意各类代码的具体Python版本号 conda create -n Pysidey6 python3.8.1 #注意:3…

rk3566刷机openWrt

文章目录 说明硬件工具软件工具简介驱动安装运行刷机工具配置bootloader和刷机固件连接设备 设备未识别执行刷机执行效果访问openwrt变砖问题 说明 本教程由csdn缘友一世原创,经过亲身实践总结,可以保证有效性! 硬件工具 Window电脑(windo…

KEYSIGHT是德 Infiniium EXR系列 示波器

Infiniium EXR系列 示波器 苏州新利通 引言 概述 Infiniium EXR系列 出色的信号完整性让信号纤毫毕现 该系列的所有型号都集成了一个 10 位 ADC,并且在所有通道上同时提供 16 GSa/s 的采样率。高分辨率 ADC 的效用取决于示波器的前端底噪是否足够低以提供与之匹…

二叉搜索树进阶之红黑树

前言: 在上文我们已经学习了AVL树的相关知识以及涉及的四种旋转的内容,但是AVL树追求平衡导致旋转操作过多,一些情况下影响性能,由此我们就来了解一下二叉搜索树的另外一个分支,红黑树。 (倘若对旋转知识…

学习笔记——后端项目中的相关技术 【随时更新】

文章目录 1. Session 共享1.0 cookie和session的工作流1.1 Cookie范围1.2 为什么要共享?1.3 如何共享存储1.4 session共享实现 2. 缓存的实现2.1 缓存分类2. 2 Redis 缓存实现2.1.1 Spring data redis(推荐使用)2.1.2 Redis 的数据结构&#…

C++----简单了解vector

大家好,今天我们来讲讲与string相似的向量类型。之所以说他们是相似的原因是他们其中的数据类型有些效果都是一样的。当然大家不能说,既然是差不多的干嘛还有一个这个啊。不如直接用string就可以了。当然世界名言存在即合理。既然我们都能想到的东西&…

金融知识普及月答题活动

金融知识普及月答题活动 关键词:金融安全、风险防范、金融常识、反诈宣传 推荐功能:答题、倡议书 宣传角度: 1. 普及金融知识:讲解货币、信用、利率、汇率等基本金融概念,以及储蓄、贷款、信用卡、保险等常见金融产…

Unity 图表插件Xcharts的一些坑

XY轴、图例文字不清晰。 2种方法解决 1:老套路,先放大再缩小,像素点多了就清晰了。 2:设置一个单独渲染的UI相机,把canvs所在的UI层级使用深度相机单独渲染,另一个选剔除UI的纯色或天空盒。同时,把改Canva…

基于Spring Boot的文字识别系统

前端使用htmlcssjs,后端使用Spring Boot,数据库使用mysql,识别算法有两个,一个是使用百度OCR接口,一个是自己写一个python,用flask包装。 其中百度OCR接口可以去免费申请,然后把appid、apikey、…

Java Web_00001

目录 Web项目介绍网页的组成部分 HTMLHTML简介HTML示例HTML文件的书写规范HTML标签标签介绍标签的语法:常用标签font特殊字符标题标签超链接列表标签img标签表格标签跨行跨列表格iframe框架标签(内嵌窗口)表单标签表单的显示表单格式化表单提交细节 其他标签 CSSCSS…

OpenHarmony轻松玩转GIF数据渲染

OpenAtom OpenHarmony(以下简称“OpenHarmony”)提供了Image组件支持GIF动图的播放,但是缺乏扩展能力,不支持播放控制等。今天介绍一款三方库——ohos-gif-drawable三方组件,带大家一起玩转GIF的数据渲染,搞…

CI/CD实践(五)Jenkins Docker 自动化构建部署Node服务

微服务CI/CD实践系列: 微服务CI/CD实践(一)环境准备及虚拟机创建 微服务CI/CD实践(二)服务器先决准备 微服务CI/CD实践(三)gitlab部署及nexus3部署 微服务CI/CD实践(四&#xff09…

GraphPad Prism下载安装教程怎样中文汉化

GraphPad Prism下载安装教程怎样中文汉化: GraphPad Prism 是一款集生物统计、曲线拟合和科技绘图于一体的软件,主要用于医学和生物科学领域的数据分析和绘图,具有高效、简便、多功能和高质量的特点,被广泛应用于科研、教育和业界…

湖南的智榜样网络安全公司开的培训学校参加学习成为网络安全工程师

学习网络安全可以通过以下步骤进行: 获取基础知识:开始学习网络安全之前,建议先获取一些计算机基础知识,包括计算机网络、操作系统、编程语言等方面的知识。这些基础知识将为你理解和学习网络安全提供必要的背景。 学习网络安全基…

安卓13去掉权限动态申请,默认授权,不用动态申请权限

总纲 android13 rom 开发总纲说明 1、前言 2、问题分析 3.代码处理 4.代码修改 5.编译 6.彩蛋 1、前言

day44——C++对C的扩充

八、C对函数的扩充 8.1 函数重载(overload) 1> 概念 函数重载就是能够实现"一名多用",是实现泛型编程的一种 泛型编程:试图以不变的代码,来实现可变的功能 2> 引入背景 程序员在写函数时&#x…

C++语法基础(二)

C复合类型 结构体 1. C的结构,定义结构体类型的变量时,可以省略struct关键字 2. 可以定义成员函数,在结构体中的成员函数内部可以直接访问本结构体的成员,无需通过“.”或“->” 联合 1. C的联合,定义联合体类型的变…

Linux系统ubuntu20.04 无人机PX4 开发环境搭建(失败率很低)

PX4固件下载 PX4的源码处于GitHub,因为众所周知的原因git clone经常失败,此处从Gitee获取PX4源码和依赖模块。 git clone https://gitee.com/voima/PX4-Autopilot.git 正克隆到 ‘PX4-Autopilot’… remote: Enumerating objects: 454209, done. remot…