Style-GAN encoder 详解

Image2StyleGAN: How to Embed Images Into the StyleGAN Latent Space?

摘要

  本文使用一种有效的算法,能够将图片映射到styleGAN潜在空间,使用FFHD训练好的styleGAN作为实例,演示风格转化表达转化等。通过研究这个算法的编码结果提供一种研究styleGAN 潜在空间的有效方法。文中通过一系列的试验来测试,什么样的图片可以编码?它们怎么编码?什么样的潜在空间适用于编码?编码是否有意义?

本文的贡献

  1. 提出了一种有效算法,可以将一个image转化到预训练模型的潜在空间W+。
  2. syleGAN潜在空间结构的视角出发研究了多种问题,什么样的图像可以转化成latent code? 什么样的脸可以被转化?什么样的潜在空间适合转化。
  3. 采用基于向量的三个基本算法,来研究转化的质量如何,这样可以更好的理解潜在空间,以及不同被编码的图像类别,作为本文的辅助成果,文中的人脸编辑,风格转化,表达转化试验去得了惊人的效果。

潜在空间转化

图像映射到潜在空间的方法一般有两种:

  1. 训练一个编码器,可以将图像转化潜在空间。
  2. 随机初始化一个latent code 并且使用梯度下降的方法去优化

由于第一种方法虽然快速,但是经常会生成超越潜在空间之外的latent code。所以本文选择的是第二种方法。

Percetual Loss  风格转化

这一部分不属于文章的主主要是介绍了风格转化和Percetual Loss感觉有些用处也就列了出来。

Percetual Loss 表示两张图片经过vgg提取特征后,衡量两个特征相似度的Loss一般来说VGG每一层featuremap 可以分离成图片内容,图片风格两种类别。早起的风格转化中,一一种风格就需要专门训练一个模型,但是后来有的学者通过激活距离标准化的方法,解决了合格问题,可以在一个模型中实现多种风格的转化。

什么样的图像适合转化

 这个问题是一个比较重要的问题,的试验中,使用人脸以及其他GAN生成的人脸做测试,发现距很大。但是随着FFHQ数据集多样性的发展,以及styleGAN的出现使得将图像映射到潜在空间成为可能。

  1. 图像转化结果

在实验中选择了25图片,来自5区域,人脸,狗,汽车并对这些图片进行了预处理,包括位置对。主要是因为,为了更好的理解潜在空间以及它的特征,多种类的图片是必须的。

  1. 试验1使用奥巴马测试

 

                                     Style-GAN encoder 详解_第1张图片

 

第一个是正常输入,正常输出。第二个是将左边像素移140到右第三个将160像素从右移到第三个缩小一第四个扩大一。第四第五都是位置转化。

试验可以看到存在一些细节的丢失。

尽管生成图片比真正图片略有瑕疵,但是生成的猫,等都具有很高的质量。能够充分的说明styleGAN具有很好的生成与编码功能。

  1. 图像映射鲁棒性解析

  GAN生成能力与Affine Transformation是息息相关的,尤其是translation环节如果translation环节失效那么将会导致生成模型,生成图像较差。

  1. 图像压力测试

 

                                            Style-GAN encoder 详解_第2张图片

 

使用去除鼻子眼睛的奥巴马进行压力测试,发现stylegan具有的鲁棒性,同时也说明了潜在空间lantentcode 不全是代表全脸的,而且生成的时候也不会填充出丢失的信息。

  1. 潜在空间选择

styleGan空间有好多种,包括初始化空间z, 以及经过mapping net转化后的空间w。但是试验发现,直接使用w不是一个很好的选择。所以本文选择了一个18*512w+向量,每一个对应styleGAN一个层。

  1. 空间试验

 

                                                  Style-GAN encoder 详解_第3张图片

左边第一个是原始图像,第二个是随机权重跑出的结果,第三个是直接逼近w空间的结果。

结果发现直接逼近w空间效果并不好。

空间转化的意义

这一部分主要进行了三组测试,分别是合成形变,风格转化,表达转化。评价标准是是否能够生成高质量的图片。

  1. 合成形变

两个图片两组向量w1, w2。经过如下计算

                                                         

然后生成一个新的图片

 

 

                                                                        Style-GAN encoder 详解_第4张图片

最左边和最右边是原始图像,中间的是生成图像。

  1. 风格转化

给出两个latent code w1  w2使用交叉操作,分别代表内容图片和风格图片。本文保留内容图片的9层的内容(4*4 – 64*64),然后风格图片的后9层内容进行拼接但是这种方法对没有人脸的图像很难保存其中内容的。

 

                                                          Style-GAN encoder 详解_第5张图片

其中第一列是风格图。

综上来看,可知style GAN风格元素与后9是息息相关的。

  1. 表达

给出三个向量w1, w2, w3经过如下计算

                                                                  

 

其中w1目标图像,w3,  w2 分别表示表达图像,表达同人图像。比如w1一个人, w2 是一个微笑的人,w3一个和微笑人同一人但是没有微笑,那么w就是生成w1微笑

算法

算法的大体操作如下,给出一个合适的初始化向量w,以此为基础训练一个向量w1, 然后改变w1,用来最小化原始图像与w1生成图像之间的loss。

 

                                                                         Style-GAN encoder 详解_第6张图片

上面是算法流程图。

  1. w的初始化方法

w的初始化方法有两种

  1. 随机初始化,这种方法中,[-1, 1]均匀分布中随机选择向量。
  2. 使用图像阈均值初始化,寻找一个逼近止的w1。

为了比较两种初始化方法的优劣,本文使用loss以及优化值与值的距离   进行综合比较,对比结果如下图所示

 

                                                                          Style-GAN encoder 详解_第7张图片

综上所表示,人脸图像的初始化方法,均值初始化全面优与随机初始化方法。

Loss 函数

其公式如下

 

                                                                  

其中I表示原始图像 G()表示与训练的生成器, w是需要计算的latent code,第二项是L2函数

最为重要的是介绍loss的第一项也就是

 

                                                                                          

公式为

 

                                                                          

其中Fj 表示VGG16,的conv1_1, conv1_2, conv3_2, conv4_2输出的feature map

下面是训练迭代图。

                                                                                    Style-GAN encoder 详解_第8张图片

 

的理解

的理解部分表示,对论文理解的一些感悟,主要有四项如下

  1. 文中认为latent space够表示较高质量的图片,也就是说,图片的latent code距离均值越近,质量越好。相反距离均值越远其质量越差
  2. 文中方法大体流程

初始化w ------à 根据w生成图像--------à通过计算w生成图像与真实图像的Loss----à 反馈调节w。

一步骤中,生成器使用的是与训练好的style gan,没有使用到判别器。

  1.   Loss部分,Loss部分值得单拿出来一提,它将生成图片   原始图片都通过同一个VGG16然后然后计算VGG16四个中间层出来的featuremap欧式距离。从而能够比较图像的各个状态的特征。十分的有意义
  2.   本文中的总体流程与想象中的大相同,既没有训练vgg16 没有训练stylegan, 它的整体模型中只有一个权重,就是初始化的latent code w,通过计算loss, 对w反向传播,然后是得更新后的w生成的图像,更加的能够匹配原始图像。

文中的VGG16 没有用来逼近初始化权重,作用是用来提取原始图像与生成图像的feature map计算loss 。我估计代码中的RESNET初始化512*18w

 

 

 

你可能感兴趣的:(gan,生成)