【YOLO系列】YOLO算法改进史

news2024/11/15 19:51:25

目录

  • 前言
  • 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.coloradmin.cn/o/2086234.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Kali的相关学习、永恒之蓝漏洞(MS17-010)、ms12-020漏洞(蓝屏攻击)

学习任务 熟悉kali网络配置,nat模式和桥接模式 熟悉nmap使用 熟悉msfconsole使用 熟练掌握如何利用ms17-010,ms08_067 kali网络配置 资料:07-网络安全-kail linux 网络配置(基础篇) - Jaoany - 博客园 (cnblogs.…

[mysql]Navicat_SQLyog_dbeaver等mysql图形工具的安装和使用

mysql图形工具 虽然我们说学习mysql我们要学会基本的在linux里学习的指令,但是即便如此我们也可以利用工具的卸载,不一定非要用命令行,工具的作用就是给我们操作用的,显的很牛非得命令行,没有必要。常用的图形化管理工…

Vue——认识day04_计算属性(案例:实时预览)

目录 1.计算属性之姓名案例之插值语法的实现 2.计算属性之姓名案例之methods语法的实现 3.计算属性之姓名案例之计算属性语法的实现 4.计算属性的简写方式 1.计算属性之姓名案例之插值语法的实现 代码示例&#xff1a; <!DOCTYPE html> <html lang"en"…

逆向工程、Spring框架IOC、AOP学习

系列文章目录 第一章 基础知识、数据类型学习 第二章 万年历项目 第三章 代码逻辑训练习题 第四章 方法、数组学习 第五章 图书管理系统项目 第六章 面向对象编程&#xff1a;封装、继承、多态学习 第七章 封装继承多态习题 第八章 常用类、包装类、异常处理机制学习 第九章 集…

linux服务器/虚拟机安装redis

py3安装&#xff08;慢的一批无语了&#xff09; wget http://cdn.npm.taobao.org/dist/python/3.6.5/Python-3.6.5.tgz && tar -zxvf Python-3.6.5.tgz && cd Python-3.6.5/ && ./configure --prefix/usr/local/python3 --with-ssl && make …

重磅!预读 New feature 提升再次提升20%+性能

在7月底发布的MogDB 5.0.8版本中&#xff0c;引入了几个新特性&#xff0c;其中的预读功能又将全表扫描能力提升了至少20%。 什么是MogDB 预读功能 数据库中的数据是按照一个个页面进行组织管理的&#xff0c;CPU以页面为单位对数据进行处理&#xff0c;这就使得CPU处理和I/O之…

AI模型:全能与专精的较量与未来潜力探讨

AI模型&#xff1a;追求全能还是专精&#xff1f; 随着人工智能技术的飞速发展&#xff0c;AI模型逐渐成为各个领域的焦点。近日&#xff0c;OpenAI即将推出的“草莓”模型&#xff0c;以其全能型的特点引起了广泛关注。在这篇文章中&#xff0c;我们将探讨全能型AI与专精型AI…

第十三章、 泛型

第十三章、 泛型 13.1 泛型语法 13.1.1 泛型的引入与入门 看一个需求 &#xff08;1&#xff09;. 请编写程序&#xff0c;在ArrayList中&#xff0c;添加3个Dog对象 &#xff08;2&#xff09;. Dog对象含有name和age&#xff0c;并输出name和age&#xff08;要求使用getXx…

IPv6和IPv4的主要区别

地址变化与转换&#xff1a; IPv6 二进制数有 128 位&#xff0c;IPv6 使用十六进制表示&#xff0c;中间使用 : 分隔。 简写&#xff1a; 将前面连续的 0 &#xff0c;使用 :: 表示。缩写只能使用一次&#xff0c;而且缩头不缩尾。 首部&#xff1a; 地址划分&#xff1a; IPv…

WEB:探索富文本编辑器的详细指南

请关注微信公众号&#xff1a;拾荒的小海螺 博客地址&#xff1a;http://lsk-ww.cn/ 1、简述 富文本编辑器&#xff08;Rich Text Editor, RTE&#xff09;是一种允许用户在不需要编写HTML或CSS代码的情况下创建和编辑复杂文本内容的工具。无论是博客平台、内容管理系统&…

pnpm 查看库的所有版本

1、最近在做图布局的时候&#xff0c;发现默认版本是beta版 2、那么我们如何来查看远程库中有什么版本可以安装呢&#xff1f; 3、使用命令&#xff1a; pnpm view antv/layout versions pnpm view 这里替换成要查看的库名 versions

Flutter-->自定义容器Widget(类比Android自定义ViewGroup)

上一篇Flutter–&#xff1e;自定义Widget(类比Android自定义View) 介绍了如何自定义一个Widget, 这一篇文章介绍如果自定义容器Widget, 相当于Android中的ViewGroup Android自定义ViewGroup 先来简单介绍一下Android中自定义的ViewGroup: class CustomViewGroup(context: …

树上dp+分组背包类问题

今天也是无意间看到了一个树上dp分组背包类的问题&#xff0c;有些难度的&#xff0c;不好想的嘞&#xff0c;终究还是一个蒟蒻罢了&#xff0c;唔无捂误 话不多说直接看题 P1273 有线电视网 在说明这道题之前&#xff0c;还有一个要提醒的地方就是&#xff0c;树上dp&#…

在 DataOps 体系建设中,主动元数据是何角色?

首先&#xff0c;主动元数据是相对静态元数据而言&#xff0c;它是一种动态、智能化的元数据管理技术&#xff0c;能够将传统静态元数据的被动等待变为实时在线、主动触发&#xff0c;推动数据探查、开发、测试、部署、运维和监控等数据治理工作高效运转&#xff0c;为数据的治…

springWeb介绍、以及SpringWeb的搭建

ssm框架 早期 ssm springstrtuts2mybatis 现在 ssm springspringwebmybatis springweb运行流程 1、SpringWeb概述 SpringWeb是spring框架中的一个模块&#xff0c;基于Servlet API构建的web框架&#xff0c;springweb是Spring为web层开发提供的一套完备的解决方案。在we…

Java毕业设计 基于SSM校园心理咨询服务平台

Java毕业设计 基于SSM校园心理咨询服务平台 SSM 校园心理咨询服务平台 功能介绍 学生: 注册 登录 首页 心理测试 心理文章 心理导师 在线交流 关于我们 搜索 学生中心 我的咨询问题 我的测试结果 我的预约 我的发言 我的收藏 账户信息 教师&#xff1a;登录 发布文…

Linux——nginx 负载均衡

常规的web服务器一般提供对于静态资源的访问&#xff0c;比如说&#xff1a;图片、web样式 网站提供的大部分交互功能都需要web编程语言的支持&#xff0c;而web服务对于程序的调用&#xff0c;不管编译型语言还是解释型语言&#xff0c;web服务同将对于应用程序的调用递交给通…

音频变声怎么弄?(实测好用)快来试试这6个AI变声工具

音频变声怎么弄&#xff1f;随着短视频平台和社交平台的发展&#xff0c;很多小伙伴们会自己拍摄视频分享到平台上&#xff0c;还有一些视频创作者会制作有趣的视频吸引观众。而视频配音就是锦上添花&#xff0c;很多人觉得自己的声音不好听&#xff0c;想要实现录音音频变声&a…

结合ollama gemma2:2b大模型来实现数据分析系统的智能交互

在最近的人员风险行为分析系统开发过程中&#xff0c;需要解决一个问题&#xff1a;在缺乏GPU资源的情况下&#xff0c;如何提升智能交互能力。​我们探索并研究了集成gemma2:2b模型的可行性&#xff0c;这一举措旨在在有限的硬件条件下&#xff0c;为我们的系统注入更高级别的…

如何理解进程

一、进程的概念 进程&#xff1a;顾名思义&#xff0c;就是一个完整执行程序的过程。没错&#xff0c;就是这么简单&#xff0c;但是在程序执行的过程之中&#xff0c;系统会为这个执行的程序分配内存资源&#xff0c;这些过程也包含在进程当中。 进程是动态的&#xff0c;是程…