StyleGAN 1.0

论文:A Style-Based Generator Architecture for Generative Adversarial Networks

概述

StyleGAN中的“Style”是指数据集中人脸的主要属性,比如人物的姿态等信息,而不是风格转换中的图像风格,这里Style是指人脸的风格,包括了脸型上面的表情、人脸朝向、发型等等,还包括纹理细节上的人脸肤色、人脸光照等方方面面。

StyleGAN 用风格(style)来影响人脸的姿态、身份特征等,用噪声 ( noise ) 来影响头发丝、皱纹、肤色等细节部分。

模型架构

StyleGAN首先重点关注了ProGAN的生成器网络,它发现,渐进层的一个潜在的好处是,如果使用得当,它们能够控制图像的不同视觉特征。层和分辨率越低,它所影响的特征就越粗糙。简要将这些特征分为三种类型:

  1、粗糙的——分辨率不超过8^2,影响姿势、一般发型、面部形状等;

  2、中等的——分辨率为16^2至32^2,影响更精细的面部特征、发型、眼睛的睁开或是闭合等;

  3、高质的——分辨率为64^2到1024^2,影响颜色(眼睛、头发和皮肤)和微观特征;

StyleGAN 的网络结构包含两个部分,第一个是Mapping network,即下图 (b)中的左部分,由隐藏变量 z 生成 中间隐藏变量 w的过程,这个 w 就是用来控制生成图像的style,即风格;第二个是Synthesis network,它的作用是生成图像,创新之处在于给每一层子网络都喂了 A 和 B,A 是由 w 转换得到的仿射变换,用于控制生成图像的风格,B 是转换后的随机噪声,用于丰富生成图像的细节,即每个卷积层都能根据输入的A来调整"style"。整个网络结构还是保持了 PG-GAN (progressive growing GAN) 的结构。

此外,传统的GAN网络输入是一个随机变量或者隐藏变量 z,但是StyleGAN 将 z 单独用 mapping网络将z变换成w,再将w投喂给 Synthesis network的每一层,因此Synthesis network中最开始的输入变成了常数张量,见下图b中的Const 4x4x512。

Mapping network --- latent code-

Mapping network 要做的事就是对隐藏空间(latent space)进行解耦

为了更好的对数据进行分类或生成,需要对数据的特征进行表示,但是数据有很多特征,这些特征之间相互关联,耦合性较高,导致模型很难弄清楚它们之间的关联,使得学习效率低下,因此需要寻找到这些表面特征之下隐藏的深层次的关系,将这些关系进行解耦,得到的隐藏特征,即latent code。由 latent code组成的空间就是 latent space。

Mapping network由8个全连接层组成,通过一系列仿射变换,由 z 得到 w,w定制化为风格y =(ys,yb),它们在接下来的生成网络g中每个卷积层之后被用于控制自适应实例归一化(AdaIN)。结合 AdaIN (adaptive instance normalization) 风格变换方法:

最后,通过对生成器引入噪声输入,提供了一种生成随机(多样性)细节的方法。噪声输入是由不相关的高斯噪声组成的单通道数据,它们被馈送到生成网络的每一层。

StyleGAN的第一点改进是,给Generator的输入加上了由8个全连接层组成的Mapping Network,并且 Mapping Network 的输出𝑊′与输入层(512×1)的大小相同。

为 何要加 Mapping Network 呢?
因为如果不加这个 Mapping Network 的话,后续得到的 18 个控制向量之间会存在特征纠缠的现象——比如说我们想调节 8*8 分辨率上的控制向量(假 设它能控制人脸生成的角度),但是我们会发现 32*32 分辨率上的控制内容(譬如肤色)也 被改变了,这个就叫做特征纠缠。所以 Mapping Network 的作用就是为输入向量的特征解 缠提供一条学习的通路。

样式模块AdaIN

StyleGAN 的第二点改进是,将特征解缠后的中间向量𝑊′变换为样式控制向量,从而参 与影响生成器的生成过程。 生成器由于从 4*4,变换到 8*8,并最终变换到 1024*1024,所以它由 9 个生成阶段组 成,而每个阶段都会受两个控制向量(A)对其施加影响,其中一个控制向量在 Upsample 之后对其影响一次,另外一个控制向量在 Convolution 之后对其影响一次,影响的方式都采 用 AdaIN(自适应实例归一化)。

