YOLO数据集训练
首页文章工具搜索

YOLO数据集训练

2026.08.27 [YOLO] [数据集] [机器视觉] 137 浏览


前言

训练一个属于自己的数据集才是YOLO的"灵魂"所在,在Ultralytics框架下,训练过程十分标准化,核心就是 准备好数据集 和 敲一行指令 。

准备数据集

YOLO训练需要特定的目录结构和标签格式,以训练纸钞为例:

  1. 整理图片:将所有图片(.jpg)放在一个文件夹里。
  2. 生成标签:每张图片对应一个同名的.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数据集标注。
  3. 划分训练集和验证集:假设项目目录为"A:/YOLO/Money/",建立以下文件夹结构
    A:/YOLO/Money/ └── my_dataset/    ├── images/    │  ├── train/ (存放80%的图片)    │  └── val/ (存放20%的图片)    └── labels/       ├── train/ (存放对应train图片的txt标签)       └── val/ (存放对应val图片的txt标签)

编写数据集配置文件

在"A:/YOLO/Money/"下新建一个文本文档,命名为"my_data.yaml",使用记事本打开,写入以下内容:

# 训练集和验证集的图片路径(注意:Windows下建议使用绝对路径或相对路径,这里用绝对路径最稳妥) path: A:/YOLO/Money/my_dataset# 数据集根目录(注意用斜杠 / 而不是反斜杠 \) train: images/train # 训练图片相对于path的路径 val: images/val # 验证图片相对于path的路径 # 类别名称(按顺序,id从0开始) names: 0: 100YUAN 1: 10YUAN 2: 1YUAN 3: 5YUAN 4: 20YUAN 5: 50YUAN
严重警告:YAML文件内严禁Tab缩进,只能用空格;路径请用 / ,以避免Windows中 \ 转义符问题。

执行训练命令

激活环境,在终端输入以下命令:

yolo train model=yolov8n.pt data=A:/YOLO/Money/my_data.yaml epochs=100 imgsz=640 batch=16

参数解释:

  • 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,清晰展示了模型的收敛情况。

验证模型效果:训练完成后,使用一张新的图片,执行以下命令测试效果:

yolo predict model=runs/detect/train/weights/best.pt source=D:/测试图片路径
注意:建议使用best.pt(验证集效果最好的模型),而非last.pt(最后一轮的模型)

关于常见情况的解释说明

cv2.error: OpenCV(5.0.0) D:\a\opencv-python\opencv-python\opencv\modules\core\src\alloc.cpp:73: error: (-4:Insufficient memory) Failed to allocate 74649600 bytes in function 'cv::OutOfMemoryError'

训练时内存不足:

  • 将model切换为轻量模型,若使用yolov8s.pt或yolov8m.pt切换为yolov8n.pt
  • 适当减少imgsz的数值,例如从640降为512
  • 适当扩充虚拟内存(Windows),修改目路径为"系统属性 > 高级 > 性能设置 > 高级 > 虚拟内存更改",在C盘上设置虚拟内存为 16~32GB
train: A:\YOLO\Money\my_dataset\images\train\1.jpg: corrupt JPEG restored and saved

图像文件轻微损坏,并且OpenCV自动修复成功:

  • 若零星出现(十几条)可以忽略不管,因为OpenCV已经自动修复并写入内存缓存,后续训练均使用的是修复后的数据。
  • 若大量出现(几十甚至上百条)虽然也不影响训练,但是会拖慢训练速度(因为每次都需要花费几毫秒进行修复)。所以建议进行批量修复,可以使用本站的批量图像修复工具进行修复(图像数据均在本地处理,不会上传服务器)。
... EarlyStopping: Training stopped early as no improvement observed in last 100 epochs. Best results observed at epoch 141, best model saved as best.pt.

早停:

  • 早停是一种防止过拟合和节省时间的训练策略,属于正常现象。这里不建议禁用早停。
  • 如果数据量极小时,建议patience=200或300。小数据集收敛慢且波动大,使用默认预设可能因指标抖动被误判为"无提升"而过早触发早停。
  • 如果需要停用早停机制请确保命令行内的 patience 大于 epochs 的数值。