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的实验带来了强劲的性能。