ELEGANT: Exchanging Latent Encodings with GAN for Transferring Multiple Face

ELEGANT: Exchanging Latent Encodings with GAN for Transferring Multiple Face Attributes

abstract

最近关于面部属性转换的研究取得了巨大成功。许多模型都能够使用输入图像转换面部属性。然而,它们受到三个限制:(1)无法通过样本生成图像,导致迁移的属性多样性受限; (2)不能同时转换多个面部属性; (3)生成的图像质量低,如低分辨率或伪影。为了解决这些限制,我们提出了一种接收两个相反属性的图像作为输入的新颖模型。我们的模型可以通过交换编码的某些部分,将完全相同类型的属性从一个图像转换到另一个图像。所有属性都在潜在空间中以解耦的方式编码,这使我们能够同时操纵多个属性。此外,我们的模型学习残差图像,以便于更高分辨率图像的训练。借助多尺度判别器进行对抗性训练,它甚至可以生成具有更精细细节和更少伪影的高质量图像。我们通过与CelebA人脸数据库上的其他方法进行比较,证明了我们模型克服上述三个局限性的有效性。

主要贡献 创新点

1.能够通过测试样例图片进行人脸属性迁移而不是通过标签用0或1表示属性的有无,使得迁移的属性具有多样性
2.通过提出对图片的Latent Encoding进行交换达到属性的迁移。
3.作者网络输出的是一张残差图片,能够更加专注于局部的人脸变化。

主要思想

ELEGANT: Exchanging Latent Encodings with GAN for Transferring Multiple Face_第1张图片
模型输入是两个集合的图片:⼀个集合是正样本,另⼀个集合是负样本。比如:A 总是代表正样本的图片,具有第 i 个属性,而B 总是代表负样本的图片,不具有第 i 个属性。如上面的模型图所示,图片A 具有“微笑”这⼀属性,然而图片B没有。这里的正负样本集合是不需要配对的,也就是说,并不要求A 和B 是同⼀个人脸。实际过程中,只需要从正负样本中随机各抽取⼀张分别作为A 和B 即可。如上图所示。
为了能做按参考图的图片生成,一个模型必须接受参考图片做为条件生成的输入。之前的大多数方法采用图片标签作为条件信息来指导图像生成。但是仅仅一个标签所包含的信息是非常有限的,因为同一类的图片有很多,但是他们都共享同一个标签。换句话说,属于那一个标签的所有图片的多样性远远超过这个标签所涵盖的信息。很多图片可以被归类为有眼镜,但并不是所有的有眼镜的图片都能只从“有眼镜”这个相同的标签生成出来。多种多样的眼镜包含的信息远远大于一个标签所包含的信息,所以不能简单地用标签来作为条件输入。作者通过把图片的隐层编码作为参考信息。给定一个编码器,每一张图片的隐层被编码可以看成是图片唯一的标识。它不仅仅包含着图片的标签信息,还包含着其他很多暂且不关心的信息。和图片标签不同的是,图片标签不是图片唯一的标识,而图片的隐层编码在给定编码器的情况下是图片唯一的标识。在做条件图像生成的时候,需要加入另一张参考图片的隐层来指导生成过程。这样一来,生成图片就具有参考图片中特有的某种属性。这也就能让模型做按范例的图片生成了。
这里用一个编码器去进行编码有:
z A = E n c ( A ) = [ a 1 , . . . , a i , . . . , a n ] z_A=Enc(A)=[a_1,...,a_i,...,a_n] zA=Enc(A)=[a1,...,ai,...,an]
z B = E n c ( B ) = [ b 1 , . . . , b i , . . . , b n ] z_B=Enc(B)=[b_1,...,b_i,...,b_n] zB=Enc(B)=[b1,...,bi,...,bn]
其中n表示的是我们训练的n个属性,但是这里并不能使得每个属性能被分开分别对应到 z A z_A zA每一维。这里采用迭代训练(iterative training)的方式来对模型进行训练。假设一共有 n 个属性,每一次迭代只对一个属性进行训练,进行模型的参数更新,下一次迭代,将换另一个属性进行训练,依次下去,所有的属性将会在隐层空间分离开。
例如现在在对 i i i个属性微笑进行训练,图片A和图片B的标签为
Y A = ( y 1 A , . . . , 1 i , . . . , y n A ) Y^A=(y_1^A,...,1_i,...,y_n^A) YA=(y1A,...,1i,...,ynA), Y B = ( y 1 B , . . . , 1 i , . . . , y n B ) Y^B=(y_1^B,...,1_i,...,y_n^B) YB=(y1B,...,1i,...,ynB).
然后我们对 z A z_A zA z B z_B zB的第 i i i个位置进行交换,得到两个新的隐层编码 z C z_C zC, z D z_D zD.
z C = E n c ( A ) = [ a 1 , . . . , b i , . . . , a n ] z_C=Enc(A)=[a_1,...,b_i,...,a_n] zC=Enc(A)=[a1,...,bi,...,an]
z D = E n c ( B ) = [ b 1 , . . . , a i , . . . , b n ] z_D=Enc(B)=[b_1,...,a_i,...,b_n] zD=Enc(B)=[b1,...,ai,...,bn]
接下来就是进行解码部分,我们现在有四个隐层码 z A z_A zA, z B z_B zB, z C z_C zC, z D z_D zD.然后进行组合输入解码器:
在这里插入图片描述
这里 R A R_A RA R B R_B RB R C R_C RC R D R_D RD是残差图,通过和输入图进行相加得到最终的图。其中 A ′ A' A B ′ B' B用来进行重构。
有标签:
在这里插入图片描述
从上图可知模型还采用了U-Net的网络结构。
对于判别网络有两个网络: D 1 D_1 D1, D 2 D_2 D2,他们的网络结构是完全一样的,只是 D 1 D_1 D1用来判断高分辨率,而 D 2 D_2 D2用来判断低分辨率图片,将图片缩小输入。

