토머 가버, 톰 티러
이스라엘 오픈 대학교(Open University of Israel) 및 바르일란 대학교(Bar-Ilan University)
이 저장소에는 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
설정에 따라 관련 토치 및 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 .
DDPG 대신 IDPG를 실행하려면 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
sigma_y=0.05를 사용한 CelebA 가우스 디블러링:
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 드라이브] [Baidu 드라이브]에서 찾을 수 있습니다.
데이터세트를 다운로드한 후 각 데이터세트를 관련 디렉터리에 배치합니다.
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
: 논문에 사용된 감마 하이퍼파라미터입니다.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
디렉터리( celeba_hq.yml
, imagenet_256.yml
및 imagenet_256_cc.yml
) 아래의 각 yml 구성에서 다음을 변경할 수 있습니다.
sampling :
T_sampling :
논문의 결과를 재현하기 위해 두 가지 평가 스크립트가 있습니다.
두 스크립트 모두 관련 구성과 함께 문서에 언급된 모든 작업을 포함합니다.
경쟁사와 비교한 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-kavar/ddrm 및 https://github.com/wyhuai/DDNM에서 영감을 받았습니다.