如今,深度学习可以在图像合成和处理领域产生惊人的效果。我们已经看到了这样一些例子:使想象中的人产生幻觉的网站,展示名人说从未说过的话的视频,以及使人们跳舞的工具。这些例子都足够的真实可以愚弄我们大多数人。其中一个新颖的壮举是FaceShifter[1],这是一个深度学习模型,它可以在优于最新技术的图像中交换人脸。在本文中,我们将了解它是如何工作的。
问题陈述
我们有一个源人脸图像Xₛ和一个目标人脸图像Xₜ,我们希望生成一个新的人脸图像Yₛ,它具有Xₜ(姿势、照明、眼镜等)的属性,但具有Xₛ中的人的身份。图1总结了这个问题陈述。现在,我们继续解释模型。
图1。换脸的问题陈述。显示的结果来自于FaceShifter模型。改编自[1]。
FaceShifter模型
FaceShifter由两个网络组成,称为AEI网和HEAR网。AEI网络生成一个初步的面部交换结果,HEAR网络对该输出进行优化。让我们将两者分开进行分析。
AEI网络
AEI网是"自适应嵌入集成网络"的缩写。这是因为AEI网络由3个子网络组成:
- 身份编码器:一种将Xₛ嵌入到描述图像中人脸身份的空间的编码器。
- 多级属性编码器:一种将Xₜ嵌入到一个空间中的编码器,该空间描述了交换面时要保留的属性。
- AAD生成器:将前两个子网的输出集成起来,生成Xₜ中的面孔与Xₛ的标识交换的生成器。
AEI网络如图2所示。让我们把它的细节具体化。
图2。AEI网的体系结构。改编自[1]。
身份编码器
该子网络将源图像Xₛ投影到低维特征空间。输出只是一个向量,我们称之为zᵢ,如图3所示。这个向量在Xₛ中编码面部的身份,这意味着它应该提取我们人类用来区分不同人面部的特征,比如眼睛的形状、眼睛和嘴的距离、嘴的弯曲度等等。
作者使用预先训练过的编码器。他们使用了一个经过训练的人脸识别网络。这有望满足我们的要求,因为区分人脸的网络必须提取与身份相关的特征。
图3。身份编码器。改编自[1]。
多级属性编码器
该子网络对目标图像X进行编码。它产生多个向量,每个向量以不同的空间分辨率描述Xₜ的属性,一般有8个特征向量,称为zₐ。这里的属性是指目标图像中的面部结构,如面部的姿势、轮廓、面部表情、发型、肤色、背景、场景照明等。如图4所示,它是一个具有U型网络结构的ConvNet,其中,输出向量仅仅是上尺度/解码部分中的每一级的特征映射。请注意,此子网络未预先训练。
图4。多级属性编码器体系结构。改编自[1]。
将Xₜ表示为多个嵌入是必要的,因为在单个空间分辨率下使用一个嵌入将导致生成交换面的所需输出图像的信息丢失(即,我们希望从Xₜ保留太多精细细节,这使得压缩图像不可行)。这一点在作者所做的消融研究中很明显,他们试图仅使用前3个zₐ嵌入而不是8个zₐ嵌入来表示Xₜ,这导致图5中的输出更加模糊。
图5。使用多个嵌入来表示目标的效果。如果使用前3个zₐ嵌入,则输出为压缩的;如果使用所有8个嵌入,则输出为AEINet。改编自[1]。
AAD生成器
AAD生成器是"自适应注意非规范化生成器"的缩写。它综合了前两个子网的输出以提高空间分辨率,从而产生AEI网的最终输出。它通过叠加一个新的块AADResblock来实现,如图6所示。
图6。左图中的AAD生成器体系结构,右图中的AAD Resblock。改编自[1]。
这个块的新部分是AAD层。我们把它分成3部分,如图7所示。从较高的层次上讲,第1部分告诉我们如何编辑输入特征映射hᵢ,使其在属性方面更像Xₜ。具体地说,它输出两个张量,其大小与hᵢₙ的大小相同,一个张量包含与hᵢₙ中的每个单元格相乘的缩放值,另一个张量包含移位值。第1部分图层的输入是属性向量之一。同样,第2部分将告诉我们如何编辑特征地图hᵢ,使其更像Xₛ。
图7。AAD层的体系结构。改编自[1]。