Faceswap中文使用指南

如题所述

第1个回答  2022-06-17

翻译自:
https://faceswap.dev/forum/viewtopic.php?f=5&t=27
https://forum.faceswap.dev/viewtopic.php?f=6&t=146

github地址:
https://github.com/liafuzho/faceswap-doc-cn/blob/master/faceswap-guide-cn.md

“提取” 流程

很多人在开始 "Faceswap" 时不知所措,并且犯了许多错误。错误是好的,这是我们的学习方式,但有时在深入学习之前对所涉及的过程有一点了解可能会有所帮助。

在本节中,我将详细介绍 “抽取” 的工作流程。 我并不是说这是最好的工作流程,但是它对我很管用,希望在您创建自己的工作流程时提供一个良好的起点。

我将在本指南中使用 “GUI”,在 “cli” 中也完全相同(“GUI”中存在的所有选项在“cli”中都是可用的)。

“提取” 包括三个阶段: “检测”、 “匹配”、 和 “遮罩生成” 。每个阶段都有几个插件。它们的优缺点在工具提示(针对“GUI”)或帮助文本(针对“cli”)中都有详细说明,因此不再赘述。 然而,“检测” 是在每一帧中查找人脸的过程,“匹配” 是在人脸中查找 “特征” 并一致地确定人脸位置的过程。最终,“遮罩生成” 将创建一个 “遮罩”,即识别出图像中哪些是人脸,哪些不是。

提取有两个主要目的:

从技术上讲还有第三个目的,当您为转换提取人脸时,也需要一些人脸进行训练,这些我都会讲到。

虽然转换时不需要提取人脸(仅需要“匹配文件”),但是提取出来将是很有用的,以便我们可以为转换过程清理 “人脸集”。

“匹配文件” 保存了每帧中所有的人脸信息,特别是人脸位置,以及人脸的68个 “特征点” 位置:

该文件还保存了为每个人脸提取的所有 “遮罩”

“匹配文件” 的目的有三点:

因此,现在我们知道了为什么需要提取人脸,如何确定一个良好的工作流程?

第一步,无论您创建 “人脸集” 的原因是什么,实际上都需要从帧中提取人脸。

现在我们已经提取了脸部,我们需要整理 “数据集” 和 “匹配文件”。 “提取器” 在获取人脸方面做得很好,但并不完美。 它将有一些误报,将无法匹配某些面孔,还会提取出我们不想交换的人。 如果您转至 “faces” 文件夹,最有可能的是输出如下所示相似的内容:

清理这些看起来不太有趣! 幸运的是我们可以让这更容易。 清理数据集的最快、最简单的方法是将这些面孔按有意义的顺序分类,然后删除所有我们不需要的人脸。 最好的分类方法是 “按人脸分类”。

注意 :按人脸分类是RAM密集型的,它要做很多计算。 我已经测试成功在 8GB RAM 上对 22k 张人脸进行了分类。 如果您要分类的人脸数量超出了 RAM,则该过程将自动切换到慢得多的方法,因此,如果您的内存有限,则可能需要将数据集拆分为较小的子集。 理论上,所需的 RAM 量为 (n2 * 24)/1.8,其中 n 是图像数。 您还需要考虑任何其他 RAM 开销(即其他程序正在运行,加载到 RAM 的映像),但理论上,这将占用 30,000 个图像 (300002 * 24)/ 1.8 = 12,000,000,000 字节或大约 11GB。

转到 “GUI” 中的 “Tools” 选项卡,然后转到 “Sort” 子选项卡:

程序将开始读取人脸,为每个人脸建立身份。 然后它将根据相似度将面孔聚集。 实际中聚集过程可能需要很长时间,因为它需要计算大量数据。 不幸的是,没有关于进度的视觉反馈,因此请耐心等待。

完成后,您应该发现99%的面孔已分类在一起:

所有无用的也一起分类了:

现在您要做的就是滚动 faces 文件夹,删除那些不想保留的人脸。

现在我们已经删除了所有不需要的人脸,只留下我们要做的一组,我们需要清理 "匹配文件”。为什么? 因为我们不需要的已经删除的人脸还在 “匹配文件” 中,因此将来很可能会给我们造成问题。 使用集成的工具清理 “匹配文件” 还有一个额外好处,就是将我们的人脸重新命名为它们的原始文件名,因此是双赢的。

导航至 “Tools” 标签,然后选择 “Alignments” 子标签:

完成后,您的人脸将被重命名为其原默认名称,并且所有不需要的人脸将从您的 “匹配文件” 中删除。

