Deepface Lab2.0参数选取建议

2024-04-04 00:36

本文主要是介绍Deepface Lab2.0参数选取建议,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

制作非常基本和低质量/分辨率的 Deepfakes 的最低要求:

- 支持 AVX 和 SSE 指令的现代 4 核 CPU
- 16GB RAM
- 具有 8GB VRAM 的现代 Nvidia 或 AMD GPU
- 充足的存储空间和大页面文件

确保启用硬件-加速 Windows 10/11 下的 GPU 调度并确保您的 GPU 驱动程序是最新的。

2. 为您的 GPU 下载正确的 DFL 版本(版本命名方案可能会更改):

- 对于 Nvidia GTX 900-1000 和 RTX 2000 系列以及使用与这些系列相同架构的其他 GPU,使用“DeepFaceLab_NVIDIA_up_to_RTX2080Ti”构建。
- 对于 Nvidia RTX 3000-4000 系列卡和使用相同架构的其他 GPU,使用“DeepFaceLab_NVIDIA_RTX3000_series”构建。
- 对于现代 AMD 卡,请使用“DeepFaceLab_DirectX12”版本(可能不适用于某些较旧的 AMD GPU)。
 

第 1 步 - DFL 基础知识

DeepFaceLab 2.0由多个 .bat 组成,这些脚本用于运行创建 Deepfakes 所需的各种进程,在主文件夹中您将看到它们和 2 个文件夹:

  • _internal - 内部文件,使 DFL 工作的东西,No Touchy!

  • 工作区- 这是您的模型、视频、帧、数据集和最终视频输出所在的位置。

基本术语:
SRC - 始终指我们试图将其脸部交换到目标视频或照片中的人的内容(帧、脸部)。
SRC 集/SRC 数据集/源数据集/SRC 人脸 - 提取的人脸(源人脸的平方比图像文件,包含附加数据,如地标、掩模、xseg 标签、原始帧上的位置/大小/旋转)交换成视频。

DST - 始终指我们正在交换脸部的目标视频(或 DST/DST 视频)中的内容(帧、脸部)。DST

集/DST 数据集/目标数据集/DST 脸部 - 提取的目标人物脸部的集合,其脸部我们将替换为与 SRC 相似、格式相同且包含与 SRC 面孔相同类型的数据。

帧 - 从源视频或目标视频中提取的帧,提取帧后将它们分别放置在“data_src”或“data_dst”文件夹中。

面孔 - 从所使用的视频或照片的原始帧中提取的面孔的 SRC/DST 图像。

模型 - 组成用户可以创建/训练的 SAEHD、AMP 和 XSeg 模型的文件集合,所有文件都放置在“workspace”文件夹内的“model”文件夹内,基本描述模型如下(指南后面会更详细) ):

1. SAEHD - 最流行和最常用的模型,基于不同的架构有几种不同的变体,每种都有自己的优点和缺点,但一般来说,当 SRC 和 DST 有一些相似之处时,它意味着交换面孔,特别是一般面孔/头部形状。可以自由地重复使用、预先训练,并且通常可以以良好的质量提供快速结果,但某些架构可能会遇到相似度低或照明和颜色匹配不佳的问题。

2. AMP - 新的实验模型,可以更好地适应源数据并保留其形状,这意味着您可以使用它来交换看起来完全相似的面孔,但这需要手动合成,因为 DFL 没有更先进的遮罩技术,例如背景修复。与 SAEHD 不同的是,SAEHD 没有不同的架构可供选择,并且在重用方面不太通用,并且需要更长的训练时间,也没有预训练选项,但可以提供更高的质量,并且结果看起来更像 SRC。

3. Quick 96 - 测试模型,使用SAEHD DF-UD 96分辨率参数和Full Face脸型,用于快速测试。

4. XSeg - 用户可训练的遮罩模型,用于为 SRC 和 DST 面部生成更精确的遮罩,可以排除各种障碍物(取决于 SRC 和 DST 面部上的用户标签),DFL 附带通用训练的全脸遮罩模型,如果您不想立即创建自己的标签。

XSeg 标签 - 用户在 XSeg 编辑器中创建的定义面部形状的标签,还可能包括 SRC 和 DST 面部上的排除(或首先不包括)障碍物,用于训练 XSeg 模型生成蒙版。

掩模 - 由 XSeg 模型生成,需要掩模来定义应该训练的面部区域(SRC 或 DST 面部)以及定义合并 (DST) 期间最终掩模所需的形状和障碍物。默认情况下,一种基本蒙版也嵌入到提取的脸部中,该脸部是从面部标志派生的,它是一种基本蒙版,可用于使用全脸脸部类型模型或更低版本进行基本交换(稍后将详细介绍脸部类型和蒙版)指南)

现在您已经了解了一些基本术语,是时候弄清楚您到底想做什么了。

根据您尝试换脸的视频的复杂程度,您要么只需要几次采访,要么可能需要收集更多的源内容来创建 SRC 数据集,其中可能还包括高分辨率照片、电影、电视节目和等等,我们的想法是构建一个涵盖目标视频中尽可能多的角度、表情和照明条件的集合,因为您可能怀疑这是制作良好的 Deepfake 的最重要部分,但这并不总是可能的找到所有需要的镜头,因此即使您学习了所有技巧和技术,您制作的所有视频也永远无法取得 100% 的成功,除非您只专注于非常简单的视频。请记住,这与面孔的数量无关,而与表情的多样性有关,

一个好的 Deepfake 还要求你的来源人和目标人都有相似形状的头部,虽然可以交换看起来完全相似的人,而且新的 AMP 模型有望解决不同脸型的问题,但宽度仍然很重要头部的长度以及下颌线、下巴的形状和面部的总体比例相似,以获得最佳效果。如果两个人也做出相似的表情那就更好了。
假设您知道将使用什么视频作为目标,您收集了大量源数据来创建源集,或者至少确保您的源和目标人员有足够的源数据并且质量良好有类似形状的头部,现在我们可以继续实际创建视频的过程,请按照以下步骤操作:
第 2 步 - 工作空间清理/删除:

1) 清除工作区- 删除“工作区”文件夹中的所有数据,当您下载新版本的 DFL 时,“工作区”文件夹中默认有一些演示文件,您可以用它来练习您的第一个假动作,您可以通过以下方式删除它们手动或使用此 .bat 来清理您的“工作区”文件夹,但由于您很少在完成项目后删除模型和数据集,因此该 .bat 基本上是无用且危险的,因为您可能会意外删除所有工作,因此我推荐您删除这个.bat。
第 3 步 - 源内容收集和提取:

要创建高质量的源数据集,您需要找到主题的源材料,可以是照片或视频,视频是首选,因为需要多种表情和角度来覆盖面部的所有可能外观,以便模型可以如果学得正确的话,另一方面,照片通常会提供出色的细节,并且非常适合简单的正面场景,并且会提供更清晰的结果。您还可以合并视频和照片。以下是您需要确保的一些事项,以便您的源数据集尽可能好。

1. 视频/照片应覆盖所有或至少大部分可能的面部/头部角度- 向上、向下、向左、向右、直视镜头以及介于两者之间的一切,实现这一目标的最佳方法是使用多个采访和许多电影,而不是依赖单个视频(主要以一个角度和一些小角度为特色)变化和一种照明类型)。

提示: 如果您的 DST 视频不包含某些角度(例如侧面轮廓)或光照条件,则无需包含具有此类光照和角度的源,您可以创建仅适用于特定类型的角度和光照的源集,或者创建一个更大、更通用的集合,应该适用于多个不同的目标视频。使用多少个不同的视频取决于您,但请记住,使用太多不同的源实际上会降低结果的相似性,如果您可以使用较少的源覆盖所有角度和所需的照明条件,那么实际上使用较少的内容总是更好从而使 SRC 设置更小。

2. 视频/照片应涵盖所有不同的面部表情- 包括张嘴/闭嘴、睁眼/闭眼、微笑、皱眉、看向不同方向的眼睛 - 表情的变化越多,效果就越好。

3. 源内容应该一致- 您不希望模糊、低分辨率和严重压缩的面孔与清晰、锐利和高质量的面孔相邻,因此您应该只使用您能找到的最佳质量的视频和照片,如果您可以的话如果某些角度/表情仅出现在较低质量/模糊的视频/照片中,那么您应该保留它们并尝试升级它们。

升级可以使用 Topaz 等软件直接在帧或视频上完成,也可以在 DFDNet、DFL Enhance、Remini、GPEN 等人脸(提取后)上完成(新的升级方法一直在创建,机器学习在不断发展)。

提示:在以下情况下,良好的一致性尤其重要:

有胡须的面孔 - 尝试仅使用同一天拍摄的单部电影或照片和采访,除非您要交换的面孔很小并且您不会能够区分每根头发,在这种情况下,允许混合在不同日期拍摄的源,但前提是胡须仍然具有相似的外观。

头部换成短发 - 由于头部头发的随机性,您应该只使用同一内容(采访、照片)拍摄的内容,并且不要将其与其他内容混合,或者如果您正在使用电影然后坚持看一部电影。

上述例外情况是,如果头发和胡须总是以相同的方式进行风格化,或者是假的,因此不会改变,在这种情况下,可以根据需要混合尽可能多的来源。

带妆的面孔 - 如果您必须使用具有与其他人不相符的特定妆容的视频或照片,请避免包含妆容与特定人通常具有的类型显着不同的来源,尝试对帧进行正确的着色(在使用批处理图像提取帧后)处理或视频编辑期间之前),这也可以在提取后完成,但需要先保存元数据并在编辑面部后恢复元数据,下一步将详细介绍)。

4.大部分应该是高质量的- 如上所述,您可以保留使用一些模糊的照片/视频,但只有当您无法在其他人中找到某些表情/面部角度时,但请确保将它们升级到可接受的质量,太多升级的内容可能会对质量产生负面影响,因此最好只在数据集的一小部分上使用它(如果可能的话,在某些情况下,接近 100% 的数据集可能需要以某种方式增强)。

5、灯光要一致- 一些小阴影是可以的,但您不应该包含具有刺眼的定向照明的内容,如果可能的话,尝试仅使用阴影柔和且光线漫射的内容。对于 LIAE 架构来说,它可能不那么重要,因为它可以更好地处理照明,但对于 DF 架构来说,重要的是每个面角都有多个照明条件,最好至少 3 个(正面漫反射,左侧和右侧有柔和的阴影,不要太暗,阴影区域中的细节必须仍然可见,或者没有阴影,只有漫射照明,可以在脸部的左侧或右侧创建更亮的区域)。源面集/数据集可以包含不同亮度的面,但不应包含过暗的面,除非您的 DST 也是暗的。

6. 如果您仅使用图片或者图片占数据集的大部分- 确保他们填写了上述所有支票,20 张左右的图片是不够的。甚至不用费心尝试用这么少的图片来制作任何东西。

7. 将源数据集中的人脸总数保持在 3.000 - 8.000 左右- 在某些情况下可能需要更大的集合,但我建议将通用集合保持在 12k 以下,如果确实需要,则为 15k,更大的集合则可以产生更多看起来模糊的结果,它们也将需要更长的时间来训练,但如果你的目标视频几乎覆盖了所有可以想象的角度,那么将需要大的 SRC 集来覆盖所有这些角度。

现在您已经收集了源内容,是时候从视频中提取帧了(照片不需要太多工作,但您可以浏览它们并删除任何模糊/低分辨率图片、黑白图片等)。

提示: 回复。gardles 提取帧的方法,您将使用提前为所有不同的源准备文件夹。

