YOLOv8目标检测(三*)_最佳超参数训练
YOLOv8目标检测(一)_检测流程梳理:YOLOv8目标检测(一)_检测流程梳理_yolo检测流程-CSDN博客
YOLOv8目标检测(二)_准备数据集:YOLOv8目标检测(二)_准备数据集_yolov8 数据集准备-CSDN博客
YOLOv8目标检测(三)_训练模型:YOLOv8目标检测(三)_训练模型_yolo data.yaml-CSDN博客
YOLOv8目标检测(三*)_最佳超参数训练:YOLOv8目标检测(三*)_最佳超参数训练_yolo 为什么要选择yolov8m.pt进行训练-CSDN博客
YOLOv8目标检测(四)_图片推理:YOLOv8目标检测(四)_图片推理-CSDN博客
YOLOv8目标检测(五)_结果文件(run/detrct/train)详解:YOLOv8目标检测(五)_结果文件(run/detrct/train)详解_yolov8 yolov8m.pt可以训练什么-CSDN博客
YOLOv8目标检测(六)_封装API接口:YOLOv8目标检测(六)_封装API接口-CSDN博客
YOLOv8目标检测(七)_AB压力测试:YOLOv8目标检测(七)_AB压力测试-CSDN博客
官方文档参考:超参数调整 -Ultralytics YOLO 文档
为什么要最佳超参数训练?
简单来说:
进行最佳超参数训练(Hyperparameter Optimization,HPO)是为了提高模型的性能,确保其在目标任务上的表现尽可能优异。
具体原因如下:
1.提升模型性能
(1)更高的准确性:通过调优学习率、权重衰减、批量大小等超参数,可以显著提高模型的准确性。
(2)更好的泛化能力:合适的超参数能够帮助模型在未见过的数据上表现更好,避免过拟合或欠拟合。
2.加快收敛速度
通过选择合适的学习率等超参数,模型的训练过程可以更快地收敛,从而节省训练时间和计算资源。
3.避免过拟合或欠拟合
超参数如正则化参数、数据增强策略、学习率衰减等会影响模型的复杂度和训练过程,优化这些参数有助于找到合适的平衡点。
4.适配特定任务或数据集
每个任务或数据集都有其独特的特点,默认的超参数可能不适合特定的应用场景。通过超参数搜索,可以为具体的任务定制训练流程。
5.优化资源使用
超参数优化能够找到在性能与计算资源之间的最佳平衡点。例如,通过调节批量大小、网络宽度或深度,可以降低显存占用,同时维持或提升模型性能。
注:笔者首先对数据进行了训练集和验证集的切分,用验证集数据寻找最佳超参数,得到参数后,再把全部数据进行训练。
一、修改脚本
(1)修改model路径
推荐使用yolov8m.pt或者yolov8n.pt等下载好的权重文件。
(2)修改model.tune参数
微调模型参数。
以下代码作用是加载 YOLOv8 的预训练模型,并使用其 tune 方法对指定数据集进行微调。
import warnings
warnings.filterwarnings('ignore')
from ultralytics import YOLOif __name__ == '__main__':model = YOLO('/usr/src/ultralytics/ultralytics/yolov8m.pt') # 需要修改#model.load('yolov8n.pt') # loading pretrain weightsmodel.tune(data=r'/usr/src/ultralytics/ultralytics/phone.yaml', # 需要修改# 如果任务是其它的,找到'ultralytics/cfg/default.yaml'修改task可以改成detect, segment, classify, pose# cache=False,imgsz=640,epochs=50,# single_cls=False, # 是否是单类别检测# batch=4,# close_mosaic=10,# workers=0,device='0',# optimizer='SGD', # resume='', # 续训设置last.pt的地址# amp=False, # 如果出现训练损失为Nan可以关闭ampproject='runs/train',# val=False, #注释false相当属于val=Trueiterations=100,name='exp',)
model.tune参数详细解释
1)data
-
数据集配置文件的路径,是一个
.yaml
文件。 -
该文件包含训练集和验证集的路径,以及类别标签信息。例如:
# 数据集路径和类别数 train: /path/to/dataset/train/images # 训练集的图片路径 val: /path/to/dataset/val/images # 验证集的图片路径names: ['class1','class2','class3']nc: 3 # 类别数,与 names 的总数一致
2)imgsz
- 输入图像的尺寸,默认值是
640
。 - 表示将图像缩放到
640x640
的大小后再进行训练或推理。
3)epochs
- 训练的轮次。
- 模型会在数据集上迭代指定的次数,可以根据实验需求调整。
4)device
- 指定训练使用的设备,例如:
'0'
:使用 GPU 0 进行训练。'cpu'
:使用 CPU。
- 如果有多块 GPU,可以指定多个,例如
device='0,1'
。
5)project
- 保存训练结果的路径,默认是
runs/train
。 - 所有实验的模型权重、日志、结果图片等会存储在这个目录下。
6)iterations
- 每个 epoch 中完成的迭代次数,决定了一轮训练中数据加载的批次总量。
- 如果数据集较大,可以增加迭代次数,以确保每轮训练更充分。
7)name
- 当前实验的名字,用于区分不同实验。
- 实验结果会保存在
project
指定路径下的exp
文件夹中,例如runs/train/exp
。
8)cache
- 是否将数据加载到内存中以加速训练。
- 如果注释掉,默认值为
False
。 - 设置为
True
可以提升加载速度,但会占用大量内存。
9)single_cls
- 如果数据集中只有一个类别,可以设置为
True
。 - 适合单类别检测任务,例如仅检测某一特定物体。
10)batch
- 每次训练使用的样本数量(批次大小)。
- 批次大小越大,对显存要求越高,通常调整到显存能承受的最大值。
11)close_mosaic
- 控制 Mosaic 数据增强的关闭周期。
- Mosaic 是一种将多个图像拼接为一张训练样本的方法,默认在训练后期关闭以稳定模型。
12)workers
- 数据加载的线程数。
- 设置为
0
表示不使用多线程加载数据。 - 如果设置更高的值,可以加快数据加载,但对 CPU 性能有要求。
13)optimizer
- 优化器的选择,默认是 Adam。
- 可选值包括
'SGD'
、'Adam'
等。
14)resume
- 用于续训的设置。
- 如果有中断的训练,可以通过指定
last.pt
的路径继续训练。
15)amp
- 是否启用混合精度训练(Automatic Mixed Precision)。
- 默认为
True
,可以提升训练速度并减少显存占用。 - 如果训练过程中出现
NaN
错误,可以关闭它。
16)val
- 是否在训练过程中进行验证。
- 如果注释掉
val=False
,相当于默认开启验证(val=True
)。
二、运行脚本
python train_tune.py
三、查看最佳结果
(1)查看结果文件
训练完成后保存在hyptune_result_tune中,文件夹内容如下
1)weights中存放着权重文件。
2)best_hyperparameters.yaml存放着训练的最佳参数。
3)tune_fitness.png展示了超参数优化过程中,目标函数( fitness 值)的变化趋势。
这是一幅显示适应度(通常是 AP50 这样的性能指标)与迭代次数的对比图。它可以帮助你直观地了解遗传算法在一段时间内的表现。
什么是fitness?
fitness是衡量模型性能的综合指标,一般是是基于多个评价指标(如精确率、召回率、mAP 等)的加权和。
4)tune_results.csv
部分数据如下
fitness | lr0 | lrf | momentum | weight_decay | warmup_epochs | warmup_momentum | box | cls | dfl | hsv_h | hsv_s | hsv_v | degrees | translate | scale | shear | perspective | flipud | fliplr | mosaic | mixup | copy_paste |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0.7561 | 0.01074 | 0.01092 | 0.87809 | 0.0005 | 5 | 0.6645 | 3.81906 | 0.52678 | 2.53135 | 0.01114 | 0.351 | 0.22014 | 0 | 0.07474 | 0.59202 | 0 | 0 | 0 | 0.26175 | 1 | 0 | 0 |
0.75352 | 0.01074 | 0.01311 | 0.88108 | 0.00048 | 4.6469 | 0.60231 | 3.81906 | 0.43861 | 2.57052 | 0.01134 | 0.39181 | 0.22014 | 0 | 0.07474 | 0.66259 | 0 | 0 | 0 | 0.27737 | 0.82468 | 0 | 0 |
0.76364 | 0.00915 | 0.0102 | 0.88694 | 0.00044 | 3.79998 | 0.54519 | 3.57381 | 0.57831 | 2.5339 | 0.01114 | 0.33132 | 0.21189 | 0 | 0.07475 | 0.54387 | 0 | 0 | 0 | 0.26416 | 1 | 0 | 0 |
0.75078 | 0.00915 | 0.0102 | 0.88697 | 0.00044 | 3.80256 | 0.54519 | 3.57242 | 0.57854 | 2.53504 | 0.01114 | 0.33132 | 0.21198 | 0 | 0.07476 | 0.54405 | 0 | 0 | 0 | 0.26416 | 1 | 0 | 0 |
0.76293 | 0.00928 | 0.00811 | 0.86524 | 0.00042 | 3.79998 | 0.54854 | 3.67781 | 0.57831 | 2.4856 | 0.01166 | 0.29207 | 0.23139 | 0 | 0.06951 | 0.59062 | 0 | 0 | 0 | 0.23951 | 0.97602 | 0 | 0 |
CSV文件,包含调整过程中每次迭代的详细结果。文件中的每一行代表一次迭代,包括适配度得分、精确度、召回率等指标,以及使用的超参数。
5)tune_scatter_plots.png
这个图文件展示了超参数与目标性能指标的关系。
请注意,初始化为 0 的超参数将不会被调整,如degrees、shear、persprctive、flipud、mixup、copy_paste。
(2)查看最佳参数
查看best_hyperparameters.yaml文件,如下图
四、使用最佳超参数训练
复制修改训练的yaml文件(:改为=)
#修改前训练命令
yolo task=detect mode=train model=yolov8m.yaml data=./data.yaml pretrained=/data/yolov8m.pt imgsz=640 save=True epochs=400 patience=50 resume=True device=0
#修改后训练命令
yolo task=detect mode=train model=yolov8m.yaml data=./data.yaml pretrained=/data/yolov8m.pt imgsz=640 save=True epochs=400 patience=50 resume=True device=0 lr0=0.00976 lrf=0.01153 momentum=0.93626 weight_decay=0.00018 warmup_epochs=4.85722 warmup_momentum=0.95 box=4.18836 cls=0.66206 dfl=2.35773 hsv_h=0.00929 hsv_s=0.25334 hsv_v=0.15979 degrees=0.0 translate=0.09706 scale=0.69983 shear=0.0 perspective=0.0 flipud=0.0 fliplr=0.26921 mosaic=0.97292 mixup=0.0 copy_paste=0.0
注意:训练命令添加最佳超参数后,data.yaml文件别忘了修改成完整的数据集,笔者是先用小部分数据找最佳超参数,再训练完整数据集。
恭喜你学会了如何找到最佳超参数,并使用其进行训练!
相关文章:

