Gan 和 StyleGAN 架构

1.1 组成部分:生成器和判别器

GAN利用Generator和Discriminator,可以完成很多匪夷所思的生成问题。在图像生成、语音转换、文本生成领域均占有很重要地位。它由两部分组成

Generator生成器,它是一个深度神经网络,输入一个低维vector,输出高维vector(图片或文本或语音)
Discriminator判别器,它也是一个深度神经网络,输入一个高维vector(图片或文本或语音),输出一个标量。标量越大,代表输入图片(或文本语音)越真实。
在这里插入图片描述

在这里插入图片描述

1.1.1对抗学习

生成器和判别器二者进行对抗学习,生成器不断迭代进化,努力生成假的图片,从而可以骗过判别器判别器也在不断迭代进化,努力识别越来越接近真实的假图片。通过二者对抗学习,最终生成器生成的假图片越来越像真实图片,而判别器越来越能区分和真实图片很接近的假图片。二者能力在迭代过程中,都可以得到大幅提升。
在这里插入图片描述

如上图所示,枯叶蝶可以视作生成器,鸟可以视作判别器。枯叶蝶不断进化,长得越来越像枯叶,从而可以骗过鸟,不被吃掉。而鸟在这个过程中也是不断进化的,从最初从颜色来区分真假,到从纹理区分,它也在学习如何区分真假枯叶。

1.1.2应用场景

GAN在实际中也大有用武之地。

商品评价系统中,生成器努力生成接近真实人类的评价,而判别器则努力鉴别真假图片。最终生成器可以用来自动生成高质量评论,而判别器则可以用来发现机器自动生成的评价。生成器和判别器两者都是很有用的。
图片生成。比如卡通人脸自动生成。利用GAN可以自动生成超过100万张不重复的高清卡通人脸
无监督图片风格转换。比如真实人脸转换为对应卡通人脸,向左看的人脸转换为向右看
文本转图片,或图片转文本。
语音增强、语音转换。比如语音去噪,将男性声音转换为女性声音等
NLP数据增强。通过GAN扩充高质量的文本样本,用作数据增强

StyleGAN 的前身——ProGAN
在这里插入图片描述

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

特别值得注意的是,上图 Generator 中的网络结构不是指的从 4x4 网络连接到 8x8 网 络,再连接到 16x16 网络依次输出,而是指的从 4x4 网络变化到 8x8 网络,再变化到 16x16 网络。也就是说,Generator 内部的网络只有一个,但是在训练过程中网络的结构是在动态变化的。事实上,前面那种依次连接的网络模型叫做 StackGAN,但是 StackGAN 不适合用来做超清图片生成,因为会特别慢。

不过,ProGAN 网络结构的动态变化是如何做到的呢?因为如果从 4×4 的输出直接变为 8×8 的输出的话,网络层数的突变会造成 GANs 原有参数失效,导致急剧不稳定,这会影响模型训练的效率。为了解决这一问题,PGGAN 提出了一种平滑过渡技术

在这里插入图片描述

如上图所示,当把生成器和判别器的分辨率加倍时,会平滑地增大新的层。我们以从16 × 16 像素的图片转换到 32 × 32 像素的图片为例。在转换(b)过程中,把在更高分辨 率上操作的层视为一个残缺块,权重 α 从 0 到 1 线性增长。当 α 为 0 的时候,相当于图(a),当 α 为 1 的时候,相当于图©。所以,在转换过程中,生成样本的像素,是从 16x16 到 32x32 转换的。同理,对真实样本也做了类似的平滑过渡,也就是,在这个阶段的某个 训练 batch,真实样本是:
在这里插入图片描述

