Skip to content

Latest commit

 

History

History
106 lines (74 loc) · 4.71 KB

File metadata and controls

106 lines (74 loc) · 4.71 KB

PhysGuard Alone 崩盘趋势与复杂度说明

1) 评估设置与数据来源

  • 任务:PhysGuard Alone 的 per-epoch Unseen 指标趋势分析。
  • 评估脚本:tools/eval/eval_physguard_unseen_per_epoch.py
  • 模型 ckpt:/tmp/physguard_alone_ckpts/{0..9}.pth(由仓库中 results_sensorcalib_physguard_10ep 合并链接)。
  • 数据集:
    • seen: /home/lingxufeng/dataset/bike
    • unseen: /home/lingxufeng/dataset/Unseen_spad/Unseen_spad
  • 设备:CUDA (RTX 3080 Ti Laptop GPU)。
  • 本次为快速趋势评估:max_batches=8(不是全量 benchmark)。
  • 输出目录:/tmp/physguard_alone_per_epoch_quick

2) 后期崩盘趋势(Unseen)

Epoch Unseen PSNR (dB) Unseen SSIM Unseen RMSE Unseen MAD
0 17.1805 0.6529 0.2362 0.1519
1 17.4776 0.6322 0.2388 0.1539
2 17.8771 0.6640 0.2359 0.1399
3 17.4935 0.6480 0.2468 0.1552
4 17.4916 0.6294 0.2377 0.1427
5 16.9609 0.6321 0.2449 0.1536
6 17.4314 0.6454 0.2377 0.1426
7 16.6914 0.6094 0.2361 0.1413
8 17.0083 0.5739 0.2519 0.1629
9 16.3775 0.5924 0.2628 0.1769

结论(趋势):

  • Unseen PSNR 在 epoch 2 达峰值(17.8771 dB)。
  • epoch 3 后整体震荡下滑,epoch 916.3775 dB
  • 相比峰值,末期下降约 1.50 dB,呈现明显“后期崩盘”趋势。

说明:

  • 以上曲线用于趋势判断(max_batches=8 采样评估)。
  • 若用于论文最终定量结论,建议再跑全量(max_batches=0)。

3) FLOPs / 内存说明(按当前证据边界)

当前环境已可在 CUDA 上做实测。这里给出可复现的两类结果:

  • 结构统计:torchinfo.summarymult-adds
  • 运行实测:torch.cuda.max_memory_allocated() 的前向+反向峰值显存。

仍需说明的是:当前栈下 fvcoretorch.profiler(with_flops) 在本模型上会遇到动态算子兼容问题(conv1d padding tracing error 或 profiler 崩溃),因此本文以 mult-adds + 显存实测 作为主报告口径。

3.0 挂载/非挂载实测结果(本环境)

配置说明:

  • ckpt: epoch 9 (/tmp/physguard_alone_ckpts/9.pth)
  • 输入:真实样本 bike split 中 1 个 batch(B=1
  • device: CUDA (RTX 3080 Ti Laptop GPU)
  • 挂载定义:model.use_sensor_calib = 1;非挂载:model.use_sensor_calib = 0

结果:

模式 Params Mult-Adds (forward) 近似 GFLOPs* (forward) 峰值显存 (forward+backward)
非挂载 13,127,220 894,838,092,801 1,789.68 11,502.93 MB
挂载 13,127,220 894,838,092,801 1,789.68 11,504.32 MB

* 换算口径:GFLOPs ≈ 2 × GMAdds(一次乘加按 2 FLOPs 计)。

观察:

  • 在该 ckpt 与输入下,挂载/非挂载的 mult-adds 一致;
  • 峰值显存差约 1.39 MB,可视为几乎无差异(该配置下)。

若需要“严格 benchmark”(跨硬件、跨驱动、算子级可重复),仍建议补齐统一 profiler 记录(同版本 CUDA/cuDNN、固定 seed、固定 batch 与输入集)。

3.1 理论 FLOPs 分解

在给出上述实测口径之外,理论上仍可分解为:

F_ours ≈ F_base + F_pcgrad + F_calib + F_aux

  • F_pcgrad:梯度内积/投影,随共享参数量线性增长;
  • F_calib:校准分支(IRF/gain/background/dt/window)前后向;
  • F_aux:附加损失(measurement / poisson / prior)。

通常 F_pcgrad 远小于主干卷积/重建计算,额外开销主要来自校准分支与辅助损失的前后向。

3.2 理论内存分解

训练期显存近似:

M_train ≈ M_backbone + M_calib + M_opt

  • 主导项仍是主干特征激活 M_backbone
  • 校准参数本身低维,参数存储开销较小;
  • 增量主要来自附加分支激活与对应梯度缓存。

3.3 训练时长近似(来自现有日志)

results_sensorcalib_physguard_10ep 日志时间戳看:

  • 后期(epoch 8/9)每个 epoch 为小时级(约 2h 量级,受硬件/IO/评估流程影响)。

因此,在缺少统一 profiler 标准流程时,建议在文稿中表述为:

  • “复杂度结论基于实测 mult-adds/显存与训练时长近似,不构成跨平台严格 benchmark。”

4) 建议用于论文的表述

  • “PhysGuard Alone 在 Unseen 上表现出明显的后期退化:性能在早期达到峰值后,后续 epoch 震荡下滑,说明仅硬约束路由不足以保证训练后期稳定性。”
  • “复杂度报告采用两部分:模型 mult-adds 统计与 CUDA 峰值显存实测。由于当前工具链对部分动态算子的 FLOPs tracing 兼容性限制,本文不将其表述为严格跨平台 benchmark。”