绿色健康小清新

耐得住寂寞,守得住繁华

李宏毅机器学习-43-GAN-08-Intelligent Photo Editing

Intelligent Photo Editing

问题提出

生成器的输入是一个低维向量zz,输出是一张图片。向量zz的每一维可能对应着图像的某个特征,改变zz的值就可以调整图像内容。那么:

  1. 对于一张已有的生成图像,如何得到它对应的向量zz

  2. 又如何知道zz中的每个元素/维度对应着图像中哪个特征?

  3. 该维度是以怎样的具体值控制着该特征的表现呢?

其实我们之前也说过这个问题,我们是通过InfoGAN来解决这个问题的,强迫性的使zz中的某些维度和xx中的某些特征产生关系,详情可以看:

👉 机器学习-40-Feature Extraction(InfoGAN,VAE-GAN,BiGAN,Triple GAN,Feature Disentangle(Voice Conversion))

接下来我们介绍另外一种方法:GAN+Autoencoder

GAN+Autoencoder

我们可以将既有的Generator作为Decoder,从图片x中可以得到相应的特征标记,例如:头发颜色,头发浓密,胡子,性别,皮肤颜色、笑的表情等,如果我们能知道是什么样的z生成的x,就可以把x中的某些维度和图片的特征联系起来。

要知道z,就是要训练一个Encoder ,输入一张图片x,得到z,z经过上图中的Generator后可以还原回图片x。

训练Encoder的时候,由于是要反推z,所以这里Generator中的参数是固定不变的。由于Encoder在上图中和Discriminator的功能相似,所以在实际计算的时候,可以用Discriminator来对Encoder进行初始化

Attribute Representation

完成上面的工作,我们就训练好了一个Encoder,这个Encoder可以把图片还原为一个向量。也就是用这个Encoder可以找到生成某个图片的向量。

接下来把数据库中的图片整出来:

丢到Encoder中,得到这些图片对应的向量(注意蓝色和绿色的点就是向量)

对于左边的图片是长发,右边是短发,把两簇向量取平均后得到长短发的代表,然后相减:

得到短发与长发的差异,也就是说短发向量加上上面的zlongz_{long}就变成长发。用数学公式描述这一过程为:

zlong=1N1xlongEn(x)1N2xlongEn(x)z_{long} = \frac{1}{N_1}\sum_{x∈long}En(x)-\frac{1}{N-2}\sum_{x'∉long}En(x')

其中En是Encoder,long代表长发。如果现在有一张短发的图片x,我们可以通过下面的步骤把其变成长发:

将x丢到Encoder中得到x对应的向量z,加上zlongz_{long} 后变成zz' ,经过Generator,就可以得到对应的长发图片。也就是说通过缩放zlongz_{long}就可以控制头发的长短了这其实就是一个可以依据要求从zz改变图像的方法。

Photo Editing(实例展示)

👉 完整视频:CelebA GAN set attributes


具体实例(Photos Editing )

👉 Jun-Yan Zhu, Philipp Krähenbühl, Eli Shechtman and Alexei A. Efros. “Generative Visual Manipulation on the Natural Image Manifold”, ECCV, 2016.

👉 Andrew Brock, Theodore Lim, J.M. Ritchie, Nick Weston, Neural Photo Editing with Introspective Adversarial Networks, arXiv preprint, 2017

Basic Idea

效果如下:

👉 完整视频:Generative Visual Manipulation on the Natural Image Manifold

类似上图的编辑效果是如何做到的呢?假设有一组商品图片,想要在一定的条件/限制下生成与某个商品图类似的图片。如下图所示:在红色的限制下,从黑色的衣服生成样式基本不变的红色衣服图片。

首先利用训练好的生成器将所有图片映射到编码zz的空间,每一个图片就是该空间中的一个采样点,我们就在该空间内寻找想要的图像。将黑色衣服的图片输入生成器得到对应的编码zz,以较小的半径在该zz点周围采样(这个半径和具体采样的位置应该都和条件/限制有关),就应该得到符合限制的相近的红色衣服图像。至于为什么在编码空间内操作,应该是因为低维空间内更好采样吧,更容易找到需要的点(否则空间中只有极少极少的点是我们需要的)。