上图中的 2× 和 0.5× 指利用最近邻卷积和平均池化分别对图片分辨率加倍和折半。
toRGB 表示将一个层中的特征向量投射到 RGB 颜色空间中,
fromRGB 正好是相反的过程; 这两个过程都是利用 1 × 1 卷积。
当训练判别器时,插入下采样后的真实图片去匹配网络中 的当前分辨率。在分辨率转换过程中,会在两张真实图片的分辨率之间插值,类似于将两个分辨率结合到一起用生成器输出。详细的过程可以参见 ProGAN 论文。 上述就是 ProGAN 的模型设计介绍了,接下来我们反思一下 ProGAN 有什么缺陷。由于 ProGAN 是逐级直接生成图片,我们没有对其增添控制,我们也就无法获知它在每一级上学 到的特征是什么,这就导致了它控制所生成图像的特定特征的能力非常有限。(即ProGAN 容易发生特征纠缠,则使用下面的映射网络Mapping Network)换句话说就是耦合性太强,这些特性是互相关联的,因此尝试调整一下输入,即使是一点儿,通常也会同时影响多个特性。 我们希望有一种更好的模型,能让我们控制住输出的图片是长什么样的,也就是在生成 图片过程中每一级的特征,要能够特定决定生成图片某些方面的表象,并且相互间的影响尽 可能小。于是,在 ProGAN 的基础上,StyleGAN 作出了进一步的改进与提升

StyleGAN 算法总体预览

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

StyleGAN 的网络结构包含两个部分,第一个是Mapping network,即下图 (b)中的左部分,由隐藏变量 z 生成 中间隐藏变量 w的过程,这个 w 就是用来控制生成图像的style,即风格,为什么要多此一举将 z 变成 w 呢,后面会详细讲到。 第二个是Synthesis network,它的作用是生成图像,创新之处在于给每一层子网络都喂了 A 和 BA 是由 w 转换得到的仿射变换,用于控制生成图像的风格B 是转换后的随机噪声,用于丰富生成图像的细节,即每个卷积层都能根据输入的A来调整"style",通过B来调整细节。整个网络结构还是保持了 PG-GAN (progressive growing GAN) 的结构。最后论文还提供了一个高清人脸数据集FFHQ。

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

1.2 StyleGAN 架构解读

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

1、粗糙的——分辨率不超过82,影响姿势、一般发型、面部形状等;
2、中等的——分辨率为162至322,影响更精细的面部特征、发型、眼睛的睁开或是闭合等;
3、高质的——分辨率为642到10242,影响颜色(眼睛、头发和皮肤)和微观特征;

然后,StyleGAN 就在 ProGAN 的生成器的基础上增添了很多附加模块以实现样式上更细微和精确的控制。

1.2.1 增加映射网络Mapping Network==》为输入向量的特征解缠提供一条学习的通路

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

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

1.添加 Mapping Network 的目标是将输入向量编码转为中间向量,并且中间向量后续会传给生成网络得到 18 个控制向量,使得该控制向量的不同元素能够控制不同的视觉特征

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

3.为何 Mapping Network 能够学习到特征解缠呢?简单来说,如果仅使用输入向量来控制视觉特征,能力是非常有限的,因此它必须遵循训练数据的概率密度。例如,如果黑头发 的人的图像在数据集中更常见,那么更多的输入值将会被映射到该特征上。因此,该模型无法将部分输入(向量中的元素)映射到特征上,这就会造成特征纠缠。然而,通过使用另一个神经网络,该模型可以生成一个不必遵循训练数据分布的向量,并且可以减少特征之间的相关性。

1.2.2 样式模块(AdaIN)==》使得精确控制样式信息,而保留图片的关键信息

在这里插入图片描述

StyleGAN 的第二点改进是,将特征解缠后的中间向量W′变换为样式控制向量,从而参与影响生成器的生成过程

生成器由于从 4x4,变换到 8x8,并最终变换到 1024x1024,所以它由 9 个生成阶段组成,而每个阶段都会受两个控制向量(A)对其施加影响,其中一个控制向量在 Upsample之后对其影响一次,另外一个控制向量在 Convolution 之后对其影响一次,影响的方式都采用 AdaIN(自适应实例归一化)。因此,中间向量W′总共被变换成 18 个控制向量(A)传给生成器

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

Xi 表示每个特征图

1.2.3 删除传统输入

在这里插入图片描述

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

1.2.4 随机变化(类似于 AdaIN 机制的方式添加噪声)

在这里插入图片描述

