关于YOLO8学习(三)训练自定义的数据集

在这里插入图片描述

前文

关于YOLO8学习(一)环境搭建,官方检测模型部署到手机
关于YOLO8学习(二)数据集收集,处理

简介

本文将会讲解:
(1)如何通过PyCharm,进行训练数据,实现人脸检测

开发环境

win10、python 3.11、cmake、pytorch2.0.1+cu117、pycharm、ultralytics==8.0.134
要特别注意,不要升级到python312,目前onnx还没支持到312,所以转换了,会导致转换模型失效。
对于上述环境如何配置,请看我之前的文章。

开发过程

首先要明确一点,我们是要用过pycharm集合python311环境,训练出一个Yolo8的模型,用于后续的操作的。
而如何训练,训练又有些什么坑,本文就是讲述这个的。先放出所有训练相关的代码:

训练入口:main.py

# fruit 300
if __name__ == '__main__':
    import os
    from ultralytics import YOLO

    ROOT_DIR = 'E:/workstation/python/python_yolo'
    model = YOLO('yolov8n.yaml')
    model.train(
        data=os.path.join(ROOT_DIR, "config.yaml"),
        device='0',
        optimizer="auto",
        epochs=10,  # 训练过程中整个数据集将被迭代多少次,显卡不行你就调小点
        batch=16,  # 一次看完多少张图片才进行权重更新
        workers=2,
        verbose=True,
        half=True,
        amp=False,
        dynamic=False,
        simplify=False,
        imgsz=640)

参数解析

可以看到,一开始就是指定了一个目录ROOT_DIR,这个目录是项目的目录,用于存储训练的文件的,作为其根目录。然后yolov8n.yaml就是读取这个yolo8模型的n类型模型,而除了这个n类型以外,还有什么模型呢?官方截图如下:
在这里插入图片描述
这里由于要部署到手机的原因,所以使用了比较小的模型,训练出来的体积也不大。但是精度肯定是没有大的模型要高的。
接着上文说到的,现在继续看model.train方法种的参数,更详细的参数,可以从官网种查询得到,而我这里,只用到了自己的一些参数,就不做翻译官了,说明一下这些参数的意思。


data – 指定自己的配置文件
device – 指定训练的模型(cpu还是gpu)一般都是gpu训练,cpu训练是真的慢,这里写了一个‘0’,就是有第一个gpu,如果你有多个,也可以写[‘0’,‘1’],以此类推
optimizer – 简单来讲,就是优化器,一般都是’SGD’, ‘Adam’,这里设置为’auto‘,就是让yolo自己决定,对于新手来讲建议可以这样设置,比较省心。而对于精度上面有要求的,可以通过分阶段设置不同的优化器,从而达到更好的效果
epochs – 训练的轮数,一般训练,至少是500次起步的,普遍都是3000轮左右有比较好的效果。当然,这个也要看具体结果种的损失函数趋势来判断,不能一概而论。
batch – 每次训练多少张,才进行权重的更新。可以理解为,你训练的时候,一批次多少数据。这里前期的值,建议是16或者32,到后面需要调整拟合度的时候,才进行适当的调整。
workers – 训练的工作线程数,默认是8,但是实际要看你的机器,如果机器配置不是很好,建议适当调整小一点。
verbose – 训练过程种,是否输出调试的信息
half – 单精度设置,这个设置为true,就是为了让训练的模型在移动端的机器上面,跑得更轻松一点
amp – 混合精度计算训练。为什么这里设置为False,因为博主用的是gtx1660显卡,如果这里不这样设置,会导致无法使用gpu进行训练,官方解析这是这个系列显卡的一个bug,目前只能这样解决。
dynamic – 是否允许模型接受动态输入的大小,这里设置为False,可以保证更好的识别效果。
simplify – 是否简化模型
imgsz – 输入数据的大小。这里一般都是设置640,这也是官方建议的值。当然,你可以设置适当的值用于实际的项目,但是要注意一点,由于数据源是通过缩放变成该像素的,所以数据源是一个考虑的条件,同时,也要注意,如果缩小太多,会导致失真,特征值不明显,简单一句,就是识别结果不明显。但是为了移动端的考虑,这个值到最后转换的时候,都会转换为320,保证帧率的同时也保证质量。


