ELEGANT:基于交换隐层编码和残差学习的人脸属性迁移

0. 前言

文章:https://arxiv.org/abs/1803.10562

代码:https://github.com/Prinsphield/ELEGANT

文章已经被ECCV 2018接收。

1. 背景介绍

人脸属性迁移,用一句简单的话来说,就是在保持人脸身份的条件下,修改图片上的某些人脸属性。如下图,从左至右,前两列是原图,后两列是修改某种人脸属性而新生成的图片。

有人会说这个任务和image-to-image translation非常像。其实image-to-image translation是一个概念,人脸属性迁移可以看成是一种特殊的图像翻译。那可能会问:这个问题有什么好做的,那直接用图像翻译不就好了?其实并不是这样。

很多人都知道style transfer,有一张content image和一张style image,我们想要生成具有content image的内容和style image的风格的图片,如下图所示。

人脸属性迁移这个任务和图像的风格迁移有着诸多异同。相同的是,这两个任务的输入和输出都是图片,也就是可以建模一个图到图的深度模型去完成这两个任务。如果这样的话,能用一个模型就把两个问题都解决吗?其实不然。他们之间最核心的差别在于图像风格迁移是一种全局的属性迁移,然而人脸属性迁移是一种局部的属性迁移。具体来讲,图像风格迁移需要对图像中几乎所有位置的像素进行修改。然而人脸属性迁移是只需要对某一部分的像素进行修改。比如,要让一张不笑的人脸迁移为笑的人脸,那么很大程度上只需要修改嘴巴附近的区域,而保持其他区域的像素值不变就可以完成这个任务。因此,人脸属性迁移是一个独特的任务,需要发掘其中的本质所在,而不能简单地照搬在其他类似任务上的方法。

2. 相关工作

以往有很多模型来做人脸属性迁移,我们可以简单地总结一下。

2.1 Deep Manifold Traversal

Gardner等人提出了一种名为深度流形穿越 (Deep Manifold Traversal) 的方法。这种方法认为在大量图片上训练分类任务的深层神经网络所提取的图片的深度特征是在一个流形上的,不同类别的图片分布在流形上的不同位置。不同人脸属性的图片其实就可以看成是不同的类别,比如非棕色头发的人脸图片和棕色头发的人脸图片其实是两个图像域,为了修改棕色头发这一人脸属性,就需要在这个流形上找到一条源图像域和目标图像域穿越路径。

如上图所示,深度流形穿越法用VGG-19网络来提取图像的深度特征。但是,由于深度特征的维度总是非常高,这个方法的特征矩阵V在实际应用中会变得非常大,所以这个方法实际中需要占用很大的内存。此外,求解两个优化问题和也非常花时间,需要分别花费132分钟和43分钟。因此,这个方法并不实用。

2.2 Deep Feature Interpolation

在线性特征空间的假设下, 等人用了一种更为简单的方式来做人脸属性迁移:直接学习特征空间从源图像到目标图像的一个属性向量,然后反解出目标图片。比如,如果想要将一张没有刘海的图片B迁移成一张有刘海的图片A,那么这个过程可以写成

其中,f 是一个从图片空间到特征空间的映射(通常是神经网络),v_bangs是属性向量。 v_bangs可由有刘海图片的特征聚类中心和无刘海图片的特征聚类中心作差得到。这个方法用两个聚类中心作差来计算属性向量,取代了深度流形穿越法中用深度特征的线性组合,使得计算过程变得非常简单高效。只需要分别收集两个图像域中的大量图片,就可以计算出这个属性向量。至于反解出目标图片,可以采取和深度流形穿越法中一样的方式。

虽然这个通用的属性向量v_bangs能把任意没有刘海的人脸图片都变成有刘海,但是这样做的结果是不同的人脸加上的刘海趋于同一种类型。也就是说,同一张人脸图片,只能生成出一种风格的刘海的图片。但是,刘海的风格有很多种,如图:有的刘海非常浓密,可以盖过前额;有些刘海非常稀疏;还有些撇向一边,等等。因此这个方法并不能满足生成图片多样性的要求。

