☰
DeepLens E2 执行笔记:课程学习镜头设计全流程实录
2026/10/9 5:43:27 网站建设 项目流程

DeepLens E2 执行笔记:课程学习镜头设计全流程实录

论文:Curriculum Learning for ab initio deep learned refractive optics (Nature Communications, 2024)
代码库:github.com/vccimaging/DeepLens(AutoLens 评价/设计框架)
实验路线:理解优先复现路线 E1–E4 之 E2
执行环境:AutoDL 西北B区 · RTX 4090 · PyTorch 2.1.2+cu121
执行日期:2026-10-07 22:42 – 2026-10-08 00:23(约 101 分钟)

目录

  • 摘要
  • 一、E2 的定位与实验设计
  • 二、执行环境与成本
  • 三、Stage 1:课程学习 40 分钟实录
    • 3.1 课程热启动效应(iter 0 → 40)
    • 3.2 课程调度核心观测指标
    • 3.3 边缘视场的"故意欠拟合"
  • 四、Stage 2:精修 60 分钟实录
    • 4.1 关键现象:进入精修后 RMS 反而变大
    • 4.2 精修结果与论文成品对标
  • 五、结果解读:边缘未收敛说明了什么
  • 六、素材产出与公众号用法
  • 七、经验沉淀
  • 附录 A:命令清单
  • 附录 B:下一步(E3 预告)

摘要

E2 在 RTX 4090 上以百分钟、3 元成本跑通 AutoLens 两阶段设计:课程学习 2000 迭代将中心 RMS 光斑从 962μm 压至 8.5μm,精修 3000 迭代后达 5.6μm,对齐论文成品;边缘视场 60/91μm 未收敛,印证课程长度对边缘像质的关键作用。


一、E2 的定位与实验设计

E1 已完成"评价论文成品"(cellphone.json 的 RMS 光斑分析),回答了**“论文做出来了什么”。E2 则回答"论文是怎么做出来的"**——直接运行1_autolens.py,从平板玻璃初始结构出发,完整经历论文的核心贡献:两阶段可微光线追迹优化。

两阶段流程与论文方法的对应关系:

阶段论文机制实现细节
Stage 1: Curriculum learning (2000 iter)正弦课程调度逐步放开 FoV 边缘视场权重;三项正则(光线角度、面间距、面梯度)lr=[1e-4, 1e-3, 1e-2, 1e-4],spp=512,num_ring=8,num_arm=1
Stage 2: Fine-tuning centroid=True (3000 iter)全视场全权重精修,光线质心对齐lr 整体降 20 倍,num_arm=2,rays_per_fov=1024

设计目标:foclen=5.0mm,FoV=90°,F/1.8。最终输出规格:FoV=0.8015 rad(半视场约 45.9°,全视场约 91.8°)、F/1.74、r_sensor=5.0mm——三项设计约束均达成。

二、执行环境与成本

项目明细
实例AutoDL 西北B区deeplens(E1 同一实例,环境与补丁原样保留)
GPURTX 4090(有卡模式 ¥1.88/h)
软件PyTorch 2.1.2+cu121 + numpy 1.26.4(base 环境零安装)
用时Stage 1: 40min46s;Stage 2: 59min55s;合计约 101 min
成本约 ¥3.2(含少量调试时间)
产出目录~/AutoLens/results/1007-224249-AutoLens-OhbV/

迁移插曲:实验前西北B区显卡一度售罄,已规划跨区迁移至内蒙B区并完成新实例环境部署(DeepLens-main.zip + torch 2.1.2+cu118 + numpy 降级)。临执行时西北B区 4090 恢复可用,遂放弃迁移直接续跑——旧实例上 E1 的三处补丁(r_sensor、NBS 分辨率卡、渲染 OOM 规避)全部继承,省去重复踩坑。教训:迁移决策前先刷新一遍库存页面。

三、Stage 1:课程学习 40 分钟实录

3.1 课程热启动效应(iter 0 → 40)

节点FoV 0.0FoV 0.5FoV 1.0解读
iter 0962.4 μm964.3 μm964.0 μm平板玻璃,无聚焦能力
iter 4055.5 μm26.9 μm60.5 μm17 倍骤降,课程热启动生效
iter 1905 (95%)8.3 μm82.3 μm84.5 μm中心收敛,边缘仍粗
iter 2001 (结束)8.5 μm81.9 μm86.1 μm课程全程走完

iter 0→40 的骤降是论文 Fig.2"课程调度避免优化陷入坏极小值"的直接证据:三项正则尚未收紧时,系统先以最小阻力把光斑收敛到可用量级。

3.2 课程调度核心观测指标

loss_distortion的完整轨迹:

iter 0: 1.88 → iter 40: 1.88 → iter 320: 1.39 → iter 1905: 0.0127 → 课程结束: 0.0178

约148 倍降幅,单调缓降无突跳——正弦课程t_i = t_a + (t_b - t_a)·sin(iπ/2N)将边缘视场约束平滑注入,而非阶跃式加载。这是"课程"区别于普通多目标加权调度的本质特征,也是本实验最值得画进 GIF 的一条曲线。

