Skip to main content
Dflat
Dflat

An End-to-End Design Framework for Diffractive Optics and Metasurface-Based Vision Systems

Auto-differentiable RCWA, Field Propagation, Rendering, Neural Surrogate Models

Python PyTorch License: MIT

Version PyPI version Pytest Workflow codecov

DFlat is an auto-differentiable design framework for flat optics, specially geared to the design of dielectric metasurfaces for imaging and sensing tasks. This package was first introduced in a 2022 manuscript available at arxiv. It was later published alongside our paper, Polarization Multi-Image Synthesis with Birefringent Metasurfaces, in the proceedings of the 2023 IEEE International Conference of Computational Photography (ICCP). It was rewritten in 2024 with Version 2.0 and subsequent releases. V2 onwards has been released under the MIT License.

DFlat provides users with:

  • A validated, auto-differentiable framework for field propagation, point-spread function calculations, and image rendering built on Pytorch.
  • A growing set of pre-trained, efficient neural networks to model the optical response of metasurface cells (alongside the released datasets).
  • A new and simple design architecture for adding your own datasets and training your own models.
  • A autodifferentiable field solver (RCWA) to optimize structures on cells or generate new libraries

By treating optical layers in the same fashion as standard, differentiable neural layers, deep learning pipelines can be built to simultaneously optimize optical hardware and ML computational back-ends for the next generation of computational imaging devices.

Installation

You can install this package from the PyPI index simply via:

pip install dflat_opt

You may also find it beneficial to work directly with the repository in editable mode via:

git clone https://github.com/DeanHazineh/DFlat
pip install -e .

Version Notes

Updated on July 12, 2024 | V3 -> V4

  • (v4) An autodifferentiable RCWA field solver class is added.
  • (v3) Memory problems? Gradient checkpointing is added throughout, reducing memory when using DFlat.
  • (v3) You can now download this package from the PyPi Index!
  • (v3) Datasets and pre-trained models are now downloaded when called instead of during install. Models are now initialized by their name instead of by paths to config files.
  • (v2) This repository is the home for the new and maintained version of DFlat. It replaces DFlat-Tensorflow. Note that this package is no longer a direct port of DFlat-tensorflow but is a complete rewrite (re-)released in February 2024. I recommend switching! The structure of the software is completely revamped and the algorithms used throughout are not the same as before. The initial pytorch port (now deprecated) is archived and kept as a branch.

Usage and Documentation

Detailed documentation for the rewritten package and a new project page will be released in the future. For now, we highlight two resources for developers and researchers:

  • A script used to train neural models can be found in scripts/trainer.ipynb. The model architecture is specified in the config.yaml file and you can play around with editing it.
  • A simple demo of the workflow can be found at scripts/demo.ipynb.
  • A demo of field-propagation is given in scripts/field_propagation.ipynb

Pretrained Models and datasets

List of pretrained neural models inlcuded at this time are noted below. You can see the dataset used, training parameters, and model info in the respective config.yaml files when the model is downloaded after calling load_optical_model(MODEL_NAME). If you would like to contribute your own data or models to this open-source repository, please email me and I can add it with acknowledgements. We aim to make this repository a centralized location for sharing meta-atom datasets and pre-trained neural representations.

Si3N4 Models TiO2 Models
Nanocylinders_TiO2_U200H600
Nanocylinders_Si3N4_U250H600 Nanocylinders_TiO2_U250H600
Nanocylinders_Si3N4_U300H600 Nanocylinders_TiO2_U300H600
Nanocylinders_Si3N4_U350H600 Nanocylinders_TiO2_U350H600
Nanoellipse_TiO2_U350H600
Nanofins_TiO2_U350H600

The datasets will be downloaded and can be played with simply by calling the classes in dflat/metasurface/datsets. For example, when you call Nanoellipse_TiO2_U350nm_H600nm(), the corresponding dataset will be downloaded and you can play around with the data and visualizations within that class.

Contact:

This repository is intended to be accessible and community driven. It may not be fully error-proof. If you have improvements, fixes, or contributions, please branch and initiate a merge request to master (or email me)! For any questions, functionality requests, or other concerns, don't hesitate to contact me at dhazineh@g.harvard.edu.

Credits and Acknowledgements:

This work was funded in part by the NSF and SONY. If you utilize DFlat or included data sets for your own work, please consider citing it by using:

@misc{hazineh2022dflat,
      title={D-Flat: A Differentiable Flat-Optics Framework for End-to-End Metasurface Visual Sensor Design},
      author={Dean S. Hazineh and Soon Wei Daniel Lim and Zhujun Shi and Federico Capasso and Todd Zickler and Qi Guo},
      year={2022},
      eprint={2207.14780},
      archivePrefix={arXiv},
      primaryClass={physics.optics}
}

This work has pulled inspiration from and/or benefitted from previous open-source contributions including:

  • Lucidrain - Siren-pytorch
  • Manuel Guizar-Sicairos and Julio C. Guitierrez-Vega - Pyhank
  • Shane Colburn - RCWA_TF

Metadata

Release files for dflat-opt 4.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for dflat-opt 4.3
File Size Uploaded
dflat_opt-4.3.tar.gz 93.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for dflat-opt 4.3
File Interpreter ABI Platform
dflat_opt-4.3-py3-none-any.whl Python 3 none any Details

Total release size: 165.1 kB

Release files / dflat_opt-4.3.tar.gz

Download URL dflat_opt-4.3.tar.gz
Size 93.8 kB
Tags Source
SHA-256 checksum
How to use checksums
a634f9fb1f5bf3a48813a62135a1686d9b0cd43eb4a5444a8c44ff7cfe52db50
BLAKE2b-256 checksum
How to use checksums
7106057ab6c03c6450f88df5c1531fdf45c36f0c78b2c2e3122967e147cadfcf
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.11.5

Release files / dflat_opt-4.3-py3-none-any.whl

Download URL dflat_opt-4.3-py3-none-any.whl
Size 71.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
141c9545cecf7ea9ede7d71ebe77101697da089bf2eafc790cbca8b549482aaf
BLAKE2b-256 checksum
How to use checksums
111b7b91bab5393d27ebbb6d02da3e7f3ae1d3e9ff5a179014579776bd30b336
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.11.5

Release history Release notifications | RSS feed

This release

4.3 This release

2 release files

4.1.0

2 release files

4.0.4

2 release files

4.0.3

2 release files

4.0.2

2 release files

4.0.1

2 release files

4.0.0

2 release files

3.1.0

2 release files

3.0.2

2 release files

3.0.1

2 release files

3.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page