StyleGAN学习笔记

StyleGAN学习笔记_第1张图片

生成对抗网络中一种基于样式的生成器结构


原文:https://arxiv.org/abs/1812.04948
代码(官方tf版):https://github.com/NVlabs/stylegan
代码(非官方Pytorch版):https://github.com/rosinality/style-based-gan-pytorch


文章目录

    • 前言
    • 论文核心
    • 模型和方法
      • 基于样式的生成器结构
        • Style控制
        • 自适应实例归一化(AdaIN)
      • 样式混合,混合正则化
      • 随机变化
      • 隐变量解耦
      • 两种新的量化解耦的方法
        • 感知路径长度(Perceptual path length)
        • 线性可分性(linear separability)
    • 总结
    • 参考


前言

学习StyleGAN之前推荐先学习Progressive GAN,因为前者是在后者的基础上改进的算法。Progressive GAN使用渐变的生成器进行渐进式训练,以生成1024x1024的图像。


论文核心

  1. 借鉴风格迁移,提出新的生成器结构:
    实现自动且无监督地分离高级属性(姿态,身份)和随机变化(头发,雀斑)
    可直观地,按特定尺度控制合成
  2. 更高的生成质量,插值性能的提升,更好的解耦能力
    通过映射网络将latent code z映射到中间的隐空间W。输入潜在空间Z必须遵循训练数据的概率密度,这会导致某种程度的不可避免的纠缠,而中间潜在空间W不受限制。
  3. 两种新的量化隐空间解耦程度的方法
    感知路径长度和线性可分性。证明了新的生成器相较于传统生成器允许更线性、更解耦地表示不同的变化因素。
  4. FFHQ人脸数据集,真正的1024x1024分辨率大规模人脸数据集,70000张

模型和方法

基于样式的生成器结构

StyleGAN学习笔记_第2张图片

原文插图
  1. Z Z Z W W W的全连接mapping network f f f,高学习率会带来不稳定, λ ′ = 0.01 λ \lambda' = 0.01\lambda λ=0.01λ
  2. 输入改为常数,latent code用作style控制
  3. 自适应实例归一化(AdaIN)
  4. 通过加入噪声为图片添加随机细节
Style控制

8层全连接网络,每层channel都是512。每个AdaIN模块对应一个全连接层A,将 w w w转为 y = ( y s , y b ) y=(y_s,y_b) y=(ys,yb),进行实例归一化。

自适应实例归一化(AdaIN)

此前的风格迁移方法,一种网络只对应一种风格,速度很慢。基于AdaIN可以“self modulate” the generator快速实现任意图像风格的转换。
StyleGAN学习笔记_第3张图片

AdaIN style transfer architecture

L = L c + λ L s L c = ∥ f ( c ) − f ( t ) ∥ 2 L s = ∑ i = 1 L ∥ μ ( f i ( t ) ) − μ ( f i ( s ) ) ∥ 2 + ∑ i = 1 L ∥ σ ( f i ( t ) ) − σ ( f i ( s ) ) ∥ 2 \mathcal{L}=\mathcal{L}_{c}+\lambda \mathcal{L}_{s} \quad \mathcal{L}_{c}=\left\|f\left(c\right)-f\left(t\right)\right\|_{2} \\ \mathcal{L}_{s}=\sum_{i=1}^{L}\left\|\mu\left(f_{i}\left(t\right)\right)-\mu\left(f_{i}\left(s\right)\right)\right\|_{2}+\sum_{i=1}^{L}\left\|\sigma\left(f_{i}\left(t\right)\right)-\sigma\left(f_{i}\left(s\right)\right)\right\|_{2} \\ L=Lc+λLsLc=f(c)f(t)2Ls=i=1Lμ(fi(t))μ(fi(s))2+i=1Lσ(fi(t))σ(fi(s))2
AdaIN ⁡ ( x i , y ) = σ ( y ) ( x i − μ ( x i ) σ ( x i ) ) + μ ( y ) \operatorname{AdaIN}(x_i, y)=\sigma(y)\left(\frac{x_i-\mu(x_i)}{\sigma(x_i)}\right)+\mu(y) AdaIN(xi,y)=σ(y)(σ(xi)xiμ(xi))+μ(y)
特征图的均值和方差中带有图像的风格信息。所以在这一层中,特征图减去自己的均值除以方差,去掉自己的风格。再乘上新风格的方差加上均值,以实现转换的目的。与图中不同的是,StyleGAN的风格不是由图像的得到的,而是 w w w生成的。