2.3 Visual Analogy-Making

为了解决多样性的问题,Reed等人提出了一种名为视觉类比制造的方法。这种方法需要一对配对的参考图片去确定属性向量。如图,改模型需要同时有同一个人拉弓和收弓的图片,然后用神经网络去确定张开弓这一属性。在一张新来的收弓的图片时,该模型把这个属性加到新的图片上,就可以生成新的图片所对应的拉弓的图片。

这个方法可以用配对的图片去指定需要迁移的属性,这样一来,生成图片的多样性大大增加。但是这种方法需要配对的数据,这样一来,限制了这个方法的应用场景。因为在很多情况下,配对的数据是很难获得的。比如,当想要迁移性别这个属性的时候,是不可能获取同一个人男性和女性的照片。所以配对数据这一限制也成为这类方法的最大的限制。

2.4 CycleGAN

在对抗生成网络出现之后,越来越多的基于对抗生成网络的方法被提出来克服需要配对数据这一限制。人脸属性迁移这一任务可以看成是一个图像域到另一个图像域的翻译(image-to-image translation)。有属性和没有属性的图片分别落在两个不同的图像域中。很多对偶学习的方法被采用来学习源图像域和目标图像域之间的映射。这里以CycleGAN为例介绍一下这一类方法。

如图,X和Y代表两个不同的图像域,比如X可以代表有眼镜的人脸图像,Y代表没有眼镜的人脸图像。G和F是两个图像域之间的映射,通常是深度神经网络。

CycleGAN中有循环一致性(cycle consistency)的要求,即对于任意的

