- 任务:
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
- seen:
- 设备:CUDA (
RTX 3080 Ti Laptop GPU)。 - 本次为快速趋势评估:
max_batches=8(不是全量 benchmark)。 - 输出目录:
/tmp/physguard_alone_per_epoch_quick。
| 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 9为16.3775 dB。- 相比峰值,末期下降约
1.50 dB,呈现明显“后期崩盘”趋势。
说明:
- 以上曲线用于趋势判断(
max_batches=8采样评估)。 - 若用于论文最终定量结论,建议再跑全量(
max_batches=0)。
当前环境已可在 CUDA 上做实测。这里给出可复现的两类结果:
- 结构统计:
torchinfo.summary的mult-adds; - 运行实测:
torch.cuda.max_memory_allocated()的前向+反向峰值显存。
仍需说明的是:当前栈下 fvcore 与 torch.profiler(with_flops) 在本模型上会遇到动态算子兼容问题(conv1d padding tracing error 或 profiler 崩溃),因此本文以 mult-adds + 显存实测 作为主报告口径。
配置说明:
- ckpt:
epoch 9(/tmp/physguard_alone_ckpts/9.pth) - 输入:真实样本
bikesplit 中 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 与输入集)。
在给出上述实测口径之外,理论上仍可分解为:
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 远小于主干卷积/重建计算,额外开销主要来自校准分支与辅助损失的前后向。
训练期显存近似:
M_train ≈ M_backbone + M_calib + M_opt
- 主导项仍是主干特征激活
M_backbone; - 校准参数本身低维,参数存储开销较小;
- 增量主要来自附加分支激活与对应梯度缓存。
从 results_sensorcalib_physguard_10ep 日志时间戳看:
- 后期(epoch 8/9)每个 epoch 为小时级(约
2h量级,受硬件/IO/评估流程影响)。
因此,在缺少统一 profiler 标准流程时,建议在文稿中表述为:
- “复杂度结论基于实测 mult-adds/显存与训练时长近似,不构成跨平台严格 benchmark。”
- “PhysGuard Alone 在 Unseen 上表现出明显的后期退化:性能在早期达到峰值后,后续 epoch 震荡下滑,说明仅硬约束路由不足以保证训练后期稳定性。”
- “复杂度报告采用两部分:模型 mult-adds 统计与 CUDA 峰值显存实测。由于当前工具链对部分动态算子的 FLOPs tracing 兼容性限制,本文不将其表述为严格跨平台 benchmark。”