Taming Stable Diffusion for Lip Sync!
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 1 年前 | ||
| 1 年前 | ||
| 1 年前 | ||
| 1 年前 | ||
| 1 年前 | ||
| 1 年前 | ||
| 1 年前 | ||
| 1 年前 | ||
| 1 年前 | ||
| 1 年前 | ||
| 1 年前 | ||
| 1 年前 | ||
| 1 年前 | ||
| 1 年前 | ||
| 1 年前 | ||
| 1 年前 | ||
| 1 年前 | ||
| 1 年前 | ||
| 1 年前 | ||
| 1 年前 |
LatentSync
🔥 更新
-
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、LPIPS和SyncNet损失。
🎬 演示
| 原视频 | 唇同步视频 |
(真实视频由签约模特拍摄,动画视频来自VASA-1)
📑 开源计划
🔧 设置环境
通过以下命令安装所需的软件包并下载检查点:
source setup_env.sh
如果下载成功,检查点应显示如下:
./checkpoints/
|-- latentsync_unet.pt
|-- whisper
| `-- tiny.pt
或者您可以直接从我们的HuggingFace 仓库手动下载 latentsync_unet.pt 和 tiny.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]:较高的值能提高唇同步准确性,但可能导致视频变形或抖动。
🔄 数据处理流程
完整的数据处理流程包括以下步骤:
- 移除损坏的视频文件。
- 将视频帧率重采样至 25,并将音频重采样至 16000 Hz。
- 使用 PySceneDetect 进行场景检测。
- 将每个视频切割成 5-10 秒的片段。
- 根据 InsightFace 检测到的标记对脸部进行仿射变换,然后调整大小至 256 ×\times 256。
- 移除 同步置信度评分 低于 3 的视频,并将音视频偏移调整为 0。
- 计算 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 是通过我们的数据处理流程训练得到的,该流程包括仿射变换和音视频调整等特殊操作。因此,在评估之前,测试数据必须首先使用提供的流程进行处理。
🙏 致谢
- 我们的代码是在 AnimateDiff 的基础上构建的。
- 部分代码借鉴了 MuseTalk、StyleSync、SyncNet 和 Wav2Lip。
感谢他们为开源社区做出的慷慨贡献!
📖 引用
如果您发现我们的仓库对您的研究有所帮助,请考虑引用我们的论文:
@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}
}
当然,请提供您需要翻译的文本内容,我会按照您的要求进行翻译。