YOLO26损失地图绘制:只改权重和数据集路径即可生成损失地图(Loss Landscape)

YOLO26损失地图绘制:只改权重和数据集路径即可生成损失地图(Loss Landscape)

ultralytics26-main7.25 中使用新增脚本 plot_loss_landscape.py,通过修改代码顶部的权重路径和数据集路径,直接运行代码生成损失等高线图、3D损失曲面图、中心截面图和CSV采样结果。

1. 损失地图的作用

损失地图用于观察模型当前权重附近的损失变化。脚本会从当前权重 theta_0 出发,随机生成两个参数方向 d_1d_2,然后在二维网格中扰动权重并重新计算检测损失:

θ(α,β)=θ0+αd1+βd2 \theta(\alpha,\beta)=\theta_0+\alpha d_1+\beta d_2 θ(α,β)=θ0+αd1+βd2

每个采样点都会计算一次 YOLO 检测损失:

最终得到一个二维损失矩阵,用于绘制等高线图和三维曲面图。低损失区域越平缓,说明模型在当前权重附近对参数扰动越不敏感。

2. 只需要修改两个路径

打开项目根目录中的:

text 复制代码
plot_loss_landscape.py

在文件顶部找到 Common configuration 区域,主要修改这两个参数:

python 复制代码
WEIGHTS_PATH = ROOT / r"yolo26n.pt"
DATA_PATH = ROOT / r"datasets\Aijiaojioashou\data.yaml"

如果你的权重在训练目录里,可以写成:

python 复制代码
WEIGHTS_PATH = ROOT / r"runs\detect\train\weights\best.pt"
DATA_PATH = ROOT / r"datasets\Aijiaojioashou\data.yaml"

改完后直接运行:

powershell 复制代码
python plot_loss_landscape.py

如果默认 python 没有安装 PyTorch,可使用当前可用的 YOLO 环境:

3. 迭代次数是哪个参数

损失地图不是训练脚本,所以这里没有训练意义上的 epochs。你要调的"迭代次数"对应:

python 复制代码
STEPS = 9

STEPS 表示每个方向采样多少个点,总计算次数是:

N=STEPS×STEPS N = STEPS \times STEPS N=STEPS×STEPS

例如:

STEPS 总采样点数 适合场景
5 25 快速测试脚本能否跑通
21 441 较平滑的正式图
31 961 更细腻,但耗时明显增加

所以,如果你想增加损失地图的迭代采样次数,就改:

python 复制代码
STEPS = 21

4. 关键参数说明

脚本顶部常用配置如下:

python 复制代码
WEIGHTS_PATH = ROOT / r"yolo26n.pt"
DATA_PATH = ROOT / r"datasets\Aijiaojioashou\data.yaml"
OUTPUT_ROOT = ROOT / "runs" / "loss_landscape"
RUN_NAME = "code_config_loss_landscape"

STEPS = 9
RADIUS = 0.05
MAX_BATCHES = 16
BATCH = 16
IMG_SIZE = 640
SPLIT = "val"
DEVICE = "auto"
参数 含义 建议
WEIGHTS_PATH 权重路径 .pt 文件,如 yolo26n.ptbest.pt
DATA_PATH 数据集配置 data.yaml
RUN_NAME 输出文件夹名称 每次实验可改一个新名字
STEPS 每个方向采样点数 主要控制"迭代次数"
RADIUS 权重扰动半径 常用 0.030.10
MAX_BATCHES 每个采样点计算多少个batch 快速测试用小值,正式图可加大
BATCH batch size 显存不足时调小
IMG_SIZE 输入分辨率 快速测试用 320,正式图用 640
SPLIT 数据划分 一般使用 val
DEVICE 运行设备 autocpu0cuda:0

其中:

python 复制代码
MAX_BATCHES = 0

表示使用完整验证集计算每个采样点的损失,结果更稳定,但耗时最长。

5. 推荐配置

快速测试:

python 复制代码
STEPS = 5
RADIUS = 0.05
MAX_BATCHES = 1
BATCH = 1
IMG_SIZE = 320

更平滑的正式图:

python 复制代码
STEPS = 21
RADIUS = 0.05
MAX_BATCHES = 8
BATCH = 4
IMG_SIZE = 640

如果机器性能足够,可以使用:

