托默·加伯、汤姆·提尔
以色列开放大学和巴伊兰大学
该存储库包含使用迭代预处理指导( 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。