换脸软件DFL2.0官方使用手册详解
- 前景提要
-
- 2.0主要新增功能
- 硬件要求
- 文件目录
- 术语解释
- 具体过程
-
- 1,工作区清理
- 2,从src视频中提取画面 (data_src.mp4)
- 3,视频切割 (可选环节)
- 4,从目标视频中提取画面(data_dst.mp4)
- 5,提取Data_src中的人脸
- 6,Data_src 整理
- 7,Data_dst 数据准备
-
- 7.1 手动人脸提取的操作说明
- 7.2 Data_dst 数据整理
- 7.3 XSeg model 的训练和使用(画遮罩)
- 8,训练
-
- 8.1 参数配置与说明
- 8.2 Merging合成
- 8.3 把转化好的帧合成为视频
- 9,附录:
- 10,常见问题和回答(来自于 络)
- 11,笔记(持续更新)
前景提要
2.0主要新增功能
-
2个模型大类: SAEHD 和 Quick 96
-
支持多GPU
-
比DFL 1.0 更快的提脸、训练、合成速度
-
提供人脸素材加强脚本
-
训练支持GAN(一种AI技术),以还原更多细节
-
新增TrueFace参数 – (只支持 DF 模型架构) – 让SRC和DST表情更相似,减少死鱼脸
-
带交互界面的合成脚本(1.0的合成需要手动填参数,非常反人类,这个2.0做的很人性化)
-
提脸使用s3fd算法,并支持手动模式
-
模型分辨率可选择为任意16或32倍数
-
多种模型架构 (两种核心框架DF, LIAE,以及 -U, -D ,-UD 三种附加后缀,这个下文详细展开)
-
使用Xseg遮罩模型,提供自带画遮罩的工具
硬件要求
dfl2.0最新版已经支持英伟达显卡和AMD显卡,但AMD显卡效率不行,买电脑还是推荐英伟达显卡,英伟达GPU 10gb显存以上,CPU i7以上。win10系统,安装英伟达最新驱动程序,cuda11开发工具。
文件目录
-
DeepFaceLab 2.0由几个.bat文件组成,这些文件用于执行创建deepfake的各种任务/步骤,它们与两个子文件夹一起位于主文件夹中:
-
_internal – 相关源代码
-
workspace – 放置你的模型、视频、人脸数据的地方
术语解释
Dataset (faceset) – 是一组从图片帧(从视频中提取)或照片已提取的图像。
DFL 2.0中使用了两个数据集,分别是data_dst和data_src:
- src顾名思义是就是源source, dst就是目标destination。假设我想要把张三的脸放到李四的头上,换一种表述就是我想给李四换张脸。
- “data_dst” “ data_dst”是一个文件夹,其中包含从data_dst.mp4文件提取的帧-这是我们要换脸的目标视频。 它还包含2个文件夹,这些文件夹是在从提取的帧中提取人脸后创建的:“aligned”包含人脸图像(内嵌了人脸特征点数据,用于生成原始遮罩)
“aligned_debug”包含原始帧,这些帧画出了人脸特征点,用于标识检验人脸提取是否正确(并且不参与训练或合成过程)。清理完数据集后,可以将其删除以节省空间。 - “data_src” 是一个文件夹,用于保存从data_src.mp4文件提取的帧(可以是采访,电影,预告片等),也可以在其中放散装图片-就是您要在换到视频上的人。
- “aligned”包含人脸图像(内嵌了人脸特征点数据,用于生成原始遮罩)
- “aligned_debug”包含原始帧,这些帧画出了人脸特征点,用于标识检验人脸提取是否正确(并且不参与训练或合成过程)。清理完数据集后,可以将其删除以节省空间。
举个例子:我要做一个马保国替换你自己的人脸的换脸视频。 那么马保国视频就是data_src,你自己视频data_dst,但是在提取脸部之前,必须先从以下对象中提取脸部: - 对于data_dst,您应该准备目标(目标)视频并将其命名为data_dst.mp4
- 对于data_src,您应该准备源视频(如上例所示)并将其命名为data_src.mp4,或者准备jpg或png格式的图像。从视频中提取帧的过程也称为提取,因此在本指南的其余部分中,我将这两个过程都称为“面部提取”和“帧提取”。
- 如开头所述,所有这些数据都存储在“ workspace”文件夹中。
- data_dst.mp4和data_src.mp4放在workspace文件夹目录;
- data_src文件夹和data_dst文件夹用于放置分解视频得到的原始画面帧或散装图片。运行面部提取后,会在其中自动生成存储人脸的“ aligned”文件夹
具体过程
1,工作区清理
Clear Workspace -删除workspace下所有内容。别手贱点他
2,从src视频中提取画面 (data_src.mp4)
Extract images from video data_src – 从data_src.mp4视频中提取帧并将其放入自动创建的“ data_src”文件夹中,可用选项:-FPS-跳过视频的默认帧速率,输入其他帧速率的数值(例如,输入5将仅以每秒5帧的速度呈现视频,这意味着将提取较少的帧)
–JPG / PNG-选择提取帧的格式,jpg较小,通常质量足够好,因此建议使用,png较大,不能提供明显更高的质量,但是可以选择。
3,视频切割 (可选环节)
- 从时间开始-视频开始
- 结束时间-视频结束
- 音轨-保留默认设置
- 比特率-让我们更改视频的比特率(质量)-最好保留默认设置
4,从目标视频中提取画面(data_dst.mp4)
extract images from video data_dst FULL FPS – 从data_dst.mp4视频文件中提取帧并将其放入自动创建的“ data_dst”文件夹中,可用选项:JPG/PNG – 同2)
5,提取Data_src中的人脸
准备源数据集的第一步是对齐人脸(把人脸都摆正了),并从位于“ data_src”文件夹中的提取帧中生成512×512面部图像。
有2个选项:
- data_src faceset extract MANUAL – 手动提取器
- data_src faceset extract – 使用S3FD算法的自动提取
S3FD和MANUAL提取器的可用选项包括:
- 根据要训练的模型的面部类型选择提取的覆盖区域:
a) full face (简称F脸,额头部分有些许被裁到)
b) whole face (简称WF脸,范围更大,整个额头都取了,兼容WF和F脸模型)
c) head (不常用,给高玩做avatar用,萌新用不到) - 选择用于面部提取/对齐过程的GPU(或cpu)
- 选择是否生成“ aligned_debug”文件夹
6,Data_src 整理
完成此操作后,下一步是清理错误faceset /数据集/不正确对齐的faces,把不清楚的脸部图片删除掉即可。
data_src view aligned result – 不常用
data_src sort – 给图片排序,方便你筛选错误图片
[0] blur 模糊程度
[1] face yaw direction 俯仰角度
[2] face pitch direction 左右角度
[3] face rect size in source image 人脸在原图中的大小
[4] histogram similarity 颜色直方图相似度
[5] histogram dissimilarity 颜色直方图不相似度
[6] brightness 亮度
[7] hue 颜色色相
[8] amount of black pixels 黑色像素的数量(常用于筛选异常人脸提取结果)
[9] original filename 源文件名字
[10] one face in image 是否是画面中唯一人脸
[11] absolute pixel difference 绝对的像素差异
[12] best faces 筛选最佳的人脸
[13] best faces faster 更快的筛选最佳的人脸
data_src util add landmarks debug images -重新生成debug文件夹
data_src util faceset enhance – 用AI算法提升素材清晰度
data_src util faceset pack and data_src util faceset unpack – 将“aligned”文件夹中的所有面孔打包/解压缩到一个文件中。 主要用于准备自定义的预训练数据集或更易于共享为一个文件。
other) data_src util recover original filename – 将面部图像的名称恢复为原始顺序/文件名(排序后)。 可选,无论SRC face文件名如何,训练和合成都能正确运行
7,Data_dst 数据准备
这里的步骤与源数据集几乎相同,除了少数例外,让我们从面部提取/对齐过程开始。
我们仍然有Manual和S3FD提取方法,但是还有一种结合了这两种方法和一种特殊的手动提取模式,始终会生成“
aligned_debug”文件夹。
data_dst faceset extract MANUAL RE-EXTRACT DELETED ALIGNED_DEBUG – 从“ aligned_debug”文件夹中删除的帧进行手动重新提取。
data_dst faceset extract MANUAL – 纯手动模式
data_dst faceset extract manual fix – 半自动,机器识别不了的会切手动
data_dst faceset extract – 纯自动提取
选项和src的一样,不重复说了
7.1 手动人脸提取的操作说明
启动手动提取器或重新提取器后,将打开一个窗口,您可以在其中手动找到要提取/重新提取的脸部:
- 使用鼠标定位脸部
- 使用鼠标滚轮更改搜索区域的大小
- 确保所有或至少是大多数地标(在某些情况下,取决于角度,照明或当前障碍物,可能无法精确对齐所有地标,因此,请尝试找到一个最能覆盖所有可见位并且是“ t太不对准)落在重要的部位,例如眼睛,嘴巴,鼻子,眉毛上,并正确遵循面部形状,向上箭头指示您面部的“向上”或“顶部”在哪里
- 使用键A更改精度模式,现在地标不会对检测到的面部“粘”太多,但您可能能够更正确地定位地标
- 用户<和>键(或,和。)来回移动,以确认检测到鼠标左键单击并移至下一个或按Enter
- 鼠标右键,用于检测无法检测到的正面或非人脸(需要应用xseg进行正确的遮罩)
- q跳过剩余的面孔并退出提取器(到达最后一张面孔并确认时也会关闭)
7.2 Data_dst 数据整理
7.3 XSeg model 的训练和使用(画遮罩)
这章比较复杂,萌新先不要使用遮罩。不用遮罩正常也能训练的。
8,训练
有两种模式可以选择:
SAEHD (6GB ): 高质量模型,至少6GB显存
特点/设置
- 最高640×640分辨率,
- 可支持half face, mid-half face, full face, whole face and head face 5中人脸尺寸类型
- 8种模型结构: DF, LIAE, 每种4 个变种 – regular, -U, -D and -UD
- 可调节的批大小(batchsize)
- 可调节的模型各层维度大小
- Auto Backup feature 自动备份
- Preview History预览图存档
- Adjustable Target Iteration 目标迭代次数
- Random Flip (yaw) 随机水平翻转
- Uniform Yaw 按角度顺序来训练
- Eye Priority 眼神训练优先
- Masked Training 带遮罩训练
- GPU Optimizer 优化器放GPU上
- Learning Dropout 学习率自动下降
- Random Warp 随机扭曲
- GAN Training Power 使用GAN
- True Face Training Power 提高人脸相似度
- Face and Background Style Power 提高颜色相似度
- Color Transfer modes 变对素材变色
- Gradient Clipping 梯度裁剪
- Pretrain Mode 使用预训练模式
Quick96 (2-4GB): 低配电脑可用
特点:
- 96×96 分辨率
- 只支持Full Face
- Batch size 4
- 默认DF-UD结构
由于Quick96不可调节,因此您将看到命令窗口弹出并仅询问一个问题-CPU或GPU(如果您有更多问题,它将选择其中之一或同时进行训练)。
但是,SAEHD将为您提供更多调整选项。
在这两种情况下,首先都会出现一个命令行窗口,您可以在其中输入模型设置。 初次使用时,您将可以访问以下说明的所有设置,在使用已经受过训练的模型进行训练并在“模型”文件夹中显示该模型时,您还将收到提示,您可以在其中选择要训练的模型( (如果您的“模型”文件夹中存在多个模型文件)。
您还将始终提示您选择要在其上运行培训器的GPU或CPU。
启动后将看到的第二件事是预览窗口,如下所示:
- model resolution 模型分辨率
- model architecture 模型结构
- models dimensions (dims settings) 模型维度参数
- face type 人脸类型
8.1 参数配置与说明
- 建议设置为1
-
自动备份频率,0不备份。输入2表示两个小时备份一次
- 建议设置n
-
每次迭代会保存当前训练效果图,你查看模型进步效果,来判断是否已经训练到顶峰了。图存在model内以history结尾的夹中。预览窗图就OK了。这个功能给做专业对试的/p>
- 默认无限制
-
设置一个整数,当迭代次数达到这个值就会自动停止训练,默认为无限制,直到你手动停止为止。
- 建议设置Y
-
当你人脸素材比较少的时候比较有用,通过这个参数将人脸图片垂直翻转,增加素材量。比如目标视频有右侧连,原视频只有左侧脸的时候。但是翻转后的样本和真是的情况可能会有一些误差。素材比较充分的情况下建议关闭,保证相似度,自然度。
- 默认无限制
-
批处理大小设置会影响每次迭代中相互比较的面孔数。 最低值是2,您可以提高到GPU允许的最大值,受GPU影响。 模型分辨率,尺寸越高,启用的功能越多,将需要更多的显存,因此可能需要较小的批处理大小。 建议不要使用低于4的值。批量越大,质量越好,但训练时间越长(迭代时间越长)。 对于初始阶段,可以将其设置为较低的值以加快初始训练的速度,然后将其升高。 最佳值为6-12 。 11gb显存设置为4,24gb显存可以尝试8~16
- 推荐设置256
-
这里你设置了你的模型分辨率,此选项不可重置。分辨率可以从64×64增加到640×640,增量为:16(对于常规和-U架构变体),32(对于-D和-UD架构变体)。原则上来说分辨率越高,模型学习到的脸就越详细,最终清晰度越高,但是对配置的要求也会越来越高,使用的时间越来越多。
- 建议设置mf
-
这个选项可以指定人脸训练区域的大小,主要包括半脸,中脸,全脸,整脸,头。从左到有,区域越来越大。
半脸h:主要包括眉毛到嘴巴的区域,眉毛可能会出现问题
中脸mf:优化了眉毛的处理,面积提升30%,基本解决眉毛的问题。建议)
全脸f:脸部区域大于中脸,贴合人脸边缘,不包含额头。推荐。
整脸wf:全脸的基础上,可以解决额头的问题,需要配合遮罩处理(xseg)
头h:包含整个头部,包括脸和头发,配合遮罩处理实现换头。
- 默认值是0.0(禁用)
-
改选项取值范围为0.xx-1.0 , 使用目的是让合成的人更像src。和GAN强度一样,只有在训练充分并关闭了随机扭曲之后在考虑启用。启用之前,建议先备份。典型值是0.01 ,你可以尝试更低的值,比如0.001,切勿求高。这个参数对性能的影响很小,当然也有可能会导致OOM。
- 默认值是0.0(禁用)。
-
此设置控制图像的面部或背景部分的样式转移,能提升合成质量(说是这么说,但是大部分情况下会蹦)。启用后对性能有影响,可能需要降低bs或禁止GPU优化器,启用前记得备份,使用的数值不要太大。
- 默认使用None,如果后期发现合成效果不好,尝试换一种,只能试,没有标准答案
-
这个选项是用来匹配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/
- 默认值为n(禁用)
-
梯度裁剪。实现此功能是为了防止在使用DFL 2.0的各种功能时可能发生的所谓的模型崩溃/损坏。 它对性能的影响很小,因此,如果您真的不想使用它,则必须启用自动备份,因为崩溃后的模型无法恢复,必须将其废弃,并且必须从头开始进行培训。 默认值为n(禁用),但是由于对性能的影响非常低,并且如果保持启用状态,可以防止模型崩溃而节省大量时间。 使用Style Powers时最容易发生模型崩溃,因此强烈建议您启用渐变裁剪或备份(也可以手动进行)。 这个功能最初引入是为了防止模型崩溃(后来好像没啥用了,不开也不太蹦)。 它对性能的影响很小,如果不想使用它,就自觉把自动备份打开,有备无患。
- 默认值为n(禁用)
-
启用预训练过程,该过程使用随机人脸数据集对模型进行初始训练,将其训练约200k-400k次迭代后,可以在开始使用要训练的实际data_src和data_dst进行训练时使用此类模型,因为您可以节省时间不必每次都从0开始全面训练(模型将“知道”面孔的外观,从而加快初始训练阶段)。可以随时启用pretrain选项,但建议在开始时仅对模型进行一次预训练。您还可以使用自己的自定义面集进行预训练,您要做的就是创建一个(可以是data_src或data_dst),然后使用4.2)data_src(或dst)util faceset pack .bat文件打包成一个文件,然后将其重命名为faceset.bak并替换(备份旧的)“ … _ internal pretrain_CelebA”文件夹中的文件。默认值为n(禁用)。但是,如果要节省一些时间,可以去论坛找别人训练好的模型。
要使用共享的预训练模型,只需下载它,将所有文件直接放入模型文件夹中,开始训练,在选择要训练的模型(如果在模型文件夹中有更多内容)和用于训练的设备后2秒钟内按任意键 (GPU / CPU)来覆盖模型设置,并确保禁用预训练选项,以便您开始正确的训练;如果您启用了预训练选项,则模型将继续进行预训练。 请注意,该模型会将迭代计数恢复为0,这是预训练模型的正常行为。
8.2 Merging合成
训练完模型后,该将学习的人脸合并到原始帧上以形成最终视频了(转换)。为此,我们有对应的转换脚本:
merge SAEHD
双击后,命令行窗口将出现,并带有多个提示。
第一个将询问您是否要使用带交互界面的转化器,默认值为y(启用),建议开启,边调参数边预览。
Use interactive merger( y/n ) :
第二个将询问您要使用哪种模型:
Choose one of saved models, or enter a name to create a new model.
[r] : rename
[d] : delete
[0] : new – latest
第3个会问您要在合并(转换)过程中使用哪个GPU / GPU:
Choose one or several GPU idxs (separated by comma).
[CPU] : CPU
[0] : GeForce GTX 2070 8GB
[0] Which GPU indexes to choose:
按Enter将使用默认值(0)。
完成之后,您将看到一个带有当前设置的命令行窗口以及一个预览窗口,其中显示了操作交互式转换器/合并程序所需的所有控件。
这是命令行窗口和转换器预览窗口的快速浏览:
Converter具有许多选项,可用于更改遮罩类型,大小,羽化/模糊,还可以添加其他颜色转移并进一步锐化/增强最终训练的脸部。

