手册

本文将包含的内容包括:

  • DeepFaceLab 是什么?
  • DeepFaceLab2.0和1.0之间的差别
  • DeepFaceLab基本概念
  • DeepFaceLab基本流程
  • DeepFaceLab项目文件
  • DeepFaceLab脚本含义
  • DeepFaceLab参数说明(提取,训练模型,合成参数详解)
  • DeepFaceLab遮罩相关

这其中参数部分占比会很大,主要参考了官方的英文手册,同时融入了一些自己的理解。很多概念单纯从学术上来说的话,翻译了和没翻译没啥两样。重点是这个参数能有什么样的作用,用了之后会有什么效果。

DeepFaceLab 是什么?

DeepFaceLab2.0 是一个用来视频换脸的工具/应用。

DeepFaceLab2.0和1.0之间的差别

1.从核心算法上来说基本一致,但是经过对代码的重构和优化,使得软件的运行更快,合成效果更好。

2.  显卡支持不同,2.0版本将不再支持AMD显卡,并且也不在兼容1.0的模型。

3.  数据集(人脸图片)兼容,2.0版本兼容1.0的数据集。

4. 功能更新列表:

  • 只有两种模型,分别是SAEHD和Quick96
  • 支持多显卡
  • 提升人脸提取,模型训练,合成的性能
  • 添加人脸增强功能,提高素材质量,增加脸部细节
  • GAN训练-使用对抗生成网络争强人脸细节
  • TrueFace- 使合成人脸更像源素材。
  • 提取,训练,合成,都可以选择不同GPU或者CPU
  • 合成遮罩图像,便于后期处理
  • 人脸坐标内嵌在图片文件中
  • 更像训练预览窗口
  • 更像交互式合并功能
  • 添加原素材和目标素材调试选项
  • 人脸提取使用S3FD和手动提取
  • 模型分辨率以16递增,最大分辨率提升至640×640
  • 更多模型结构(DF,LIAE,-U,-D 以及 -UD)
  • 更新XSEG遮罩功能,移除FAN相关。

DFL2 支持 NVIDIA GPU 和CPU,不支持AMD,如果你是A卡,请使用DFL1.0里带opencl的版本。

DFL2  对N卡算力有一定要求,算力必须大于3.0 ,直观来说比GTX650 还要差的显卡就不要考虑了。各种显卡的算力情况参考:https://en.wikipedia.org/wiki/CUDA#GPUs_supported

 

DeepFaceLab基本概念

在继续后面的内容之前,一定要先说清楚一个事情。什么是src,什么是dst 。src顾名思义是就是源source, dst就是目标destination。假设我想要把张三的脸放到李四的头上,换一种表述就是我想给李四换张脸。

这里我们就把张三叫做src,把李四叫做dst。把张三的视频叫做data_src.mp4,把李四的视频叫做data_dst.mp4

理解了这个之后就可以看一下DFL的项目文件和文件夹的命名了。

 

DeepFaceLab项目文件

DFL的项目文件基于惯例,就是不用设备设置,只要文件目录和名称保持固定规范就好。

项目文件主要包含:

  • _internal ,DFL核心文件
  • workspace ,工作目录,包含视频,人脸素材,模型,合成结果等。
  • bat,可自行文件,我们需要点击的脚本

下面重点说workspace下面的文件以及文件夹。

data_dst

这个文件夹用于存放目标人物李四的图片,以及从图片中提取的人脸(aligned),合成的图片(merged), 遮罩文件(merged_mask), 调试文件(aligned_debug)。初始状态为空文件夹

data_src

这个文件夹用于存放提供人脸的张三图片,里面同样包含人脸目录(aligned),初始状态为空文件夹

model

这个文件夹用于存放模型文件,模型文件基本以npy结尾,其中还包含一些data和txt结尾的配置文件。这是非常重要的一个文件夹,请勿随意删除。初始状态为空文件夹。

data_dst.mp4

这是一个视频文件,就是李四的视频文件(被换脸的视频),这是一个非常关键的视频,不能缺少,名字必须是data_dst.mp4,后缀不一定是MP4,但是推荐这个格式。 运行脚本前必须要先保证有这个视频,没这个视频你还换个P啊,我们本来就是因为要换这个视频,才开始用这个软件的。

data_src.mp4