🙆AdaIN 的具体实现过程如上右图所示:将𝑊′通过一个可学习的仿射变换(A,实 际上是一个全连接层)扩变为放缩因子y𝑠,𝑖与偏差因子y𝑏,𝑖,这两个因子会与标准化之后的卷 积输出做一个加权求和,就完成了一次𝑊′影响原始输出x𝑖的过程。而这种影响方式能够实现 样式控制,主要是因为它让𝑊′(即变换后的y𝑠,𝑖与y𝑏,𝑖)影响图片的全局信息(注意标准化抹 去了对图片局部信息的可见性),而保留生成人脸的关键信息由上采样层和卷积层来决定, 因此𝑊′只能够影响到图片的样式信息。

既然 StyleGAN 生成图像的特征是由𝑊′和 AdaIN 控制的,那么生成器的初始输入可以被忽略,并用常量值替代。这样做的理由是,首先可以降低由于初始输入取值不当而生成出 些不正常的照片的概率(这在 GANs 中非常常见),另一个好处是它有助于减少特征纠缠, 对于网络在只使用𝑊′不依赖于纠缠输入向量的情况下更容易学习。

Mapping

我们一般使用服从均匀分布或者高斯分布的噪声作为网络的输入进行图像生成,但实际情况中,各个属性构成的特征空间并不是这样的,他们往往存在一定的先验,例如文中所列举的例子:长头发和男子气概往往不会同时出现,如图(a)中,左上角则表示男子气概和长头发同时存在的分布空缺;mapping network则学到一种非线性变换,将原本均匀的特征空间扭曲变形,使其接近真实情况。

latent space interpolations

latent space interpolations 不是StyleGAN提到的,但在多篇paper中有提到,如下图的椅子,左边是比较宽的椅子,右边是比较窄的椅子,中间的椅子是这两种椅子特征的线性组合。

潜在空间向量的插值可能会在图像中产生令人惊讶的非线性变化。例如,任一端点中不存在的特征可能会出现在线性插值路径的中间。这是潜在空间纠缠在一起并且变异因素没有正确分离的迹象。

Style mixing

下图中 第一行是 source B, 第一列是source A,source A 和 source B的每张图片由各自相应的latent code 生成,剩余的图片是对 source A 和 souce B 风格的组合。 Style mixing 的本意是去找到控制不同style的latent code的区域位置,具体做法是将两个不同的latent code z1 和 z2 输入到 mappint network 中,分别得到 w1 和 w2 ,分别代表两种不同的 style,然后在 synthesis network 中随机选一个中间的交叉点,交叉点之前的部分使用 w1 ,交叉点之后的部分使用 w2 ,生成的图像应该同时具有 source A 和 source B 的特征,称为 style mixing。

根据交叉点选取位置的不同,style组合的结果也不同。下图中分为三个部分,第一部分是 Coarse styles from source B,分辨率(4x4 - 8x8)的网络部分使用B的style,其余使用A的style, 可以看到图像的身份特征随souce B,但是肤色等细节随source A;第二部分是 Middle styles from source B,分辨率(16x16 - 32x32)的网络部分使用B的style,这个时候生成图像不再具有B的身份特性,发型、姿态等都发生改变,但是肤色依然随A;第三部分 Fine from B,分辨率(64x64 - 1024x1024)的网络部分使用B的style,此时身份特征随A,肤色随B。由此可以大致推断,低分辨率的style 控制姿态、脸型、配件 比如眼镜、发型等style,高分辨率的style控制肤色、头发颜色、背景色等style。

Stochastic variation

人像中有许多方面的细节可被认为是随机变化着的,例如头发、雀斑或皮肤毛孔等细节。实际上,只要这些细节遵循着某种我们认为正确的“分布”,那么就是合理的。

传统的生成器一般有着唯一输入,而我们期望可以生成在图像空间上有一些随机的(细节)变化。这并不简单,以往方法总很难实现。StyleGAN的架构通过在每次卷积后添加噪声来解决这些问题。

低分辨率时得到粗糙的随机细节、高分辨率时得到较为精细的随机细节。

传统生成器,仅在网络 开始部分输入随机向量。效率低,极易产生重复的模式。
添加噪声,增加图片丰富性,如(b)。但从标准差(c)可以看出,随机仅出现在头发和领子处,没有改变脸部高级特征。
由于噪声缺乏关联,很容易产生差异,所以无法用来控制整体特征。容易被判别器惩罚。

(a)噪音适用于所有层

(b)没有噪音,无法生成细节

(c)仅有精细层的噪音( 642−10242 ),大分辨率带来更多细节变化

(d)仅粗糙层的噪音( 42−322 ),小分辨率细节的尺寸更大,很好理解

感知路径长度(Perceptual path length)

测量在潜在空间中执行插值时图像的 变化程度,来了解隐空间到图像特征之间的纠缠度。
使用两个VGG16提取特征的 加权差异来表示一对图像间的感知距离。
将潜在空间插值路径细分为线性段,每个段上的感知差异的总和就是 感知路径长度

