1. 简介
如果您已登陆此页面,但不知道如何提取人脸数据集或训练模型,请立即停止,然后阅读提取指南和训练指南。
那么,你已经走到这一步了吗? 困难的部分已经结束。我们有一个训练有素的模型,我们准备好创建一个交换。到目前为止,转换是该过程中涉及最少的部分,但我们仍然需要进行一些设置和最终调整才能获得良好的结果。
与其他指南一样,我将使用 GUI
,但此处的所有命令也可在 cli
中使用,您可以执行 python faceswap.py convert -h
以获取命令列表,以及 python tools.py -h
获取可用工具的列表。
2. Settings(设置)
在前往转换选项卡之前,我们需要做一些准备工作,并锁定一些看起来不错的设置。
2.1 Alignments(对齐)
为了创建我们的最终交换,我们需要一个源视频(或帧文件夹)和经过训练的模型。我们还需要另一件事,那就是源视频的对齐文件。这与用于训练的对齐文件不同,更多的是,它是一个专为我们想要切换到的视频,而创建的对齐文件。这里对齐文件的目的是告诉 Faceswap
哪个是我们应该交换的目标人脸,以及它在frame
中的位置。如果您尚未为源视频创建对齐文件,并对其进行清理,那么您现在应该这样做,有关如何创建用于转换的对齐文件的说明,请前往提取指南。
2.2 Preview Tool(预览工具)
Faceswap
提供了一个Preview Tool
,您可以在其中预览交换的结果,并调整设置以更好地将人脸与frame
融合。
1. 转到Tools
选项,然后是Preview
子选项:
2. 这里没有很多选项可以配置,但它们解释如下:
- Input Dir – 选择源视频的视频图标,或源帧文件夹的图像图标,然后导航到要交换的源。
- Alignments File – 如果对齐文件位于您从中提取的默认位置,那么您可以将此留空。否则,单击该图标并导航到与您在前一字段中输入的视频对应的
.fsa
对齐文件。 - Model Dir – 这应该是您在训练阶段指定的文件夹。它将包含一个
<model_name>.h5
文件和一个<model_name>_state.json
文件。 - Swap Model – 这是为了防止您以错误的方式训练模型(即当您尝试转换时,但主体的人脸保持不变)。您可以启用此选项来切换模型方向,并记下下次训练正确的方法。
3. 点击Preview
按钮来启动预览工具,该过程将加载模型,源视频和对齐文件,然后显示如下所示的窗口:
下面描述了布局的基本概述,但接下来我们将更详细地研究选项:
- Top row of images – 原始
frame
里的人脸。 - Bottom row of images – 交换后的人脸放入原来的
frame
。 - Bottom left option panel – 这些与
Command Line Options
有关(即您在主GUI
中设置的用于转换的选项)。您在此处设置的任何内容都应该记下,因为您在运行转换时,需要复制这些选项。 - Bottom right option panel – 这些与
Configuration Options
有关。这些是您从GUI
中的Settings > Edit Convert Settings
…对话框(或cli
中的./config/convert.ini
)访问的设置。您在此处更改(和保存)的任何设置都将在转换过程中被记住。 - Update Samples – 此按钮将刷新顶部帧中显示的图像,从源视频文件中拉入新的人脸选择。按下此按钮时请耐心等待,根据您的设置,这可能需要几秒钟,因为人脸需要通过模型以生成新的交换。
- Utility Buttons – 有两组实用程序按钮。左侧(在命令行选项下)影响完整配置(即与右侧面板中的每个选项卡对应的选项)。右侧的按钮(在配置选项下)只会影响您当前选择的选项卡。无论哪种方式,这些按钮都允许您重置选项的保存值或默认值,并允许您保存配置。
4. Command Line Options:这些选项与您稍后运行转换时,将在主 Faceswap GUI
中配置的设置相关。您在此处更改的任何内容都需要记下,因为在运行转换任务时,您需要使用相同的设置。
- Color – 这是在原始人脸和交换人脸之间使用的颜色匹配类型。理想情况下,您会将其保留为“None”,但根据所使用的模型和数据质量,您可能希望使用其中一种内置颜色匹配方法。一些方法具有可以在右侧面板中调整的设置(但我稍后会介绍)。值得注意的是,这里没有“right”选项可供选择。不同的交换将需要不同的配色技术,目前的方法有:
- None–不要进行任何颜色匹配。
- Avg Color-取原始人脸和交换人脸之间的颜色的平均值,并将此应用于交换的人脸。
- Color Transfer– 由 Reinhard 等人在 2001 年开发的颜色匹配算法,此方法在右侧窗格中有几个选项。
- Manual Balance– 允许您手动更改交换人脸的颜色/对比度/亮度,此方法在右侧窗格中具有可用设置。
- Match Hist– 尝试从源人脸中的直方图匹配交换人脸上的直方图,此方法在右侧窗格中具有可用设置。
- Seamless Clone – 无论结果看起来有多好,如果你正在创建一个视频,不要使用这种方法。
- Mask Type – 这是您要用于转换的
mask
类型。提取指南中提供了可用的mask
及其说明。 如果要使用对齐文件中不可用的mask
,则可以使用mask
工具生成其他mask
。mask
在右侧窗格中具有设置,用于调整如何将交换的人脸混合到原始frame
上。
5. Configuration Options:右侧面板中的这些选项,允许您为将在转换过程中运行的每个插件配置设置。当您在此处进行更改时,保存的值将在您的 convert.ini
中更新(可从 GUI
中的Settings > Edit Convert Settings
…访问)。这意味着一旦您在此处正确锁定了设置,它们将自动被选择用于转换过程。
插件分为 3 个主要类别,每个类别可能包含一个或多个插件的设置。我将概述可用的主要类别和插件,但您需要使用的实际设置会因情况而异,因此由您来评估结果,并选择最佳设置。 所有设置都有工具提示,解释每个选项的作用。
- Color – 此处显示的设置与上一
Command Line Options
部分的颜色下拉列表相关。例如,如果您在左侧窗格中选择了“Color-Transfer”作为颜色匹配方法,那么您将在右侧窗格中选择“Color Transfer”选项来配置该插件的选项。- Color Transfer – 公开几个选项来关闭/打开此插件。根据来源,打开或关闭这些将产生不同的效果。
- Manual Balance – 允许你手动调整颜色/亮度/对比度的最终交换,如果你选择了这个插件。
Color Balance
部分允许你选择一个要工作的颜色空间,然后调整该颜色空间的平衡。Brightness Contrast
部分允许你调整亮度和对比度。
- Match Hist – 这个插件只需要编辑一个参数,它允许你设置颜色匹配发生的阈值。这有助于消除“极端”颜色。
- Mask – 此处的设置对应于
mask
和提取box
如何融入背景图像。如果没有应用混合,那么交换后的人脸和原始帧之间会有一个非常清晰的边界。这里有 2 个“masks”可以编辑。Box Mask
是包含正在交换的人脸的方形框,Face Mask
是定义人脸边缘的mask
。根据你所训练的覆盖范围来决定每一个mask
将使用多少,使用提取指南中的例子:
- 如果您以 100% 进行训练,那么提取框完全有可能包含整个
mask
,因此编辑框混合设置将无济于事。然而,在低覆盖设置(例如 67.5%)下,完全可以想象大部分提取框位于mask
区域内,在这种情况下,人脸混合设置不会产生太大的影响,但两者都需要调整。 - 作为提示,如果您将颜色插件类型更改为“manual-balance”并将亮度设置为 -100%,您可以非常清楚地看到
box
/mask
边缘的位置,以及更改设置的影响:- Box Blend – 编辑设置,将提取框的边缘混合到原始
Frame
中。使用工具提示来了解每个设置的作用,并进行调整,使你的交换无缝混合。
- Box Blend – 编辑设置,将提取框的边缘混合到原始
- Mask Blend – 编辑设置,将
mask
的边缘混合到原始帧中。使用工具提示来了解每个设置的作用,并进行调整,使你的交换无缝混合。
- Scaling – 可以调整的最终设置是“scaling”,或者更具体地说是锐化(sharpening)。通常情况下,交换可能必须放大以适应最终帧。在这里,您将找到人工锐化图像的选项。锐化是否能产生好的结果是个人喜好的问题,这些设置几乎总是会因情况而异:
- 质量最好的锐化选项是“Unsharp Mask”,然后是“Gaussian”,最后是“Box”。使用最适合您的或设置为“None”以禁用。如果工具提示没有给你足够的信息,你可以谷歌这些锐化方法来更好地了解参数的作用。
一旦你觉得一切看起来都很好,确保你的设置被保存,记下你所选择的mask
类型和颜色插件,然后关闭Preview Tool
。
2.3 Settings Menu(设置菜单)
我们上面设置的所有设置都可以在Preview Tool
中使用。这些可以忽略,因为我们已经将它们锁定。但是,如果您从命令行运行,因此无法访问这些工具,您可以在文件 faceswap/config/convert.ini
中编辑这些选项。这些选项与Preview Tool
部分中显示的完全相同,因此您可以参考该部分以获取帮助。我们接下来讨论的 writer
选项也在同一个文件中。
1. Writer plugin
设置菜单中有一个部分我们仍然感兴趣,那就是与Writer
相关的插件。Writer
插件决定了最终帧的生成方式,无论是视频、一系列图像还是动画 GIF
。我们将在下一节中选择我们使用的 Writer
,但将在此处设置选项。
- 选择
Settings > Configure Settings...
(或者选择任务栏上的转换设置图标直接跳转到正确的部分):
- 选择
Writer
节点:
- 我不会介绍所有单独的设置,因为它们各不相同,因此将鼠标悬停在工具提示上,而是对可用编写器的概述:
- Ffmpeg – 将交换输出到视频文件。
- Gif – 从交换中创建一个动画
GIF
。 - OpenCV – 将交换输出到一系列图像。
- Pillow – 将交换输出为一系列图像(比
OpenCV
支持更多格式,但速度较慢)。
- 你应该注意一些高级别的事情:
- 使用
FFMPEG
插件的H265
编码会大大减慢转换速度。 - 您可以使用
OpenCV
或Pillow
编写器,并选择绘图透明选项将mask
输出到4
通道PNG
或TIFF
的alpha
通道。如果您想将交换加载到外部应用程序进行后期处理,这将非常有用。
- 使用
- 配置好插件后,请单击
Ok
保存设置,并退出配置页面。
3. Convert(转换)
我们马上就到家了!我们已经准备好了一切,我们只需要在convert
选项中输入正确的信息,让它生成我们的交换。由于我们已经正确配置了所有内容,因此这很简单。
- 在主
GUI
中选择Convert
选项:
- Data – 我们将配置的第一部分是
Data
:
- Input Dir – 这是您希望交换人脸的视频或图像文件夹。根据您的来源选择相应的视频或图像图标,然后导航到正确的位置。
- Output DIr – 输出将保存在这里。如果文件夹不存在,将在此位置创建一个新文件夹。
- Alignments – 这是与您将要交换人脸的
frames
相关的对齐文件。如果它位于默认位置(源文件),那么您可以将此留空,该文件将自动被拾取。 - Reference Video – 仅当您的输入是一个充满图像的文件夹,并且输出使用
FFMPEG
编辑器时才需要此选项。如果是这种情况,那么这应该是原始视频的路径,其中包含完整图像的文件夹是从中提取的。 - Model Dir – 这应该是您在训练阶段指定的文件夹。它将包含一个
<model_name>.h5
文件和一个<model_name>_state.json
文件。 - Plugins – 接下来,我们将配置
plugins
:
- Color Adjustment – 选择使用
Preview Tool
时,选择的颜色调整。 - Mask Type – 选择使用
Preview Tool
时,选择的mask
类型。 - Writer – 选择您要使用的
writer
(有关writer
的细分,请参阅上一节)。 - Frame Processing – 我不喜欢玩这些游戏,但下面有一个解释:
- Output Scale – 这将缩放最终输出。例如,100% 比例(默认)的 720p 视频将作为 720p 视频输出。缩放比例为 50% 时,它将输出为 360p 视频。缩放比例为 200% 时,它将输出为 1440p 视频。这里没有做任何花哨的事情,它只是缩放输出。
- Frame Ranges – 您可以指定要转换的帧范围。例如,如果您有一个 2000 帧长的视频,但您只想交换第 500 – 1500 帧的人脸,那么您将输入 500-1500。
- Keep Unchanged – 此选项仅在选择了“Frame Ranges”时才相关。使用上面的示例,启用此选项后,您将收到 2000 帧输出,但只会交换 500-1500 帧。禁用此选项后,您将只会收到 1000 帧(您选择用于交换的帧)。
- Face Processing – 不要使用此部分。说真的,如果你必须使用它,那么你只是在
covering
糟糕的工作流程。但是,选项存在,所以我将描述一下(以及为什么不应该使用它们)。
- Input Aligned Dir – 这允许您将
Faceswap
指向您要切换到的视频中已知人脸的文件夹。只有存在于对齐文件和此文件夹中的人脸才会被交换,如果您必须使用此文件夹,那是因为您没有正确清理对齐文件。干净的对齐文件对于获得良好的交换至关重要,因此…不要使用此选项,清理您的对齐文件。 - Filter/nFilter, Ref Threshold – 这些选项用于过滤/过滤不需要的人脸。不要使用它,您应该已经清理了您的对齐文件,所以这不是必要的。你总是比机器更有效地过滤人脸,而且不会花很长时间,启用这些选项也会严重减慢转换过程。
- Settings – 最后,我们有了转换的设置:
- Jobs – 通常,您不需要触摸它。默认设置将使用尽可能多的并行线程,但是,在某些系统上,
convert
可能会耗尽RAM
,在这种情况下,您可能希望将其设置为“1”或较小的数字。 - Trainer – 用于训练模型的模型类型。通常您不需要填写此内容,因为将从模型文件夹中读取训练器。但是,如果您在同一文件夹中有多个模型(不好的做法,将来将不受支持),那么您可以在此处为要转换的模型指定训练器。
- Distributed – 是否在多个
GPU
上运行推理。可能没什么区别,因为速度瓶颈在转换阶段的CPU
而不是GPU
。 - On The Fly – 切勿使用此选项。始终为您的转换生成一个对齐文件,但是,如果由于某种原因您不想这样做,并且您想获得转换缓慢的糟糕交换,那么请务必启用此选项。
- Swap Model – 当人们开始时,他们经常以错误的方式训练模型(即训练时 A 和 B 文件夹错误)。如果你发现你的交换只有原始人脸的低质量版本,那么你训练的方式是错误的。启用此选项并记住下次以正确的方式进行训练。
- Single Process – 参见“Jobs”,与将“Jobs”设置为“1”的作用相同。
现在我们已经锁定了所有设置,我们可以继续点击Convert
按钮,并等待我们的最终交换生成。