Show HN:Torch Lens Maker - 基于 PyTorch 的可微几何光学
Torch Lens Maker
欢迎来到 Torch Lens Maker,这是一个基于 PyTorch 的可微几何光学开源 Python 库。 目前,这是一个非常实验性的项目,目标是能够使用现代计算机代码和最先进的数值优化来设计复杂的真实世界光学系统(透镜、反射镜等)。
import torchlensmaker as tlm
optics = tlm.Sequential(
tlm.ObjectAtInfinity(beam_diameter=10, angular_size=20),
tlm.Gap(15),
tlm.RefractiveSurface(tlm.Sphere(diameter=25, R=-45.0), material="BK7-nd"),
tlm.Gap(3),
tlm.RefractiveSurface(tlm.Sphere(diameter=25, R=tlm.parameter(-20)), material="air"),
tlm.Gap(100),
tlm.ImagePlane(50),
)
tlm.optimize(optics, tlm.optim.Adam(optics.parameters(), lr=5e-4), {"base": 10, "object": 5}, 100)
tlm.show2d(optics, title="Landscape Lens")
tlmviewer error: Error: Error creating WebGL context.
该项目的核心是 可微几何光学:使用 PyTorch 实现的 3D 碰撞检测和光学定律。 PyTorch 提供了世界一流的自动微分功能,以及对具有 GPU 支持的最先进数值优化算法的访问。
关键思想是,神经网络的层与所谓的 顺序 光学系统中的光学元件之间存在很强的类比关系。 如果我们有一个由一系列透镜、反射镜等组成的复合光学系统,我们可以将每个光学元件视为神经网络的一层。 流经该网络的数据不是图像、声音或文本,而是光线。 每层根据其内部参数(表面形状、折射材料...)并遵循非常非线性的 Snell 定律来影响光线。 推理或正向模型是光学模拟,其中给定一些输入光,我们计算系统的输出光。 训练或优化是找到透镜的最佳形状,以将光聚焦在我们想要的位置。
神经网络| 光学系统 ---|--- 数据| 图像、文本、音频 | 光线 层| Conv2d、Linear、ReLU | 折射、反射、间隙 损失函数| 标记示例的预测误差 | 像平面中的聚焦误差
神奇之处在于,我们可以直接使用 torch.nn
和 nn.Module
,像堆叠 Conv2d
和 ReLU
一样堆叠透镜和反射镜。 然后,将整个过程传递给标准的 PyTorch optimize()
以找到参数化曲面的最佳值,并且设计透镜出奇地类似于训练神经网络! 一旦实现了这一点,你就可以“免费”获得现代开源机器学习工具的强大功能:自动微分、优化算法、可组合性、GPU 训练、分布式训练等等。
最重要的是,在尝试了 build123 和 OpenSCAD 等软件后,我坚信编写代码是设计机械 3D 系统的一种非常强大的方式,而这个项目是对它的探索,但适用于光学系统。
实验性项目!
该项目还处于非常早期的阶段,我有一个 非常长的路线图 计划,并且我正在 寻找资金 以便能够继续全职工作! 如果可以,请考虑捐款、赞助甚至雇用我! 😊💚
此外,API 将 在没有警告的情况下更改。 稳定版本在未来还很遥远。