您可以将它们放置在任何地方,但我喜欢将它们放置在 data_src、data_dst 和模型文件夹旁边的工作区文件夹中,根据使用的来源(电影标题、采访标题、事件或照片日期)命名这些文件夹,然后放置相应的框架提取完成后,然后重命名每组帧,以便清楚给定的面孔来自哪里。

这些名称在人脸提取(步骤 4)后嵌入到人脸中,因此即使您随后重命名它们(人脸)或对它们进行排序,它们也会保留原始文件名,您可以使用您将在步骤 4 中了解的 .bat 恢复该文件名。
您可以通过几种不同的方式提取帧:

a) 通过将每个视频重命名为 data_src 来单独提取每个视频(视频应为 mp4 格式,但 DFL 使用 FFMPEG,因此它可能应该处理任何格式和编解码器),方法是使用 2)从video data_src从视频文件中提取帧,然后将它们输出到“data_src”文件夹(自动创建),可用选项:

- FPS - 跳过视频默认帧速率,输入其他帧速率的数值(例如输入 5 只会将视频渲染为每秒 5 帧,这意味着将提取更少的帧),具体取决于长度,我建议使用 5-10FPS SRC 帧提取,无论您如何提取帧(方法 b 和 c)

- JPG/PNG - 选择提取帧的格式,jpg 较小且质量稍低,png 较大但提取的帧具有更好的质量,有与原始视频相比,PNG 应该没有质量损失。

b) 将所有视频导入到您选择的视频编辑软件中,确保不要一起编辑不同分辨率的视频,而是分别处理 720p、1080p、4K 视频,此时您还可以剪切视频以保留具有最佳质量脸部的最佳照片,因此脸部距离较远/较小的照片会模糊(失焦、严重的运动模糊)、非常暗或使用单色灯光照明,或者只是灯光不太亮自然的或同时具有非常明亮的部分和黑暗的阴影以及大部分脸部被遮挡的镜头应该被丢弃,除非它是一种非常独特的表情,不经常出现,或者它的角度也很少被发现(例如人们直接向上/向下看)或者如果您的目标视频实际上具有此类风格化的照明,有时,如果您在其他地方找不到给定的角度,您只需要使用这些较低质量的面孔,然后将视频直接渲染为 jpg 或 png 帧到您的 data_src 文件夹中(如果您之前删除了它,则手动创建它),然后渲染整个批次给定分辨率的视频或单独渲染每个剪辑。

c) 使用 MVE 及其场景检测为您进行剪切,然后使用它以特定的帧速率和文件格式将您选择的场景仅输出到文件夹中,然后还重命名它们,以便您的所有 ace 都有唯一的名称对应原始视频的标题,对后期非常有帮助.
3.视频剪辑(可选):3)剪切视频(将视频放在我身上)- 允许通过将任何视频拖放到该 .bat 文件中来快速将其剪切到所需的长度。如果您没有视频编辑软件并且想要快速剪切视频,那么它很有用,但是由于 MVE(免费)的存在,它的有用性值得怀疑,因为它只能简单地将视频的一部分从 A 点剪切到 B 点,手动剪切视频或使用MVE。
 

第 4 步 - 从目标视频中提取帧(DATA_DST.MP4) :


您还需要从目标视频中提取帧,按照您想要的方式对其进行编辑后,将其渲染为 data_dst.mp4 并使用 3)从视频 data_dst FULL FPS 中提取图像来提取帧,帧将被放入“data_dst” " 文件夹,可用选项为 JPG 或 PNG 格式输出 - 如果您想要较小的尺寸,请选择 JPG,为了获得最佳质量,请选择 PNG。没有帧速率选项,因为您想以原始帧速率提取视频。
 

第 5 步 - DATA_SRC 人脸/数据集提取:


准备 SRC 数据集的第二阶段是从位于“data_src”文件夹内的提取帧中提取人脸。假设您确实重命名了文件夹内的所有帧集,将它们移回主“data_src”文件夹并运行以下4) data_src 面部集提取- 使用 S3FD 算法的自动提取器,这将处理您集中的大多数面部,但并不完美,它将无法检测到某些面孔并产生许多误报并检测到其他人,您将或多或少地手动删除这些人。

还有4)data_srcfaceset提取MANUAL- 手动提取器,使用方法见5.1。您可以使用它来手动对齐某些脸部,特别是如果您有一些图片或来自电影的小来源,这些图片或小来源具有一些罕见的角度,这些角度对于自动提取器来说往往很难(例如直接向上或向下看)。S3FD和手动

提取器 的可用选项有: -使用哪个 GPU(或 CPU)进行提取- 使用 GPU,它几乎总是更快。 -脸型: a) 全脸/FF - 适用于 FF 型号或下脸类型(半脸/Hf 和中半脸/MF,现在很少使用)。 b) 全脸/WF - 适用于 WF 型号或更低版本,建议作为适用于 FF 和 WF 型号的通用/面向未来的解决方案。

c) Head - 对于 HEAD 模型,可以与 WF 或 FF 等其他模型一起使用,但需要非常高分辨率的面部提取,以具有与较低覆盖率面部类型相同的细节水平(清晰度),使用 3D 地标而不是 2D 地标作为在 FF 和 WF 中,但仍然与使用这些面部类型的模型兼容。

请记住,您可以随时使用4.2) data_src/dst util Faceset Resize或 MVE 将 FaceType(及其分辨率)更改为较低的分辨率(它也可以将较低的 res/facetype 设置为较高的分辨率,但要求您保留原始帧和照片)。因此,如果您主要使用 FF 和 WF 模型进行面部交换,而 HEAD 则主要用于 HEAD 交换,但有时您可能希望用于 FF/WF 面部交换,那么为什么我建议使用 WF。

-图像中的最大面孔数- 提取器应从帧中提取多少张面孔,建议使用 0 值,因为它会提取尽可能多的内容。选择 1 或 2 将仅从每帧中提取 1 或 2 个脸部。

-数据集的分辨率:该值很大程度上取决于源帧的分辨率,以下是我个人的建议,具体取决于源剪辑的分辨率,您当然可以使用不同的值,您甚至可以测量其中最大的脸有多大给定的源是并将其用作值(请记住使用以 16 为增量的值)。

稍后也可以使用4.2) data_src/dst utilfaceset resize更改分辨率或 MVE,您甚至可以使用 MVE 来提取具有估计脸部尺寸选项的脸部,该选项将使用提取的脸部、原始帧中的地标数据,并以帧上每个脸部的实际尺寸再次重新提取整个集合。

我建议 WF 使用以下值:

720p 或更低分辨率的源 - 512-768
1080p 源 - 768-1024
4K 源 - 1024-2048

对于头部提取,添加额外的 256-512 只是为了确保您不会丢失提取的脸部的任何细节,或者在最靠近相机的帧上测量头部的实际尺寸。如果有疑问,请使用 MVE 提取面部并启用估计面部尺寸选项。

- Jpeg 质量- 使用 100 以获得最佳质量。DFL 只能提取 JPG 格式的人脸。没有理由低于 100,尺寸差异不会很大,但质量会急剧下降,导致质量变差。

-选择是否生成“aligned_debug”图像- 可以在之后生成,它们用于检查地标是否正确,但这也可以使用 MVE 完成,并且您实际上可以使用 MVE 手动修复地标,因此在大多数情况下,这对于 SRC 数据集不是很有用。
 

第 6 步 - DATA_SRC 排序和清理

SRC 数据集提取完成后,下一步是清除 SRC 数据集中的误报和错误对齐的人脸。为了帮助您对脸部进行排序,如果它是一个小集合并且只有几个视频,使用提供的排序方法应该足够了,如果您正在处理更大的集合,请使用 MVE 进行排序(请参阅指南了解更多信息)。

要执行排序,请使用4.2) data_src sort -它允许您使用各种排序算法对数据集进行排序,这些是可用的排序类型:

[0] 模糊 - 按图像模糊度排序(通过对比度确定),排序方法相当慢,不幸的是不是非常适合检测和正确分类模糊的面孔。
[1] 运动模糊 - 通过检查运动模糊对图像进行排序,有助于去除具有大量运动模糊的面部,比 [0] 模糊更快,并且可以用作替代方案,但与 [0] 类似,并不完美。
[2] 面部偏航方向 - 按偏航排序(从向左看的脸到向右看的脸)。
[3] 面部俯仰方向 - 按俯仰排序(从面部向上看到向下看)。
[4] 源图像中的面部矩形大小 - 按原始帧上面部的大小排序(从最大到最小的面部)。比模糊快得多。
[5] 直方图相似度 - 按直方图相似度排序,最后不相似的面孔,可用于删除外观截然不同的面孔,也可将它们分组在一起。
[6] 直方图相异性 - 如上所述,但相异的面孔位于开头。
[7] 亮度 - 按整体图像/面部亮度排序。
[8] 色调 - 按色调排序。
[9] 黑色像素数量 - 按全黑像素数量排序(例如当脸部从框架中被切掉并且仅部分可见时)。
[10] 原始文件名 - 按原始文件名(从中提取面部的帧的)排序。没有 _0/_1 后缀(假设每帧只有 1 张脸)。
[11] 图像中的一张脸 - 按照原始帧中有多少张脸的顺序对脸部进行排序。
[12] 绝对像素差异 - 按图像工作方式的绝对差异进行排序,有助于删除外观截然不同的面孔。
[13] 最佳面孔 - 按多个因素排序,包括模糊并删除重复/相似的面孔,目标是排序后我们想要有多少面孔,丢弃的面孔将移动到文件夹“aligned_trash”。
[14] 最佳脸部更快 - 与最佳脸部类似,但使用源图像中的脸部矩形大小而不是模糊来确定脸部质量,比最佳脸部快得多。

我建议从简单的直方图排序开始[5],这会将看起来相似的面孔分组在一起,这包括我们要删除的所有不良面孔,因此它使手动选择过程更加容易。

初始排序完成后,打开对齐的文件夹,您可以使用 Windows 资源管理器浏览它,也可以使用 DFL 附带的外部应用程序,它可以更快地加载图像,以打开它4.1) data_src 查看对齐结果。

之后,您可以按偏航和俯仰进行额外排序,以删除任何看起来正确但实际上具有不良地标的面。
接下来,您可以按色调和亮度进行排序,以删除任何颜色较深或非常暗的面孔(假设您在直方图排序后尚未执行此操作)。
然后,您可以使用按模糊、运动模糊和面部矩形大小排序来删除任何模糊的面部、具有大量运动模糊的面部和小面部。之后你应该有相对干净的数据集。
最后,您可以使用任何其他您想要的方法对它们进行排序, SRC 面孔的顺序和文件名对任何事情都无关紧要,但是我总是建议恢复原始文件名,但不使用排序选项 10,而是使用 -4.2.other) data_src util 恢复原始文件名。

但是,如果您有包含数十个采访、数千张高分辨率图片以及许多电影和电视节目剧集的大型数据集,您应该考虑采用不同的方法来清理和排序您的数据集。

大多数认真制作 Deepfake 并处理大型、复杂源集的人很少使用 DFL 进行排序,而是使用称为机器视频编辑器(或简称为 MVE)的外部免费软件。MVE 具有自己的排序方法,几乎可以用于制作 Deepfake 视频的所有步骤。这还包括自动场景剪切和帧导出(方法 c),用于从源内容中获取帧,如步骤 2 - SRC 数据收集中所述)、数据集增强、标签/遮罩、编辑地标等等。

值得关注的是 Nvidia 相似度排序选项,其工作原理与直方图排序类似,但它是一种机器学习方法,可以更好地对面孔进行分组,这样您就可以按顺序获得列表中所需人员的 99% 的面孔,而且速度要快得多要删除其他面孔,它通常还会更精确地将不正确的面孔、戴眼镜的面孔、黑白面孔或浓重的面孔组合在一起,您将获得一个面孔组预览,您可以在其中选择或删除特定的面孔组,甚至检查哪些面孔在您删除面孔之前,面孔就位于该组中,但您也可以像在 Windows 资源管理器中或使用 XnView 一样浏览它们。


