deepfakes/faceswap:[第二步]用faceswap训练模型
本文官方文档的翻译,亲测有用,简单!
采用的数据集(特朗普和尼古拉斯凯奇)来自百度网盘,链接: https://pan.baidu.com/s/13_ENZBZUKyWJmfvqt76aew 提取码: edbf
在尝试上述任何操作之前,请确保您已阅读、理解并完成安装说明。如果您遇到问题,请在faceswap论坛或faceswap Discord服务器上提出,而不是这个repo。
训练Faceswap
之前,我们需要了解一下Extraction的工作流程,人脸数据的提取,人脸数据的优化,对齐文件的优化等:
如果你想详细的了解训练过程的各个参数信息点击这里:
转换Faceswap,如果你想了解详细的转换指南过程,点击这里:
1. 简介
项目有多个入口点,你必须:
- Data:收集照片或视频
- Extract:从你的原始照片中提取人脸
- Train:训练从照片/视频中提取的人脸模型
- Convert:使用模型转换源代码
1.1 免责声明
本指南提供了人脸交换过程的高级概述。它并不是针对每一个可用的选项,而是为使用该软件提供一个有用的入口点,还有很多本指南没有涵盖的选项。可以通过将-h
标志传递到命令行(例如:python facesswap.py extract -h
)或将鼠标悬停在GUI
中的选项上来找到并解释这些参数。
1.2 入门指南
你想在照片和视频里换脸吗?等等,因为首先你要理解这个应用程序将做什么,它如何做,以及它目前不能做什么。
这个脚本的基本操作很简单。它训练一个机器学习模型来识别和转换基于图片的两张脸。机器学习模型是我们的小“机器人”,我们正在教它进行实际的交换,而图片是我们用来训练它的“训练数据”。请注意,机器人主要处理人脸,其他对象可能不起作用。
这是我们的计划:我们想创造一个现实: 唐纳德·特朗普(Donald Trump)在总统选举中输给了尼古拉斯·凯奇(Nic Cage)。我们有他的就职视频, 让凯奇取代特朗普。
2. 提取(Extracting)
详细的提取教程点击这里:
2.1 收集原始数据
为了做到这一点,机器人需要学习识别人脸A(特朗普)和人脸B(尼克·凯奇)。默认情况下,机器人不知道特朗普或尼古拉斯·凯奇长什么样。所以我们需要给它看很多图片,让它猜猜哪个是哪个,所以我们首先需要这两张脸的照片。
一个可能的来源是Google,DuckDuckGo或Bing图片搜索,有可以下载大量图像的脚本。更好的图片来源是视频(采访、公开演讲或电影),因为这些会捕捉到更多自然的姿势和表情。幸运的是,FaceSwap可以从静止图像和视频文件中提取人脸,更多信息请参见Extracting video frames。
您可以在facesswap论坛中列出您的图像集,或者向此文件添加更多方法。
现在我们有了一个文件夹,里面都是小特的照片和视频,还有一个单独的文件夹是尼古拉斯·凯奇。我们把它们保存在FaceSwap项目所在的目录中。例如~/faceswap/src/trump
和~/faceswap/src/cage
.
2.2 提取faces
这里有个问题,我们有大量的照片和视频都是关于我们的实验对象的,但这些只是他们在和其他人一起做事情的照片和视频。他们的身体在上面,他们和其他人在一起……这是一个烂摊子。只有当我们拥有的数据是一致的并且专注于我们想要交换的主题时,我们才能训练我们的机器人,这就是FaceSwap首先发挥作用的地方。
命令行:
# To extract trump from photos in a folder:
python faceswap.py extract -i ~/faceswap/src/trump -o ~/faceswap/faces/trump
# To extract trump from a video file:
python faceswap.py extract -i ~/faceswap/src/trump.mp4 -o ~/faceswap/faces/trump
# To extract cage from photos in a folder:
python faceswap.py extract -i ~/faceswap/src/cage -o ~/faceswap/faces/cage
# To extract cage from a video file:
python faceswap.py extract -i ~/faceswap/src/cage.mp4 -o ~/faceswap/faces/cage
GUI:
从文件夹的照片中提取trump:
从视频文件中提取cage:
对于输入,我们指定照片目录或视频文件,对于输出,我们指定保存提取的人脸的文件夹。然后脚本将尽力识别人脸地标,将图像裁剪到一致的大小,并将人脸保存到输出文件夹。alignments.json
文件也将被创建并保存到您的输入文件夹,该文件包含有关FaceSwap将使用的每个人脸的信息。
注意: 这个脚本将使获取测试数据变得容易得多,但它并不完美。它将(错误地)检测出一些照片中的多张脸,并且不能识别出这张脸是否是我们想要交换的人。因此,在你开始训练之前一定要检查你的训练数据,训练数据将影响你的模型在交换方面的能力。
2.3 常规的方法
在提取用于训练的人脸时,您希望为每个训练的主题收集大约500到5000张人脸。这些都应该是高质量的,并包含各种各样的角度,表情和照明条件。
你不希望从视频中提取每一帧进行训练,因为从一帧到另一帧的人脸将非常相似。
通过将鼠标悬停在GUI中的选项上或传递帮助标志,您可以看到要提取的完整参数列表。即:
python faceswap.py extract -h
一些插件有可配置的选项。你可以在<faceswap_folder>\config\extract.ini
中找到配置选项。您至少需要运行Extract
或GUI
一次,才能生成此文件。
3. 训练模型
好了,现在你的文件夹里都是特朗普的脸还有凯奇的脸。现在该做什么?是时候训练我们的机器人了!这创造了一个“模型”,包含了什么是凯奇,什么是特朗普,以及如何在两者之间交换的信息。
训练过程将花费最长的时间,多长时间取决于许多因素,使用的模型,图像的数量,你的GPU等等。然而,一个大致的数字是在GPU上12-48小时,如果在CPU上训练则是一周。
我们指定两个人脸(faces)所在的文件夹,以及我们将在哪里保存我们的训练模型。
命令行:
python faceswap.py train -A ~/faceswap/faces/trump -B ~/faceswap/faces/cage -m ~/faceswap/trump_cage_model/
# or -p to show a preview
python faceswap.py train -A ~/faceswap/faces/trump -B ~/faceswap/faces/cage -m ~/faceswap/trump_cage_model/ -p
GUI:
一旦您运行该命令,它将开始输入训练数据。如果你有一个预览,然后你会看到一个负载的斑点出现。这些是它正在学习的人脸,看起来不太像,但你的模型还没学到什么。随着时间的推移,这些将越来越像trump和cage。
你想让你的模型学习,直到在预览视图中得到你满意的图像,要停止训练,你可以:
- 命令行:在预览窗口或控制台中按“Enter”
- GUI:按终止键(Stop)
当停止训练时,模型将保存,流程将退出,这可能需要一点时间,所以要有耐心。该模型还将每250次迭代左右进行一次保存(可以手动设置,Save Interval
)。
你可以在任何时候停止和恢复训练,只要把FaceSwap
指向相同的文件夹,需要删除里面的.bk
文件,然后继续即可。
3.1 常规的方法
如果你使用mask
训练或使用Warp to Landmarks
,你将需要每个faces数据集的alignments.json
文件。有关更多信息,请参阅Extract - General Tips。
在每次保存迭代中,当总体损失减少时(即模型得到了改进),模型会自动备份。如果您的模型由于某种原因损坏了,您可以进入model
文件夹并从备份中删除.bk
扩展名来从备份中恢复模型。
您可以将鼠标悬停在GUI中的选项上,或传递帮助标志,从而看到用于训练的完整参数列表。即:
python faceswap.py train -h
一些插件有可配置的选项,你可以在<faceswap_folder>\config\train.ini
中找到配置选项。您将需要至少运行一次Train
或GUI
才能生成此文件。
4. 转换视频(Converting)
现在我们对我们的训练模型很满意,我们可以转换我们的视频。它是如何工作的?
首先,我们需要生成一个alignments.json
文件用于交换。要做到这一点,请遵循Extracting Faces的步骤,只是这一次您想要对源视频中的每个人脸运行提取,这个文件告诉转换进程人脸在源帧上的位置。
你可能想要清理你的对齐文件,删除假阳性,对齐不好的faces等。这些将不会在你的最终转换好看。有一些工具可以帮助你做到这一点。
就像提取,你可以从一系列图像或视频文件转换。
还记得Trump最初的照片吗?让我们试着换一张脸。我们将使用该目录作为输入目录,创建一个新的文件夹,其中将保存输出,并告诉他们使用哪个模型:
命令行:
python faceswap.py convert -i ~/faceswap/src/trump/ -o ~/faceswap/converted/ -m ~/faceswap/trump_cage_model/
GUI:
它现在应该开始交换这些照片的脸了。
4.1 常规的方法
通过将鼠标悬停在GUI中的选项上或传递帮助标志,您可以看到用于convert的完整参数列表。即:
python faceswap.py convert -h
一些插件有可配置的选项。你可以在<faceswap_folder>\config\convert.ini
中找到配置选项。您至少需要运行Convert或GUI一次,才能生成此文件。
5. GUI
上面所有的命令和选项都可以从GUI运行。这是通过以下方式启动的:
python faceswap.py gui
GUI允许在脚本中使用更友好的用户界面,并具有一些扩展功能。将鼠标悬停在GUI中的选项上会告诉你更多关于选项的功能。
6. Video's
视频就是以帧的形式呈现的一系列图片。因此,你可以为你的数据集收集原始图像或将结果合并成视频。
7. EFFMPEG
您可以使用内置的effmpeg工具执行各种视频处理。通过运行可以看到可用参数的完整列表:
python tools.py effmpeg -h
8. 使用FFMPEG提取视频帧
或者,你可以使用ffmpeg将视频分割成单独的帧。下面是一个处理视频到分离帧的示例命令。
ffmpeg -i /path/to/my/video.mp4 /path/to/output/video-frame-%d.png
9. 生成一个视频
如果你分割一个视频,例如使用ffmpeg,并将它们作为交换人脸的目标,你可以再次组合这些帧。下面的命令将png帧重新拼接成一个视频。
ffmpeg -i video-frame-%0d.png -c:v libx264 -vf "fps=25,format=yuv420p" out.mp4
10. 注意事项
这份指南还远远不够完整。随着时间的推移,功能可能会改变,并且随着时间的推移,新的依赖项会被添加和删除。
如果你遇到问题,请在faceswap Forum 或者FaceSwap Discord server 提出,而不是这个repo
。在本repo
协议中提出的使用问题将不予答复。