一、 YOLO 训练结果存储位置

默认情况下,YOLO 会将训练产出保存到项目的 runs/detect/ 目录下。

1. 默认存储路径

YOLO 默认将结果存放在:

runs/detect/train/

2. 自定义存储路径 (推荐)

为了在进行多次实验时更好地管理模型,避免混淆,强烈建议在训练时使用 projectname 参数自定义保存路径。

from ultralytics import YOLO

# 加载模型
model = YOLO('yolo11n.pt')

# 训练模型
model.train(
    ...
    project='Traffic_System',      # 相当于“大项目名称”,会在当前目录下创建此文件夹
    name='yolov11n_lr0.01_batch32' # 相当于“本次实验的编号”,作为子文件夹
)

这样,结果就会被保存到: Traffic_System/yolov11n_lr0.01_batch32/


二、 文件夹命名的“自增”与覆盖机制

YOLO 具有自动重命名机制,旨在保护您的实验数据不被意外覆盖。

  • 自动重命名(默认行为):

    • 如果不设置 name 参数,YOLO 默认使用 train 作为名字。

    • 第一次运行:生成 runs/detect/train/

    • 第二次运行:YOLO 检测到 train 已存在,为了保护旧数据,它会自动创建一个 runs/detect/train2/

    • 依此类推:会出现 train3, train4 ...

  • 强制覆盖(调试模式): 在调试代码或快速迭代时,使用 exist_ok=True 参数。

    model.train(..., exist_ok=True)
    

    设置后,如果重新运行训练,它会直接覆盖掉原有的文件夹,而不是产生一堆数字编号的文件夹。


三、 YOLO 模型训练结果详解

运行完训练代码后,YOLO 会在输出目录下生成一个详尽的“报告”。这个目录结构遵循 Ultralytics 的标准规范,设计目的是为了既能拿到模型,又能回溯训练过程

1. 结构拆解

train/
├── weights/               # 最核心:存放训练好的模型权重
│   ├── best.pt            # 表现最好的模型(验证集上 mAP 最高)
│   └── last.pt            # 最后一轮训练完的模型(用于断点续练)
├── args.yaml              # 记录:本次训练所有的超参数配置
├── results.csv            # 记录:每一轮的 Loss、Precision、Recall、mAP 数值
├── results.png            # 可视化:Loss 和 mAP 随时间变化的曲线图
├── confusion_matrix_Normalized.png   # 评估:混淆矩阵(看模型容易把哪种车认错)
├── F1_curve.png           # 评估:F1 分数与置信度的关系曲线
├── train_batch0.jpg       # 预览:训练集的第一批图片标注(检查数据对不对)
└── val_batch0_pred.jpg    # 预览:验证集的第一批预测结果(直观感受模型准不准)

2. 关键文件详解

2.1 核心文件夹:weights/ (相当于模型的灵魂)

这里存放的是训练的物理产出。

  • best.pt

    • 原理:在 50 轮训练中,模型每一轮都会在“验证集”上考试。系统会自动记录 mAP 指标最高的那一轮权重。

    • 用途生产环境唯一指定文件。当把系统部署到摄像头或视频处理时,只拷贝这个文件即可。

  • last.pt

    • 原理:无论好坏,它只记录最后一轮(第 50 轮)的模样。

    • 用途断点续传。如果 Colab 突然断网或掉线,我们下次可以用 model = YOLO("last.pt") 接着之前的进度练,不用从第一轮重来。


2.2 训练日志与配置 (复盘的工具)

  • args.yaml

    • 详细内容:它记录了启动训练时所有的参数——学习率是多少、图片缩放到了多大、用了哪个 GPU、甚至连没设置的默认参数(如马赛克数据增强的比例)都在这里。

    • 意义:当我们一个月后忘了这模型是怎么练出来的,打开它,就能完全复刻实验

  • results.csv

    • 详细内容:一个表格文件,行是轮次(Epoch),列是各种损失值(Loss)和精度指标(mAP)。

    • 意义:如果想自己用 Excel 或 Python 绘制更漂亮的图表,数据源就在这里。