图像生成其实是学习从一个分布到目标分布的迁移过程,如下图,已知input latent code 是z1,或者说白色的狗所表示的latent code是z1,目标图像是黑色的狗,黑狗图像的latent code 是 z2,图中蓝色的虚线是z1 到 z2 最快的路径,绿色的曲线是我们不希望的路径,在蓝色的路径中的中间图像应该是z1 和 z2 的组合,假设这种组合是线性的(当特征充分解耦的时候),蓝色路径上生成的中间图像也是狗( 符合 latent-space interpolation),但是绿色的曲线由于偏离路径太多,生成的中间图像可能是其他的,比如图上的卧室,这是我们不希望的结果。

Perceptual path length 是一个指标,用于判断生成器是否选择了最近的路线(比如上图蓝色虚线),用训练过程中相邻时间节点上的两个生成图像的距离来表示,公式如下:

g 表示生成器,d 表示判别器,f 表示mapping netwrok, f(z1) 表示由latent code z1 得到的中间隐藏码 w , w∈W , t 表示某一个时间点,t∈(0,1) , t+ 表示下一个时间点,slerp 表示线性插值 (linear interpolation),即在 latent space上进行插值。

loss

stylegan V1 V2都使用的是SoftPlus loss function,并使用了R1 penalty。

Softplus 是ReLU的光滑近似,可以有效的对输出都为正值的网络进行约束。随着β的增加,Softplus与ReLU越来越接近。

R1 Regularization是对大梯度更新的惩罚,这里对Discriminator对于真实数据的梯度进行惩罚。

Truncation Trick - 在 W 中的截断技巧

Truncation Trick 不是StyleGAN提出来的,它很早就在GAN里用于图像生成了.

从数据分布来说,低概率密度的数据在网络中的表达能力很弱,直观理解就是,低概率密度的数据出现次数少,能影响网络梯度的机会也少,但并不代表低概率密度的数据不重要。可以提高数据分布的整体密度,把分布稀疏的数据点都聚拢到一起,类似于PCA,做法很简单,首先找到数据中的一个平均点,然后计算其他所有点到这个平均点的距离,对每个距离按照统一标准进行压缩,这样就能将数据点都聚拢了,但是又不会改变点与点之间的距离关系。

Truncation trick的目的是为了得到更高的平均FID值。由于训练集必定会存在一定程度的样本分布不均匀,低概率密度(样本量少的数据)没有得到很好的训练,因此当w刚好处于低概率密度时,生成的图像质量很差,为了避免生成这些影响FID的图像,stylegan使用了truncation trick,其实现方式如下:

  1. 计算平均latent code

  1. 通过style scale控制当前w与平均w的占比

理解机器学习中的潜在空间

“潜在空间”的概念很重要,因为它的用途是“深度学习”的核心-学习数据的特征并简化数据表示形式以寻找模式。深度神经网络即深度学习是一种Representation Learning, 表征学习。顾名思义,学习数据表征。我们的学习过程已经不是靠一些分布来拟合给定数据的分布, 而是通过空间转换来学习数据特征。 从什么空间到什么空间呢? 从数据分布空间到任务的目标分布空间。

减少数据的维数会使相似图像在空间上“更紧密”在一起?相似是什么意思?

如果我们查看三个图像,其中两个是椅子,一个是桌子,我们很容易地说这两个椅子图像最相似,而桌子与任何一个椅子图像的区别最大。但是,什么使这两个椅子图像“更相似”?椅子具有明显的特征(即靠背,无抽屉,两腿之间的连接)。通过学习边缘,角度等的图案,这些都可以被我们的模型“理解”。如所解释的,这样的特征被包装在数据的潜在空间表示中。因此,随着维数的减少,与每个图像截然不同的“外部”信息(即椅子颜色)从我们的潜在空间表示中被“去除”,因为只有每个图像的最重要特征都存储在潜在空间表示中。 结果,随着我们减小尺寸,两把椅子的表示变得越来越不清晰,越来越相似。如果我们想象它们在空间中,它们将“紧密”在一起。

潜在空间是流形学习(表示学习的一个子领域)中必不可少的概念。数据科学中的流形可以理解为在某种程度上“相似”的数据组或子集。一旦我们的数据已在潜在空间中表示出来,就可以发现这些相似性,通常在高维空间中是难以察觉的或模糊不清的。

以下面的“瑞士卷”为例。

在3D中,我们知道存在类似数据点的组,但是用更高维度的数据来描绘此类组要困难得多。