配置文件:config.yaml

path: E:/workstation/python/python_yolo
train: images/train
#test: images/val
val: images/val

names:
  0: face

这里就是配置了相关的训练路径,还是类别“names”,构成就是一个从0开始的下标和对应的标签名字。
这个下标,同样地,和你之前标注文件种的第一个参数对应。由于这里只训练一个类别,所以只有一个。


数据集合整理:关注并回复 “yolo8检测人脸数据集”即可
在这里插入图片描述


训练数据目录的整理:
通过配置文件config.yaml可以看到,一个是train训练目录,一个是val验证目录,同样,放出具体的目录,截图如下:
在这里插入图片描述
这个就是训练数据的相关目录了


上述就是所有相关的资料和代码。

然后指定Main.py脚本,完成训练后,目录下会有一个这样的文件夹:
在这里插入图片描述
其中,best.pt就是最好结果的模型,同样故名思意,last就是最后一次训练的模型,这里的最后一次,一般都是指最后一轮,但是也有不确定因素。一般转换模型,就拿best.pt

注意

(1)如果中断了训练,可以加入resume=True参数,指定原来的模型文件,执行脚本即可进行训练
(2)基于旧模型进行训练,同步骤(1),去除resume=True即可

that’s all---------------------------------------------------------------------------------------------------

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

关于Clion开发stm32printf重定向问题简单解决问题方法

title: 关于Clion开发stm32printf重定向问题简单解决问题方法 tags: STM32Clion 参考来源1 这是另一种方法 在printf 重定向的基础上加上 一句 setbuf(stdout,NULL); 参考来源2 自己写的笔记啦

TCP重传机制——快速重传

TCP 有一种快速重传机制,它不以时间为驱动,而是以数据驱动重传。 在上图,发送方发出了 1,2,3,4,5 份数据: 第一份 Seq1 先送到了,于是就 Ack 回 2;结果 Seq2…

【研发管理】产品经理知识体系-产品创新流程

导读:产品创新流程是一个系统性的过程,旨在通过创造和引入新的产品或改进现有产品来满足市场需求、解决用户问题或实现竞争优势。 目录 1、产品创新引论 2、决策基本框架 3、模糊前端 4、产品创新流程模型概论 5、门径管理流程 6、并行工程和集成产…

AC+AP三层组网实验(华为)

一,技术简介 APAC架构是一种常见的无线局域网(WLAN)组网方式,主要由接入点(Access Point,简称AP)和接入控制器(Access Controller,简称AC)组成。 在APAC架构…

Gitea 上传用户签名

在 Gitea 的用户管理部分,有一个 SSH 和 GPG 的选项。 单击这个选项,可以在选项上添加 Key。 Key 的来源 如是 Windows 的用户,可以选择 Kleopatra 这个软件。 通过这个软件生成的 Key 的界面中有一个导出功能。 单击这个导出,…

【Python可视化】pyecharts

Echarts 是一个由百度开源的数据可视化,凭借着良好的交互性,精巧的图表设计,得到了众多开发者的认可。而 Python 是一门富有表达力的语言,很适合用于数据处理。当数据分析遇上数据可视化时,pyecharts 诞生了。 需要安…

three.js入门指南

WebGL和Three.js的概念 什么是WebGL WebGL是基于OpenGL ES 2.0的Web标准,可以通过HTML5 Canvas元素作为DOM接口访问。 也就是WebGL是作为OpenGL的网页端入口。它作为一个底层标准,然后我们可以通过JavaScript代码,在网页上实现三维图形的渲…

恶补《操作系统》4_2——王道学习笔记

4.1_5 文件存储空间管理 1、存储空间的划分与初始化 文件卷(逻辑卷)的概念目录区与文件区 2、几种管理方法 空闲表法:首位置长度,回收时注意修改空闲链表法(空闲盘块链、空闲盘区链)位示图法 成组链接法…

连接HiveMQ代理器实现MQTT协议传输

