项目简介
Wav2Lip 是一项先进的人工智能项目,旨在实现视频中的语音到唇部动作的自然同步。该项目主要解决了视频通信和多媒体应用中唇部运动与音频不同步的问题。它利用深度学习技术,通过分析音频信号来生成逼真的唇部动画,从而提高视频内容的真实感和沉浸感。该项目适用于多种场景,包括视频通话、电影制作中的口型同步,以及任何需要改善视听同步的应用。这一创新技术不仅提升了视觉效果的自然性,也为数字媒体领域带来了新的可能性。
先决条件
- Python 3.6
- ffmpeg:使用命令 sudo apt-get install ffmpeg 安装
- 使用 pip install -r requirements.txt 命令安装必要的包。或者,可以参考这里提供的使用 Docker 镜像的说明。如果遇到任何问题,请查看这条评论并在 Gist 上评论。
- 面部检测预训练模型应该下载到 face_detection/detection/sfd/s3fd.pth。如果上面的链接不起作用,可以使用备用链接。
获取权重
使用预训练模型进行视频唇形同步(推理)
您可以将任何视频与任何音频进行口型同步:
python inference.py --checkpoint_path <ckpt> --face <video.mp4> --audio <an-audio-source>
结果默认保存在results/result_voice.mp4. 您可以将其指定为参数,类似于其他几个可用选项。音频源可以是FFMPEG包含音频数据支持的任何文件:.wav,.mp3甚至是视频文件,代码将自动从中提取音频。
- 尝试使用 --pads 参数调整检测到的面部边界框。这经常能带来改进的结果。你可能需要增加下部填充以包括下巴区域。例如 --pads 0 20 0 0。
- 如果你看到嘴部位置错位或出现一些奇怪的问题,比如两个嘴巴,那可能是因为过度平滑了面部检测。使用 --nosmooth 参数再试一次。
- 尝试使用 --resize_factor 参数,以获得低分辨率视频。因为模型是在较低分辨率的脸部上训练的。你可能会发现,对于 720p 视频比 1080p 视频(在很多情况下,后者也工作得很好)获得更好、视觉上更令人愉悦的结果。
- 没有 GAN 的 Wav2Lip 模型通常需要更多地尝试以上两点,以获得最理想的结果,有时候,也可能给你更好的结果。
训练
- LRS2数据集文件夹结构
data_root (mvlrs_v1)
├── main, pretrain (we use only main folder in this work)
| ├── list of folders
| │ ├── five-digit numbered video IDs ending with (.mp4)
将 LRS2 文件列表(train、val、test).txt文件放入该filelists/文件夹中。
- 预处理数据集以进行快速训练
python preprocess.py --data_root data_root/main --preprocessed_root lrs2_preprocessed/
还可以设置其他选项,例如batch_size并行使用的 GPU 数量。
- 预处理的LRS2文件夹结构
preprocessed_root (lrs2_preprocessed)
├── list of folders
| ├── Folders with five-digit numbered video IDs
| │ ├── *.jpg
| │ ├── audio.wav
在 LRS2 以外的数据集上进行训练
对其他数据集的训练可能需要修改代码。在提出问题之前,请先阅读以下内容:
- 通过对单个扬声器进行几分钟的训练/微调可能不会获得良好的结果。这是一个单独的研究问题,我们还没有解决方案。因此,我们很可能无法解决您的问题。
- 在训练 Wav2Lip 之前,您必须为自己的数据集训练专家判别器。
- 如果是您自己从网络下载的数据集,大多数情况下需要进行同步校正。
- 请注意数据集视频的 FPS。对 FPS 的更改需要对代码进行重大更改。
- 专家鉴别器的评估损失应降至约 0.25,Wav2Lip 评估同步损失应降至约 0.2,以获得良好的结果。
当提出有关此主题的问题时,请告诉我们您已了解所有这些要点。
我们有一个在允许商业用途的数据集上训练的高清模型。在我们的新模型中,生成的面部尺寸将为 192 x 288。