其余损失项行为:loss_clearance(面间距约束)从 1.26 快速压至 0.01 量级;loss_ray_bend稳定在 0.05–0.08;loss_rms全程 0.04–0.06 微幅波动(归一化后梯度通道保持活跃)。

3.3 边缘视场的"故意欠拟合"

课程结束时边缘视场仍在 82/86 μm,这不是失败而是课程设计:正弦调度把大 FoV 权重留到最后才完全放开,课程结束时刻恰是边缘视场"刚刚解锁"的状态,细磨任务交给 Stage 2。

四、Stage 2:精修 60 分钟实录

4.1 关键现象:进入精修后 RMS 反而变大

节点FoV 0.0FoV 0.5FoV 1.0
课程结束(稀疏采样)8.5 μm81.9 μm86.1 μm
精修 iter 0(加密采样)21.0 μm101.5 μm66.7 μm
精修结束 / final5.6 μm60.4 μm91.2 μm

镜头没变差,是尺子变细了:Stage 2 将采样从 num_arm=1 加密到 num_arm=2、rays_per_fov=1024,原先被稀疏网格漏采的高阶像差全部暴露。这正是"评价精度必须与优化精度同步升级"的方法论体现——若精修仍用粗网格,等于在错误的坐标系里做精细调整。

4.2 精修结果与论文成品对标

指标E2 自研成品(final_lens.json)E1 论文成品(cellphone.json)差距
FoV 0.0 RMS5.6 μm6.4 μm反超 ✓
FoV 0.5 RMS60.4 μm5.6 μm约 11 倍
FoV 1.0 RMS91.2 μm4.1 μm约 22 倍
畸变损失1.12e-5—已近零

中心视场达到论文水平(甚至略优),但边缘视场差一个数量级以上。

五、结果解读:边缘未收敛说明了什么

这是本次实验最有价值的发现,与论文动机形成闭环:

  1. 课程长度决定边缘像质。本次仅用论文设定 1/10 量级的迭代预算(2000+3000 vs 完整训练),中心视场可以"抄近道"收敛,边缘视场的像差空间需要课程充分展开后长时间精修才能压平——课程不是加速器,而是边缘视场可行性的门票。
  2. 这是论文的卖点而非 bug。若不用课程学习、直接全权重优化,文献与论文消融均显示边缘视场会卡死在不可用区域;本实验"压缩课程"得到的 60/91 μm,恰是介于"完全不用课程"与"完整课程"之间的中间态证据。
  3. 对复现者的启示:验证课程学习价值的最小实验,不在于跑出论文级数字,而在于复现"课程阶段 loss_distortion 平滑下降 + 边缘视场可被继续优化"的动力学特征——本实验两者均观察到。

六、素材产出与公众号用法

产出目录~/AutoLens/results/1007-224249-AutoLens-OhbV/,每 40 迭代存一份镜头 JSON + 光斑图,天然构成演化帧序列:

  • 演化 GIF:ffmpeg -framerate 3将课程+精修两段帧序列拼接,直观呈现"平板玻璃 → 透镜成形 → 边缘解锁"过程,适合作为公众号首图或文末彩蛋;
  • 对比图:curriculum_final.json与final_lens.json的剖面对比,量化 Stage 2 贡献;
  • 曲线素材:loss_distortion 全程轨迹(1.88 → 1.1e-5)与三视场 RMS 轨迹,可从日志直接重绘。

七、经验沉淀

  1. 长任务先起 tmux:本次进程未包 tmux,靠 SSH 稳定撑完 101 分钟属侥幸。标准动作tmux new -s 任务名后再启动训练,断线可tmux attach -t 任务名续看。
  2. 无warn不慌:libgomp: Invalid value for OMP_NUM_THREADS与Nimbus Sans字体缺失警告全程刷屏但零影响,判断标准是结果数值是否正常产出。
  3. 迁移决策先刷新库存:跨区迁移成本(重装环境+重踩三坑)远高于等卡 2 小时;GPU 云的库存是分钟级波动的。
  4. 环境快照意识:本次能"零安装"续跑,完全依赖 E1 实例的环境原样保留。跨区新装一遍 DeepLens 环境实际花掉约 1.5 小时(含 numpy 2.x 兼容坑),可作为迁移成本的经验系数。

附录 A:命令清单

# 环境验证(有卡模式开机后)python-c"import torch, numpy; print(numpy.__version__); \ print(torch.__version__, torch.cuda.is_available())"# E2 全流程(建议 tmux 内执行)cd~/AutoLens&&tmux new-se2 python 1_autolens.py# 结果打包cd~/AutoLens/resultstarczf E2_results.tar.gz1007-224249-AutoLens-OhbV/# 演化 GIF(文件名 pattern 以实际产出为准)ffmpeg-framerate3-pattern_typeglob\-i'spot_diagram_iter*.png'-vfscale=640:-1-pix_fmtyuv420p\../E2_evolution.gif

附录 B:下一步(E3 预告)

E2 验证了两阶段流程的可复现性;E3 计划做微型消融——关闭课程调度(直接全权重优化)跑对照,观察边缘视场是否如论文所述陷入劣质解,用最小成本把"课程必要性"从文献结论变成一手证据。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询