样式混合,混合正则化

StyleGAN学习笔记_第4张图片
为了进一步鼓励样式进行本地化(减小不同层之间样式的相关性),作者采用混合正则化。运行两个潜码 z 1 z_1 z1 z 2 z_2 z2通过映射网络,并具有相应的 w 1 w_1 w1 w 2 w_2 w2控制样式,以便 w 1 w_1 w1交叉点之前应用, w 2 w_2 w2在交叉点之后应用。这种正则化技术可以防止网络假设相邻的样式是相关的

覆盖与粗糙空间分辨率相对应的图层样式( 4 2 − 8 2 4^2 - 8^2 4282),从源头复制高级属性,如姿势,通用发型,面部形状和眼镜,同时所有颜色(眼睛,头发,灯光)和保留目标的更精细的面部特征。 如果我们改为复制中间层( 1 6 2 − 3 2 2 16^2 - 32^2 162322)的样式,我们会继承较小比例的面部特征,发型,从源头打开/关闭的眼睛,同时保留来自目标的姿势,一般面部形状和眼镜。 最后,复制与精细分辨率( 6 4 2 − 102 4 2 64^2 - 1024^2 64210242)相对应的样式主要带来来自源的颜色方案和微结构。

随机变化

StyleGAN学习笔记_第5张图片
传统生成器,仅在网络开始部分输入随机向量。效率低,极易产生重复的模式。
添加噪声,增加图片丰富性,如(b)。但从标准差(c)可以看出,随机仅出现在头发和领子处,没有改变脸部高级特征。
由于噪声缺乏关联,很容易产生差异,所以无法用来控制整体特征。容易被判别器惩罚。
StyleGAN学习笔记_第6张图片
(a)噪音适用于所有层
(b)没有噪音,无法生成细节
(c)仅有精细层的噪音( 6 4 2 − 102 4 2 64^2 - 1024^2 64210242),大分辨率带来更多细节变化
(d)仅粗糙层的噪音( 4 2 − 3 2 2 4^2 - 32^2 42322),小分辨率细节的尺寸更大,很好理解

隐变量解耦

StyleGAN学习笔记_第7张图片
由于隐空间与图像特征之间的纠缠,对于隐空间(b)的插值会产生在生成图片中产生非线性的变化,出现(a)中不存在的特征。具有两个因素的示例(图像特征,例如,男性气质和头发长度)。(a)左上角空缺,组合几乎不存在(例如,长发男性)。(b)强制从Z到图像特征的映射变为弯曲,消除组合的可能性,以防止对无效组合进行采样。(c)然而,从 Z Z Z W W W的学习映射能够“消除”大部分翘曲。线性的映射对提升生成质量有益。

两种新的量化解耦的方法

其他量化解缠的指标需要编码器网络将输入图像映射到编码。这两种新方法都不需要编码器,所以对于任何数据集和生成器都是可计算的。

感知路径长度(Perceptual path length)

