Skip to content

swufung/WassersteinBasedProjections

Repository files navigation

Wasserstein-based Projections

Pytorch implementation of Adversarial Projections.

Associated Publication

Wasserstein-Based Projections with Applications to Inverse Problems (arXiv Link)

Please cite as

@article{heaton2022wasserstein,
  title={Wasserstein-Based Projections with Applications to Inverse Problems},
  author={Heaton, Howard and Fung, Samy Wu and Lin, Alex Tong and Osher, Stanley and Yin, Wotao},
  journal={SIAM Journal on Mathematics of Data Science},
  volume={4},
  number={2},
  pages={581--603},
  year={2022},
  publisher={SIAM}
}

Set-up

Install all the requirements:

pip install -r requirements.txt 

To run CT problems, first download the datasets from here.

The ellipse training and validation data should be stored in the following path: ./Datasets/

The Lodopab training and validation data should be stored in the following path: ./Datasets/

Toy Problems

Two toy problems are included in this work. The first is an illustration of the "straggler" phenomenon about step size choices. We use

If we can approximate the pointwise distance function very well, then we will use a larger value of (e.g., choose in the ideal setting). If, however, we have limited ability to approximate , as is the case on more realistic problems like the CT examples, then we choose .

The second illustration uses a manifold that is a half circle. Here we clutter a region of interest uniformly and let our samples form our initial distribution . Then we conduct training for 19 steps to get . These results are then applied to solve a feasibility problem with 1 constraint, a line in the 2D plane. This makes for a nice illustration of the behavior of adversarial projections (try playing around with the diferent parameters, typically underrelaxation improves performance).

The straggler illustration and toy manifold projection code can be run via these links online on Google Colab (or downloaded from this repo).

Low Dose CT Problems

To train the ellipse CT problem run trainEllipseCT.py

To train the lodopab CT problem run trainLodopabCT.py

To deploy adversarial projections within projected gradient descent method, run deployProjection_Ellipse.py and deployProjection_Lodopab.py.

Note: these require the saved weights to be loaded.

Acknowledgements

This material is partially funded by AFOSR MURI FA9550-18-1-0502, AFOSR Grant No. FA9550-18-1-0167, ONR Grants N00014-18-1-2527 snf N00014-17-1-21, and NSF Grant No. DGE-1650604. Any opinion, findings, and conclusions or recommendations expressed in this material are those of the authors and do not necessarily reflect the views of the NSF.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published