Style GAN
一、ProGAN
ProGAN的关键创新之处在于渐进式训练——从训练分辨率非常低的图像(如4×4)的生成器和判别器开始,每次都增加一个更高的分辨率层。
ProGAN解决了生成高分辨率图像(如1024×1024)的问题。
渐进层的一个的好处是,如果使用得当,它们能够控制图像的不同视觉特征。层和分辨率越低,它所影响的特征就越粗糙
存在问题:
与多数GAN一样,ProGAN控制生成图像的特定特征的能力非常有限。也就是说ProGAN 容易发生特征纠缠
二、style GAN
通过分别修改每一层级的输入,在不影响其他层级的情况下,来控制该层级所表示的视觉特征。这些特征可以是粗的特征(如姿势、脸型等),也可以是一些细节特征(如瞳色、发色等)。改进了proGan的缺点。
①借鉴风格迁移,提出基于样式的生成器(style-based generator)。
- 实现了无监督地分离高级属性(人脸姿势、身份)和随机变化(例如雀斑,头发)
- 实现对生成图像中特定尺度的属性的控制。
- 生成器从一个可学习的常量输入开始,隐码在每个卷积层调整图像的“样式”,从而直接控制不同图像特征的强度。
②实现了对隐空间(latent space)较好的解耦。
- 生成器将输入的隐码z嵌入一个中间的隐空间。因为输入的隐空间Z必须服从训练数据的概率密度,这在一定程度上导致了不可避免的纠缠,而嵌入的中间的隐空间W不受这个限制,因此可以被解耦。
③提出了两个新的量化隐空间解耦程度的方法
- 感知路径长度和线性可分性。与传统的生成器体系结构相比,新的生成器允许更线性、更解耦地表示不同的变化因素。
框架:
如图所示,用mapping network编码w来控制style(人脸的姿态、身份特征),用noise来控制头发丝、皱纹、肤色等细节部分。
mapping network
首先理解一些概念:
mapping network为了对图像特征的latent space进行解耦。
latent code 简单理解就是,为了更好的对数据进行分类或生成,需要对数据的特征进行表示,但是数据有很多特征,这些特征之间相互关联,耦合性较高,导致模型很难弄清楚它们之间的关联,使得学习效率低下,因此需要寻找到这些表面特征之下隐藏的深层次的关系,将这些关系进行解耦,得到的隐藏特征,即latent code。由 latent code组成的空间就是 latent space。
几个特征纠缠的例子:
比如说我们想调节 8*8 分辨率上的控制向量(假 设它能控制人脸生成的角度),但是我们会发现 32*32 分辨率上的控制内容(譬如肤色)也被改变了,这个就叫做特征纠缠。
adain样式模块
首先每个特征图xi(feature map)独立进行归一化 。特征图中的每个值减去该特征图的均值然后除以方差,将W′通过一个可学习的仿射变换(A,实际上是一个全连接层)扩变为放缩因子与偏差因子,