news 2026/4/1 20:36:49

YOLO26训练可视化:loss曲线查看与分析教程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
YOLO26训练可视化:loss曲线查看与分析教程

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.2

2.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参数可设置
    • 减少模型复杂度或增加正则化

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星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/27 20:43:15

传统BI vs SUPERSET:我们如何将看板开发效率提升10倍

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个效率对比演示工具,展示同一个销售分析看板在传统BI工具和SUPERSET中的实现过程。要求:1)分步骤记录两种方式的时间消耗 2)自动生成对比图表 3)突出…

作者头像 李华
网站建设 2026/3/31 11:32:56

UNet人脸融合项目地址在哪?快速找到源文件

UNet人脸融合项目地址在哪?快速找到源文件 1. 引言:为什么需要知道项目源文件位置? 你是不是也遇到过这种情况:好不容易部署好了一个人脸融合的AI应用,界面能打开、功能也能用,但突然想改点代码、加个功能…

作者头像 李华
网站建设 2026/3/31 0:36:50

通义千问3-14B镜像部署:WebUI界面汉化设置步骤详解

通义千问3-14B镜像部署:WebUI界面汉化设置步骤详解 你是不是也遇到过这种情况:好不容易把大模型部署起来,结果Web界面全是英文,操作起来一头雾水?特别是刚上手Ollama和Ollama-WebUI的时候,点哪个按钮都得靠…

作者头像 李华
网站建设 2026/3/30 13:55:28

通义千问3-14B函数调用踩坑?vLLM集成部署详细步骤

通义千问3-14B函数调用踩坑?vLLM集成部署详细步骤 1. 为什么Qwen3-14B值得你花时间折腾 很多人第一次看到“14B参数却对标30B性能”时,下意识觉得是营销话术。但当你真把Qwen3-14B跑起来,尤其是开启Thinking模式处理一份12万字的PDF技术文档…

作者头像 李华
网站建设 2026/3/11 0:35:25

NewBie-image-Exp0.1性能评测:3.5B参数模型推理速度与显存占用分析

NewBie-image-Exp0.1性能评测:3.5B参数模型推理速度与显存占用分析 1. 为什么需要关注这个3.5B参数的动漫生成模型? 你可能已经用过不少图像生成工具,但真正能在单卡上跑起来、又不牺牲画质的动漫大模型其实不多。NewBie-image-Exp0.1不是那…

作者头像 李华
网站建设 2026/3/13 19:00:32

广告设计新利器!Qwen-Image-Edit-2511快速替换文案元素

广告设计新利器!Qwen-Image-Edit-2511快速替换文案元素 在广告设计、电商运营和品牌宣传中,频繁修改图片中的文字内容是常态。传统方式依赖Photoshop等专业工具,不仅耗时,还要求操作者具备一定设计基础。如今,随着AI图…

作者头像 李华