deepfakes/faceswap:[第二步]用faceswap训练模型

deepfakes/faceswap:[第二步]用faceswap训练模型

本文官方文档的翻译,亲测有用,简单!
采用的数据集(特朗普和尼古拉斯凯奇)来自百度网盘,链接: pan.baidu.com/s/13_ENZB 提取码: edbf

在尝试上述任何操作之前,请确保您已阅读、理解并完成安装说明。如果您遇到问题,请在faceswap论坛faceswap Discord服务器上提出,而不是这个repo。

训练Faceswap之前,我们需要了解一下Extraction的工作流程,人脸数据的提取,人脸数据的优化,对齐文件的优化等:

如果你想详细的了解训练过程的各个参数信息点击这里

转换Faceswap,如果你想了解详细的转换指南过程,点击这里

1. 简介

项目有多个入口点,你必须:

  1. Data:收集照片或视频
  2. Extract:从你的原始照片中提取人脸
  3. Train:训练从照片/视频中提取的人脸模型
  4. 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中找到配置选项。您至少需要运行ExtractGUI一次,才能生成此文件。

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:

最新版的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中找到配置选项。您将需要至少运行一次TrainGUI才能生成此文件。

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协议中提出的使用问题将不予答复。

编辑于 2021-06-04 18:32