MVE 还有一个不和谐服务器(SFW,那里不允许成人深度伪造谈话),您可以在 github 页面上找到它的链接。该服务器上有其他指南,请在提问之前先观看它们。

无论您使用 MVE 还是 DFL 对集合进行排序,最后都可以执行几个最终步骤 - 重复删除:

这将稍微减少面部数量,从而加快训练速度,并且使集合中不再充满不必要的相似面部和重复项。您可以删除 lvl 0 处的面孔(完全相同的面孔),也可能删除 lvl 1 处的面孔,具体取决于有多少重复项,然后在电源上执行 lvl 2 和 lvl 3 操作,并将它们移动到两个相应命名的单独文件夹中。然后,您可以随时检索它们以查找具有不同眼睛方向或细微表情变化的其他面孔。

接下来(假设您在提取之前重命名了帧),最好根据面孔的来源将面孔移动到不同的文件夹中:

创建适合您的文件夹结构,我推荐以下结构:
- 电影、电视节目、采访和照片的主文件夹(请随意根据素材类型添加其他类别)
- 在每个类别中,为每个单独的源提供更多文件夹(对于照片,您可以根据照片类型或按年份进行分类,或者将其全部放在一个文件夹中)
- 在每个单独的文件夹中对于给定的源,最清晰、最好的面孔的文件夹和剩下的内容应该松散地放置在基本文件夹中
- 包含您计划增强/升级的所有模糊面孔的文件夹(更多信息请参见下面的“高级”)
- 所有放大的脸部的文件夹
- 所有重复的文件夹
- 最后是主文件夹,您可以简单地将其命名为对齐或主数据集,在其中组合来自所有源的最佳脸部和放大的脸部。

请记住,所有数据都在图像本身中,您可以自由地将它们移动到不同的文件夹、制作副本/备份、将它们存档在不同的驱动器、计算机上,通常您可以自由地将它们移动到 DFL 之外。RAID 不是备份 - 2-3 个副本、冷存储、不同位置的不同介质上的附加副本。至少每周或两周备份一次新数据,具体取决于您最终创建的数据量,最坏的情况下只备份几个便携式硬盘(基于 SSD 显然更好)。

完成此操作后,“data_src”文件夹中应该有一堆文件夹,并且“aligned”文件夹现在应该是空的,因为您已将所有面移动到不同的面,请将其删除。
 

高级- SRC 数据集增强。


您可能希望或需要在提取后提高某些脸部的质量和清晰度/细节水平。有些人升级整个数据集,而有些人只移动模糊的面孔,他们想要升级到单独的文件夹并以这种方式升级数据集的一部分,这可以在进行最终设置之前完成(升级所有模糊的面孔,无论您是否在期间使用它们)训练或未训练)或完成最终设置后(仅放大那些您实际需要训练的面孔)。然而,你应该只升级你真正需要的内容,例如,如果你已经很少有高质量的采访,并且想要升级另一个具有类似灯光、表情和角度的采访,然后跳过它,最好使用已经清晰且质量好的内容,而不是使用为了它而升级一切。高档的稀有面孔,稀有表情,

首先,收集您想要升级的所有模糊面孔,并将它们放入名为“模糊”的文件夹中(例如,随意命名),接下来根据升级方法,您可能需要或可能不需要保存元数据,一些升级方法我会重新训练这些信息,但大多数人不会,这就是为什么你需要这样做。我还建议对模糊文件夹进行备份,以防您使用的某些升级方法会替换文件夹中的原始图像(大多数输出到不同的文件夹)。将“模糊”重命名为“对齐”并运行:

4.2) data_src util Faceset Metadata Save - 将 SRC 数据集的嵌入元数据保存在对齐文件夹中作为 meta.dat 文件,如果您要放大脸部或对其进行任何类型的编辑,例如颜色校正(旋转或水平/垂直翻转),则这是必需的不允许)。

完成增强/放大/编辑面部后,您需要恢复元数据(在某些情况下),为此,请将“放大”文件夹重命名为“对齐”(或者如果您使用 Colab 或没有在本地放大面部)一般然后只需将它们复制到新的“aligned”文件夹),将您的meta.dat文件从原始“blurry”文件夹复制到“aligned”文件夹并运行:4.2)data_src utilfaceset元数据恢复 - 这将恢复元数据和现在这些面孔就可以使用了。

如果您忘记保存元数据,只要您有原始的模糊文件夹,您可以稍后保存,但是,如果您丢失了原始文件夹,现在只有放大的结果,没有元数据,您唯一能做的就是从中提取面孔那些面孔。
 

第 7 步 - DATA_DST 人脸/数据集提取:


这里的步骤与源数据集几乎相同,只有少数例外。首先使用以下方法从 DST 帧中提取人脸:5) data_dst Faceset extract - 利用 S3FD 人脸检测算法的自动人脸提取器。

除此之外你还会注意到其他提取方法,现在不要使用它们,但你需要让自己熟悉它们:

5) data_dst Faceset extract MANUAL RE-EXTRACT DELETED ALIGNED_DEBUG - 这个也很重要,它被使用从提取后沿着“aligned”文件夹创建的文件夹“aligned_debug”中删除相应的调试图像后,手动重新提取丢失的面孔,这使得可以交换所有面孔,更多关于它在步骤中的使用5.1.
5) data_dst Faceset extract MANUAL - 手动提取器,使用方法参见5.1。
5) data_dst 面集提取 + 手动修复- S3FD + 手动传递模型未检测到任何人脸的帧,您可以使用它代替5) data_dst 面集提取- 初始提取完成后,将打开一个窗口(与手动提取相同)或重新提取),您将能够从提取器无法检测到任何面部的帧中提取面部,甚至无法检测到误报,但这意味着在您重新提取所有面部之前,提取不会完成,所以这是不建议。

现在就使用第一种方法。

所有提取器模式的可用选项与 SRC 相同,除了无法选择我们要提取的面数 - 它总是尝试提取所有面,也无法选择是否需要aligned_debug 文件夹,它是生成的总是因为需要手动重新提取。
 

第 8 步 - DATA_DST 排序、清理和面部重新提取:


对齐 data_dst 面后,我们必须清理该组。

运行5.2) data_dst 排序- 与 src 排序相同,使用 [5] 直方图相似度排序选项,下一步运行5.1) data_dst 查看对齐结果- 这将允许您使用外部应用程序查看“对齐”文件夹的内容,该应用程序提供更快的速度比默认的 Windows 资源管理器生成缩略图,在这里您可以简单地浏览所有面孔并删除所有不好的面孔(由于不正确的地标以及误报和其他人的错误导致的旋转/缩放不良,与旁边的其他面孔相比非常小或很大)面),完成后运行5.2)data_dst util 恢复原始文件名 - 其工作方式与源文件名相同,它将恢复原始文件名和所有面的顺序。

接下来,我们必须删除调试帧,以便我们可以使用手动重新提取器从提取器无法正确提取面部的帧中提取面部,为此运行 5.1) data_dst 查看aligned_debug结果- 这将允许您快速浏览“aligned_debug”的内容,在这里您检查所有调试帧以查找目标人脸上的地标放置不正确的那些(没有与脸部、眼睛、鼻子、嘴巴的边缘对齐)眉毛)或丢失,这些帧必须被删除,这将告诉手动重新提取器向您显示哪些帧,以便您可以手动重新提取它们。您可以手动选择所有调试帧进行删除,但这意味着要手动浏览几乎所有调试帧,这样很容易错过一些帧,更好的方法是利用对齐的文件夹(清理干净后)现在应该只包含好面孔,利用它来发挥您的优势(您可以复制调试文件夹,使用对齐文件夹中的面从中删除所有好的帧,然后检查剩下的内容并使用它从原始调试文件夹中删除那些坏帧)。完成删除所有缺少/坏面的调试帧后,运行5) data_dst faceset extract MANUAL RE-EXTRACT DELETED ALIGNED_DEBUG从相应帧中手动重新提取人脸。

手动提取器的使用:

启动手动提取器后,将打开一个窗口,您可以在其中手动找到要提取的面孔,并在命令行窗口中显示进度:

- 使用 yo。您的鼠标定位面部
- 使用鼠标滚轮更改搜索区域的大小(矩形大小,您在排序中看到此选项,您可以根据提取过程中矩形大小的大小对面部进行排序) - 确保全部或至少
大多数地标(在某些情况下,根据角度、照明或当前障碍物,可能无法精确对齐所有地标,因此只需尝试找到一个覆盖所有地标的点即可)。可见的部分最多并且不太错位)落在眼睛、嘴巴、鼻子、眉毛等重要部位并正确遵循脸部形状,向上箭头显示脸部的“向上”或“顶部”位置
-使用键 A 更改精度模式,现在地标不会“粘”到检测到的面部,您可以更正确地定位地标,它也会运行得更快 - 使用 < 和 > 键(或 、 和 。
)要前后移动,要确认检测,请单击鼠标左键并移动到下一个,或者按 Enter 键,这两者都会确认选择并移动到下一个面部 - 鼠标右键用于对齐无法检测到的前向或非人脸(需要应用 xseg
)为了正确掩蔽)
-q 跳过剩余的面孔,保存您所做的并退出提取器(当您到达最后一张面孔并确认它时,它也会关闭并保存)现在您应该提取

所有面孔,但在某些情况下您将不得不运行它几次(我上面提到的情况,反射,分割场景,过渡)。在这种情况下,将“aligned”文件夹重命名为其他文件夹,然后重复这些步骤,重命名对齐的面,将它们复制到“aligned_debug”的副本,替换,删除所选内容,删除需要提取的内容之外的剩余部分,复制到原始的“aligned_debug”文件夹,替换,删除荧光笔,再次运行手动重新提取器,然后合并两个对齐的文件夹,确保不会意外替换某些面。

完成后,您可以选择与即将完成的 dst 数据集一起使用的其他 .bat:

5.2) data_dst util Faceset pack 和5.2) data_dst util Faceset unpack - 与源代码相同,让您快速将整个数据集打包成一个文件。

5.2) data_dst util faceset resize - 与 SRC 数据集的工作方式相同。

但在开始训练之前,您还必须对数据集进行屏蔽。
 

第 9 步 - XSEG 模型训练、数据集标签和屏蔽:


XSeg 是做什么用的?某些人脸类型需要应用与提取后数据集获得的默认蒙版不同的蒙版,这些默认蒙版源自与全脸人脸类型类似的地标和覆盖区域,因此为什么要使用全脸或较低覆盖率面部类型 XSeg 不是必需的,但对于整个面部和头部则需要。无论面部类型如何,在 SAEHD/AMP 模型训练期间,XSeg 掩模还需要使用面部和背景样式功率(FSP、BGSP)。

XSeg 允许您定义如何遮盖脸部、脸部的哪些部分将接受训练,哪些部分不会接受训练。

还需要排除面部上方的障碍物,以便在合并视频后,正确排除面部前面的手,这意味着交换的面部会以这种方式被遮盖,以使手可见且不覆盖它。

XSeg 可用于排除几乎所有障碍物:您可以完全控制模型认为什么是面孔、什么不是面孔。

请先熟悉一些术语,了解 XSeg 模型、数据集、标签和掩模之间的区别非常重要: XSeg