2.3 可视化图表 (相当于体检报告)

results.png —— 整体趋势图

这张图通常由 10 个小图组成,分为两大部分:

  • 左侧 (Loss 曲线):包括 train/box_omtrain/cls_loss 等。

    • 理想状态:像滑梯一样顺滑下降,最后趋于平稳。

    • 异常信号:如果曲线像“心电图”一样剧烈震荡,说明学习率可能太高了,导致模型不能收敛;如果曲线在末尾突然往上翘,说明模型产生了过拟合

  • 右侧 (Metrics 曲线):包括 metrics/mAP50(B) 等。

    • 理想状态:像爬山一样稳步上升。

confusion_matrix_Normalized.png —— 归一化混淆矩阵

这是一个 的方阵,横轴是模型预测的,纵轴是真实的。

  • 对角线(深色区):代表预测正确的数量。颜色越深,说明该类别识别越准。

  • 非对角线区域:代表“张冠李戴”。

    • 案例:如果 Car 行和 Truck 列的交叉点数值很高,说明模型经常把小车认成卡车。这时我们就知道:我需要给模型多看一些卡车的特写图。

  • Background 这一行/列:代表漏检(把车看成背景)或误报(把背景看成车),比如说car和background交叉处高达0.80,则说明我们需要在训练集中添加更多的背景图(没有标注物体的图片),帮助模型区分物体与背景。

F1_curve.png 

这张图展示了 F1 分数(查准率和查全率的调和平均数)随置信度阈值(Confidence Threshold)的变化趋势

  • 含义:横坐标是“置信度阈值”(Confidence),纵坐标是 F1 分数(精确率和召回率的平衡点)。

  • 实战意义:它告诉我们,在部署系统时,把置信度过滤门槛设为多少最合适。通常曲线最高点对应的 Confidence 值(比如 0.621)就是最优解。

  • 最佳置信度:

    蓝色粗线代表所有类别的综合 F1 分数。最高点位于置信度约为 0.621 处,此时综合 F1 分数达到 0.96。这意味着在部署模型时,建议将置信度阈值设置为 0.621 左右,以获得最佳的检测效果。
  • 各类别表现:

    Van (红色线): 综合 F1 分数最高,在较宽的置信度范围内表现稳定;Truck (绿色线): F1 分数相对较低,说明卡车的检测难度较大,对置信度变化较为敏感。
  • 阈值影响:

    当置信度阈值小于 0.4 时,所有类别的 F1 分数都在迅速上升;当置信度阈值大于 0.8 时,F1 分数急剧下降,说明过高的阈值会导致大量目标被筛掉。

2.4 实时效果图 (直观反馈)

  • train_batchx.jpg

    • 检查点:如果图里的框画歪了,说明原始标注数据有问题,“地基”就没打好。

  • 这是训练开始前生成的。它展示了模型看到的经过“数据增强”(旋转、变色、拼接)后的图片。

  • val_batch0_pred.jpg

    这是验证集上的预测预览。

    • 意义:这是最爽的一张图,可以直接看到模型在它没见过的图上画出的框。如果框很稳、标签对,说明系统已经初步成型。


2.5 总结:怎么看训练结果

  1. results.png:确认模型练“会”了(曲线收敛)。

  2. confusion_matrix_normalized.png:确认模型没把 Car 和 Truck 搞混。

  3. weights/best.pt:打包带走,去写视频检测逻辑。


3. 必须遵守的规定/常识

  1. 覆盖规则:如果再次运行训练且 name 仍为 train,而没有设置 exist_ok=True,YOLO 会自动创建一个 train2 文件夹,而不会覆盖旧的。

  2. 权重独立性best.pt 已经封装了模型结构信息。不需要 data.yaml 就可以在任何安装了 ultralytics 的电脑上运行这个模型进行推理(预测)。

  3. 结果解读限制:不要只看 train_loss。如果 train_loss 极低但 val/mAP 也低,说明模型过拟合了(如同只会背题,不会考试)。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