这也是一个视频文件,就是张三的视频,人脸提供者,我们会拿这个人脸换到别人身上。这个视频并非必须,我们可以直接采用图片素材放到data_src,也能把软件跑起来,但是通过视频里获取src素材,最终合成的效果连贯性更好。

 

DeepFaceLab基本流程

流程可以分为3大步,7小步。

三大步为:

  • 提取
  • 训练
  • 合成/应用

五小步为:

  • Src视频转图片
  • Dst视频转图片
  • Src人脸提取
  • Dst人脸提取
  • 训练模型(SAEHE/Quick96)
  • 合成图片/应用模型
  • 合成视频

具体到脚本的点击顺序为:

  • 2) extract images from video data_src.bat(Src视频转图片)
  • 3) extract images from video data_dst FULL FPS.bat(Dst视频转图片)
  • 4) data_src faceset extract.bat(Src人脸提取)
  • 5) data_dst faceset extract.bat(Dst人脸提取)
  • 6) train SAEHD.bat(训练模型)
  • 7) merge SAEHD.bat(合成图片/应用模型)
  • 8) merged to mp4.bat(合成视频)

DeepFaceLab脚本含义

 

DeepFaceLab参数说明

这一部分是本文的重点。DFL提供了大量(数十个)可调的参数,从运行步骤的角度来说,可以分为三大块:提取参数,训练参数,合成参数。其中训练预合成参数是重中之重。

DFL提取环节

DFL训练环境

训练模型是换脸过程中非常重要的一个环节,DFL2.0版本已经移除了H64,H128,DF,LIAE等单独的模型,取而代之的是通过参数来定义的SAEHD模型以及无需设置任何参数的Quick96模型。

SAEHD(6G+) :高清自动编码器,专为6G+高端显卡 用户准备。

主要特性:

  • 分辨率可设置为16任意倍数,最大为640 x 640px
  • 支持半脸(hf),中脸(mf),全脸(f),整脸(wf),头等类型(h)
  • 支持8种结构:DF,LIAE,以及带后缀 -u,-d,-ud
  • 支持调整批量(BS)大小
  • 支持调整编码器,解码器,自动编码器,这种解码器大小
  • 支持自动备份
  • 支持预览和历史
  • 支持设置目标迭代(iter)
  • 支持随机翻转(Random Flip)
  • 支持眼部优先(Eye Priority)
  • 支持遮罩训练(Masked Training)
  • 支持GPU优化(GPU Optimizer)
  • 支持—-(Learning Dropout)
  • 支持随机扭曲(Random Warp)
  • 支持GAN增强(GAN Training Power)
  • 支持“真脸”(True Face Training Power)
  • 支持脸部和背景风格(Face and Background Style Power)
  • 支持颜色转换模式选择(Color Transfer modes)
  • 支持梯度剪裁(Gradient Clipping)
  • 支持预训练(Pretrain Mode)

 

Quick96 (2-4GB): SAEHD的简化版模型,低配设备友好,只需2G显存即可运行。同时简化了参数配置过程,训练模型零配置。

主要特性:

  • 像素为96×96
  • 脸类型为全脸
  • bs固定为4
  • 模型结构为DF-DU

 

共同点

两个模型启动之后,同样需要选择先选择模型,如果没有需要输入模型名称新建,同样需要选择运行设备。

模型参数可以分为两大类:不可修改参数和可重置参数。

不可修改的参数主要包括:

  • 模型像素(model resolution)
  • 模型结构(model architecture),
  • 模型维度(dims)
  • 脸类型(face type)

下面就具体的参数做一个说明

 

模型备份(Autobackup every N hour ( 0..24 ?:help ) )

每N小时备份一次,默认值为0,表示不备份。输入2表示两个小时备份一次,这个参数的功能是为了防止模型奔溃骂娘!

目标迭代(Target iteration )

设置一个整数,当迭代次数达到这个值就会自动停止训练,默认为无限制,直到你手动停止为止。

随机反转(Flip faces randomly ( y/n ?:help ))

当你人脸素材比较少的时候比较有用,通过这个参数将人脸图片垂直翻转,增加素材量。比如目标视频有右侧连,原视频只有左侧脸的时候。但是翻转后的样本和真是的情况可能会有一些误差。素材比较充分的情况下建议关闭,保证相似度,自然度。

 

批量大小(Batch_size ( ?:help ) )

批处理大小设置会影响每次迭代中人脸的数量, 建议大于等于4,小于等于16,默认值为8。这个值的上限取决于你的显卡的性能,主要是显存。值太小影响效果,太大浪费时间。具体原理可以去学习深度学习中的Batch_size概念。

