作者:Rudra Raina
翻译:张一豪
校对:吴金笛
本文约2100字,建议阅读10分钟。
本文详细介绍了生成对抗网络(GAN)的知识,并用其变换人脸,并探寻如何利用StyleGAN生成不同属性(如年龄、微笑等)的人脸。
概述
直到最近,我才开始探索深度学习的全部内容,并在计算机视觉中遇到了这些有趣的想法和项目。
即使我的知识和经验有限,我也希望这可以帮助其他一些初学者对该领域产生兴趣并尝试一些令人兴奋的新事物。
我找到一个非常棒的YouTube频道,叫做Arxiv Insights(或者简称AI,这是个巧合吗?我看不是)。在这个频道,我发现其中一个视频是相当有趣的:如何使用生成对抗网络对人脸变形!本文是对我从上述视频中学到的知识的总结,我希望到结束时您对这个想法有一个很好的了解,并且可能想自己尝试一下。
上图中的人在现实生活中并不存在,他们是计算机生成的。朋友们,那就是GAN的力量。果这引起了您的注意,请继续阅读以了解更多信息。
第一部分:GAN是什么
GAN有一个非常简单的任务要做,就是从头开始生成数据,而这种数据甚至可以欺骗人类。
该模型由Ian Goodfellow及其同事于2014年发明,由两个神经网络组成(生成器和判别器),它们相互竞争,从而产生了一些真实的内容。
使用两个网络的目的可以概括为尽可能多地学习输入数据的基础结构,并利用该知识来创建相似的内容,该内容拟合了所有参数以适应同一类别。
如上所示,输入的是人脸,GAN准确地学习到怎样生成人脸或人。利用这种理解,它会生成随机的人脸,这些人脸也可能是真实的。
让我们详细了解一下:
GAN的基本结构
这张图是简化后的GAN模型结构,但它捕获了该概念的完整本质。
这是在GAN的一次迭代中发生的情况:
1. 生成器
- 生成器将随机噪声矢量作为输入;
- 生成器将执行多次转置卷积,以对噪声进行上采样,最终生成图像。
2. 判别器
- 它从现实世界样本(真实样本)或生成的图像样本(假样本)中获取随机输入;
- 顾名思义,判别器只干一件事:判别输入的“真是样本”还是“假样本”。
作为用户,我们知道它是来自真实样本还是伪造样本,并利用此知识使用反向传播(BP)训练损失,以使判别器更好地完成其工作。
但是众所周知,生成器也是神经网络,因此我们可以一直传播到随机样本噪声,从而帮助生成器生成更好的图像。这样,判别器和生成器都可以使用相同的损失函数。
诀窍在于在训练过程中平衡这两个网络。如果做得正确,判别器将学会区分即使是很小的异常,同时发生器将学会产生最真实的输出。
对GAN工作原理的技术理解:
生成器和判别器处于最小-最大博弈中。
- 生成器试图最小化真实图像和伪图像之间的差距,以欺骗判别器;
- 判别器试图最大化对真实图像的理解,以便区分假样本。
在上面的图像中,D(x)只是图像为“真实样本”的概率。
这里有另一个函数G(z)是生成器的输出,z是随机隐变量输入。生成“真实样本”的概率由判别器D(G(z))计算得。
对于判别器,我们希望:
- 正确识别实样本图像,因此D(x)必须接近1;
- 同时,同样正确识别假图像,因此D(G(Z))必须接近1。
对于生成器:
- 生成器与D(x)的准确度无关,只有D(G(z))必须被标识为真实样本,因此其必须尽可能接近1。
GAN的目标函数
只有当两个网络之间取得很好的平衡,这种损失函数才是GAN体系结构的基础,我们才能获得高性能的生成器和判别器。
对于那些对详细了解GAN感兴趣的人:
- 这是Ian Goodfellow的原始论文链接。
https://papers.nips.cc/paper/5423-generative-adversarial-nets.pdf
- 这是“GAN-GAN系列(从开始到结束)”—— 由Jonathan Hui撰写可以深入了解GAN及其应用的最佳资料之一。
https://medium.com/@jonathan_hui/gan-gan-series-2d279f906e7b
第二部分:有趣部分
该模型背后的原理:
- 训练完生成器后,其隐变量已充分了解了数据集的底层结构。
- 在我们的示例中,我们将使用的模型已经了解了人脸的结构。该模型是由NVIDIA研究人员开发的StyleGAN。
https://en.wikipedia.org/wiki/StyleGAN
- 我们的目标是利用这种结构并操纵它生成有趣的东西。
您应该知道,在像素域中处理图像非常繁琐且困难,因此,我们将在隐向量中处理图像。
然后,我们的第一个障碍来到了,怎么做?对于任何给定的图像,我们能否始终找到该图像对应的潜向量?正如下图所示:
流程:
对于我们的第一个障碍,以下解决方案最有效:
- 通过生成器生成随机面孔;
- 使用这些图像作为数据集,训练ResNet从源图像到其潜在的矢量代码(初步估计值);
- 我们将使用经过预训练的ResNet,可以找到查询图像的潜代码(粗略估算);
- 然后,以该图像为起点,计算与“原始图像”的L2损失,并相应地更新隐矢量代码(同时固定发生器本身的权重)。
这是第二部分的视频——更新估计的隐代码
在视频的后半部分,由于隐代码估计收敛到查询的真实图像的代码,因此更新很难观察到。
第三部分. 时间变形
好吧,也许不是这个。
计划:
- 我们需要另一个数据集,然后再次生成随机面孔数据库。
- 我们应用预训练的属性分类器来获取诸如“性别”,“年龄”,“微笑”等属性。
- 这样做是为了让我们可以将潜在代码映射到图像属性以找到相应的模式。
- 我们需要了解,StyleGAN的潜在空间是一个高度复杂的512维空间。
StyleGAN的隐空间
在这里,每个点都代表一张图片,我们需要在该空间中找到一个图案。例如,在该空间中沿某个方向移动将如何更改生成的图像?
- 可以观察到,在隐空间中,这些属性可以很容易地通过“线性超平面”来分离。
- 沿该平面取法线将为我们提供改变该属性的方向。
最后,我想展示另一个示例,我更改了Emma Watson图像的“ age”属性。
这是我尝试过的GitHub存储库的链接,视频是其实际输出。
https://github.com/rudraina/Face-Morph
再次感谢Arxiv Insight涵盖了如此有趣的话题。
https://github.com/rudraina/Face-Morph
加油,大家可以自己尝试一下。
原文标题:
Face-Morphing using Generative Adversarial Network(GAN)
原文链接:
https://medium.com/swlh/face-morphing-using-generative-adversarial-network-gan-c751bba45095
编辑:王菁
校对:林亦霖
译者简介
张一豪,同济大学研一在读,研究方向为交通数据挖掘与人工智能。大数据时代,数据与算法之美很难用只言片语表达,但数据分析要言之有物,行之有效,重于创新,成于推理。一个交通规划专业的小白,正在数据挖掘与分析的基础上探索交通规划的全新领域。
— 完 —
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:基于生成对抗网络(GAN)的人脸变形 - Python技术站