DeepFaceLab 人脸交换框架

源代码:https://github.com/iperov/DeepFaceLab

摘要

DeepFaceLab是一个开源的deepfake系统,由iperov创建,用于在Github上与3000多个分叉和14000个星星交换人脸:它为那些不需要全面理解深度学习框架或需要模型实现的人提供了一个必要且易于使用的管道,同时为那些需要使用其他特性来增强自己的管道而无需编写复杂的样板代码的人提供了一个灵活且松散的耦合结构。在本文中,我们详细介绍了驱动DeepFaceLab实现的原理,并介绍了它的管道,通过管道的每个方面都可以被用户轻松地修改,以实现他们的定制目的。值得注意的是,DeepFaceLab可以实现高保真的结果,并且确实不被主流伪造检测方法所识别。

引言

  • 提出了一个由成熟度管道组成的先进框架,旨在实现逼真的人脸交换结果。
  • DeepFaceLab在2018年将代码开源,始终紧跟计算机视觉领域的进展,为主动和被动地防御深度造假做出了积极贡献,引起了开源社区和VFX领域的广泛关注。
  • DeepFaceLab引入了一些高效的组件和工具,因此用户可能希望在DeepFaceLab的工作流程中有更多的灵活性,同时及时发现问题。

DeepFaceLab 的特点

DeepFaceLab提供了一个新的基于纯TensorFlow[1]的高级深度学习框架,旨在解决一些常用的高级框架如Keras[3]和plaidML[29]带来的不必要的限制和额外的开销。iperov将其命名为Leras:打火机Keras的缩写。Leras的主要优点是:

  • Leras通过提供python风格来做模型工作,类似于PyTorch(即定义层、组合神经模型、编写优化器),但以图模式(没有急切执行),减轻了研究人员和从业者的负担。
  • 通过使用Leras代替Keras,培训时间平均减少约10 - 20%。
  • 切换到纯Tensorflow的动机是Keras和plaidML不够灵活。此外,它们在很大程度上是过时的,不能完全控制张量的处理方式

DeepFaceLab提供了完整的命令行工具,人们可以实现平滑和逼真的脸交换结果不需要精心挑选的特性,如果他们遵循工作流程的设置,但只有两个文件夹的需要:源(src)和目标(dst)而不需要对src和dst之间的相同的面部表情。在某种程度上,DeepFaceLab可以像傻瓜相机一样工作。此外,根据DeepFaceLab用户的许多实际反馈,需要一个高度灵活和定制的人脸转换器,因为有很多复杂的事情需要处理:照明灯、雨、被玻璃隔开、面部受伤和许多其他情况。因此,转换阶段采用了交互式模式,这减轻了deepfake生产者的工作量,因为交互式预览可以帮助他们观察他们在更改各种选项和启用/禁用各种功能时所做的所有更改的效果。

为了充分发挥CPU和GPU的潜力,增加了一些实用的措施来提高性能:多GPU支持,半精度训练,使用固定CUDA内存来提高吞吐量,使用多线程来加速图形操作和数据处理

为了加强DeepFaceLab工作流程的灵活性,并吸引研究社区的兴趣,用户可以自由更换DeepFaceLab的任何组件,不满足其项目的需求或性能要求,因为DeepFaceLab的大部分模块设计为可互换。例如,人们可以提供一种新的人脸检测器,以实现在检测极端角度或远区域的人脸时的高性能。一般情况下,很多DeepFaceLab的大师倾向于定制自己的网络结构和训练范式,例如PGGAN[13]的渐进式训练范式结合LSGAN[19]或WGAN-GP[9]的特殊损失设计。

流程

提取

包含了人脸检测、人脸对齐和人脸分割等多种算法和处理部分。提取过程完成后,用户将从输入的数据文件夹中得到精确的蒙版和面部地标对齐的人脸,这里使用src进行说明。另外,由于DFL提供了多种人脸类型(即半脸、全脸、全脸),这些类型代表了提取的人脸覆盖区域。除非另有说明,默认取全脸。

  1. 人脸检测 提取的第一步是在给定文件夹src和dst中找到目标面。DFL使用S3FD[34]作为默认的人脸检测器。显然,您可以选择任何其他的人脸检测算法来替代S3FD为您指定的目标,即RetinaFace [5], MTCNN[33]。

  2. 人脸对齐 第二步是人脸对齐,经过多次实验和失败后,我们需要找到一种能够在一段时间内保持稳定的人脸地标算法。DFL提供了两种典型的人脸地标提取算法来解决这一问题:(a)基于热图的人脸特征算法2DFAN2和(b)基于3D人脸先验信息的PRNet6。在提取人脸标志后,我们提供了一个可选的、可配置时间步长的函数,在一个镜头中平滑连续帧的人脸标志。然后采用Umeyama[28]提出的经典点模式映射变换方法计算人脸对齐的相似变换矩阵。此方法在计算相似变换矩阵时需要标准的面部地标模板,DFL提供了三种标准对齐的面部地标模板:前视图和侧视图(左、右)。值得注意的是,DFL可以根据得到的人脸地标自动确定欧拉角,可在不需要人工干预的情况下选择正确的人脸地标模板。

  3. 人脸分割 面对齐后,得到一个脸为标准正面/侧面对齐src的数据文件夹。我们利用细粒度的脸部分割网络(TernausNet[10])在对齐的脸部src之上,通过它可以准确地分割出有头发、手指或眼镜的脸部。它是选择性的,但有用的,旨在消除不规则遮挡,以保持网络在训练过程中对手,眼镜和任何其他可能以某种方式覆盖脸部的物体的健壮性。在DFL中引入了XSeg模型。XSeg现在允许每个人通过少数镜头学习范式训练自己的模型来分割特定的面集(对齐的src或对齐的dst)。例如,如果一个面集有大约2000张图片,它就足以手工标记出最具代表性的50-100个样本。然后,XSeg在这些人工标记的对上进行训练,以达到所需的分割质量,并将其推广到整个面集。 需要说明的是,XSeg(可选)只在使用whole-face类型或需要从full-face类型的掩码中移除障碍物时才需要。

