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"
相关推荐
码视野几秒前
基于 Vue3 + Element Plus 的【青少年心理健康智能测评与 AI 情绪树洞陪护干预系统】设计与实现(含PRD/三端源码/大屏)
前端·vue.js·人工智能·vue3
茶马古道的搬运工3 分钟前
AI 深度技能之-解读Hermes Agent(九)- Hermes Bot
人工智能
桃西西呀3 分钟前
国内金价破 1000,「涨了多少」和「该买多少」是数学问题
人工智能·python·数据分析
2401_865261635 分钟前
亦唐科技:推动国产贴片机技术突破,打造智能制造新标杆
人工智能
智能运维指南5 分钟前
Confluence 停服、数据出境、知识散落:企业知识管理系统如何破局?
大数据·人工智能·microsoft
x868 分钟前
Operit 深度拆解:手机里的开源 AI 操作系统
人工智能·智能手机·开源
钉钉开发者社区9 分钟前
来钉钉,接入 DeepSeek Harness
人工智能·ai·钉钉·钉钉cli
龙虾PRO10 分钟前
大模型时代二进制漏洞攻防体系重构:从 AFL 模糊测试到 AI 智能体的全链路落地路径
人工智能·重构
围炉聊科技12 分钟前
OpenAdapt:录制一次,确定性回放
人工智能·后端·架构
武汉星际互动15 分钟前
边聊边办深度测评:从咨询到办结一站办成
人工智能·政务