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:一个简单,灵活的可扩展换脸框架
  • 摘要
  • 一、介绍
  • 二、DeepFaceLab的特性
  • 三、Pipeline
  • 四、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)。

五、评估

六、总结

论文翻译:DeepFaceLab:一个简单,灵活的可扩展换脸框架相关推荐

  1. 设计一个简单分页存储管理系统_【系统架构】如何设计一个简单灵活的收银系统?看这里!(1)...

    在电商项目中,收银系统是一个不可或缺的功能,因为你不仅要通过它来进行收款.退款,而且也要通过它进行财务的对账.报税等.因此,如何设计一个简单灵活的收银系统,对于开发电商项目来说非常重要. 那如何设计一 ...

  2. 支付退款流程设计_【系统架构】如何设计一个简单灵活的收银系统?看这里!(1)...

    在电商项目中,收银系统是一个不可或缺的功能,因为你不仅要通过它来进行收款.退款,而且也要通过它进行财务的对账.报税等.因此,如何设计一个简单灵活的收银系统,对于开发电商项目来说非常重要. 那如何设计一 ...

  3. idea log 不输出error_还在使用console.log()吗?Bunyan:一个简单易用的JS日志框架

    Bunyan是一个简单易用的JS日志框架,可以工作在多种环境下,这里以Nodejs为例说明Bunyan的基本用法.是时候替换console.log的写法了. 安装 npm install --save ...

  4. 组件分享之后端组件——一个简单且高度可扩展的分布式文件系统seaweedfs

    组件分享之后端组件--一个简单且高度可扩展的分布式文件系统seaweedfs 背景 近期正在探索前端.后端.系统端各类常用组件与工具,对其一些常见的组件进行再次整理一下,形成标准化组件专题,后续该专题 ...

  5. 写一个简单易用可扩展vue表单验证插件(vue-validate-easy)

    写一个vue表单验证插件(vue-validate-easy) 需求 目标:简单易用可扩展 如何简单 开发者要做的 写了一个表单,指定一个name,指定其验证规则. 调用提交表单方法,可以获取验证成功 ...

  6. ant vue 树形菜单横向显示_快速实现一个简单可复用可扩展的Vue树组件

    来源 | https://wintc.top/article/13大概因为平时工作项目的原因,写了很多次树形组件,越写越觉得可以写得更简单并且更具有复用性.扩展性.树组件的应用场景很多,比如一篇文章的 ...

  7. SGAME:一个简单的go游戏服务端框架

    SGame是一个由GO实现的游戏简单服务端框架. 说明 主要是使用GO丰富的库资源和较高的开发效率. 开发简单 可以使用已有的代码框架很方便的构建一个新的进程 方便扩展 基于已有的框架可以动态的扩展进 ...

  8. 【半监督医学图像分割 2021 TMI】SimCVD 论文翻译

    文章目录 [半监督医学图像分割 2021 TMI]SimCVD 论文翻译 摘要 1. 介绍 2. 相关工作 3. 方法 3.1 总览 3.2 任务制定 3.3 基础体系结构 3.4 边缘对比蒸馏 4. ...

  9. [论文翻译] Class-incremental learning: survey and performance evaluation on image classification

    论文地址:https://arxiv.org/abs/2010.15277 代码:https://github.com/mmasana/FACIL 发表于:arXiv Oct 2020 省略了图.表的 ...

最新文章

  1. 15 个让新手爱不释手的 Python 高级库
  2. mysql多表联查分页_sqlserver多表联合查询和多表分页查询的代码讲解
  3. 第七章 前端开发——前端工程化(NPM、脚手架、前端环境搭建)
  4. python怎么显示结果_python中plot实现即时数据动态显示方法
  5. 【Paper】2009_Controllability of Multi-Agent Systems from a Graph-Theoretic Perspective
  6. SpringBoot整合Shiro(认证+授权)
  7. java 判断天是星期及_java判断日期是星期几的方法总结
  8. SAP Fiori Elements - bindComponent - binding property in XML view will trigger odata request
  9. 算法—振兴中华(C语言版)
  10. sql select 抛异常_mysql数据库及sql注入
  11. Java BigDecimal 转换,除法陷阱(转)
  12. Python计算数组的n位全排列(permutations的使用)
  13. 【脑经急转弯】—— 灯亮还是灭?
  14. 0基础学python要多久-零基础零经验自学Python,到精通Python要多久啊?
  15. Win7 XAMPP apache无法启动的问题
  16. iOS:NO suitable application records were found.Verify your bundle identifier 'com***'is correct
  17. Houdini工程文件合集
  18. 数据同步工具简单介绍
  19. Exception in thread main java.lang.NoClassDefFoundError: org/w3c/dom/Eleme
  20. 微信小程序中实现吸顶效果(流畅、不卡顿)

热门文章

  1. apple 证书问题
  2. windows server下的 Nginx SSL 证书安装部署
  3. Cookie Session跨站无法共享问题(单点登录解决方案)
  4. .Net Framework 3.5在Windows 10的安装(2020.3.16可行)
  5. MIT 6.002电路与电子学笔记
  6. Tomcat官网地址
  7. 解决前置音频接口无声音问题
  8. 计算机硬件相关的论文,计算机硬件论文范文
  9. 【AlexNet】数字手势识别
  10. 《service》-“linux命令五分钟系列”之二