模型 - 用户可训练模型,用于将掩模应用于 SRC 和 DST 数据集以及在合并期间掩模面部过程。
XSeg 标签 - 用户在脸上绘制的多边形,用于定义面部区域以及 XSeg 模型用于训练的内容。
XSeg mask - 由经过训练的 XSeg 模型生成并应用于 SRC 或 DST 数据集的掩码。
XSeg 数据集 - 标记面孔的集合(仅一种特定类型或 SRC 和 DST 数据集,以类似方式标记),这些数据集通常由用户在论坛上共享,并且是开始制作自己的集合的好方法,因为您可以下载一种方法是选择您需要的特定面孔,或者添加您自己的标记面孔(以类似方式标记)。

现在您已经了解了这 4 件事的含义,了解标记和屏蔽 SRC 面孔和 DST 面孔之间的主要区别非常重要。

掩模定义了面部样本上的哪个区域是面部本身以及什么是背景或障碍物,对于 SRC 来说,这意味着您包含的任何内容都将由具有较高优先级的模型进行训练,而其他所有内容都将以较低优先级(或精度)进行训练)。对于 DST 是相同的,但您还需要排除障碍物,以便模型不会将它们视为面部的一部分,并且稍后在合并时这些障碍物是可见的,并且不会被最终预测的面部覆盖(不是与预测的 SRC 和预测的 DST 面孔相混淆)。

要使用 XSeg,您可以使用以下 .bat:

5.XSeg) data_dst mask - 编辑- XSeg 标签/多边形编辑器,这定义了您希望 XSeg 模型如何训练 DST 面部的掩模。
5.XSeg) data_dst 掩码 - 获取- 将标记的 DST 面复制到“data_dst”内的文件夹“aligned_xseg”。
5.XSeg) data_dst mask - 删除- 从 DST 面上删除标签。这不会删除您在训练后应用于集合的经过训练的掩码,它会删除您手动创建的标签,我建议重命名此选项,使其位于列表底部或将其删除以避免意外删除标签。

5.XSeg) data_src mask - 编辑- XSeg 标签/多边形编辑器,这定义了您希望 XSeg 模型如何训练 SRC 面的掩模。
5.XSeg) data_src mask - 获取- 将标记的 SRC 面复制到“data_src”内的文件夹“aligned_xseg”。
5.XSeg) data_src 掩码 - 删除- 删除 SRC 脸上的标签。这不会删除您在训练后应用于集合的经过训练的掩码,它会删除您手动创建的标签,我建议重命名此选项,使其位于列表底部或将其删除以避免意外删除标签。

XSeg) train.bat - 开始 XSeg 模型的训练。

5.XSeg.可选)经过训练的掩码 data_dst - 应用- 生成 XSeg 掩码并将其应用到您的 DST 面部。
5.XSeg.可选)训练掩码 data_dst - 删除- 删除 XSeg 掩码并恢复默认 FF,如地标导出的 DST 掩码。

5.XSeg.可选)经过训练的掩码 data_src - 应用- 生成 XSeg 掩码并将其应用到您的 SRC 面部。
5.XSeg.可选)训练后的掩码data_src - 删除- 删除 XSeg 蒙版并恢复默认 FF,如地标派生的 SRC 蒙版。

如果您没有时间标记面部并训练模型,您可以使用 DFL 中包含的通用 XSeg 模型来快速应用基本 WF 遮罩(可能不会排除所有障碍物),方法如下:5.XSeg Generic)data_dst Whole_face

mask - 应用- 将 WF 掩码应用到您的 DST 数据集。
5.XSeg Generic) data_src Whole_face mask - apply - 将 WF 蒙版应用到您的 SRC 数据集。

XSeg 工作流程:

步骤 1. 标记数据集。

首先使用5.XSeg) data_src mask - edit和5.XSeg) data_dst mask - edit标记 SRC 和 DST 面

每个工具都有一个书面说明,当您用鼠标浏览它时会显示该说明(支持 en/ru/zn 语言)。

为 SRC 和 DST 标记 50 到 200 个不同的面孔,您不需要标记所有面孔,而只需标记那些面孔看起来明显不同的面孔,例如: - 当面部表情发生变化时(张嘴 - 闭嘴、大笑 - 皱眉

) )
- 当面部的方向/角度改变时
- 或者当照明条件/方向改变时(通常与面部角度一起改变,但在某些情况下,照明可能会改变,而面部仍然看向同一方向)

您标记的面孔越多,Xseg 模型将为您生成的蒙版质量就越好。一般来说,数据集越小,需要标记的面孔就越少,对于各种角度也是如此,如果您有许多不同的角度和表情,则需要标记更多的面孔。

在标记面部时,您可能还希望排除障碍物,以便它们在最终视频中可见,为此,您可以: - 不在

主标签中包含障碍物,该主标签定义了您想要通过在其周围绘图来交换的面部区域。
- 或使用排除多边形模式在您想要排除的障碍物或部分周围绘制附加标签(未经训练,合并后可见)。

排除什么:

任何您不想在训练期间成为面部一部分并且希望在合并后可见的内容(不被交换的面部覆盖)。

标记障碍物时,您需要确保按照与标记没有障碍物的面相同的规则在多个面上标记它们,标记障碍物(即使当面/头发生以下变化时它不会改变外观/形状/位置

:角度
- 面部表情变化
- 照明条件变化

如果障碍物另外改变形状和/或在脸上移动,您需要标记几次,虽然并非每个面上的所有障碍物都需要标记,但仍然有更多种类的不同障碍物发生在各种条件下 - 您需要标记的面孔越多。

以类似的方式标记所有脸部,例如:

- 如果边缘不清晰可见,则使用相同的近似下颌线,查看脸部的阴影方式以找出如何正确绘制线条,这同样适用于向上看的脸部,下巴下方的部分
- 相同的发际线(这意味着始终以相同的方式排除头发,如果您正在做全面罩并且不超过发际线,请确保您在眉毛上方画的线始终主要是在眉毛上方相同高度)

完成标记/标记脸部后,滚动到列表末尾并按 Esc 键保存它们并关闭编辑器,然后您可以继续训练您的 XSEG 模型。

提示: 您可以使用 MVE 来标记您的脸部,其更先进的 XSeg 编辑器甚至附带了自己经过训练的分割(遮罩)模型,可以有选择地包含/排除脸部的许多部分,甚至可以转动应用的遮罩(例如来自共享 XSeg 模型)您下载的通用 WF XSeg 模型(用于将蒙版应用到数据集)返回到标签中,改进它们,然后保存到您的面部中。

步骤 2. 训练您的 XSeg 模型。

第一次开始训练时,您将看到一个选择 XSeg 模型的面部类型的选项,使用与数据集相同的面部类型。
您还可以选择要训练的设备以及批量大小,批量大小通常会更高,因为 XSeg 模型并不像面部交换模型的训练那么要求(您也可以从较低的值开始,然后再提高) 。
您可以使用空格切换预览模式(有 3 种模式,DST 训练、SRC 训练和 SRC+DST(失真)。
要更新预览进度,请按 P.Esc
保存并停止训练。

在训练过程中经常检查预览,如果某些面部在大约 50k 次迭代后出现不良蒙版(不良形状、孔洞、模糊),请保存并停止训练,将蒙版应用到数据集,运行编辑器,通过启用 XSeg 蒙版覆盖来查找具有不良蒙版的人脸编辑器中,标记它们并按 esc 保存并退出,然后恢复 XSeg 模型训练,当启动已经训练的模型时,您将收到是否要重新启动训练的提示,选择否,因为选择是将从 0 重新启动模型训练而不是继续。然而,如果您的蒙版在标记了更多面孔并且迭代次数远高于 100k-150k 次后仍没有改进,则可能需要标记更多面孔。继续训练,直到大部分脸上都有锋利的边缘,并且所有障碍物都被正确排除。

步骤 3. 将 XSeg 掩码应用到您的数据集。

完成训练后或在您已经应用了一次 XSeg,然后修复了具有不良蒙版的面孔之后,是时候将 XSeg 蒙版最终应用到您的数据集了。额外提示:1. 不要费心制作 1000 点

标签

,标记所有脸部会花费太多时间,并且不会影响脸部,而如果您仅使用 30-40 个点来描述脸部形状,但也不要尝试用 10 个点来标记它,否则遮罩将不会光滑,这里的例外是为 HEAD 面部类型训练标记头发,显然需要一些细节来正确解析单个发束。
2. 不要标记阴影,除非它们是漆黑的。
3. 如果舌头或嘴巴刚刚张开,请勿标记舌头或口腔内部。
4. 如果障碍物或脸部是模糊标记,需要覆盖所有应该可见或不应该可见的所有内容,请勿使偏移量太大
5. 请记住,当您使用模糊时,边缘会模糊进出,如果你在边缘上画出一根手指,它在低模糊时看起来不会很糟糕,但在较高模糊时它会开始消失并被模型学到的模糊版本所取代,口腔也是如此,在低模糊时它只会显示结果面牙,但如果您应用高模糊,那么 DST 牙齿将开始显示,并且看起来很糟糕(双牙)。

这意味着:

- 当排除手指等障碍物时 - 将其标记在边缘或将标签移开几个像素(但不要太多)。SRC 和 DST

- 排除口腔时 - 请记住使标签远离牙齿,除非后面的牙齿模糊且发黑,否则可以排除。DST、SRC 是可选的,如果您排除 SRC 面上的后牙,XSeg 模型将训练不包含它们,因此它们不会像包含的前牙那样精确地训练,但因为后面的牙齿通常非常模糊和黑暗或者根本不可见,它不会对您的结果产生太大影响,特别是如果您也决定在 DST 中排除它们,在这种情况下您只会看到 DST 的后牙,排除舌头时也适用类似的规则,将它们标记在如果舌头在口腔内或接触上牙或下牙,则边缘应与牙齿保持一定的偏移。SRC 和 DST,
 

如何使用共享标记的面孔来训练您自己的 XSeg 模型:

下载、提取面孔并将其放入“data_src/aligned”或“data_dst/aligned”中。确保重命名它们,以免覆盖您自己的面孔(我建议使用 XSEGSRC 和 XSEGDST,以便以后轻松删除)。
您可以将共享面孔与您自己的标签混合,为模型提供尽可能多的数据来学习蒙版,不要混合面孔类型,确保所有面孔大致遵循相同的蒙版逻辑。
然后开始训练您的 XSeg 模型(或共享模型)。

如何使用共享 XSeg 模型并将其应用到您的数据集:

只需将其放入“model”文件夹中,然后使用 apply .bat 文件将掩模应用到 SRC 或 DST。

应用遮罩后,打开 XSeg 编辑器并通过启用 XSeg 遮罩叠加视图来检查遮罩的外观,如果某些面孔没有好看的遮罩,请标记它们,退出编辑器并再次开始 XSeg 模型的训练以修复它们。您还可以如上所述混合一些共享的面孔(如何使用共享的标记面孔)。您可以重复使用 XSeg 模型(如 SAEHD 模型)。

 

10. 培训 SAEHD/AMP

如果您不想实际了解所有选项的作用,而只关心在大多数情况下应该有效的简单工作流程,请向下滚动到第6.1 节 - 常见培训工作流程。

警告:没有一种正确的方法来训练模型,了解所有选项的作用,如果在训练过程中遇到问题(遮蔽问题、由于 SRC 集质量差或缺乏而导致的模糊/扭曲的人脸和伪影),请回溯到早期步骤角度/表情的数量、由于 SRC 场景中的光照条件变化较少而造成的颜色匹配不良、DST 对齐不良等)。

目前有 3 种模型可供选择进行训练:

SAEHD (6GB+): 高清风格自动编码器 - 适用于至少具有 6GB VRAM 的高端 GPU。可调节的。推荐给大多数用户。

AMP (6GB+): 新模型类型,使用不同的架构、变形形状(尝试保留 SRC 形状),具有可调节变形因子(训练和合并)- 适用于至少具有 6GB VRAM 的高端 GPU。可调节的。AMP 模型仍在开发中,我建议您在使用 AMP 之前先学习使用 SAEHD 制作 Deepfakes。对于 AMP 工作流程,向下滚动到第 6.2 节。

Quick96 (2-4GB): 简单模式专用于具有 2-4GB VRAM 的低端 GPU。固定参数:96x96 像素分辨率、全脸、批量大小 4、DF-UD 架构。主要用于快速测试。


要启动训练过程,请运行以下操作之一:

6) 训练 SAEHD
6) 训练 Quick96
6) 训练AMP SRC-SRC
6) 训练 AMP

