手册
本文将包含的内容包括:
- 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后的训练预览图如下
一般来说,推荐只用全脸或者整脸。最佳的方式是,根据你需要替换的区域来选择。替换面积越大肯定需要训练的内容越多,时间越多,而且肤色,融合度都会有一些变化。区域越小处理起来越简单,区域大人脸看起来会更像一些。
模型结构(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的颜色,有几个选项可供选择:
- – rct (reinhard color transfer): 基于 https://www.cs.tau.ac.il/~turkel/imagepa…ansfer.pdf
- – lct (linear color transfer): 使用线性变换将目标图像的颜色分布与源图像的颜色分布匹配。
- – mkl (Monge-Kantorovitch linear): 基于 http://www.mee.tcd.ie/~sigmedia/pmwiki/u…tie07b.pdf
- – idt (Iterative Distribution Transfer): 基于 http://citeseerx.ist.psu.edu/viewdoc/dow…1&type=pdf
- – sot (sliced optimal transfer): 基于 https://dcoeurjo.github.io/OTColorTransfer/
都是一些算法,有专业基础的可以去研究下,从应用的角度来说,不用研究太多。默认使用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遮罩相关