• Stars
    star
    150
  • Rank 247,323 (Top 5 %)
  • Language
    Python
  • Created almost 5 years ago
  • Updated over 2 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

ISTA-Net: Interpretable Optimization-Inspired Deep Network for Image Compressive Sensing, CVPR2018 (PyTorch Code)

ISTA-Net: Interpretable Optimization-Inspired Deep Network for Image Compressive Sensing [PyTorch version]

including codes of CS for natural image (CS-NI) and CS for magnetic resonance imaging (CS-MRI)

This repository is for ISTA-Net and ISTA-Net+ introduced in the following paper

Jian Zhang, Bernard Ghanem , "ISTA-Net: Interpretable Optimization-Inspired Deep Network for Image Compressive Sensing", CVPR 2018, [pdf] [Supp]

The code is built on PyTorch and tested on Ubuntu 16.04/18.04 and Windows 10 environment (Python3.x, PyTorch>=0.4) with 1080Ti GPU.

[Old Tensorflow Version]

Introduction

With the aim of developing a fast yet accurate algorithm for compressive sensing (CS) reconstruction of natural images, we combine in this paper the merits of two existing categories of CS methods: the structure insights of traditional optimization-based methods and the speed of recent network-based ones. Specifically, we propose a novel structured deep network, dubbed ISTA-Net, which is inspired by the Iterative Shrinkage-Thresholding Algorithm (ISTA) for optimizing a general L1 norm CS reconstruction model. To cast ISTA into deep network form, we develop an effective strategy to solve the proximal mapping associated with the sparsity-inducing regularizer using nonlinear transforms. All the parameters in ISTA-Net (\eg nonlinear transforms, shrinkage thresholds, step sizes, etc.) are learned end-to-end, rather than being hand-crafted. Moreover, considering that the residuals of natural images are more compressible, an enhanced version of ISTA-Net in the residual domain, dubbed ISTA-Net+, is derived to further improve CS reconstruction. Extensive CS experiments demonstrate that the proposed ISTA-Nets outperform existing state-of-the-art optimization-based and network-based CS methods by large margins, while maintaining fast computational speed.

ISTA-Net Figure 1. Illustration of the proposed ISTA-Net framework.

Contents

  1. Test-CS-NI
  2. Train-CS-NI
  3. Test-CS-MRI
  4. Train-CS-MRI
  5. Results
  6. Citation
  7. Acknowledgements

Test-CS-NI

Quick start

  1. All models for our paper have been put in './model'.

  2. Run the following scripts to test ISTA-Net models.

    You can use scripts in file 'TEST_ISTA_Net_scripts.sh' to produce results for our paper.

    # test scripts
    python TEST_CS_ISTA_Net.py --epoch_num 200 --cs_ratio 1 --layer_num 9
    python TEST_CS_ISTA_Net.py --epoch_num 200 --cs_ratio 4 --layer_num 9
    python TEST_CS_ISTA_Net.py --epoch_num 200 --cs_ratio 10 --layer_num 9
    python TEST_CS_ISTA_Net.py --epoch_num 200 --cs_ratio 25 --layer_num 9
    python TEST_CS_ISTA_Net.py --epoch_num 200 --cs_ratio 30 --layer_num 9
    python TEST_CS_ISTA_Net.py --epoch_num 200 --cs_ratio 40 --layer_num 9
    python TEST_CS_ISTA_Net.py --epoch_num 200 --cs_ratio 50 --layer_num 9
  3. Run the following scripts to test ISTA-Net+ models.

    You can use scripts in file 'TEST_ISTA_Net_plus_scripts.sh' to produce results for our paper.

    # test scripts
    python TEST_CS_ISTA_Net_plus.py --epoch_num 200 --cs_ratio 1 --layer_num 9
    python TEST_CS_ISTA_Net_plus.py --epoch_num 200 --cs_ratio 4 --layer_num 9
    python TEST_CS_ISTA_Net_plus.py --epoch_num 200 --cs_ratio 10 --layer_num 9
    python TEST_CS_ISTA_Net_plus.py --epoch_num 200 --cs_ratio 25 --layer_num 9
    python TEST_CS_ISTA_Net_plus.py --epoch_num 200 --cs_ratio 30 --layer_num 9
    python TEST_CS_ISTA_Net_plus.py --epoch_num 200 --cs_ratio 40 --layer_num 9
    python TEST_CS_ISTA_Net_plus.py --epoch_num 200 --cs_ratio 50 --layer_num 9

The whole test pipeline

  1. Prepare test data.

    The original test set11 is in './data'

  2. Run the test scripts.

    See Quick start

  3. Check the results in './result'.

Train-CS-NI

Prepare training data

  1. Trainding data (Training_Data.mat including 88912 image blocks) is in './data'. If not, please download it from GoogleDrive or BaiduPan [code: xy52].

  2. Place Training_Data.mat in './data' directory