首先调整W/S,E/D快捷键:
这是解释的所有合并/转换器功能的列表:
1. Main overlay modes:
-
original: 显示原始画面而没有换脸
-
:
-
overlay: 简单地将学习到的脸覆盖在框架上 (推荐用这个,滚石注)
-
hist-match: 根据直方图叠加学习的面部和试图以使其匹配(具有2种模式:正常模式和可通过Z切换的蒙版)
-
seamless: 使用opencv泊松无缝克隆功能在原始帧的头部上方融合新学习的面部
-
seamless hist match: 结合了直方图匹配和无缝匹配。
-
raw-rgb: 覆盖原始学习过的脸部而没有任何遮罩
注意:无缝模式可能导致闪烁。
2. Hist match threshold:在直方图匹配和无缝直方图覆盖模式下控制直方图匹配的强度。
3. Erode mask: 控制遮罩的大小。
4. Blur mask: 使遮罩边缘模糊/羽化,以实现更平滑的过渡。
5. Motion blur: 动态模糊。
- 输入初始参数(转换器模式,模型,GPU / CPU)后,合并将加载所有帧和data_dst对齐的数据,同时,它会计算用于创建此设置控制的运动模糊效果的运动矢量,让您 将其添加到人脸移动的地方,但是即使移动很小,高值也可能使人脸模糊。 该选项仅在“ data_dst / aligned”文件夹中存在一组面孔时才有效-如果在清理过程中某些面孔带有_1前缀(即使只有一个人的面孔),效果将不起作用,同样 如果有一个可以反射目标人员面部的镜子,在这种情况下,您将无法使用运动模糊,并且添加该模糊的唯一方法是分别训练每组面部。
R – 增加motion blur
F – 减少motion blur
6. Super resolution: 超分辨率使用与data_src数据集/面部设置增强器类似的算法,它可以为牙齿,眼睛等区域添加更多定义,并增强所学面部的细节/纹理。
7. Blur/sharpen: 使用方块或高斯方法模糊或锐化所学的面部。
8. Face scale: 缩放人脸。
9. Mask modes: 6种遮罩计算方式,效果自己试一遍就知道了
dst: uses masks derived from the shape of the landmarks generated during data_dst faceset/dataset extraction.
learned-prd: uses masks learned during training. Keep shape of SRC faces.
learned-dst: uses masks learned during training. Keep shape of DST faces.
learned-prd*dst: combines both masks, smaller size of both.
learned-prd dst: combines both masks, bigger size of both.
XSeg-prd: uses XSeg model to mask using data from source faces.
XSeg-dst: uses XSeg model to mask using data from destination faces.
XSeg-prddst: combines both masks, smaller size of both.
learned-prddstXSeg-dstprd: combines all 4 mask modes, smaller size of all.
10. Color transfer modes: 与训练过程中的颜色转移类似,您可以使用此功能将学习到的脸部的肤色与原始帧更好地匹配,以实现更加无缝和逼真的脸部交换。 有8种不同的模式:
- RCT
- LCT
- MKL
- MKL-M
- IDT
- IDT-M
- SOT – M
- MIX-M
11. Image degrade modes: 您可以使用3种设置来影响原始帧的外观(不影响换面):
Denoise – denoises image making it slightly blurry (I – increases effect, K – decrease effect)
Bicubic – blurs the image using bicubic method (O – increases effect, L – decrease effect)
Color – decreases color bit depth (P – increases effect, ; – decrease effect)
附加控件::
TAB button – 在主预览窗口和帮助屏幕之间切换。
请记住,您只能在主预览窗口中更改参数,按帮助屏幕上的任何其他按钮都不会更改它们。
-/_ and =/ buttons are used to scale the preview window.
Use caps lock to change the increment from 1 to 10 (affects all numerical values).
要保存/覆盖当前一帧中所有下一帧的设置 shift /
要保存/覆盖当前一帧中所有先前帧的设置 shift M
要开始合并所有帧,请按 shift >
要返回第一帧,请按 shift <
要仅转换下一帧,请按 >
要返回上一帧,请按 <
8.3 把转化好的帧合成为视频
合并/转换所有面部之后,“ data_dst”文件夹中将有一个名为“ merged”的文件夹,其中包含构成视频的所有帧。
最后一步是将它们转换回视频,并与data_dst.mp4文件中的原始音轨合并。
为此,您将使用提供的4个.bat文件之一,这些文件将使用FFMPEG将所有帧组合成以下格式之一的视频-avi,mp4,lessless mp4或lossless mov:
- merged to avi
- merged to mov lossless 无损mov
- merged to mp4 lossless 无损MP4
- merged to mp4
9,附录:
src和dst视频素材,任何一个换人了都要重新训练model模型,始终保持一对一。
可以这样:假如src中的视频人物是钢铁侠,那么后面可以找很多钢铁侠的视频素材来充当src素材进行训练,也就是说src中的人物一样,但是具体视频可以多样,dst也如此。
10,常见问题和回答(来自于 络)
(10.1) 1.0和2.0有什么区别/strong>
2.0是经过改进和优化的版本,由于进行了优化,它提供了更好的性能,这意味着您可以训练更高分辨率的模型或更快地训练现有模型。 合并和提取也明显更快。 问题在于DFL 2.0不再支持AMD GPU / OpenCL,唯一的使用方法是与Nvidia
GPU(需要最少3.0 CUDA计算级别的GPU支持)或CPU一起使用。
请记住,在CPU上进行训练的速度要慢得多,其他所有步骤(例如提取和合并(以前称为转换))也要慢得多。
此外,新版本仅提供2种型 -SAEHD和Quick 96,没有H128 / H64 / DF / LIAEF / SAE型 。
同样,从1.0开始的所有训练/预训练模型(SAE / SAEHD)与2.0不兼容,因此您需要训练新模型。
在上面的主要指南中,您还可以了解其他一些更改。
(10.2) 做一次换脸需要多长时间/strong>
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!