您可能已经注意到,AMP 有 2 个单独的训练可执行文件,暂时忽略它们,首先专注于学习 SAEHD 工作流程。

由于 Quick96 不可调整,您将看到弹出命令窗口并仅询问 1 个问题 - CPU 或 GPU(如果您有更多问题,那么它会让您选择其中之一或同时使用两者进行训练)。
然而,SAEHD 将为您提供更多调整选项,AMP 也是如此,因为两种型号都是完全可调的。
在这两种情况下,首先会出现一个命令行窗口,您可以在其中输入模型设置。
第一次启动时,您将可以访问下面解释的所有设置,但如果您使用现有的预训练或训练模型,则某些选项将无法调整。
如果您的“模型”文件夹中有超过 1 个模型,系统还会提示您通过选择相应的编号来选择要使用的模型。您还将始终收到提示,选择要
运行训练器的 GPU 或 CPU在。
训练开始后,您还将看到训练预览。

以下是所有功能的详细说明,以便(大部分)在开始训练新模型时向用户呈现它们。

请注意,由于这些模型的工作方式,其中一些会被锁定,一旦开始训练就无法更改,以后无法更改的示例包括: - 模型分辨率(通常缩写为“res”) -
模型
架构(“archi”)
- 模型尺寸(“dims”)
- 面部类型
- 变形因子(AMP 训练)

另外,并非所有选项都适用于所有类型的模型:
对于 LIAE,没有 True Face (TF)
对于 AMP,没有架构选择或眼口优先(EMP)
随着软件的开发,某些型号可能会出现更多选项可用或不可用,如果您使用的是最新版本并注意到缺少某些根据本指南仍然可用的选项,或者注意到缺少此处解释的某些选项,请给我发消息通过私信或在此线程中发布消息,我会尽力尽快更新指南。

每 N 小时自动备份 ( 0..24 ?:help ) :不言自明 - 让您每 N 小时启用模型自动备份。将其保留为 0(默认)将禁用自动备份。默认值为 0(禁用)。

[n] 写入预览历史记录 ( y/n ?:help ) :在训练期间每隔几分钟保存预览图像,如果选择“是”,您将收到另一个提示:[n] 选择预览历史记录的图像 ( y/n ) :如果选择 N,模型将随机选择预览的面孔,否则选择 Y 将在加载数据集后打开一个新窗口,您可以在其中选择他们手动。

目标迭代:达到一定数量的迭代后将停止训练,例如,如果您想将模型训练为仅 100.000 次迭代,则应输入值 100000。将其保留为 0 将使其运行,直到您手动停止为止。默认值为 0(禁用)。

[n] 随机翻转 SRC 面 ( y/n ?:help ) :水平随机翻转 SRC 面,有助于用 SRC 面覆盖 DST 数据集中存在的所有角度,因为翻转它们有时会很有帮助(特别是如果我们的集合没有许多不同的照明条件但具有大多数角度),但是在许多情况下在某些情况下,它会使结果看起来不自然,因为面部永远不会完全对称,它还会将面部特征从面部的一侧复制到另一侧,然后它们可能会出现在任一侧或同时出现在两侧。如果我们的 SRC 集足够多样化,建议仅在训练早期使用或根本不使用。默认值为 N。

[y] 随机翻转 DST 面 ( y/n ?:help ) :水平随机翻转 DST 面,当禁用随机翻转 SRC 面时可以提高泛化能力。默认值为 Y。

Batch_size ( ?:help ) :批量大小设置会影响每次迭代时相互比较的面孔数量。最低值为 2,您可以在 GPU 允许的范围内设置尽可能高的值,这会受到 VRAM 的影响。模型分辨率、尺寸越高,启用的功能越多,需要的 VRAM 就越多,因此可能需要的批量大小越小。建议不要使用低于 4 的值。较高的批量大小将提供更好的质量,但代价是训练速度较慢(迭代时间较长)。对于初始阶段,可以设置较低的值以加快初始训练的速度,然后再提高。最佳值在 6-12 之间。如何猜测要使用的批量大小?您可以使用反复试验的方法,也可以通过查看其他人在他们的 GPU 上可以实现的目标来帮助自己DFL 2.0 模型设置和性能共享线程。

分辨率 ( 64-640 ?:help ) :您可以在此处设置模型分辨率,请记住此选项在训练期间无法更改。它会影响交换面部的分辨率,模型分辨率越高 - 学习到的面部越详细,但训练也会更繁重和更长。分辨率可以从 64x64 增加到 640x640,增量为:

16(对于常规和 -U 架构变体)
32(对于 -D 和 -UD 架构变体)

更高的分辨率可能需要增加模型尺寸(尺寸),但这不是强制性的,使用默认尺寸可以获得良好的结果,使用非常高的尺寸也可能得到不好的结果,最终,源数据集的质量具有最大的影响对质量的影响,因此如果您无法使用 GPU 运行更高的暗淡,请不要担心,专注于创建良好的源集,稍后再担心暗淡和分辨率。

脸部类型 ( h/mf/f/wf/head ?:help ) :此选项让您设置要训练的脸部区域,有 5 个选项 - 半脸、中半脸、全脸、全脸和头部:

a) 半脸 (HF) - 仅从嘴到眉毛进行训练,但在某些情况下可以切除脸部的顶部或底部(眉毛、下巴、嘴部)。
b) 中半脸 (MHF)- 旨在通过覆盖比半脸大 30% 的面部部分来解决 HF 问题,这应该可以防止大多数不良切断的发生,但它们仍然可能发生。
c) 全脸 (FF) - 覆盖大部分脸部区域,不包括前额,有时会切掉一点下巴,但这种情况很少发生(仅当对象张大嘴时) - 最推荐在 SRC 和/或 DST 时有头发遮住额头。
d) 全脸 (WF) - 进一步扩展该区域以覆盖几乎整个脸部,包括前额和整个脸部侧面(直到耳朵,HF、MHF 和 FF 覆盖不了那么多)。
e) 头部(HEAD)- 用于交换整个头部,不适合长发对象,如果源面部集/数据集来自单一源并且 SRC 和 DST 都是短发或不改变形状,则效果最佳角度。
使用所有面部类型时的面部、前视图和侧视图示例:[图像丢失,正在进行中]

架构 (df/liae/df-u/liae-u/df-d/liae-d/df-ud/liae- ud ?:help ) :此选项让您在 2 个主要模型架构之间进行选择:DF 和 LIAE 及其变体:

DF:该模型架构提供了更好的 SRC 相似性,但代价是比 LIAE 的光照和颜色匹配更差,它还要求 SRC 集更好地匹配 DST 的所有角度和光照,并且总体上比可能的集更好。对于 LIAE 来说很好,它也不能处理 SRC 和 DST 之间的一般脸型和比例不匹配问题,其中 LIAE 更好,但同时可以处理面部特征实际外观的更大不匹配问题,并且对 GPU 的负担更轻(VRAM 较低)使用),在正面拍摄方面效果更好,但如果 SRC 集没有涵盖 DST 所需的所有角度、表情和照明条件,则在困难角度可能会更加困难。

liae:该模型与 DF 几乎完全相反,如果 DST 的面部特征和总体外观与 SRC 差异太大,则它不会产生与 DF 一样的 SRC 面部,但同时可以更好地处理不同的面部比例和形状与 DF 相比,它还创建了比 DF 更好地匹配 DST 的光照和颜色的面,并且在 SRC 集方面更宽容,但这并不意味着如果您缺少 SRC 的主要部分,它可以创建高质量的交换设置 DST 中存在的设置,您仍然需要覆盖所有角度。LIAE 对 GPU 的负载更大(VRAM 使用率更高),并且在更复杂的角度上表现更好。
另请确保您阅读步骤 10.5 中的“额外训练和重用经过训练的 LIAE/LIAE RTM 模型 - 删除 inter_ab 和 inter_b 文件说明:”,了解重用 LIAE 模型时如何处理它们。

请记住,虽然这些是两种架构的一般特征,但这并不意味着它们总是会表现得像这样,与正确训练的 LIAE 模型相比,训练不正确的 DF 模型与 SRC 的相似度可能更差,而且您也可能完全无法创建任何看起来像的东西与 LIAE 接近 SRC,并与 DF 模型实现近乎完美的色彩和照明匹配。这一切都取决于您的 SRC 和 DST 的匹配程度以及您的 SRC 集的制作程度,即使您了解所有基础知识,仍然需要进行大量的试验和错误。

每个模型都可以使用启用模型架构变体的标志进行更改,它们也可以按如下所示的顺序进行组合(所有这些都会影响性能和 VRAM 使用): -U:此变体旨在提高与模型架构的相似性

/相似性源面,一般建议始终使用。
-D:此变体旨在通过将可能的分辨率大致加倍来提高质量,而无需额外的计算成本,但它需要更长的训练时间,必须首先对模型进行预训练才能获得最佳结果,并且分辨率必须更改 32 的值,而不是其他变体中的 16。一般来说,它也应该始终使用,因为该架构允许更高的分辨率模型,但如果您可以访问极高的 vram 设置,则可能值得在没有它的情况下尝试训练模型,因为这可能会产生更高质量的结果,如下所示对于大多数具有普通 joe 设置的用户,建议始终使用它。
-T:此变体以与 -U 不同的方式改变模型架构,但具有相同的目标 - 创建更多类似 SRC 的结果,但是它会影响面部的锐度,因为与仅使用 -D/ 相比,它往往会导致细节的轻微丢失-UD 变体。
-C:实验变体,在 ReLu 和 Leaky ReLu 之间切换激活函数(使用风险自负)。

要组合 DF/LIAE 后的架构变体,请按上述顺序写入“-”符号,然后按与上述相同的顺序写入字母,示例:DF-UDTC、LIAE-DT、LIAE-UDT、DF-UD、DF-UT 等 接下来的 4

个选项控制影响模型学习能力的模型神经网络维度,修改这些维度会对性能和质量产生重大影响:

自动编码器尺寸(32-2048?:帮助):自动编码器变暗设置,影响模型学习面部的整体能力。
Inter Dims ( 32-2048 ?:help ) : Inter Dims 设置,影响模型学习面部的整体能力,应等于或高于自动编码器 Dims,仅限 AMP。
编码器变暗 ( 16-256 ?:help ) :编码器变暗设置,影响编码器学习面部的能力。
解码器变暗 ( 16-256 ?:help ) :解码器变暗设置,影响解码器重新创建面部的能力。
Decoder Mask Dims ( 16-256 ?:help ) : Mask 解码器 Dims 设置,影响学习掩模的质量。可能会也可能不会影响训练的其他一些方面。

更改每项设置时的性能变化可能会对性能产生不同的影响,并且如果不进行大量测试,很难衡量每一项设置对性能和质量的影响。

每一项都设置为特定的默认值,该默认值应提供最佳结果并在训练速度和质量之间取得良好的折衷。

