生成对抗网络GAN-PyTorch库

GAN 自从被提出后,便迅速受到广泛关注。大体上GAN 可分为两类,一类是无条件下的生成;另一类是基于条件信息的生成。近日,来自韩国浦项科技大学的硕士生在 GitHub 上开源了一个项目,提供了条件 / 无条件图像生成的代表性生成对抗网络(GAN)的实现。

项目地址:https://github.com/POSTECH-CVLab/PyTorch-StudioGAN

具体而言,该项目具有以下几个显著特征:

(1)提供了大量 PyTorch 框架的 GAN 实现;

(2)基于 CIFAR 10、Tiny ImageNet 和 ImageNet 数据集的 GAN 基准;

(3)相较原始实现的更好的性能和更低的内存消耗;

(4)提供完全最新 PyTorch 环境的预训练模型;

(5)支持多 GPU(DP、DDP 和多节点 DDP)、混合精度、同步批归一化、LARS、Tensorboard 可视化和其他分析方法。

如下图所示,项目作者提供了 18 + 个 SOTA GAN 的实现,包括 DCGAN、LSGAN、GGAN、WGAN-WC、WGAN-GP、WGAN-DRA、ACGAN、ProjGAN、SNGAN、SAGAN、BigGAN、BigGAN-Deep、CRGAN、ICRGAN、LOGAN、DiffAugGAN、ADAGAN、ContraGAN 和 FreezeD。

cBN:条件批归一化;AC:辅助分类器;PD:Projection 判别器;CL:对比学习

其中,需要注意以下几点:

(1)G/D_type 表示将标签信息注入生成器或判别式的方式;

(2)EMA 表示生成器中应用更新后的指数移动平均线;

(3)Tiny ImageNet 数据集上的实验使用的是 ResNet 架构而不是 CNN。

环境要求

用户可以采用以下方法安装推荐的环境:

conda env create -f environment.yml -n studiogan

在 docker 中还可以采用以下方式:

docker pull mgkang/studiogan:latest

以下是创建名字为「studioGAN」容器的命令,同样也可以使用端口号为 6006 来连接 tensoreboard:

docker run -it --gpus all --shm-size 128g -p 6006:6006 --name studioGAN -v /home/USER:/root/code --workdir /root/code mgkang/studiogan:latest /bin/bash

使用方法

使用 GPU 0 的情况下,在 CONFIG_PATH 中对于模型的训练「-t」和评估「-e」进行了定义:

CUDA_VISIBLE_DEVICES=0 python3 src/main.py -t -e -c CONFIG_PATH

在使用 GPU (0, 1, 2, 3) 和 DataParallel 情况下,在 CONFIG_PATH 中对于模型的训练「-t」和评估「-e」进行了定义:

CUDA_VISIBLE_DEVICES=0,1,2,3 python3 src/main.py -t -e -c CONFIG_PATH

在 python3 src/main.py 程序中查看可用选项,通过 Tensorboard 可以监控 IS、FID、F_beta、Authenticity Accuracies 以及最大奇异值:

~ PyTorch-StudioGAN/logs/RUN_NAME>>> tensorboard --logdir=./ --port PORT

可视化以及分析生成图像

StudioGAN 支持图像可视化、k 最近邻分析、线性差值以及频率分析。所有的结果保存在「./figures/RUN_NAME/*.png」中。

图像可视化的代码和示例如下:

CUDA_VISIBLE_DEVICES=0,...,N python3 src/main.py -iv -std_stat --standing_step STANDING_STEP -c CONFIG_PATH --checkpoint_folder CHECKPOINT_FOLDER --log_output_path LOG_OUTPUT_PATH

k 最近邻分析,这里固定 K=7,第一列中是生成的图像

CUDA_VISIBLE_DEVICES=0,...,N python3 src/main.py -knn -std_stat --standing_step STANDING_STEP -c CONFIG_PATH --checkpoint_folder CHECKPOINT_FOLDER --log_output_path LOG_OUTPUT_PATH

线性插值(仅适用于有条件的 Big ResNet 模型 )的代码和示例如下:

CUDA_VISIBLE_DEVICES=0,...,N python3 src/main.py -itp -std_stat --standing_step STANDING_STEP -c CONFIG_PATH --checkpoint_folder CHECKPOINT_FOLDER --log_output_path LOG_OUTPUT_PATH

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
禁止转载,如需转载请通过简信或评论联系作者。

相关阅读更多精彩内容

友情链接更多精彩内容