YOLOv8训练猫脸检测模型(自定义数据集)

289 阅读3分钟

提示:本文的前提已经安装好了环境,包括pytorch,conda等等。

本文使用1000张猫图,800张用于训练,200张用于验证。下面是准备好数据集之后的详细操作流程。

划分数据集

首先是划分数据集,新建项目,项目结构如下

image.png

鼠标选中的是训练模型的根目录。

创建数据集配置文件

在项目根目录新建 data.yaml,指定数据集路径和类别信息。

# data.yaml
train: ./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下才可以开启虚拟环境。

image.png

虚拟环境的路径差异不会影响项目运行,环境与代码目录是逻辑分离的。

启动训练

接下来使用CPU训练模型(由于使用gpu失败了)

yolo detect train data=data.yaml model=yolov8n.pt epochs=100 device=cpu

关键参数说明

image.png

注意一定要在项目根目录下,博主第一次疏忽在根目录的上一级目录执行了训练命令,之后爆出一堆提示告诉我找不到data.yaml,最后发现是路径问题。。。

切换到正确路径执行命令,又是爆出一堆提示,其中的关键信息如下图所示

image.png

我找到了它提及的地址,因为它寻找的时候会自带一个datasets路径,所以删除一个就不会重复了 C:\Users\ZhangYing\AppData\Roaming\Ultralytics\settings.yaml,打开这个文件 删除一个datasets,修改后是datasets_dir: D:\conda\anaconda\pythonProject\yolov8_train 保存,再次启动训练命令,ok

image.png

十四个小时之后一百轮还是没有训练完,此时已是深夜,电脑的风扇呼呼的,我想暂停睡个好觉。

点一下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  Instances
1/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 参数指定配置文件)。

常见问题

  1. CUDA 不可用

    • 检查 torch.cuda.is_available()
    • 确保 PyTorch 的 CUDA 版本与显卡驱动兼容。
  2. 显存不足

    • 减少 batch 大小。
    • 降低 imgsz(如 416x416)。
  3. 过拟合

    • 增加数据增强。
    • 减少 epochs 或添加正则化(权重衰减)。

按照以上步骤操作,即可完成 YOLOv8 模型训练。如果遇到问题,可提供错误日志进一步分析!