托默·加伯、湯姆·提爾
以色列開放大學與巴伊蘭大學
此儲存庫包含使用迭代預處理指導( DDPG )的去噪擴散模型進行影像復原的程式碼版本。
主要想法:將反投影(BP)導引(最近以「偽逆」或「範圍/零空間」導引的名稱使用)識別為最小二乘(LS)導引的預處理版本,並相應地設計一種導引技術迭代相關的預處理,從 BP 遍歷到 LS,享受兩者的好處。
該程式碼可以輕鬆適應任何核心的超解析度和去模糊。
也可以擴展到其他線性測量模型。
若要複製此儲存庫和程式碼,請執行:
git clone https://github.com/tirer-lab/DDPG.git
需要幾個依賴項,您可以透過pip或docker安裝它。程式碼是在 Python 3.8 和 PyTorch 1.9.0 上編寫和測試的。
pip install torch torchvision lpips numpy tqdm pillow pyYaml pandas scipy
根據您的設定安裝相關的 torch 和 torchvision 版本,例如:
pip install torch==1.9.0+cu111 torchvision==0.10.1+cu111 -f https://download.pytorch.org/whl/torch_stable.html
該存儲庫包含 Dockerfile,以便使用它運行(克隆此存儲庫並cd
到它之後):
docker build .
如果您希望執行IDPG而不是DDPG ,您可以交換 Docker 檔案中的CMD
命令。
下載論文中使用的模型:
CelebA-HQ 模型檢查點可在此處找到。下載它並將其放置在DDPG/exp/logs/celeba/
中。
ImageNet 模型檢查點可在此處找到。下載它並將其放置在DDPG/exp/logs/imagenet/
中。
執行以下命令即可立即取得 DDPG 結果:
CelebA 無雜訊 SRx4:
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
CelebA 高斯去模糊,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
結果將位於DDPG/exp/image_samples/
中。
論文中使用的資料集是CelebA-HQ和ImageNet。兩者都可以在:[Google 雲端硬碟] [百度雲端硬碟] 中找到。
下載資料集後,將每個資料集放置在相關目錄中:
DDPG/exp/datasets/celeba/
中。DDPG/exp/datasets/imagenet/
中。imagenet_val_1k.txt
,並將其放置在DDPG/exp
中。將此檔案重新命名為imagenet_val.txt
以便程式碼使用它。 對於運動去模糊,我們使用以下 git 儲存庫來產生核心:https://github.com/LeviBorodenko/motionblur。
複製該儲存庫並將Motionblur.py檔案複製到DDPG/functions
中。
如論文中所提到的,我們使用intensity=0.5
的運動去模糊內核。
運行程式碼的一般 python 指令是:
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}
在哪裡:
config
:用於設定所用模型的 yml 名稱。dataset_folder
:包含圖像資料集的目錄的名稱。deg
:要使用的降級類型。論文中使用: sr_bicubic
、 deblur_gauss
、 motion_deblur
sr_bicubic
時,還需要標誌--deg_scale 4
sigma_y
:噪音等級。紙張中所使用的噪音等級: 0, 0.01, 0.05, 0.1
。image_folder
:輸出影像的目錄名稱。inject_noise
:是否注入雜訊 (1) 並執行DDPG或不注入雜訊 (0) 並執行IDPG 。gamma
:論文中使用的 Gamma 超參數。zeta
:論文中使用的 Zeta 超參數。eta_tilde
:論文中使用的 Eta 超參數。step_size_mode
:使用哪一種步長模式。論文中,IDPG、無噪音DDPG和噪音等級0.01
的DDPG使用step_size_mode=0
(固定1)。 step_size_mode=1
(一定衰減)用於 DDPG 運行的其餘部分。operator_implementation
- 是否使用SVD
或FFT
。預設為FFT
。scale_ls
- 論文中使用的c
超參數,即最小平方法指導尺度。預設為1
。save_observation
- 是否儲存觀察到的影像( y
)。預設為False
。此外,您也可以設定採樣步長(本文中預設為100
)。在configs
目錄下的每個 yml 設定( celeba_hq.yml
、 imagenet_256.yml
和imagenet_256_cc.yml
)中,您可以變更:
sampling :
T_sampling : <desired_sampling_steps>
為了重現論文的結果,有2個評估腳本:
這兩個腳本都包含本文中提到的所有任務以及相關配置。
其他結果可以在論文中找到,包括與競爭對手相比的 PSNR 和 LPIPS 結果。
如果您在研究中使用過該儲存庫,請引用該論文:
@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}
}
此實現的靈感來自 https://github.com/bahjat-kawar/ddrm 和 https://github.com/wyhuai/DDNM。