续上篇:https://www.cnblogs.com/techs-wenzhe/p/12936809.html
第一步中已经提取出了源视频的人脸照片以及对应人脸遮罩(landmark以及其他自选遮罩)
步骤1:剔除不需要的人脸
首先,我们需要剔除不需要的人脸(对齐识别错误以及非想要换脸的目标),做法是对生成的人脸进行聚类,排序。之后把不需要的类别的人脸删除掉。
这一步的目的是:我们都知道训练一个模型输入参数的正确性决定了算法的精确度,这一步就是为了去除所有错误的,不恰当的输入数据(图片)集。我们需要给模型一个清晰,明了的可学习对象。
PS:如果你的输入数据集(人脸图片很多)过大,请拆分成多个,需要分多次聚类排序。因为这些操作会在RAM中进行,例如:大约22k 张人脸对应大约8G RAM,30k对应11G(还要考虑其他内存使用,浏览器什么的==). 根据你电脑的RAM能力,选择分几次来处理即可。
GUI的设置如下:
PS: 实际根据有啥模型就用啥,笔者自己办公用的机器有Face-cnn,所以就选了用这个模型排序,选face的话得需要vggface2_resnet50_v2.zip模型在对应目录下才行。
1.1 Data模块:
-
输入:输入包含上一步提取的人脸的文件夹。
-
输出:留空则基于输入的文件内直接排序。
1.2 Sort Settings模块:
-
Sort by:排序的方式,这里直接选face即可。意思是根据人脸相似度进行排序。当然还有其他排序方式(如基于landmark的Face-CNN,基于模糊度的Blur,基于聚类距离-识别错误对齐的distance,基于颜色的Color系列,基于大小的Size系列),实测还是face最有效。
-
Ref Threshold:Sort by内特殊几种算法(face-CNN, Hist)的调节,同样的值越高越严格。(推荐设置为-1即可,代表自动设置默认值) ,face-CNN 7.2就足够了,设置为4会有较高识别度。Hist 0.3就足够,设置为0.2 会有较高的识别度
1.3 Output模块:这里不需要设置任何东西(此部分已完全弃用,并将在未来的更新中删除。这里不需要设置任何东西。
选好模型,选好数据集(图片)所在文件夹,选好输出文件夹,点击sort等待结果即可。
可看到是提取图片中的landmark,根据直方图分类。
一旦完成,你应该发现 99% 的面孔被分类在一起,所有垃圾也一起分类,现在只需浏览每个垃圾箱(子文件夹),删除那些您不想保留的面孔/文件夹,然后将您想要保留的任何面孔移回父文件夹。
至此,排序完毕,接下来要清理对齐-alignments文件
步骤2:清理对齐文件
现在我们已经删除了所有不需要的面孔,只剩下一组了,接下来要做的是清理对齐文件(对齐文件中包含了每张图片对应的五官所在位置的数据)。因为所有关于不需要的面孔的信息仍然在文件中(刚才排序步骤删除的那些),这很可能在将来给我们带来麻烦。所以需要删除不需要图片的对齐文件。 使用集成工具清理对齐文件还有一个额外的好处,可以将我们的面孔重命名回它们的原始文件名。
步骤如下,找到Tools->Alignments文件:
根据上图设置后,点击alignments,完成后面孔将被重新命名为默认名称,并且所有不需要的面孔就会从对齐文件中删除。
该过程将备份旧对齐文件并将其放在新创建的文件旁边的原始位置。它将与您清理过的对齐文件同名,但在其末尾附加“backup_<timestamp>”。如果对新的对齐文件正确无误感到满意,则可以安全地删除此备份文件。
此时,如果正在提取以进行转换(或者该集合将用于转换和训练),那么可以完全删除faces 文件夹。不再需要这些面孔。如果您需要重新生成面部集,则可以使用对齐工具的extract来完成。
执行完对齐文件的清理后,留下来的对齐文件就是想要训练的有效数据集(脸)对应的对齐文件了。
手动清理对齐文件就不介绍了,详情参照:https://forum.faceswap.dev/viewtopic.php?f=5&t=27
步骤3:从对齐文件中提取训练集
现在已经清理了对齐文件,需要拉出其中的一些脸用于作为训练集。
导航到工具选项卡,然后导航到对齐子选项卡:
-
Processing
此部分允许我们选择我们希望执行的操作,以及设置任何输出处理。我们只对Job部分感兴趣。-
Job:这是工具中可用的所有不同对齐工作的列表。
- 选择extract。
- Output:忽略此部分,因为extract不会生成任何输出
-
Job:这是工具中可用的所有不同对齐工作的列表。
-
Data
我们要处理的资源所在的位置。-
Alignments File:选择上一步清理后生成的alignments文件。
- Faces Folder:选择一个空文件夹,将输出的面孔放在其中。
- Frames Folder:选择提取过程输入的视频或帧文件夹
- 将此部分中的任何其他选项留空,因为此步骤不需要它们。
-
Alignments File:选择上一步清理后生成的alignments文件。
-
Extract
这些是从路线文件中提取人脸的选项- Extract Every N: 这将取决于您输入的每秒帧数。然而,对于 25fps 的视频,合理的值在大约 12 - 25 之间(即每半秒到一秒)。任何不足,你最终可能会得到太多相似的面孔。值得牢记的是,您为训练集从中提取了多少来源,您希望在最终训练集中拥有多少张面孔,以及您的来源有多长。这些都将根据具体情况而有所不同。
- Size:这是包含提取的人脸的图像的大小。目前没有模型支持 256px 以上,所以保持默认
- Large:启用此选项将仅提取尚未放大到输出大小的面孔。例如,如果提取大小设置为512px,而在帧中找到的人脸为480px,则不会提取。如果它是 520px,它会。
-
运行
将所有其他选项保留为默认值。准备好检查选项,并将训练集从清理过的对齐文件中提取到我们选择的文件夹中。-
最终设置如下图
- 点击Alignments按钮以提取面孔。
-
最终设置如下图
完成后,将所有人脸数据集放入同一个文件夹中。训练集已准备就绪。后续第三章将介绍训练部分。