一、progan,https://zhuanlan.zhihu.com/p/93748098
stylegan的前身是progan,Progressive Growing of GANs for Improved Quality, Stability, and Variation
ProGAN 最大的贡献在于提出了一种新的训练方式,即,我们不要一上来就学那么难的高清图像生成,这样会让 Generator 直接崩掉,而是从低清开始学起,学好了再提升分辨率学更高分辨率下的图片生成。
从4x4到8x8一直提升到1024x1024,循序渐进,即能有效且稳定地训练出一个高质量的高分辨率生成器模型。
在某清晰度阶段训练好后,如何提升模型输出的分辨率后继续训练呢,下面是模型的整体结构,4-8-16-32-64-128-256-512-1024,无论是生成器还是判别器,在某清晰阶段训练好后,只要各加上三层(表格中从上往下加),接着训练就好啦~
更具体地说,一开始的 4x4 分辨率阶段的训练结束后,接下来的训练循环进行以下两步:
- 加入新层,提升分辨率训练,使新层 fade in,旧层 fade out。
- 新层完全加入,正常训练。
二、stylegan
(1)第一个是Mapping network,即下图 (b)中的左部分,由隐藏变量 z 生成 中间隐藏变量 w的过程,这个 w 就是用来控制生成图像的style,即风格,为什么要多此一举将 z 变成 w 呢,后面会详细讲到。
(2)第二个是Synthesis network,它的作用是生成图像,创新之处在于给每一层子网络都喂了 A 和 B,A 是由 w 转换得到的仿射变换,用于控制生成图像的风格,B 是转换后的随机噪声,用于丰富生成图像的细节,即每个卷积层都能根据输入的A来调整"style",通过B来调整细节。
(3)整个网络结构还是保持了 PG-GAN (progressive growing GAN) 的结构。
左侧是progan的网络结构,右侧是stylegan的
层和分辨率越低,它所影响的特征就越粗糙。简要将这些特征分为三种类型:
1、粗糙的——分辨率不超过82,影响姿势、一般发型、面部形状等;
2、中等的——分辨率为162至322,影响更精细的面部特征、发型、眼睛的睁开或是闭合等;
3、高质的——分辨率为642到10242,影响颜色(眼睛、头发和皮肤)和微观特征;
三、stylegan---第一部分,mapping network
1.添加 Mapping Network 的目标是将输入向量编码转为中间向量,并且中间向量后续会传给生成网络得到 18 个控制向量,使得该控制向量的不同元素能够控制不同的视觉特征。
2.为何要加 Mapping Network 呢?因为如果不加这个 Mapping Network 的话,后续得到的 18个控制向量之间会存在特征纠缠的现象——比如说我们想调节 8*8 分辨率上的控制向量
(假 设它能控制人脸生成的角度),但是我们会发现 32*32 分辨率上的控制内容(譬如肤色)也被改变了,这个就叫做特征纠缠。所以 Mapping Network 的作用就是为输入向量的特征解缠提供一条学习的通路。
3.为何 Mapping Network 能够学习到特征解缠呢?简单来说,如果仅使用输入向量来控制视觉特征,能力是非常有限的,因此它必须遵循训练数据的概率密度。
例如,如果黑头发的人的图像在数据集中更常见,那么更多的输入值将会被映射到该特征上。因此,该模型无法将部分输入(向量中的元素)映射到特征上,这就会造成特征纠缠。
然而,通过使用另一个神经网络,该模型可以生成一个不必遵循训练数据分布的向量,并且可以减少特征之间的相关性。(没看懂)