人们的脸上有许多小的特征,可以看作是随机的,例如:雀斑、发髻线的准确位置、皱纹、使图像更逼真的特征以及各种增加输出的变化。 将这些小特征插入 GAN 图像的常用方法是 在输入向量中添加随机噪声 (即 通过在每次卷积后添加噪声 )。为了控制噪声仅影响图片样式上细微的变化, StyleGAN 采用类似于 AdaIN 机制的方式添加噪声(噪声输入是由不相关的高斯噪声组成的单通道数据,它们被馈送到生成网络的每一层)。 即在 AdaIN 模块之前向每个通道添加一个缩放过的噪声,并稍微改变其操作的分辨率级别特征的视觉表达方式。 加入噪声后的生成人脸往往更 加逼真与多样 。
风格影响的是整体(改变姿势、身份等),噪音影响无关紧要的随机变化(头发、胡须等)。

1.2.5 样式混合(通过混合正则化)

在这里插入图片描述

为了进一步明确风格控制,StyleGAN采用混合正则化手段,即在训练过程中使用两个随机潜码W而不仅仅是一个。在生成图像时,只需在 synthesis network 中随机选一个中间的交叉点,把一个潜码切换到另一个潜码(称为风格混合)即可。具体来说,通过映射网络运行两个潜码z1和z2,得到相应的W1和W2(分别代表两种不同的 style)控制风格,然后W1被用在网络所被选择的位置点之前,W2在该位置点之后使用。

StyleGAN 生成器在合成网络的每个级别中使用了中间向量,这有可能导致网络学习到这些级别是相关的。为了降低相关性,模型随机选择两个输入向量,并为它们生成了中间向量𝑊 ′ 。然后,它用第一个输入向量来训练一些网络级别,然后(在一个随机点中)切换到另 一个输入向量来训练其余的级别。随机的切换确保了网络不会学习并依赖于一个合成网络级 别之间的相关性。 虽然它并不会提高所有数据集上的模型性能,但是这个概念有一个非常有趣的副作用——它能够以一种连贯的方式来组合多个图像。 该模型生成了两个图像 A 和 B(第一行的第一张图片和第二行的第一张图片),然后通过从 A 中提取低级别的特征并从 B 中提取其余特征再组合这两个图像,这样能生成出混合了 A 和 B 的样式特征的新人脸 。
根据交叉点选取位置的不同,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。

1.2.6 在 W 中的截断技巧

Truncation Trick 不是StyleGAN提出来的,它很早就在GAN里用于图像生成了。从数据分布来说,低概率密度的数据在网络中的表达能力很弱,直观理解就是,低概率密度的数据出现次数少,能影响网络梯度的机会也少,但并不代表低概率密度的数据不重要。可以提高数据分布的整体密度,把分布稀疏的数据点都聚拢到一起,类似于PCA,做法很简单,首先找到数据中的一个平均点,然后计算其他所有点到这个平均点的距离,对每个距离按照统一标准进行压缩,这样就能将数据点都聚拢了**(相当于截断了中间向量𝑊′,迫使它保持接近“平均”的中间向量𝑊′ 𝑎𝑣𝑔),但是又不会改变点与点之间的距离关系。**
在这里插入图片描述

在生成模型中的一个挑战,是处理在训练数据中表现不佳的地方。这导致了生成器无法学习和创建与它们类似的图像(相反,它会创建效果不好的图像)。为了避免生成较差的图像, StyleGAN 截断了中间向量𝑊′,迫使它保持接近“平均”的中间向量 (上图左 4)。 对模型进行训练之后,通过选择多个随机的输入,用映射网络生成它们的中间向量,并 计算这些向量的平均值,从而生成“中间向量”的平均值 𝑊 ′ 𝑎𝑣𝑔 。 当生成新的图像时,不用直接使用映射网络(Mapping NetWork)的输出,而是将值𝑊′转换为𝑊′ 𝑛𝑒𝑤 = 𝑊′ 𝑎𝑣𝑔 +𝞧(𝑊′ − 𝑊′ 𝑎𝑣𝑔) ,其中 𝞧 的值定义了图像与“平均”图像的差异量(以及输出的多样性)。有趣的是,在仿射转换块之前,通过对每个级别使用不同的𝞧 ,模型可以控制每个级别上的特征值与平均特征值的差异量。

1.2.7 微调超参数

StyleGAN 的另外一个改进措施是更新几个网络超参数,例如训练持续时间和损失函数, 并将图片最接近尺度的缩放方式替换为双线性采样。 综上,加入了一系列附加模块后得到的 StyleGAN 最终网络模型结构图如下:
在这里插入图片描述