此外,当更改一个参数时,其他参数也应该更改,以保持它们之间的关系相似,这意味着提高 AE 调光,E 和 D 调光也应该提高,D Mask 调光可以提高,但它是可选的,可以保留在默认或降低到 16 以节省一些 VRAM,但代价是学习蒙版的质量较低(与 XSeg 蒙版不同,这些蒙版是模型在训练期间学习的,如果您应用了 XSeg,它们可以帮助模型有效地训练面部区域这些学习的蒙版基于 XSeg 蒙版的形状,否则将学习默认的 FF 地标派生的蒙版)。当您训练更高的模型分辨率时,最好将它们全部提高,因为它使模型能够更多地了解面部,这在更高分辨率下意味着可能更具表现力和真实性,从源数据集中捕获更多细节,并更好地再现面部DST 表达式和照明。

变形因子 ( 0.1 .. 0.5 ?:help ) :影响模型对您的预测脸部进行变形的程度,使其看起来和表达更像您的 SRC,典型和推荐值为 0.5。(我需要亲自测试一下,还没有使用 AMP,所以不知道值越高还是越低越好)。

蒙版训练 ( y/n ?:help ) :优先训练蒙版内容(默认蒙版或应用的 xseg 蒙版),仅适用于 WF 和 HEAD 脸部类型,禁用它会以与以下相同的优先级训练整个样本区域(包括背景)脸本身。默认值为 y(启用)。

眼睛和嘴巴优先(是/否?:帮助):尝试通过以更高的优先级训练它们来解决眼睛和嘴巴(包括牙齿)的问题,也可以提高它们的锐度/细节水平。

Uniform_yaw ( y/n ?:help ) :帮助训练侧面,强制模型根据偏航在所有面上均匀训练,并优先考虑侧面,可能会导致正面训练速度变慢,在预训练期间默认启用,可以在启用 RW 时使用以改善轮廓/侧面的概括,或在禁用 RW 时使用以改善这些面的质量和锐度/细节。当您的源数据集没有很多个人资料照片时很有用。可以帮助降低损失值。默认值为 n(禁用)。

模糊我们的蒙版(是/否?:帮助):模糊遮罩区域之外的区域,使其更加平滑。启用蒙版训练后,背景的训练优先级低于面部区域,因此更容易出现伪影和噪声,您可以将模糊蒙版与背景样式功能结合起来,以获得更接近 DST 面部背景且更平滑的背景,因为此选项提供额外的模糊效果。必须使用相同的 XSeg 模型将掩码应用于 SRC 和 DST 数据集。

将模型和优化器放置在 GPU 上(y/n ?:help):启用 GPU 优化器会将所有负载放在 GPU 上,这极大地提高了性能(迭代时间),但会导致更高的 VRAM 使用率,禁用此功能会将优化器的一些工作转移到 CPU,从而减少 GPU 上的负载和 VRAM 使用率,从而让您以更长的迭代时间为代价实现更高的批量大小或运行要求更高的模型。如果您收到 OOM(内存不足)错误,并且您不想降低批量大小或禁用某些功能,您应该禁用此功能,这样一些工作将被卸载到您的 CPU,您将能够运行您的模型,而无需OOM 错误的代价是速度降低。默认值为 y(启用)。

使用 AdaBelief 优化器?(是/否?:帮助):AdaBelief (AB) 是一种新的模型优化器,可提高模型准确性和训练后的面部质量,启用此选项后,它将取代默认的 RMSProp 优化器。然而,这些改进是以更高的 VRAM 使用率为代价的。使用 AdaBelief 时,LRD 是可选的,但仍然推荐,并且应在运行 GAN 训练之前启用 (LRD)。默认值为 Y。

个人说明:有些人说你可以在现有模型上禁用 Adabelief,它会重新训练得很好,我不完全同意这一点,并且认为模型永远不会完美恢复,并且当你打开或关闭它时会忘记太多,所以我建议只是坚持启用或禁用它。LRD也是一样,有人说是可选的,有人说还是必须的,有人说不是必须的,我还是和AB一起用,有人可能不会用,根据DFL内置的描述自己下结论。

使用学习率 dropout ( y/n/cpu ?:help ) : LRD 用于加速面部训练并减少子像素抖动(减少面部抖动,在一定程度上也可以减少灯光闪烁)。
主要用于3种情况:
- 在禁用 RW 之前,当损失值不再改善很多时,这可以帮助模型更多地泛化面孔
- 在禁用 RW 并且您已经足够好地训练模型之后,在训练接近结束时启用它将会导致更详细、更稳定的面孔,不易闪烁。
此选项会影响 VRAM 使用情况,因此如果遇到 OOM 错误,您可以在 CPU 上运行它,但代价是迭代时间减慢 20% 或只是降低批处理大小。

启用样本的随机变形 ( y/n ?:help ):随机扭曲用于概括模型,以便在初始训练阶段正确学习面部特征和表情,但只要启用它,模型可能会在学习细节方面遇到困难 - 因此,建议长时间保持启用此功能由于您的脸部仍在改善(通过查看损失值的减少和预览窗口中脸部的改善),并且一旦所有看起来正确(并且损失不再减少),您应该禁用它以开始学习细节,从那时起您就不会重新启用它,除非您通过对某些设置(风格强度、真实面孔等)应用高值来破坏结果,或者当您想要重用该模型来训练具有相同源的新目标视频时,或者与无论是新的 SRC 还是 DST,您始终在启用 RW 的情况下开始训练。默认值为 y(启用)。

启用 HSV 功率( 0.0 .. 0.3 ?:help ):在训练期间仅对 SRC 数据集应用随机色调、饱和度和亮度变化,以提高颜色稳定性(减少闪烁),并且还可能影响最终结果的颜色匹配,此选项具有稍微平均 SRC 设置颜色的效果,因为 SRC 样本的 HSV 偏移仅基于 SRC 样本的颜色信息,并且它可以与此选项减少或使用的颜色传输 (CT)、功率(质量)相结合如果没有它,如果您碰巧在没有 CT 的情况下获得更好的结果,但需要使生成的脸部颜色稍微更加稳定和一致,则需要您的 SRC 数据集在照明条件(方向、强度和色调)方面具有多种变化,推荐值为0.05。

GAN 功率 ( 0.0 .. 10.0 ?:help ): GAN 代表生成对抗网络,在 DFL 2.0 中,它被作为一种额外的训练方式来实现,以获得更详细/更清晰的面孔。此选项可在 0.0 到 10.0 的范围内进行调整,并且只有在模型或多或少完全训练后才应启用它(在禁用样本随机扭曲并启用 LRD 之后)。建议使用较低的值,例如 0.01。确保在开始训练之前备份您的模型(以防您不喜欢结果、出现伪影或模型崩溃)。启用后,将出现另外两个设置来调整 GAN 的内部参数:

[RES 的 1/8] GAN 补丁大小 ( 3-640 ?:help ) :以更高的 VRAM 使用率为代价提高 GAN 训练的质量,默认值为分辨率的 1/8。

[16] GAN 维度 ( 4-64 ?:help ) : GAN 网络的维度。尺寸越高,需要的 VRAM 就越多,但它也可以提高质量,即使在最低设置下也可以获得锐利的边缘,因此建议使用默认值 16,但您可以将其减少到 12-14 以节省一些性能如果你需要。

使用 GAN 以 0.1 值进行 40k 迭代训练之前/之后的面部示例:

[img=650x400]

‘真面目’的力量。( 0.0000 .. 1.0 ?:help ) :使用可变功率设置进行真实面部训练,让您将模型鉴别器设置为更高或更低的值,其作用是尝试使最终面部看起来更像 src,作为副作用它可以使面部显得更清晰,但也可以改变照明和颜色匹配,在极端情况下甚至使面部看起来改变角度,因为模型将尝试生成看起来更接近训练样本的面部,与 GAN 一样,只应启用此功能一旦随机扭曲被禁用并且模型训练得相当好。启用此功能之前请考虑进行备份。切勿使用高值,典型值为 0.01,但您可以使用更低的值,例如 0.001。它对性能影响很小。默认值为 0.0(禁用)。
[img=500x200]

脸部样式功率 ( 0.0..100.0 ?:help )和背景样式功率 ( 0.0..100.0 ?:help ) :此设置控制图像的面部 (FSP) 或背景 (BSP) 部分的样式传输,它用于将颜色信息从目标/目标面部 (data_dst) 传输到最终预测的面部,从而改善照明和颜色匹配,但高值可能会导致预测的脸部看起来不太像您的源脸部,而更像您的目标脸部。从 0.001-0.1 等较小的值开始,然后根据您的需要增加或减少它们。此功能会影响内存使用,并可能导致 OOM 错误,迫使您降低批处理大小才能使用它。对于背景样式功率 (BSP),可以使用更高的值,因为我们不太关心保留 SRC 背景,DFL 建议的 BSP 值为 2.0,但您也可以尝试使用不同的背景值。
默认值为 0.0(禁用)。

src 面集的颜色传输 ( none/rct/lct/mkl/idt/sot ?:help ) :此功能用于将 data_src 的颜色与 data_dst 进行匹配,以便最终结果具有与 data_dst 相似的肤色/色调训练后的最终结果在面部移动时不会改变颜色,通常称为闪烁/闪烁/颜色偏移/颜色变化(如果从包含不同光照条件或颜色的各种来源获取不同的面部角度,则可能会发生这种情况评分不同)。有多种选项可供选择:

-无:因为有时越少越好,并且在某些情况下,您可能会在训练期间无需任何颜色转移而获得更好的结果。
- 随机对照试验(reinhard 颜色传输)
- lct(线性颜色传输):将目标图像的颜色分布与使用线性变换的源图像。
- mkl(Monge-Kantorovitch 线性)
- idt(迭代分布传输)
- sot(切片最佳传输)

大多数颜色传输对性能或 VRAM 使用几乎没有影响,但 SOT 除外,SOT 在训练期间会影响性能,并且如果在合并期间使用,可能会严重减慢合并过程,其他颜色传输(如 IDT)也可能在合并期间对性能产生影响。

使用颜色传输并不总是必需的,但通常会有所帮助,并且在某些情况下是绝对强制的,您还应该记住,启用它们可以充当集合的增强,有效地为所有 SRC 样本创建新条件,从而增加了训练数据在启用时可能会导致更高的损失,自然意味着与没有颜色传输的训练相比,模型必须接受更长时间的训练才能达到相同的状态,因为面部永远不会改变太多颜色。此选项可以与随机 HSV 功率结合使用,随机 HSV 功率根据单独的 SRC 集的颜色提供 SRC 集的额外增强(与基于 DST 增强 SRC 的 CT 不同),有效地稍微平均其颜色,

启用梯度裁剪 (y/n ?:help):实现此功能是为了防止使用 DFL 2.0 的各种功能时可能发生的所谓模型崩溃/损坏。它对性能影响很小,因此如果您确实不想使用它,则必须启用自动备份,因为崩溃的模型无法恢复,必须被删除,并且必须重新开始训练。默认值是 n(禁用),但由于性能影响非常低,如果启用它,它可以通过防止模型崩溃来节省大量时间。使用 Style Powers 时最有可能发生模型崩溃,因此如果您使用它们,强烈建议启用渐变剪切或备份(您也可以手动执行)。

启用预训练模式(y/n ?:help):启用预训练过程,使用随机人的数据集来最初预训练您的模型,在将其训练到 500.000 到 1.000.000 次迭代之后,然后在使用您想要训练的实际 data_src 和 data_dst 开始训练时可以使用此类模型,它可以节省时间因为模型已经知道人脸应该是什么样子,因此在训练时可以减少人脸清晰显示的时间(确保在训练实际的 data_src 和 data_dst 时禁用预训练)。使用 -D 架构变体的模型必须进行预训练,并且强烈建议预训练所有模型。


