提示:本文的前提已经安装好了环境,包括pytorch,conda等等。
本文使用1000张猫图,800张用于训练,200张用于验证。下面是准备好数据集之后的详细操作流程。
划分数据集
首先是划分数据集,新建项目,项目结构如下
鼠标选中的是训练模型的根目录。
创建数据集配置文件
在项目根目录新建 data.yaml,指定数据集路径和类别信息。
# data.yamltrain: ./datasets/images/train # 训练集路径val: ./datasets/images/val # 验证集路径# 类别数量及名称nc: 1 # 类别数(根据实际修改)names: ['cat'] # 类别名称(按顺序对应 class_id)
选择预训练模型
YOLOv8 提供多种预训练模型,根据需求选择:
- yolov8n.pt:Nano 版(轻量级,适合快速训练)yolov8s.pt:Small 版(平衡速度与精度)yolov8m.pt:Medium 版yolov8l.pt:Large 版yolov8x.pt:XLarge 版(最高精度)
启动虚拟环境
首先在pycharm端终端启动虚拟环境,注意要在Command Prompt下才可以开启虚拟环境。
虚拟环境的路径差异不会影响项目运行,环境与代码目录是逻辑分离的。
启动训练
接下来使用CPU训练模型(由于使用gpu失败了)
yolo detect train data=data.yaml model=yolov8n.pt epochs=100 device=cpu
关键参数说明
注意一定要在项目根目录下,博主第一次疏忽在根目录的上一级目录执行了训练命令,之后爆出一堆提示告诉我找不到data.yaml,最后发现是路径问题。。。
切换到正确路径执行命令,又是爆出一堆提示,其中的关键信息如下图所示
我找到了它提及的地址,因为它寻找的时候会自带一个datasets路径,所以删除一个就不会重复了C:\Users\ZhangYing\AppData\Roaming\Ultralytics\settings.yaml,打开这个文件删除一个datasets,修改后是datasets_dir: D:\conda\anaconda\pythonProject\yolov8_train保存,再次启动训练命令,ok
十四个小时之后一百轮还是没有训练完,此时已是深夜,电脑的风扇呼呼的,我想暂停睡个好觉。
点一下pycharm控制台ctrl+c就可以中断训练,第二天可以在last.pt基础上继续训练
第二天醒来,继续昨天的训练
yolo train resume model=runs/detect/train4/weights/last.pt data=data.yaml epochs=100
监控训练过程
实时日志
训练时终端会输出损失、精度等指标:
Train: 0%| | 0/100 [00:00<?, ?it/s]Epoch GPU_mem box_loss cls_loss dfl_loss Instances1/100 2.1G 1.234 0.876 0.543 32...
结果可视化
训练完成后,结果保存在 runs/detect/yolov8_train/
:
- `weights/`:最佳模型(`best.pt`)和最后模型(`last.pt`)。- `results.png`:损失和精度曲线。- `confusion_matrix.png`:混淆矩阵。
验证模型性能
使用验证集评估模型:
yolo detect val data=data.yaml model=runs/detect/yolov8_train/weights/best.pt imgsz=640 device=0
使用模型推理
用训练好的模型预测新图片:
yolo detect predict \ model=runs/detect/yolov8_train/weights/best.pt \ source=test_image.jpg \ save=True # 保存预测结果
优化建议
数据层面
数据增强:在 data.yaml
中启用默认增强(翻转、旋转等),或自定义:
augmentation: hsv_h: 0.015 # 色调增强强度 hsv_s: 0.7 # 饱和度增强强度 hsv_v: 0.4 # 明度增强强度 flipud: 0.5 # 上下翻转概率
增量训练:后续标注更多数据后,用 model=last.pt
继续训练。
模型层面
冻结层:小数据集可冻结部分骨干网络,防止过拟合:yolo train ... args="freeze=10" # 冻结前 10 层
调整超参:修改学习率、优化器等(通过 hyp
参数指定配置文件)。
常见问题
CUDA 不可用:
- 检查
torch.cuda.is_available()
。确保 PyTorch 的 CUDA 版本与显卡驱动兼容。显存不足:
- 减少
batch
大小。降低 imgsz
(如 416x416)。过拟合:
- 增加数据增强。减少
epochs
或添加正则化(权重衰减)。按照以上步骤操作,即可完成 YOLOv8 模型训练。如果遇到问题,可提供错误日志进一步分析!