通过将数据的维数减少为2D(在这种情况下可以视为“潜在空间”表示),我们可以更轻松地区分数据集中的流形(相似数据组)。

自编码器和生成模型

自编码器是操纵潜在空间中数据“紧密度”的一种常见类型的深度学习模型,它是一种充当身份函数的神经网络。 换句话说,自动编码器会学习输出任何输入的内容。

你可能会想知道,为什么在世界上我们需要一个能够做到这一点的模型? 如果它输出的只是它自己,那似乎就没用了……尽管这种推论是正确的,但我们并不太在乎模型的输出。 我们更关心模型在此过程中学到的内容当我们强制模型成为身份函数时,我们将其强制以压缩的表示形式存储所有数据的相关特征,以便以压缩的形式提供足够的信息,以使模型可以“准确地”重建模型。因为此压缩表示形式是我们的潜在空间表示形式(上图中的红色块)。

在潜在空间上插值是什么意思?

假设我已将上一节中的椅子图像压缩为以下2D向量[0.4,0.5]和[0.45,0.45]。 假设办公桌被压缩为[0.6,0.75]。 如果要在潜在空间上进行插值,则需要对“椅子”群集和“办公桌”群集之间的潜在空间中的点进行采样。我们可以将这些采样的2D向量输入模型的解码器

  • 潜在空间只是压缩数据的表示,其中相似的数据点在空间上更靠近在一起。

  • 潜在空间对于学习数据功能和查找更简单的数据表示形式以进行分析很有用。

  • 我们可以通过分析潜在空间中的数据(通过流形,聚类等)来了解数据点之间的模式或结构相似性。

  • 我们可以在潜在空间内插值数据,并使用模型的解码器来“生成”数据样本。

  • 我们可以使用t-SNE和LLE之类的算法来可视化潜在空间,该算法将我们的潜在空间表示形式转换为2D或3D。

AdaIN

论文:Arbitrary Style Transfer in Real-time with Adaptive Instance Normalization

在论文Image Style Transfer Using Convolutional Neural Networks中使用到的方法虽然可以实现任意风格的迁移,但是在这期间需要一个缓慢的迭代过程来更新生成的图像。后续的方法要么难以实现任意风格的迁移(只能在特定的风格样式集上生效),要么依旧生成图像缓慢。

此前的风格迁移方法,一种网络只对应一种风格,速度很慢。基于AdaIN可以"self modulate" the generator快速实现任意图像风格的转换。实现了任意风格实时转换。

特征图的均值和方差中带有图像的风格信息。所以在这一层中,特征图减去自己的均值除以方差,去掉自己的风格。再乘上新风格的方差加上均值,以实现转换的目的。与图中不同的是,StyleGAN的风格不是由图像的得到的,而是w生成的。

IN通过将特征统计量标准化来实现一种风格的标准化。
在之前的工作中,Gatys等人[2]通过匹配特征值的Gram矩阵来进行风格转换,然而最近Li等人[3]发现匹配其他统计数据(例如特征的均值和方差)对于风格转换也是有效的。

上图是该算法的流程图,VGG 和 AdaIN 是不需要训练的,真正需要训练的只有解码器。两张 feature map 输入,调整内容图的均值和标准差以适应风格的 feature map。解码器根据变换后的 feature map 重建图像,通过训练解码器,使重建出来的图像接近真实图像。AdaIN中没有可学习的仿射参数,即仿射参数不是通过学习得到。AdaIN接收两个信息源:内容输入x 和风格输入y 将x 的通道级(channel-wise)均值和标准差匹配到y的通道级均值和标准差上。

StyleGAN 的前身 - ProGAN

首先通过学习即使在低分辨率图像中也可以 显示的基本特征,来创建图像的基本部分,并且随着分辨率的提高和时间的推移,学习越来 越多的细节。低分辨率图像的训练不仅简单、快速,而且有助于更高级别的训练,因此,整 体的训练也就更快。

特别值得注意的是,上图 Generator 中的网络结构不是指的从 4*4 网络连接到 8*8 网 络,再连接到 16*16 网络依次输出,而是指的从 4*4 网络变化到 8*8 网络,再变化到 16*16 网络。也就是说,Generator 内部的网络只有一个,但是在训练过程中网络的结构是在动态 变化的。

由于 ProGAN 是逐级直接生成图片,我们没有对其增添控制,我们也就无法获知它在每一级上学 到的特征是什么,这就导致了它控制所生成图像的特定特征的能力非常有限。换句话说,这 些特性是互相关联的,因此尝试调整一下输入,即使是一点儿,通常也会同时影响多个特性。

Total

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值