YOLOv8训练自定义数据集(超详细)

news/2024/6/29 11:49:53 标签: yolov8

借鉴 https://blog.csdn.net/qq_40716944/article/details/128648001

一、准备训练环境

  1. 安装 requirements.txt

下载:https://raw.githubusercontent.com/ultralytics/ultralytics/main/requirements.txt

然后在你 目录下执行

pip install -r requirements.txt

它的 requirements 主要是以下 包,用下面代码检查下自己还缺哪些,补上就好。

pip show matplotlib         
pip show numpy              
pip show opencv-python      
pip show Pillow             
pip show PyYAML             
pip show requests           
pip show scipy              
pip show torch              
pip show torchvision        
pip show tqdm               
pip show tensorboard        
pip show pandas             
pip show seaborn            
pip show psutil 
pip show thop               
pip show certifi            

  1. 安装ultralytics

pip install ultralytics

二、 准备自己的数据集

dataSet
images
label
xml

先 把 用labelImage 标注 完的图片和xml文件 分别放到 images 和 xml 文件夹里,运行 split_train_val.py,切分好数据。再运行 voc2yolo.py ,把数据集格式转换成yolo_txt格式。

三、模型训练

1、下载预训练模型

在YOLOv8的GitHub开源网址上下载对应版本的模型

2、训练

接下来就可以开始训练模型了,命令如下:

yolo task=detect mode=train model=yolov8n.yaml data=mydata.yaml epochs=100 batch=16

以上参数解释如下:

task:选择任务类型,可选['detect', 'segment', 'classify', 'init']

mode: 选择是训练、验证还是预测的任务蕾西 可选['train', 'val', 'predict']

model: 选择yolov8不同的模型配置文件,可选yolov8s.yaml、yolov8m.yaml、yolov8l.yaml、yolov8x.yaml

data: 选择生成的数据集配置文件

epochs:指的就是训练过程中整个数据集将被迭代多少次,显卡不行你就调小点。

batch:一次看完多少张图片才进行权重更新,梯度下降的mini-batch,显卡不行你就调小点。

训练过程:

如果中途遇到 下载 Arial.ttf 文件的报错,是因为 训练时需要Arial.ttf字体,本地没有,但是下载网站有可能被 墙了,你只能下通过其他方法下载。

Downloading https://ultralytics.com/assets/Arial.ttf to C:\Users\Teddy\AppData\Roaming\Ultralytics\Arial.ttf...

解决方案

点击这个Arial.ttf字体链接进行下载,然后上传到yolov5项目的根目录即可。

或者 它 提示的 :

C:\Users\Teddy\AppData\Roaming\Ultralytics\

训练完了之后,它的结果会保存在:

ultralytics\ultralytics\models\v8\runs\detect\

如果想断点续训:

大部分网上的教程目前只有以下这种,

yolo task=detect mode=train model=yolov8n.yaml data=mydata.yaml epochs=10 batch=8

而没有如何断点续训的方法,当然可以参考 yolov5 的,我通过 查看 v8的 源代码,发现它命令的参数都在这个文件里。

.\ultralytics\ultralytics\yolo\cfg\default.yaml

注意里面有个参数 是 resume,将其设置为resume=True即可,

yolo task=detect mode=train model=yolov8n.yaml data=mydata.yaml epochs=3 batch=8  resume=True 

博主运行后,便是接着上一次训练完10个epoch继续训练

3、训练过程的可视化

在训练过程的可视化tensorboard tensorboard --logdir ./ 然后打开localhost:6006即可,效果如下:

备注:

训练的一些参数解释

