Appearance
Torch Lens Maker
Torch Lens Maker에 오신 것을 환영합니다. 이 라이브러리는 PyTorch를 기반으로 하는 미분 가능한 기하 광학 (differentiable geometric optics)을 위한 오픈 소스 Python 라이브러리입니다. 현재 매우 실험적인 프로젝트 단계이며, 목표는 현대적인 컴퓨터 코드와 최첨단 수치 최적화 (numerical optimization)를 사용하여 복잡한 실제 광학 시스템 (렌즈, 거울 등)을 설계할 수 있도록 하는 것입니다.
python
import torchlensmaker as tlm
optics = tlm.Sequential(
tlm.ObjectAtInfinity(beam_diameter=10, angular_size=20),
...
이 프로젝트의 핵심은 *미분 가능한 기하 광학 (differentiable geometric optics)*입니다. 즉, 3D 충돌 감지 (collision detection)와 광학 법칙이 PyTorch로 구현되어 있습니다. PyTorch는 세계적인 수준의 자동 미분 (automatic differentiation)을 제공하며, GPU 지원을 갖춘 최첨단 수치 최적화 알고리즘에 접근할 수 있게 해줍니다.
핵심 아이디어는 신경망 (neural network)의 레이어 (layer)와 소위 순차적 (sequential) 광학 시스템의 광학 요소 (optical elements) 사이에 강력한 유사성이 존재한다는 것입니다. 일련의 렌즈, 거울 등으로 구성된 복합 광학 시스템이 있다면, 각 광학 요소를 신경망의 레이어처럼 취급할 수 있습니다. 이 네트워크를 통해 흐르는 데이터는 이미지, 소리, 또는 텍스트가 아니라 빛의 광선 (rays of light)입니다. 각 레이어는 내부 파라미터 (표면 형상, 굴절 물질 등)에 따라, 그리고 매우 비선형적인 스넬의 법칙 (Snell's law)을 따라 광선에 영향을 미칩니다. 추론 (Inference), 즉 순방향 모델 (forward model)은 주어진 입력 광에 대해 시스템의 출력 광을 계산하는 광학 시뮬레이션입니다. 학습 (Training), 즉 최적화 (optimization)는 우리가 원하는 곳에 빛을 모으기 위한 렌즈의 최적 형상을 찾는 과정입니다.
| 신경망 (Neural Network) | 광학 시스템 (Optical system) |
|---|
| 데이터 (Data) | 이미지, 텍스트, 오디오 |
| 레이어 (Layers) | Conv2d, Linear, ReLU |
| 손실 함수 (Loss Function) | 레이블된 예시에 대한 예측 오차 |
놀라운 점은 우리가 torch.nn과 nn.Module을 거의 직접적으로 사용할 수 있다는 것입니다. 마치 Conv2d나 ReLU를 쌓는 것처럼 렌즈와 거울을 쌓을 수 있습니다.
그런 다음, 전체 시스템을 표준 PyTorch의 optimize()에 통과시켜 매개변수화된 표면(parametric surfaces)의 최적값을 찾습니다. 렌즈를 설계하는 과정은 놀랍게도 신경망 (Neural Network)을 학습시키는 것과 매우 유사합니다! 일단 이것이 구현되면, 자동 미분 (Automatic Differentiation), 최적화 알고리즘 (Optimization Algorithms), 합성 가능성 (Composability), GPU 학습 (GPU Training), 분산 학습 (Distributed Training) 등 현대 오픈 소스 머신러닝 도구들의 강력한 기능을 '공짜로' 얻게 됩니다.
게다가 build123이나 OpenSCAD 같은 소프트웨어를 사용해 본 결과, 코드를 작성하는 것이 기계적 3D 시스템을 설계하는 매우 강력한 방법이라고 굳게 믿게 되었습니다. 이 프로젝트는 광학 시스템 (Optical Systems)을 대상으로 그 가능성을 탐구하는 작업입니다.
준비가 되셨다면, 언제든 들어와서 예제들을 살펴보시기 바랍니다.
코드 작성을 시작하려면 '시작하기 (getting started)'를 참조하세요.
실험적인 프로젝트입니다!
이 프로젝트는 매우 초기 단계에 있습니다. API는 안정적이지 않으며 예고 없이 변경될 것입니다. 안정적인 릴리스는 아직 먼 미래의 일입니다.