初探 YOLOv8(训练参数解析)

文章目录

  • 1、前言
  • 2、Backbone网络
  • 3、YOLOv8模型训练代码
    • 3.1、模型大小选择
    • 3.2、训练参数设置
  • 4、训练参数说明
  • 5、目标检测系列文章

1、前言

YOLO 因为性能强大、消耗算力较少,一直以来都是实时目标检测领域的主要范式。该框架被广泛用于各种实际应用,包括自动驾驶、监控和物流。其高效、准确的物体检测能力使其成为实时识别行人和车辆等任务的理想选择;在物流方面,它有助于库存管理和包裹跟踪,通过 AI 能力帮助人们在很多工作上提高了效率。

目标检测旨在识别图像或视频中的物体并确定它们的位置,常见的目标检测算法:

  1. R-CNN系列(R-CNN、Fast R-CNN、Faster R-CNN):
    • R-CNN(Region-based Convolutional Neural Network): 首次引入了区域建议网络(Region Proposal Network),然后对提议的区域进行分类。
    • Fast R-CNN: 对R-CNN进行了加速,将区域提议和特征提取合并为一个单一的神经网络。
    • Faster R-CNN: 进一步优化,将区域提议网络集成到主干网络中,提高了速度和性能。
  2. YOLO系列(YOLO、YOLOv2、YOLOv3、YOLOv4、YOLOv5):
    • YOLO(You Only Look Once): 通过将图像划分为网格,并在每个网格中同时预测边界框和类别,实现了快速目标检测。
    • YOLOv2(YOLO9000): 引入了Anchor Boxes和Darknet-19网络,提高了性能。
    • YOLOv3: 进一步改进,引入了多尺度预测、跨尺度连接等特性,提高了检测性能。
    • YOLOv4: 引入了CSPNet、PANet等创新,提高了速度和精度。
    • YOLOv5: 通过引入更强大的骨干网络(backbone)和改进的训练策略,进一步提高了性能。
  3. SSD(Single Shot MultiBox Detector):
    • 通过在不同尺度上预测边界框,实现了单次前向传播内的目标检测。
  4. RetinaNet:
    • 引入了Focal Loss,解决了类别不平衡问题,提高了检测性能。
  5. EfficientDet:
    • 结合了EfficientNet的高效网络结构和目标检测任务的特定优化,实现了高性能的目标检测。
  6. Mask R-CNN:
    • 在Faster R-CNN的基础上,增加了对目标实例分割的支持,能够生成每个检测到的物体的二进制掩码。

这些算法具有各自的特点和适用场景,选择合适的算法通常取决于具体的应用需求、计算资源以及性能要求。

Yolov8建立在Yolo系列历史版本的基础上,并引入了新的功能和改进点,以进一步提升性能和灵活性。Yolov8具有以下特点:

  1. 高效性:Yolov8采用了新的骨干网络、新的Ancher-Free检测头和新的损失函数,可在CPU到GPU的多种硬件平台上运行,使得模型在运行速度和准确性方面都表现出色。
  2. 创新性:Yolov8借鉴了Yolov5、Yolov6、YoloX等模型的设计优点,全面提升改进了Yolov5模型结构,同时保持了Yolov5工程化简洁易用的优势。
  3. 易用性:Ultralytics没有直接将开源库命名为Yolov8,而是直接使用"ultralytics",将其定位为算法框架,而非某一个特定算法。这使得Yolov8开源库不仅仅能够用于Yolo系列模型,而且能够支持非Yolo模型以及分类分割姿态估计等各类任务。
  4. 全面性:Yolov8在目标检测、图像分割、姿态估计等任务中都表现出色,成为实现这些任务的最佳选择。

其 Yolov8 网络结构图如下:

在这里插入图片描述

2、Backbone网络

