AI 与模型

YOLOv8 实例分割训练命令与指标速查

在 Windows 上使用 ultralytics 训练 YOLOv8-seg 自定义数据集的目录结构、常见报错绕过与评估指标备忘。

训练自定义数据集的 YOLOv8 实例分割模型(yolov8n-seg)时整理的命令、Windows 常见环境报错与评估指标速查。

1. 数据集目录结构

在虚拟环境中安装带对应 CUDA 版本的 PyTorch 与 ultralytics 后,按标准目录组织数据集(格式不统一时可通过 Roboflow 转换导出):

dataset/
├── data.yaml
├── train/
│   ├── images/
│   └── labels/
├── valid/
│   ├── images/
│   └── labels/
└── test/
    ├── images/
    └── labels/

Windows 下相对路径容易受启动工作目录影响,建议在 data.yaml 中直接写明 train 与 val 的实际目录路径。

2. 启动训练与两个常见 Windows 报错

命令行直接启动:

yolo segment train data=data.yaml model=yolov8n-seg.yaml pretrained=yolov8n-seg.pt batch=16 workers=2 epochs=200 imgsz=640 device=0

Python 脚本方式调用:

from ultralytics import YOLO

if __name__ == "__main__":
    model = YOLO("yolov8n-seg.pt")
    model.train(
        data="data.yaml",
        epochs=100,
        batch=16,
        imgsz=640,
        device=0,
        cos_lr=True,
        workers=2,
    )

在 Windows 上主要留意三件事:

  • 显存不足:优先下调 batch(如 4 或 1)与 workers。
  • OpenMP 重复初始化报错(OMP: Error #15: Initializing libiomp5md.dll, but found libiomp5md.dll already initialized):在当前 PowerShell 会话临时设置 $env:KMP_DUPLICATE_LIB_OK="TRUE"(CMD 下为 set KMP_DUPLICATE_LIB_OK=TRUE)。
  • 多进程 DataLoader 崩溃:当 workers > 0 时,Python 启动脚本必须将训练入口包在 if __name__ == "__main__": 内,避免子进程重复导入触发异常。

3. results.png 损失与评估指标速查

  • 损失项(越低越收敛):
    • box_loss:预测框与真实框定位误差(CIoU / DFL);
    • seg_loss:实例分割掩码损失;
    • cls_loss:类别分类损失。
  • 验证集指标(越高越好):
    • P(Precision):预测结果中真正命中的比例(反映误报多少);
    • R(Recall):真实目标被检出的比例(反映漏检多少);
    • mAP50:IoU 阈值为 0.5 时的平均精度;
    • mAP50-95:IoU 从 0.5 至 0.95 步进求均值的平均精度,对边界框与掩码贴合度更敏感。

若训练集 loss 持续下降,而验证集 val_loss 开始回升且 mAP50-95 持续下降,通常说明出现过拟合,需补充数据增强或提前停止训练。