最近在研究faceswap相关的内容,通过百度搜索了各种教程之后,发现相关的文章不少,但是内容基本一致,差不多的复制粘贴。按照帖子中的操作步骤进行之后发现效果不忍直视,具体的替换之后的图就不贴了。直到从官网看到相关的文章之后才发现那些简明操作步骤基本都是错误的。
原始文章链接:https://forum.faceswap.dev/viewtopic.php?f=5&t=27 包括一些名词解释也可以参考这个链接。本文只是简单记录下相关的步骤。其余的一些内容可以参考原文链接。
1. 提取人脸数据
关键信息:
Input Dir: 原始视频或者图片目录,我要修改的是视频所以直接选择视频文件即可。
Output Dir: 提取之后的人脸图片存放路径。 Alignments:人脸标记数据文件路径,如果不选择路径,文件会默认存放到视频文件所在的目录下
Alignments 文件记录的是对应的68点的人脸数据,点位分布如下:
Extract Every N: 提取频次,因为是要提取视频资源,所以每帧都要提取数据。如果只是提取资源而不生成新视频可以选择每N帧提取一张,以避免大量相似的人脸数据。
Size:提取图片大小,保留默认,足以应付大多数的情形
2.清洗数据
提取之后的人脸数据虽然看起来已经是按照顺序排列,但是如果一帧之内有多个人脸数据,就会显示的比较杂乱。那么此时要清理数据,国内的文章基本啥都没提,不知道是不是人肉清理的。
faceswap提供了数据分类工具,切换到Tools->Sort工具下,选择要分类的目录,也就是上面提取人脸的输出目录。Sort Settings选的Face,然后点击运行即可自动排序处理。
Output目录置空可以让排序之后的数据存放在源目录下。
排序之后可以将不需要的人脸数据删除了,我将其他的人脸数据付知道了girl目录下。
排序之后的数据会直接用数字id进行命名,如果上图所示。
3.修正Aligenments文件
看的国内的所有的文章都没提到这个内容,是因为太简单了还是咋滴?不值当的提?
Alignments File: 选择生成的文件,默认在输入视频的同目录下。
Faces Floder:选择清理之后的人脸目录
点击运行即可自动修正algnments文件。
4.训练
Input A:选择要被替换到的人脸数据目录
Input B:用来替换上述人脸的图片目录
Model Dir: 模型存放路径
Trainer:选择要使用的模型
设置好这三个属性,其余的保持默认,点击训练即可。
5.转换视频
经过两轮一共114个小时的训练,尝试转换了一下视频。
Input dir选择原始视频;
Output dir 选择输出目录;
Alignments 文件选择视频要替换的人脸文件;
Model dir选择训练好的模型路径;
Writer选择 ffmpeg,目的是输出视频。
点击convert进行转换,转换之后在输出目录下就看到视频文件了。
转换之后的效果(这是效果比较好的截图,其余的侧脸效果不忍直视,上图为原视频,下图为换脸视频):
测试文件信息:
视频文件大小16.5m,时长1分钟,处理后的图片文件数量1259:
用来替换的图片数量430:
模型建议的文件数量500-2000。目前经过了114个小时,只完成了17万次迭代,效率太低了(电脑配置太差~~)现在看来那些在9uu上传换脸视频的是真厉害,电脑配置得多牛逼~~