stylegan2 浅层实现

stylegan2-ada 图像生成
没想到我也成功了

先说一句废话:
感谢各位在网上发布项目经验和代码的大佬们

再说说运行环境:
我是在公司搞的,因为公司的电脑没有显卡,于是用vscode连得服务器linux系统,又在linux里连了一个docker镜像,然后在容器里面实现的,不过cuda是公司自己装的,容器里面已经把相关的环境需要的东西全都搞好了,就不用我操心了。
我实现的是stylegan2-ada ,是这个原来的作者在stylegan2上修改得到的,用了ada。据说用少量的数据集就可以获得比较好的效果
ABSTRACT:
使用太少的数据训练生成对抗网络 (GAN) 通常会导致判别器过度拟合,从而导致训练发散。 我们提出了一种自适应鉴别器增强机制,可显着稳定有限数据机制中的训练。 该方法不需要更改损失函数或网络架构,并且适用于从头开始训练和在另一个数据集上对现有 GAN 进行微调时。 我们在几个数据集上证明,现在只使用几千张训练图像就可以获得良好的结果,通常将 StyleGAN2 结果与少一个数量级的图像相匹配。 我们希望这为 GAN 开辟新的应用领域。 我们还发现广泛使用的 CIFAR-10 实际上是一个有限的数据基准,并将记录 FID 从 5.59 提高到 2.42。
docker地址:https://hub.docker.com/r/heatonresearch/stylegan2-ada
stylegan2 浅层实现_第1张图片
这就是他的目录下面的东西
其中 train 就是训练模型的文件,generate就是生成图像的文件,dataset_tool是转化图像的文件,projecter我还没试过,据说是你给他一张图片,他能搞一系列差不多的,然后进行微调之类的。
我先从生成图像文件开始,我相信生成图像是吸引你们进来的地方:

nvidia-docker run -it -v /home/gqy/docker/ai:/home/ai heatonresearch/stylegan2-ada /bin/bash

连接到docker

cd /home/ai/stylegan2-ada/

切换到目录

python generate.py --network=/home/ai/stylegan2-ada/model/stylegan2-ffhq-config-f.pkl --seeds=1000-1200  --trunc=0.5 --outdir=/home/ai/humanface

生成人脸,用的是stylegan2-ffhq-config-f.pkl 模型,这个模型就是别人提供的
https://nvlabs-fi-cdn.nvidia.com/stylegan2-ada/pretrained/,seeds就是随机种子, trunc 可以控制生成的图片的多样性, 一般在0.5-0.7 ,outdir就是生成的图像的地址。这只是一个例子,具体怎么实施要看你自己的文件的目录。

如果你不想用别人的数据集,你就自己训练出一个模型,首先准备一些三通道(RGB)图片,这个作者说几千张就可以,如果只有几百张,就先试试,看看效果,图片的长和宽都要求是 2 的幂,一样大 比如 3* 512* 512,或者3* 1024* 1024,图片越大对你电脑的要求越高。我本来准备的图片不是这样的,然后用Matlab转换了一下,变成了这个大小。
接着运行dataset_tool.py 就会转换格式成TFRecords, 然后进行训练。
train就是训练的文件,我说几个参数:
outdir 就是训练的结果的路径
gpus 就是你的显卡数量,我们服务器是两块
snap 就是隔多久显示一下目前的状态 ,默认是50,自己随便调整
data 就是数据,你刚刚生成的tfrecord的路径
kimg 可以理解为训练的时常,一般来说越长越好,主要还是看收敛的速度。你边训练边看状态,就知道收敛的怎么样了
resume 是是否要进行迁移学习,如果想在别人的模型基础上训练的话,就将别人的模型的路径赋值给他
metrics 好像是选择评判指标,我也不大确定
mirror 代码介绍说是图像增强的东西
dry run 是打印出你的参数,不运行程序,让你检查一下对不对
例子:

python train.py --kimg=1000 --outdir=/home/ai/result --mirror=1 --snap=50 --data=/home/ai/dataset/missile --gpus=2

stylegan2 浅层实现_第2张图片
fakes00000000是初始的样子
201 403 604等等就是越往后训练,训练出来的图片样子,不过这些都只是示例,你需要自己去运行generate函数去生成
pkl后缀的就是你的模型,数字分别对应训练到什么程度的模型
metric-fid0k_full 是训练的一个过程吧
stylegan2 浅层实现_第3张图片
最后一列越小越好,我这个显然还没有收敛,阔以增加 kimg再训练 ,或者加大学习率,不过我觉得人家既然没有把学习率搞出来让我修改,还是不要修改了,如果效果很差再修改。
我训练一次要20多个小时还是挺久的。
作者训练的样本最后这个值能达到2到3之间。
生成的图片就不展示了

你可能感兴趣的:(笔记,计算机视觉)