Backbone主干网络是深度卷积神经网络中的关键组成部分,其网络结构是由Darknet网络结构改进而来,被设计用于提取输入图像的特征,可在提高原网络的特征提取能力的同时,加快运行速度。Backbone由三种基本模块构成,包括Conv模块、C2f模块以及空间金字塔池化模块(Spatial Pyramid Pooling-Fast, SPPF)。

Conv模块: 功能多样,由卷积层(conv)、批量归一化层(Batch Normalization,BN)以及SiLU激活函数层三个部分组成。在其运算过程中,首先由卷积层对输入数据进行卷积运算,起到特征提取作用或者降采样作用,再由批量归一化层提高网络的稳定性和收敛速度,最终将激活函数层引入非线性因素并增强网络的表达能力。这些组件共同协作构成了一个可重复堆叠的Conv模块,以实现对图像特征的高效提取和学习。受益于该模块结构的较高普适性,且能作为组成单元构建其他基本模块,被广泛应用各种卷积神经网络中。

在这里插入图片描述

Bottleneck模块: 如下图所示,根据shortcut是否为true,分两种结构执行,Bottleneck_0 中的 shortcut 为 false,Bottleneck_1 中的 shortcut 为true。

在这里插入图片描述

C2f模块: 作为主干网络中主要的特征提取部分,由残差块Bottleneck和Conv模块共同构成。在其运算过程中,先将输入特征图进行11的Conv模块运算,然后经过n块残差块Bottleneck运算,n与YOLOv8模型类型相关。(对于YOLOv8n,在Backbone内的C2f一共4个,沿网络传播方向n值分别为1、2、2、1,Head结构内的C2f,它的n值全设为1)。通过两个卷积模块将输入的特征图转化为高维特征图,并将其与输入特征图进行融合,以保证输入和输出特征图具有相同的通道数,运用Bottleneck残差块可以缓解梯度消失等问题,帮助提高网络的深度,并获取更好的特征提取能力。

在这里插入图片描述
SPPF模块:由Conv模块、MaxPool最大池化模块以及Concat模块组成,是主干网络中的重要的特征提取模块。其借鉴并改进了SPP-Net网络结构中的SPP结构。在运算过程中,首先使用卷积核为1x1的Conv模块对输入特征图运算,然后依次经过3个步长为1,卷积核为55的最大池化层,从而获得特征图上不同尺度上的空间信息,通过Concat模块将得到的空间信息,进行沿特征图通道方向的拼接融合,最后经过卷积核为1x1的Conv模块输出结果。SPPF模块的设计使得模型可以有效地融合不同尺度的空间信息,从而提高了模型对于空间布局和物体变形的鲁棒性。

在这里插入图片描述

3、YOLOv8模型训练代码

我们常用的YOLOv8目标检测模型训练时使用的代码如下:

from ultralytics import YOLO
# 加载官方预训练模型
model = YOLO("yolov8n.pt")  
# 模型训练
results = model.train(data="data.yaml", epochs=100, batch=4)

3.1、模型大小选择

model = YOLO("yolov8n.pt") 表示使用的是v8n模型来训练。如果想使用其他大小的模型,只需要把n改为其他大小的对应字母即可。例如:

model = YOLO("yolov8s.pt")
model = YOLO("yolov8m.pt")
model = YOLO("yolov8l.pt")
model = YOLO("yolov8x.pt")

不同模型参数大小如下,v8n是参数量最小的模型。一般情况下,模型越大,最终模型的性能效果也会越好。可根据自己实际需求选择相应的模型大小进行训练。

3.2、训练参数设置

通过运行model.train(data="data.yaml", epochs=100, batch=4)训练v8模型,其中(data="data.yaml", epochs=100, batch=4)是训练设置的参数,没有添加的训练参数都是使用的默认值。官方其实给出了很多其他相关参数,详细说明见下文。

如果我们需要自己修改其他训练参数,只需要在train后面的括号中加入相应的参数和具体值即可。

例如加上模型训练优化器参数optimizer,其默认值是auto。可设置的值为:SGD, Adam, AdamW, NAdam, RAdam, RMSProp。常用SGD或者AdamW。我们可以直接将其设置为SGD,写法如下:

# 模型训练,添加模型优化器设置
results = model.train(data="data.yaml", epochs=100, batch=4, optimizer='SGD')

4、训练参数说明

YOLOv8 模型的训练设置包括训练过程中使用的各种超参数和配置。这些设置会影响模型的性能、速度和准确性。关键的训练设置包括批量大小、学习率、动量和权重衰减。此外,优化器、损失函数和训练数据集组成的选择也会影响训练过程。对这些设置进行仔细的调整和实验对于优化性能至关重要。以下是官方给出了训练可设置参数和说明:

参数默认值说明
modelNone指定用于训练的模型文件。接受指向 .pt 预训练模型或 .yaml 配置文件。对于定义模型结构或初始化权重至关重要。
dataNone数据集配置文件的路径(例如 coco8.yaml).该文件包含特定于数据集的参数,包括训练数据和验证数据的路径、类名和类数。
epochs100训练总轮数。每个epoch代表对整个数据集进行一次完整的训练。调整该值会影响训练时间和模型性能。
timeNone最长训练时间(小时)。如果设置了该值,则会覆盖 epochs 参数,允许训练在指定的持续时间后自动停止。对于时间有限的训练场景非常有用。
patience100在验证指标没有改善的情况下,提前停止训练所需的epoch数。当性能趋于平稳时停止训练,有助于防止过度拟合。
batch16批量大小,有三种模式:设置为整数(例如,’ Batch =16 ‘), 60% GPU内存利用率的自动模式(’ Batch =-1 ‘),或指定利用率分数的自动模式(’ Batch =0.70 ')。
imgsz640用于训练的目标图像尺寸。所有图像在输入模型前都会被调整到这一尺寸。影响模型精度和计算复杂度。
saveTrue可保存训练检查点和最终模型权重。这对恢复训练或模型部署非常有用。
save_period-1保存模型检查点的频率,以 epochs 为单位。值为-1 时将禁用此功能。该功能适用于在长时间训练过程中保存临时模型。
cacheFalse在内存中缓存数据集图像 (True/ram)、磁盘 (disk),或禁用它 (False).通过减少磁盘 I/O 提高训练速度,但代价是增加内存使用量。
deviceNone指定用于训练的计算设备:单个 GPU (device=0)、多个 GPU (device=0,1)、CPU (device=cpu),或苹果芯片的 MPS (device=mps).
workers8加载数据的工作线程数(每 RANK 多 GPU 训练)。影响数据预处理和输入模型的速度,尤其适用于多 GPU 设置。
projectNone保存训练结果的项目目录名称。允许有组织地存储不同的实验。
nameNone训练运行的名称。用于在项目文件夹内创建一个子目录,用于存储训练日志和输出结果。
exist_okFalse如果为 True,则允许覆盖现有的项目/名称目录。这对迭代实验非常有用,无需手动清除之前的输出。
pretrainedTrue决定是否从预处理模型开始训练。可以是布尔值,也可以是加载权重的特定模型的字符串路径。提高训练效率和模型性能。
optimizer'auto'为训练模型选择优化器。选项包括 SGD, Adam, AdamW, NAdam, RAdam, RMSProp 等,或 auto 用于根据模型配置进行自动选择。影响收敛速度和稳定性
verboseFalse在训练过程中启用冗长输出,提供详细日志和进度更新。有助于调试和密切监控培训过程。
seed0为训练设置随机种子,确保在相同配置下运行的结果具有可重复性。
deterministicTrue强制使用确定性算法,确保可重复性,但由于对非确定性算法的限制,可能会影响性能和速度。
single_clsFalse在训练过程中将多类数据集中的所有类别视为单一类别。适用于二元分类任务,或侧重于对象的存在而非分类。
rectFalse可进行矩形训练,优化批次组成以减少填充。这可以提高效率和速度,但可能会影响模型的准确性。
cos_lrFalse利用余弦学习率调度器,根据历时的余弦曲线调整学习率。这有助于管理学习率,实现更好的收敛。
close_mosaic10在训练完成前禁用最后 N 个epoch的马赛克数据增强以稳定训练。设置为 0 则禁用此功能。
resumeFalse从上次保存的检查点恢复训练。自动加载模型权重、优化器状态和历时计数,无缝继续训练。
ampTrue启用自动混合精度 (AMP) 训练,可减少内存使用量并加快训练速度,同时将对精度的影响降至最低。
fraction1.0指定用于训练的数据集的部分。允许在完整数据集的子集上进行训练,这对实验或资源有限的情况非常有用。
profileFalse在训练过程中,可对ONNX 和TensorRT 速度进行剖析,有助于优化模型部署。
freezeNone冻结模型的前 N 层或按索引指定的层,从而减少可训练参数的数量。这对微调或迁移学习非常有用。
lr00.01初始学习率(即 SGD=1E-2, Adam=1E-3) .调整这个值对优化过程至关重要,会影响模型权重的更新速度。
lrf0.01最终学习率占初始学习率的百分比 = (lr0 * lrf),与调度程序结合使用,随着时间的推移调整学习率。
momentum0.937用于 SGD 的动量因子,或用于 Adam 优化器的 beta1,用于将过去的梯度纳入当前更新。
weight_decay0.0005L2 正则化项,对大权重进行惩罚,以防止过度拟合。
warmup_epochs3.0学习率预热的历元数,学习率从低值逐渐增加到初始学习率,以在早期稳定训练。
warmup_momentum0.8热身阶段的初始动力,在热身期间逐渐调整到设定动力。
warmup_bias_lr0.1热身阶段的偏置参数学习率,有助于稳定初始历元的模型训练。
box7.5损失函数中边框损失部分的权重,影响对准确预测边框坐标的重视程度。
cls0.5分类损失在总损失函数中的权重,影响正确分类预测相对于其他部分的重要性。
dfl1.5分布焦点损失权重,在某些YOLO 版本中用于精细分类。
pose12.0姿态损失在姿态估计模型中的权重,影响着准确预测姿态关键点的重点。
kobj2.0姿态估计模型中关键点对象性损失的权重,平衡检测可信度与姿态精度。
label_smoothing0.0应用标签平滑,将硬标签软化为目标标签和标签均匀分布的混合标签,可以提高泛化效果。
nbs64用于损耗正常化的标称批量大小。
overlap_maskTrue决定在训练过程中分割掩码是否应该重叠,适用于实例分割任务。
mask_ratio4分割掩码的下采样率,影响训练时使用的掩码分辨率。
dropout0.0分类任务中正则化的丢弃率,通过在训练过程中随机省略单元来防止过拟合。
valTrue可在训练过程中进行验证,以便在单独的数据集上对模型性能进行定期评估。
plotsFalse生成并保存训练和验证指标图以及预测示例图,以便直观地了解模型性能和学习进度。

常用的几个训练参数是数据集配置文件data训练轮数epochs训练批次大小batch训练使用的设备device,模型优化器optimizer初始学习率lr0

5、目标检测系列文章

  1. YOLOv5s网络模型讲解(一看就会)
  2. 生活垃圾数据集(YOLO版)
  3. YOLOv5如何训练自己的数据集
  4. 双向控制舵机(树莓派版)
  5. 树莓派部署YOLOv5目标检测(详细篇)
  6. YOLO_Tracking 实践 (环境搭建 & 案例测试)
  7. 目标检测:数据集划分 & XML数据集转YOLO标签
  8. DeepSort行人车辆识别系统(实现目标检测+跟踪+统计)
  9. YOLOv5参数大全(parse_opt篇)
  10. YOLOv5改进(一)-- 轻量化YOLOv5s模型
  11. YOLOv5改进(二)-- 目标检测优化点(添加小目标头检测)
  12. YOLOv5改进(三)-- 引进Focaler-IoU损失函数
  13. YOLOv5改进(四)–轻量化模型ShuffleNetv2
  14. YOLOv5改进(五)-- 轻量化模型MobileNetv3
  15. YOLOv5改进(六)–引入YOLOv8中C2F模块
  16. YOLOv5改进(七)–改进损失函数EIoU、Alpha-IoU、SIoU、Focal-EIOU
  17. YOLOv5改进(八)–引入Soft-NMS非极大值抑制
  18. YOLOv5改进(九)–引入BiFPN模块
  19. 基于YOLOv10的车辆统计跟踪与车速计算应用

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

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

相关文章

探索音频创作的无限可能——Studio One 5 软件深度解析

Studio One 5 是一款功能强大且备受赞誉的音频制作软件,无论是专业音乐制作人还是业余爱好者,都能在其中找到满足自己需求的强大功能。 对于 Mac 和 Windows 用户来说,Studio One 5 提供了一个直观且友好的操作界面。其简洁明了的布局让用户…

Windows的内核对象

内核对象句柄特定于进程。 也就是说,进程必须创建 对象或打开现有对象以获取内核对象句柄。 内核句柄上的每个进程限制为 2^24。 但是,句柄存储在分页池中,因此可以创建的实际句柄数取决于可用内存。 可以在 32 位 Windows 上创建的句柄数明显低于 2^24。 任何进程都可以为…

Haproxy负载均衡集群

一、HAProxy介绍 HAProxy是法国开发者威利塔罗(Willy Tarreau)在2000年使用C语言开发的一个开源软件,是一款具备高并发(一万以上)、高性能的TCP和HTTP负载均衡器,支持基于cookie的持久性,自动故障切换,支持正则表达式及web状态统…

【Python】易错题 [1]

目录 一、选择: 1.列表的复制​编辑 2.函数 二、填空 一、选择: 1.列表的复制 在Python中,列表是可变的数据类型。当将一个列表赋值给另一个变量时,实际上是将这个变量的引用指向原始列表。(指针)因此&…

【FFmpeg】avformat_alloc_output_context2函数

【FFmpeg】avformat_alloc_output_context2函数 1.avformat_alloc_output_context21.1 初始化AVFormatContext(avformat_alloc_context)1.2 格式猜测(av_guess_format)1.2.1 遍历可用的fmt(av_muxer_iterate&#xff0…

TEMU全/半托管订单如何避免错发/漏发?用妙手ERP扫描发货功能!

这两年,因为全托管/半托管模式的火爆,跨境卖家纷纷加入全托管和半托管,许多卖家在加入后,店铺频频爆单。 以为是泼天富贵,没想到却因为发货问题亏麻了:发货效率低,导致超过平台发货时效&#x…

第30课 绘制原理图——放置网络标签

什么是网络标签? 我们在很多电路图中都能看到,为了让图纸更加简洁,并不是每一根导线都要确确实实地画出来。可以在导线悬空的一端添加一个名称标签,接着在另一根导线的悬空一端添加上一个同名的名称标签,那么就可以让…

Qt 基于FFmpeg的视频播放器 - 播放、暂停以及拖动滑动条跳转

Qt 基于FFmpeg的视频转换器 - 播放、暂停以及拖动进度条跳转 引言一、设计思路二、核心源码以及相关参考链接 引言 本文基于FFmpeg,使用Qt制作了一个极简的视频播放器. 相比之前的版本,加入了播放、暂停、拖动滑动条跳转功能,如上所示 (左图)…

SpringSecutrity原理

一、基于RBAC实现的权限管理通常需要涉及以下几张表: 1. 用户表(user):记录系统中的所有用户,包括用户ID、用户名、密码等信息。 2. 角色表(role):记录系统中的所有角色&#xff0…

基于51单片机太阳能风能风光互补路灯控制器

一.硬件方案 本设计由STC89C52单片机电路太阳能电池板电路风机发电电路锂电池充电保护电路升压电路稳压电路光敏电阻电路4位高亮LED灯电路2档拨动开关电路电源电路设计而成。 二.设计功能 (1)采用风机和太阳能电池板给锂电池充电,具有充电…

系统架构设计师 - 数据库系统(2)

数据库系统 数据库系统规范化理论 ★ ★ ★ ★ ★函数依赖求候选键Armstrong公理范式判断第一范式 1NF第二范式 2NF第三范式 3NFBC 范式 BCNF 模式分解保持函数依赖分解无损分解 并发控制 ★事务的 ACID 特性并发存在的问题并发解决方案 - 封锁协议 数据库的安全性 ★安全性的分…

十三、Maven(1)

🌻🌻目录 一、maven价绍二、maven的功能1、项目自动化构建2、管理jar、war包3、实现项目结构设计 三、maven安装1、maven的安装环境需要jdk2、Maven的安装路径中不能出现中文和空格3、压缩包解压即可4、配置环境变量 四、maven的仓库1. Maven仓库配置2. …

选型手册:Bosch Sensortec 博世 微机电系统(MEMS)传感器和方案

前言 博世传感器公司(Bosch Sensortec) 是全球领先的微机电系统(MEMS)传感器和解决方案供应商。公司成立于2005年,是德国罗伯特博世有限公司(Robert Bosch GmbH)旗下的全资子公司。博世传感器公…

SpringBoot【3】集成 Swagger

SpringBoot 集成 Swagger 前言pom.xml 配置文件application.yml 配置文件config 包Swagger2Config entity 包UserEntity service 包impl 包SwaggerServiceImpl SwaggerService controller 包SwaggerController SwaggerApplication验证 前言 创建项目步骤、及版本选择等&#x…

展开说说:Android列表之RecyclerView

RecyclerView 它是从Android5.0出现的全新列表组件,更加强大和灵活。用于显示列表形式 (list) 或者网格形式 (grid) 的数据,替代ListView和GridView成为Android主流的列表组件。可以说Android客户端只要有表格的地方就有RecyclerView。 RecyclerView 内…

VCS编译bug汇总

‘typedef’ is not expected to be used in this contex 注册前少了分号。 Scope resolution error resolution : 声明指针时 不能与类名同名,即 不能声明为adapter. cannot find member "type_id" 忘记注册了 拼接运算符使用 关键要加上1b&#xff0…

[MySQL]购物管理系统—简略版

本文内容需以MySQL支持 特别感谢baidu comate AI提供的少量虚拟数据 0.建库(建立数据库——utf8字符集,utf8_general_ci排序规则) 1.此项目ER图如下 2.DDLDML(共九表,27数据) SET FOREIGN_KEY_CHECKS 0;DROP TABLE IF EXISTS goods; CREATE TABLE g…

前端vue-cli相关知识与搭建过程(项目创建,组件路由)very 详细

一.关于vue-cli 1.什么是vue Vue (读音 /vju ː /,类似于 view) 是一套用于构建用户界面的渐进式框架。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。 Vue.js 是前端的主流框架之一,和 Angular.js…

【公开数据集获取】

Open Images Dataset https://www.youtube.com/watch?vdLSFX6Jq-F0

【M365运维】Outlook和Teams里不显示用户的组织架构

【问题】 由于一些误操作,把用户账户禁用并重新启用后,发现在Outlook和Teams里无法查看用户的组织结构图了。如下图所示: - 在Outlook 里,用户标签页的组织一直显示“正在加载...",成员身份也是“找不到任何组。…