玩转StyleGAN2模型教你生成动漫人物

字幕组双语原文:玩转StyleGAN2模型:教你生成动漫人物

翻译:雷锋字幕组(Icarus、)

现在,我们可以尝试生成一些图像,看看结果。

关于StyleGAN架构的完整细节,我推荐大家阅读NVIDIA官方关于他们实现的论文。下面是论文本身的完整架构图示。

在纠缠表示下,数据分布不一定遵循正态分布,我们希望从那里抽取输入向量z的样本。例如,数据分布会有这样一个缺角,它代表了眼睛和脸部的比例变得不现实的区域。

StyleGAN还做了一些其他的改进,我在这些文章中就不一一介绍了,比如AdaIN的规范化和其他常规化。你可以阅读官方论文,Jonathan Hui的这篇文章,或者Rani Horev的这篇文章来代替阅读进一步的细节。

用0.3磅/平方英寸(左)与0.7磅/平方英寸(中)与1.3磅/平方英寸(右)生成的3×3网格图像。

GAN由2个网络组成,即生成器和鉴别器。生成器将尝试生成假样本,并愚弄鉴别器,使其相信是真实样本。鉴别器将试图从真假样本中检测出生成的样本。这个有趣的对抗性概念是由Ian Goodfellow在2014年提出的。已经有很多资源可以用来学习GAN,因此为了避免冗余,我就不解释GAN了。

此外,在每个层次上有单独的输入向量w,允许生成器控制不同层次的视觉特征。前几层(4×4,8×8)将控制更高级别的细节,如头型、姿势和发型。最后几层(512×512,1024×1024)将控制更精细的细节,如头发和眼睛的颜色。

现在,我们需要生成随机向量z,作为生成器的输入。让我们创建一个函数,从给定的种子中生成潜伏代码z。

接下来,我们需要下载预训练的权重并加载模型。当你使用Google Colab时,请确保你是在GPU运行时运行,因为模型被配置为使用GPU。

StyleGAN进一步改进了它,增加了一个映射网络,将输入向量编码成一个中间的潜伏空间,w,然后将有单独的值用来控制不同层次的细节。

该函数将返回一个PIL.Image的数组。在Google Colab中,你可以直接通过打印变量来显示图像。这里是第一张生成的图片。

如果我们从正态分布中对z进行采样,我们的模型会试图也生成缺失的区域,其中的比例是不现实的,由于没有具有这种特征的训练数据Is,生成器会生成不良的图像。因此,映射网络的目的是拆分潜伏表征,并扭曲潜伏空间,使其能够从正态分布中采样。

?(psi)是阈值,用来截断和重新采样高于阈值的潜向量。因此,如果使用更高的?,你可以在生成的图像上获得更高的多样性,但它也有更高的机会生成奇怪或破碎的面孔。对于这个网络来说,?的值在0.5到0.7之间,根据Gwern的说法,似乎可以得到一个具有足够多样性的好图像。虽然,可以随意试验一下阈值。

这段代码是从这个笔记本上修改而来的。

GAN的一个好处是,GAN有一个平滑和连续的潜伏空间,而不像VAE(Variational Auto Encoder)有间隙。因此,当你在潜伏空间中取两个点,将产生两个不同的面,你可以通过在两个点之间取一个线性路径来创建两个面的过渡或插值。

然后,我们可以创建一个函数,将生成的随机向量z,生成图像。

当你运行这段代码时,它会生成一个插值的GIF动画。你还可以使用顶部的变量修改持续时间、网格大小或fps。

  StyleGAN生成器架构 [图片由作者提供]。

英伟达在2018年发表了StyleGAN论文《A Style-Based Architecture for GANs》。该论文为GAN提出了一种新的生成器架构,允许他们控制生成样本的不同细节水平,从粗糙的细节(如头部形状)到更精细的细节(如眼睛颜色)。

GAN架构 [图片由作者提供]

让我们看看插值结果。你可以看到,第一幅图像逐渐过渡到第二幅图像。

StyleGAN还允许你通过在各自的图层上给予噪声来控制不同层次的细节的随机变化。随机变化是图像上的小随机性,不会改变我们的感知或图像的身份,如不同的梳理的头发,不同的头发位置等。你可以在下面的动画图像中看到变化的效果。

StyleGAN还融合了Progressive GAN的思想,即网络最初在较低分辨率(4×4)上进行训练,稳定后再逐步增加更大的层数。这样做,训练时间变得更快,训练也更稳定。

注:如果你有困难,可以参考我的Colab笔记本。

我将使用Aaron Gokaslan预先训练好的Anime StyleGAN2,这样我们就可以直接加载模型并生成动漫脸。所以,打开你的Jupyter笔记本或Google Colab,让我们开始编码吧。

特区政府商经局局长邱腾华也强调,香港是印尼企业进入内地及亚太区域的理想据点,期待两地未来更紧密的合作。

生成式对抗网络(GAN)是一种能够生成新内容的生成式模型。由于其有趣的应用,如生成合成训练数据、创造艺术、风格转换、图像到图像的翻译等,这个话题在机器学习界真的很受欢迎。

林郑月娥说,香港汇聚了熟悉东西方多元文化的人才和专业人士,而经贸合作区是为从事生产加工、贸易及物流、科学、科技等业务的企业而设,将会为各方带来无限的协作前景。

让我们用图片的网格来显示,这样我们就可以同时看到多张图片。

现在我们已经完成了,你还可以做什么,进一步改进呢?以下是你可以做的几件事。

林郑月娥表示,数码创新有助香港控制疫情,从而减低疫情对社区构成的影响。她说香港特区政府已于6月推出商机推广平台,介绍有关检测、接触者追踪、电子医疗、电子学习、电子商贸、电子通信,以及其他智能创新产品的应用,这一切皆可与海外伙伴包括印尼共享。

为什么要增加一个映射网络?

让我们在代码中实现这一点,并创建一个函数来在z向量的两个值之间进行插值。

当训练样本中存在代表性不足的数据时,生成器可能无法学习样本,生成效果不佳。为了避免这种情况,StyleGAN使用了一个 “截断技巧”,通过截断中间的潜伏向量w,迫使其接近平均值。

如果你做到了这一步,恭喜你! 你已经使用StyleGAN2生成了动画面孔,并学会了GAN和StyleGAN架构的基础知识。

然后我们可以将生成的图像显示在3×3网格中。

我推荐大家阅读Joseph Rocca写的这篇理解GAN的美文。

网上研讨会由香港特区政府驻雅加达经济贸易办事处、香港贸发局、香港中华总商会、印度尼西亚工商会及香港印度尼西亚商会合办,并得到外交部驻港特派员公署支持。超900名香港及印尼的商界领袖和专业人士登记参与本次网上研讨会。

现在我们已经完成了插值工作。我们终于可以尝试制作上面缩略图中的插值动画了。我们将使用moviepy库来创建视频或GIF文件。

理解生成式对抗网络(GANs)

GAN的问题之一是它的纠缠潜码表示(输入向量,z)。例如,假设我们有2个维度的潜伏码,它代表了脸的大小和眼睛的大小。在这种情况下,人脸的大小与眼睛的大小高度纠缠在一起(眼睛越大也就意味着人脸越大)。另一方面,我们可以通过存储脸部和眼睛的比例来简化这个问题,这将使我们的模型更简单,因为无纠缠的表示方式更容易让模型解释。