Anime-WGAN-GP 是一个使用 WGAN-GP 来生成动漫头像的项目
相关视频: 【项目分享】使用GAN网络生成动漫头像(附代码)
# CUDA 10.2
conda install pytorch==1.10.1 torchvision==0.11.2 torchaudio==0.10.1 cudatoolkit=10.2 -c pytorch
pip install -r requirements.txt
整个数据集包含 2.7w+ 分辨率为 256x256 的高质量动漫人脸
另一个数据集,5w+,分辨率96x96,质量不错
下载zip并且解压到 ./dataset
文件夹下, dataset/anime256
and dataset/anime
如果下载过慢可以使用Github proxy加速
这两个数据集下载任意一个用于训练都可以
设计了两个模型结构, WGAN
和 WGANP
, 这两个模型最主要的区别在于Generator增大图片尺寸的方式,你可以通过这篇文章反卷积存在的问题了解到为什么要这么做
python train.py --config-file configs/WGAN.yaml
python train.py --config-file configs/WGANP.yaml
注意: 如果需要自己训练模型,请参阅更多训练信息,当然你可以在后面找到提供的预训练模型
python generate.py --config-file configs/WGAN.yaml -g checkpoints/WGAN/WGAN_G_epoch_39999.pth
python generate.py --config-file configs/WGANP.yaml -g checkpoints/WGANP/WGANP_G_epoch_39999.pth
python generate.py --config-file configs/WGANP.yaml -g checkpoints/WGANP_G_ANIME256.pth MODEL.DEVICE cpu
默认情况下,它会在 ./images
下生成一个 8x8 网格的动漫图片
其他:
-g
: generator 的缩写,一个参数是模型权重的路径名这里的模型是指生成器G的模型
-s
: separate 的缩写,没有参数可以使用-s
将将一张大图拆分成每一张小图
OS: CentOS 7.5 Linux X86_64
Python: 3.7.14 (anaconda)
PyTorch: 1.10.1
CPU: Intel Xeon 6226R
GPU: Nvidia Tesla V100 16GB
model | dataset | Discriminator | Generator |
---|---|---|---|
WGAN | ANIME256 | download | download |
ANIME | download | download | |
WGANP | ANIME256 | download | download |
ANIME | download | download |
如果不想自己训练(大约36~48h),可以下载预训练好的模型G并将其移动到./checkpoints
下,然后按照上文Generate images
生成图片, 注意修改后面的生成器G的模型路径
事实上如果你只是想生成一张动漫图片你只需要下载G, 判别器D在生成图片的过程中并没有用到
其实不是所有生成的图片都好看,手动选择了一些喜欢的图片,使用模型
WGAN + anime256
如果尚不了解潜在空间探索可以参考博客/)
WGAN + anime256 | WGAN + anime |
---|---|
WGANP + anime256 | WGANP + anime |
---|---|
对于相同的噪声输入,不同生成图像的过程
WGAN + anime256 | WGAN + anime |
---|---|
WGANP + anime256 | WGANP + anime |
---|---|
这是第一次尝试GAN,久闻大名但从未尝试学习它.恰逢数据科学导论课期末报告,期末作业是做一些与机器学习相关的事情.所以这是学习 GAN 的好机会!于是看了一些GAN的论文,真的很有意思.
GAN学习指南:从原理入门到制作生成Demo启发了尝试生成自己的动漫头像
实际上必须承认,的预训练模型并没有像期待的那样表现出色,时至今日有很多优秀的模型在生成图像上具有更好的效果,比如diffusion.
这个项目的最初目的只是为了学习一些关于 GAN 的东西,选择使用 WGAN-GP 是因为它的数学推导很棒,想尝试动手写一下而不是只是双击运行,那样稍显无趣.
特别感谢 pytorch-wgan,绝大部分代码都参考自这个项目
其实一开始想生成 256x256 的图像,这就是为什么爬取 256x256 图像并制作该数据集的原因.但随着图像尺寸乘以 4,模型表现极差.也许需要一个更好的模型结构.试过使用residual block ,但效果不佳.
project:
knowledge: