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

部分数据如下

fitnesslr0lrfmomentumweight_decaywarmup_epochswarmup_momentumboxclsdflhsv_hhsv_shsv_vdegreestranslatescaleshearperspectiveflipudfliplrmosaicmixupcopy_paste
0.75610.010740.010920.878090.000550.66453.819060.526782.531350.011140.3510.2201400.074740.592020000.26175100
0.753520.010740.013110.881080.000484.64690.602313.819060.438612.570520.011340.391810.2201400.074740.662590000.277370.8246800
0.763640.009150.01020.886940.000443.799980.545193.573810.578312.53390.011140.331320.2118900.074750.543870000.26416100
0.750780.009150.01020.886970.000443.802560.545193.572420.578542.535040.011140.331320.2119800.074760.544050000.26416100
0.762930.009280.008110.865240.000423.799980.548543.677810.578312.48560.011660.292070.2313900.069510.590620000.239510.9760200

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文件别忘了修改成完整的数据集,笔者是先用小部分数据找最佳超参数,再训练完整数据集。

恭喜你学会了如何找到最佳超参数,并使用其进行训练!

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

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

相关文章

uniapp使用百度地图配置了key,但是显示Map key not configured

搞了我两天的一个问题。 hbuilderx版本:4.36 问题介绍: 我的项目是公司的项目,需要在H5端使用百度地图,使用vue-cli创建的uniapp,就是uni代码在src里的目录结构。就是使用这种方式才会遇到这个问题。 问题原因&#xf…

Android通过okhttp下载文件(本文案例 下载mp4到本地,并更新到相册)

使用步骤分为两步 第一步导入 okhttp3 依赖 第二步调用本文提供的 utils 第一步这里不做说明了,直接提供第二步复制即用 DownloadUtil 中 download 为下载文件 参数说明 这里主要看你把 destFileName 下载文件名称定义为什么后缀,比如我定义为 .mp4 下…

【rust杂乱笔记】

code . 打开vscode fn main() {println!("hello world!") }loop{}循环; break跳出循环 // 引入三方库 use rand::Rng; // 引入标准库中的输入输出 use std::cmp::Ordering; use std::io;// main函数 先执行main函数 fn main() {// 打印的宏方法// 打印提示信息print…

【C++初阶】第9课—标准模板库STL(string_3)

文章目录 1. string类对象的查找操作1.1 c_str返回c格式字符串1.2 substr获取string类对象子串1.3 find和rfind查找字符串内容1.4 find_first_of与find_first_not_of1.5 find_last_of与find_last_not_of1.6 copy复制string类对象内的字符串内容1.7 compare对比string类字符串1.…

Android Studio、JDK、AGP、Gradle、kotlin-gradle-plugin 兼容性问题

文章目录 问题:解决办法:gradle与 java的版本兼容AGP与Gradle的版本兼容kotlin 与 jvm 的版本兼容KGP、Gradle、AGP兼容关系kotlin 与 java 的编译版本配置 问题: 你从githb上clone了一个项目,本地跑的时候,各种报错。…

Linux中 vim 常用命令大全详细讲解

文章目录 前言一、Vim 基本操作 🕹️1.1 打开或创建1.2 退出编辑1.3 模式切换 二、Vim 光标移动命令 ↕️2.1 基本移动2.2 行内移动2.3. 单词移动2.4. 页面移动2.5. 行跳转 三、Vim 文本编辑命令 📋3.1 插入和删除3.2 复制、剪切与粘贴3.3 替换与修改 四…

ubuntu+ros新手笔记(二):古月·ROS2入门21讲学习笔记

系统ubuntu22.04 ros2 humble 按照如下视频教程学习的:【古月居】古月ROS2入门21讲 | 带你认识一个全新的机器人操作系统 此处仅记录我报错的地方,以及相应的解决方案,没有出错的略过! 对应的古月居ROS2入门21讲源码下载地址&a…

.NET 技术 | 调用系统API创建Windows服务

01阅读须知 此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失&#xf…

win10配置子系统Ubuntu子系统(无需通过Windows应用市场)实际操作记录

