Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time

Compressed Sensing using Generative Models

This repository provides code to reproduce results from the paper: Compressed Sensing using Generative Models.

Here are a few example results:

Reconstruction Super-resolution Inpainting
celebA_reconstr celebA_superres celebA_inpaint
mnist_reconstr mnist_superres mnist_inpaint

Here we show the evolution of the reconstructed image for different number of iterations:

Steps to reproduce the results

NOTE: Please run all commands from the root directory of the repository, i.e from csgm/


  1. Python 2.7
  2. Tensorflow 1.0.1
  3. Scipy
  4. PyPNG
  5. (Optional : for lasso-wavelet) PyWavelets
  6. (Optional) CVXOPT

Pip installation can be done by $ pip install -r requirements.txt


  1. Clone the repository and dependencies

    $ git clone
    $ cd csgm
    $ git submodule update --init --recursive
  2. Download/extract the datasets:

    $ ./setup/
  3. Download/extract pretrained models or train your own!

  4. To use wavelet based estimators, you need to create the basis matrix:

    $ python ./src/


The following are the supported experiments and example commands to run the demos:

[Note: For celebA experiments, we run very few iterations per experiment (30) to give a quick demo. To get results with better quality, increase the number of iterations to at least 500 and use at least 2 random restarts.]

  1. Reconstruction from Gaussian measurements
    • $ ./quick_scripts/
    • $ ./quick_scripts/ "./images/182659.jpg"
  2. Super-resolution
    • $ ./quick_scripts/
    • $ ./quick_scripts/ "./images/182659.jpg"
  3. Reconstruction for images in the span of the generator
    • $ ./quick_scripts/
    • $ ./quick_scripts/
  4. Quantifying representation error
    • $ ./quick_scripts/
    • $ ./quick_scripts/ "./images/182659.jpg"
  5. Inpainting
    • $ ./quick_scripts/
    • $ ./quick_scripts/ "./images/182659.jpg"

Reproducing quantitative results

  1. Create a scripts directory $ mkdir scripts

  2. Identfy a dataset you would like to get the quantitative results on. Locate the file ./quant_scripts/{dataset}

  3. Change BASE_SCRIPT in src/ to be the same as given at the top of ./quant_scripts/{dataset}

  4. Optionally, comment out the parts of ./quant_scripts/{dataset} that you don't want to run.

  5. Run ./quant_scripts/{dataset} This will create a bunch of .sh files in the ./scripts/ directory, each one of them for a different parameter setting.

  6. Start running these scripts.

    • You can run $ ./utils/ to run them one by one.
    • Alternatively use $ ./utils/ to create screens and start proccessing them in parallel. [REQUIRES: gnu screen][WARNING: This may overwhelm the computer]. You can use $ ./utils/ to stop the running processes, and clear up the screens started this way.
  7. Create a results directory : $ mkdir results. To get the plots, see src/metrics.ipynb. To get matrix of images (as in the paper), run $ python src/view_estimated_{dataset}.py.

  8. You can also manually access the results saved by the scripts. These can be found in appropriately named directories in estimated/. Directory name conventions are defined in get_checkpoint_dir() in src/


For a complete list of images not used while training on celebA, see here.


Code to reproduce results from the paper: "Compressed Sensing using Generative Models".







No releases published


No packages published