这里是Aideas,每日分享AI相关资讯。本文由Aideas Agent整理并推荐。项目地址:/bytedance/LatentSync, 程序语言:Python, 收藏: 3,099, 分支: 464, 今日收藏: 33 stars today。
介绍
LatentSync是一种基于音频条件的潜在扩散模型的端到端唇动同步方法,没有任何中间运动表示,偏离了之前基于像素空间扩散或两阶段生成的扩散唇动同步方法。我们的框架可以利用稳定扩散的强大能力,直接建模复杂的音频-视觉关联。
框架
LatentSync 使用 Whisper 将梅尔频谱图转换为音频嵌入,然后通过交叉注意力层将其集成到 U-Net 中。参考帧和掩蔽帧与噪声潜变量按通道级连接,作为 U-Net 的输入。在训练过程中,我们使用一步法从预测的噪声中获得估计的干净潜变量,然后解码以获得估计的干净帧。TREPA、LPIPS 和 SyncNet 损失被添加到像素空间中。
设置环境
安装所需的包并下载检查点:
source setup_env.sh
如果下载成功,检查点应如下所示:
./checkpoints/
|-- latentsync_unet.pt
|-- stable_syncnet.pt
|-- whisper
| `-- tiny.pt
|-- auxiliary
| |-- 2DFAN4-cd938726ad.zip
| |-- i3d_torchscript.pt
| |-- koniq_pretrained.pkl
| |-- s3fd-619a316812.pth
| |-- sfd_face.pth
| |-- syncnet_v2.model
| |-- vgg16-397923af.pth
| `-- vit_g_hybrid_pt_1200e_ssv2_ft.pth
这些已经包含了进行 LatentSync 训练和推理所需的所有检查点。如果只想尝试推理,只需从 HuggingFace 仓库下载 latentsync_unet.pt 和 tiny.pt。
推理
有两种方法可以进行推理,两者都需要 6.8 GB 的 VRAM。
1. Gradio 应用
运行 Gradio 应用进行推理:
python gradio_app.py
2. 命令行界面
运行脚本进行推理:
./inference.sh
您可以更改参数 inference_steps 和 guidance_scale 以查看更多结果。
数据处理管道
完整的数据处理管道包括以下步骤:
- 移除损坏的视频文件。
- 将视频 FPS 重采样到 25,并将音频重采样到 16000 Hz。
- 通过 PySceneDetect 进行场景检测。
- 将每个视频分割为 5-10 秒的片段。
- 根据 face-alignment 检测的关键点进行仿射变换,然后调整为 256 × 256。
- 移除同步置信度得分低于 3 的视频,并将音频-视觉偏移调整为 0。
- 计算 hyperIQA 得分,并移除得分低于 40 的视频。
运行脚本以执行数据处理管道:
./data_processing_pipeline.sh
您应该在脚本中更改参数 input_dir 以指定要处理的数据目录。处理后的视频将保存在 high_visual_quality 目录中。每个步骤将生成一个新目录,以防止在意外错误中断时需要重新执行整个管道。
训练 U-Net
在训练之前,必须按照上述描述处理数据并下载所有检查点。已发布了一个在 VoxCeleb2 和 HDTF 数据集上具有 94% 准确率的预训练 SyncNet,用于 U-Net 训练的监督。请注意,该 SyncNet 是在仿射变换视频上训练的,因此在使用或评估该 SyncNet 时,需要首先对视频进行仿射变换(仿射变换的代码包含在数据处理管道中)。
如果所有准备工作都完成,可以使用以下脚本训练 U-Net:
./train_unet.sh
我们在 configs/unet 目录中准备了三个 U-Net 配置文件,每个文件对应不同的训练设置:
- stage1.yaml: 阶段1训练,要求 23 GB VRAM。
- stage2.yaml: 阶段2训练,具有最佳性能,要求 30 GB VRAM。
- stage2_efficient.yaml: 高效的阶段2训练,要求 20 GB VRAM。与 stage2.yaml 相比,可能会导致视觉质量和时间一致性轻微下降,适合具有消费级 GPU 的用户,如 RTX 3090。
同时请记得在 U-Net 配置文件中更改参数,以指定数据目录、检查点保存路径和其他训练超参数。
训练 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