A∈ X, B∈ Y,要有 F(G(A))=A, G(F(B))=B ,这就说明G和F就互为逆映射。神经网络常见的运算,包括卷积,池化,反卷积等都是连续映射,而且连续映射的复合仍然连续。于是,X和Y是同胚的。根据拓扑中的域不变定理Invariance of Domain Theorem(https://en.wikipedia.org/wiki/Invariance_of_domain),可知图像域X和Y的内在维度(intrinsic dimension)是相等的。

然而,X和Y两个图像域的内在维度其实应该不一样。X的内在维度应该比Y的大,因为图像域X代表有眼镜的人脸图像,图像域Y代表没眼镜的人脸图像。人脸图像是多种多样的,同时,眼镜也是具有多样性的,比如有墨镜,透明眼镜,方框的,圆框的,等等。X在Y的基础上,需要用额外的维度去表示眼镜的信息。但是在CycleGAN的框架下,两个图像域的内在维度就应该相等,这是由模型的设计导致的。这样一来,模型训练学习出来的解就会迫使两个图像域的内在维度相等,从而抹杀图像域X中眼镜的多样性。因此,多样性的问题成为这类模型的最大的限制。

2.5 其他方法

还有一类方法其实是对抗生成网络和自编码器的组合变体。在这些模型中,自编码器充当生成器的角色。而不是像CycleGAN一样用两个映射建立起两个图像域之间的相互映射。

这样做的好处就是避免了上述的内在维度不相等的问题,并且自编码器的编码器(encoder)可以获取图像的隐层编码,方便不同方法在隐层编码上做不同的操作,再由解码器(decoder)生成出新的图片。

但是,很多这类方法只局限于处理单属性的情形,不能同时处理多个人脸属性。

为了能够同时处理多个人脸属性,许多条件图像生成的方法(如IcGAN, FaderNets, StarGAN等)被提出来。这些方法通常接受图像标签作为条件输入用来指导生成具有特定属性的图片。因为多种属性混在一起的时候,需要有明确的标签才能指定想要迁移的属性。

比如,如果想要同时控制刘海和微笑这两个人脸属性,但是没有图片的标签信息,是没有办法指定控制哪一个属性的。这些方法只是解决了同时控制多个属性的问题,但不能够做范例式的图片生成。

范例式的图片生成是指可以根据参考图片中的信息来进行图片生成。比如,在刘海这个属性迁移中,从一张没有刘海的图片生成的图片不仅仅有刘海,还需要有指定的参考图片中特有类型的刘海。

正如之前所讲,刘海也是有多种多样的。具有刘海的图片的标签是1,但是仅从标签1是不能生成丰富的各种各样的具有刘海的人脸图片。因为共有的标签抹杀了属性的多样性。

BicycleGAN引入了一个噪声项来增加多样性,但是反倒是需要配对的数据,并且也不能做范例式的图片生成。

TD-GAN和DNA-GAN能够做范例式的图片生成,但是TD-GAN需要在标签中有显示的图片身份信息,这样才能保证在属性迁移的时候图片中人物的身份没有发生改变。这样一来,就大大限制了这个方法的应用范围。

DNA-GAN存在训练不稳定的问题,尤其是在高分辨率的图片上训练时,训练不容易成功。

还有其他的一些方法,如DIAT( Deep identity-aware transfer of facial attributes),但是生成图片的质量可能不是特别理想。比如,生成的图片的分辨率可能比较低,或者具有很多伪影(artifacts)。

3. ELEGANT 模型

前面介绍了诸多现有的基于深度神经网络来做人脸属性迁移的方法。这些方法大都存在三个缺点:(1)不能做范例式图片生成;(2)不能同时处理多个属性;(3)生成图片的质量比较差。目前为止,没有一个模型可以克服以上所有缺点。ELEGANT 模型能够集成大多数的优点,并且克服这三个主要的缺点。

模型输⼊是两个集合的图⽚:⼀个集合是正样本,另⼀个集合是负样本。在本⽂的记号中,A 总是代表正样本的图⽚,具有第 i 个属性,⽽B 总是代表负样本的图⽚,不具有第 i 个属性。如上面的模型图所示,图⽚A 具有“微笑”这⼀属性,然⽽图⽚B没有。

这⾥的正负样本集合是不需要配对的,也就是说,并不要求A 和B 表⽰的是同⼀个⼈脸。实际过程中,只需要从正负样本中随机各抽取⼀张分别作为A 和B 即可。如上图所示。

为了能做按范例的图片生成,一个模型必须接受参考图片做为条件生成的输入。之前的大多数方法采用图片标签作为条件信息来指导图像生成。但是仅仅一个标签所包含的信息是非常有限的,因为同一类的图片有很多,但是他们都共享同一个标签。

换句话说,属于那一个标签的所有图片的多样性远远超过这个标签所涵盖的信息。很多图片可以被归类为有眼镜,但并不是所有的有眼镜的图片都能只从“有眼镜”这个相同的标签生成出来。多种多样的眼镜包含的信息远远大于一个标签所包含的信息,所以不能简单地用标签来作为条件输入。

那么应该怎么做呢?把图片的隐层编码作为参考信息。给定一个编码器,每一张图片的隐层被编码可以看成是图片唯一的标识。它不仅仅包含着图片的标签信息,还包含着其他很多暂且不关心的信息。

和图片标签不同的是,图片标签不是图片唯一的标识,而图片的隐层编码在给定编码器的情况下是图片唯一的标识。

在做条件图像生成的时候,需要加入另一张参考图片的隐层来指导生成过程。这样一来,生成图片就具有参考图片中特有的某种属性。这也就能让模型做按范例的图片生成了。

我们用一个编码器Enc去获取图片A和图片B的隐层编码,分别记作 z_A 和 z_B。

其中 n 表示训练的属性个数,a_i 或 b_i 是特征张量,用来编码图片A或图片B的第 i 个属性。在实际操作中,不同属性是沿着 z_A 或 z_B 的通道那一维来划分。

但这么做并不就能保证每个属性的信息被编码到不同的位置。这种分离的表示需要通过训练才能学出来。如何保证学出来的表示各个属性是相互分离的呢?这里采用迭代训练(iterative training)的方式来对模型进行训练。假设一共有 n 个属性,每一次迭代只对一个属性进行训练,进行模型的参数更新,下一次迭代,将换另一个属性进行训练,依次下去,所有的属性将会在隐层空间分离开。

假设现在正在对第 i 个属性微笑进行训练,图片A和图片B的标签应该分别具有下面的形式

也就是说输入的两张图片的标签在第 i 个位置上应该不同。然而在其他位置上,图片A和图片B的标签没有限制。

得到 z_A 和 z_B 之后,对他们中第 i 个位置进行交换,从而得到两个新的隐层编码 z_C 和 z_D

这么做的目的是:希望 z_C 代表图片A不笑的版本的隐层,z_D 表示图片B笑的版本的隐层。

接下来需要做的就是设计一种合理的结构来讲隐层表达翻译成想要的图片。让网络学习残差图像,可以减少生成器的负担,加速训练过程,提高图片生成的质量。在这里用一个解码器Dec来学习残差图片。注意到Dec的输出是残差图片,所以输入也应该变成残差这样才比较合理。但是其实可以不用显示地作差,只需要联结(concatenation)两个隐层作为输入就可以达到相同的效果。因为作差这个运算可以被网络自动学习,所以联结是一种更一般的操作。具体地,

其中 R_A, R_B, R_C, R_D 是Dec输出的残差图片,A' 和 B' 是重构图片,C和D是具有新的属性的人脸图片,[z_C, z_A] 表示将隐层表示 z_C 和 z_A 沿着通道那一维联结在一起。

除此之外,模型采用U-Net的结构,引入短路边能生成更好效果的图片。

Enc和Dec一起扮演了对抗生成网络中生成器(generator)的角色。为了使得整个模型有效,还需要引入判别器(discriminator)用于对抗训练。然而,单个判别器的感受野是非常有限的,尤其是当训练图片的尺寸变大之后。为了解决这个问题,本文采用多尺度的辨别器(multi-scale discriminators):两个网络结构完全相同的判别器,但是他们输入图片的大小有所区别,如上图所示。

在这里,D_1 表示处理更大分辨率图片的判别器,D_2 表示处理更小分辨率图片的判别器。原图直接作为 D_1 的输入,进行缩小之后作为 D_2 的输入。D_1 专注于指导Enc和Dec生成更好的细节,因为它在原图上能捕捉很多细节信息。D_2 能够宏观把握生成图片的全局信息,因为它在原图上能获取更大感受野的信息。

由于C和D只交换了第 i 个属性,所以A, B, C, D在条件判别器这里对应的label分别是

讲到这里,损失函数就很明确了。

对于判别器,它的loss就是条件判别图像真伪:

对于生成器(Enc+Dec)来说,loss有重构,也有对抗:

与DNA-GAN相比,ELEGANT不再需要零化(annihilating)操作,也不需要nulling loss。

4. 实验

实验在CelebA上进行,图片大小为256x256。下面是各位大佬们的表演时间。

需要说明的是,归一化层不采用batch normalization的方式,这是因为在这里,解码器需要同时对一批有属性和一批没属性的数据进行训练,而这两批数据在编码器或者解码器中间层的moving mean和moving variance肯定差别非常大的。如果用batch normalization的话,moving mean和moving variance肯定一直在震荡,不会趋于收敛。

虽然这样做对训练的影响不大,但是在训练好之后用来推理的时候,归一化的时候用的是训练中存好的moving mean和moving variance,而moving mean和moving variance没有收敛,因此会影响测试的时候的效果。这里采用的归一化是按照 l2 范数归一化,

其中α 和 β是可学习的参数。

4.1 按范例的人脸图片生成

按范例的⼈脸图⽚⽣成效果如下图所示。黄⾊的框表示训练集外的输⼊图⽚,绿点的框表示参考图⽚。红⾊和蓝⾊的框分别表示ELEGANT和其他对⽐⽅法⽣成出来的图⽚。

这里需要提一下StarGAN的一些缺点。不能做范例的人脸图片生成这点已经是一个弱点。除此之外,StarGAN在测试的时候需要把图片的label一起送进模型,这样才能修改属性。但是测试图片经常是训练集之外的图片,那对这些图片做test的时候岂不是还要人肉label吗?所以,从这个角度来看,StarGAN是不实用的。

另外,需要test label带来的另一个硬伤也是不容忽视的。StarGAN可以同时做多个属性的迁移,如下图,我在7个属性上训练的StarGAN,然后只用来修改微笑这一个属性。根据刚才说的,StarGAN做test的时候需要label,那7个属性之中有一个是young/old,我觉得李飞飞不算老吧,标个young好了,可是StarGAN生成出来的图片把年龄这个属性也改了,生成的李飞飞变得更加年轻了,emm,但是我其实只想给她换个发型。如果我给label成old,李飞飞估计要满脸皱纹地来骂我了。

所以,StarGAN需要unambiguous的label,显然这是不科学的。因为很多0/1标签并不能精细地描述一个属性。而我们的ELEGANT用图片作为参考,在test的时候不需要label,而且只修改你想改的属性,其他的属性自动保持不变。

加刘海。李飞飞,Andrew NG,Lecun,Torralba等大佬躺枪:

加微笑。Bengio,Hinton,Malik,Zisserman等大佬们笑起来:

按不同类型的刘海范例的⼈脸图⽚⽣成。左上⾓的图⽚是原图,其他三个⾓落的图⽚是三张具有把不同类型刘海的范例图⽚。中间的16 张图⽚都是在这三种类型的刘海之间的插值所得到的图⽚。下图中大佬为:NG,Bengio,Goodfellow,孙剑。

4.2 同时控制多人脸属性

多属性插值实验。左右两列分别是ELEGANT 和DNA-GAN 的实验结果。对于每张图,左上⾓的图⽚是原图,左下⾓和右上⾓分别是第⼀个属性和第⼆个属性的参考图⽚。原图分别沿着两个⽅向进⾏插值,纵向是第⼀个属性的渐变过程,横向是第⼆个属性的渐变过程。右下⾓的图⽚同时具有两个属性。下图是ELEGANT和DNA-GAN的对比。请查看原文以获得更好的视觉对比效果。

更多的对比实验和效果展示,请参看原文。

最后谈几点insights吧。

学残差图片是抓住了人脸属性是一个局部特征这个本质而想到的,我们的网络结构非常简单,也没有什么尝试或改动,可以参考代码。因为我们想要抓住问题本质,而不是换各种网络结构去提升生成图片的质量。

在这个特定问题下,学习残差图片意义重大。大家知道GAN不好训,这种困难来自于Generator和Discriminator博弈中的不平衡。DNA-GAN训练初期,G的输出几乎是noise,那么D这个时候很容易判别出生成图片和真实图片。于是D很快就训好,G还一脸懵逼找不到梯度,一直处于被碾压的状态。这样一来,训练很容易不平衡。但是在ELEGANT学习残差图片之后,G一开始的输出会和输入差不多,已经是一张比较像样的人脸图了,这时候D没有那么容易把生成图和真实图片分辨出。这样,G和D才能更加平衡地进行博弈,达到更好的效果。

另一方面,当在更高分辨率图片上训练的时候,G的负担会加重,因为它的输出空间变大了,而D的负担没有那么大,输出还是一个数,就是网络多了几层而已。G心里有苦难言啊。为了给它减轻负担,残差学习的思想又来了。人脸属性具有局部的性质,那么我们不让G生成整张图好了,只让他学需要改的属性的那一部分就可以。这样一来,G的输出空间一下子就减小了许多。轻轻松松做高分辨率了。

残差学习还可以帮助保持人脸ID。在DNA-GAN中,为了保持人脸ID不变,需要用额外的一部分隐层去编码ID和背景的信息,然后在交换的时候还要用一个annihilating operation来防止生成trivial solution(详见论文,就是直接把人脸交换,而没有把属性交换)。这个操作非常迷,虽然能够防止trivial solution,但是也把模型的参数空间进行了扭曲,造成了一些训练的问题,而且在test的时候属性可能去不干净。利用残差学习,输入图片不会改太多,人脸ID自动就得以保持。而且不需要再交换的时候引入annihilating operation,使得模型更加elegant(优雅)。

关于normalization。我们之前发现了Batch-normalization在ELEGANT这个框架下会有问题。因为输是两个batch,G要同时处理两拨具有相反属性图片,moving mean和moving var 肯定差别很大,一直会震荡,测试的时候会出问题。为了解决这个问题,我自己随便拍个脑袋,用按范数的normalization,这样就没有moving mean和 moving var了,问题一下子得到解决。

隐层分离表示。这个虽然是从GeneGAN中获得的启发,然后有了DNA-GAN,到现在的ELEGANT,但是一直是一个非常好的想法。用unpaired的data去feed model,然后通过在隐层交换对应属性的部分,进行iterative training,最后能够encode不同属性的信息,这个我觉得很elegant,我也相信可以用来做更多的事情。

参考文献

Xiao T, Hong J, Ma J. ELEGANT: Exchanging Latent Encodings with GAN for Transferring Multiple Face Attributes. European Conference on Computer Vision. (2018)

Gardner, J.R., Upchurch, P., Kusner, M.J., Li, Y., Weinberger, K.Q., Bala, K., Hopcroft, J.E.: Deep manifold traversal: Changing labels with convolutional features. arXiv preprint arXiv:1511.06421 (2015)

Upchurch, P., Gardner, J., Bala, K., Pless, R., Snavely, N., Weinberger, K.Q.: Deep feature interpolation for image content changes. arXiv preprint arXiv:1611.05507 (2016)

Reed, S.E., Zhang, Y., Zhang, Y., Lee, H.: Deep visual analogy-making. In: Advances in neural information processing systems. (2015) 1252-1260

Zhu, J.Y., Park, T., Isola, P., Efros, A.A.: Unpaired image-to-image translation using cycle-consistent adversarial networks. arXiv preprint arXiv:1703.10593 (2017)

Shen, W., Liu, R.: Learning residual images for face attribute manipulation. In: 2017 IEEE Conference on Computer Vision and Pattern Recognition (CVPR), IEEE (2017) 1225-1233

Zhou, S., Xiao, T., Yang, Y., Feng, D., He, Q., He, W.: Genegan: Learning object transfiguration and attribute subspace from unpaired data. In: Proceedings of the British Machine Vision Conference (BMVC). (2017)

Choi, Y., Choi, M., Kim, M., Ha, J.W., Kim, S., Choo, J.: Stargan: Unified generative adversarial networks for multi-domain image-to-image translation. arXiv preprint arXiv:1711.09020 (2017)

Zhu, J.Y., Zhang, R., Pathak, D., Darrell, T., Efros, A.A.,Wang, O., Shechtman, E.: Toward multimodal image-to-image translation. In: Advances in Neural Information Processing Systems. (2017) 465-476

Wang, C., Wang, C., Xu, C., Tao, D.: Tag disentangled generative adversarial network for object image re-rendering. In: Proceedings of the Twenty-Sixth International Joint Conference on Artificial Intelligence, IJCAI. (2017) 2901-2907

Xiao, T., Hong, J., Ma, J.: Dna-gan: Learning disentangled representations from multi-attribute images. International Conference on Learning Representations, Workshop (2018)

Li, M., Zuo, W., Zhang, D.: Deep identity-aware transfer of facial attributes. arXiv preprint arXiv:1610.05586 (2016)

Gatys, L.A., Ecker, A.S., Bethge, M.: A neural algorithm of artistic style. arXiv preprint arXiv:1508.06576 (2015)

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180710G11GM100?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

同媒体快讯

扫码关注云+社区

领取腾讯云代金券