当前位置: 首页 > news >正文

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

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

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

相关文章:

  • WebRTC服务质量(04)- 重传机制(01) RTX NACK概述
  • 数据结构树
  • 使用 acme.sh 签发和自动续期 ssl https 证书
  • DPDK用户态协议栈-TCP Posix API 2
  • 基于Matlab实现三维地球模型(源码)
  • 试题转excel;word转excel;大风车excel
  • PHPstudy中的数据库启动不了
  • 计网_虚拟局域网VLAN
  • C++对象数组对象指针对象指针数组
  • labelimg使用指南
  • Python-基于Pygame的小游戏(天空之战)(一)
  • ansible自动化运维(五)roles角色管理
  • YOLOv8目标检测(四)_图片推理
  • 【JVM】JVM基础教程(四)
  • ansible自动化运维(四)jinjia2模板
  • LearnOpenGL学习(高级OpenGL -> 高级GLSL,几何着色器)
  • 12.11数据结构-图
  • ansible 自动化运维工具(三)playbook剧本
  • Web身份认证 --- Session和JWT Token
  • uniapp使用百度地图配置了key,但是显示Map key not configured
  • 【第三节】Git 基本操作指南
  • 微信小程序:实现节点进度条的效果;正在完成的节点有动态循环效果;横向,纵向排列
  • 【数据结构——内排序】二路归并排序(头歌实践教学平台习题)【合集】
  • 概率论得学习和整理24:EXCEL的各种图形,统计图形
  • 【NLP】序列到序列(seq2seq)建模工具fairseq使用详解
  • js 函数定义域