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

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

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

1. 损失地图的作用

损失地图用于观察模型当前权重附近的损失变化。脚本会从当前权重 theta_0 出发,随机生成两个参数方向 d_1 和 d_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.pt、best.pt
DATA_PATH 数据集配置 填 data.yaml
RUN_NAME 输出文件夹名称 每次实验可改一个新名字
STEPS 每个方向采样点数 主要控制"迭代次数"
RADIUS 权重扰动半径 常用 0.03 到 0.10
MAX_BATCHES 每个采样点计算多少个batch 快速测试用小值,正式图可加大
BATCH batch size 显存不足时调小
IMG_SIZE 输入分辨率 快速测试用 320,正式图用 640
SPLIT 数据划分 一般使用 val
DEVICE 运行设备 auto、cpu、0、cuda: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_loss、box_loss、cls_loss、dfl_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。

图不够平滑怎么办?

把 STEPS 从 9 提高到 21,并把 MAX_BATCHES 提高到 8 或 0。

只想用 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_PATH 和 DATA_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"
相关推荐
xsd202411188 分钟前
从自主导航到视觉读表:一台工业巡检机器人的全栈技术链路拆解
人工智能
袁哥大话安全13 分钟前
巡隐WEBSHELL扫描软件
人工智能·安全·web
论文复现现场28 分钟前
8卡4090能跑70B吗?Llama-2显存预算、QLoRA与通信瓶颈
人工智能·深度学习·分布式训练·llama·显存·qlora·算家云
酷虎软件28 分钟前
如何用AI创作AI歌曲AI音乐
人工智能
小宋102134 分钟前
A2UI从零实战:Agent安全生成交互界面与事件回传
javascript·人工智能·安全·交互
罗小罗同学35 分钟前
谷歌团队在Nat Med最新发表的医学多模态模型,4B参数的模型性能逼近671B的DeepSeek
人工智能·医学图像处理·医工交叉·医学ai
GlobalInfo38 分钟前
2026年推理算力超越训练算力,市场调研该关注什么
大数据·人工智能·ai·芯片
陈然信息站42 分钟前
PCB覆膜检测场景下明治ESE-10N色标传感器技术适配性分析
人工智能
阿里云大数据AI技术43 分钟前
阿里云 Milvus 自研内核 EAGLE 发布:向量检索的SOTA,我们决定自己造
人工智能
码流子1 小时前
04-AI标注系统
人工智能