# Train settings -------------------------------------------------------------------------------------------------------
model:  # 模型文件的路径,即yolov8n.pt, yolov8n.yaml  
data:  # 数据文件的路径,i.e. i.e. coco128.yaml
epochs: 100  # 训练的epoch数量
patience: 50  # 50个周期等待没有明显的改善,尽早停止训练
batch: 16  # number of images per batch (-1 for AutoBatch)
imgsz: 640  # #输入图像大小为整数或w,h
save: True  #保存 checkpoints 并预测结果
save_period: -1 # 每x个epoch保存一次检查点 (disabled if < 1)
cache: False  # True/ram, disk or False. 使用缓存进行数据加载
device:  # 要运行的设备,即cuda Device =0或Device =0,1,2,3或Device =cpu
workers: 8  # 用于数据加载的工作线程数(如果是DDP,则为每个RANK)
project:  # 项目名称
name:  # 实验名称
exist_ok: False  # 是否覆盖现有实验
pretrained: False  # whether to use a pretrained model
optimizer: SGD  # optimizer to use, choices=['SGD', 'Adam', 'AdamW', 'RMSProp']
verbose: True  # whether to print 详细 output
seed: 0  # 随机种子的重现性
deterministic: True  # 是否启用确定性模式
single_cls: False  # 将多类数据训练为单个类 
image_weights: False  # 使用加权图像选择进行训练
rect: False  # 如果模式为'train',则支持矩形训练;如果模式为'val',则支持矩形计算。
Mask_ratio: 4 #掩码下采样比(仅限段训练)
cos_lr: False  # 使用余弦学习速率调度器 
close_mosaic: 10  # 最后10个epoch 禁用 马赛克增强
resume: False  # 从上一个检查点开始恢复培训
min_memory: False  # 最小化内存占用损失函数,, choices=[False, True, <roll_out_thr>]
# Segmentation  #分割
overlap_mask: True  #掩码在训练过程中应该重叠(仅限训练段)
mask_ratio: 4  #  #掩码下采样比(仅限段训练) (segment train only)
# Classification
dropout: 0.0  # 使用Dropout正则化(仅分类 train)

http://www.niftyadmin.cn/n/114349.html

相关文章

VTK例子--使用不同的vtkActor同时显示灰度图、体渲染、多边形

在实际项目中&#xff0c;常遇到不同类型的数据在同一个渲染窗口显示&#xff1b;如网格多边形与灰度图像的显示、体渲染与多边形的显示、体渲染与灰度图像的显示&#xff0c;如下面几张图的效果&#xff1b;多边形灰度图像体渲染多边形体渲染灰度图像如何实现这种混合显示的效…

Neovim for Rust

之前学习 Rust 一直使用的都是 VScode rust-analyzer&#xff0c;最近看到有网友安利 Neovim 于是就试了试&#xff0c;发现确实美观&#xff0c;好用&#xff0c;而且内存占用比较小。我个人很喜欢&#xff0c;也推荐给给大家。 前提&#xff1a;得有个代理&#xff0c;不然大…

【C++】C++11 异常

目录 1. C语言传统的处理错误的方式 2. C异常概念 3. 异常的使用 3.1. 异常的抛出和捕获 3.2. 在函数调用链中异常栈展开匹配原则 3.3. 异常的重新抛出 3.4. 异常安全 3.5. 异常规范 4.自定义异常体系 5. C标准库的异常体系 6. 异常的优缺点 6.1. C异常的优点&…

MySQL表的增删查改(进阶)

所有操作&#xff1a;主要讲了数据库的约束&#xff0c;表之间的关系&#xff0c;新增&#xff0c;聚合查询&#xff0c;联合查询等内容。是一篇博客所有操作的记录。 844d186 风夏/mysql_learning - Gitee.com数据库约束1.1 约束条件not null -指定某个列不能储存null值。un…

cocos2dx+lua学习笔记:UIPageView的使用

前言 本篇在讲什么 本篇简单介绍Lua篇cocos2dx中UIPageView的相关内容 仅介绍简单的应用&#xff0c;仅供参考 本篇适合什么 适合初学Cocos2dX的小白 适合想要在Cocos2dx-lua中使用UIPageView的人 本篇需要什么 对Lua语法有简单认知 对Cocos2dx-Lua有简单认知 Cocos2…

第九章 实现isReactive和isReadonly

实现isReactive和isReadonly isReactive实现 先上测试用例&#xff08;其实这个测试用例也是reactive.spec.ts中追加的两个&#xff09;: import { isReactive, reactive } from "../reactive"describe(reactive,()>{it(happy path,()>{const original {fo…

交换机电口、光口、网络速率的基本概念总结

电口和光口千兆网 & 万兆网&#xff1a;POE&#xff1a;包转发率&#xff1a;背板带宽/交换容量&#xff1a;)电口和光口 电口&#xff1a; 电口也即RJ45口&#xff0c;插双绞线的端口&#xff08;网线&#xff09;&#xff0c;一般速率为10M或100M&#xff0c;即为百兆工…

【python学习笔记】:Excel 数据的封装函数

对比其它编程语言&#xff0c;我们都知道Python最大的优势是代码简单&#xff0c;有丰富的第三方开源库供开发者使用。伴随着近几年数据分析的热度&#xff0c;Python也成为最受欢迎的编程语言之一。而对于数据的读取和存储&#xff0c;对于普通人来讲&#xff0c;除了数据库之…