YOLO26训练可视化:loss曲线查看与分析教程
你有没有遇到过这种情况:模型训练了几十个epoch,结果却不尽如人意?想优化却无从下手?其实,答案就藏在训练过程中的loss曲线上。本文将带你深入YOLO26的训练日志,手把手教你如何查看、解读并利用loss曲线来判断模型状态,真正实现“看得见”的训练。
本镜像基于YOLO26 官方代码库构建,预装了完整的深度学习开发环境,集成了训练、推理及评估所需的所有依赖,开箱即用。
1. 镜像环境说明
- 核心框架:
pytorch == 1.10.0 - CUDA版本:
12.1 - Python版本:
3.9.5 - 主要依赖:
torchvision==0.11.0,torchaudio==0.10.0,cudatoolkit=11.3,numpy,opencv-python,pandas,matplotlib,tqdm,seaborn等。
2. 快速上手
启动完是这样的
2.1 激活环境与切换工作目录
在使用前,请先激活的 Conda 环境,命令如下:
conda activate yolo镜像启动后,默认代码存放在系统盘。为了方便修改代码,请先将代码文件夹复制到数据盘,命令如下:
cp -r /root/ultralytics-8.4.2 /root/workspace/之后进入代码目录:
cd /root/workspace/ultralytics-8.4.22.2 模型推理
修改 detect.py 文件,如下图所示:
# -*- coding: utf-8 -*- """ @Auth :落花不写码 @File :detect.py @IDE :PyCharm @Motto :学习新思想,争做新青年 """ from ultralytics import YOLO if __name__ == '__main__': # Load a model model = YOLO(model=r'yolo26n-pose.pt') model.predict(source=r'./ultralytics/assets/zidane.jpg', save=True, show=False, )推理代码的参数解释:
- model参数:该参数可以填入模型文件路径。
- source参数:该参数可以填入需要推理的图片或者视频路径,如果打开摄像头推理则填入0就行。
- save参数:该参数填入True,代表把推理结果保存下来,默认是不保存的,所以一般都填入True。
- show参数:该参数填入True,代表把推理结果以窗口形式显示出来,默认是显示的,这个参数根据自己需求打开就行,不显示你就填 False 就行。
使用以下命令测试推理效果:
python detect.py推理结果终端会显示的,自己去查看即可。
2.3 模型训练
模型训练还需要修改 data.yaml 数据集配置文件,需要自己上传 YOLO 格式数据集,并在data.yaml中修改对应的路径。示例如下:
data.yaml 参数解析如图所示:
之后修改 train.py 文件,如下图所示:
我的 train.py 文件代码如下,参考一下:
# -*- coding: utf-8 -*- """ @Auth :落花不写码 @File :train.py @IDE :PyCharm @Motto :学习新思想,争做新青年 """ import warnings warnings.filterwarnings('ignore') from ultralytics import YOLO if __name__ == '__main__': model = YOLO(model='/root/workspace/ultralytics-8.4.2/ultralytics/cfg/models/26/yolo26.yaml') model.load('yolo26n.pt') # 加载预训练权重,改进或者做对比实验时候不建议打开,因为用预训练模型整体精度没有很明显的提升 model.train(data=r'data.yaml', imgsz=640, epochs=200, batch=128, workers=8, device='0', optimizer='SGD', close_mosaic=10, resume=False, project='runs/train', name='exp', single_cls=False, cache=False, )修改完成后,在终端使用以下命令训练自己的模型:
python train.py训练过程如下,会输出保存的结果路径在哪里的,自己去查看和下载就行。
2.4 下载数据
服务器训练完,会保存模型,下载到本地就可以拿去用了,通过 Xftp 拖拉拽下载文件夹/文件,从右边拖拽文件夹/文件到左边的文件夹就行,文件的话可以鼠标双击就可以下载了,一般数据集比较大压缩后在下载,节约下载时间,反正上传和下载数据操作一样,只是拖拉拽方向不同。双击传输的任务,就可以看到传输状态了。
3. 训练日志与loss曲线生成
当你运行python train.py后,YOLO26会在project/name指定的目录(默认为runs/train/exp)下自动创建一个训练日志文件夹。这个文件夹里藏着我们最关心的东西——训练过程的详细记录。
3.1 日志文件结构
训练开始后,你会看到类似这样的目录结构:
runs/ └── train/ └── exp/ ├── weights/ # 存放best.pt和last.pt ├── results.csv # 关键!所有指标的数值记录 ├── args.yaml # 本次训练的超参数配置 └── ... # 其他图像化结果其中,results.csv是我们的重点。它是一个标准的CSV文件,每一列代表一个训练指标,每一行代表一个epoch的数据。你可以用pandas轻松读取它。
3.2 使用Pandas加载训练数据
我们可以写一段简单的Python脚本来读取并分析这些数据。在你的项目目录中创建一个名为plot_loss.py的文件:
import pandas as pd import matplotlib.pyplot as plt import seaborn as sns # 设置中文字体支持(可选) plt.rcParams['font.sans-serif'] = ['SimHei', 'Arial Unicode MS'] plt.rcParams['axes.unicode_minus'] = False # 读取results.csv results_path = 'runs/train/exp/results.csv' # 注意:YOLO26的CSV文件第一行可能是空的或注释,skiprows=1跳过第一行 data = pd.read_csv(results_path, skiprows=1) # 查看前几行数据,确认列名 print(data.columns.tolist())运行这段代码,你会看到输出的列名列表。YOLO26通常包含以下几类loss:
train/box_loss: 训练集边界框回归损失train/cls_loss: 训练集分类损失train/dfl_loss: 训练集分布焦点损失(Distribution Focal Loss)val/box_loss: 验证集边界框损失val/cls_loss: 验证集分类损失val/dfl_loss: 验证集DFL损失metrics/precision,metrics/recall,metrics/mAP_0.5等:验证集性能指标
4. loss曲线绘制与解读
有了数据,接下来就是画图。我们将分步骤绘制关键的loss曲线,并告诉你每条线背后的意义。
4.1 绘制总损失曲线
首先,我们绘制训练和验证的总损失(这里以box_loss为例,因为它对检测任务最关键):
# 设置绘图风格 sns.set_style("whitegrid") plt.figure(figsize=(12, 6)) # 绘制box loss plt.plot(data['epoch'], data['train/box_loss'], label='Train Box Loss', color='blue') plt.plot(data['epoch'], data['val/box_loss'], label='Validation Box Loss', color='orange') plt.xlabel('Epoch') plt.ylabel('Loss') plt.title('YOLO26 Training: Box Loss Curve') plt.legend() plt.tight_layout() plt.savefig('box_loss_curve.png', dpi=300, bbox_inches='tight') plt.show()4.2 绘制完整多子图分析
更专业的做法是将多个关键指标放在一张图里进行综合分析:
fig, axes = plt.subplots(2, 2, figsize=(15, 10)) fig.suptitle('YOLO26 Training Progress Analysis', fontsize=16) # 1. Box Loss axes[0, 0].plot(data['epoch'], data['train/box_loss'], label='Train', color='blue') axes[0, 0].plot(data['epoch'], data['val/box_loss'], label='Val', color='orange') axes[0, 0].set_title('Box Loss') axes[0, 0].set_xlabel('Epoch') axes[0, 0].set_ylabel('Loss') axes[0, 0].legend() # 2. Classification Loss axes[0, 1].plot(data['epoch'], data['train/cls_loss'], label='Train', color='green') axes[0, 1].plot(data['epoch'], data['val/cls_loss'], label='Val', color='red') axes[0, 1].set_title('Classification Loss') axes[0, 1].set_xlabel('Epoch') axes[0, 1].set_ylabel('Loss') axes[0, 1].legend() # 3. DFL Loss axes[1, 0].plot(data['epoch'], data['train/dfl_loss'], label='Train', color='purple') axes[1, 0].plot(data['epoch'], data['val/dfl_loss'], label='Val', color='brown') axes[1, 0].set_title('DFL Loss') axes[1, 0].set_xlabel('Epoch') axes[1, 0].set_ylabel('Loss') axes[1, 0].legend() # 4. mAP_0.5 axes[1, 1].plot(data['epoch'], data['metrics/mAP_0.5'], label='mAP@0.5', color='teal') axes[1, 1].set_title('Validation mAP@0.5') axes[1, 1].set_xlabel('Epoch') axes[1, 1].set_ylabel('mAP') axes[1, 1].legend() plt.tight_layout() plt.savefig('training_dashboard.png', dpi=300, bbox_inches='tight') plt.show()5. 如何正确解读loss曲线
画出曲线只是第一步,关键在于“读懂”它们。以下是几种常见情况的解读:
5.1 理想情况:健康收敛
- 表现:训练loss和验证loss都稳定下降,最终趋于平稳,且两者差距不大。
- 含义:模型正在有效学习,没有明显过拟合,训练可以继续直到loss不再显著下降。
5.2 过拟合(Overfitting)
- 表现:训练loss持续下降,但验证loss在某个点后开始上升。
- 解决方法:
- 增加数据增强(YOLO26中可通过
augment参数控制) - 使用早停(Early Stopping),YOLO26的
patience参数可设置 - 减少模型复杂度或增加正则化
- 增加数据增强(YOLO26中可通过
5.3 欠拟合(Underfitting)
- 表现:训练loss和验证loss都很高,且下降缓慢或停滞。
- 可能原因:
- 模型容量不足(尝试更大的YOLO26变体,如yolo26l)
- 学习率设置不当(过高导致震荡,过低导致收敛慢)
- 数据标注质量差或数据量不足
5.4 训练loss震荡
- 表现:训练loss上下波动,不平稳。
- 原因:batch size太小或学习率太高。
- 建议:适当增大batch size或降低学习率(lr0参数)。
6. 实用技巧与注意事项
- 不要只看最后的loss值:关注整个下降趋势比单看最后一个数字更重要。
- 结合mAP等指标一起看:loss下降不代表性能一定提升,最终要以验证集的mAP为准。
- 定期保存中间模型:YOLO26默认保存best和last模型,确保不会因意外中断而前功尽弃。
- 利用TensorBoard(可选):如果你启用了TensorBoard,可以在训练时实时监控loss曲线,无需等待训练结束。
7. 总结
通过这篇教程,你应该已经掌握了如何从YOLO26的训练日志中提取数据,并绘制出关键的loss曲线。更重要的是,你学会了如何解读这些曲线,从而判断模型的训练状态,及时发现问题并调整策略。记住,训练不是“扔给模型就不管了”,主动监控和分析才是获得高性能模型的关键。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。