损失函数

判别网络
L D 1 = − E ( log ⁡ ( D 1 ( A ∣ Y A ) ) ) − E ( log ⁡ ( 1 − D 1 ( C ∣ Y C ) ) ) − E ( log ⁡ ( D 1 ( B ∣ Y B ) ) ) − E ( log ⁡ ( 1 − D 1 ( D ∣ Y D ) ) ) L D 2 = − E ( log ⁡ ( D 2 ( A ∣ Y A ) ) ) − E ( log ⁡ ( 1 − D 2 ( C ∣ Y C ) ) ) − E ( log ⁡ ( D 2 ( B ∣ Y B ) ) ) − E ( log ⁡ ( 1 − D 2 ( D ∣ Y D ) ) ) L D = L D 1 + L D 2 \begin{aligned} L _ { \mathrm { D } _ { 1 } } = & - \mathbb { E } \left( \log \left( \mathrm { D } _ { 1 } ( A | Y ^ { A } ) \right) \right) - \mathbb { E } \left( \log \left( 1 - \mathrm { D } _ { 1 } ( C | Y ^ { C } ) \right) \right) \\ & - \mathbb { E } \left( \log \left( \mathrm { D } _ { 1 } ( B | Y ^ { B } ) \right) \right) - \mathbb { E } \left( \log \left( 1 - \mathrm { D } _ { 1 } ( D | Y ^ { D } ) \right) \right) \\ L _ { \mathrm { D } _ { 2 } } = & - \mathbb { E } \left( \log \left( \mathrm { D } _ { 2 } ( A | Y ^ { A } ) \right) \right) - \mathbb { E } \left( \log \left( 1 - \mathrm { D } _ { 2 } ( C | Y ^ { C } ) \right) \right) \\ & - \mathbb { E } \left( \log \left( \mathrm { D } _ { 2 } ( B | Y ^ { B } ) \right) \right) - \mathbb { E } \left( \log \left( 1 - \mathrm { D } _ { 2 } ( D | Y ^ { D } ) \right) \right) \\ L _ { \mathrm { D } } & = L _ { \mathrm { D } _ { 1 } } + L _ { \mathrm { D } _ { 2 } } \end{aligned} LD1=LD2=LDE(log(D1(AYA)))E(log(1D1(CYC)))E(log(D1(BYB)))E(log(1D1(DYD)))E(log(D2(AYA)))E(log(1D2(CYC)))E(log(D2(BYB)))E(log(1D2(DYD)))=LD1+LD2
生成网络
在这里插入图片描述
ELEGANT: Exchanging Latent Encodings with GAN for Transferring Multiple Face_第2张图片
L G = L r e c o n s t r c t i o n + L a b v L_G=L_reconstrction+L_abv LG=Lreconstrction+Labv
实验对比
ELEGANT: Exchanging Latent Encodings with GAN for Transferring Multiple Face_第3张图片

你可能感兴趣的:(ELEGANT: Exchanging Latent Encodings with GAN for Transferring Multiple Face)