今天在 GitHub Trending 上看到一个老牌但依然活跃的项目:FaceSwap,一个利用深度学习实现人脸识别与换脸的开源工具,由 deepfakes 团队维护,支持 NVIDIA GPU、AMD ROCm 以及 Apple Silicon 多平台。

一、项目概述

FaceSwap 诞生于 2017 年,最初将学术界的深度学习换脸技术整合为普通用户可用的工具。它的出现让"deepfake"一词进入大众视野,同时也引发了对 AI 伦理的广泛讨论。项目团队始终坚持严格伦理准则:明确禁止用于未经同意的换脸、不当内容创作或任何非法用途,致力于将技术应用于电影特效、AI 教育、社交娱乐等正当场景。

核心特性:

  • 三步完整流程:Extract(提取) → Train(训练) → Convert(转换)
  • 跨平台支持:Windows、Linux、macOS(含 Apple Silicon 原生支持)
  • 多 GPU 后端:NVIDIA CUDA、AMD ROCm、CPU 降级运行
  • 图形界面(GUI)与命令行两种交互方式
  • 丰富的预训练模型选择:Phaze-A、Villain、DFL-H128、DFaker 等
  • 开源透明,代码可审计,社区活跃(Discord + 官方论坛)

二、技术原理

架构设计

FaceSwap 的整体架构围绕三个核心脚本展开:

faceswap.py          # 主入口:extract / train / convert / gui
tools.py             # 辅助工具集(如 ffmpeg 视频处理)
setup.py             # 依赖安装与环境配置

从 faceswap.py 的主入口代码可以看到其命令行设计模式:

def _main() -> None:
    generate_configs()
    subparser = _PARSER.add_subparsers()
    ExtractArgs(subparser, "extract", _("Extract the faces from pictures or a video"))
    TrainArgs(subparser, "train", _("Train a model for the two faces A and B"))
    ConvertArgs(subparser, "convert", _("Convert source pictures or video..."))
    cli_args.GuiArgs(subparser, "gui", _("Launch the Faceswap Graphical User Interface"))
    arguments = _PARSER.parse_args()
    arguments.func(arguments)

核心技术栈与选型

FaceSwap 基于以下核心技术实现换脸:

组件技术选型作用
人脸检测MTCNN、FAN(Face Alignment Network)从图片/视频帧中精确定位人脸区域
人脸对齐多种 aligner 算法标准化人脸姿态,便于模型处理
模型框架PyTorch / Keras(TensorFlow backend)训练编码器-解码器换脸模型
预处理OpenCV (cv2)图像处理与视频编解码
GUITkinter跨平台图形界面

关键模型解析

项目支持多种换脸模型,以下是核心模型的设计思路:

Encoder-Decoder 架构: 换脸的本质是让模型学习从源人脸 A 到目标人脸 B 的映射。Encoder 将两张人脸编码到同一个隐空间(latent space),Decoder 则从隐向量重建人脸图像。训练时用 A 的编码 + B 的解码器,模型因此学会"把 A 的脸换成 B 的脸"。

模型切换机制: FaceSwap 通过 lib/model 目录下的模块化模型架构支持热插拔不同模型,不同模型在编码器深度、损失函数设计、训练策略上各有差异:

  • Villain 模型:更高细节保真度,适合高质量素材
  • DFL-H128 / DFaker:平衡速度与质量
  • OHR 模型(@andenixa 开发):专为极端角度人脸设计

数据流分析

[原始视频/图片]
    ↓ Extract(faceswap.py extract)
[人脸裁剪 + 对齐]
    ↓ Train(faceswap.py train)
[训练好的模型文件 .h5]
    ↓ Convert(faceswap.py convert)
[换脸后的视频/图片]

三、安装与快速开始

环境要求

  • 操作系统:Windows 10+、Linux(Ubuntu 20.04+)、macOS 11+(Apple Silicon 优先)
  • Python:3.9 ~ 3.12(注意:项目要求 Python ≥ 3.11 运行 tools.py)
  • GPU:NVIDIA GPU(CUDA 11/12/13)+ cuDNN,AMD GPU(ROCm 6.x),或 Mac M 系列芯片
  • 磁盘空间:10GB+(用于存储模型和素材)

安装步骤

方式一:自动安装(推荐)

git clone https://github.com/deepfakes/faceswap.git
cd faceswap
python3 setup.py
# 交互式选择后端:CUDA / ROCm / CPU / Apple Silicon

安装脚本会检测系统环境并引导选择合适的 GPU 后端,自动安装所有 Python 依赖。

方式二:手动 pip 安装

# NVIDIA 后端(推荐)
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
pip install -r requirements/requirements_nvidia.txt

# Apple Silicon
pip install torch torchvision
pip install -r requirements/requirements_apple_silicon.txt

最简运行示例

# 1. 提取人脸(A 和 B 各放一个文件夹)
python faceswap.py extract -i src/ -o extract/

