stylegan2通过操纵潜变量进行人脸编辑方法

stylegan2本身就不赘述。目标很明确,比如希望给elon mask换个发色,下面是采用StyleCLIP但在 wp空间中修改的

stylegan2通过操纵潜变量进行人脸编辑方法_第1张图片

 或者,戴个眼镜,

stylegan2通过操纵潜变量进行人脸编辑方法_第2张图片

达到这个目的有很多方法,这边主要要讲的是通过操纵stylegan2潜变量的几个方法来。

我们把这个问题分成几个步骤来看,

1. stylegan2基本网络结构,为了说清楚问题,这边简简单单放一张图(拷自https://zhuanlan.zhihu.com/p/263554045)

stylegan2通过操纵潜变量进行人脸编辑方法_第3张图片

由图可知,输入为z,经过mapping网络得到w,w复制18分之后(复制之后的潜变量称做wp),送入synthesis网络生成人脸。所以,人脸可以通过z、或者w、或者wp来控制。此处注意synthesis网络,wp经过A输出style,这个style也可以认作是一种潜空间(StyleSpace)。StyleCLIP论文表示,StyleSpace相较z和w以及wp,都有比较好的属性解耦作用,所以StyleCLIP是在StyleSpace上做文章。

2. 从1分析可以知道,要修改人脸属性,可以通过操纵z、w、wp、以及s(StyleSpace)来进行。但我们的任务,输入其实是一张图片,这边需要有一个把图片映射成z(或者w、wp、s)的过程,此处方法很多,基本分成两种,这边假设求z

A. 随机生成z,设计合适的loss通过梯度优化获取目标图片的z变量

B. 训练一个encoder来获取z变量

这两种方法不论哪一种,都要既保证z经过synthesis网络之后得到的人脸,和原来长得像,还希望编辑这个z,修改某种属性的时候,保持其他属性不变。其实大多数论文都会去求wp,我个人也比较倾向这个方法。至于StyleCLIP提到的StyleSpace,我做了些实验,在wp上也照论文方法实现了一遍,个人认为主观效果上差不多,并且wp操作起来方便,直接送入synthesis便可推理,无需去提取synthesis网络内部的卷积结果。

这一个部分大家可以参考"Encoding in Style: a StyleGAN Encoder for Image-to-Image Translation"或者"Designing an Encoder for StyleGAN Image Manipulation"(e4e),后面这篇文章是基于前面一篇文章的成果上做的,实用价值更大,个人观察,很多stylegan2的encoder都采用了e4e的预训练权重去求wp。

3. 获取到wp(或z、w、s)之后,就可以进入我们的主题,如何操纵人脸属性了,做这块研究的文章也特别多,基本上分成几类方法,这边就假设要实现戴眼镜或去眼镜的功能

A. 先获取一个分类器(这个八仙过海各显神通,github上也不少),然后对一堆图片进行分类,提取他们的wp,随机取两个,假设为wp1和wp2,之后将所有随机取的两两差值wp2-wp1/diff_of_attribute相加再平均一下,就可以获取到修改属性需要的delta wp。

B. StyleFlow(StyleFlow: Attribute-conditioned Exploration of StyleGAN-generated Images using Conditional Continuous Normalizing Flows)的方法,可以直接使用StyleFlow,StyleFlow为了实现属性解耦,会将wp和z之间来回映射,看着巧妙。当然使用StyleFlow获取到成对样本(比如男变女,变老),再采用A的方法也是可以,这样在实际使用的时候推理更快。

C. StyleCLIP的方法,通过CLIP对齐图像和文本的属性,那么就可以通过某个短语实现对人脸属性的控制。论文里就这点,也有三种做法,其中第三种是适应性最强的,第二种的mapper方法用于具体任务时推理较为方便。

这些文章的github实现有些讨厌的地方在于使用的stylegan2代码不太统一,个人建议基于https://github.com/rosinality/stylegan2-pytorch完善一套自己的项目代码。

你可能感兴趣的:(stylegan2,stylegan,深度学习,计算机视觉,人工智能)