三种方法

Method 1

把寻找code的过程看做最优化的过程:

z=argminzL(G(z),xT)z^* = arg\min\limits_zL(G(z),x^T)

要找z,通过G(z)后得到一个图片,我们希望这个图片和xTx^T越接近越好,衡量接近(二者差距)程度用函数L表示。常见的衡量方法有:

  • Pixel-wise:逐像素比较
  • By another network:用一个NN来进行转化后比较。(把图片都丢到一个类似Encoder的网络可以得到向量表示。)
    然后用梯度下降求解这个最优化方程。
Method 2

就是用我们上面提到的方法,训练一个Encoder来找z

Method 3

将第一种和第二种方法相结合。

上面的方法一由于使用了Gradient Descent的方法优化,可能会出现陷入局部最小值的问题(该现象受zz初始值的影响),因此可以先利用这种GAN+Autoencoder的方法得到一个zz的初始值(用现有图片和生成器训练编码器,然后把该图片输入编码器就会得到对应的zz),然后再用方法一。此时要解的一个优化式子为:

z=argminzU(G(z))+λ1zz02λ2D(G(z))z^* = arg\min\limits_zU(G(z))+\lambda_1||z-z_0||^2-\lambda_2D(G(z))

找到zz要令U(G(z))U(G(z))最小,UU是判别函数,判断G(z)G(z)是否符合限制条件;λ1zz02\lambda_1|z - z_0||^2要求编码zz不能偏离原图片过多,保证了内容的相似性;λ2D(G(z))\lambda_2D(G(z))越大越好,保证生成的图片真实。

下面看一个例子

Editing Photos

可以找到图片对应的z之后,我们继续来看如何进行编辑,假设现在有一个图片(上左边),和一个用户编辑的约束(上右边):

图片对应的code是z0z_0,那么最后要满足下面的式子:

z=argminzU(G(z))+λ1zz02λ2D(G(z))z^* = arg\min\limits_zU(G(z))+\lambda_1||z-z_0||^2-\lambda_2D(G(z))

  • argminzU(G(z))arg\min\limits_zU(G(z)):U代表用户做的编辑约束,这里要使得图片尽量的满足用户的编辑约束,例如用户用的红色点了一下,生成的新图片就是要红色基调,这里如何定义一个图片满足某个约束的函数由我们自己来弄。
  • λ1zz02\lambda_1||z-z_0||^2:是使得新生成的图片不能脱离原图片太远。
  • λ2D(G(z))\lambda_2D(G(z)):使得新生成的图片越真实越好。

其他应用

Image super resolution(高清图片处理)

将低清晰度的图片变成高清晰度,主要利用低清晰度和高清晰度的Pair利用Conditional GAN来训练。一般来说,大概都直接拿高清晰度来改成低清晰度资料。

👉 Christian Ledig, Lucas Theis, Ferenc Huszar, Jose Caballero, Andrew Cunningham, Alejandro Acosta, Andrew Aitken, Alykhan Tejani, Johannes Totz, Zehan Wang, Wenzhe Shi, “Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network”, CVPR, 2016

左一传统处理方法:不行,太模糊了

左二普通NN处理:效果可以,但是头饰,项圈细节还是模糊

左三GAN:效果可以,头饰,项圈细节清晰,但是这些细节和原图不一样,因为这些细节是GAN模型自己生成的,只要能骗过discriminator即可。

最后是原图

这个模型的数据比较好处理,就是找一堆高清图,处理模糊后就有数据了,因为图片清晰变模糊好弄。


Image Completion(图像补全)

这个模型的训练数据也好处理,随便找图片,然后挖空就有了。模型思想是:conditional GAN。其实方法和我们所说的Image super resolution差不多

👉 [Satoshi Iizuka - Globally and Locally Consistent Image Completion (tsukuba.ac.jp)]

下图是不同做法的效果比较,可以看到,最开始的时候,对图像进行补全是直接把空缺的部分补上,柱子其实还是挖掉的。我们现在模型可以直接将柱子给补上!

-------------本文结束感谢您的阅读-------------
六经蕴籍胸中久,一剑十年磨在手

欢迎关注我的其它发布渠道