Studioganは、条件/無条件の画像生成のための代表的な生成敵対的ネットワーク(GANS)の実装を提供するPytorchライブラリです。 Studioganは、機械学習の研究者が新しいアイデアを容易に比較して分析できるように、現代のガンと同じ遊び場を提供することを目指しています。
さらに、Studioganは、生成モデルに前例のない規模のベンチマークを提供します。ベンチマークには、GANS(Biggan-Deep、StyleGan-XL)、自動回帰モデル(MaskGIT、RQ-Transformer)、および拡散モデル(LSGM ++、CLD-SGM、ADM-GU)の結果が含まれます。
| 方法 | 会場 | 建築 | GC | DC | 損失 | エマ |
|---|---|---|---|---|---|---|
| dcgan | arxiv'15 | dcgan/resnetgan 1 | n/a | n/a | バニラ | 間違い |
| インフォガン | NIPS'16 | dcgan/resnetgan 1 | n/a | n/a | バニラ | 間違い |
| lsgan | ICCV'17 | dcgan/resnetgan 1 | n/a | n/a | 少なくともsqaure | 間違い |
| ガン | arxiv'17 | dcgan/resnetgan 1 | n/a | n/a | ヒンジ | 間違い |
| wgan-wc | ICLR'17 | Resnetgan | n/a | n/a | wasserstein | 間違い |
| wgan-gp | NIPS'17 | Resnetgan | n/a | n/a | wasserstein | 間違い |
| wgan-dra | arxiv'17 | Resnetgan | n/a | n/a | wasserstein | 間違い |
| ACGAN-MOD 2 | - | Resnetgan | CBN | AC | ヒンジ | 間違い |
| pdgan | ICLR'18 | Resnetgan | CBN | PD | ヒンジ | 間違い |
| スンガン | ICLR'18 | Resnetgan | CBN | PD | ヒンジ | 間違い |
| サガン | ICML'19 | Resnetgan | CBN | PD | ヒンジ | 間違い |
| タクガン | Neurips'19 | ビガン | CBN | TAC | ヒンジ | 真実 |
| lgan | ICML'19 | Resnetgan | n/a | n/a | バニラ | 間違い |
| 無条件のビッグガン | ICLR'19 | ビガン | n/a | n/a | ヒンジ | 真実 |
| ビガン | ICLR'19 | ビガン | CBN | PD | ヒンジ | 真実 |
| Biggan-Deep-Comparegan | ICLR'19 | Biggan Deep Compartgan | CBN | PD | ヒンジ | 真実 |
| Biggan Deep-Studiogan | - | Biggan Deep Studiogan | CBN | PD | ヒンジ | 真実 |
| stylegan2 | CVPR '20 | stylegan2 | ケイデン | SPD | ロジスティック | 真実 |
| クルガン | ICLR'20 | ビガン | CBN | PD | ヒンジ | 真実 |
| icrgan | aaai'21 | ビガン | CBN | PD | ヒンジ | 真実 |
| ローガン | arxiv'19 | Resnetgan | CBN | PD | ヒンジ | 真実 |
| 対照 | Neurips'20 | ビガン | CBN | 2c | ヒンジ | 真実 |
| mhgan | wacv'21 | ビガン | CBN | MH | MH | 真実 |
| Biggan + Diffaugment | Neurips'20 | ビガン | CBN | PD | ヒンジ | 真実 |
| stylegan2 + ada | Neurips'20 | stylegan2 | ケイデン | SPD | ロジスティック | 真実 |
| Biggan + Lecam | CVPR'2021 | ビガン | CBN | PD | ヒンジ | 真実 |
| Reacgan | Neurips'21 | ビガン | CBN | d2d-ce | ヒンジ | 真実 |
| stylegan2 + apa | Neurips'21 | stylegan2 | ケイデン | SPD | ロジスティック | 真実 |
| stylegan3-t | Neurips'21 | stylegan3 | カイン | SPD | ロジスティック | 真実 |
| stylegan3-r | Neurips'21 | stylegan3 | カイン | SPD | ロジスティック | 真実 |
| adcgan | ICML'22 | ビガン | CBN | ADC | ヒンジ | 真実 |
GC/DCは、発電機または識別器にラベル情報を注入する方法を示します。
EMA:発電機への指数移動平均アップデート。 CBN:条件付きバッチ正規化。 Cadain:適応インスタンス正規化の条件付きバージョン。 AC:補助分類器。 PD:投影識別器。 TAC:ツイン補助分類器。 SPD:StyleGan用の修正PD。 2C:条件付き対比損失。 MH:マルチヒンジ損失。 ADC:補助識別分類器。 D2D-CE:データからDATAの交差エントロピー。
| 方法 | 会場 | 建築 |
|---|---|---|
| インセプションスコア(IS) | Neurips'16 | inceptionv3 |
| フレチェットインセプション距離(fid) | Neurips'17 | inceptionv3 |
| 精度とリコールの改善 | Neurips'19 | inceptionv3 |
| 分類器精度スコア(CAS) | Neurips'19 | inceptionv3 |
| 密度とカバレッジ | ICML'20 | inceptionv3 |
| クラス内FID | - | inceptionv3 |
| swav fid | ICLR'21 | swav |
| クリーンメトリック(is、fid、prdc) | CVPR'22 | inceptionv3 |
| アーキテクチャに優しいメトリック(IS、FID、PRDC) | arxiv'22 | inceptionv3に限定されません |
| 方法 | 会場 | ターゲットアーキテクチャ |
|---|---|---|
| 凍結 | CVPRW'20 | stylegan2を除きます |
| トップKトレーニング | Neurips'2020 | - |
| DDLS | Neurips'2020 | - |
| sefa | CVPR'2021 | ビガン |
Studioganで実装されたGANの再現性を、ISとFIDを元の論文と比較することで確認します。私たちは、PD-Gan、Acgan、Logan、Sagan、およびBiggan Deepを除き、ほとんどの代表的なGANを正常に再現するプラットフォームを特定します。 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 timmDockerを使用すると、使用できます(2022年12月14日更新):
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/zshNVIDIAドライバーバージョンが要件を満たしていない場合は、以下を上記のコマンドに追加してみてください。
--env NVIDIA_DISABLE_REQUIRE=trueCIFAR10/CIFAR100:Studioganは、 main.pyを実行すると自動的にデータセットをダウンロードします。
Tiny Imagenet、Imagenet、またはカスタムデータセット:
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の計算であり、FIDと-metrics noneスキップ評価します。
-t )および評価は、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 )を使用したトレーニングと評価のためのプリプロセス画像。次に、gpu 0を使用してCONFIG_PATHで定義されたモデルのフレンドリー、フレンドリー - フレンドリー、フレンドリー、フレンドリー、フレンドリーなdns、 -tなdns、フレンドリーなdns、フレンドリーCVG( -metrics is fid prdc --post_resizer clean )を訓練して評価します。 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)を使用してDataParallelを介してCONFIG_PATHで定義されたモデルのfidを列車( -t )し、評価します。 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 distributedDatapar Allel(こちらを参照してください)( -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人の代表GANのトレーニングをサポートしています。
データセットとモデルに応じて異なるスクリプトを使用しましたが、次のとおりです。
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は、インセプションスコア、フレチェットの開始距離、精度とリコールの改善、密度とカバレッジ、クラス内FID、分類器精度スコアをサポートします。ユーザーはIntra-Class FID, Classifier Accuracy Score -iFID, -GAN_train, and -GAN_testオプションをそれぞれ使用して、クラス内精度スコアスコアを取得できます。
ユーザーは--eval_backbone ResNet50_torch, SwAV_torch, DINO_torch, or Swin-T_torchオプションを使用して、inceptionv3からresnet50、swav、dino、またはswinトランスに評価バックボーンを変更できます。
さらに、ユーザーは、 --post_resizer clean or friendlyオプションを使用して、クリーンまたはアーキテクチャに優しいリジザーでメトリックを計算できます。
インセプションスコア(IS)は、GANが高忠実度と多様な画像を生成する量を測定するメトリックです。計算は、事前に訓練されたInception-V3ネットワークを必要とします。データセットを10倍に分割して計算しないことに注意してください。
FIDは、GANモデルのパフォーマンスを評価するために広く使用されているメトリックです。 FIDの計算には、事前に訓練されたインセプション-V3ネットワークが必要であり、最新のアプローチではTensorflowベースのFIDを使用します。 Studioganは、PytorchベースのFIDを利用して、同じPytorch環境でGANモデルをテストします。 PytorchベースのFID実装は、Tensorflowの実装でほぼ同じ結果を提供することを示します(Contragan Paperの付録Fを参照)。
精度とリコールの改善は、精度とリコールの欠点を補うために開発されています。 fidのように、改善された精度とリコールの計算には、事前に訓練されたインセプション-v3モデルが必要です。 Studioganは、密度とカバレッジスコアの開発者が提供するPytorchの実装を使用しています。
密度とカバレッジメトリックは、事前に訓練されたInception-V3モデルを使用して、生成された画像の忠実度と多様性を推定できます。メトリックは外れ値に堅牢であることが知られており、同一の実際の分布と偽の分布を検出できます。 Studioganは著者の公式Pytorchの実装を使用し、Studioganはハイパーパラメーターの選択に関する著者の提案に従います。
最良のIS、FID、改善された精度とリコール、およびGANSの密度とカバレッジを報告します。
Studioganで報告されたすべてのチェックポイントをダウンロードするには、ここをクリックしてください(Face Hubを抱き締める)。
-ckpt CKPT_PATHオプションを対応する構成パス-cfg CORRESPONDING_CONFIG_PATHに追加することにより、チェックポイントを評価できます。
CIFAR10、Baby Imagenet、Papa Imagenet、Grandpa Imagenet、Imagenet、AFHQV2、およびFQの解像度は、それぞれ32、64、64、64、128、512、および1024です。
Frechet Inception距離(FID)、精度、リコール、密度、およびカバレッジ計算のトレーニング画像と同じ数の生成画像を使用します。 Baby/Papa/Grandpa ImagenetとImagenetを使用した実験では、完全なトレーニングセットに対して50kの偽画像を実際の画像として使用しています。
参照データセットのすべての機能と瞬間は、機能と瞬間を介してダウンロードできます。
Imagenet-128とImagenet 256の解像度は、それぞれ128と256です。
ベンチマークに使用されるすべての画像は、1つのドライブからダウンロードできます(まもなくアップロードされます)。
-metrics is fid prdc )の画像フォルダー(既に前処理されている)のdset1およびdset2でGPU (0,...,N)を使用して保存されています。 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 )、dset1( --dset1_moments DSET1_MOMENTS )、およびgpus (0,...,N)のモーメントを使用してdset2に保存されています。 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に保存された画像フォルダーのGPU (0,...,N)を使用してDistributedDataParallelされます。 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
[MITライセンス]自己attentionモジュール:https://github.com/voletiv/self-attention-gan-pytorch
[MITライセンス] Diffaugment:https://github.com/mit-han-lab/data-efficient-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ライセンスに基づいてライセンスされているという明確なライセンス条件の下で、Avaiaibleです。
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]小さなImagenetでの実験は、CNNの代わりにResNetアーキテクチャを使用して実施されます。
[2] ACGAN(ICML'17)のわずかな修正との再実装。これにより、CIFAR10を使用した実験のパフォーマンスが強力に向上します。