借鉴 https://blog.csdn.net/qq_40716944/article/details/128648001
一、准备训练环境
安装 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
安装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)