Томер Гарбер, Том Тайрер
Открытый университет Израиля и Университет Бар-Илан
Этот репозиторий содержит выпуск кода для восстановления изображений путем шумоподавления диффузионных моделей с итеративно предварительно обусловленным руководством ( 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 , вы можете поменять команды CMD
в файле Docker.
Чтобы загрузить модели, использованные в статье:
Контрольную точку модели 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] [Диск Baidu].
После загрузки наборов данных поместите каждый набор данных в соответствующий каталог:
DDPG/exp/datasets/celeba/
.DDPG/exp/datasets/imagenet/
.imagenet_val_1k.txt
по ссылкам выше и поместите его в DDPG/exp
. Переименуйте этот файл в imagenet_val.txt
, чтобы код мог его использовать. Для устранения размытия движения мы использовали следующий репозиторий git для генерации ядер: https://github.com/LeviBorodенко/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
: гиперпараметр Зета, используемый в статье.eta_tilde
: гиперпараметр Eta, использованный в статье.step_size_mode
: какой режим размера шага использовать. В статье step_size_mode=0
(фиксированное 1) использовалось для IDPG, бесшумного DDPG и DDPG с уровнем шума 0.01
. step_size_mode=1
(определенное затухание) использовалось для остальных запусков DDPG.operator_implementation
— использовать ли SVD
или FFT
. По умолчанию используется FFT
.scale_ls
— гиперпараметр c
, используемый в статье, который представляет собой шкалу наименьших квадратов. По умолчанию 1
.save_observation
— сохранять ли наблюдаемое изображение ( y
) или нет. По умолчанию установлено значение False
. Кроме того, вы можете настроить шаги выборки (в статье по умолчанию 100
). В каждой конфигурации yml в каталоге configs
( celeba_hq.yml
, imagenet_256.yml
и imagenet_256_cc.yml
) вы можете изменить:
sampling :
T_sampling :
Чтобы воспроизвести результаты статьи, существует 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.