DeepFaceLab:一个简单,灵活的可扩展换脸框架
时间有限,翻译仓促,为个人学习所用,仅供参考。
DeepFaceLab: A simple, flexible and extensible face swapping framework
paper:https://arxiv.org/abs/2005.05535
open-source:https://github.com/iperov/DeepFaceLab/
文章目录
摘要
DeepFaceLab是一个由iperov开发的开源换脸deepfake系统,它在Github上已经获得3000多收藏和14000点赞:它为那些对深度学习框架没有广泛认知,以及模型开发需求的人们,提供了一个易于使用的重要的pipeline,同时,为那些需要其他特征加强他们自己pipeline的人们保留了灵活宽松的联结结构,使他们不必撰写复杂的范例代码。
在这篇论文里,我们细化了一些驱动DeepFaceLab的实现的准则,介绍了它的pipeline,通过这些,用户可以不费力地把pipeline的每一个方面模块化,以达到他们相应的目的,并且值得一提的是,DeepFaceLab可以实现不被主流的测假方法发现的结果。我们将通过把我们的方法和现存流行系统的比较,来说明我们系统的优点。
一、介绍
自从近年来深度学习被用于cv领域,数字化图像的操作处理,尤其是人类肖像的操作处理有了快速的提升,在大多数情况下达到了超级现实主义的效果。在通过源面孔转化成目标面孔的fake内容生成中,换脸是一个eye-catching任务,同时也包含了源面孔的面部运动,情绪变形。
脸部处理技术背后最主要的动机是GAN。越来越多的通过StyleGAN,StyleGAN2的脸部合成正在变得越来越真实,完全无法被人类视觉系统分辨。
通过以GAN为基础的换脸方法,大量的滑稽合成视频被发布在youtube和其他视频网站上。允许普通网民轻松地创造fake图片和视频的商业APP,极大地促进了deepfakes换脸技术的传播,诸如ZAO和FaceAPP。最著名的论坛MrDeepFakes,主要谈论deepfakes技术领域里边缘切割进展,或者生成精致换脸视频的一系列技巧,从而加快网络上deepfakes-made视频的提升。
这些内容的出现和技术的革新可能会影响公共论文的质量,并且保护人类的权利,特别是deepfakes或许被滥用成消息误导和操控,*和说服的来源。识别受控媒体是一项技术要求高且快速发展的挑战,它需要整个技术行业以及其他行业的协作。
反伪造检测的媒体研究者被鼓舞,并献身于难度不断增加的脸部伪造检测。DFDC是一个典型的例子,它由Facebook和MIcrosoft在2019年发起,耗资百万美元。
然而对deepfakes检测来说,被动的防守永远不是一个好主意。在我们的展望里,无论是对学术界还是对普通民众来说,知道deepfake是什么,以及它是怎么做出一段从源面孔转变到目标面孔的极现实视频,比仅仅是被动地反抗它要好很多。俗话说得好,最好的防守是进攻。让普通网民认识到deepfake的存在和被发布在社交网络的换脸视频的日益强大的性能,比起成为真真假假的滑稽视频的反对者更重要。
据我们所知,合成Obama,FSGAN和FaceShifter是最具代表性的面部处理合成视频。这些相关工作的问题是,他们的作者并没有把他们的代码全部开源,而是只释放了其中的一部分,但是仅通过开源部分复现这些论文,产生一些被论文提出的具有说服力的结果是非常难的。谚语“魔鬼藏在细节里”是我们所有训练生成模型的人的座右铭。自从换脸算法的趋势是不断增加的复杂性,插入越来越复杂的代码,仅仅根据论文fulfill一个精彩的换脸算法看起来变成了一个不现实的目标。
更多地,这些算法或者系统或多或少,需要复杂的人类手拣操作或者特殊条件,这提升了想要深度钻研的初学者的参与门槛。比如说,合成Obama需要高质量的Obama3D模型和一个人工绘制的标准mask,意思是当你改变视频进度或者重新挑选你需要的源人物时,你需要特色化一个新的3D模型并绘制一个用于合成的标准mask。显然,这很难。
作为一个完整的fake数字内容生成pipeline,与换脸无关,越来越多的组建需要完善整个框架:比如人脸探测模块,人脸识别模块,人脸对齐模块,人脸语义解析模块,人脸融合模块等等。现在的不完整的pipeline工作是以某种方法隐藏起该领域的进程,并且增加很多初学者的学习成本。
为了解决这些问题,DeepFake已经介绍了完整的生成pipeline,连同诸如眼神活动,面部肌肉运动的面部情绪,用目标人物替换掉源人物。然而,这些DeepFakes产生的结果有些不足,Nirkin的自动换脸结果也是如此。
本论文介绍了DeepFaceLab,一个有着干净pipeline设计的易于使用的开源系统,它可以不费力地得到逼真的换脸结果。DeepFaceLab在公众间变得十分流行。例如,许多artists以DeepFaceLab为基础创造了视频并且发布到他们的youtube频道,他们之中人气最高的五个人均有20万以上的订阅,他们的DeepFaceLab一共获得了100万以上的点击量。
DeepFaceLab的贡献总结如下:
- 提出了一个包括成熟的pipeline的最先进的框架,目标是获得逼真的人脸交换结果
- 2018的DeepFaceLab开源代码,并且一直在跟进cv领域的进展,为主动和被动防御deepfakes作出积极贡献,它在开源论坛和VFX领域得到了广泛的注意。
- 介绍了一些DeepFaceLab里高性能的组件和工具,从此用户可以要求更灵活的DeepFaceLab工作流程,同时及时发现问题。
二、DeepFaceLab的特性
DeepFaceLab的成功源于先前想法编织到平衡速度和易用性的设计中,以及人脸识别,对齐,重建和分割领域的机器视觉爆炸等等。这里有我们的成果的四个主要特性:
Leras 现在DeepFaceLab提供了一个只建立在TensorFlow上的高水平深度学习新框架,旨在去除无必要的约束和通用高水平框架制造的额外的花销,比如Kerasa和plaidML。iperov命名它为Leras:Lighter Keras的缩写。Leras的主要优点是:
- 建立简单,灵活的模型 Leras通过提供模块工作的python形式,减轻了研究者和实践者的负担,除了图形模块它类似Pytorch(即定义层,创作神经模型,书写优化)。
- 聚焦表现的实现 随着Leras代替Keras应用,训练时间平均减少了10-20%。
- 细粒度张量管理 换成纯TensorFlow的动机是,Keras和plaidML不够灵活。另外,他们太过时并且不能全控制张量的处理。
把用户放在首位 DeepFaceLab致力于pipeline可用性制作,包括数据加载器和处理,模型训练和后处理,尽可能地简单和多产。不像其他的换脸系统,DeepFaceLab提供了一个完整的命令行工具,pipeline的每一个方面都可以根据用户的选择被执行。尤其是,内在复杂性和细粒度控制的许多手拣特征,比如用于面部对齐的标志面部标志,应该被在内部处理并隐藏进DeepFaceLab。也就是说,如果人们遵循工作流程的设置,可以不需要手拣特征就得到平稳的逼真换脸结果,仅仅需要两个文件夹:源(src)和目标(dst)且不需要把其中的同一脸部情绪配对。某种程度上,DeepFaceLab可以像傻瓜相机一样工作。
更多地,根据很多来自DeepFaceLab用户的实践性反馈,因为有很多诸如泛光灯,雨,被玻璃隔开,脸部伤痕等的复杂性被处理,所以需要一个高灵活和适用性的脸部转换器。因此,转换方面提供了交互性模块,它减轻了deepfake生成器等工作负载,因为在他们对多种选项和多种可行/不可行特征进行改变时,交互性预览帮助他们观察到所有改变的影响。
工程支持 为了尽可能利用CPU和GPU的全部潜能,一些实用主义的方法被加入进来以提升性能:多GPU支持,半精度训练,用以提升吞吐量的固定CUDA内存的使用,用以加快图片操作和数据处理的多线应用。
可扩展性和测量性 为了增强DeepFaceLab工作流程的灵活性,也为了吸引研究讨论的兴趣,用户可以替换DeepFaceLab里不符合他们项目性能需求的任意组件,大多数DeepFaceLab的模块被设计成可互换的。例如,为了在更好地探测大角度人脸,人们可以提供新的人脸探测器。一个普遍的情况是许多DeepFaceLab的使用者倾向于适用化地改变他们的网络结构,实用性地训练它们。比如说用PGGAN组合特殊的LSGAN或者WGAN-GP的loss实用性地训练。
三、Pipeline
在DeepFaceLab(简称DFL)中,我们简要地把pipeline列举为三个主要组件:提取,训练和转换。这三个部分按顺序出现。而且,值得一提的是DFL是一个典型的一对一换脸器,就是说只有两个文件夹:src和dst,分别是源和目标的缩写,被用于下面的描述。更多地,不像先验工作,我们可以生成高分辨率的图片并泛化成各种输入分辨率。
1 提取
提取是DFL的第一个方面,它包含许多算法和处理部分,例如人脸探测,人脸对齐和人脸分割。提取的代码后,用户会得到有着来自输入数据文件的脸部标志和精确mask的对齐人脸。另外,DFL提供了许多可以表示提取人脸收敛区域的人脸类型(比如半脸,全脸,整脸)。除非另外说明,默认为全脸。
- 人脸探测 人脸探测是提取的第一步,为了在给定的文件夹:src和dst重找到目标人脸。DFL用US3FD作为默认的人脸探测器。显然,你可以为了你特殊的目标选择任何人脸探测算法来替代S3FD,例如RetinaFace,MTCNN。
-
人脸对齐 第二部是人脸对齐,在大量的实验和失败后,我们需要找到一个在时序上稳定的脸部标志算法,这对于生成一个成功的脚本shot和影片至关重要。
为了解决以下问题,DFL提供了两种脸部标志提取算法的精确类型:(a)给予脸部标志算法2DFAN(适用于有一半姿势的人脸)和有3D人脸先验信息的PRNet(适用于大欧拉角(yaw,pitch,roll)的人脸,比如一个有着很大yaw角的人脸,意味着人脸的一边是处于视线之外的)的热点图。脸部标志被找到之后,为了平滑单独shot中的连续帧的面部标志,我们提供了一个拥有可配置时间步长的可选择函数。
然后我们采取了一个被Umeyama提出的经典的点式平台映射和转换方法,旨在计算用于人脸对齐的转换矩阵相似度。
因为在转换矩阵相似度计算中,Umeyama方法需要标准脸部标志模版,DFL提供了三个精确的脸部标志对齐模版:正视图和侧视图(左和右)。值得一提的是,DFL可以根据观察到的脸部标志,自动确定欧拉角,这可以在帮助人脸对齐部分在不需要手动干预的前提下,找到正确的脸部标志模版。 -
人脸分割 在人脸对齐之后会得到一个有着标准正/侧视人脸的文件夹aligned scr。我们在aligned src之上用一个细粒度人脸分割网络(TernausNet),通过它,一个哪怕有头发,手指或眼镜的人脸都可以被精准分割。可选可不选但是非常有用的是,旨在消除不规则遮挡以保证网络在训练过程中稳定,对于有手,眼镜或其他物体遮挡的人脸。
然而,因为一些state-of-the-art人脸分割模型在一些特定镜头中,无法生成细粒度mask,DFL介绍了XSeg模型。XSeg现在允许每个人为了特定人脸数据(aligned src或者aligned dst)分割,通过少镜头学习范例训练他们自己的模型。例如,如果一个人脸有大约2000张图片,那手动标记有代表性的50-100个样本足以。然后为了在那些手动标记的对上达到好的切割质量,以及生成整个的人脸集,XSeg为此训练。
清晰来说,XSeg(可选)只在当whole_face类型被使用时是必要的,或者为了移除full_face类型上的mask,也是必要的。
随着以上的工作流程按序实行,我们得到了DFL下一步(训练)所需要的所有东西:在原始图像裁切的带有相应坐标的人脸,脸部标志,对齐人脸和来自src的像素级别的切割mask(由于dst的提取代码和src相同,所以不再赘述。)
2 训练
对于让DeepFaceLab得到逼真换脸结果这一目标来说,训练扮演了非常重要的角色。
不需要aligned src和aligned dst里的面部情绪严格匹配,我们的目标在于设计一个简单高效的算法范例,以解决这一不配对问题,同时保证生成人脸的高精度和感知质量。如图3(a)所示,DF包括一个Encoder和一个Inter,二者均使用src和dst共享权重,另一个分别属于src和dst的Decoder。src和dst的泛化是通过共享Encoder和Inter来实现的,它简单地解决了之前提到的不配对问题。
src和dst的隐藏code是Fsrc和Fdst,两者都提取自Inter。
就像图3(b)所描述那样,LIAE是一个更复杂的结构,有共享权重的Encoder,Decoder和两个独立的Inter模型。另一个不同于DF的点是InterAB被用于生成src和dst的隐藏code,同时InterB只输出dst的隐藏code。这里,FsrcAB表示从InterAB产生的src的隐藏code,我们将此表现形式概括为FdstAB和FdstB。
从InterAB和InterB得到所有的隐藏code后,LIAE通过频道串联起了feature maps:FsrcABIIFsrcAB成为src新的隐藏code的表现形式,同样FdstABIIFdstB是dst的新的隐藏code的表现形式。
然后FsrcABIIFsrcAB和FdstABIIFdstB被输入进了Decoder,因此我们得到了预测src(dst)及其masks。蝉联两FdstAB和FdstB的动机是,把隐藏code的方向像我们需要的类型(src和dst)的方向进行偏移,借此InterAB获得了一个在隐层五脏俱全的以及well-aligned的,scr和dst的表现形式。
除了模型的结构,一些有用的tricks同样对提升生成人脸的质量有很大的提升。受PRNet的启发,同时为尽可能地利用人脸mask和标志需求的驱动,我们加入了一个普通SSIM的权重求和的mask loss,旨在让人脸的每个部分在AE训练结构下都能有不同的权重,比如,比起脸颊,我们给眼睛区域加了更多的权重,以使得网络专注于生成拥有生动眼睛的人脸。
对于losses,DFL默认使用混合loss(DSSIM(结构性不同)+MSE)。使用这个组合的原因是为了从两者提取益处:DSSIM更快地生成人类脸同时MSE提供更好的清晰度。这个组合loss旨在发现一般性和清晰度之前的折中和妥协。
不需要写太多标准代码,我们减少了用户设计他们自己训练范例或者网络结构的负担,特别是,用户可以为了混合src和dst的潜在表现形式(比如LIAE)添加额外的中级模型,或者,当用户选择用GAN范例时,自适应性的判别器训练(比如多尺度判别器或者RealnessGAN判别器)可以被放在decoder之后,旨在减少人脸生成的语义缝隙,特别是在scr和dst的数据集有限的情况下。
在src2dst(图片4)的情况下,我们对生成人脸用一个奇特的真人脸模型TrueFace在转换阶段于dst的相似度更高。对于LIAE来说,它旨在让FsrcAB的分布更接近于FdstAB。对于DF来说,目标变成了Fsrc和Fdst。
不像deepfakes和其他换脸框架的固定分辨率限制,我们可以生成高分辨率图像,并且通过适应训练模块的模型定义设置,来泛化为各种输出分辨率,借助DFL简洁明了的界面这非常容易。
显然,LIAE和DF都支持上述功能,而且这些功能被设计成可插拔,进一步提高DFL框架的灵活性。关于DF和LIAE的更多设计细节,请关注Appendix。
3 转换
最后,我们来到了转换部分,如图4所讲,用户可以交换src和dst中的人脸,反之亦然。
在src2dst情况下,转换中,换脸方案的第一步是把生成人脸Itr以及它的maskMt,从dst Decoder转换到src中的目标图片It的原位置,由于Umeyama的可逆性。
下面有关融合,它的目标是,把重新对齐重新定制的人脸Itr沿着Mt的轮廓无缝地契合到目标图片It上。为了肤色一致问题,DFL提供了超过5种颜色转换算法(比如,reinhard颜色转换:RCT,交互分布转换:IDT等等)以使得Ttr更适应于目标图片It。最重要的是,融合的结果可以通过合并两个图片来获得:Itr和It。Ioutput = Mt同或Itr + (1-Mt)同或It。
任意融合都必须考虑,尤其是带有界限区域的Itr和It,不同的肤色,脸部形状和光线条件之间的交合点。这里我们定义了自己的泊松融合最优法(refer to paper)
从公式2不难看出,我们只需要用a最小化脸部部分,因为(refer to paper)是一个常数项。
然后我们来到了DFLpipeline和转换工作流程的最后一步:鲜明化。我们加入了一个预训练的脸部超清神经网络(FaceEnhancer)以鲜明化已融合的人脸。生成人脸在大多数现在的state-of-the-art换脸工作里,多多少少,是平滑且缺少关键细节的(比如痣和皱纹)。
如果一切顺利,我们会得到一个高清fake图片预览(把生成的人脸无缝地放进目标人脸所设计的部分,同时适应肤色,然后根据提取部分得到的它的坐标,将其重新适合原始图片),它将很难被分辨真假,即使是通过频域分析的帮助。
四、DeepFaceLab的生产性工具
普通意义上,当有具备换脸条件的人脸时,DFL作为一个制作视频流程中的生产性工具。因此,合成fake图片的真实性要求远高于消费者级别的产品,比如高分辨率,复杂遮盖(人脸分割TernausNet)和糟糕的照明。
为了解决这一问题,我们提供了一些高效工具,以得到超极清晰和真实的高清fake图片。
如图5所示,两种在DFL提取部分被普遍使用的工具。图5(a)是一个手动人脸探测器和面部标志提取工具,它为大欧拉角人脸设计,普通的脸部探测器和面部标志提取器在大欧拉角人脸上会失败(人脸对齐PRNet)。
另外,当合成视频中存在视频抖动,这个工具可以帮助用户平滑目标人脸的面部标志,通过以相邻帧为参考。
类似的,图5(b)(人脸分割)是针对面部mask范围的细粒度控制,的XSeg手动人脸分割编辑器,它用来避免遮挡的干预,像是手,头发等等。
训练期间,我们为研究者提供细化的预览,以在不写任何额外代码的前提下,检测他们自己的新想法,loss运动在图6的黄蓝行被标明,它表示src2src和dst2dst的loss的历史,为人们debug他们独一无二的模型结构好与坏,提供了有价值的信息(put users first)。