菜单

概述

相关源文件

本文档介绍了FaceSwap存储库,解释了它的目的、架构和核心组件。FaceSwap是一个开源工具,利用深度学习识别和交换图片和视频中的面孔。

目的和主要组件

FaceSwap提供了一个完整的换脸流程,围绕三个主要过程进行组织:

  1. Extract:检测源媒体中的面孔,对其进行对齐,并将它们保存为单独的图像。
  2. Train:使用提取的面孔来训练一个模型,该模型可以将一个身份的面孔转换为另一个身份的面孔。
  3. Convert:应用训练好的模型来交换目标媒体中的面孔。

该系统采用模块化的插件架构,允许用户为面部检测、对齐、遮罩和模型架构选择不同的实现。FaceSwap支持多个后端(CPU、NVIDIA/CUDA、DirectML、ROCM、Apple Silicon),并提供命令行和图形用户界面。

高层系统架构

来源:faceswap.py34-54 README.md84-102

Extract-Train-Convert 流程

换脸过程遵循一个顺序的三阶段流程:

提取流程

提取过程(scripts/extract.py)负责:

  1. 检测源媒体(图像或视频)中的面孔
  2. 将面孔对齐到标准位置
  3. 为检测到的面孔创建遮罩
  4. 将面孔保存为单独的图像
  5. 将元数据存储在对齐文件中(.fsa)

此过程使用用于面部检测(例如MTCNN、S3FD)、对齐(例如FAN)和遮罩(例如Components、Extended)的插件。

训练流程

训练过程获取提取的面孔,并训练一个神经网络模型,将一个身份的面孔转换为另一个身份的面孔。该模型学会编码面部特征,转换它们,然后将它们解码回逼真的面孔。

转换流程

转换过程(scripts/convert.py)将训练好的模型应用于目标媒体中的面孔交换。

  1. 使用对齐文件在源媒体中定位面孔
  2. 使用训练好的模型转换这些面孔
  3. 将转换后的面孔融合回原始帧
  4. 将结果写入输出目标

Extract-Train-Convert 数据流

来源:scripts/extract.py30-60 scripts/convert.py65-100 USAGE.md36-57

插件系统

FaceSwap使用插件系统提供模块化和可扩展性。流程的每个阶段都可以使用关键组件的不同实现,由用户选择。

插件类别

  • 提取插件:

    • 检测器:用于检测面孔的算法(MTCNN、S3FD、CV2-DNN)
    • 对齐器:用于对齐检测到的面孔的方法(FAN、CV2-DNN)
    • 遮罩器:用于创建面部遮罩的方法(Components、Extended)
  • 训练插件:

    • 模型架构:神经网络设计(Original、DFL-SAE、Phaze-A)
    • 训练器:不同的训练策略和配置
  • 转换插件:

    • 颜色调整:匹配面孔之间的颜色
    • 遮罩细化:改进面部融合
    • 写入器:输出格式和方法(FFMPEG、OpenCV、Pillow)

插件系统架构

来源:scripts/extract.py61-120 scripts/convert.py283-360 USAGE.md49-57

配置和设置系统

FaceSwap支持多种后端来运行深度学习操作,使其能够在不同的硬件配置上工作。

后端配置

系统在设置过程中检测并配置适当的后端。

后端配置存储在 .faceswap 配置文件中,可以通过以下三种方式确定:

  1. FACESWAP_BACKEND 环境变量
  2. .faceswap 配置文件
  3. 通过首次设置期间的用户输入

来源:setup.py66-144 lib/utils.py35-123

核心组件

对齐

The Alignments 类(scripts/fsmedia.py59-163)处理面部对齐数据的存储和检索,包括:

  • 源媒体中的面孔位置
  • 面部特征点
  • 遮罩信息
  • 转换元数据

对齐信息存储在 .fsa 文件中,并由 extract 和 convert 过程使用。

图像处理

The Images 类(scripts/fsmedia.py166-346)管理图像和视频帧的加载。

  • 检测输入是视频还是图像文件夹
  • 从视频或单个图像加载帧
  • 为两种输入类型提供一致的接口

转换过程类

转换过程包括几个关键类:

提取过程类

提取过程包括:

用户界面

FaceSwap提供两种用户交互界面:

  1. 命令行界面 (CLI):

    • 通过 faceswap.py 入口点
    • 用于提取、训练和转换操作的子命令
    • 所有操作的灵活选项
  2. 图形用户界面(GUI):

    • 通过 python faceswap.py gui 启动
    • 可视化工具和预览
    • 与CLI功能相同,界面更友好

CLI示例

来源:faceswap.py34-54 USAGE.md49-57

总结

FaceSwap通过其三个主要过程:提取(extract)、训练(train)和转换(convert),为图像和视频中的换脸提供了全面的流程。模块化的插件架构允许用户通过选择不同的检测、对齐、遮罩和模型架构实现来定制工作流程。

该系统通过其后端系统支持各种硬件配置,并提供命令行和图形界面以适应不同的用户偏好。如后期处理选项和对不同模型架构的支持等高级功能,使FaceSwap成为一个强大而灵活的换脸工具。

来源:README.md27-183 USAGE.md24-35