Tomer Garber, Tom Tirer
Universitas Terbuka Israel dan Universitas Bar-Ilan
Repositori ini berisi rilis kode untuk Restorasi Gambar dengan Denoising Diffusion Models with Iteratively Precondition Guidance ( DDPG ).
Gagasan utama: mengidentifikasi panduan proyeksi balik (BP) (yang baru-baru ini digunakan dengan nama panduan "pseudoinverse" atau "range/null-space") sebagai versi panduan kuadrat terkecil (LS) yang telah dikondisikan sebelumnya, dan oleh karena itu, merancang teknik panduan dengan prakondisi yang bergantung pada iterasi yang melintasi dari BP ke LS, menikmati manfaat keduanya.
Kode ini dapat dengan mudah diadaptasi ke resolusi super dan deblurring dengan kernel apa pun.
Perluasan ke model pengukuran linier lainnya juga dimungkinkan.
Untuk mengkloning repositori ini dan kodenya, jalankan:
git clone https://github.com/tirer-lab/DDPG.git
Ada beberapa dependensi yang diperlukan, dan Anda dapat menginstalnya melalui pip atau docker . Kode ini ditulis dan diuji pada Python 3.8 dan PyTorch 1.9.0.
pip install torch torchvision lpips numpy tqdm pillow pyYaml pandas scipy
Instal versi torch dan torchvision yang relevan sesuai dengan pengaturan Anda, misalnya:
pip install torch==1.9.0+cu111 torchvision==0.10.1+cu111 -f https://download.pytorch.org/whl/torch_stable.html
Repositori berisi Dockerfile, untuk menggunakannya, jalankan (setelah mengkloning repo ini dan cd
ke dalamnya):
docker build .
Jika Anda ingin menjalankan IDPG daripada DDPG , Anda dapat menukar perintah CMD
di file Docker.
Untuk mengunduh model yang digunakan di makalah:
Pos pemeriksaan model CelebA-HQ dapat ditemukan di sini. Unduh dan letakkan di DDPG/exp/logs/celeba/
.
Pos pemeriksaan model ImageNet dapat ditemukan di sini. Unduh dan letakkan di DDPG/exp/logs/imagenet/
.
Jalankan perintah berikut untuk mendapatkan hasil DDPG langsung:
CelebA SRx4 tanpa suara:
python main.py --config celeba_hq.yml --path_y celeba_hq --deg sr_bicubic --sigma_y 0
-i DDPG_celeba_sr_bicubic_sigma_y_0 --inject_noise 1 --zeta 0.7 --step_size_mode 0
--deg_scale 4 --operator_imp SVD
Penghalusan blur CelebA Gaussian dengan sigma_y=0,05:
python main.py --config celeba_hq.yml --path_y celeba_hq --deg deblur_gauss --sigma_y 0.05
-i DDPG_celeba_deblur_gauss_sigma_y_0.05 --inject_noise 1 --gamma 8 --zeta 0.5 --eta_tilde 0.7
--step_size_mode 1 --operator_imp FFT
Hasilnya akan ada di DDPG/exp/image_samples/
.
Dataset yang digunakan dalam makalah ini adalah CelebA-HQ dan ImageNet. Keduanya dapat ditemukan di: [Google drive] [Baidu drive].
Setelah Anda mengunduh kumpulan data, letakkan setiap kumpulan data di direktori yang relevan:
DDPG/exp/datasets/celeba/
.DDPG/exp/datasets/imagenet/
.imagenet_val_1k.txt
dari tautan di atas, dan letakkan di DDPG/exp
. Ganti nama file ini menjadi imagenet_val.txt
agar kode dapat menggunakannya. Untuk motion deblur kami menggunakan repositori git berikut untuk menghasilkan kernel: https://github.com/LeviBorodenko/motionblur.
Kloning repositori itu dan salin file motionblur.py ke DDPG/functions
.
Seperti disebutkan di makalah, kami menggunakan kernel deblur gerak dengan intensity=0.5
.
Perintah umum python untuk menjalankan kode adalah:
python main.py --config {config}.yml --path_y {dataset_folder} --deg {deg} --sigma_y {sigma_y}
-i {image_folder} --inject_noise {inject_noise} --gamma {gamma} --zeta {zeta} --eta_tilde {eta_tilde}
--step_size_mode {step_size_mode} --operator_imp {operator_implementation} --save_y {save_observation}
--scale_ls {scale_for_gLS}
Di mana:
config
: Nama yml yang digunakan untuk mengkonfigurasi model yang digunakan.dataset_folder
: Nama direktori yang berisi kumpulan data gambar.deg
: jenis degradasi yang akan digunakan. Digunakan di kertas: sr_bicubic
, deblur_gauss
, motion_deblur
sr_bicubic
, flag --deg_scale 4
juga diperlukansigma_y
: Tingkat kebisingan. Tingkat kebisingan yang digunakan di kertas: 0, 0.01, 0.05, 0.1
.image_folder
: Nama direktori untuk gambar keluaran.inject_noise
: Apakah akan menyuntikkan noise (1) dan menjalankan DDPG atau tidak (0) dan menjalankan IDPG .gamma
: Hyperparameter Gamma yang digunakan dalam makalah.zeta
: Hyperparameter Zeta yang digunakan di makalah.eta_tilde
: Hyperparameter Eta yang digunakan di makalah.step_size_mode
: Mode ukuran langkah mana yang akan digunakan. Di makalah, step_size_mode=0
(tetap 1) digunakan untuk IDPG, DDPG tanpa suara, dan DDPG dengan tingkat kebisingan 0.01
. step_size_mode=1
(peluruhan tertentu) digunakan untuk sisa proses DDPG.operator_implementation
- Apakah akan menggunakan SVD
atau FFT
. Defaultnya adalah FFT
.scale_ls
- Hyperparameter c
yang digunakan dalam makalah ini, yaitu skala panduan Kuadrat Terkecil. Defaultnya adalah 1
.save_observation
- Apakah akan menyimpan gambar yang diamati ( y
) atau tidak. Defaultnya adalah False
. Selain itu, Anda dapat mengonfigurasi langkah pengambilan sampel (defaultnya adalah 100
di makalah). Di setiap konfigurasi yml di bawah direktori configs
( celeba_hq.yml
, imagenet_256.yml
dan imagenet_256_cc.yml
) Anda dapat mengubah:
sampling :
T_sampling :
Untuk mereproduksi hasil makalah, ada 2 skrip evaluasi:
Kedua skrip berisi semua tugas yang disebutkan di makalah dengan konfigurasi yang relevan.
Hasil tambahan dapat ditemukan di makalah, termasuk hasil PSNR dan LPIPS dibandingkan kompetitor.
Jika Anda menggunakan repositori ini dalam penelitian Anda, silakan kutip makalahnya:
@inproceedings{garber2023image,
title={Image Restoration by Denoising Diffusion Models with Iteratively Preconditioned Guidance},
author={Garber, Tomer and Tirer, Tom},
booktitle={Proceedings of the IEEE/CVF conference on computer vision and pattern recognition},
year={2024}
}
Implementasi ini terinspirasi oleh https://github.com/bahjat-kawar/ddrm dan https://github.com/wyhuai/DDNM.