很多人在开始Faceswapping时不知所措,并且犯了许多错误。错误是好的。这是我们的学习方式,但是有时在深入学习之前可能会有所帮助。
在本文中,我将详细介绍Extraction的工作流程。我并不是说这是最好的工作流程,也不是您应该做的,但是它对我有用,并希望为您创建自己的工作流程提供一个良好的起点。
我将在本教程中使用GUI,但前提是cli完全相同(GUI中存在的所有选项在cli中都是可用的)。
在最高级别,提取包括三个阶段:检测,对齐和蒙版生成。每个插件都有几个插件。它们的优缺点在工具提示(针对GUI)或帮助文本(针对cli)中进行了详细说明,因此在此不再赘述。但是,检测是在框架中查找人脸的过程,对齐是在人脸中查找“地标”并一致地定向人脸的过程。最终,遮罩生成将创建一个“遮罩”,该遮罩将识别最终面部图像的哪些部分是面部,哪些是背景/障碍物。
提取有两个主要目的:
- 生成一组面,以及可选的路线文件和蒙版,以训练模型
- 生成路线文件和蒙版以转换最终帧
从技术上讲,这是第三个目的,即您要进行转换时要提取它们,同时也要对其中一些面孔进行训练。我还将对此进行介绍。
虽然转换时不需要提取的脸部(仅需要路线文件),但是将它们包含起来很有用,以便我们可以为转换过程清理数据集。
路线文件
路线文件包含有关在每帧中找到的所有面部的信息,尤其是面部的位置以及68个点界标的位置:
该文件还存储为每个面部提取的所有蒙版。
路线文件的目的有三点:
- 训练:如果启用了“变向地标”,它将提供人脸地标。
- 转换:它告诉转换过程在原始帧中要替换的面部的位置。
- 培训和转换:它存储可用于这些过程之一的任何蒙版。
因此,现在我们知道了为什么需要提取脸部,如何确定良好的工作流程?
第一步,无论您创建面部表情的原因是从帧中实际提取面部。
- 数据
这是我们选择输入视频或图像以及输出位置的地方。- 输入目录:首先,我们需要一个源。可以将其设置为视频文件(视频图标)或包含一系列图像的文件夹(图片图标)。
- 输出目录:接下来,我们需要告诉该过程将提取的面保存到哪里。单击旁边的文件夹图标以选择输出位置。
- 我忽略了接下来的几个选项,因此您可能也应该这样做,但是每个选项的说明如下:
- 路线:如果要为路线文件指定其他名称/位置,则此选项。将其保留为空白要容易得多,然后让该过程将其保存到默认位置(该位置将与源帧/视频位于同一位置)。
- 插件
插件用于首先检测图像中的脸部,读取脸部界标以对齐图像并使用多种遮罩方法创建遮罩。- 检测器,对准器:选择要使用的检测器。在撰写本文时,最佳检测器是S3FD,最佳对准器是FAN
- 遮罩:选择您要使用的遮罩。基于界标的蒙版(“组件”和“扩展”)会在提取过程中自动生成,因此您无法选择它们,但是下面将对其进行详细说明,以便您了解其性能。除了基于地标的蒙版之外,此处选择的任何蒙版都会生成一个蒙版。可以生成多个遮罩(通过选择多个遮罩),但是请注意,所有这些遮罩均使用GPU,因此添加的遮罩越多,提取速度就越慢。每个蒙版都有各自的优缺点。如果希望使用基于神经网络的蒙版来训练或转换帧,则应在此处选择一个蒙版。注意:口罩是新添加的,因此关于最佳使用方法的信息在地面上非常薄。尽管在提取过程中只能提取一个蒙版,但是可以使用“蒙版工具”提取更多的蒙版/将蒙版添加到现有的路线文件中,以及生成预览。
- 无 -不创建遮罩。
- 组件 -由在对齐阶段找到的68个点地标生成的蒙版。这是围绕面部外部点构建的多部分蒙版。
- 扩展 -面膜组件的主要问题之一是它仅能遮住眉毛。扩展蒙版基于组件蒙版,但是尝试进一步提高额头以避免“双眉”问题(即,当源眉毛和目标眉毛都出现在最终交换中时)。
- Unet-DFL-一种神经网络蒙版,旨在提供对大部分正面面孔的智能分割。蒙版模型已由社区成员培训。
- VGG-Clear-一种神经网络面罩,旨在对大部分额头面部进行无障碍物的智能分割。
- VGG遮挡式 -设计用于对大部分正面进行智能分割。面罩模型经过专门培训,可以识别一些面部障碍物(手和眼镜)。
- 归一化:这处理输入到提取器中的图像,以在困难的光照条件下更好地找到人脸。不同的归一化方法适用于不同的数据集,但我发现“ hist”是最好的全能工具。这会稍微减慢提取速度,但是会导致更好的对齐方式:
- 接下来的几个选项也可以忽略。同样,我将详细介绍他们的工作,以便您可以拨打自己的电话:
- 旋转图像:除了CV2-DNN以外,所有电流检测器都完全不需要旋转图像。当前的检测器完全能够在任何方向上找到人脸,因此这只会使您的过程变慢,几乎没有增益。
- 此处定义了用于面部过滤和选择的面部处理选项。
- 最小尺寸:我通常将此值设置为一个较低的值,但要大于零,以滤除任何明显太小而无法构成人脸的东西。但是,它取决于输入框的大小,然后取决于框内面的大小:
- 由于以下原因,我忽略了接下来的几个选项,但是您可以自己拨打电话。下面分别对它们进行解释:
- 过滤器/ n过滤器,参考阈值:这些选项用于过滤出/过滤掉不需要的脸部。我不使用它。我更喜欢在下一个阶段自己做,因为与机器相比,我在滤除人脸方面总是会更有效,并且不会花很长时间。过滤面也会严重减慢提取过程。
- 输出
选项,用于人脸的输出处理。- 每N提取一次:这是第一个根据提取目的而变化的选项。
- 如果要提取要转换的内容,或者要提取要转换的内容,并且将使用某些面部进行训练,则将其保留为1(即从每帧提取)
- 如果您仅提取用于训练,则设置一个看起来合理的值。这将取决于您输入的每秒帧数。但是,对于25fps的视频,理智的值大约在12-25之间(即每半秒到一秒)。除此之外,您最终可能会拥有太多类似的面孔。值得牢记的是,您要从训练集中提取多少个来源,最终训练集中要拥有多少张面孔,以及来源有多长时间。这些都将视情况而定。
- 同样,我通常会跳过接下来的几个选项,但以下说明如下:
- 大小:这是持有提取的脸部图像的大小。当前没有模型支持256px以上,因此请保留默认值
- 保存间隔:我不介意,但要取决于您。
- 调试地标:在脸上绘制地标。仅用于调试目的。
- 每N提取一次:这是第一个根据提取目的而变化的选项。
- 运行
现在,我们准备检查我们的选项并运行Extraction。- 您应该最终看到类似于以下的屏幕:
- 点击提取,等待您的脸部输出并生成路线文件。
现在我们已经提取了脸部,我们需要清理数据集和路线文件。提取器在获取面孔方面做得很好,但并不完美。它将有一些误报,将无法对齐某些面孔,还将吸引我们不想交换的人。如果您转至faces文件夹,最有可能的是输出的大部分内容如下所示:
清理看起来并不有趣!幸运的是,我们可以简化此过程。清理数据集的最快,最简单的方法是将这些面孔按有意义的顺序排序,然后删除所有我们不需要的面孔。最好的分类方法是“按面分类”。
注意:按面排序需要占用大量RAM。它必须进行很多计算。我已经测试成功在8GB RAM上对22k张面孔进行了排序。如果您要排序的面孔数量超出RAM中可容纳的面孔数量,则该过程将自动切换到慢得多的方法,因此,如果您的内存有限,则可能需要将数据集拆分为较小的子集。从理论上讲,所需的RAM量为(n 2 * 24)/ 1.8,其中n是图像数。您还需要考虑任何其他RAM开销(即其他程序正在运行,图像已加载到RAM),但从理论上讲,这将占用30,000个图像(30000 2 * 24)/ 1.8 = 12,000,000,000字节或大约11GB。
转到GUI中的“工具”选项卡,然后转到“排序”子选项卡:
- 数据
这是我们选择在上一步中提取的Faceset进行排序的位置。- 输入:输入包含上一步中提取的面孔的文件夹。
- 输出:应该为空。我们希望将面孔分类到位。
- 排序设置
我们要如何对人脸和任何其他特定设置进行排序。- 排序方式:将此设置为“面部”
- 后端:(可选)将此设置为GPU。仅当您具有GPU且当前未将GPU用于其他任何机器学习任务(例如,培训)时,才执行此操作。这将使分拣更快。
- 您可以忽略本节中的任何其他选项
- 输出
我们希望如何输出分类的面孔。- 最终流程:确保将其设置为“重命名”
- 保留:确保未选中。
- 您可以保留所有其他选项,因为它们对重命名任务没有任何影响。
- 运行将
所有其他选项保留为默认值。现在,我们准备检查我们的选项并运行“排序”。- 您应该最终看到类似于以下的屏幕:
- 点击“ 排序”开始排序过程。
该过程将开始通读面孔,为每个面孔建立身份。然后它将通过相似性将面孔聚在一起。实际的群集过程可能需要很长时间,因为它必须计算大量数据。不幸的是,没有关于进度的视觉反馈,因此请耐心等待。
完成后,您应该发现99%的面孔已排序在一起:
所有的垃圾也一起整理:
现在,您要做的就是滚动faces文件夹,然后删除那些不想保留的面孔。
现在,我们已经删除了所有不需要的面孔,只剩下了我们要做的一组,我们需要清理路线文件。为什么?由于有关有害面部的所有信息仍在文件中,因此将来可能会给我们造成问题。使用集成工具清理路线文件还具有将面重命名为其原始文件名的附加优势,因此是双赢的。
导航至“工具”标签,然后导航至“路线”子标签:
- 作业
这是该工具中可用的所有不同路线作业的列表。- 选择“去除面部”:
- 数据
我们要处理的资源的位置。- 路线文件:选择在提取过程中生成的路线文件,它将与您提取的视频位于同一文件夹中,或者位于您提取的图像的文件夹中。
- Faces文件夹:选择在提取过程中将面部输出到的Faces文件夹(与用于排序的文件夹相同)。
- 由于不需要其他选项,因此在本节中将其保留为空白。
- 运行将
所有其他选项保留为默认值。我们现在准备检查我们的选项并清理路线文件- 您应该最终看到类似于以下的屏幕:
- 点击Alignments,然后完成该过程。
完成后,您的面孔将被重命名为其默认名称,并且所有不需要的面孔将从您的路线文件中删除。
该过程将备份您的旧路线文件,并将其放在原始位置的新创建文件旁边。它的名称与清理后的路线文件的名称相同,但文件名末尾会附加“ backup_ <timestamp>”。如果您满意您的新路线文件正确无误,则可以安全地删除此备份文件。
此时,如果您要提取要转换的内容(或者该集合将用于转换和训练),则可以完全删除您的faces文件夹。这些面孔都不再需要。如果您需要重新生成脸部设置,则可以使用“对齐”工具(提取作业)来完成。
好的,我们抽出了脸,清理了所有垃圾,现在确定要完成了吗?好吧,那里的家伙。当然,您可以继续前进,但是您想要好的交换还是想要一次很好的交换?
手册对于以下任务很有用:
- 删除框架中任何剩余的“多个面”
- 将对齐方式添加到缺少它们的那些框架中
- 修复未对齐的框架
- 手动编辑您要使用的任何蒙版
根据我们要提取数据集的内容,这将决定我们要在此处执行的操作。如果我们纯粹是从训练集中提取数据,则可以完全跳过此步骤,尽管最好检查一下现有的路线以确保正确构建任何蒙版。
如果要提取进行转换,那么我们绝对要修复帧中的任何多个面,以及所有缺少对齐的帧。仅此一项就可以改善最终交换。然后,根据您要达到的彻底程度,可以解决所有不良的对齐方式,
我将不详细介绍如何使用手动工具。那本身就是一个教程,但是应该非常直观,并带有所有可用选项的工具提示。
- 启动手动工具
要启动“手动”工具,首先导航至“工具”选项卡,然后导航至“手动”子选项卡:- 数据
这是我们指定要使用的路线文件和视频文件/帧文件夹的位置。- 路线:选择在提取过程中生成的路线文件,该文件将与从中提取视频的文件夹位于同一文件夹中,或者位于从中提取图像的文件夹中。
- 帧:选择用作提取过程输入的视频或帧文件夹
- 选项
这是可以运行的可选操作。通常,您不需要更改它们,但是我将列出它们的作用,以防您需要使用它们。- Regen Thumbs:手动工具存储缩略图缓存,用于填充工具的Faces Viewer部分。如果您将旧的手动工具与路线文件一起使用,则拇指可能与实际提取的面孔不同步。此选项将重新生成缩略图,以便它们与路线文件中存在的数据正确无误。
- 单个进程:为了加快缩略图缓存的生成,该进程启动多个线程以从视频文件读取图像。在某些视频上,这会导致过程挂起。如果您遇到这种情况,请选择此选项以在单个线程中提取缩略图。
- 运行将
所有其他选项保留为默认值。现在,我们准备检查我们的选项并启动手动工具。- 您应该最终看到类似于以下的屏幕:
- 点击“ 手动”按钮以启动手动工具。
- 注意:手动工具可能需要一两分钟才能启动,因为它依赖于您的GPU,因此需要初始化它将使用的对齐器/屏蔽器。
- 数据
- 手动修复转换
为了进行转换修复,我们想要执行以下操作:- 多面
- 在位于“框架”和“面孔”查看器之间的下拉过滤器中,将过滤器模式更改为“多张面孔”
- 您可以在“面孔”查看器中右键单击面孔以删除要删除的面孔
- 或者,您可以将编辑器更改为左侧按钮栏上的“边界框”或“提取框”,然后右键单击要从“帧查看器”中删除的面。
- 使用传输按钮或“ Z”和“ X”导航到具有多个脸部的上一帧或下一帧。
- 按“ Ctrl + S”以保存修改后的路线文件,或按一下Frames和Faces Viewer之间的保存图标。
- 无脸框
- 在“框架”和“脸部查看器”之间的下拉列表中将滤镜模式更改为“无脸”
- 使用左手按钮栏将编辑模式更改为“边界框”编辑器
- 使用传输按钮或“ Z”和“ X”导航到没有面孔的上一帧或下一帧。
- 如果击中未检测到脸孔但应该检测到脸孔的帧,则可以单击脸孔并用鼠标调整边界框,也可以使用左侧的复制按钮复制上一帧/下一帧的对齐方式侧面或使用“ c”或“ v”键进行编辑。
- 重复直到到达最后一帧
- 按“ Ctrl + S”以保存修改后的路线文件,或按一下Frames和Faces Viewer之间的保存图标。
- 固定路线
- 在位于“框架”和“面部”查看器之间的下拉过滤器中,将过滤器模式更改为“具有面孔”
- 您可以使用传输控件在框架中导航,或在Faces Viewer中单击面部,直接跳到需要注意的任何框架。
- 如果对齐方式看起来不正确,请使用左侧按钮栏中的相应编辑器进行修复
- 重复直到到达最后一帧
- 按“ Ctrl + S”以保存修改后的路线文件,或按一下Frames和Faces Viewer之间的保存图标。
每次在手动调整期间保存时,都会创建路线文件的备份。如果您满意您的新路线文件正确无误,则可以删除这些备份。它们将与原始路线文件位于同一文件夹中。
- 多面
- 手动修复训练集
为了修复培训,我们要执行以下操作:- 固定路线
- 在位于“框架”和“面部”查看器之间的下拉过滤器中,将过滤器模式更改为“具有面孔”
- 您可以使用传输控件在框架中导航,或在Faces Viewer中单击面部,直接跳到需要注意的任何框架。
- 如果对齐方式看起来不正确,请使用左侧按钮栏中的相应编辑器进行修复
- 重复直到到达最后一帧
- 按“ Ctrl + S”以保存修改后的路线文件,或按一下Frames和Faces Viewer之间的保存图标。
每次在手动调整期间保存时,都会创建路线文件的备份。如果您满意您的新路线文件正确无误,则可以删除这些备份。它们将与原始路线文件位于同一文件夹中。
- 固定路线
对齐方式固定后,您将需要重新生成面容。这是因为面部图像会由于移动地标而发生变化,因此训练过程将无法找到您修改过的面部。
首先删除您的输出Faces文件夹。您不再想要这种情况。
然后,您可以点击保存图标旁边的文件夹按钮,以直接从路线文件中提取面。
下面列出了一种替代方法,但是如果您已成功从“手动工具”中提取,则可以直接跳至从路线文件中提取训练集
- 接下来,导航至“工具”标签,然后导航至“路线”子标签:
- 作业
这是该工具中可用的所有不同路线作业的列表。- 选择“提取”:
- 数据
我们要处理的资源的位置。- 路线文件:选择在最后一步清洁后生成的路线文件。它将与您提取的视频位于同一文件夹中,或者位于您提取的图像的文件夹中。
- 人脸文件夹:选择一个空文件夹,您要在其中输出输出的人脸。
- 帧文件夹:选择用作提取过程输入的视频或帧文件夹
- 将本节中的任何其他选项保留为空白,因为此步骤不需要它们。
- 运行将
所有其他选项保留为默认值。现在,我们准备检查我们的选项并启动手动工具。- 您应该最终看到类似于以下的屏幕:
- 点击对齐按钮重新提取您的面孔。
如果打算使用口罩训练或使用“经向地标”,则将路线文件从源帧位置复制到新创建的Faces文件夹中。
- 作业
现在,您已经清理了路线文件,您可能希望拉出其中一些面以用于转换集。这是一个简单的任务:
导航到“工具”选项卡,然后导航到“路线”子选项卡:
- 作业
这是该工具中可用的所有不同路线作业的列表。- 选择“提取”:
- 数据
我们要处理的资源的位置。- 路线文件:选择在最后一步清洁后生成的路线文件。它将与您提取的视频位于同一文件夹中,或者位于您提取的图像的文件夹中。
- 人脸文件夹:选择一个空文件夹,您要在其中输出输出的人脸。
- 帧文件夹:选择用作提取过程输入的视频或帧文件夹
- 将本节中的任何其他选项保留为空白,因为此步骤不需要它们。
- 提取
这些是用于从路线文件中提取面的选项- 每N提取一次: 这取决于您输入的每秒帧数。但是,对于25fps的视频,理智的值大约在12-25之间(即每半秒到一秒)。除此之外,您最终可能会拥有太多类似的面孔。值得牢记的是,您要从训练集中提取多少个来源,最终训练集中要拥有多少张面孔,以及来源有多长时间。这些都将视情况而定。
- 大小:这是持有提取的脸部图像的大小。当前没有模型支持256px以上,因此请保留默认值
- 对齐眼睛:我发现此选项完全没有意义。对齐器已对齐面。无需进一步对齐。
- 运行将
所有其他选项保留为默认值。现在,我们准备检查选项,并将训练集从清理后的路线文件中提取到所选文件夹中。- 您应该最终看到类似于以下的屏幕:
- 点击对齐按钮以提取面。
如果打算使用口罩训练或使用“经向地标”,则将路线文件从源帧位置复制到新创建的Faces文件夹中。
因此,您已经准备好要训练的大量面孔,并且有大量有关面孔所来自框架的路线文件。这些可以合并为一个培训资源吗?当然可以!
准备
我们要做的准备一点点合并对齐文件之前:
- 首先,将要训练的所有面孔从其各自的文件夹复制到一个文件夹中(我们将其称为“训练”以供参考)。
- 将与刚从其源帧位置中选择的面相关的所有路线文件复制到新的“训练”文件夹中。
现在,在GUI中,导航到“工具”选项卡,然后导航至“路线”子选项卡:
- 作业
这是该工具中可用的所有不同路线作业的列表。- 选择“合并”:
- 数据
我们要处理的资源的位置。- 路线文件:导航到“培训”文件夹,按住shift键并突出显示您刚刚复制的所有路线文件以选择它们。
- 面孔文件夹:选择将所有面孔放入其中的“培训”文件夹
- 将本节中的任何其他选项保留为空白,因为此步骤不需要它们。
- 运行将
所有其他选项保留为默认值。现在,我们准备检查我们的选项并合并我们的路线文件。- 您应该最终看到类似于以下的屏幕:
- 点击对齐按钮以合并文件
完成
过程完成后:
- 从“培训”文件夹中删除先前复制到“培训”文件夹中的所有路线文件。
- 将“培训”文件夹中生成的对齐文件重命名为“ alignments.fsa”
您的训练准备好了
转自:https://forum.faceswap.dev/viewtopic.php?f=5&t=27
原创文章,作者:校长,如若转载,请注明出处:https://www.yundongfang.com/Yun15599.html