REPO ini berisi implementasi Pytorch resmi untuk kertas probabilistik difusi denoising berbentuk bintang-pendekatan untuk menciptakan model difusi non-Gaussian yang berlaku untuk berbagai manifold non-Euclidean.
Oleh Andrey Okhotin*, Dmitry Molchanov*, Vladimir Arkhipkin, Grigory Bartosh, Viktor Ohanesian, Aibek Alanov, Dmitry Vetrov
Bantuan: Sergei Kholkin

Denoising Difusion Probabilistic Models (DDPMS) memberikan dasar untuk terobosan baru -baru ini dalam pemodelan generatif. Struktur Markovian mereka menyulitkan untuk mendefinisikan DDPMS dengan distribusi selain Gaussian atau diskrit. Dalam makalah ini, kami memperkenalkan DDPM berbentuk bintang (SS-DDPM). Proses difusi berbentuk bintang memungkinkan kita untuk memotong kebutuhan untuk menentukan probabilitas transisi atau menghitung posterior. Kami menetapkan dualitas antara difusi Markovian berbentuk bintang dan spesifik untuk keluarga distribusi eksponensial, dan mendapatkan algoritma yang efisien untuk pelatihan dan pengambilan sampel dari SS-DDPMS. Dalam kasus distribusi Gaussian, SS-DDPM setara dengan DDPM. Namun, SS-DDPMS memberikan resep sederhana untuk merancang model difusi dengan distribusi seperti beta, von Mises-Fisher, Dirichlet, Wishart dan lainnya, yang dapat sangat berguna ketika data terletak pada manifold yang dibatasi. Kami mengevaluasi model dalam pengaturan yang berbeda dan merasa kompetitif bahkan pada data gambar, di mana beta SS-DDPM mencapai hasil yang sebanding dengan DDPM Gaussian.
Logika SS-DDPM utama yang dijelaskan dalam direktori "Lib/Difusi". Ini bisa cukup jika Anda mau
Anda juga dapat menemukan contoh menggunakan SS-DDPM pada data geodesik dan sintetis dalam "notebook" direktori. Jika Anda ingin mereproduksi hasil kami, Anda dapat menemukan contoh eksekusi perintah untuk eksperimen di CIFAR10 dan Text8.
Struktur repo:
Repo ini diuji dengan obor == 1.12.0+Cu113 TorchVision == 0.13.0+Cu113
git clone https://github.com/andrey-okhotin/star-shaped
cd star-shaped
pip install -r requirements.txt
# only if you don't have pytorch or your pytorch version < 1.11
pip install torch==1.12.0+cu113 torchvision==0.13.0+cu113 --extra-index-url https://download.pytorch.org/whl/cu113
# only for experiments with synthetic data, otherwise you can just comment all 'import npeet'
git clone https://github.com/gregversteeg/NPEET.git && cd NPEET && pip install . && cd ../ && rm -rf NPEETMengunduh Konten Folder Dataset - Diperlukan untuk semua jaringan pipa. Perintah ini mungkin memakan waktu sekitar 5 menit.
pip install py7zr gdown
rm -rf star-shaped/datasets
gdown --fuzzy https://drive.google.com/file/d/1ndXOmbNXR6pwoJ5qs1gVP0eAKU_RAl6E/view ? usp=sharing
py7zr x datasets.7z && rm datasets.7z && mv datasets star-shaped/datasetsMengunduh konten folder pretrained_models - tidak perlu untuk pelatihan pipa. Perintah ini mungkin memakan waktu sekitar 3 menit.
pip install py7zr gdown
rm -rf star-shaped/pretrained_models
gdown --fuzzy https://drive.google.com/file/d/1Lebmsti31CwOFg4LYJYlWmlS7rGYQfVi/view ? usp=sharing
py7zr x pretrained_models.7z && rm pretrained_models.7z && mv pretrained_models star-shaped/pretrained_modelsTersedia untuk berjalan dari jupyter-notebook di direktori ss_ddpm/notebooks. Di sana Anda dapat menemukan contoh pelatihan dan pengambilan sampel
Tersedia untuk berjalan dari Bash in Directory SS_DDPM
Perintah Menjalankan:
python lib/run_pipeline -gpu < gpu0_idx > _ < gpu1_idx > _ < gpu2_idx > -pipeline < pipeline_name > -logs_file < name_of_txt_file_to_write_execution_info > -port < available_port_for_processes_sync > . . . " other_pipeline_arguments "Contoh Penggunaan Pendek untuk Berlari pada 3 GPU pada satu node:
python lib/run_pipeline -gpu 0_1_2 -pipeline train_cifar10 -logs_file logs_train_cifar10.txt -port 8890 . . . " other_pipeline_arguments " Pelatihan beta ss-ddpm pada 4 nvidia v100 (perlu ~ memori GPU 32GB). Pos Pemeriksaan akan disimpan di direktori "Checkpoints/train_beta_ss_cifar10". Grafik kerugian akan disimpan di direktori "hasil/train_beta_ss_cifar10".
python lib/run_pipeline.py -gpu 0_1_2_3 -port 8900 -pipeline training_cifar10 -diffusion beta_ss -loss KL_rescaled -save_folder train_beta_ss_cifar10 -logs_file logs_training_beta_ss_cifar10.txt
cp checkpoints/training_beta_ss_cifar10/NCSNpp_episode0_epoch1050_model.pt pretrained_models/ncsnpp-cifar10_beta-ss.ptPengambilan sampel beta ss-ddpm pada 2 nvidia v100. Hasil akan disimpan dalam direktori "hasil/sampling_beta_ss_cifar10/generated_samples".
python lib/run_pipeline.py -gpu 0_1 -port 8900 -pipeline sampling_cifar10 -diffusion beta_ss -num_sampling_steps 1000 -pretrained_model ncsnpp-cifar10_beta-ss.pt -num_samples 50000 -save_folder sampling_beta_ss_cifar10 -logs_file logs_sampling_beta_ss.txt
python -m pytorch_fid datasets/FID_cifar10_pack50000 results/sampling_beta_ss_cifar10/generated_samplesJika Anda menjalankan perintah yang sama persis, Anda akan mendapatkan FID ~ 3.24.
Pelatihan SS-DDPM Kategori pada 4 NVIDIA A100 (Perlu ~ 150GB memori GPU). Pos Pemeriksaan akan disimpan di direktori "Checkpoints/Training_categorical_ss_text8". Grafik kerugian akan disimpan di direktori "hasil/pelatihan_categorical_ss_text8".
python lib/run_pipeline.py -gpu 0_1_2_3 -port 8900 -pipeline training_text8 -diffusion categorical_ss -loss KL -save_folder training_categorical_ss_text8 -logs_file logs_training_categorical_ss.txt
cp checkpoints/training_categorical_ss_text8/T5Encoder_episode0_epoch2016_model.pt pretrained_models/t5base-text8_categorical-ss_fully-trained.ptMemperkirakan NLL dalam SS-DDPM kategori pada 3 NVIDIA A100. Hasil akan disimpan dalam direktori "hasil/nll_estimations".
python lib/run_pipeline.py -gpu 0_1_2 -port 8900 -pipeline estimating_nll_text8 -diffusion categorical_ss -pretrained_model t5base-text8_categorical-ss_fully-trained.pt -num_samples -1 -batch_size 1536 -dataset_part test -num_iwae_trajectories 1 -save_folder nll_text8_categorical-ss -logs_file logs_nll_text8_categorical_ss.txtJika Anda menjalankan perintah yang sama persis, Anda akan mendapatkan NLL ~ 1.61.
@ inproceedings { okhotin2023star ,
author = { Andrey Okhotin , Dmitry Molchanov , Vladimir Arkhipkin , Grigory Bartosh , Viktor Ohanesian , Aibek Alanov and Dmitry Vetrov },
title = { Star - Shaped Denoising Diffusion Probabilistic Models },
booktitle = { Advances in Neural Information Processing Systems },
volume = { 36 },
year = { 2023 }
}