トマー・ガーバー、トム・タイラー
イスラエル公開大学とバルイラン大学
このリポジトリには、反復前処理ガイダンスによるノイズ除去拡散モデルによる画像復元( 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 .
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
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/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
: 論文で使用されているゼータ ハイパーパラメータ。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 :
論文の結果を再現するために、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 からインスピレーションを得ています。