该过程将备份您的 旧“匹配文件”,并将其放在新创建的 “匹配文件” 旁边。 它的名称与清理后的 “匹配文件” 名称相同,但文件名末尾会附加 "backup_<timestamp>"。 如果您新的 “匹配文件” 是正确无误的且感到满意,则可以安全地删除此备份文件。

此时,如果您正在提取以进行转换(或该集合将用于转换和训练),则可以完全删除您的 faces 文件夹,这些人脸都不再需要。 如果您需要重新生成 “人脸集”,则可以使用 “Alignments Tool” (提取作业)来完成。

Ok,我们提取出了人脸,清理了所有没用的,现在确定完事了吗? 等等,伙计。 当然,您可以继续前进,但是您想要好的 “交换” 还是想要一次很好的 “交换”?

手动修复对于以下任务很有用:

根据我们要提取数据集的内容,这将决定我们要在此处执行的操作。 如果我们纯粹只提取一个训练集,则可以完全跳过此步骤,然而最好检查一下现有的 “匹配文件” 以确保正确构建任何遮罩。

如果为 “转换” 而提取,那么我们绝对要修复帧中的任何多个人脸,以及所有缺少匹配的帧。仅此一项就可以改善最终交换。 然后,根据您想要的程度,可以解决所有不良的匹配。

我将不详细介绍如何使用手动工具。 那本身就是一个指南,但是非常直观,在弹出窗口中编写了说明。

如果打算使用遮罩进行训练或使用 “Warp to Landmarks”,请将 “匹配文件” 从源帧位置复制到新创建的 faces 文件夹中。

现在,您已经清理了 “匹配文件”,您可能希望拉出其中一些人脸以用于训练集,这是一个简单的任务:

导航到 “Tools” 选项卡,然后导航到 “Alignments” 子选项卡:

如果打算使用遮罩训练或使用 “Warp to Landmarks”,则将 “匹配文件” 从源帧位置复制到新创建的 faces 文件夹中。

因此,您已经准备好要训练的大量人脸,并且有一堆来自所对应帧的 “匹配文件”。 这些可以合并为一个训练源吗?当然可以!

在合并 “匹配文件” 之前,我们需要做一点准备:

现在,在 GUI 中,导航到 “Tools” 选项卡,然后导航至 “Alignments” 子选项卡:

处理完成后:

您的训练准备好了



“训练” 流程

很多人在开始 "Faceswapping" 时不知所措,并且犯了许多错误。 错误是好的,这是我们的学习方式,但有时在深入学习之前对所涉及的过程有一点了解可能会有所帮助。

在本节中,我将详细介绍我们如何训练模型。有一些模型有很多选择,我不会全都说到,但希望这能足够让您来做出自己的明智决定。 如果您尚未生成用于训练的 “人脸集”,请立即停止并转到 “提取流程” 来生成它们。

本指南中有很多背景信息,我建议您把这些全都熟悉一下。机器学习是一个复杂的概念,但我尝试将其分解为尽可能简单易懂。对神经网络的工作原理以及从中获得的数据类型有基本的了解,将极大地提高您成功交换数据的机会。

我将在本指南中使用 “GUI”,在 “cli” 中也完全相同(“GUI”中存在的所有选项在“cli”中都是可用的)。

在较高的级别上,训练是在教我们的神经网络(NN)如何重塑人脸。大多数模型主要由两部分组成:

某些模型的构造略有不同,但基本前提保持不变。

神经网络需要知道它在编码和解码人脸方面做得如何,它使用 2种 主要工具来实现此功能:

然后,模型会重复这个动作很多次,并根据其损失值不断更新其权重,从理论上讲会随着时间的推移而不断改进,直到您认为已学到足以有效重现人脸的程度,或者损失值停止下降。

现在我们有了神经网络的基本知识,以及它如何学习创建人脸,这是如何应用于人脸交换的?在上面所述中,您可能已经注意到,神经网络学习如何对一个人脸进行加载,然后重建这些人脸。这不是我们想要的……我们想要很多的人脸并重建别人的脸。为了实现这一目标,我们的神经网络做了两件事:

使用 Faceswap 时,您将看到一些常见的机器学习术语,为了生活简单些,在这里展示了一个术语表:

数据的质量对模型来说是非常重要的。 良好的数据能够使一个较小的模型执行的很好,同样,没有模型可以对不良的数据执行得很好。 在模型的每一侧至少应有 500张 不同的图像,但是数据越多,越多样化,

相似回答