Image2StyleGAN: How to Embed Images Into the StyleGAN Latent Space?
摘要
本文使用一种有效的算法,能够将图片映射到styleGAN的潜在空间,使用FFHD训练好的styleGAN作为实例,演示风格转化,表达转化等。通过研究这个算法的编码结果提供一种研究styleGAN 潜在空间的有效方法。文中通过一系列的试验来测试,什么样的图片可以编码?它们怎么编码?什么样的潜在空间适用于编码?编码是否有意义?
本文的贡献
潜在空间转化
图像映射到潜在空间的方法一般有两种:
由于第一种方法虽然快速,但是经常会生成超越潜在空间之外的latent code。所以本文选择的是第二种方法。
Percetual Loss 和 风格转化
这一部分不属于文章的主体,主要是介绍了风格转化和Percetual Loss感觉有些用处也就列了出来。
Percetual Loss 表示两张图片经过vgg提取特征后,衡量两个特征相似度的Loss。一般来说VGG的每一层的featuremap 可以分离成图片内容,图片风格两种类别。早起的风格转化中,一般一种风格就需要专门训练一个模型,但是后来有的学者通过激活距离标准化的方法,解决了合格问题,可以在一个模型中实现多种风格的转化。
什么样的图像适合转化
这个问题是一个比较重要的问题,在早期的试验中,使用人脸以及其他GAN生成的人脸做测试,发现差距很大。但是随着FFHQ数据集多样性的发展,以及styleGAN的出现,使得将图像映射到潜在空间成为可能。
在实验中选择了25张图片,来自5个区域,人脸,猫,狗,汽车,画。并对这些图片进行了预处理,包括位置对齐。主要是因为,为了更好的理解潜在空间以及它的特征,多种类的图片是必须的。
第一个是正常输入,正常输出。第二个是将左边像素移140到右。第三个将160像素从右移到左。第三个缩小一倍。第四个扩大一倍。第四第五都是位置转化。
从试验可以看到存在一些细节的丢失。
尽管生成的图片比真正图片略有瑕疵,但是生成的猫,狗等都具有很高的质量。能够充分的说明styleGAN具有很好的生成与编码功能。
GAN的生成能力强弱与Affine Transformation是息息相关的,尤其是translation环节,如果translation环节失效那么将会导致生成模型,生成图像较差。
使用去除鼻子眼睛的奥巴马进行压力测试,发现stylegan具有很强的鲁棒性,同时也说明了潜在空间的lantentcode 并不全是代表全脸的,而且生成的时候也不会填充出丢失的信息。
styleGan的潜在空间有好多种,包括初始化空间z, 以及经过mapping net转化后的空间w。但是试验发现,直接使用w并不是一个很好的选择。所以本文选择了一个18*512的w+的向量,每一个对应styleGAN的一个层。
左边第一个是原始图像,第二个是随机权重跑出的结果,第三个是直接逼近w空间的结果。
结果发现直接逼近w空间效果并不好。
空间转化的意义
这一部分主要进行了三组测试,分别是合成形变,风格转化,表达转化。评价标准是是否能够生成高质量的图片。
两个图片的两组向量w1, w2。经过如下计算
然后生成一个新的图片
最左边和最右边是原始图像,中间的是生成图像。
给出两个latent code w1 和 w2使用交叉操作,分别代表内容图片和风格图片。本文保留内容图片的前9层的内容(4*4 – 64*64),然后将风格图片的后9层内容进行拼接,但是这种方法对没有人脸的图像是很难保存其中内容的。
其中第一列是风格图。
综上来看,可知style GAN的风格元素与后9层是息息相关的。
给出三个向量w1, w2, w3经过如下计算
其中w1是目标图像,w3, w2 分别表示表达图像,非表达同人图像。比如w1是一个人, w2 是一个微笑的人,w3是一个和微笑人同一人但是没有微笑,那么w就是生成w1微笑。
算法
算法的大体操作如下,给出一个合适的初始化向量w,以此为基础训练一个向量w1, 然后改变w1,用来最小化原始图像与w1生成图像之间的loss。
上面是算法流程图。
w的初始化方法有两种
为了比较两种初始化方法的优劣,本文使用loss值以及优化值与中值的距离 进行综合比较,对比结果如下图所示
综上所表示,人脸图像的初始化方法,均值初始化全面优与随机初始化方法。
Loss 函数
其公式如下
其中I表示原始图像 G()表示与训练的生成器, w是需要计算的latent code,第二项是L2函数
最为重要的是介绍loss的第一项也就是
其公式为
其中Fj 表示VGG16,中的conv1_1, conv1_2, conv3_2, conv4_2输出的feature map
下面是训练迭代图。
我的理解
我的理解部分表示,我对论文理解的一些感悟,主要有四项如下
初始化w ------à 根据w生成图像--------à通过计算w生成图像与真实图像的Loss----à 反馈调节w。
这一步骤中,生成器使用的是与训练好的style gan,没有使用到判别器。
文中的VGG16 并没有用来逼近初始化权重,其作用是用来提取原始图像与生成图像的feature map计算loss 。我估计代码中的RESNET是初始化512*18的w