原始博客地址:www.seeprettyface.com/research_notes.html#step6
效果演示:http://www.seeprettyface.com/index_page6.html
————————————————————————————————
如何实现现实人脸照片的编码
因为目前StyleGAN生成的都是虚拟人物,如果我们能找到现实人物在初始域中对应的编码的话,那就意味着可以对现实中的人物进行操作和变化,这会带来一个很有意思的场景:我们每个人的人脸都可以用一个(18,512)维度的向量来表示,并且只要对这个向量稍作一些变动,就能生成出一个略微不同于我们的新的人脸模样(如下图所示)。
我们认为这个想法是有意义的,因为这意味着虚拟人物的生成能与现实人物产生依托或关联。首先有必要从理论上来简单解释一下这个想法——虽然我们无法保证StyleGAN的生成分布域涵盖了地球上所有人脸的样貌,但是由于StyleGAN的生成基于分级控制特征,并且训练集涵盖了人种、性别、年龄等各种样式的人脸,因此我们可以在生成分布中找到一张与现实人脸无比接近的人脸,并最终计算出其在初始域中对应的编码。
上图便解释了实际要做的事情,下面开始设计模型以实现这一想法。既然要做图像提取特征码,我们首先想到可以借鉴BiGAN(双向GAN)的思维,简言之就是加一个编码器,将生成器的输出当作输入,并将生成器的输入当作输出去进行训练,下面展示一个基于ResNet50模型设计的编码器。
上图是编码器的内部结构,主要是在Resnet50的模型后面加了几个转换层,实现上是比较容易的,下面来看一下训练和测试的流程。
如上图所示,训练时采用StyleGAN提供的源源不断的样本,得到一个预训练模型。不过考虑到这是在生成图片域上的训练,而在测试时我们用到的是真实图片,因此对于特定的图片还需要进一步微调,才能找到它在初始分布域上的准确位置。下面展示一个测试效果,采用的是一张我本科同学的照片,发现基于StyleGAN重构生成的图片能与原图达到非常高的重合性。
我还进一步做了很多实验,主要是在大量明星名人的头像上,发现StyleGAN的复原效果是很惊艳的,甚至背景也能比较好的复原出来。下面展示两张黄晓明和玛丽莲梦露的重构生成图片。
更多名人的头像生成效果展示在生成日志(P6)上,并且所有名人的生成码都开放下载。
· 基于StyleGAN的人脸属性编辑
上一节讲述了如何用StyleGAN生成现实人物的脸部照片,这一节会介绍一些对脸部进行属性编辑和操作的方法。我们知道,StyleGAN建立的其实是(18,512)维的向量到(1024,1024,3)维的向量的映射关系,而后者具有一些属性,譬如年龄、性别、表情等,如果我们能探究出后者属性的变化在前者(生成域)上对应变化的关系,那么我们就能够对生成人脸的属性进行编辑和操作。
其实这并不是一件难做的事情。如下图所示,我们可以首先利用百度云或微软的人脸识别接口得到大量有标签的数据,然后取其中某一维度的数据(譬如age),探究其标签值的变化与对应的dlatent域的值变化的关系。
这一变化关系可以用一个方向向量e来表示,它与dlatent的维度是一致的。如何求e呢?较简单的方法是(如下图所示),每次取两个sample,用它们dlatent的差值除以label的差值,就得到了一个估测值,然后多次重复这一过程,将所有的方向向量累加起来并求平均值,就得到了估计的方向向量。
不过,这一方法在样本数量较大时效率会很低,我们可以采取一些优化技巧。如下图所示,以标签的中位数为分界线,低于该值的标签改为0,高于该值的标签改为1,然后构造w·x+b=y的目标函数,运用逻辑斯蒂回归求解此二分类问题,求出的w就可以近似为我们需要的方向向量。
最终,采用优化后的方法能够在较快时间内求解出一个较为准确的方向向量。求解完方向向量后,我们就可以按照自己的想法对人脸的特定属性作出一些变化,只需将此人脸的dlatent码加上步伐(变化幅度)乘以该方向向量的结果即可。下面展示一些好玩的人脸属性编辑的效果。
让“黄晓明”笑起来
看看“baby”年轻时的样子
看看“马云”年老时的样子
看看“安吉丽娜·朱莉”变成男人的样子
当然我们也可以探究人脸融合的效果,就是将两人的dlatent做一个平均,看看新生成的人物是什么样子,譬如下面这张图展示的将“黄晓明”与“Angelababy”的“基因”融合在一起的样子。
好看的人融合在一起也这么好看~
· 基于StyleGAN的人脸三维建模
这一节介绍,如何依据一张人脸图片,生成该人物不同角度、不同姿态的面貌照片。其实这非常类似于“人脸属性编辑”中的方法——以水平旋转为例,将人脸数据中的旋转角度“yaw”标签提取出来,并计算标签值的变化对于dlatent改变量的影响,即计算出方向向量e,将原始人脸的dlatent加上该方向向量e与不同步长的乘积,就得到了同一张脸的不同水平角度的照片。下面展示一个测试效果,其输入是生成日志中EP001-01照片对应的dlatent,输出是在“水平角度”和“笑容”两个维度上的迁移结果。
输入
输出
更详细的生成细节可以参见视频生成 模块中实验一的演示。除了上述例子,这一方法在更多任务上也能取得一定应用,譬如配合现实人脸编码,便能实现现实人物的三维建模与变换,下面展示一个基于“鲁迅”先生照片的人脸三维建模效果。
一张鲁迅先生照片
人脸三维建模动态图
人脸姿态迁移动态图
综上可以发现,我们对于StyleGAN的能力有了进一步的认识,其中像鲁迅这样的照片都能被StyleGAN生成出来并变换,也是让人感到有些意外和有趣。。。总之,StyleGAN基本上能够合成地球上任意一个人的样子,其次它也能够对生成的样貌做一些编辑和变换。因此,StyleGAN不仅仅能实现虚拟人物的生成,它也能够与现实相挂钩,有更多更有意思的应用等待我们发掘。