# 2. 训练模型(用提取好的 A、B 人脸训练)
python faceswap.py train -A faces/A_folder -B faces/B_folder -m models/

# 3. 换脸转换
python faceswap.py convert -i original/ -o modified/ -m models/

使用 GUI 模式更直观:

python faceswap.py gui

四、使用方法与进阶实战

基础用法:制作一段换脸视频

第一步:准备素材

准备两个文件夹:

  • src_A/:源人物 A 的照片(越多越好,建议 200+ 张,多角度、多光照)
  • src_B/:目标人物 B 的照片(同上)

第二步:提取人脸

python faceswap.py extract \
  -i src_A/ -o extract_A/ \
  -A A \
  -D MTCNN \
  -l 0.5

其中 -D 指定检测器(MTCNN / FAN),-l 控制最小人脸尺寸。

第三步:训练模型

python faceswap.py train \
  -A extract_A/ -B extract_B/ \
  -m models/ \
  -bs 16 -it 1000000

参数说明:

  • -bs:batch size,根据显存调整(16GB 显存建议 16)
  • -it:最大迭代次数,建议 100 万次以上

第四步:转换输出

python faceswap.py convert \
  -i original_video/frames/ \
  -o output_frames/ \
  -m models/ \
  -fr 30

第五步:合成视频

# 用 ffmpeg 将帧合成为视频
ffmpeg -framerate 30 -i output_frames/frame_%04d.png -c:v libx264 -pix_fmt yuv420p result.mp4

进阶技巧

复用模型加速训练: 如果已有相似人物的模型,可以用它作为起点:

python faceswap.py train \
  -A extract_A/ -B extract_B/ \
  -m models/ \
  -m LOAD -mtp previous_model.h5  # 加载已有模型继续训练

多模型融合: FaceSwap 支持训练多个不同模型后取长补短,在转换阶段通过 -sh SHARPNESS_ADJUST 参数调整清晰度。

GUI 批处理: 使用 GUI 模式的 Batch Processing 功能可以一次性处理多个视频项目。

五、常见问题与解决方案

安装失败

问题:CUDA 版本不兼容,PyTorch 无法使用 GPU

# 检查 CUDA 版本
nvcc --version
# 检查 cuDNN
cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2

解决: FaceSwap 支持 CUDA 11/12/13,根据你的驱动版本选择对应的 PyTorch 安装命令:

pip install torch torchvision --index-url https://download.pytorch.org/whl/cu121  # CUDA 12.1

问题:macOS 上 tkinter 无法导入(GUI 启动失败)

解决:

# macOS Sonoma 14+ 使用 python3.11+
brew install [email protected]
# 或使用 conda
conda install tk

运行时错误

问题:训练过程 loss 不下降,模型无法收敛

常见原因:

  • 素材质量差(模糊、遮挡、角度极端)
  • A 和 B 两组人脸特征差异过大
  • 学习率过高/过低

解决:

  1. 清理素材,只保留清晰、正脸、两侧各一张的图像
  2. 降低 batch size(-bs 8)
  3. 使用更强大的预训练模型(如 Villain)

问题:提取人脸数量过少或漏检

解决:

python faceswap.py extract -i src/ -o extract/ -D FAN -l 0.3

降低 -l(最小人脸尺寸阈值)并尝试不同的 aligner(-Al)。

性能问题

问题:NVIDIA GPU 显存不足(OOM)

解决:

python faceswap.py train -bs 4 -ss 32 -ept 2
# -bs  降低 batch size
# -ss  降低 swap 尺寸
# -ept 减少 embedding 精度

问题:AMD GPU 训练速度极慢

ROCm 支持的 AMD GPU 在 FaceSwap 中性能不如 NVIDIA CUDA。建议使用 ROCm 6.1+ 版本并确保使用支持的 GPU 型号(如 RX 6900 XT 及以上)。

兼容性

问题:训练好的模型无法在不同版本的 FaceSwap 间迁移

FaceSwap 内部模型格式与版本紧密绑定。跨版本使用时建议:

  1. 保持 FaceSwap 版本一致
  2. 导出为通用格式(部分插件支持 ONNX 导出)

六、总结

FaceSwap 是目前最成熟、最活跃的开源换脸工具之一,其价值不仅在于换脸本身,更在于降低了深度学习人脸技术的门槛——让没有任何 AI 背景的普通用户也能亲自动手实验 GAN、Encoder-Decoder 等前沿技术。项目的代码高度模块化、文档完善、社区活跃,是学习 AI 图像处理的优秀实践案例。

项目团队对伦理边界的坚持也值得尊敬:明确声明"换脸不是用来侵犯隐私或制作不当内容的工具",并在技术设计上尽可能引导用户向正当用途靠拢。如果你对 AI 生成内容(AIGC)感兴趣,FaceSwap 是一个值得深入研究的开源项目。

⚠️ 伦理提醒:使用 FaceSwap 请务必遵守项目伦理准则,不进行未经同意的人脸替换,不制作误导性内容。

相关资源: