YOLO 训练流程(COCO128 入门实战)

📌 关键要点

本文记录用 COCO128 数据集完整跑通一次 YOLOv8 训练的过程,适合第一次接触训练的新手。


一、数据准备

COCO128:COCO 官方前 128 张图,YOLO 教程标配,约 7MB。

  1. 下载:https://ultralytics.com/assets/coco128.zip
  2. 解压后目录结构(coco128.yaml 中 path: coco128 表示相对当前目录找 coco128 文件夹):
test\coco\                  ← 命令在此目录执行
   ├── coco128\
   │   ├── images\train2017\   128 张 jpg
   │   └── labels\train2017\   128 个 txt 标注
   ├── yolov8n.pt              预训练权重(首次运行自动下载)
   └── runs\                   训练结果输出目录

标注文件格式:每行 类别id x_center y_center width height(归一化坐标)

0 0.52 0.55 0.4 0.6    ← 类别0(人),位于图中心偏下,宽40%高60%

💡 说明:coco128.yaml 不需要自己创建,内置在 ultralytics 包内,yolo train 会自动找到。


二、训练命令逐参数解析

yolo train data=coco128.yaml model=yolov8n.pt epochs=5 imgsz=640
参数 含义
train 进入训练模式
data=coco128.yaml 数据集配置:数据路径 + 80 个类别名
model=yolov8n.pt 起点权重(输入),官方预训练模型,训练在其基础上微调
epochs=5 训练轮数:全部 128 张图反复学 5 遍
imgsz=640 输入图片尺寸 640×640

输入 vs 输出模型(易混淆点):

文件 角色
yolov8n.pt 输入起点:官方在 COCO 全量(11 万张)上预训练好的权重
runs/detect/train/weights/best.pt 输出成果:训练中 mAP 最高的一轮,推荐使用
runs/detect/train/weights/last.pt 输出成果:最后一轮的结果

迁移学习:从预训练模型继续微调,几百张图就能出效果;从零训练(model=yolov8n.yaml)需要海量数据,不推荐。


三、训练日志解读

1. 模型加载

Model summary: 130 layers, 3,157,200 parameters, 8.9 GFLOPs
Transferred 355/355 items from pretrained weights

2. 优化器

optimizer: AdamW(lr=0.000119, momentum=0.9)

optimizer=auto 自动选择 AdamW 并确定学习率,无需手动设置。

3. 每轮训练输出

Epoch    box_loss   cls_loss   dfl_loss   Instances
  1/5       1.183      1.523      1.224         16
Class     Images  Instances  P      R     mAP50  mAP50-95
 all        128        929  0.662  0.531  0.608  0.454
指标 含义
box_loss / cls_loss / dfl_loss 三个损失值,越小越好(定位 / 分类 / 框回归)
P Precision 精确率:预测的框中有多少是对的
R Recall 召回率:真实目标有多少被找到
mAP50 IoU=0.5 时的平均精度,最常用指标
mAP50-95 IoU 从 0.5 到 0.95 取平均,更严格

4. 本机 5 轮实测结果

轮次 mAP50 mAP50-95
1 0.608 0.454
3 0.631 0.469
5 0.651 0.487

5 轮共耗时约 3 分钟(CPU,i9-13900H)。指标随轮数上升,说明模型在持续学习。


四、训练产物

runs\detect\train\
   ├── weights\
   │   ├── best.pt        ← 最好模型(mAP 最高的一轮)
   │   └── last.pt        ← 最后一轮模型
   ├── results.png        ← 训练曲线图(损失 / mAP 随轮数变化)
   ├── labels.jpg         ← 标注可视化(数据长什么样)
   ├── val_batch0_pred.jpg← 模型预测效果图
   ├── confusion_matrix.png ← 混淆矩阵
   └── train_batch0.jpg   ← 训练输入批数据

训练曲线(results.png)

训练曲线图:损失下降、mAP 上升

左列为三类损失(box/cls/dfl)随轮数下降,右列为精确率、召回率与 mAP 随轮数上升。

标注可视化(labels.jpg)

COCO128 标注分布可视化

展示目标在图片中的位置分布(左上)与类别分布(右下)。

模型预测效果(val_batch0_pred.jpg)

模型在验证集上的预测效果

蓝框为模型预测结果,能正确框出人、车、交通灯等目标。


五、下一步

  1. 用训练好的模型检测图片: yolo predict model=runs\detect\train\weights\best.pt source=xxx.jpg
  2. 跑正式训练:epochs=50(COCO128 上 CPU 约 30 分钟)
  3. 训练自己的数据集:收集图片 → 标注 → 写自己的 .yaml → 同样命令训练

🔗 相关笔记:常用目标检测数据集与图片库清单


📖 资料来源:

相关笔记