按照上面的流程执行,我们得到了DFL下一阶段训练所需要的一切:从src中裁剪出与原始图像中对应的坐标、面部地标、对齐的面孔和像素级分割掩码(由于dst的提取过程与src相同,因此无需详细说明)。

训练

训练是实现DeepFaceLab逼真人脸交换结果的最重要的步骤。由于不要求对齐src和对齐dst的面部表情被严格匹配,我们的目标是设计一个简单和高效的算法范式来解决这个未配对的问题,同时保持生成的人脸的高保真度和感知质量。如图3a所示,DF由一个Encoder和一个Inter组成,后者在src和dst之间共享权值,另一个Decoder分别属于src和dst。通过共享编码器和Inter实现了src和dst的泛化,轻松解决了不配对问题。 如图3(b)所示,LIAE是一个更复杂的结构,具有一个共享权重的编码器、解码器和两个独立的Inter模型。

3

无需编写过多的样板代码,我们减少了用户设计自己的训练范例或网络结构的负担,特别是,用户可以添加额外的中间模型来混合src和dst的潜在表示形式(即LIAE),或者当用户选择使用GAN范式进行训练时,允许自定义鉴别符(即多尺度鉴别符[12]或RealnessGAN鉴别符[31])放在解码器之后,以减轻生成面孔的语义鸿沟,特别是在数据集数量有限的情况下src和dst。

此外,与deepfakes和其他换脸框架的固定分辨率限制不同,我们可以通过调整训练部分的模型定义设置来生成高分辨率的图像,并将其推广到不同的输出分辨率,通过DFL干净、清晰的界面,这是相当容易的。

转换

在src2dst的情况下,由于Umeyama[28]的可逆性,在Conversion中所提出的人脸交换方案的第一步是将生成的人脸Ir与其掩模Mtfrom dst Decoder一起转换到目标图像在src中的原始位置。

下一步是混合,重塑重现的雄心面临红外t无缝符合目标图像Italong外轮廓的。为了保持一致的肤色,提供了阐述五个颜色传输算法(即reinhard颜色转移:RCT[24]、迭代分配传输:IDT[23]等),使红外更适应于目标图像。在此基础上,将Ir和it两幅图像进行组合得到混合结果。

$$\begin{equation} I_{\text {output }}=M_{t} \odot I_{t}^{r}+\left(1-M_{t}\right) \odot I_{t} \end{equation}$$

任何混合都必须考虑到不同的肤色、脸型和照明条件,特别是在Ir和It之间的连接。这里我们定义我们的泊松混合[22]优化为

$$\begin{equation} P\left(I_{t} ; I_{t}^{r} ; M_{t}\right)=\left\{\begin{array}{ll} \left\|\nabla I_{t}(i, j)-\nabla I_{t}^{r}(i, j)\right\|_{2}^{2}, & \forall M_{t}(i, j)=0 \\ \min \left\|\nabla f(i, j)-\nabla I_{t}^{r}(i, j)\right\|_{2}^{2}, & \forall M_{t}(i, j)=1 \end{array}\right. \end{equation}$$

很容易看出,我们只需要最小化面部部分$\forall M_{t}(i, j)=1$,因为$\left|\nabla I_{t}(i, j)-\nabla I_{t}^{r}(i, j)\right|_{2}^{2}$是一个常数项。

最后一步是常规的锐化。添加一个预先训练的人脸超分辨率神经网络(表示为FaceEnhancer)来锐化混合后的人脸。我们注意到,在目前最先进的换脸工作中,生成的脸或多或少都是平滑的,缺乏小细节(如痣、皱纹)。如果一切顺利,我们将得到一个高清的虚假形象(无缝地把生成的脸上到指定的目标面临的一部分,同时调整生成的脸的肤色到目标的脸,然后把它在原始图像根据其坐标记录在提取阶段),即使在频域分析的帮助下,也很难区分真假。

fig11

相关阅读:什么是deepfake?

See Also