python 复制代码
STEPS = 31
MAX_BATCHES = 0

6. 输出文件

运行完成后,默认输出目录为:

text 复制代码
runs\loss_landscape\code_config_loss_landscape

主要输出文件:

文件 说明
loss_landscape.csv 每个采样点的 total_lossbox_losscls_lossdfl_loss
loss_landscape_contour.png 二维损失等高线图
loss_landscape_surface.png 三维损失曲面图
loss_landscape_profile.png 中心截面损失曲线
loss_landscape_report.png 综合报告图
metadata.json 记录权重、数据集、采样参数和最低损失点

7. 图像展示

综合报告图:

二维等高线图:

三维损失曲面图:

中心截面图:

8. 如何解读损失地图

观察对象 含义
中心点 当前权重位置
低损失区域 模型在该区域内保持较低检测损失
等高线密集程度 越密集表示该方向损失变化越快
3D曲面陡峭程度 越陡说明模型对参数扰动越敏感
中心截面曲线 用一维曲线观察两个方向上的损失变化

损失地图只能说明当前权重附近的局部损失形态,不等同于最终精度。正式分析时,应结合 Precision、Recall、mAP、混淆矩阵和可视化结果一起判断。

9. 常见问题

为什么不是 epochs

因为这个脚本不会重新训练模型,只是在已有权重附近做扰动并计算损失,所以控制计算次数的是 STEPS

运行太慢怎么办?

STEPS 改成 5,把 MAX_BATCHES 改成 1,把 IMG_SIZE 改成 320

显存不够怎么办?

BATCH 改成 1,或把 DEVICE 改成 cpu

图不够平滑怎么办?

STEPS9 提高到 21,并把 MAX_BATCHES 提高到 80

只想用 yolo26n.pt 怎么写?

直接在顶部配置中写:

python 复制代码
WEIGHTS_PATH = ROOT / r"yolo26n.pt"
DATA_PATH = ROOT / r"datasets\Aijiaojioashou\data.yaml"

10. 最简流程

  1. 打开 plot_loss_landscape.py
  2. 修改 WEIGHTS_PATHDATA_PATH
  3. 修改 STEPS 控制采样次数。
  4. 运行 python plot_loss_landscape.py
  5. 打开 runs\loss_landscape\code_config_loss_landscape\loss_landscape_report.png

最终最常用配置:

python 复制代码
WEIGHTS_PATH = ROOT / r"yolo26n.pt"
DATA_PATH = ROOT / r"datasets\Aijiaojioashou\data.yaml"
STEPS = 9
RADIUS = 0.05
MAX_BATCHES = 4
BATCH = 2
IMG_SIZE = 640
DEVICE = "auto"
相关推荐
kobesdu1 小时前
从零推导FAST-LIO的观测雅可比矩阵
人工智能·算法·矩阵
u0103055271 小时前
使用BufferedReader读取控制台输入
人工智能·1024程序员节
测试开发技术1 小时前
AI 测试提效 | 告别手工写脚本,分享我的 Playwright + Skill 批量生成 UI 自动化脚本方案
自动化测试·人工智能·ui·自动化·agent·skill·ai测试
乐思智能科技有限公司2 小时前
PLECS软件学习使用(二)直流电机基本系统模型
人工智能·算法·机器学习·面试·职场和发展
极连AI2 小时前
极连AI平台解读、Codex5.6仅需0.01倍率,无需Token焦虑,极速响应
人工智能·gpt·chatgpt·aigc·ai编程·ai写作·gpu算力
MartinYeung52 小时前
[论文学习]PACT:溯源感知能力合约——面向智能体安全的参数级溯源
人工智能·学习·安全
带娃的IT创业者2 小时前
Inkling:当开源模型开始思考“如何思考”
人工智能·开源·大语言模型·多模态·moe·开源模型·inkling
远航计算机2 小时前
职业技能培训机构如何利用QClaw+Skills做豆包GEO:知识库搭建×内容创作×效果监测的完整实操手册
大数据·人工智能·自动化·aigc·火山引擎
旋生万物2 小时前
电磁力 = 螺旋联络的 90° 旋转?麦克斯韦方程组的几何重构
人工智能·python·算法·机器学习·copilot·世界模型·物理ai
Vince的修炼之路2 小时前
防 Prompt 注入安全技术深度分析
人工智能·安全