人工智能视频换脸初级教程
重要说明
原文写于 2018 年 2 月 20 日,受技术发展影响,内容现已较为陈旧。本文基于 FakeApp 编写;由于官网已无法访问,软件可能难以获取,教程也可能无法复现。如果仍能获取 FakeApp,可参考本文。文中使用的是 FakeApp 2.0,其他版本的操作可能有所不同。
免责声明
请确保您所使用的视频素材来源合法,并已获得必要授权。本站内容仅供学习和研究用途,因使用本站内容而产生的一切法律责任,均由使用者自行承担;本站不承担任何法律责任。
开源项目
环境配置
FakeApp(Windows 专用)
FakeApp 可以从官网下载,也可以使用磁力链接(官网已无法访问,磁力链接请自行尝试):magnet:?xt=urn:btih:598F5888522C860D48629EB8EC267496B4322E70。
GPU 加速(强烈建议)
Nvidia 卡建议使用 GTX 1060 或更高型号,显存 2 GB 以上。没有 Nvidia 卡也可以使用 CPU,但速度会很慢。如果使用 Nvidia 卡,建议使用 GPU 计算,需要先安装 NVIDIA CUDA。原文建议安装 CUDA 8.0 版本:下载地址。
VC 库安装(可选)
如果操作过程中报错,可以尝试安装 VC 库:下载地址。
原理简介
如何把 A 视频的脸,替换进 B 视频?主要分以下几步:
1. 收集 A、B 的人脸
因为输入的是视频,所以需要先将视频转换成一张张图片。比如,10 秒的视频可能会有上百张图片;然后从中找出带有人脸的图片,最终都截取成相同大小,例如 256 × 256 像素。
2. 训练模型(A → B)
有了 A、B 两组 256 × 256 的人脸图片后,通过一些特殊的技巧,可以找到两张脸之间的联系。图片数量越多,联系也就越紧密。找到关系后,将其保存为模型。这个模型的作用是:输入一张 A 的脸,模型会输出 B 的脸。
3. 完成换脸
找一个 A 的视频,将其转换成一张张图片,并找出带有人脸的图片。把这些图片输入第 2 步得到的模型,就能得到一张张替换成 B 脸的图片。最后将所有图片重新合并成视频,换脸完成。
FakeApp 使用
FakeApp 的使用分为三个步骤,分别对应上面的三步。
1. GetDataSet
- 只有一个参数:输入视频的路径。这里需要依次处理两个视频,一个 A 视频,一个 B 视频,例如
C:\video\a.mp4。 - 执行完毕后,会在
C:\video目录下生成dataset-a目录。dataset-a目录中是一张张图片,里面还有个extracted目录,保存提取出的人脸图片。当然,程序自动截取可能会有误差。 - 注意:浏览
extracted目录,只保留 256 × 256 的人脸图片,其他图片可以删除。全部完成后,会有dataset-a、dataset-b两个目录,里面分别有extracted目录。
提示
第一步主要是从视频里取得人脸样本集。程序可能会报 Failed to execute script align_faces 错误,这种情况下可以尝试安装 VC 库,或者从其他途径获得人脸样本集,只要保证两组人脸图片大小一致。
2. Train
有三个参数:
- (1) Model:可以在
C:\video下新建一个空目录model,然后输入C:\video\model,用来保存模型结果。 - (2) Data A:对应截取后的人脸目录,也就是
C:\video\dataset-a\extracted。 - (3) Data B:同上,换成 B 的人脸目录。输入完成后,点击 Train 开始训练。等待一段时间后,程序会显示
Loss A、Loss B。一般小于 0.02 即可认为效果还可以,可以自行停止程序。
3. Convert
有三个参数:
- (1) Model:同上,输入训练完成的模型目录,依然是
C:\video\model。 - (2) 输入要换脸的视频,可以拿 A 视频做测试:
C:\video\a.mp4。 - (3) FPS:30 或 24。没有特别要求的话,选 24 即可。
- (4) 运行完成后,就得到了换脸后的视频。
使用总结
- (1) 最好有一张性能较好的显卡。
- (2) 两个视频中人物的表情、角度尽量相似。