测量在潜在空间中执行插值时图像的变化程度,来了解隐空间到图像特征之间的纠缠度。
使用两个VGG16提取特征的加权差异来表示一对图像间的感知距离。
将潜在空间插值路径细分为线性段,每个段上的感知差异的总和就是感知路径长度
使用100000个样本,分别计算 z z z w w w的PPL。由于 z z z已经归一化,所以对 z z z使用球面插值 slerp,而对 w w w使用线性插值 lerp。评估为裁剪后仅包含面部的图像。
l Z = E [ 1 ϵ 2 d ( G ( slerp ⁡ ( z 1 , z 2 ; t ) ) , G ( slerp ⁡ ( z 1 , z 2 ; t + ϵ ) ) ) ] , \begin{aligned} l_{\mathcal{Z}}=\mathbb{E}\left[\frac{1}{\epsilon^{2}} d\left(G\left(\operatorname{slerp}\left(\mathbf{z}_{1}, \mathbf{z}_{2} ; t\right)\right)\right.\right.,\\ \left.\left.G\left(\operatorname{slerp}\left(\mathbf{z}_{1}, \mathbf{z}_{2} ; t+\epsilon\right)\right)\right)\right], \end{aligned} lZ=E[ϵ21d(G(slerp(z1,z2;t)),G(slerp(z1,z2;t+ϵ)))],
其中 z 1 , z 2 ∼ P ( z ) z_1,z_2\sim P(z) z1,z2P(z) t ∼ U ( 0 , 1 ) t\sim U(0,1) tU(0,1) G G G是生成器, ϵ = 1 0 − 4 {\epsilon} = 10 ^ { - 4 } ϵ=104 d d d为VGG测距。 d d d是自然二次所以除以 ϵ 2 {\epsilon^{2}} ϵ2抵消对细分粒度不必要依赖。
l W = E [ 1 ϵ 2 d ( g ( lerp ⁡ ( f ( z 1 ) , f ( z 2 ) ; t ) ) , g ( lerp ⁡ ( f ( z 1 ) , f ( z 2 ) ; t + ϵ ) ) ) ] , \begin{aligned} l_{\mathcal{W}}=\mathbb{E}\left[\frac{1}{\epsilon^{2}} d\left(g\left(\operatorname{lerp}\left({f(\mathbf{z}_{1})}, f(\mathbf{z}_{2}) ; t\right)\right)\right.\right.,\\ \left.\left.g\left(\operatorname{lerp}\left({f(\mathbf{z}_{1})}, f(\mathbf{z}_{2}); t+\epsilon\right)\right)\right)\right], \end{aligned} lW=E[ϵ21d(g(lerp(f(z1),f(z2);t)),g(lerp(f(z1),f(z2);t+ϵ)))],
StyleGAN学习笔记_第8张图片
从表格我们可以看出config E:增加噪声后PPL明显减小。Config B优于D作者认为全路径PPL略偏向 z z z。由于 w w w路径上的插值向量可能没有对应的 z z z,即没被训练过,从而生成差效果。
端点PPL,即 t ∈ { 0 , 1 } t \in \{0,1 \} t{0,1},config D优于B。
StyleGAN学习笔记_第9张图片
加入映射网络,FID和 w w w的PPL都更小了,并且深的映射网络带来更好结果。
在StyleGAN v2中,作者将PPL作为正则项加入到损失函数中。

线性可分性(linear separability)

如果隐空间与图像特征足够解耦,那么隐空间中存在线性超平面,可以二分类两种特征。
首先基于CelebA-HQ数据集,训练40种特征的分类器。然后用生成器生成200000张图像,用训练的分类器分类,去掉置信度最低的一半,得到隐变量和标签已知的100000张图像。对每个属性,用线性SVM拟合预测 z z z的类别,判断 z z z是否足够线性。线性关系用 X X X Y Y Y的分布差异衡量。
exp ⁡ ( ∑ i H ( Y i ∣ X i ) \operatorname { exp } ( \sum _ { i } H ( Y _ { i } | X _ { i } ) exp(iH(YiXi)
X X X为SVM预测的类别, Y Y Y为分类器预测的类别
从上表最右列可以看出,增加mapping network的深度确实有助于提高 w w w的线性可分性。映射网络对传统生成器有同样的提升,具备通用性。


总结

关键点:

  • 结合AdaIN模块
  • 使用中间隐变量w实现映射关系的解耦
  • 通过随机噪声进一步提升图像细节,丰富多样性

创新点:

  • 加入可通用的映射网络
  • 样式混合,使用两个中层隐变量生成一张图像,扩大 W W W的训练空间
  • 感知路径长度
  • 线性可分性

启发:

  • 损失函数、模型结构、隐变量分布、数据集,每一项对于生成式模型都很关键。
  • 解耦 - 让映射空间更线性的思想

参考

  • https://zhuanlan.zhihu.com/p/63230738
  • https://blog.csdn.net/weixin_43013761/article/details/100973679
  • https://blog.csdn.net/lynlindasy/article/details/89555201
  • http://www.gwylab.com/pdf/Note_StyleGAN.pdf

你可能感兴趣的:(生成对抗网络,深度学习,GAN,生成对抗网络)