Begin to train

  1. run the following scripts to train ISTA-Net models.

    You can use scripts in file 'Train_ISTA_Net_scripts.sh' to train models for our paper.

    # CS ratio 1, 4, 10, 25, 30, 40, 50
    # train scripts
    python Train_CS_ISTA_Net.py --cs_ratio 10 --layer_num 9
    python Train_CS_ISTA_Net.py --cs_ratio 25 --layer_num 9
    python Train_CS_ISTA_Net.py --cs_ratio 50 --layer_num 9
    python Train_CS_ISTA_Net.py --cs_ratio 1 --layer_num 9
    python Train_CS_ISTA_Net.py --cs_ratio 4 --layer_num 9
    python Train_CS_ISTA_Net.py --cs_ratio 30 --layer_num 9
    python Train_CS_ISTA_Net.py --cs_ratio 40 --layer_num 9

    We found that the re-trained ISTA-Net models may get a bit higher performance than the results reported in our paper.

  2. run the following scripts to train ISTA-Net+ models.

    You can use scripts in file 'Train_ISTA_Net_plus_scripts.sh' to train models for our paper.

     # CS ratio 1, 4, 10, 25, 30, 40, 50
    # train scripts
    python Train_CS_ISTA_Net_plus.py --cs_ratio 10 --layer_num 9
    python Train_CS_ISTA_Net_plus.py --cs_ratio 25 --layer_num 9
    python Train_CS_ISTA_Net_plus.py --cs_ratio 50 --layer_num 9
    python Train_CS_ISTA_Net_plus.py --cs_ratio 1 --layer_num 9
    python Train_CS_ISTA_Net_plus.py --cs_ratio 4 --layer_num 9
    python Train_CS_ISTA_Net_plus.py --cs_ratio 30 --layer_num 9
    python Train_CS_ISTA_Net_plus.py --cs_ratio 40 --layer_num 9

Test-CS-MRI

Quick start

  1. All models for our paper have been put in './model'.

  2. Run the following scripts to test ISTA-Net+ models.

    # test scripts
    python TEST_MRI_CS_ISTA_Net_plus.py --epoch_num 200 --cs_ratio 20 --layer_num 9
    python TEST_MRI_CS_ISTA_Net_plus.py --epoch_num 200 --cs_ratio 30 --layer_num 9
    python TEST_MRI_CS_ISTA_Net_plus.py --epoch_num 200 --cs_ratio 40 --layer_num 9
    python TEST_MRI_CS_ISTA_Net_plus.py --epoch_num 200 --cs_ratio 50 --layer_num 9

The whole test pipeline

  1. Prepare test data.

    The original test BrainImages_test is in './data'

  2. Run the test scripts.

    See Quick start

  3. Check the results in './result'.

Train-CS-MRI

Prepare training data

  1. Trainding data (Training_BrainImages_256x256_100.mat including 88912 image blocks) is in './data'. If not, please download it from GoogleDrive.

  2. Place Training_BrainImages_256x256_100.mat in './data' directory

Begin to train

  1. run the following scripts to train ISTA-Net+ models.

    You can use scripts in file 'Train_ISTA_Net_plus_scripts.sh' to train models for our paper.

    # train scripts
    python Train_MRI_CS_ISTA_Net_plus.py --cs_ratio 20 --layer_num 9
    python Train_MRI_CS_ISTA_Net_plus.py --cs_ratio 30 --layer_num 9
    python Train_MRI_CS_ISTA_Net_plus.py --cs_ratio 40 --layer_num 9
    python Train_MRI_CS_ISTA_Net_plus.py --cs_ratio 50 --layer_num 9

Results

Quantitative Results

Visual Results

Citation

If you find the code helpful in your resarch or work, please cite the following papers.

@inproceedings{zhang2018ista,
  title={ISTA-Net: Interpretable optimization-inspired deep network for image compressive sensing},
  author={Zhang, Jian and Ghanem, Bernard},
  booktitle={CVPR},
  pages={1828--1837},
  year={2018}
}

Acknowledgements

More Repositories

1

ISTA-Net

ISTA-Net: Interpretable Optimization-Inspired Deep Network for Image Compressive Sensing, CVPR2018 (Tensorflow Code)
Python
119
star
2

panini

Panini-Net: GAN Prior based Degradation-Aware Feature Interpolation for Face Restoration, AAAI 2022 (PyTorch Code)
Python
97
star
3

DAGL

Dynamic Attentive Graph Learning for Image Restoration, ICCV2021 [PyTorch Code]
Python
88
star
4

ISTA-Netpp

ISTA-Net++: Flexible Deep Unfolding Network for Compressive Sensing, ICME2021 [PyTorch Code]
Python
29
star
5

OPINE-Net

Optimization-Inspired Compact Deep Compressive Sensing, JSTSP2020 (PyTorch Code)
Python
26
star
6

GSR

Matlab code for Group-based Sparse Representation for Image Restoration, TIP2014
MATLAB
23
star
7

SCI3D

Dense Deep Unfolding Network with 3D-CNN Prior for Snapshot Compressive Imaging, ICCV2021 [PyTorch Code]
Python
23
star
8

HerosNet

HerosNet: Hyperspectral Explicable Reconstruction and Optimal Sampling Deep Network for Snapshot Compressive Imaging (CVPR2022)
Python
23
star
9

COAST

COAST: COntrollable Arbitrary-Sampling NeTwork for Compressive Sensing, TIP2021 [PyTorch Code]
Python
13
star
10

TVNLR

Matlab Code for Improved Total Variation based Image Compressive Sensing Recovery by Nonlocal Regularization
12
star
11

HiTDUN

Official implementation of High-Throughput Deep Unfolding Network for Compressive Sensing MRI
11
star
12

ALSB

Matlab Code for Image compressive sensing recovery using adaptively learned sparsifying basis via L0 minimization
7
star
13

CONCOLOR

Matlab Code for CONCOLOR: COnstrained Non-COnvex LOw-Rank Model for Image Deblocking, TIP2016
4
star
14

RCoS

Matlab Code for Image Compressive Sensing Recovery via Collaborative Sparsity
4
star
15

AST-NLS

Matlab Code for Image Denoising via Bandwise Adaptive Modeling and Regularization Exploiting Nonlocal Similarity
3
star
16

DualDic

Matlab Code for Image Super-Resolution via Dual-Dictionary Learning and Sparse Representation
2
star
17

IRJSM

Matlab Code for Image Restoration Using Joint Statistical Modeling in a Space-Transform Domain, TCSVT2014
1
star