生成对抗网络(GAN)近年来一直是生成内容的首选机器学习技术。它们似乎能够将随机输入神奇地转化为高度详细的输出,在图像生成、音乐创作甚至药物发现方面找到了应用。
StyleGAN 是一种真正大大推动了GAN领域发展的GAN类型。2018年Karras等人发表的介绍StyleGAN的论文《基于风格的生成对抗网络生成器架构》(A style-based generator architecture for generative adversarial networks)时,GAN还需要大量的正则化,无法产生如今大家熟知的那种惊艳效果。
在这篇文章中,我们将深入了解StyleGAN的架构。首先,我们将介绍经典GAN的高层架构,以便之后介绍StyleGAN的高层架构并进行比较。这将有助于我们了解高层次的差异,并揭示StyleGAN与当时流行的方法相比的革命性不同之处。然后,我们将逐一分析StyleGAN的每个组件,并详细讨论。这样,你还将了解具体的细节,并了解每个组件的作用。
准备好了没?走啦!
经典GAN简述一下在我们开始讨论StyleGAN之前,先来看看经典的生成对抗网络(Generative Adversarial Network)的高层架构。如下所示,它主要由两个部分组成——生成器,负责生成假图;判别器,用来区分假图和真图。
判别器是通过真实图像训练的,这些图像具有特定的统计数据分布——即 数据分布。生成器从某种分布——也称为 潜在 空间,因为在机器学习领域,“潜在空间”是一个常用的术语——中取样,并将其转换成假图像,因为经过训练后,它能生成结构类似于数据分布的样本。
无论是真实的还是伪造的图像,在训练过程中都会输入到判别器中,之后计算一个损失值。两个模型都会根据这个损失值进行调整。一段时间后,判别器将越来越难以区分假图像和真图像,因为生成器将能够生成越来越逼真的图像。同样地,判别器也会变得越来越强大,因为它会发现并利用数据中的独特模式。
换句话说,这种情况可以被视为造假者与鉴定者之间的对抗,造假者变得越来越擅长,直到鉴定者已经无法分辨假图和真图。这时生成器已准备好进入现实世界:其潜在分布几乎与数据分布一致,并能够独立生成逼真的图像。
当2014年第一篇关于GAN的论文出现时,经典的GAN确实是一个重大的突破。在“生成对抗网络”中,Goodfellow等人(2014)介绍了上述讨论的训练流程。然而很快大家发现经典的GAN训练存在一些难题——正如Karras等人(2018)所指出的一样。这里要介绍的是StyleGAN解决了三个主要问题。
- 生成器作为黑盒在运行,即其内部机制不透明。在Karras等人发表论文之前,经典的GAN的潜在空间还很少被理解。
- GAN必须进行严格的正则化。生成器和判别器之间的博弈非常微妙——结果通常是其中一个在训练早期就压倒了另一个。一旦这种情况发生,另一个就无法恢复,预期也无法实现。必须应用严格的正则化措施来解决这一问题。
- 对图像合成几乎没有控制。一个理想的潜在空间应当有一定的结构。换句话说,如果我选择一个样本并稍微移动一下,生成的图像至少应该与我选的样本图像相似。而且这种变化应当在不同类型的生成器之间保持一致。但实际情况并非如此简单。
我们现在来看一下StyleGAN。换句话说,StyleGAN并不是提供生成的基础,而是提供了一个控制器,可以用来控制能够生成的内容。与其从一个潜在向量空间构建整个图像,它利用潜在向量空间来操控合成过程。相比之下,StyleGAN更智能地将杂乱无章的细节(如头发的位置)与更为固定的成分(如生成的人物是否戴眼镜)分离开来。我们现在简单了解一下StyleGAN。
StyleGAN:一个高层次简介下面的图展示的是StyleGAN的高层架构,正如Karras等人在2018年的论文中所述。
这里有两个垂直区域。
- 映射网络,称为 f ,位于左图中。它将归一化的潜在向量 z ε Z 映射为中间潜在空间 W 中的另一个向量 w。这个映射网络是一个简单的全连接前馈层集合。
- 合成网络,称为 g ,位于右图中。它使用 w 来生成一种“风格”,该风格控制图像合成过程。它从一个常量开始,该常量的尺寸为 4 x 4 x 512。生成缩放后的噪声样本(B)并将其添加到该常量张量中。随后,通过自适应实例归一化(AdaIN)操作将该风格(A)添加到其中,然后应用卷积操作。随后再进行一次噪声添加及基于 AdaIN 的风格操作。最后生成一个分辨率为 4x4 的图像。在下一个阶段,图像被上采样,重复相同的操作,最终分辨率变为 8x8。此过程重复直至图像分辨率达到 1024x1024。
很明显,经典GAN与StyleGAN之间已经存在明显的差异。在图像合成过程中,不再直接使用隐变量z。更令人惊讶的是,连StyleGAN论文的作者都感到惊讶的是,从一个常量张量开始也是可行的,并且甚至取得了很好的效果。
z 不再作为图像合成的基础,现在它用来生成调控合成过程的样式。
如果你没有完全明白上面的内容,也不要担心。这只是一个高度概括的总结,只强调了高层次的内容。如果你想深入了解StyleGAN的细节,我们现在就来仔细看看具体的方面。不过,如果你对GAN的基本概念,比如“潜在空间”或“潜在向量”感到困惑,建议先读一下这篇关于GAN的介绍文章链接。
下图为StyleGAN架构,引文自Karras et al. (2018)
更深入地了解StyleGAN的更多细节我们现在将更详细地研究映射网络和合成网络及其各自组件。这让我们更深入地了解这种StyleGAN是如何运作的。
映射网 f注:f为变量名。我们从映射网络(也称为 f)开始。它从原始潜在分布中抽取一个潜在向量 z,并将 z 映射为中间潜在向量 w。该映射通过神经网络中的多个全连接层实现。
采样隐变量z
在每次前向传播——不论是训练还是推理——隐变量向量z都从原始隐变量分布中采样。
StyleGAN中通常使用标准正态分布来映射潜在向量z。这在GAN抽样中很常见。当涉及到GAN抽样时,这是一个常用的分布。
根据这篇论文,它的潜在特征空间是512维的(Karras et al., 2018)。
潜在向量的归一化
神经网络在输入未进行归一化或甚至更好的标准化时,经常会表现出较差的性能。通过归一化,可以将向量准备好以供输入。最小-最大归一化是一个选项。标准化也是一个话题,但将另作讨论。
如果你在你的StyleGAN实现里用到了标准正态分布,你可能根本不需要做这一步归一化——因为你的输入可能已经具备了零均值和单位方差。不过,保留这一步也不会带来什么不利影响。
一系列全连接的前馈层用于生成中间潜在向量w
您的(可能已经归一化的)采样潜在向量 z”现已准备就绪,可以输入了。它被送入实际的映射网络,该网络是一个具有8个可训练的全连接(或称为密集dense)层的神经网络,也就是常说的多层感知机(MLP)。它生成另一个向量,即中间潜在向量 w。这个潜在向量 w 将被合成网络用来生成输出图像。
这种映射是非线性的,意味着每个全连接层都有一个激活函数,这些激活函数常用的有ReLU或LeakyReLU。
作者提供图片
中间潜在向量 w 同样是 512 维的(Karras 等人,2018)。
你现在可能要问:为什么我们需要这样的映射?
为此,我们需要看一下一个叫做纠缠(与量子物理无关!)的概念。当它纠缠时,它……
纠缠在一起或卡住。
当你在谷歌搜索“定义纠缠”时
如果潜在空间是解纠缠的,它将由线性子空间组成(Karras等,2018)。更通俗的说法是,这意味着潜在空间的某些维度分别控制着图像的特定方面。
例如,如果我们512维的潜在空间 Z 完全解耦,并且被用于训练脸部的GAN中,比如,第1维控制眼镜,第2维控制头发,第3维控制脸形等。只需调整某一维度,就能对某一部分进行完全控制,生成所需的图像就会变得非常简单。
不幸的是,GANs通常不具备解耦的隐空间。我们之前也讨论过,经典的GAN让机器学习工程师对隐空间几乎没有控制权。换句话说,隐空间是纠缠在一起的。
通过映射网络将原始采样的潜在向量 z 转换为中间潜在分布 W 中的中间向量 w,可以确保合成过程中的采样不是从一个固定的分布(例如具有所有特性和独特性的标准正态分布),而是从一个 学习到的分布 进行。这个分布是通过尽可能地解耦合的方式学习得到的,这是因为在生成器的压力下,这样做会得到更好的效果(Karras 等人,2018)。
确实,这样的网络确实改善了描述分布纠缠的所有指标,以及从学到的潜在分布合成最终结果时相比仅基于真实图像的数据分布,与之相比,这样的网络表现更佳。由于8层映射网络产生了最佳结果,因此选择了8层(Karras等, 2018)。
嗯,也就是说:
- 从选定的分布(通常是标准正态分布)中采样一个512维的潜在向量z。
- 它通过一个8层的非线性多层感知器(MLP)模型,生成一个512维的中间潜在向量w,该向量将被用于控制合成网络生成图像的风格。
- 非线性学习映射是必要的,因为这有助于减少合成网络(生成器)使用的潜在空间中的纠缠。这使得StyleGAN能够显著提高对潜在空间的控制,并产生更好的生成结果。
现在我们已经理解了为什么映射网络(简称映射网)会产生一个中间潜在向量(简称中间向量),以及它是怎样做到这一点的,现在来看看它如何用于生成输出图像。这个网络也叫g。
高层次概述合成网络中的第一部分,直到8x8分辨率为止。
合成块模块在上方的图片中,你可以看到StyleGAN的合成网络使用合成块,逐步构建图像的过程,将图像分辨率逐步从4x4放大到8x8,再到16x16,…… 最终达到1024x1024像素的大小。
每个StyleGAN合成模块主要包括如下:
- 上采样(除了第一个合成块以外)。将前一个合成块的输出进行上采样,以便接下来进行处理。
- 卷积层。
- 自适应实例归一化(AdaIN)。
- 样式向量(A) 和 噪声向量(B)(A为样式向量,B为噪声向量)。
接下来,我们将对每个组件进行更详细的分析。您将了解每个组件在StyleGAN中的具体功能。首先,让我们从第一个合成网络的起点开始:图像构建所用的常量!
第一个合成单元的固定起点
没错,你读得没错——StyleGAN合成块的输入是常数。
这在设计上与之前的生成对抗网络(GAN),简称GAN,有很大的不同,之前的GAN都是从隐空间抽取样本开始的。
此输入是通过学习获得的,并初始化为全1值(Karras等人,2018)。换句话说,每个周期结束时,该常量会略有变化——但在每个周期内,它保持恒定。
两个重要的合成要素:风格和噪音。
常量张量现在由合成模块中的其余部分处理。虽然我们现在将详细讨论模块中的每个部分,但重要的是,有两个高层次的概念会反复出现,这一点需要记住。
- 风格。常量像是“脊梁骨”,用于任何类型的合成。就像画家有特定的风格一样,生成图像中的 高级元素 会通过所谓的“风格”适应。
- 噪声。如果你将相同的常量张量输入具有相同风格的合成块,你会一遍又一遍地得到相同的图像。这在现实中是不可能的:你会看到例如风如何影响某人的成像。换句话说,在生成图像时加入了噪声来实现随机性。
噪声是如何产生的以及它是如何被添加的。
首先,会在常量值中添加噪音。
看一张照片中的毛发,就能最好地理解为什么需要噪音。
假设下面的图片是由StyleGAN生成的,实际上它不是,但我们假设它是。你可以看到它包含了许多细节不同的组件。
- 粒度较小的组件,例如头部(特别是其位置)、躯干等。每个 人类 实例中,它们在重要性上大致相当。
- 粒度较大的组件,例如头发,不同人之间以及同一个人在不同照片中的头发都有所不同。一个人在照片中的发型位置不仅取决于发型选择等相对确定的因素,还可能受到风等看似随机因素的影响。
噪声决定了这些更精细的组成部分。下图中头发的位置?如果它是使用StyleGAN生成的,就不会是由你接下来要听到的风格所驱动,而是由随机性决定,即噪声。
噪声张量是从高斯分布(Karras等,2018)中随机抽取的。
这是一篇关于如何护理染发和漂白头发的文章。https://www.neven.ru/blog/kak-ukhazhivat-za-osvetlennymi-i-melirovannymi-volosami/
变量w是如何转换成视觉样式
现在我们知道噪声怎么给生成的图片加上随机性,是时候来看看“styles”或者“样式”,以及它们是如何控制图像生成的过程的了。
这从由映射网络生成的潜在向量 w 开始。
这个向量被送入下图中称为 A 的部分——神经网络中学习到的 仿射变换 部分。
在欧几里得几何中,仿射变换(从拉丁语 affinis ,意为“相关的”)是一种几何变换,它保持线的平行性(但不一定保持距离和角度不变)。
比如说,如果我们有一个向量,像这样:
一个仿射变换过程能够生成这样的向量,如:
一个仿射变换可以生成这种类型的向量之类的:
(尺度长度为2,虽然线相同,但更长,因此没有保持距离。)
这意味着,从概念上来说,仿射变换能够调整图像的组件而不改变整个图像,因为这种变换的结果必须与输入(即潜在向量 w)保持关联。
输入向量 w 被转换为风格 y,其中 y 由 y _s 和 y _b 组成。其中 y _s 表示尺度,而 y _b 表示偏置。你稍后会知道如何使用它们。它们的形状与它们将控制的合成张量相同。
仿射变换是在训练过程中学到的,因此可以用来控制低层次组件(如发型、肤色等)的合成图像的过程——而要记住,随机性是用来调整比如单根头发的位置的。
你现在应该能解释风格和随机性如何帮助生成独一无二的图像。接下来,我们仔细看看风格是怎样影响图像生成的。
与风格相关的就是将两个向量相加。
- 带有噪声的常量张量(在第一个4x4像素合成块中)或当前生成的张量(对于其他合成块)。
- 仿射变换,但是经过自适应实例归一化(AdaIN)进行归一化。
这就是AdaIN的样貌:
在这里,x _i 是输入张量中第 i 个特征图,即特征图向量中的第 i 个元素,而 y 是生成的风格仿射变换。
可以看到中间部分,特征图首先被归一化到零均值,单位方差,即标准差为1——然后通过乘以风格的尺度成分中的第i个元素按比例缩放,再然后加上偏置成分中的第i个值。
换句话说,AdaIN 保证生成的 风格参数 可以通过改变尺度和/或偏置来 控制 (归一化的) 合成输入。这就是风格参数通过调整加噪声输入张量来控制图像合成过程的方式!
更高级别的模块
上面的内容主要集中在第一个合成模块。可想而知的是,这实在没什么好惊讶的。嘿
后续的合成区块(8x8,16x16,直到1024x1024像素),与第一个合成区块的工作方式略有不同,
- 首先,我们使用双线性上采样来放大图像,然后用一个具有3x3核的2D卷积层来进行学习的下采样。
- 接着,添加噪音,然后执行AdaIn(可适应实例归一化)操作,用于风格控制。
- 然后,我们使用同样大小的卷积层进行另一次下采样,再进行一次噪声添加并执行风格控制操作。
对于第一层,这就会得到一个8x8像素的图像,等等。
最终结果训练_STYLEGAN_来生成人脸时的效果真的超赞! :)
资料来源:Karras et al. (2018) 和 https://github.com/NVlabs/stylegan/blob/master/stylegan-teaser.png,CC BY-NC 4.0 许可协议。
参考文献Karras, T., Laine, S., & Aila, T. (2018). (一种基于风格的生成对抗网络生成器架构). arXiv 预印本 arXiv:1812.04948.
Goodfellow, I. J., Pouget-Abadie, J., Mirza, M., Xu, B., Warde-Farley, D., Ozair, S., … & Bengio, Y. (2014). 生成对抗网络(GANs) arXiv:1406.2661.
来自AI的留言感谢你加入我们社区!在你离开前,