先下载MQTTX: MQTTX: Your All-in-one MQTT Client Toolbox 使用线上免费的MQTTX BROKER:The Free Global Public MQTT Broker | Try Now | EMQ 打开MQTTX,创建连接,点击NEW SUBSCRIPTION,创建一个主题,这里使用test/topic,在下面Json中填写配置好的主题,点击发送测试OK。…

Redis-单机安装

试图从官网注册不了我也不知道什么情况。 网盘自取吧,链接:https://pan.baidu.com/s/1KERBQaH9gCT10AGt9z0_jg?pwdyjen 安装比较简单,照着敲就完了每一步都试过了,先单机安装,后面搭建集群。 1.将安装包放到/usr/…

ARP防火墙能够为网络安全贡献什么样的力量

ARP防火墙(Address Resolution Protocol Firewall)作为网络安全的一环,起到保护网络免受ARP欺骗攻击的关键作用。今天德迅云安全给您介绍ARP防火墙的相关方面,帮助您深入了解和认识这一关键的安全措施。 网络安全对于现代社会的信…

专业渗透测试 Phpsploit-Framework(PSF)框架软件小白入门教程(四)

本系列课程,将重点讲解Phpsploit-Framework框架软件的基础使用! 本文章仅提供学习,切勿将其用于不法手段! 继续接上一篇文章内容,讲述如何进行Phpsploit-Framework软件的基础使用和二次开发。 当我们牢记登陆账户、…

【简单讲解下npm常用命令】

🌈个人主页: 程序员不想敲代码啊 🏆CSDN优质创作者,CSDN实力新星,CSDN博客专家 👍点赞⭐评论⭐收藏 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共…

文章解读与仿真程序复现思路——电力自动化设备EI\CSCD\北大核心《电-氢-混氢天然气耦合的城市综合能源系统低碳优化调度》

本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

政安晨:【Keras机器学习示例演绎】(三十二)—— 在 Vision Transformers 中学习标记化

目录 导言 导入 超参数 加载并准备 CIFAR-10 数据集 数据扩增 位置嵌入模块 变压器的 MLP 模块 令牌学习器模块 变换器组 带有 TokenLearner 模块的 ViT 模型 培训实用程序 使用 TokenLearner 培训和评估 ViT 实验结果 参数数量 最终说明 政安晨的个人主页&…

STM32单片机实战开发笔记-EXIT外部中断检测

嵌入式单片机开发实战例程合集: 链接:https://pan.baidu.com/s/11av8rV45dtHO0EHf8e_Q0Q?pwd28ab 提取码:28ab EXIT模块测试 功能描述 外部中断/事件控制器由19个产生事件/中断要求的边沿检测器组成。每个输入线可以独立地配置输入类型&a…

政安晨:【Keras机器学习示例演绎】(三十三)—— 知识提炼

目录 设置 构建 Distiller() 类 创建学生和教师模型 准备数据集 培训教师 将教师模型蒸馏给学生模型 从头开始训练学生进行比较 政安晨的个人主页:政安晨 欢迎 👍点赞✍评论⭐收藏 收录专栏: TensorFlow与Keras机器学习实战 希望政安晨的博客能够…

基于Spring Boot的医疗服务系统设计与实现

基于Spring Boot的医疗服务系统设计与实现 开发语言:Java框架:springbootJDK版本:JDK1.8数据库工具:Navicat11开发软件:eclipse/myeclipse/idea 系统部分展示 医疗服务系统首页界面图,公告信息、医疗地图…

快速幂笔记

快速幂即为快速求出一个数的幂&#xff0c;这样可以避免TLE&#xff08;超时&#xff09;的错误。 传送门&#xff1a;快速幂模板 前置知识&#xff1a; 1) 又 2) 代码&#xff1a; #include <bits/stdc.h> using namespace std; int quickPower(int a, int b) {int…

容斥原理以及Nim基础(异或,SG函数)

容斥原理&#xff1a; 容斥的复杂度为O&#xff08;2^m)&#xff0c;所以可以通过&#xff0c;对于实现&#xff0c;一共2^n-1种&#xff0c;我们可以用二进制来实现 下面是AC代码&#xff1a; #include<bits/stdc.h> using namespace std; typedef long long LL; cons…