菜单

训练流程

相关源文件

目的与范围

本文档描述了Faceswap的训练管线,它协调了从加载图像到构建模型和执行训练循环的整个训练过程。它涵盖了训练脚本如何初始化各种组件,训练数据如何流经系统,以及模型如何被构建、训练和保存。

有关训练前提取人脸的信息,请参阅 Extract Pipeline。如果您想了解使用训练好的模型进行换脸的详细信息,请参阅 Convert Pipeline

流水线概览

训练管线负责加载图像、创建或加载模型、执行训练循环以及定期保存模型状态。它还负责生成预览图像以可视化模型的当前状态,并提供监控和反馈机制。

来源: scripts/train.py191-205 plugins/train/trainer/_base.py206-267

初始化过程

当训练脚本执行时,它会执行以下初始化步骤:

  1. 验证并加载源文件夹(A和B)中的输入图像
  2. 如果请求,设置可选的延时生成
  3. 初始化预览界面以显示训练进度
  4. 在后台线程中开始训练,以保持UI的响应性
  5. 监控训练过程中的键盘输入和错误

来源: scripts/train.py191-248 plugins/train/model/_base/model.py67-110 plugins/train/trainer/_base.py75-110

模型加载与构建

模型是训练管线的核心组件。如果继续训练,可以从磁盘加载模型;如果开始一个新模型,则可以从头开始构建。

模型加载过程

来源: plugins/train/model/_base/model.py175-193 plugins/train/model/_base/io.py127-146 plugins/train/model/_base/settings.py295-360

模型架构

Faceswap 中的模型遵循插件架构,并有一个通用的基类 ModelBase。每个模型插件(例如 Phaze-A、DFL-SAE 等)都实现了自己的架构,同时遵守 ModelBase 定义的接口。

来源: plugins/train/model/_base/model.py39-110 plugins/train/model/phaze_a.py150-200 plugins/train/model/dfl_sae.py22-37

训练循环

训练循环是管线的核心。它迭代地处理图像批次并更新模型权重,以改进换脸效果。

训练循环过程

来源: scripts/train.py311-368 plugins/train/trainer/_base.py206-267

训练器组件

TrainerBase 类负责实际的训练操作,包括:

  1. 通过 Feeder 管理训练数据
  2. 在模型上执行训练步骤
  3. 处理和报告损失值
  4. 生成预览图像
  5. 记录到 TensorBoard

TrainerBase 架构

来源: plugins/train/trainer/_base.py55-110 plugins/train/trainer/_base.py387-463 plugins/train/trainer/_base.py790-881

训练步骤过程

每个训练步骤包括以下操作:

  1. 从 Feeder 获取图像批次
  2. 在模型上进行训练
  3. 将损失值记录到 TensorBoard
  4. 处理和显示损失值
  5. 在需要时更新预览图像
  6. 如果是一个保存迭代,则保存模型

来源: plugins/train/trainer/_base.py206-267 plugins/train/trainer/_base.py294-374

模型配置

所有模型都使用一个为训练过程定义各种参数的配置系统。该配置包括:

  1. 模型特定参数(架构、层维度等)
  2. 损失函数设置
  3. 优化器设置(学习率、epsilon 等)
  4. 通用设置(批次大小、混合精度等)

配置系统

来源: plugins/train/_config.py102-157 plugins/train/_config.py408-435 plugins/train/model/phaze_a_defaults.py60-162

损失计算与优化

训练管线的关键部分在于损失是如何计算的以及如何用于更新模型权重。

损失处理流程

来源: plugins/train/trainer/_base.py294-348 plugins/train/_config.py408-495

预览生成

训练管道包括生成预览图像的功能,以显示模型的当前状态。这有助于用户直观地了解训练的进度。

预览生成流程

来源: plugins/train/trainer/_base.py433-454 plugins/train/trainer/_base.py529-542

模型保存与备份

训练管道会定期保存模型状态,并可以创建备份以防止数据丢失。

来源: plugins/train/model/_base/io.py177-256 plugins/train/model/_base/io.py332-420

用户交互

FaceSwap训练管道为用户提供了多种与训练过程交互的方式

  1. 通过键盘输入保存或停止训练
  2. 预览窗口可视化当前结果
  3. TensorBoard集成,用于详细指标显示
  4. 控制台输出显示损失值

来源: scripts/train.py384-407 scripts/train.py433-475

结论

FaceSwap训练管道是一个复杂的系统,用于编排深度学习模型训练以进行换脸。它负责加载训练数据、构建和管理神经网络模型、执行训练循环以及可视化结果。该管道被设计为灵活的,允许使用不同的模型架构和训练配置,同时为用户提供一致的接口。

模块化设计使用户无需重新实现整个训练过程即可创建新的模型插件,从而更容易尝试不同的换脸方法。