看GAN如何一步步控制图像生成风格?详解StyleGAN进化过程
选自Medium
作者:Jonathan Hui
机器之心编译
参与:魔王、杜伟
GAN 能够有条不紊地控制其生成图像的风格吗?
你了解自己的风格吗?大部分 GAN 模型并不了解。那么,GAN 能够有条不紊地控制其生成图像的风格吗?
为什么 z 是均匀或正态分布?
既然 z 包含元信息,那么它是否应在每个卷积层生成数据的过程中发挥更主要的作用?(而不是仅作为第一层的输入)
注意:本文将使用「风格」(style)来指代元信息,其包含类型信息和风格信息。
下图是 StyleGAN2 生成的图像:
机器学习中的潜在因子通常彼此独立,以简化模型训练过程。例如,身高和体重具备高度相关性(个子越高的人通常体重更大)。因此,基于身高、体重计算得到的身体质量指数(body mass index,BMI)较常用于衡量人体肥胖程度,其所需的训练模型复杂度较低。而彼此独立的因子使得模型更易于解释。
在 GAN 中,z 的分布应与真实图像的潜在因子分布类似。如果我们从正态或均匀分布中采样 z,则优化后的模型可能需要 z 来嵌入类型和风格以外的信息。例如,我们为军人生成图像,并基于男性化程度和头发长度这两个潜在因子来可视化训练数据集的数据分布。下图中缺失的左上角表示男性军人不允许留长发。
在 logistic 回归中,我们利用基变换(change of basis)来创建二分类类别的线性边界。而 StyleGAN 使用一种叫做映射网络(mapping network)的深度网络,将潜在因子 z 转换成中间潜在空间 w。
在原版 GAN 中,潜在因子 z 仅作为深度网络第一个层的输入。我们可能认为,随着网络的深入,z 的作用会逐渐消失。
而基于风格的生成器使用单独学得的仿射运算 A 在每一层中转换 w。转换后的 w 将作为风格信息作用于空间数据。
第二个改进版本 (C) 添加了映射网络和风格化(styling)。对于后者,AdaIN(自适应实例归一化)取代 PixelNorm 对空间数据执行风格化处理。
在原版 GAN 中,第一层的输入是潜在因子 z。实验结果表明,向 StyleGAN 第一层添加可变输入毫无益处,因此将可变输入替换为常量输入。
至于改进版本 (D),其第一层的输入被替换为学得的常数矩阵,矩阵维度为 4×4×512。
关于噪声如何导致不同的图像渲染结果,参见以下视频:
最后一个改进版本 (E) 涉及混合正则化。
风格混合与混合正则化
之前我们生成潜在因子 z,并作为生成风格的单一源头。而使用混合正则化后,我们转而使用另一个潜在因子 z₂,在达到特定空间分辨率之后再生成风格。
训练
与 CelebA-HQ 数据集相比,FFHQ(Flickr-Faces-HQ,高清人脸数据集)质量更高,覆盖范围更大,如年龄、种族、图像背景以及眼镜、帽子等配饰。在 StyleGAN 中,CelebA-HQ 数据集训练过程中使用 WGAN-GP 作为损失函数,而 FFHQ 数据集则使用非饱和 GAN 损失函数和 R₁正则化项,如下所示:
z 或 w 中的低概率密度区域可能不具备足以准确学习模型的训练数据。
但截断仅在低分辨率层上执行(比如 4×4 至 32×32 空间层,ψ = 0.7)。这可以确保不影响高分辨率细节。
当 ψ 为 0 时,它生成的平均人脸如下图所示。随着 ψ 值的调整,我们可以看到人物视线、眼镜、年龄、肤色、头发长度和性别等属性的变化,如从戴眼镜到不戴眼镜。
StyleGAN 论文还提出一种度量 GAN 性能的新型指标——感知路径长度(perceptual path length)。GAN 逐步改变潜在因子 z 中的某个特定维度,进而可视化其语义。
首先,我们使用 VGG16 嵌入来度量两个图像之间的感知差异。如果我们将潜在空间插值路径分割为线性片段,则可以对每个片段添加所有感知差异。差异值越低,则 GAN 图像的质量越高。详细数学定义参见 StyleGAN 论文。
StyleGAN 中存在的问题
StyleGAN 生成图像中存在类似水滴的斑状伪影,在生成器网络的中间特征图中此类伪影更加明显。这一问题似乎出现在所有 64×64 分辨率特征图中,且在分辨率更高的特征图中更为严重。
我们认为问题出在 AdaIN 运算,它可以分别对每个特征图的均值和方差执行归一化,由此可能摧毁在特征的幅度中找到的任何彼此相关的信息。我们假设这种水滴状伪影出现的原因是生成器有意将信号强度信息传递通过实例归一化:通过创建主导统计数据的强局部尖峰,生成器可以像在其它地方一样有效缩放该信号。
此外,StyleGAN2 提出一种替代设计方案来解决渐进式增长导致的问题,以稳定高分辨率训练。
在探讨 StyleGAN2 之前,我们先重新绘制 StyleGAN 设计图(下图右)。该设计的 AdaIN 模块同样分为两个模块,但此图添加了偏置,而原始设计图中省略了这一项。(注意,目前模型设计没有任何改变)
权重解调(weight demodulation)
在实验结果的支持下,StyleGAN2 做出了以下改变:
移除(简化)初期处理常数的方式;
归一化特征时无需求均值;
将噪声模块从风格模块中移出。
1. 调制 (mod std) 后是卷积 (Conv 3×3),二者组合起来可用于缩放卷积权重,并实现为上图右中的 Mod。(这并未改变模型设计)
其中 i 是输入特征图。
2. 然后用 Demod 对权重执行归一化:
StyleGAN2 做出的改进
现在,我们来看 StyleGAN2 的改进版本。下图总结了多种模型改动,以及对应的 FID 分数改进情况(FID 分数越小,模型性能越好)。
StyleGAN 对 FFHQ 数据集应用 R₁正则化。懒惰式正则化表明,在成本计算过程中忽略大部分正则化成本也不会带来什么坏处。事实上,即使每 16 个 mini-batch 仅执行一次正则化,模型性能也不会受到影响,同时计算成本有所降低。
路径长度正则化
如前所述,路径长度可用于度量 GAN 性能。一个可能的麻烦是,插值路径上不同片段之间的路径距离变动很大。简而言之,我们希望连续的线性插值点之间的图像距离类似。也就是说,潜在空间中的位移会导致图像空间中出现同样幅度的变化,而这与潜在因子的值无关。因此,我们添加一个正则化项,如下所示:
此处不再详述,代码参见:https://github.com/NVlabs/stylegan2/blob/7d3145d23013607b987db30736f89fb1d3e10fad/training/loss.py,读者可以据此运行 debugger。
渐进式增长
StyleGAN 使用渐进式增长来稳定高分辨率图像的训练。上文我们提到了渐进式增长的问题,StyleGAN2 寻求一种替代设计,允许深度较大的网络也能具备良好的训练稳定性。ResNet 使用残差连接(skip connection)来实现这一目标。因此 StyleGAN2 探索了残差连接设计和其它与 ResNet 类似的残差概念。对于这些设计,我们使用双线性滤波器对前一层执行上采样/下采样,并尝试学习下一层的残差值。
在这些改动之后,我们进一步分析了高分辨率层对图像生成的影响。StyleGAN2 论文度量了不同模型层输出图像的变化。下图左表示每个层对生成图像的贡献,横轴表示训练过程。
在训练初期,低分辨率层占主导地位。然而,随着更多训练迭代的完成,高分辨率层(尤其是 1024 × 1024 层)的贡献不如预计的多。研究者怀疑这些层的容量不够大。事实的确如此,当高分辨率层中的特征图数量翻倍时,其影响力显著上升(右图)。
- 免责声明
- 本文所包含的观点仅代表作者个人看法,不代表新火种的观点。在新火种上获取的所有信息均不应被视为投资建议。新火种对本文可能提及或链接的任何项目不表示认可。 交易和投资涉及高风险,读者在采取与本文内容相关的任何行动之前,请务必进行充分的尽职调查。最终的决策应该基于您自己的独立判断。新火种不对因依赖本文观点而产生的任何金钱损失负任何责任。