YOLO 训练结果分析与使用指南
1. 训练结果的理解
(1) 训练文件概览
训练完成后,通常会生成以下关键文件:
- weights: 训练好的模型权重文件,包含
best.pt(最佳模型) 和last.pt(最后一次迭代的模型)。 - confusion_matrix.png: 混淆矩阵。
- F1_curve.png: F1 分数曲线(精确率和召回率的调和平均数)。
- P_curve.png: 准确率 (Precision) 与置信度 (Confidence) 的关系图。
- PR_curve.png: 精确率 (Precision) 与召回率 (Recall) 的关系图。
- R_curve.png: 召回率 (Recall) 与置信度 (Confidence) 之间的关系图。
- results.png: 各项损失函数与指标的汇总图。
- results.txt: 具体的训练数据记录。
- 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 (综合结果)
包含以下关键指标:
- box: 推测损失函数均值 (Box Loss)。
- cls: 目标检测分类损失均值 (Class Loss)。
- dfl: 目标检测边界框回归精度的损失函数均值 (Distribution Focal Loss)。
- precision: 精度 (查准率)。
- recall: 召回率 (查全率)。
- 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 (马赛克增强)
将四张图像拼接成一张图像(可以提供更多的上下文和更多的目标实例)。
工作原理:
- 图像拼接
- 随机裁剪和缩放
- 标签调整
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 等格式以便部署。
代码示例: