LatentSync:基于音频条件潜扩散模型的端到端唇同步方法项目

Taming Stable Diffusion for Lip Sync!

分支1Tags0
文件最后提交记录最后更新时间
1 年前
1 年前
1 年前
1 年前
1 年前
1 年前
1 年前
1 年前
1 年前
1 年前
1 年前
1 年前
1 年前
1 年前
1 年前
1 年前
1 年前
1 年前
1 年前
1 年前

LatentSync

arXiv arXiv arXiv Replicate

🔥 更新

  • 2025/06/11:我们发布了LatentSync 1.6,该版本在512 ×\times 512分辨率的视频上进行了训练,以减轻模糊问题。观看演示这里

  • 2025/03/14:我们发布了LatentSync 1.5,该版本**(1)通过添加时间层提高了时间一致性,(2)提高了对中国视频的性能,并(3)通过一系列优化将第二阶段训练的VRAM需求降低到20 GB**。了解更多细节这里

📖 简介

我们提出了LatentSync,一种基于音频条件的潜在扩散模型的端到端唇同步方法,无需任何中间运动表示,与之前基于像素空间扩散或两阶段生成的扩散唇同步方法有所不同。我们的框架可以利用Stable Diffusion强大的功能直接建模复杂的音频视觉相关性。

🏗️ 框架

LatentSync使用Whisper将梅尔频谱图转换为音频嵌入,然后通过交叉注意力层将这些嵌入整合到U-Net中。将参考帧和遮罩帧与带噪声的潜在变量在通道维度上进行拼接,作为U-Net的输入。在训练过程中,我们使用单步方法从预测的噪声中获得估计的干净潜在变量,然后将其解码以获得估计的干净帧。在像素空间中添加了TREPA、LPIPSSyncNet损失。

🎬 演示

原视频 唇同步视频

(真实视频由签约模特拍摄,动画视频来自VASA-1)

📑 开源计划

🔧 设置环境

通过以下命令安装所需的软件包并下载检查点:

source setup_env.sh

如果下载成功,检查点应显示如下:

./checkpoints/
|-- latentsync_unet.pt
|-- whisper
|   `-- tiny.pt

或者您可以直接从我们的HuggingFace 仓库手动下载 latentsync_unet.pttiny.pt 文件。

🚀 推理

进行推理所需的最低显存:

  • 使用 LatentSync 1.5 版本时需 8 GB
  • 使用 LatentSync 1.6 版本时需 18 GB

有两种方法可以进行推理:

1. Gradio 应用

运行 Gradio 应用以进行推理:

python gradio_app.py

2. 命令行界面

运行脚本进行推理:

./inference.sh

您可以通过调整以下推断参数来获得更好的效果:

  • inference_steps [20-50]:较高的值能提升视觉效果,但会减慢生成速度。
  • guidance_scale [1.0-3.0]:较高的值能提高唇同步准确性,但可能导致视频变形或抖动。

🔄 数据处理流程

完整的数据处理流程包括以下步骤:

  1. 移除损坏的视频文件。
  2. 将视频帧率重采样至 25,并将音频重采样至 16000 Hz。
  3. 使用 PySceneDetect 进行场景检测。
  4. 将每个视频切割成 5-10 秒的片段。
  5. 根据 InsightFace 检测到的标记对脸部进行仿射变换,然后调整大小至 256 ×\times 256。
  6. 移除 同步置信度评分 低于 3 的视频,并将音视频偏移调整为 0。
  7. 计算 hyperIQA 分数,并移除分数低于 40 的视频。

运行脚本以执行数据处理流程:

./data_processing_pipeline.sh

您需要在脚本中更改参数 input_dir 以指定要处理的数据目录。处理后的视频将被保存在 high_visual_quality 目录中。每一步都会生成一个新的目录,以防止在处理过程中出现意外错误时需要重新运行整个管道。

🏋️‍♂️ 训练 U-Net

在开始训练之前,您应按照上述说明处理数据。我们已经发布了一个在 VoxCeleb2 和 HDTF 数据集上准确率达到 94% 的预训练 SyncNet,用于 U-Net 训练的监督。您可以通过执行以下命令来下载这个 SyncNet 检查点:

huggingface-cli download ByteDance/LatentSync-1.6 stable_syncnet.pt --local-dir checkpoints

如果所有的准备工作已经就绪,您可以使用以下脚本来训练 U-Net:

./train_unet.sh

我们在 configs/unet 目录下准备了多个 UNet 配置文件,每个文件对应一种特定的训练设置:

  • stage1.yaml:第一阶段训练,需要 23 GB 显存。
  • stage2.yaml:第二阶段训练,性能最优,需要 30 GB 显存。
  • stage2_efficient.yaml:高效的第二阶段训练,需要 20 GB 显存。与 stage2.yaml 相比,可能会导致视觉质量和时间一致性略有下降,适合配备有消费级 GPU 的用户,例如 RTX 3090。
  • stage1_512.yaml:在 512 ×\times 512 分辨率的视频上进行第一阶段训练,需要 30 GB 显存。
  • stage2_512.yaml:在 512 ×\times 512 分辨率的视频上进行第二阶段训练,需要 55 GB 显存。

同时请记得在 U-Net 配置文件中更改参数,以指定数据目录、检查点保存路径以及其他训练超参数。为了方便起见,我们准备了一个用于编写数据文件列表的脚本。运行以下命令:

python -m tools.write_fileslist

🏋️‍♂️ 训练 SyncNet

如果您希望在自己的数据集上训练 SyncNet,可以执行以下脚本。SyncNet 的数据处理流程与 U-Net 相同。

./train_syncnet.sh

经过 validations_steps 次训练后,损失图表将保存于 train_output_dir 目录中。这些图表包含了训练和验证的损失数据。若您希望针对不同的图像分辨率和输入帧长度自定义 SyncNet 的架构,请遵循指南

📊 评估

您可以通过运行以下脚本来评估生成视频的同步置信度分数

./eval/eval_sync_conf.sh

您可以通过运行以下脚本来评估 SyncNet 在数据集上的准确性:

./eval/eval_syncnet_acc.sh

请注意,我们发布的 SyncNet 是通过我们的数据处理流程训练得到的,该流程包括仿射变换和音视频调整等特殊操作。因此,在评估之前,测试数据必须首先使用提供的流程进行处理。

🙏 致谢

感谢他们为开源社区做出的慷慨贡献!

📖 引用

如果您发现我们的仓库对您的研究有所帮助,请考虑引用我们的论文:

@article{li2024latentsync,
  title={LatentSync: Taming Audio-Conditioned Latent Diffusion Models for Lip Sync with SyncNet Supervision},
  author={Li, Chunyu and Zhang, Chao and Xu, Weikai and Lin, Jingyu and Xie, Jinghui and Feng, Weiguo and Peng, Bingyue and Chen, Cunjian and Xing, Weiwei},
  journal={arXiv preprint arXiv:2412.09262},
  year={2024}
}

当然,请提供您需要翻译的文本内容,我会按照您的要求进行翻译。

项目介绍

驯服稳定扩散以实现唇形同步!【此简介由AI生成】

定制我的领域
786.06 K976访问 GitHub