1. 什么是预训练模型?

预训练模型是通过使用不同人的随机面孔进行训练来制作的。使用以这种方式准备的模型可以显着加快初始训练阶段的速度,因为模型已经知道脸部应该是什么样子,因此您不必等待脸部开始出现,并且与训练相比,它们会变得更快一个新鲜且未经预训练的模型。
您现在还可以共享各种face_types(全脸、全脸和头部)的自定义预训练集(SFW/NSFW)。

2.如何使用预训练模型?

只需下载它并将所有文件直接放入模型文件夹中,开始训练,选择要训练的模型(如果模型文件夹中有多个模型)和要训练的设备(GPU/CPU)后,在 2 秒内按任意键(您将看到一条提示,说明了这一点)覆盖模型设置并确保预训练选项设置为禁用(N),以便您开始训练而不是继续预训练。
如果您启用预训练选项 (Y),模型将继续使用 DFL 附带的内置预训练数据集进行预训练(在此线程中,您将发现使用旧的全脸预训练数据集以及新的整体预训练数据集进行训练的模型)面对 FFHQ 数据集)。
请注意,当您禁用预训练并开始常规训练时,模型会将迭代计数恢复为 0,这是预训练模型的正常行为。然而,如果模型被描述为“常规训练”,这意味着它没有经过预训练,而是经过一定数量的迭代训练,其中 SRC 和 DST 数据集都包含随机人脸,在这种情况下,模型将继续训练,并且迭代计数不会t 从 0 开始,但为共享模型的用户结束训练时的值。

3. 如何创建自己的预训练模型?

1. 官方推荐的创建方法是使用预训练选项,该选项将使用 DFL 的内置随机名人面孔数据集并像这样训练模型进行 500k-1kk 迭代。

模型经过充分训练后(预览中的大多数面部此时应该看起来很清晰,有明确的牙齿、眼睛,但不一定有很多非常精细的细节)。

1.1 您还可以将默认的预训练数据集更改为您自己的数据集,您可以通过放置您最有可能伪造的人的随机面孔来制作该数据集(可以是所有男性、女性、男女混合、仅限名人、随机人)然后使用 utilfaceset pack.bat 打包它,然后用这个新数据集替换 \_internal\pretrain_CelebA 中的原始文件。

2. 预训练模型的另一种方法是准备 data_src 和 data_dst 数据集,其中包含随机人的面孔、从不同的角度和不同的表情,并像平常一样训练模型(禁用预训练)。对于源数据集,您可以使用您将来最有可能交换的名人的面孔,对于 DST,您可以使用您最有可能用作目标视频的视频类型中的任何面孔。

但应该注意的是,通过简单地在随机面孔上训练模型来准备模型可能会引入一些变形,并使结果面孔在一段时间内看起来不太像源面孔。然而,在使用相同源进行几次重新训练后,预测人脸的 src 相似度应该会有所提高。与在预训练模型上进行训练相比,这种方法可以更快地适应新面孔(因为我们只是重复使用模型,但我们不是重复使用在特定 src 数据集上训练的模型,而是重复使用包含随机面孔的模型,如上所述,可以包含您最有可能伪造的人脸作为 src 和 dst 数据集的一部分)。

注意:如果您要预训练 HEAD 模型,请考虑使用自定义预训练集,因为包含的 FFHQ 数据集是全脸类型 (WF)。强烈建议预训练 HEAD 和任何类型的 AMP 模型,FF 和 WF SAEHD 模型是可选的,但它仍然有助于将它们预训练到至少 300-500k,然后将其用作未来项目的基础或额外进行 500-在使用 SAEHD 模型进行预训练的基础上进行 600k 随机训练。
 

10.1 RTM 培训工作流程

随着 DeepFaceLive (DFLive) 的引入,建立了一种新的训练工作流程,与一些用户认为的相反,这不是一种新的训练方法,与常规训练没有太大区别,并且这种训练方法已经被一些人以某种方式采用或者,您可能自己无意中创建了一个,甚至没有意识到。

RTM 模型(ReadyToMerge)通过训练我们想要交换的人的 SRC 集来创建,该集与包含许多人的随机面孔的大型且多样化的 DST 集进行交换,涵盖了所有可能的角度、表情和照明条件。SRC 套装还必须具有多种面孔。RTM 模型训练的目标是创建一个可以将我们的 SRC 人脸应用于任何视频的模型,主要与 DeepFaceLive 一起使用,但也可以通过创建一个可以快速适应新目标视频的基础模型来加快 DeepFaceLab 2.0 中的训练过程与从头开始训练模型相比,花费的时间更短。与RTM

workklow 一起使用的推荐模型类型是SAEHD LIAE模型、LIAE-UD或LIAE-UDT得益于其卓越的色彩和灯光匹配能力以及比 DF 架构能够更好地适应不同脸型。
AMP模型也可用于创建 RTM 模型,尽管它们的工作方式略有不同,并且由于我缺乏解释 AMP 工作流程的知识,因此我将在本指南的这一部分中仅关注 LIAE RTM 模型训练。

1. 首先准备SRC集:确保覆盖所有可能的角度,每个角度都有尽可能多的不同光照条件和表情,不同可能的面部覆盖得越好,效果就越好。

2. 通过收集许多随机人脸来准备 DST 集:该数据集还必须具有尽可能多的多样性,该数据集可以是真正随机的,由各种肤色的男性和女性面孔组成,或者它可以特定于例如黑色男性面孔或女性亚洲面孔(如果是这种类型)您计划主要使用模型的目标面孔的数量,集合中的面孔越多,训练模型所需的时间就越长,但模型可能会更好,因为它将能够更正确地交换到更多种类不同的面孔。


3. 将 XSeg 掩码应用于两个数据集:这将确保模型正确训练,并且与创建 WF 模型所需的任何其他训练一样,虽然它对于 FF 模型是可选的,但仍然建议将正确类型的 XSeg 掩码应用于两个数据集,确保对两个数据集使用相同的 XSeg 模型。

4. 使用现有的 RTT 模型或创建一个新模型: iperov 推荐的 RTT 模型是经过大量重新训练的模型,迭代次数超过 2-3kk,因此可能需要花费大量时间来创建它们,作为替代方案,您可以可以预训练 LIAE 模型进行 600k-1kk 迭代,更多关于在下一阶段制作 RTT。

5. 使用下面的工作流程开始对您的 SRC 和随机 DST 进行训练,请注意,与 iperov 相比,其中一些工作流程已稍作修改,使用风险自负。

5.1 Iperov 的新工作流程:

设置:EMP 启用、模糊遮罩启用、UY 启用、LRD 启用、BS:8(如果您无法以足够高的 BS 运行模型,请降低它或在 cpu 上运行模型优化器和 lrd)。
其他选项应保留默认值(通常意味着禁用)。可选择使用功率为 0.1 的 HSV 和最适合您的 CT 模式,通常是 RCT。
在每个阶段之前进行备份或启用自动备份。

1. 在启用 RW 的情况下训练 +2.000.000 迭代,并每 500k 迭代删除 inter_AB.npy(保存并停止模型训练,删除文件并恢复训练)
2. 删除 inter_AB 第 4 次后,在启用 RW 的情况下额外训练 +500k。
3. 如果交换的面看起来更像 DST,则删除 inter_AB 并重复步骤 2。
4. 禁用 RW 并训练额外的 +500k 迭代。
5. 以 0.1 的功率启用 GAN,GAN_Dims:32,补丁大小为模型分辨率的 1/8,迭代次数为 +800.000k。

5.2 Iperov 的旧工作流程:

1. 进行 500k-1kk 迭代,随机扭曲:Y,均匀偏航:Y,LRD:N,模糊遮罩:Y,颜色传输:LCT,其他设置保留默认值。
2. 接下来使用 LRD: Y 进行 500k 次迭代,保留步骤 1 中的其他设置。
3. 之后使用 Uniform Yaw: N 进行 500k 次迭代
4. 现在使用 Random Warp: N 、Uniform Yaw 进行 500-800k 次迭代: N ,LRD: Y *
5. 最后进行 200-300k 次迭代,随机扭曲:N,均匀偏航:N,LRD:Y 和 GAN:0.1,GAN 补丁大小:(模型分辨率的 1/8),GAN DIMS:32
 

10.2 使用RTM模型:


完成模型训练后,您可以在 DFL 中使用它们,也可以导出为 DFM 模型以在 DFLive 中使用。

要导出模型以在 DFLive 中使用,请使用 6) 将 SAEHD 导出为 dfm 或 6) 将 AMP 导出为 dfm,您可以选择量化模型,这可以使其运行得更快,但某些模型,特别是具有高分辨率的大型模型,如果启用此选项导出高网络尺寸 (dims) 值,则它们可能无法正常工作,因此请确保在 DFLive 中对其进行测试,该过程不会删除原始模型,只会在“模型”文件夹中创建其他 DFM 文件。如果您的模型无法正常工作,请在禁用量化选项的情况下再次导出。

如果您想在 DFL 中使用 RTM 模型您可以开始提取新场景并将其与此模型合并,而无需任何额外的训练或进行一些额外的训练。

额外训练和重用经过训练的 LIAE/LIAE RTM 模型 - 删除 inter_ab 和 inter_b 文件说明:

什么是 inter_ab 和 _b 文件?这些是使用 LIAE 架构的 SAEHD 模型的一部分(无论附加的 -U、-D、-T 和 -C 变体),与 DF 架构不同,DF 架构具有用于 SRC 和 DST 的通用 inter 文件,LIAE 具有两个 inter 文件,inter_ab其中包含 SRC 和 DST 面的潜在代码(表示)以及包含 DST 面的潜在代码的附加 inter_b。

1.删除inter_b当您想要在新 DST 上将 RTM 模型重用为常规 LIAE 模型并从启用 RW 开始重新训练模型(作为常规模型进行训练)时,请从模型文件夹中删除此文件。
适用于重复使用经过训练的 LIAE 模型并更改 DST,但不适用于 SRC。2. 当您想为不同名人创建新的 RTM 模型时,删除

inter_ab 文件,用新的 SRC 替换,添加随机 DST 集,并继续与创建新 RTM 模型时相同的工作流程。
适用于重用经过训练的 LIAE 模型并更改 SRC,但不适用于 DST 3。当您想要使用经过训练的 RTM 模型对目标 DST 执行额外训练时,

请勿删除 inter_ab 或 inter_b 。
不适用于常规训练的 LIAE 模型重用(可能会遇到最终预测的人脸看起来像 DST 或与 SRC 相似度非常低的问题) 4. 当您在常规场景中重用经过训练的 LIAE 模型时,请删除 inter_ab 和

inter_b , src/dst 都发生变化,或者您遇到结果看起来像 DST 的问题,请注意,这与禁用预训练时发生的情况类似,只有编码器/解码器保持训练状态,所有其他数据都被删除,这意味着模型在某种程度上返回到一个状态,就好像它刚刚经过预训练一样(不完全是,但比经过训练的状态更接近),这可能会导致训练花费更长的时间。

在这种情况下,只需将随机 DST 替换为特定目标 DST,然后在禁用 RW 的情况下开始训练:

如果您想使用旧的 iperov 工作流程进行训练,请从旧工作流程的第 4 步开始。
如果您想使用新的 iperov 工作流程进行训练,请从新工作流程的第 4 步开始。

RTM模型共享线程: https://mrdeepfakes.com/forums/thread-sharing-dfl-2-0-readytomerge-rtm-models-sharing
 

11. 合并:


完成模型训练后,就可以将学习到的脸部合并到原始帧上以形成最终视频。

为此,我们有 3 个转换器,对应 3 个可用模型:

