属性驱动以及身份保留的人脸生成的卷积网络
摘要:
本文聚焦于从特定的属性来生成人脸图片的问题。但是现有的基于卷积神经网络的人脸生成模型要么忽略了生成人脸的身份,要么不能保留参考人脸图片的身份。这里我们从优化的角度来处理这个问题,并且提出一种优化模型在生成有给定属性的人脸的同时保留参考图片的身份。属性信息可以从属性指导图片中获得,也可以通过调整参考图片的属性特征获取。利用卷积网络“VGG-Face”,损失被定义在卷积特征图上。接着,我们应用梯度下降算法来解决这个优化问题。结果证实了我们方法在属性驱动以及身份保留的人脸生成有效性。
原文地址:https://arxiv.org/abs/1608.06434
本文中提出的是一个利用现有的生成模型,通过修改Loss的设计来完成一个人脸属性转换,并且转换后依旧保持自己的身份信息的方法。本文提出的图片生成框架如下图所示,这个框架比较简单,只需要关注的部分是图片生成的部分,图片是采用VGG-FACE生成的,无论是从图中,还是从文中的描述,图片是采用的VGG的反向传播,从一张空白图片开始,然后到最终产生的图片的(这可能是除了显存了生成模型,比如AutoEncoder,隐马尔科夫链,GAN等生成架构之外的生成模型)。
模型架构
本文的目的并非要提出一种新的生成模型,而是借助已有的模型,在Loss设计优化上,来提升生成图片的效果,因而这个图片生成的过程没有在文中细述。文章认为,人脸属性转换的图片需要三个部分的Loss来约束生成的图片,一个是属性的Loss项,用来约束转换后的人脸图片中必须含有指定的属性;一个是身份信息的Loss项,用来确保转换后的人脸图片保持输入图片(文中称为参考图片)的身份信息;最后一个是正则项,用来保证生成的图片平滑而锐利。
为此,文章首先提出了感知Loss的概念,文中提出的感知Loss是就属性和身份信息而言的,一种高语义层面的Loss,并不是像素级别的Loss,因此这个Loss建立在卷积层的特征图上。文中采用的是VGG-Face的模型,采用了前5层的卷积层来提取特征图用以定义Loss,至于为什么只用前5层,文中实验部分也探究了一些,更深的卷积层会使得生成的图片视觉效果更差。感知loss的具体定义如下图所示,采用的是某层的卷积特征图的差值的平方。
基于上述的感知Loss设计,文章开始定义上述的三个部分的Loss项的设计。
属性Loss
这部分主要是约束给定输入图片,产生的图片要包含给定的属性引导集中属性。因而,首先产生的问题是,怎样产生这样的属性引导集,因为给定的属性引导集,其中的人脸虽然具有想要生成的属性,但是也可能带来其他与输入的人脸不一样的属性。为了处理这样的问题,文中首先提出从LFW数据集中提取属性子集作为属性引导集的算法。
提取属性子集,首先提取的是有对应属性标签的子集,然后在姿势和内容两个方面比较该子集中的图片与输入人脸图片的相似度,从而提取最相似的前k个图片作为属性引导子集。
姿势相似度基于人脸的68个landmark来定义的,其具体定义如下:
内容相似度基于上述的感知Loss设计,在定义了姿势和内容相似度,上述提取的属性子集每张图片与输入图片Ir计算相似度如下定义,公式中Dp就是上述的姿势相似度,而另一个就是内容相似度:
其中α是一个权衡参数,取值在0到1之间。这样从原有的属性子集中提取出最相似的k个图片,从而组成属性引导集。那么,属性Loss就定义在这样的引导集上,其具体定义为:
其中Si为属性引导集中的图片,一共k张,Wi为Si的权重,k个权重的和为1;这里的Loss依旧定义在之前提及的感知Loss设计下。
身份Loss
这个Loss项采用了上述提到的感知Loss设计,来约束生成的图片要和输入的图片尽可能相似:
至于正则项部分,文中直接采用了比较常见的Total Variation(TV) Loss。
最终生成模型的Loss设计如下:
其中I是生成的图片,λ是身份Loss的权衡参数,γ是TV loss的权衡参数。文中采用的是梯度下降算法来优化这个问题(既然是优化问题,这里可以知道,不只是梯度下降算法来解决优化问题)。具体优化算法如下:
但在实际场景中,文中作者发现了这样算法存在两个问题,一个是属性引导集,并不可能找到与输入人脸特别相似的图片,这样会导致产生的图片质量下降;另一个就是卷积层和池化处理丢失了颜色信息,导致生成的图片颜色质量不好,由此文中开始着手解决这两个问题。
解决属性引导集不相似问题:
文中引入了属性掩码M来限制属性Loss作用的区域,这样的属性掩码依旧定义在人脸的68个landmark中,以某些landmark包围的一个凸包区域,这样之前提及的属性Loss就可以修改为:
M为属性掩码,对于多个属性,那么属性掩码是这几个属性的组合。其与I做像素级的相乘,对应的梯度也修改如上图所示。
颜色变化问题的解决
由于卷积和池化的操作,导致生成的图片颜色看起来不真实,文中为了处理这样的问题,设计了一个线性的颜色转换,将生成的图片颜色转换到输入图片的颜色空间。这种颜色空间的转换,并不是在常用的RGB色彩域上进行的,而是在YCbCr色彩域上进行的。定义转换如下:
其中转换矩阵A是通过最小化如下平方项更新的,其中y是输入图片,t是输出的图片,也就是保证两者在像素级别的色彩空间上通过转换后,尽可能一致
同时为了减少计算量,y和t都分别采样中心位置的1000个像素进行计算,因而t采样后记做X’,y采样后记做Y’,那么A计算为:
文中设计的实验基于LFW人脸数据集,测试的产生戴眼镜,闭嘴,张嘴,尖鼻子,大鼻子和微笑,一共6种属性,并且都分别给出了实验结果,但是没有和任何其他方法进行比较。
除了上述属性转换的实验,作者近一步探究了用VGG网络中不同的层的feature map来定义Loss函数,以此来说明之前选择感知Loss的VGG层数的问题。可以在对比的实验中看出,选择比较少的层数的VGG来定义Loss,会使得生成的图片的属性不明显,而使用深层的VGG会使得生成的图片属性明显,但是本身图片质量不佳。
与此同时,探究了TV Loss之前的权衡参数,如果没有TV Loss参与训练,生成的图片有大量噪声,但是TV Loss的权衡参数γ=1又会使得图片过于平滑而变得模糊,并且作者给出的对比试验中兼顾不模糊也少噪声的γ=0.1。
总结:
本文并不是提出了新的生成模型,而是简单的分析并设计了用于生成模型的Loss,其主要设计的是一个利用VGG的某些卷积层信息定义的感知Loss,并在此之上,根据实际生成图片的情况,提出了属性Mask和颜色转换矩阵的办法,近一步提升生成图片的质量。
网友评论