前言
训练一个属于自己的数据集才是YOLO的"灵魂"所在,在Ultralytics框架下,训练过程十分标准化,核心就是
准备好数据集
和
敲一行指令
。
准备数据集
YOLO训练需要特定的目录结构和标签格式,以训练纸钞为例:
- 整理图片:将所有图片(.jpg)放在一个文件夹里。
- 生成标签:每张图片对应一个同名的.txt文件,里面存放标注信息。格式为:class_id x_center y_center width height(所有坐标都是归一化后的0~1浮点数)。例如,图片"Money-0001.jpg"对应的"Money-0001.txt"的内容为:"0 0.5 0.5 0.3 0.4"(表示类别0的物体位于图片中心,宽高占30%和40%),具体标注工具推荐,技巧以及注意事项等请阅读YOLO数据集标注。
- 划分训练集和验证集:假设项目目录为"A:/YOLO/Money/",建立以下文件夹结构
编写数据集配置文件
在"A:/YOLO/Money/"下新建一个文本文档,命名为"my_data.yaml",使用记事本打开,写入以下内容:
严重警告:YAML文件内严禁Tab缩进,只能用空格;路径请用 / ,以避免Windows中 \ 转义符问题。
执行训练命令
激活环境,在终端输入以下命令:
参数解释:
- model=yolov8n.pt : 使用轻量级v8n预训练权重(如果显存足够大,可以更换成yolov8s.pt或者yolov8m.pt)
- data=A:/YOLO/Money/my_data.yaml : 刚才创建的配置文件。
- epochs=100 : 训练100轮(可以根据数据量进行调整)
- imgsz=640 : 输入图片缩放尺寸(显存不足可以适当调小)
- batch=16 : 每次喂入16张图片。
- workers=0 : Windows设备可选项,如果训练时出现进度条卡死或者报BrokenPipeError请添加。
- device=cpu : 可选项,需要使用CPU训练请添加(速度奇慢)
监控训练与导出结果
实时看进度:训练时终端会打印每一轮的 mAP50 和 Loss 数值。同时,环境根目录下会自动生成 runs/detect/train 文件夹(如果之前有训练过,会生成 train-2, train-3...)。
看曲线图:打开 runs/detect/train/ 文件夹,里面会有 results.png 和 confusion_matrix.png,清晰展示了模型的收敛情况。
验证模型效果:训练完成后,使用一张新的图片,执行以下命令测试效果:
注意:建议使用best.pt(验证集效果最好的模型),而非last.pt(最后一轮的模型)
关于常见情况的解释说明
训练时内存不足:
- 将model切换为轻量模型,若使用yolov8s.pt或yolov8m.pt切换为yolov8n.pt
- 适当减少imgsz的数值,例如从640降为512
- 适当扩充虚拟内存(Windows),修改目路径为"系统属性 > 高级 > 性能设置 > 高级 > 虚拟内存更改",在C盘上设置虚拟内存为 16~32GB
图像文件轻微损坏,并且OpenCV自动修复成功:
- 若零星出现(十几条)可以忽略不管,因为OpenCV已经自动修复并写入内存缓存,后续训练均使用的是修复后的数据。
- 若大量出现(几十甚至上百条)虽然也不影响训练,但是会拖慢训练速度(因为每次都需要花费几毫秒进行修复)。所以建议进行批量修复,可以使用本站的批量图像修复工具进行修复(图像数据均在本地处理,不会上传服务器)。
早停:
- 早停是一种防止过拟合和节省时间的训练策略,属于正常现象。这里不建议禁用早停。
- 如果数据量极小时,建议patience=200或300。小数据集收敛慢且波动大,使用默认预设可能因指标抖动被误判为"无提升"而过早触发早停。
- 如果需要停用早停机制请确保命令行内的 patience 大于 epochs 的数值。