YOLOv8目标检测(三*)_最佳超参数训练
YOLOv8目标检测(一)_检测流程梳理:YOLOv8目标检测(一)_检测流程梳理_yolo检测流程-CSDN博客 YOLOv8目标检测(二)_准备数据集:YOLOv8目标检测(二)_准备数据集_yolov8 数据集准备-CSDN博客 YOLOv8目标检测(三)_训练模型:YOLOv8目标检测(三)_训…...

SpringBoot SPI
参考 https://blog.csdn.net/Peelarmy/article/details/106872570 https://javaguide.cn/java/basis/spi.html#%E4%BD%95%E8%B0%93-spi SPI SPI(service provider interface)是JDK提供的服务发现机制。以JDBC为例,JDK提供JDBC接口,在包java.sql.*。MY…...

uniappp配置导航栏自定义按钮(解决首次加载图标失败问题)
1.引入iconfont的图标,只保留这两个文件 2.App.vue引入到全局中 import "./static/fonts/iconfont.css"3.pages.json中配置text为图标对应的unicode {"path": "pages/invite/invite","style": {"h5": {"…...

【Apache paimon】-- 集成 hive3.1.3 异常
目录 1、场景再现 Step1:在 hive cli beeline 执行创建 hive paimon 表 Step2:使用 insert into 写入数据 Step3:抛出异常 2、原因分析 Step1:在 yarn resource manager 作业界面查询 hive sql mr job 的 yarn log Step2:搜索job 使用的 zstd jar 版本 Step3:定…...

基于docker部署Nacos最新版本-国内稳定镜像
介绍 当前微服务架构常用的配置中心,本文推荐的是阿里云开源的nacos,截止发布本文为止,最新的nacos稳定版本为2.4.3 拉取镜像 //这个是国内目前可以下载的成熟的nacos镜像仓库,默认的docker hub需要不断的翻墙才可以下载 docke…...

云计算中的Hive操作详解
文章目录 云计算中的Hive操作详解一、引言二、Hive的基本操作1、创建表2、导入数据3、数据查询4、分区表操作 三、使用示例1、字符串处理函数2、数据类型转换 四、总结 云计算中的Hive操作详解 一、引言 Hive是云计算中一个非常重要的组件,它是基于Hadoop的一个数…...

UE4_控件蓝图_制作3D生命血条
一:效果图如下: 二、实现步骤: 1、新建敌人 右键蓝图类 选择角色, 重命名为BP_Enemytest。 双击打开,配置敌人网格体 修改位置及朝向 效果如下: 选择合适的动画蓝图类: 人物就有了动作&#x…...

11篇--图像边缘检测
图像梯度 要学习图像边缘检测,要先了解图像梯度的概念,我们正是通过梯度值来区分边缘像素点的 处于边缘附近的像素点与周围像素点的差距很大(不然不会有边缘呈现),所以给边缘附近的的梯度之变化很快,通过…...

宝塔SSL证书申请失败,报错:申请SSL证书错误 module ‘OpenSSL.crypto‘ has no attribute ‘sign‘(已解决)
刚安装宝塔申请SSL就报错:申请SSL证书错误 module OpenSSL.crypto has no attribute sign 面板、插件版本:9.2.0 系统版本:Alibaba Cloud Linux 3.2104 LTS 问题:申请SSL证书错误 module OpenSSL.crypto has no attribute sign…...

(已开源) 详解4D Radar数据集K-Radar
本文介绍一个4D Radar公开数据集:KAIST-Radar(简称K-Radar,由AVELab提供)是一个新型的大规模目标检测数据集和基准测试集,包含35000帧4D雷达张量(4DRT)数据。本文主要贡献有: 本文提…...

基于RK3588机器人控制器+3D视觉传感器的送餐机器人解决方案
送餐机器人 通过搭载3D视觉传感器信迈机器人控制器,送餐机器人可以在复杂的餐厅环境中灵活避障通行,极大地提升餐品配送效率,改善用户用餐体验,并显著降低店家经营成本。 高峰期送餐难,曾一直是送餐机器人的行业痛点。…...

基于Qwen2-VL模型针对LaTeX OCR任务进行微调训练 - 数据处理
基于Qwen2-VL模型针对LaTeX OCR任务进行微调训练 - 数据处理 flyfish 基于Qwen2-VL模型针对LaTeX_OCR任务进行微调训练_-_LoRA配置如何写 基于Qwen2-VL模型针对LaTeX_OCR任务进行微调训练_-_单图推理 基于Qwen2-VL模型针对LaTeX_OCR任务进行微调训练_-_原模型_单图推理 基于Q…...

Microi吾码|开源低代码.NET、VUE低代码项目,表单引擎介绍
Microi吾码|开源低代码.NET、VUE低代码项目,表单引擎介绍 一、摘要二、Microi吾码介绍2.1 功能介绍2.2 团队介绍2.3 上线项目案例 三、Microi吾码表单引擎是什么?四、Microi吾码表单引擎功能4.1 模块引擎 - 由表单引擎驱动4.2 流程引擎 - 由表…...

[Ubuntu] Linux命令收集
1、移动文件夹内的所有文件和子文件夹: 如果你想移动一个文件夹内的所有内容到另一个目录,但不移动该文件夹本身,你可以使用以下命令: 源:/home/ubuntu/www/demo/web下的所有文件及文件夹; 目标…...

鸿蒙应用ArkTS开发-利用axios进行网络请求(实现前后端交互)
引言: 我们上一章实现了简单的登录注册页面,今天小编来带着大家实现完整的登录注册功能。 一、后端的搭建 Spring Boot介绍:Spring Boot是一个用于简化Spring应用程序开发的开源框架。它通过自动配置、内置服务器和预设的最佳实践࿰…...

【开源】使用环信UIKit for uniapp 做一个IM即时聊天应用
环信单群聊 UIKit 是基于环信即时通讯云 IM SDK 开发的一款即时通讯 UI 组件库,提供各种组件实现会话列表、聊天界面、联系人列表及后续界面等功能,帮助开发者根据实际业务需求快速搭建包含 UI 界面的即时通讯应用。 本文教大家使用环信 uniapp UIKit 快…...

计算机网络知识点全梳理(一.TCP/IP网络模型)
目录 TCP/IP网络模型概述 应用层 什么是应用层 应用层功能 应用层协议 传输层 什么是传输层 传输层功能 传输层协议 网络层 什么是网络层 网络层功能 网络层协议 数据链路层 什么是数据链路层 数据链路层功能 物理层 物理层的概念和功能 写在前面 本系列文…...

神州数码DCME-320 online_list.php存在任意文件读取漏洞
免责声明: 本文旨在提供有关特定漏洞的深入信息,帮助用户充分了解潜在的安全风险。发布此信息的目的在于提升网络安全意识和推动技术进步,未经授权访问系统、网络或应用程序,可能会导致法律责任或严重后果。因此,作者不对读者基于本文内容所采取的任何行为承担责任。读者在…...

神经网络基础-神经网络搭建和参数计算
文章目录 1.构建神经网络2. 神经网络的优缺点 1.构建神经网络 在 pytorch 中定义深度神经网络其实就是层堆叠的过程,继承自nn.Module,实现两个方法: __init__方法中定义网络中的层结构,主要是全连接层,并进行初始化。…...

Linux入门攻坚——41、Linux集群系统入门-lvs(2)
lvs-dr:GATEWAY Director只负责请求报文,响应报文不经过Director,直接由RS返回给Client。 lvs-dr的报文路线如上图,基本思路就是报文不会回送Director,第①种情况是VIP、DIP、RIP位于同一个网段,这样&…...

音视频入门基础:MPEG2-TS专题(17)——FFmpeg源码中,解析TS program map section的实现
一、引言 由《音视频入门基础:MPEG2-TS专题(16)——PMT简介》可以知道,PMT表(Program map table)由一个或多个段(Transport stream program map section,简称TS program map sectio…...

了解https原理,对称加密/非对称加密原理,浏览器与服务器加密的进化过程,https做了些什么
最开始的加密 浏览器与服务器之间需要防止传输的数据被黑客破解。因此,浏览器在发送数据时会对数据进行加密,并把加密的密钥(或密钥的某些部分)放在数据的某一个区域中。服务器收到数据后,会提取密钥并用它来解密数据…...

山西省第十八届职业院校技能大赛高职组 5G 组网与运维赛项规程
山西省第十八届职业院校技能大赛高职组 5G 组网与运维赛项规程 一、赛项名称 赛项编号:GZ035 赛项名称:5G 组网与运维 赛项组别:高职学生组、教师组 二、竞赛目的 2019 年 6 月 6 日,5G 牌照正式发放,标志着我国全面进…...

tcpdump编译 wireshark远程抓包
https://github.com/westes/flex/releases/download/v2.6.4/flex-2.6.4.tar.gz tar -zxvf flex-2.6.4.tar.gz ./configure CFLAGS-D_GNU_SOURCE make sudo make installwget http://ftp.gnu.org/gnu/bison/bison-3.2.1.tar.gz ./configure make sudo make install以上两个库是…...

Web开发 -前端部分-CSS
CSS CSS(Cascading Style Sheet):层叠样式表,用于控制页面的样式(表现)。 一 基础知识 1 标题格式 标题格式一: 行内样式 <!DOCTYPE html> <html lang"en"><head><meta…...

用 Python Turtle 绘制流动星空:编程中的璀璨星河
用 Python Turtle 绘制流动星空:编程中的璀璨星河 🐸 前言 🐸🐞往期绘画>>点击进所有绘画🐞🐋 效果图 🐋🐉 代码 🐉 🐸 前言 🐸 夜空中繁星…...

Java从入门到工作2 - IDEA
2.1、项目启动 从git获取到项目代码后,用idea打开。 安装依赖完成Marven/JDK等配置检查数据库配置启动相关服务 安装依赖 如果个别依赖从私服下载不了,可以去maven官网下载补充。 如果run时提示程序包xx不存在,在项目目录右键Marven->Re…...

fastadmin批量压缩下载远程视频文件
后端代码 // 批量下载并压缩 public function downloadAll(){$ids input(ids);$row $this->model->where(id, in, $ids)->field(id,title,video_url)->select();if (!$row) {$this->error(记录不存在);}$arr [];$tempFiles []; // 用来存储临时下载的视频文…...

【保姆级】Mac如何安装+切换Java环境
本文从如何下载不同版本的JDK,到如何丝滑的切换JDK,以及常见坑坑的处理方法,应有尽有,各位看官走过路过不要错过~~~ 下载⏬ 首先上官网: https://www.oracle.com/ 打不开的话可以使用下面👇这个中文的 https://www.oracle.com/cn/java/technologies/downloads/a…...

2024首届世界酒中国菜国际地理标志产品美食文化节成功举办篇章
2024首届世界酒中国菜国际地理标志产品美食文化节成功举办,开启美食文化交流新篇章 近日,首届世界酒中国菜国际地理标志产品美食文化节在中国国际地理标志大厦成功举办,这场为期三天的美食文化盛会吸引了来自世界各地的美食爱好者、行业专家…...