Studiogan是一個Pytorch庫,為有條件/無條件的圖像生成提供了代表性生成對抗網絡(GAN)的實現。 Studiogan的目標是為現代gan提供相同的操場,以便機器學習研究人員可以輕鬆地比較和分析一個新想法。
此外,Studiogan為生成模型提供了前所未有的規模基準。基準包括GAN(Biggan-Deep,stylegan-XL),自動回歸模型(MaskGit,RQ-Transformer)和擴散模型(LSGM ++,CLD-SGM,ADM-GU)的結果。
| 方法 | 場地 | 建築學 | GC | DC | 損失 | EMA |
|---|---|---|---|---|---|---|
| DCGAN | Arxiv'15 | DCGAN/RESNETGAN 1 | N/A。 | N/A。 | 香草 | 錯誤的 |
| Infogan | Nips'16 | DCGAN/RESNETGAN 1 | N/A。 | N/A。 | 香草 | 錯誤的 |
| lsgan | ICCV'17 | DCGAN/RESNETGAN 1 | N/A。 | N/A。 | 最少的sqaure | 錯誤的 |
| Ggan | Arxiv'17 | DCGAN/RESNETGAN 1 | N/A。 | N/A。 | 合頁 | 錯誤的 |
| wgan-wc | ICLR'17 | Resnetgan | N/A。 | N/A。 | 瓦斯林 | 錯誤的 |
| Wgan-GP | Nips'17 | Resnetgan | N/A。 | N/A。 | 瓦斯林 | 錯誤的 |
| wgan-dra | Arxiv'17 | Resnetgan | N/A。 | N/A。 | 瓦斯林 | 錯誤的 |
| Acgan-Mod 2 | - | Resnetgan | CBN | 交流 | 合頁 | 錯誤的 |
| pdgan | ICLR'18 | Resnetgan | CBN | PD | 合頁 | 錯誤的 |
| 斯甘 | ICLR'18 | Resnetgan | CBN | PD | 合頁 | 錯誤的 |
| 薩根 | ICML'19 | Resnetgan | CBN | PD | 合頁 | 錯誤的 |
| 塔克根 | 神經19 | 比根 | CBN | TAC | 合頁 | 真的 |
| lgan | ICML'19 | Resnetgan | N/A。 | N/A。 | 香草 | 錯誤的 |
| 無條件的Biggan | ICLR'19 | 比根 | N/A。 | N/A。 | 合頁 | 真的 |
| 比根 | ICLR'19 | 比根 | CBN | PD | 合頁 | 真的 |
| Biggan-Deep-Comparegan | ICLR'19 | Biggan-Deep Comparegan | CBN | PD | 合頁 | 真的 |
| Biggan-Deep-Studiogan | - | Biggan-Deep Studiogan | CBN | PD | 合頁 | 真的 |
| stylegan2 | CVPR'20 | stylegan2 | cadain | SPD | 邏輯 | 真的 |
| 克爾根 | ICLR'20 | 比根 | CBN | PD | 合頁 | 真的 |
| ICRGAN | AAAI'21 | 比根 | CBN | PD | 合頁 | 真的 |
| 洛根 | Arxiv'19 | Resnetgan | CBN | PD | 合頁 | 真的 |
| 冷戰 | 神經20 | 比根 | CBN | 2C | 合頁 | 真的 |
| 姆根 | wacv'21 | 比根 | CBN | MH | MH | 真的 |
| Biggan + diffaugment | 神經20 | 比根 | CBN | PD | 合頁 | 真的 |
| stylegan2 + ada | 神經20 | stylegan2 | cadain | SPD | 邏輯 | 真的 |
| Biggan + LECAM | CVPR'2021 | 比根 | CBN | PD | 合頁 | 真的 |
| 里斯坎 | 神經21 | 比根 | CBN | D2D-CE | 合頁 | 真的 |
| stylegan2 + apa | 神經21 | stylegan2 | cadain | SPD | 邏輯 | 真的 |
| stylegan3-t | 神經21 | stylegan3 | 凱恩 | SPD | 邏輯 | 真的 |
| stylegan3-r | 神經21 | stylegan3 | 凱恩 | SPD | 邏輯 | 真的 |
| Adcgan | ICML'22 | 比根 | CBN | ADC | 合頁 | 真的 |
GC/DC表示我們將標籤信息注入生成器或歧視器的方式。
EMA:向發電機的指數移動平均更新。 CBN:有條件的批准化。 CADAIN:自適應實例歸一化的條件版本。 AC:輔助分類器。 PD:投影歧視器。 TAC:雙輔助分類器。 SPD:stylegan修改的PD。 2C:有條件的對比損失。 MH:多鉸鏈損失。 ADC:輔助判別分類器。 D2D-CE:數據到數據跨凝集。
| 方法 | 場地 | 建築學 |
|---|---|---|
| 成立得分(IS) | 神經16 | Inceptionv3 |
| Frechet Inception距離(FID) | 神經17 | Inceptionv3 |
| 提高精度和召回 | 神經19 | Inceptionv3 |
| 分類器準確度得分(CAS) | 神經19 | Inceptionv3 |
| 密度和覆蓋範圍 | ICML'20 | Inceptionv3 |
| 級內FID | - | Inceptionv3 |
| Swav Fid | ICLR'21 | 沃夫 |
| 清潔指標(IS,FID,PRDC) | CVPR'22 | Inceptionv3 |
| 建築友好的指標(IS,FID,PRDC) | Arxiv'22 | 不限於InceptionV3 |
| 方法 | 場地 | 目標結構 |
|---|---|---|
| 凍結 | cvprw'20 | 除了stylegan2 |
| 頂級訓練 | 神經2020 | - |
| DDLS | 神經2020 | - |
| SEFA | CVPR'2021 | 比根 |
我們通過比較IS與原始論文進行了比較,以檢查在Studiogan中實現的GAN的可重複性。我們確定我們的平台成功地複制了大多數代表性的gan,除了PD-Gan,Acgan,Logan,Sagan和Biggan-Deep。 FQ表示Flickr-Faces-HQ數據集(FFHQ)。 ImageNet,AFHQV2和FQ數據集的分辨率分別為128、512和1024。
首先,安裝Pytorch滿足您的環境(至少1.7):
pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu116然後,使用以下命令安裝其餘庫:
pip install tqdm ninja h5py kornia matplotlib pandas sklearn scipy seaborn wandb PyYaml click requests pyspng imageio-ffmpeg timm使用Docker,您可以使用(更新14/dec/2022):
docker pull alex4727/experiment:pytorch113_cuda116這是我們製作一個名為“ Studiogan”的容器。
docker run -it --gpus all --shm-size 128g --name StudioGAN -v /path_to_your_folders:/root/code --workdir /root/code alex4727/experiment:pytorch113_cuda116 /bin/zsh如果您的NVIDIA驅動程序版本不滿足要求,則可以嘗試將以下添加到上面的命令中。
--env NVIDIA_DISABLE_REQUIRE=trueCIFAR10/CIFAR100:StudioGan將在執行main.py後自動下載數據集。
微小的成像網,圖像網或自定義數據集:
data
└── ImageNet, Tiny_ImageNet, Baby ImageNet, Papa ImageNet, or Grandpa ImageNet
├── train
│ ├── cls0
│ │ ├── train0.png
│ │ ├── train1.png
│ │ └── ...
│ ├── cls1
│ └── ...
└── valid
├── cls0
│ ├── valid0.png
│ ├── valid1.png
│ └── ...
├── cls1
└── ...
在開始之前,用戶應使用其個人API密鑰登錄WANDB。
wandb login PERSONAL_API_KEY從發行版0.3.0開始,您現在可以定義通過-metrics選項使用的評估指標。未指定選項默認值僅計算FID。 IE -metrics is fid僅計算為和FID和-metrics none跳過評估。
-t )和評估IS,FID,PRC,REC,DNS,CVG( -metrics is fid prdc )使用GPU 0在CONFIG_PATH中定義的模型。 CUDA_VISIBLE_DEVICES=0 python3 src/main.py -t -metrics is fid prdc -cfg CONFIG_PATH -data DATA_PATH -save SAVE_PATH--pre_resizer lanczos )進行訓練和評估的預處理圖像。然後,訓練( -t )和評估友好 - 友好的,友好的prc,友好率,友好型,友好dns,友好-CVG( -metrics is fid prdc --post_resizer clean ),使用gpu 0在CONFIG_PATH中定義的型號。 CUDA_VISIBLE_DEVICES=0 python3 src/main.py -t -metrics is fid prdc --pre_resizer lanczos --post_resizer clean -cfg CONFIG_PATH -data DATA_PATH -save SAVE_PATH(0, 1, 2, 3) CONFIG_PATH DataParallel -t )和評估模型的FID。 FID的評估不需要( -metrics )參數! CUDA_VISIBLE_DEVICES=0,1,2,3 python3 src/main.py -t -cfg CONFIG_PATH -data DATA_PATH -save SAVE_PATH(0, 1, 2, 3) , Synchronized batch norm和Mixed precision ,通過DistributedDataParallel在CONFIG_PATH中定義的模型的訓練( -t )和跳過評估( -metrics none )。 export MASTER_ADDR= " localhost "
export MASTER_PORT=2222
CUDA_VISIBLE_DEVICES=0,1,2,3 python3 src/main.py -t -metrics none -cfg CONFIG_PATH -data DATA_PATH -save SAVE_PATH -DDP -sync_bn -mpc 嘗試python3 src/main.py查看可用選項。
將所有數據加載到主內存中( -hdf5 -l )
CUDA_VISIBLE_DEVICES=0,...,N python3 src/main.py -t -hdf5 -l -cfg CONFIG_PATH -data DATA_PATH -save SAVE_PATH DistributeDataParallear(請參閱此處)( -DDP )
# ## NODE_0, 4_GPUs, All ports are open to NODE_1
~ /code>>> export MASTER_ADDR=PUBLIC_IP_OF_NODE_0
~ /code>>> export MASTER_PORT=AVAILABLE_PORT_OF_NODE_0
~ /code/PyTorch-StudioGAN>>> CUDA_VISIBLE_DEVICES=0,1,2,3 python3 src/main.py -t -DDP -tn 2 -cn 0 -cfg CONFIG_PATH -data DATA_PATH -save SAVE_PATH # ## NODE_1, 4_GPUs, All ports are open to NODE_0
~ /code>>> export MASTER_ADDR=PUBLIC_IP_OF_NODE_0
~ /code>>> export MASTER_PORT=AVAILABLE_PORT_OF_NODE_0
~ /code/PyTorch-StudioGAN>>> CUDA_VISIBLE_DEVICES=0,1,2,3 python3 src/main.py -t -DDP -tn 2 -cn 1 -cfg CONFIG_PATH -data DATA_PATH -save SAVE_PATH混合精確培訓( -mpc )
CUDA_VISIBLE_DEVICES=0,...,N python3 src/main.py -t -mpc -cfg CONFIG_PATH -data DATA_PATH -save SAVE_PATH更改批處理統計統計
# Synchronized batchNorm (-sync_bn)
CUDA_VISIBLE_DEVICES=0,...,N python3 src/main.py -t -sync_bn -cfg CONFIG_PATH -data DATA_PATH -save SAVE_PATH
# Standing statistics (-std_stat, -std_max, -std_step)
CUDA_VISIBLE_DEVICES=0,...,N python3 src/main.py -std_stat -std_max STD_MAX -std_step STD_STEP -cfg CONFIG_PATH -ckpt CKPT -data DATA_PATH -save SAVE_PATH
# Batch statistics (-batch_stat)
CUDA_VISIBLE_DEVICES=0,...,N python3 src/main.py -batch_stat -cfg CONFIG_PATH -ckpt CKPT -data DATA_PATH -save SAVE_PATH截斷技巧
CUDA_VISIBLE_DEVICES=0,...,N python3 src/main.py --truncation_factor TRUNCATION_FACTOR -cfg CONFIG_PATH -ckpt CKPT -data DATA_PATH -save SAVE_PATH ddls( -lgv -lgv_rate -lgv_std -lgv_decay -lgv_decay_steps -lgv_steps )
CUDA_VISIBLE_DEVICES=0,...,N python3 src/main.py -lgv -lgv_rate LGV_RATE -lgv_std LGV_STD -lgv_decay LGV_DECAY -lgv_decay_steps LGV_DECAY_STEPS -lgv_steps LGV_STEPS -cfg CONFIG_PATH -ckpt CKPT -data DATA_PATH -save SAVE_PATH凍結判別器( -freezeD )
CUDA_VISIBLE_DEVICES=0,...,N python3 src/main.py -t --freezeD FREEZED -ckpt SOURCE_CKPT -cfg TARGET_CONFIG_PATH -data DATA_PATH -save SAVE_PATHStudiogan支持Image visualization, K-nearest neighbor analysis, Linear interpolation, Frequency analysis, TSNE analysis, and Semantic factorization 。所有結果將保存在SAVE_DIR/figures/RUN_NAME/*.png 。
CUDA_VISIBLE_DEVICES=0,...,N python3 src/main.py -v -cfg CONFIG_PATH -ckpt CKPT -save SAVE_DIR
CUDA_VISIBLE_DEVICES=0,...,N python3 src/main.py -knn -cfg CONFIG_PATH -ckpt CKPT -data DATA_PATH -save SAVE_PATHCUDA_VISIBLE_DEVICES=0,...,N python3 src/main.py -itp -cfg CONFIG_PATH -ckpt CKPT -save SAVE_DIRCUDA_VISIBLE_DEVICES=0,...,N python3 src/main.py -fa -cfg CONFIG_PATH -ckpt CKPT -data DATA_PATH -save SAVE_PATHCUDA_VISIBLE_DEVICES=0,...,N python3 src/main.py -tsne -cfg CONFIG_PATH -ckpt CKPT -data DATA_PATH -save SAVE_PATHCUDA_VISIBLE_DEVICES=0,...,N python3 src/main.py -sefa -sefa_axis SEFA_AXIS -sefa_max SEFA_MAX -cfg CONFIG_PATH -ckpt CKPT -save SAVE_PATHStudiogan支持從DCGAN到StyleGAN3-R的30位代表甘斯的培訓。
我們根據數據集和模型使用了不同的腳本,如下所示:
CUDA_VISIBLE_DEVICES=0 python3 src/main.py -t -hdf5 -l -std_stat -std_max STD_MAX -std_step STD_STEP -metrics is fid prdc -ref " train " -cfg CONFIG_PATH -data DATA_PATH -save SAVE_PATH -mpc --post_resizer " friendly " --eval_backbone " InceptionV3_tf "CUDA_VISIBLE_DEVICES=0 python3 src/main.py -t -hdf5 -l -metrics is fid prdc -ref " train " -cfg CONFIG_PATH -data DATA_PATH -save SAVE_PATH -mpc --post_resizer " friendly " --eval_backbone " InceptionV3_tf "CUDA_VISIBLE_DEVICES=0,1,2,3 python3 src/main.py -t -hdf5 -l -sync_bn -std_stat -std_max STD_MAX -std_step STD_STEP -metrics is fid prdc -ref " train " -cfg CONFIG_PATH -data DATA_PATH -save SAVE_PATH -mpc --pre_resizer " lanczos " --post_resizer " friendly " --eval_backbone " InceptionV3_tf " export MASTER_ADDR= " localhost "
export MASTER_PORT=8888
CUDA_VISIBLE_DEVICES=0,1,2,3 python3 src/main.py -t -metrics is fid prdc -ref " train " -cfg CONFIG_PATH -data DATA_PATH -save SAVE_PATH -mpc --pre_resizer " lanczos " --post_resizer " friendly " --eval_backbone " InceptionV3_tf " export MASTER_ADDR= " localhost "
export MASTER_PORT=8888
CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 python3 src/main.py -t -metrics is fid prdc -ref " train " -cfg CONFIG_PATH -data DATA_PATH -save SAVE_PATH -mpc --pre_resizer " lanczos " --post_resizer " friendly " --eval_backbone " InceptionV3_tf "Studiogan支持Inception評分,Frechet Inception距離,提高精度和召回,密度和覆蓋範圍,級內FID,分類器精度得分。用戶可以分別使用-iFID, -GAN_train, and -GAN_test選項獲得Intra-Class FID, Classifier Accuracy Score得分。
用戶可以使用--eval_backbone ResNet50_torch, SwAV_torch, DINO_torch, or Swin-T_torch選項將用戶從InceptionV3更改為InceptionV3,SWAV,Dino或Swin Transformer。
此外,用戶可以使用--post_resizer clean or friendly選項計算使用清潔或架構友好的Resizer的指標。
Inception評分(IS)是一個指標,用於測量GAN產生高保真性和不同圖像的程度。計算是需要預先訓練的Inception-V3網絡。請注意,我們不將數據集分為十倍以進行計算是十倍。
FID是一個廣泛使用的度量,用於評估GAN模型的性能。計算FID需要預先訓練的Inception-V3網絡,現代方法使用基於張量的FID。 Studiogan利用基於Pytorch的FID在同一Pytorch環境中測試GAN模型。我們表明,基於Pytorch的FID實現提供了與TensorFlow實現相同的結果(請參閱Contragan Paper的附錄F)。
開發了提高的精度和召回,以彌補精度和召回的缺點。像IS一樣,FID,計算提高的精度和召回需要預先訓練的Inception-V3模型。 Studiogan使用密度和覆蓋分數開發人員提供的Pytorch實現。
密度和覆蓋率指標可以使用預先訓練的Inception-V3模型估算生成圖像的忠誠度和多樣性。眾所周知,這些指標對離群值是可靠的,它們可以檢測到相同的真實和假髮行。 Studiogan使用了作者的官方Pytorch實施,Studiogan遵循作者的建議選擇。
我們報告的最好的是,FID,改進的精度和召回,以及gan的密度和覆蓋範圍。
要下載Studiogan中報告的所有檢查點,請單擊此處(擁抱麵線)。
您可以通過將-ckpt CKPT_PATH選項與相應的配置路徑-cfg CORRESPONDING_CONFIG_PATH一起評估檢查點。
CIFAR10,Baby Imagenet,Papa Imagenet,Grandpa Imagenet,Imagenet,AFHQV2和FQ的分辨率分別為32、64、64、64、64、128、512和1024。
我們使用與特里切特(Frechet Inception)距離(FID),精度,召回,密度和覆蓋範圍計算的訓練圖像相同數量的生成圖像。對於使用Baby/Papa/Grandpa Imagenet和Imagenet的實驗,我們異常使用50K假圖像來與完整的訓練集作為真實圖像。
參考數據集的所有功能和時刻都可以通過功能和時刻下載。
Imagenet-128和Imagenet 256的分辨率分別為128和256。
所有用於基準測試的圖像都可以通過一個驅動器下載(將很快上傳)。
-metrics is fid prdc )的圖像文件夾(已經預處理)使用GPU (0,...,N)保存在DSET1和DSET2中。 CUDA_VISIBLE_DEVICES=0,...,N python3 src/evaluate.py -metrics is fid prdc --dset1 DSET1 --dset2 DSET2-metrics is fid prdc )的圖像文件夾使用預先計算的功能( --dset1_feats DSET1_FEATS )保存在DSET2中,DSET1( --dset1_moments DSET1_MOMENTS )和gpus (0,...,N) CUDA_VISIBLE_DEVICES=0,...,N python3 src/evaluate.py -metrics is fid prdc --dset1_feats DSET1_FEATS --dset1_moments DSET1_MOMENTS --dset2 DSET2-metrics is fid prdc --post_resizer friendly )的圖像文件夾中保存在dset1和dset2中,通過使用gpus (0,...,N)通過DistributedDataParallel保存在DSET1和DSET2中。 export MASTER_ADDR= " localhost "
export MASTER_PORT=2222
CUDA_VISIBLE_DEVICES=0,...,N python3 src/evaluate.py -metrics is fid prdc --post_resizer friendly --dset1 DSET1 --dset2 DSET2 -DDP[MIT許可]同步batchnorm:https://github.com/vacancy/synchronized-batchnorm-pytorch
[麻省理工學院許可]自我發揮的模塊:https://github.com/voletiv/self-cattention-gan-pan-pytorch
[MIT許可] DIFFAUGMENT:https://github.com/mit-han-lab/data-felpidic-gans
[mit_license] Pytorch提高了精度和回憶:https://github.com/clovaai/generative-evaluation-prdc
[mit_license] pytorch密度和覆蓋範圍:https://github.com/clovaai/generative-evaluation-prdc
[MIT許可] Pytorch Clean-FID:https://github.com/gaparmar/clean-fid
[NVIDIA源代碼許可] stylegan2:https://github.com/nvlabs/stylegan2
[NVIDIA源代碼許可]自適應歧視器增強器:https://github.com/nvlabs/stylegan2
[Apache許可證] Pytorch FID:https://github.com/mseitzer/pytorch-fid
Pytorch-Studiogan是MIT許可證(MIT)的開源庫。但是,根據不同的許可條款,圖書館的某些部分可以避免使用:stylegan2,stylegan2-ada和stylegan3是根據NVIDIA源代碼許可證獲得許可的,Pytorch-FID已在Apache許可證下獲得許可。
Studiogan是為以下研究項目而建立的。如果您使用Studiogan,請引用我們的工作。
@article { kang2023StudioGANpami ,
title = { {StudioGAN: A Taxonomy and Benchmark of GANs for Image Synthesis} } ,
author = { MinGuk Kang and Joonghyuk Shin and Jaesik Park } ,
journal = { IEEE Transactions on Pattern Analysis and Machine Intelligence (TPAMI) } ,
year = { 2023 }
} @inproceedings { kang2021ReACGAN ,
title = { {Rebooting ACGAN: Auxiliary Classifier GANs with Stable Training} } ,
author = { Minguk Kang, Woohyeon Shim, Minsu Cho, and Jaesik Park } ,
journal = { Conference on Neural Information Processing Systems (NeurIPS) } ,
year = { 2021 }
} @inproceedings { kang2020ContraGAN ,
title = { {ContraGAN: Contrastive Learning for Conditional Image Generation} } ,
author = { Minguk Kang and Jaesik Park } ,
journal = { Conference on Neural Information Processing Systems (NeurIPS) } ,
year = { 2020 }
}[1]使用RESNET結構而不是CNN進行小型成像網的實驗。
[2]我們對ACGAN(ICML'17)進行了輕微修改的重新實施,從而為使用CIFAR10的實驗帶來了強勁的性能。