跳转至

YOLO 训练结果分析与使用指南

1. 训练结果的理解

(1) 训练文件概览

训练完成后,通常会生成以下关键文件:

  1. weights: 训练好的模型权重文件,包含 best.pt (最佳模型) 和 last.pt (最后一次迭代的模型)。
  2. confusion_matrix.png: 混淆矩阵。
  3. F1_curve.png: F1 分数曲线(精确率和召回率的调和平均数)。
  4. P_curve.png: 准确率 (Precision) 与置信度 (Confidence) 的关系图。
  5. PR_curve.png: 精确率 (Precision) 与召回率 (Recall) 的关系图。
  6. R_curve.png: 召回率 (Recall) 与置信度 (Confidence) 之间的关系图。
  7. results.png: 各项损失函数与指标的汇总图。
  8. results.txt: 具体的训练数据记录。
  9. train_batchx: 训练批次的图像可视化。

(2) 具体指标理解

1. Confusion Matrix (混淆矩阵)

以矩阵形式将数据集中的记录按照“真实的类别”与“分类模型预测的类别”两个标准进行汇总。

  • :表示真实值 (True Label)
  • :表示预测值 (Predicted Label)

2. F1_curve.png

精确率和召回率的调和平均数,用于综合评估模型性能。

3. P_curve.png

准确率 (Precision) 和置信度 (Confidence) 的关系图。

4. arg.yaml

记录了训练时的超参数以及 train.py 运行过程中的中间参数。

5. PR_curve.png

准确率 (Precision) 和召回率 (Recall) 的关系图。通常面积越大(越靠近右上角)效果越好。

6. R_curve.png

召回率 (Recall) 和置信度 (Confidence) 的关系图。

7. results.png (综合结果)

包含以下关键指标:

  1. box: 推测损失函数均值 (Box Loss)。
  2. cls: 目标检测分类损失均值 (Class Loss)。
  3. dfl: 目标检测边界框回归精度的损失函数均值 (Distribution Focal Loss)。
  4. precision: 精度 (查准率)。
  5. recall: 召回率 (查全率)。
  6. mAP: 使用 Precision 和 Recall 作图后围成的面积,m 表示平均 (mean)。

💡 Loss 分析注意事项:

  • cls_loss: 当分类损失 < 0.1 时,模型分类效果较好。
  • box_loss: 当数值在 0.01 - 0.1 之间时,位置回归效果较好。

8. results.txt

记录了训练集每个 Epoch 的各种具体数据数值。


2. 参数的使用

AI 框架会在合理范围内自动生成数据,这一步操作称为 “图片增强”

1. fliplr (水平翻转)

图像左右翻转的概率。

注意: fliplr=0.5 表示在数据增强阶段,每张图像都有 50% 的概率会进行水平翻转。

2. Mosaic (马赛克增强)

将四张图像拼接成一张图像(可以提供更多的上下文和更多的目标实例)。

工作原理:

  1. 图像拼接
  2. 随机裁剪和缩放
  3. 标签调整

3. batch (批次大小)

一次训练喂给神经网络多少张图片。

  • 对应 result 文件中 batch 后缀的图片。
  • 例如:如果是 4 行 4 列共 16 个格子的图片,那 batch 就是 16。

💻 硬件资源占用:

  • CPU 训练:Batch 大小影响的是 RAM (内存)
  • GPU 训练:Batch 大小影响的是 VRAM (显存)

4. workers (工作线程)

设置数据加载时的工作线程数(并行加载数据的进程数)。通常每个 worker 线程会占用一个 CPU 核心。


3. 实用的技巧

1. 对镜像图像的处理

在使用 YOLO 检测后,如果原画面是镜像的,建议马上使用 cv.flip 对图像进行翻转。

代码示例:

ret, frame = cap.read()
if not ret:
    print("无法接收帧")
    break

# 进行推理
results = yolo(source=frame, verbose=False, conf=0.35)[0]

# 后处理:对图像进行翻转(1 表示水平翻转)
flipped_frame = cv.flip(frame, 1)

2. YOLO 训练的中途停止与恢复

(1) 中断训练

在命令行界面运行时,按 Ctrl + C 可立即终止训练进程。

(2) 恢复训练 (Resume)

设置 resume 参数为 True,然后指定 last.pt 文件。直接用 last.pt 进行训练相当于从中断的位置重新开始(默认会继续训练直到达到设定的总 Epoch 数)。

代码示例:

from ultralytics import YOLO

# 加载最后一次保存的模型权重
model = YOLO("path/to/last.pt")

# 恢复训练
results = model.train(resume=True)

3. 训练监控小贴士

在终端中会实时显示验证集的图片检测结果,当观察到指标(mAP, Loss 等)达到预期或不再明显提升时,可以直接使用 Ctrl + C 中断训练。

4. 模型格式转换 (Export)

将训练好的模型导出为 ONNX 等格式以便部署。

代码示例:

from ultralytics import YOLO

# 加载模型
model = YOLO(model="path/to/best.pt")

# 导出为 ONNX 格式
model.export(format="onnx")