PG-GAN(progressive growing GAN)复现,网络架构详细分析(附源代码)

PG-GAN复现详细思路以及一些思考

笔者在3月底突然看到此篇论文,感受到它的效果惊艳,思想很让人惊讶,因此我决定将其复现。复现道路总是充满曲折的,我一开始使用tensorflow复现,原谅我能力有限,我无法解决图的加载问题。因此,我半路去学习了pytorch,然后继续踩坑复现。
github源代码:https://github.com/djjandXMU/PGGAN

使用pytorch的原因

1.pytorch使得加载模型便捷,微调这些操作十分简单,而tensorflow是静态的,因此不方便(笔者困于每个分辨率训练后添加新层时候无法加载原始层参数)。笔者听说tensorflow2.0可以实现动态模型加载,打算找个时间去学习学习。
2.pytorch更简单,能够更好的与numpy等包结合。

模型搭建要点

1.优化器参数也要去保存**(这是fade-in阶段稳定损失的极其重要的一步)**,我们用的是adam优化器,它的学习率和梯度是与过去训练相关的,因此其也需要加载参数保证损失不会震荡太大。
2.如果你显存够的话,batchsize大点,这样优化方向更好。
3.卷积层的结构一定是 conv+lrelu+pixl_norm,笔者一开始写反了,坑了我好久
4.equalize learning rate极其重要,这可以是说决定你是否能生成高质量人脸的关键,也是稳定损失的关键。

优化器参数如何保存和加载

在初次训练时候,没有优化器参数,因此不用加载,但是过度到8*8像素值时候,需要加载4x4训练时候优化器的参数。我是每个分辨都分辨保存,这样之后也可以随意加载,比较方便。
PG-GAN(progressive growing GAN)复现,网络架构详细分析(附源代码)_第1张图片

优化器的保存

equlizing learning rate

卷积层pytorch源代码github即可下载,不过它有点错误,我将其修改了,然后根据它也弄了个全连接层函数
PG-GAN(progressive growing GAN)复现,网络架构详细分析(附源代码)_第2张图片
PG-GAN(progressive growing GAN)复现,网络架构详细分析(附源代码)_第3张图片

网络架构

我觉得tensorflow或者pytorch写成循环的形式太复杂了,因此我将其写成了静态的形式。pytorch可以对numpy的变量进行传递,这样编程起来就简单多了。我首先定义了所有层的参数,毕竟网络不是无限的,这样我就可以一步步搭建了。
生成器首先定义每个卷积层,这样之后直接就可以搭建,循环形式我是真的头大。
PG-GAN(progressive growing GAN)复现,网络架构详细分析(附源代码)_第4张图片

生成器网络结构如下,这里没有给完,我的github上有完整的逻辑。首先从4*4开始训练,然后加倍,此时alpha起作用了,限制新加层的权重,使得其慢慢过度,此时我们block_num来判断此时分辨率,进而就可以自动实现输出了,使用最简单的if循环就可以做到。判决器如法炮制,这里就不给出图片了。
PG-GAN(progressive growing GAN)复现,网络架构详细分析(附源代码)_第5张图片

复现效果

人脸效果还不是很好,我训练的epoch还不是很够,两天就训练完了。如果你有时间,可以多训练几天。
如果你有任何疑问,直接联系笔者的QQ:[email protected]或者在github上留言。
PG-GAN(progressive growing GAN)复现,网络架构详细分析(附源代码)_第6张图片

PG-GAN(progressive growing GAN)复现,网络架构详细分析(附源代码)_第7张图片

如何运行源代码

你只用将数据路径更改即可,一共三个需要更改的地方,都更改成同一个训练路径即可
在这里插入图片描述

你可能感兴趣的:(PG-GAN(progressive growing GAN)复现,网络架构详细分析(附源代码))