win10配置子系统Ubuntu子系统(无需通过Windows应用市场)实际操作记录 参考教程 : win10配置子系统Ubuntu子系统(无需通过Windows应用市场) - 一佳一 - 博客园 开启虚拟机服务的 以管理员方式运行PowerShell运行命令。 &#xf…

Leetcode经典题11--加油站

题目描述 在一条环路上有 n 个加油站,其中第 i 个加油站有汽油 gas[i] 升。 你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。 给定两个整数数组 gas 和…

网络层IP协议(TCP)

IP协议: 在了解IP协议之前,我们市面上看到的"路由器"其实就是工作在网络层。如下图: 那么网络层中的IP协议究竟是如何发送数据包的呢? IP报头: IP协议的报头是比较复杂的,作为程序猿只需要我们重…

【深度学习量化交易8】miniQMT快速上手教程案例集——使用xtQuant进行获取实时行情数据篇

我是Mr.看海,我在尝试用信号处理的知识积累和思考方式做量化交易,应用深度学习和AI实现股票自动交易,目的是实现财务自由~ 目前我正在开发基于miniQMT的量化交易系统。 在前几篇的文章中讲到,我正在开发的看海量化交易系统&#x…

【HarmonyOS NEXT】ArkTs数据类型解析与使用

1. 背景 为什么设计ArkTS? 1.1 其它语言有版权【Java?Kotlin?】以及历史问题【Java内存?】 1.2 生态,可复用前端生态的三方库,兼容JS/TS语言生态ArkTs解决了JS/TS中的哪些问题? 2.1 **程序健壮性…

精彩回顾|Cocos开发者沙龙长沙站

长沙-不一样 Cocos 开发者沙龙长沙站&#xff0c;完全超出了我们的预期&#xff0c;一开始还担心没有太多人报名。最后发现&#xff0c;全场爆满&#xff0c;座无虚席。 <<< 左右滑动见更多 >>> 许多小伙伴曾反馈过&#xff0c;在以往的开发者沙龙回顾文章中…

elasticsearch设置密码访问

1 用户认证介绍 默认ES是没有设置用户认证访问的&#xff0c;所以每次访问时&#xff0c;直接调相关API就能查询和写入数据。现在做一个认证&#xff0c;只有通过认证的用户才能访问和操作ES。 2 开启加密设置 1.生成证书文件 /usr/share/elasticsearch/bin/elasticsearch-…

docker安装Elasticsearch和Kibana

上传文件 加载tar包 安装 1.安装elasticsearch 通过下面的Docker命令即可安装单机版本的elasticsearch&#xff1a; docker run -d \--name es \-e "ES_JAVA_OPTS-Xms512m -Xmx512m" \-e "discovery.typesingle-node" \-v es-data:/usr/share/elastics…

Ubuntu 20.04 24.04 双网卡 Bond 配置指南

前言&#xff1a;在现代服务器管理中&#xff0c;网络的稳定性和可靠性至关重要。为了提高网络的冗余性和负载能力&#xff0c;我们经常需要配置多个网络接口以实现链路聚合或故障转移。Ubuntu系统自17.10版本起&#xff0c;引入了Netplan作为新的网络配置抽象化工具&#xff0…

热更新解决方案3 —— xLua

概述 xLua框架导入和AB包相关准备 xLua导入 其它的导入 C#调用Lua 1.Lua解析器 using System.Collections; using System.Collections.Generic; using UnityEngine; //引用命名空间 using XLua;public class Lesson1_LuaEnv : MonoBehaviour {// Start is called before the fi…

【日常笔记】Spring boot:编写 Content type = ‘text/plain‘ 接口

一、项目场景&#xff1a; 接口&#xff1a;Context-Type&#xff1a;text/plain 方式&#xff1a;POST 项目场景&#xff1a;硬件回调接口 二、实战 PostMapping(value "/xx/xxx", consumes "text/plain" ) 2.1、接口 /*** return String* time 202…

光伏智能巡检

无人值守光伏巡检解决方案 1.任务制定 规划巡检任务&#xff0c;定时执行&#xff0c;自动放飞、收纳、充电&#xff0c;随时待命 2.自动起飞、巡航 无人机按照既定巡检任务&#xff0c;自主作业&#xff0c;多场景自适应&#xff0c;航飞视频实况直播。 3.智能分析 对无人…