上述就是 StyleGAN 的完整模型的介绍了。不得不说,不论是在理论方法上,还是工程实践上,StyleGAN 都是一篇具有突破性的论文,它不仅可以生成高质量的和逼真的图像, 而且还可以对生成的图像进行较好的控制和理解。

2. 量化解缠结的方法

2.1 感知路径长度

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

补充一下,我们可以通过训练好的生成模型得到给定图像的latent code,假设我们有一个在某个数据集上训练好的styleGAN模型,现在要找到一张图像 x 在这个模型中的latent code,设初始latent code 是 z,生成的初始图像是p,通过 p 和 x 之间的差距 设置损失函数,通过损失不断去迭代 z,最后得到图像x的latent code
在这里插入图片描述

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

g 表示生成器,d 表示判别器, 表示mapping netwrok,(Z1)表示由latent code Z1得到的中间隐藏码W,间点,lerp 表示线性插值 (linear interpolation),即在 latent space上进行插值。

潜在空间向量的插值可能会在图像中产生令人意想不到的非线性变化。例如,插值端点中不存在的图像元素可能会出现在线性插值路径的中间,这就表明潜在空间有纠缠现象、因子未能正确分离。为了量化这种现象,可以计算在潜在空间中执行插值时图像经历的变化程度。直观地,纠缠程度较小的潜在空间应比纠缠程度较高的潜在空间在感知上过渡更自然平滑。

作为度量标准的基础,使用基于感知的成对图像距离,该距离是通过计算两个VGG16的嵌入特征之间的距离得出。如果将潜在空间插值路径细分为线性段,则可以将这些路径段的距离之和定义为总感知长度。感知路径长度的自然定义是无限细分下所有路径段的极限,但实际上使用较小的细分来进行近似计算。

因此,在所有可能的端点上,潜在空间Z中的平均感知路径长度如下所示,其中t〜U(0; 1),G是生成器,而d(·;·)评估结果图像之间的感知距离,在这里表示球面插值,这是在归一化输入潜伏中进行插值的最合适方法空间。在人脸数据上,为专注于面部特征而不是背景,将生成的图像裁剪为仅包含脸部。指标d是二次方,。

在这里插入图片描述

计算W中的平均感知路径长度以类似的方式执行,唯一的区别是插值发生在W空间。因为W中的向量未归一化,使用线性插值(lerp)。表3表明,该全路径(细分距离段)长度实际上对带有噪声输入的StyleGAN来说更短,这表明W比Z更线性可分一些。如果W确实是Z的一个更解纠缠、“展平”的映射(Z可能包含训练数据分布不存在的因子,生成器会生成不合理的数据),因此可预期如果将测度限制为路径终点,对变小,而不受影响。如表3所示,实验也证实了这一点。

表4显示了映射网络如何影响路径长度:无论是传统的和基于风格的生成器,映射网络都能让它们变得更好。

5.2 线性可分性

如果潜在空间的“纠缠”解开,则应该有可能找到对应于各个变化因子的方向向量。StyleGAN的作者们也提出了另一个度量标准,通过测量在潜在空间的点可由线性超平面分为两个不同集合的程度来进行量化,以便每个集合都对应于图像的某种二分类属性。

为得到有标签的生成图像,针对许多二分类类别训练了辅助分类网络,例如男性和女性面孔。其中,分类器与判别器具有相同的架构,并使用CELEBA-HQ数据集进行训练,该数据集保留了原始CelebA数据集中的40个类别属性。为了测量一个类别属性的可分离性,在z〜P(z)上采样通过GAN生成200,000张图像,并用辅助分类网络对其进行分类。然后,根据分类器的置信度对样本进行排序,并去除最低置信度的一半,从而产生100,000个带标记的潜在空间向量。

对于每个属性,使用线性SVM来基于潜在空间点(传统的z和基于样式的w)来预测标签。然后,计算条件熵H(Y|X),其中X是SVM预测的类,Y是预训练分类器确定的类;它告诉我们确定样本的真实类别还需要多少其他信息,较低的值表明对应的变化因子具有一致的潜在空间方向。将最终的可分离性得分计算为,其中i列举了40个属性。与 inception scor相似,幂运算将值从对数域扩展到线性域,以便于比较。表3和表4表明W始终比Z具有更好的可分离性,即表明纠缠程度较小。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值