这篇论文感觉理论上还蛮复杂的,第一遍实在不太懂,但效果比较好又舍不得放弃,硬头皮看第二遍了。但是官方代码好难好难!
StyleGAN中的style借用自图像风格迁移,之前也看过风格迁移的论文,图像的Gram矩阵一般可以表示它的风格也就是style。这篇文章是PG-GAN之后的,主要改变了生成器的结构实现无监督地生成可控性强的图像。
PG-GAN中是通过一层层地给生成器和判别器增添卷积层同时提高分辨率的方法来生成高质量图像的。StyleGAN的motivation就是发现这种渐进的方法其实能控制图像的不同特性,低分辨率也就是coarse层主要影响图像的姿态,脸型等高级特征,高分辨率主要影响背景发色等低级特征(结合感受野的概念理解,低分辨率的特征获取更多全局信息并加以处理,比如特征从线条经过多次卷积一步步会组合出形状,会更加抽象,具有更高级的语义信息)。但PG-GAN这种结构在递进添加层的时候没有任何控制条件,导致整体的特征和细微的特征间存在耦合,耦合就导致了图像可控性差,没办法对单个特征进行调节。StyleGAN于是寻找了一种无监督但又可控性强的方法:对不同level的卷积层进行操作。
1. latent code
在之前的GAN结构中,latent code主要用于生成器最初的输入,latent code就是一个随机向量,相比于图像而言,维度更低,更容易采样。GAN生成图像的随机性就在于latent code的随机性,因此自然会想到通过控制latent code控制生成的图像。CGAN就是在latent code后面再concatenate一个code,或者更高级的情况,latent code的每一个维度对应了图像中我们关注的特性,想改变图像的特征时就找到对应的维度调整latent code的值即可。这种情况就需要latent code的解耦和,如果code中的一个维度其实耦合了多个图像特征,我们就没办法轻松调整生成图像的特性了。那为什么latent code本身不是已经解耦和的呢?为什么要人为找办法去解耦和呢?文中提到的原因是latent code的设定是要一定程度上匹配图像分布的概率密度的:我的理解是如果训练集的图像有30%是蓝头发的动漫人物,latent code中就要存在一些code达到接近的比例对应蓝头发;那也会有很多其他图像特征对应着code,所以一个code往往参与了很多图像特征,大概就是耦合?
当latent code只用于生成器的输入层时,随着生成器的层数增多,它的影响应该会越来越微弱。StyleGAN中,生成器的输入变成了一个常量,而latent code分别作用于生成器的每一个卷积层后,以控制图像的生成。这里有两个重点:
1. latent code作用于卷积层之前有一个变换,可以达到解耦和
2. 解耦和后的latent code作用于每一卷积层,借鉴PG-GAN的递进概念,这些层所影响/控制的特征是不同的,于是latent code对不同level的特征们分别进行了控制
初始的latent code记作