StyleGAN 系列
StyleGAN
如果要说 StyleGAN 的最大的贡献,无疑是改变了传统的生成器架构,通过把隐变量分层引入到 backbone 网络,揭示了网络的各层能够控制生成图像的不同抽象程度的语义,从而在一定程度上实现了无监督特征解耦。另外,作者提出的 FFHQ 数据集也是一个很大的贡献,在之后的生成模型研究乃至 low-level vision 领域中都经常用到。
网络架构设计
在 StyleGAN 以前,传统生成器的网络架构通常如上左图所示——隐变量
为什么要用一个 mapping network(8 层 MLP)把隐变量
映射成 ,再给到生成器网络?一般而言,隐变量
采样自标准高斯分布或者均匀分布,这些分布都是各向同性的。然而,图像的属性之间可能并非如此。例如,在头发长度与性别这两个属性的组合之中,长发男子的出现频率较低。极端情况下,也许数据集中并没有长发男子,那么模型为了在各向同性的隐空间中编码这两个属性,势必会引起较大的扭曲,增加学习难度。为此,作者引入 mapping network 对 做非线性变换,让模型自己学习一个隐空间 ,那么 的扭曲程度就可以得到缓解,如下图所示:实验证明,mapping network 确实能提高生成图像的质量,也能帮助更好的解耦。
值得注意的是,论文中作者对
采用了 truncation trick 来提高可视化的图像质量。而且,受益于 StyleGAN 的设计,我们可以只对低分辨率阶段( )使用 truncation trick,从而保留高频细节的丰富性。具体而言,由于 是学习出来的,我们无法直接对其截断,因此作者首先计算 的平均值: ,然后对于采样出的 ,将其与 做插值来实现类似于截断的效果: . 是如何融入生成器网络的(即图中的 AdaIN 具体是怎么操作的)?AdaIN,即 Adaptive InstanceNorm,源自于风格迁移工作,这也是 StyleGAN 名字中 "Style" 的来源。我们首先需要明确 InstanceNorm (IN) 是在哪些维度上做归一化的,这里借用 GroupNorm 论文的图:
可以看到,InstanceNorm 是在每张图片的每个单通道特征图内做归一化的,注意与 LayerNorm 区分开。
回到 StyleGAN,从上文的架构图中可以看到,
会被复制多份送到生成器网络的各个层次之中。在每个层次里, 会先经过一个可学习的仿射变换(图中的 A 框,其实就是一个全连接层),得到所谓的“风格” : 其中 , 是当前特征图的通道数。然后以 为 scale、 为 bias 逐通道调制(modulate)归一化后的结果: 换句话说,就是把原本第 个通道的特征图 的均值和标准差强行赋值为 和 .最右侧的 noise 是什么?有什么作用?
Noise 的添加是为了给生成的结果引入一些随机微小扰动,这些扰动会改变发丝、皱纹、胡子、毛孔等细节。与
不同的是,给到不同层次的 noise 是单独采样、互相独立的。这些 noise 是单通道的高斯噪声,通过可学习的逐通道缩放系数广播(broadcast)为对应特征图的 shape(图中的 B 框),加到卷积后的特征图上。一个自然的问题是,为什么 noise 不会上升到与
一样的地位,大幅度地影响生成结果呢?作者认为,这与风格迁移文献观察到的现象有关——具有空间不变性的统计量,如 Gram 矩阵、逐通道均值、逐通道方差等,能很好地编码一张图片的风格;相反,对空间位置敏感的特征编码具体的实体。在 StyleGAN 中,风格 通过 AdaIN 操作调制了特征图的均值和方差,因而能控制生成图像的姿态、光照等全局信息;而 noise 是各像素独立的,因此自然而然地被用来控制局部的随机变化。
Style Mixing
虽然我们现在清楚了 StyleGAN 的设计细节,但更重要的是要明白这样设计的动机,换句话说,StyleGAN 的设计有什么优势?其实在文章开头已经提到了,这样的设计使得不同抽象程度的语义与网络不同层次的隐变量形成了对应关系,在一定程度上实现了特征解耦,我们能够通过控制网络内部的各个层级来控制生成结果的各种语义。
文章用 style mixing 展示了这一点。所谓 style mixing,即随机选择网络的一个层次,在这之前使用
如上图所示,source A 和 source B 都是 StyleGAN 生成的图片。前三行是在 source A 的基础上,把粗糙层次(
事实上,style mixing 并不只是一个可视化技巧,作者也将其作为一种正则化技巧用在了训练之中并取名为 mixing regularization,以避免网络认为相邻的两个 style 是相关的。
解耦性能指标
我们知道,评价生成模型的常用指标有 FID、Inception Score 等,但对一个生成模型的完整评价不应仅仅关注于结果,还应该关注网络内部的特征表示。一方面,我们希望网络从隐变量到图像的映射是足够“平滑”的,在隐空间中插值能够导致生成图像的平滑变化;另一方面 ,如果能找到隐空间的一些线性子空间,分别独立地控制图像的某种属性的变化,那便是更好的。因此,论文提出了两个指标——perceptual path length (PPL) 用于衡量生成器的映射是否平滑、linear separability 用于衡量隐空间的解耦程度。
Perceptual path length:PPL 的思想非常简单,当我们在隐空间中插值时,相邻两个隐变量生成的图像应该比较相似,这种相似性可以使用感知距离 lpips 衡量。因此,当我们沿着隐空间
Linear separability:如果一个隐空间不是纠缠起来的,那么我们应该能够在其中找到一个方向,这个方向对应着某个属性的变化。换句话说,我们可以找到一个线性超平面,能根据对该属性做二分类(例如是否微笑、性别等)。
因此,作者首先使用 CelebA 数据集提供的 40 个属性标签在 CelebA-HQ 数据集上训练了分类网络,然后随机采样了 200000 张图像并用分类器对它们分类,保留置信度最高的一半,得到 100000 个有标签的隐向量。
对每个属性,作者拟合一个线性 SVM 来预测隐向量的标签。那么,条件熵
StyleGAN2
从 AdaIN 到调制卷积
StyleGAN2 的主要动机是作者发现 StyleGAN 生成的图像(以及中间的特征图)中常常伴有“水滴”状的 artifact:
经过排查,作者发现这是 AdaIN 的锅——AdaIN 的逐通道归一化和调制破坏了它们之间的相对大小信息,于是网络试图用一个局部的尖峰来主导统计量,进而帮助判断各通道信号的相对大小。
然而,AdaIN 是 StyleGAN 将输入
图 (a) 即我们熟悉的 StyleGAN,由于问题在 AdaIN 上,为了更好地说明,我们把 AdaIN 拆成两部分——normalization 归一化和 modulation 调制,同时把卷积层的 weight 和 bias 显式地画出来,得到图 (b). 特别地,在拆分 AdaIN 后,我们可以把 「Mod-Conv-Add-Norm」视作一个 style block,如图 (b) 的灰色框框所示。
观察图 (b),作者发现一个不协调之处——StyleGAN 的 bias 和 noise 都加在归一化层的前面,导致它们的影响受制于当前 style 的大小。因此,作者把 bias 和 noise 移动到了 style block 后面。进一步地,作者发现只需要对标准差做归一化和调制就足够了,因此去除了对均值的归一化和调制。最后,作者觉得没有必要对输入到第一层的那个常量做归一化和加 bias 与 noise,于是把它们去掉,最终得到了图 (c).
现在,为了解决 AdaIN 带来的问题,最直接的方案就是把归一化层(Norm)去掉,但是作者提出了一个更好的方案,其主要思想是让归一化操作基于特征图的期望的统计量、而非真实的统计量。首先,「Mod std」块可以融入卷积核之中——因为对特征图乘上
综上所述,图 (c) 变成了图 (d) 的形式,即是 StyleGAN2 网络的基本模块。实验证明,将 AdaIN 的归一化换成解调后,生成的图像以及特征图都没有了“水滴” artifact.
正则化
作者探索了两个正则化技巧:
Lazy regularization:StyleGAN 采用的对抗损失是原始 GAN 的损失配合
Path length regularization:在 StyleGAN 中作者提出了 PPL 来衡量生成器映射的平滑程度,然而这个指标并不能直接用作优化目标帮助训练,否则网络显然会坍缩到一个点上。因此,作者提出了一个新的正则化方法来鼓励生成器的平滑性。
作者希望在
网络整体架构
第一节讲的是网络的基本模块,而这一节讲 StyleGAN2 的整体架构。StyleGAN 使用的是简单的 feedforward 设计,没有跳跃连接、残差块等。因此,作者决定探索更复杂的网络架构。
如图 (a) 所示,MSG-GAN 在生成器与判别器相同分辨率的层之间加入了跳跃连接,其中 tRGB 表示把特征图变为 RGB 图像,fRGB 反之。StyleGAN2 作者受其启发,将其简化为了图 (b),最终输出图像是各个分辨率层转换的 RGB 图之和。另外,作者也设计了带残差连接的网络 (c),类似于 LAPGAN. 生成器和判别器分别都有这三种设计,一共 9 种组合,作者在两个数据集上一一测试了它们的效果(有钱就是任性啊),最后发现 output skips 式生成器(图 (b))与残差连接式判别器(图 (c))的组合最好。
StyleGAN2-ADA
StyleGAN3
EigenGAN
前文介绍 StyleGAN 时说到,StyleGAN 揭示了生成器网络各层具有不同抽象程度的语义,并通过 style mixing 的方式进行了可视化。但是它毕竟没有显式地解耦出来——即没有显式地给出对应某个语义的隐空间方向。当然,我们能事后通过有监督的分类或其他手段来分析隐空间,从而找到一些语义对应的方向。但我们能不能在训练网络的同时就无监督地完成解耦呢?
EigenGAN 的网络架构如上图所示,可以看见它与 StyleGAN 一样采用的是分层加入隐变量的设计,不过每一层的隐空间都显示地表达了出来——
在这样的设计下,随机采样的
虽然都是分层设计,但与 StyleGAN 采用 AdaIN 或调制卷积相比,EigenGAN 采用更直接的加法来融入隐变量,因此也有着更清晰的 manifold:
通过改变某层某方向的隐变量大小并可视化出来,我们就能够知道这个方向代表的语义。实验显示不同层的不同方向确实学习到了不同的语义:
更多的结果请参阅原论文。