FaceShifter
换脸是最近一两年比较火的应用,例如2019年一夜爆红的App ZAO,玩过的小伙伴估计对她的惊艳效果还记忆犹新。
所谓换脸,就是有源图像A和目标图像B,把A中的人脸身份信息迁移到人脸B中,同时保留图B中的人脸姿态、表情、背景等信息。换脸简单,但是要换得清晰、自然、毫无违和感还是相当难的。
FaceShifter提出了一个基于两阶段法的具有高真实感和遮挡感知的换脸算法。第一个阶段包含一个叫做Adaptive Embedding Integration Network(AEI-Net)的GAN网络,用于生成置换的人脸,先通过属性编码器提取目标人脸的多尺度属性,然后利用包含Adaptive Attentional Denormalization (AAD)层的生成器自适应地将人脸身份和属性在合成人脸时集成进来,从而生成高真实感的置换之后的人脸。第二个阶段处理脸部遮挡问题,通过一个新颖的Heuristic Error Acknowledging Refinement Network (HEAR-Net),自监督地改进不自然的人脸区域。
Methods
FaceShifter的输入包含两种图片,源图source image 和目标图target image ,源图提供人脸身份信息,目标图提供人脸属性信息,包括姿态、表情、光照和背景等。首先AEI-Net网络生成高置信度的换脸结果,然后HEAR-Net网络进一步改进得到最终的结果。
AEI-Net
AEI-Net (Adaptive Embedding Integration Network)用于生成置换后的人脸图片,其应该包含源图中的人脸身份信息,同时包含目标图片中的属性,如姿态、表情、光照和背景等。整个网络如下图所示,主要包含3个部分:
Identity Encoder :提取源图片中的人脸身份信息
Multi-level Attributes Encoder :提取目标图片的属性信息
Adaptive Attentional Denormalization (AAD) Generator:生成置换的人脸图片
Identity Encoder
身份编码器是一个预训练的人脸识别模型ArcFace,使用最后一个全连接层之前的特征向量作为人脸的身份信息。
Multi-level Attributes Encoder
多尺度属性编码器类似U-Net结构,用于提取目标图的多尺度属性信息
其中表示U-Net编码器的第层特征图。
AAD生成器
AAD(Adaptive Attentional Denormalization)生成器用于将和中的信息结合起来生成,其主要结构是AAD层,见上图(c)。其输入为,首先做Instance Normalization
然后从分出3个独立分支:
-
attributes embedding integration:假设属性嵌入(attributes embedding)为一个大小为的3D张量,为了集成该属性,作者首先对进行去归一化,然后计算一个属性激活(attributes activation):
其中和是对卷积得到的调整参数。
-
identity embedding integration:假设身份嵌入(identity embedding)为长度为的向量,同样计算一个身份激活(identity activation):
其中和是从通过全连接层得到的两个调整参数。
adaptively attention mask:为了自适应地调整属性集成和身份集成的有效区域,使得两者能够合成不同的人脸区域,作者在AAD层中加入了attention机制,即从通过卷积和sigmoid激活生成一个attentional mask ,其值介于0到1之间。
最后再通过权重,将和做element-wise combination:
损失函数
AEI-Net的损失函数主要由4个部分组成:
其中
是对抗损失,使得生成的图片尽可能真实
-
为身份保留损失(identity preservation loss),用于保留源图片中的人脸身份信息:
-
为属性保留损失(attributes preservation loss),用于保留目标图中的属性信息:
-
是当源图片和目标图片为同一张图片时的重建损失:
HEAR-Net
虽然AEI-Net能够很好地保留目标图片的属性信息,但是对于目标图中存在的遮挡物很难保留。前人为了解决这个问题一般会训练一个人脸分割网络,但这需要大量的标注,而且这种有监督训练对于训练集中不存在的图片很难处理。
当目标人脸有遮挡物时,这些遮挡物在置换后的人脸上可能会消失,如下图所示。同时作者发现,如果源图和目标图完全相同,遮挡物同样可能消失,此时重建的图片和输入图片之间的误差,作者称为启发式误差(Heuristic Error),蕴含了遮挡信息。基于此,作者提出HEAR-Net(Heuristic Error Acknowledging Refinement Network),来进一步完善置换的人脸图片。
HEAR-Net的网络结构如上图所示,首先计算目标图片的启发式误差
然后将和AEI-Net的结果送入一个U-Net结构,输出最终完善的结果:
损失函数
HEAR-Net的损失函数包含3个部分:
其中
-
是身份保留损失,与第一阶段一致
-
是变化损失,使得两个阶段生成的图片具有一致性
-
是重建损失,表示当源图和目标图一致时,HEAR-Net生成的图片必须能够重建输入图片
下面是HEAR-Net改进的效果,对于遮挡情况改善还是很明显的。
Experiments
实现细节
对于每张图片,首先根据检测的5个人脸关键点,对人脸进行对齐和裁剪,得到大小并带有部分背景的人脸图片。
AEI-Net在CelebA-HQ, FFHQ和VGGFace数据集上训练,HEAR-Net在启发式误差大于10%的数据中进行训练,并通过渲染叠加一些遮挡物做了数据增广。
结果比较
作者比较了其与众多方法的结果,包括FaceSwap,DeepFakes,IPGAN和Nirkin et al.的方法,由于这些方法都是先合成人脸内部区域,然后将其与目标人脸融合,所以置换后的人脸保持了目标人脸的轮廓形状,而且这些方法对于光照、遮挡等无法处理。作者的方法完全没有这些问题,能够生成高置信度的换脸结果。
同时作者也做了一些定量的比较,本文提出的FaceShifter方法在人脸置换后身份的保持,人脸姿态和表情的保留方面均好于其他方法。
下面是其他一些结果
参考
- FaceShifter: Towards High Fidelity And Occlusion Aware Face Swapping. Lingzhi Li, Jianmin Bao, Hao Yang, Dong Chen, and Fang Wen. ArXiv, 2019.
- https://github.com/deepfakes/faceswap
欢迎关注公众号“人脸人体重建”,和您分享值得关注的人脸人体相关技术最新文章。