7) 合并 SAEHD
7) 合并 AMP
7) 合并 Quick96

选择其中任何一个后,将出现一个命令行窗口,并显示几个提示。
第一个会询问您是否要使用交互式转换器,默认值为 y(启用),建议在常规转换器上使用它,因为它具有所有功能,并且还有交互式预览,您可以在其中看到所有更改的效果您在更改各种选项并启用/禁用各种功能时
进行使用交互式合并?( y/n ) :

第二个会询问您要使用哪种型号:
选择已保存的模型之一,或输入名称以创建新模型。
[r] : 重命名
[d] : 删除
[0] : df192 - 最新的


第 3 个会询问您要使用哪个 GPU/GPU 或 CPU 进行合并(转换)过程:
选择一个或多个 GPU idx(用逗号分隔) )。
[CPU] : CPU
[0] : 您的 GPU
[0] 选择哪些 GPU 索引?:


按 Enter 键将使用默认值 (0)。

完成后,您将看到一个包含当前设置的命令行窗口以及一个预览窗口,其中显示了操作交互式转换器/合并器所需的所有控件:[图像

丢失,正在进行中]

这是所有合并/转换器功能的列表解释:

请按 Tab 键查看帮助屏幕,查看哪些键对应于哪个选项,以防它们发生变化或者您使用不同的键盘布局,它们也可能会随着时间的推移而发生变化。

另外,合并 AMP 可能不具备 SAEHD 合并所具有的所有选项,但是一旦您了解了 SAEHD 合并,那么 AMP 就非常相似,大多数选项具有相同的名称并以类似的方式工作。我不会用 AMP 特定的合并信息来扩展该指南,因为它几乎相同,只是缺少或添加了一些内容,帮助屏幕(选项卡)的存在是有原因的。

1. 主要叠加模式:

- 原始:显示未交换脸部的原始帧
- 覆盖:在框架上简单覆盖学习到的面部 - 这是推荐使用的覆盖模式,因为它最稳定,并且保留了大部分原始训练的面部外观。
- hist-match:叠加学习到的人脸和轮胎,根据直方图进行匹配,有 2 种模式:正常模式和蒙版模式,可以通过 Z 切换 - 推荐使用正常模式。
- 无缝:使用opencv泊松无缝克隆功能将新学习的脸部融合到原始帧中的头部
- 无缝历史匹配:结合了历史匹配和无缝。
- raw-rgb:覆盖原始学习面部,没有任何掩蔽

2. 直方图匹配阈值:控制直方图匹配在直方图匹配和无缝直方图匹配叠加模式下的强度。
Q - 增加价值
A - 减小值


3。侵蚀蒙版:控制蒙版的大小。
W - 增加蒙版侵蚀(较小的蒙版)
S - 减少蒙版侵蚀(较大的蒙版)


4. 模糊蒙版:模糊/羽化蒙版边缘以实现更平滑的过渡
E - 增加模糊
D - 减少模糊


5. 运动模糊:输入初始参数(转换器模式、模型、GPU/CPU)后,合并加载所有帧和 data_dst 对齐的数据,在执行此操作时,它会计算用于创建此设置控制的运动模糊效果的运动向量,它可以让您将其添加到脸部移动的地方,但高值可能会使脸部模糊,即使移动很小。仅当“data_dst/aligned”文件夹中存在一组面孔时,该选项才有效 - 如果在清理过程中您有一些带有 _1 前缀的面孔(即使只存在一个人的面孔),效果将不起作用,同样如此如果有一面镜子反射目标人脸,在这种情况下你不能使用运动模糊,添加它的唯一方法是单独训练每组面部。
R - 增加运动模糊
F - 减少运动模糊


6.超分辨率:使用与data_src数据集/faceset增强器类似的算法,它可以为牙齿、眼睛等区域添加更多定义,并增强学习面部的细节/纹理。
T - 增加增强效果
G - 降低增强效果


7. 模糊/锐化:使用框或高斯方法模糊或锐化学习到的脸部。
Y - 锐化脸部
H - 模糊脸部
N - 盒子/高斯模式开关


8. 脸部缩放: 将学习到的脸部放大或缩小。
U - 面朝下学习的尺度
J - 面朝上学习的尺度


9. 遮罩模式:有 6 种遮罩模式:
dst:使用从 data_dst 面集/数据集提取期间生成的地标形状派生的掩模。
learn-prd:使用训练期间学习到的掩码。保持 SRC 面的形状。
learn-dst:使用训练期间学习到的掩码。保持 DST 面的形状。
learn-prd*dst:结合两个掩码,两者的尺寸较小。
learn-prd+dst:结合两个掩码,两者的尺寸更大。
XSeg-prd:使用 XSeg 模型使用源人脸数据进行掩码。
XSeg-dst:使用 XSeg 模型使用来自目标人脸的数据进行屏蔽 - 此模式是您最有可能使用的一种模式,因为它将根据 DST 的形状屏蔽人脸并排除所有障碍物(假设您正确标记了 DST 人脸) 。

XSeg-prd*dst:结合了两个掩模,两者的尺寸都较小。
learn-prd*dst*XSeg-dst*prd:结合了所有 4 种掩码模式,其中尺寸较小。

10. 颜色传输模式:与训练期间的颜色传输类似,您可以使用此功能将学习到的人脸肤色与原始帧更好地匹配,以实现更无缝、更真实的人脸交换。有 8 种不同的模式:

RCT - 最常用和推荐。
LCT - 第二个最常用的选项,比 RCT 效果更强。
MKL
MKL-M - RCT 的良好替代方案,在某些方面非常相似。
IDT
IDT-M
SOT-M
MIX-M

11. 图像降级模式:您可以使用 3 种设置来影响原始帧的外观(不影响交换的脸部):
降噪- 对图像进行降噪,使其稍微模糊(I - 增加效果,K - 减少效果)
双三次- 使用双三次模糊图像方法(O - 增加效果,L - 减少效果)
颜色- 减少颜色位深度(P - 增加效果,; - 减少效果)

AMP 特定选项:

变形因子:较高的值将导致纯粹的预测结果,降低它会平滑变形在它和你的 DST 界面之间,最后它只显示 DST 界面。

附加控件:
TAB 按钮- 在主预览窗口和帮助屏幕之间切换。
有关按键的完整列表(以及它们控制的内容,例如前进/后退、开始合并),请查看帮助屏幕。
请记住,这些仅在主预览窗口中起作用,在帮助屏幕上按任何按钮都不会执行任何操作。
 

12. 将帧转换回视频:


合并/转换所有面部后,您将在“data_dst”文件夹内有一个名为“merged”的文件夹,其中包含所有帧以及包含遮罩帧的“merged_masked”。
最后一步是将它们转换回视频并与 data_dst.mp4 文件中的原始音轨合并。

为此,您将使用提供的 4 个 .bat 文件之一,该文件将使用 FFMPEG 将所有帧合并为以下格式之一的视频 - avi、mp4、lossless mp4 或lossless mov: - 8) 合并到 avi

-
8 ) 合并到 mov 无损
- 8) 合并到 mp4 无损
- 8) 合并到 mp4

或者,如果您想要更多控制,进一步细化视频某些部分的蒙版、调整脸部颜色或执行其他操作,您可以通过从 data_dst、原始帧、合并帧和蒙版帧获取音频来手动合成视频,将其导入您熟悉的视频编辑软件并手动创建最终视频,这可以让您执行我已经提到的操作,通过进一步模糊或锐化它们来调整蒙版(通常称为蒙版羽化),稍微放大或缩小蒙版的大小蒙版(从而或多或少地显示其下方的 DST 脸部,对您的脸部应用额外的色彩校正和颜色匹配(通过使用蒙版仅显示合并帧的脸部部分),添加锐化、胶片颗粒/噪点等。

这篇关于Deepface Lab2.0参数选取建议的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/874385

相关文章

ABAP怎么把传入的参数刷新到内表里面呢?

1.在执行相关的功能操作之前,优先执行这一段代码,把输入的数据更新入内表里面 DATA: lo_guid TYPE REF TO cl_gui_alv_grid.CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'IMPORTINGe_grid = lo_guid.CALL METHOD lo_guid->check_changed_data.CALL M

雨量传感器的分类和选型建议

物理原理分类 机械降雨量计(雨量桶):最早使用的降雨量传感器,通过漏斗收集雨水并记录。主要用于长期降雨统计,故障率较低。电容式降雨量传感器:基于两个电极之间的电容变化来计算降雨量。当降雨时,水滴堵住电极空间,改变电容值,从而计算降雨量。超声波式降雨量传感器:利用超声波的反射来计算降雨量。适用于大降雨量的场合。激光雷达式降雨量传感器:利用激光技术测量雨滴的速度、大小和形状等参数,并计算降雨量。主

Java面试八股之JVM参数-XX:+UseCompressedOops的作用

JVM参数-XX:+UseCompressedOops的作用 JVM参数-XX:+UseCompressedOops的作用是启用对象指针压缩(Ordinary Object Pointers compression)。这一特性主要应用于64位的Java虚拟机中,目的是为了减少内存使用。在传统的64位系统中,对象引用(即指针)通常占用8字节(64位),而大部分应用程序实际上并不需要如此大的地址空间

关于命令行参数argv(《学习OpenCV》)

在《学习OpenCV》这本书中,很多示例代码都用到了命令行参数。作为新手,之前总是很困扰,不知道怎么用。偶然的机会终于略知一二了。 在Visual Studio中,我们可以自行设置命令行参数。 如在这个示例程序中,我们想把图像存入argv[1]。 方法如下: 依次点击,项目、属性、配置属性、调试、命令参数。出现下面的界面: 然后进行编辑,即输入图像路径。如:E:\Lena.jpg

Linux IPC 参数设定,echo 80 /proc/...

文章转自 http://blog.chinaunix.net/uid-22287947-id-1775633.html Linux IPC 参数设定- 命令方式: echo 80 > /proc/sys/vm/overcommit_ratio, etc MSGMNB  每个消息队列的最大字节限制。 MSGMNI  整个系统的最大数量的消息队列。 MSGGSZ  消息片断的大

mysql中in参数过多该如何优化

优化方式概述 未优化前 SELECT * FROM rb_product rb where sku in('1022044','1009786') 方案2示例 public static void main(String[] args) {//往list里面设置3000个值List<String> list = new ArrayList<>();for (int i = 0;

虚拟机常用参数汇总

内存分配相关 -Xmx 堆的大小上限 -Xms 堆区内存初始内存分配的大小 -XX:MaxPermSize 永久代上限 -XX:SurvivorRatio Eden与Survivor区的比例 -XX:+/-UseTLAB 是否使用TLAB来创建对象 -XX:PretenureSizeThreshold 晋升老年代对象大小 -XX:NewRatio 新生代(Eden+2S)和老年代的

C#启动另外一个C#程序,并传递参数

第一个程序:             using System.ComponentModel; using System.IO;         private void button1_Click(object sender, EventArgs e)         {             string target = Path.GetDirectory

c++程序启动一个C#程序,并给C#程序传递参数,程序间实现参数传递

http://www.dotblogs.com.tw/atowngit/archive/2009/12/26/12681.aspx http://hi.baidu.com/baokunkun/item/8e4bba994b9c41d07b7f01ac C++发送端代码: int main(int argc, ch

vue项目开启Gzip压缩配置方法及性能优化建议

原文地址:https://jingyan.baidu.com/album/454316ab29d0c0f7a7c03a1f.html?picindex=1   vue 项目开启gzip压缩和部署 nginx 开启gzip优化性能   第一步,在vue项目中安装依赖并将productionGzip改为true,开启Gzip压缩: npm install --save-dev compres