模型像素 (Resolution ( 64-640 ?:help ))

这里你设置了你的模型分辨率,此选项不可重置。分辨率可以从64×64增加到640×640,增量为:16(对于常规和-U架构变体),32(对于-D和-UD架构变体)。原则上来说分辨率越高,模型学习到的脸就越详细,最终清晰度越高,但是对配置的要求也会越来越高,使用的时间越来越多。综合考虑性能,质量,时间自己的变化,推荐192或者256。

 

人脸区域(Face type ( h/mf/f/wf/head ?:help )

这个选项可以指定人脸训练区域的大小,主要包括半脸,中脸,全脸,整脸,头。从左到有,区域越来越大。

半脸:主要包括眉毛到嘴巴的区域,眉毛可能会出现问题

中脸:优化了眉毛的处理,面积提升30%,基本解决眉毛的问题。

全脸:脸部区域大于中脸,贴合人脸边缘,不包含额头。

整脸:全脸的基础上,可以解决额头的问题,需要配合遮罩处理(xseg)

头:包含整个头部,包括脸和头发,配合遮罩处理实现换头。

脸类型选择h后的训练预览图如下

[Image: ldlVgZH.png]

一般来说,推荐只用全脸或者整脸。最佳的方式是,根据你需要替换的区域来选择。替换面积越大肯定需要训练的内容越多,时间越多,而且肤色,融合度都会有一些变化。区域越小处理起来越简单,区域大人脸看起来会更像一些。

 

模型结构(AE architecture)

模型结构主要包含DF和LIAE, 以及一些扩展选项-U,-D,[b]-UD。-U , -D可以和DF LIAE组合使用。演变出如:DF-U,DF-D,DF-UD,LIAE-UD等。

DF:此模型架构提供了更直接的人脸交换,不使人脸变形,所以源与目标自己的人脸匹配很重要。该模型在正面拍摄时效果最好,并且要求您的源数据集具有所有所需的角度,否则在侧面轮廓上可能会产生较差的结果。官方推荐的模式,复用后相似度高,适合复用!

LIAE: 该模型结构可以使面部变形,这种模型与源头镜头的相似性较差,但是可以更好地处理侧面轮廓,并且在数据集方面更宽容,通常可以产生更精致的人脸交换,并具有更好的颜色光线匹配度。

-U: 这个选项是为了提升合成结果与源素材的相似度。

-D:这个版本旨在提高效率。同等配置下,它可以让你以两倍的分辨率训练你的模型,比如之前只能跑128,启用之后可以跑256。如果分辨率相同,单次迭代时间更少,消耗显存更少。但是在质量上可能会有所降低,有待验证。

-UD:结合了两个变量,以实现最大相似度并提高分辨率/性能。 达到最佳效果吗,可能需要更长的训练。

 

接下来的4个选项用来设置神经网络的维度,修改这些会对学习人脸的表现和质量有很大影响,所以推荐使用默认值。

自编码器维度 AutoEncoder dimensions ( 32-1024 ?:help ) :

自动编码器尺寸设置,影响模型学习人脸的整体能力。

编码器维度 Encoder dimensions ( 16-256 ?:help ) : 

编码器尺寸设置,影响模型学习面部总体结构的能力。

解码器维度 Decoder dimensions ( 16-256 ?:help ) :

解码器尺寸设置,影响模型学习细节的能力。

遮罩解码器维度 Decoder mask dimensions ( 16-256 ?:help ) : 

遮罩解码器的尺寸设置,影响已学习遮罩的质量。可能会,也可能不会影响培训的其他方面。

每一种设置的改变都会对性能产生不同的影响,如果没有广泛的测试,无法确定这些设置对性能和质量具体影响。每一项都提供了默认值,一般来说这是在训练速度和质量的最佳平衡。

可以根据自己的应用场景做适当的修改,当然需要大量的测试验证效果。

一般来说值越大会质量越好,但是需要的配置也会急剧上升,而效果的提升会越来越慢,直到微乎其微。

常规使用,不建议修改这几个值。

 

眼部优先(Eyes priority ( y/n ?:help ))

试图通过强制神经网络以更高优先级训练眼睛来解决眼神涣散(鬼眼)的问题。

请记住,他不能解决眼珠子方向不对的问题,只会影响眼睛和周围区域的细节问题。

这个选项一般不启用

 

GPU优先 (Place models and optimizer on GPU ( y/n ?:help ) )

默认启用,如果出现OOM,又不想改变其他参数的时候可以尝试关闭这个参数。关闭后,单次迭代时间会变长。也可以通过改变这个参数,提升res/bs/dims等参数的值。

一般来说使用默认,显卡配置不够的时候启用。

 

Use learning rate dropout ( y/n/cpu ?:help )

LRD的目的是通过改变启用时的学习率dropout来帮助训练,从而加速人脸的训练,获取更低的损失,并减少亚像素抖动。必须在启用GAN之前启用LRD。这个选项会影响到VRAM的使用,所以开启后可能会遇到OOM。

默认推荐不启用,loss降不下来的时候可以试试。

随机扭曲 (Enable random warp of samples ( y/n ?:help ))

利用随机扭曲来泛化模型,它能更好的学习人脸形状、面部特征、面部结构、人脸表情等。但只启用后,可能影响模型对细节的学习。因此只要效果还在快速提升(loss下降,图片变清晰)的情况下建议开启。当训练足够充分后可以关闭这个功能,继续训练几千个迭代,应该能获得更好的细节。

侧脸优化(Uniform_yaw ( y/n ?:help ))

这个参数有利于提升侧脸效果。默认不用开启,当训练很久侧脸效果不佳的是时候启用。

 

GAN强度 (GAN power ( 0.0 .. 10.0 ?:help ) )

GAN代表Generative Adversarial Network(生成对抗网络),在DFL 2.0中,使用这个选项可以获得更详细/更清晰面孔。 此选项可取值范围为0.0到10.0。并且仅在模型训练最够多之后启用(禁用随机扭曲并启用LRD之后)。默认推荐使用0.1,可以尝试更大的值获取更强的效果。一旦启用,就不再关闭了。启用前记得备份模型,有崩溃风险,可能会出现很诡异的效果。

默认值为0.0(禁用)。

启用前/启用后

别看这个例子效果提升了,但是也要防范崩溃的风险。

 

真脸强度(’True face’ power. ( 0.0000 .. 1.0 ?:help ) )

改选项取值范围为0.xx-1.0 , 使用目的是让合成的人更像src。和GAN强度一样,只有在训练充分并关闭了随机扭曲之后在考虑启用。启用之前,建议先备份。典型值是0.01 ,你可以尝试更低的值,比如0.001,切勿求高。这个参数对性能的影响很小,当然也有可能会导致OOM。

默认值是0.0(禁用)

人脸和背景强度(Face style power and Background style power)

 此设置控制图像的面部或背景部分的样式转移,能提升合成质量(说是这么说,但是大部分情况下会蹦)。启用后对性能有影响,可能需要降低bs或禁止GPU优化器,启用前记得备份,使用的数值不要太大。

默认值是0.0(禁用)。

 

颜色转换 Color transfer for src faceset ( none/rct/lct/mkl/idt/sot ?:help )

这个选项是用来匹配src和dst的颜色,有几个选项可供选择:

都是一些算法,有专业基础的可以去研究下,从应用的角度来说,不用研究太多。默认使用None,如果后期发现合成效果不好,尝试换一种,只能试,没有标准答案。

梯度剪裁(Enable gradient clipping ( y/n ?:help ))

这个功能最初引入是为了防止模型崩溃(后来好像没啥用了,不开也不太蹦)。 它对性能的影响很小,如果不想使用它,就自觉把自动备份打开,有备无患。

默认值为n(禁用)

预训练(Enable pretraining mode ( y/n ?:help ) )

启用后会自动使用软件自带的数据集进行预训练,训练200k~400k迭代之后,关闭预训练,然后迭代次数变0, 开始训练你自己的src和dst素材。这样做的好处是帮你节省一些时间,模型不需要从零开始学习了(模型将“知道”面孔的外观,从而加快初始训练阶段)。仅在刚开始的时候启用,后面就不要再次启用了。

你也可以自定义预训练数据集,将自己的人脸素材打包成faceset.pak,然后放到… \ _ internal \ pretrain_CelebA下面。

默认值为n(禁用)

想要更加省时间直接使用别人训练好的预训练模型:

“预训练”模型和我们常说的“模型复用”有一些差异,专门训练的复用模型,效果会更好,速度要快很多。

DFL合成环节

 

DeepFaceLab遮罩相关