The official implementation of "Bayesian Image Super-Resolution with Deep Modeling of Image Statistics" which has been accepted by IEEE Transactions on Pattern Analysis and Machine Intelligence.
Please refer to wiki page for the detailed introduction of BayeSR.
BayeSR was implemented on Ubuntu 16.04 with Python 3.6. Before training and test, please create an environment via Anaconda (suppose it has been installed on your computer), and install tensorflow 1.10.0, as follows,
conda create -n BayeSR python=3.6
source activate BayeSR
conda install tensorflow-gpu==1.10.0Besides, please install the following packages using pip install -r requirements.txt.
- numpy==1.14.5
- opencv-python==4.4.0
- tqdm==4.51.0
- scikit-image==0.17.1
- Pillow==8.0.1
- scipy==1.2.1
BayeSR was tested on the widely used benchmark datasets for the tasks of ideal SISR x4, realistic SISR x4, and real-world SISR x4. We have provided the benchmark datasets and the pre-trained models via the following links and extraction codes.
| Datasets/Models | Upscale | Parameters | BaiduPan | OneDrive |
|---|---|---|---|---|
| benchmark | link ggeh |
link | ||
| downsamplors | x4 | 0.15M | link 337e |
link |
| IdealSISR | x4 | 2.63M | link 8p47 |
link |
| RealisticSISR | x4 | 2.63M | link jtjy |
link |
| RealworldSISR | x4 | 2.63M | link qzj2 |
link |
| SyntheticSISR | x4 | 2.63M | link 77g7 |
link |
benchmark.zipcontains seven datasets:Set5,Set14,B100, andUrban100for ideal SISRDIV2K_mildfor realistic SISRDPED_iphonefor real-world SISRRealWorldfor test in real-world scenarios.
downsamplors.zipcontains four downsampling models:BayeSR-Downsamplor-Bicubicx4trained by supervised learning for ideal SISR x4BayeSR-Downsamplor-BiSRx4trained by unsupervised KernelGAN for ideal SISR x4BayeSR-Downsamplor-ReSRx4trained by unsupervised KernelGAN for realistic SISR x4BayeSR-Downsamplor-RWSRx4trained by unsupervised KernelGAN for real-world SISR x4
IdealSISR.zipcontains two BayeSR models for ideal SISR x4:BayeSR-BiSRx4-suptrained by the supervised strategy of BayeSRBayeSR-BiSRx4-unsuptrained by the unsupervised strategy of BayeSR
RealisticSISR.zipcontains three BayeSR models for realistic SISR x4:BayeSR-ReSRx4-suptrained by the supervised strategy of BayeSRBayeSR-ReSRx4-psuptrained by the pseudo-supervised strategy of BayeSRBayeSR-ReSRx4-unsuptrained by the unsupervised strategy of BayeSR
RealworldSISR.zipcontains two BayeSR models for real-world SISR x4:BayeSR-RWSRx4-psuptrained by the pseudo-supervised strategy of BayeSRBayeSR-RWSRx4-unsuptrained by the unsupervised strategy of BayeSR
SyntheticSISR.zipcontains one BayeSR models:BayeSR-SySRx4-suptrained by the supervised strategy of BayeSR, where LR images were corrupted by stochastic Gaussian kernel and Gaussian noise, instead of a pret-trained downsampling model.
We have provided the script of testing BayeSR in src/demo.sh. Please cd your working path to src/ and start test BayeSR as follows.
To test the generalizability of BayeSR on ideal SISR x4, please uncomment the following line in demo.sh, and then run sh demo.sh.
# supervised learning
python bayesr_test.py --dataset Set5 --input_data_dir ../data/TestDatasets/benchmark --task BiSR --sigma_read 20 --bayesr_checkpoint ../models/IdealSISR/BayeSR-BiSRx4-sup/model --GPU_ids 0Here, --sigma_read defines the level of addictive white Gaussian noise. Note that the printed PSNR and SSIM values may be higher than the reported PSNR and SSIM in our article, since the latter were computed by a MATLAB script (utils/PSNR_SSIM/PSNR_SSIM.m) consistent with the previous works such as SRCNN and VDSR.
To test the unsupervised performance of BayeSR on ideal SISR x4, please uncomment the following line in demo.sh, and then run sh demo.sh.
# unsupervised learning
python bayesr_test.py --dataset Set5 --input_data_dir ../data/TestDatasets/benchmark --task BiSR --bayesr_checkpoint ../models/IdealSISR/BayeSR-BiSRx4-unsup/model --GPU_ids 0To test the supervised, pseudo-supervised, and unsupervised performance of BayeSR on realistic SISR x4, please uncomment one of the following lines in demo.sh, and then run sh demo.sh.
# supervised learning
python bayesr_test.py --dataset DIV2K_mild --input_data_dir ../data/TestDatasets/benchmark --task ReSR --bayesr_checkpoint ../models/RealisticSISR/BayeSR-ReSRx4-sup/model --GPU_ids 0
# pseudo-supervised learning
python bayesr_test.py --dataset DIV2K_mild --input_data_dir ../data/TestDatasets/benchmark --task ReSR --bayesr_checkpoint ../models/RealisticSISR/BayeSR-ReSRx4-psup/model --GPU_ids 0
# unsupervised learning
python bayesr_test.py --dataset DIV2K_mild --input_data_dir ../data/TestDatasets/benchmark --task ReSR --bayesr_checkpoint ../models/RealisticSISR/BayeSR-ReSRx4-unsup/model --GPU_ids 0To test the pseudo-supervised and unsupervised performance of BayeSR, please uncomment one of the following lines in demo.sh, and then run sh demo.sh.
# pseudo-supervised learning
python bayesr_test.py --dataset DPED_iphone --input_data_dir ../data/TestDatasets/benchmark --task RWSR --bayesr_checkpoint ../models/RealworldSISR/BayeSR-RWSRx4-psup/model --GPU_ids 0
# unsupervised learning
python bayesr_test.py --dataset DPED_iphone --input_data_dir ../data/TestDatasets/benchmark --task RWSR --bayesr_checkpoint ../models/RealworldSISR/BayeSR-RWSRx4-unsup/model --GPU_ids 0To test the generalizability of BayeSR to diverse degradation kernels, please uncomment the following line in demo.sh, and then run sh demo.sh.
# supervised learning
python bayesr_kernels.py --dataset Set14 --input_data_dir ../data/TestDatasets/benchmark --task SySR --bayesr_checkpoint ../models/SyntheticSISR/BayeSR-SySRx4-sup/model --GPU_ids 0Here, the default degradation kerenl is the kernel with respect to bicubic interpolation.
To test the performance of BayeSR in real-world scenarios, please uncomment the following line in demo.sh, and then run sh demo.sh.
# supervised learning
python bayesr_test.py --dataset RealWorld --input_data_dir ../data/TestDatasets/benchmark --task RWSR --bayesr_checkpoint ../models/SyntheticSISR/BayeSR-SySRx4-sup/model --GPU_ids 0Here, the dataset RealWorld can be replaced with your own real-world image dataset.
Before training, please prepare training datasets at first. Then, the downsampling module of BayeSR was pretrained by the unsupervised KernelGAN. Finally, BayeSR was trained by fixing the downsampling model.
DIV2K, Flickr2K, and DPED were used to train BayeSR. All datasets should be included in the folder data/TrainDatasets/ following a specific directory structure as follows.
DIV2K
|--DIV2K_HR
|--DIV2K_HR_train
|--DIV2K_HR_valid
|--DIV2K_LR_bicubic
|--DIV2K_LR_train
|--X4
|--DIV2K_LR_valid
|--X4
|--DIV2K_LR_mild
|--DIV2K_LR_train
|--X4
|--X4_noise
Flickr2K
|--Flickr2K_HR
DPED
|--iphone
|--train_LR
|--train_LR_noise
|--valid_LRHere, *_noise contains extracted noise patches from the LR image dataset *. For examples, DPED/iphone/train_LR_noise can be generated by cd to data/ and running python extract_nosie.py.
To pre-train downsampling models, please uncomment the following line in demo.sh, and run sh demo.sh.
# unsupervised learning
python bayesr_train.py --task RWSR --trained_net Downsamplor --train_type unsupervised --log_dir ../models/downsamplors/BayeSR-Downsamplor-RWSRx4 --GPU_ids 0Here, --task can be set to BiSR, ReSR, and RWSR. The resulting downsampling models are corresponding to ideal SISR, realistic SISR, and real-world SISR.
To train BayeSR on the task of ideal SISR x4, please uncomment one of the following line in demo.sh, and run sh demo.sh.
# supervised learning
python bayesr_train.py --task BiSR --train_type supervised --downsamplor_checkpoint ../models/downsamplors/BayeSR-Downsamplor-BiSRx4/model --log_dir ../models/IdealSISR/BayeSR-BiSRx4-sup --GPU_ids 0
# unsupervised learning
python bayesr_train.py --task BiSR --GAN_type GAN --train_type unsupervised --downsamplor_checkpoint ../models/downsamplors/BayeSR-Downsamplor-BiSRx4/model --log_dir ../models/IdealSISR/BayeSR-BiSRx4-unsup --GPU_ids 0Here, --downsamplor_checkpoint points to the path of the pre-trained downsampling model for ideal SISR x4. --GAN_type defines the types of generative adversarial networks (GANs), and the choices are GAN, WGAN, and LSGAN.
To train BayeSR on the task of realistic SISR x4, please uncomment one of the following lines in demo.sh, and run sh demo.sh.
# supervised learning
python bayesr_train.py --task ReSR --train_type supervised --downsamplor_checkpoint ../models/downsamplors/BayeSR-Downsamplor-ReSRx4/model --log_dir ../models/RealisticSISR/BayeSR-ReSRx4-sup --GPU_ids 0
# pseudo-supervised learning
python bayesr_train.py --task ReSR --GAN_type GAN --train_type pseudosupervised --downsamplor_checkpoint ../models/downsamplors/BayeSR-Downsamplor-ReSRx4/model --log_dir ../models/RealisticSISR/BayeSR-ReSRx4-psup --GPU_ids 0
# unsupervised learning
python bayesr_train.py --task ReSR --GAN_type GAN --train_type unsupervised --downsamplor_checkpoint ../models/downsamplors/BayeSR-Downsamplor-ReSRx4/model --log_dir ../models/RealisticSISR/BayeSR-ReSRx4-unsup --GPU_ids 0To train BayeSR on the task of real-world SISR x4, please uncommnet one of the following lines in demo.sh, and then run sh demo.sh.
# pseudo-supervised learning
python bayesr_train.py --task RWSR --GAN_type GAN --train_type pseudosupervised --downsamplor_checkpoint ../models/downsamplors/BayeSR-Downsamplor-RWSRx4/model --log_dir ../models/RealworldSISR/BayeSR-RWSRx4-psup --GPU_ids 0
# unsupervised learning
python bayesr_train.py --task RWSR --GAN_type GAN --train_type unsupervised --downsamplor_checkpoint ../models/downsamplors/BayeSR-Downsamplor-RWSRx4/model --log_dir ../models/RealworldSISR/BayeSR-RWSRx4-unsup --GPU_ids 0To train BayeSR on the task of synthetic SISR x4, where LR images were degraded by random Gaussian kernel and Gaussian noise, please uncomment the following line in demo.sh, and then run sh demo.sh.
# supervised learning
python bayesr_train.py --task SySR --train_type supervised --gauss_blur --downsamplor_checkpoint ../models/downsamplors/BayeSR-Downsamplor-BiSRx4/model --log_dir ../models/SyntheticSISR/BayeSR-SySRx4-sup --GPU_ids 0If our work is helpful in your research, please cite this as follows.
[1] S. Gao and X. Zhuang, "Bayesian Image Super-Resolution with Deep Modeling of Image Statistics," in IEEE Transactions on Pattern Analysis and Machine Intelligence, doi: 10.1109/TPAMI.2022.3163307. [arXiv] [TPAMI]
@ARTICLE{9744488,
author={Gao, Shangqi and Zhuang, Xiahai},
journal={IEEE Transactions on Pattern Analysis and Machine Intelligence},
title={Bayesian Image Super-Resolution with Deep Modeling of Image Statistics},
year={2022},
volume={},
number={},
pages={1-1},
doi={10.1109/TPAMI.2022.3163307}}
Don't hesitate to contact us via shqgao@163.com or zxh@fudan.edu.cn, if you have any questions.