之前有一期我们体验了阿里开源的半身数字人项目EchoMimicV2,感兴趣的小伙伴可跳转至《AI半身数字人开箱体验——开源项目EchoMimicV2》,今天带大家来体验腾讯开源的数字人音唇同步模型MuseTalk。
MuseTalk
是一个实时高品质音频驱动的唇形同步模型,是在 ft-mse-vae
的潜在空间中进行训练,该模型:
-
能够根据输入的音频修改未知的面部动作,面部区域大小为
256 x 256
。 -
支持中文、英文和日文等多种语言的音频。
-
在 NVIDIA Tesla V100 上支持超过
30fps
的实时推理。 -
支持修改面部区域中心点,这对生成结果有显著影响。
-
在 HDTF 数据集上训练的模型checkpoint。
MuseTalk
是在潜在空间中进行训练,其中图像由冻结的 VAE 编码,音频由冻结的 whisper-tiny
模型编码。生成网络的架构借鉴了 stable-diffusion-v1-4
的 UNet,其中音频嵌入通过交叉注意力与图像嵌入融合。
注:尽管MuseTalk
使用的架构与 Stable Diffusion
非常相似,但 MuseTalk
的独特之处在于它不是一个扩散模型。相反,MuseTalk
是通过在潜在空间中单步修复来操作。
安装部署
https://github.com/TMElyralab/MuseTalk
1. 构建基础环境
Python version=3.10
Cuda version=12.4
2. 安装依赖
pip install -r requirements.txt
mmlab packages
pip install --no-cache-dir -U openmim
mim install mmengine
mim install "mmcv>=2.0.1"
mim install "mmdet>=3.1.0"
mim install "mmpose>=1.1.0"
3. 安装ffmpeg-static
wget https://www.johnvansickle.com/ffmpeg/old-releases/ffmpeg-4.4-amd64-static.tar.xz
tar -xf ffmpeg-4.4-amd64-static.tar.xz
export FFMPEG_PATH=/path/to/ffmpeg-4.4-amd64-static
4. 安装MuseTalk权重
wget https://hf-mirror.com/TMElyralab/MuseTalk/resolve/main/musetalk/musetalk.json
wget https://hf-mirror.com/TMElyralab/MuseTalk/resolve/main/musetalk/pytorch_model.bin
5. 安装其他组件权重
-
sd-vae-ft-mse
-
whisper
-
dwpose
-
face-parse-bisent
-
resnet18
# sd-vae-ft-mse
git clone https://hf-mirror.com/stabilityai/sd-vae-ft-mse
# whisper
wget https://openaipublic.azureedge.net/main/whisper/models/65147644a518d12f04e32d6f3b26facc3f8dd46e5390956a9424a650c0ce22b9/tiny.pt
# dwpose
git clone https://hf-mirror.com/yzd-v/DWPose
# face-parse-bisent
git clone https://hf-mirror.com/ManyOtherFunctions/face-parse-bisent
# resnet18
wget https://download.pytorch.org/models/resnet18-5c106cde.pth
模型权重路径结构
快速入门
推理
python -m scripts.inference --inference_config configs/inference/test.yaml
configs/inference/test.yaml
是推理配置文件的路径,包含视频路径(video_path
)和音频路径(audio_path
)。视频路径可以是视频文件、图像文件或者图像目录。
建议输入帧率为25帧每秒的视频,这与训练模型时使用的帧率相同。如果你的视频帧率远低于25帧每秒,建议进行帧插值处理,或者直接使用ffmpeg
将视频转换为25帧每秒。
使用bbox_shift
来获得可调节的结果
我们发现遮罩的上边界对嘴巴张开程度有重要影响。因此,为了控制遮罩区域,建议使用bbox_shift
参数。正值(朝下半部分移动)会增加嘴巴张开程度,而负值(朝上半部分移动)会减小嘴巴张开程度。
你可以先使用默认配置运行以获取可调节值的范围,然后在此范围内重新运行脚本。
例如,以孙新颖的情况为例,运行默认配置后,显示可调节值范围是[-9, 9]
。然后,若要减小嘴巴张开程度,可将该值设为-7
。
python -m scripts.inference --inference_config configs/inference/test.yaml --bbox_shift -7
更多技术细节可在bbox_shift
部分找到。
结合 MuseV和 MuseTalk
作为虚拟人物生成的完整解决方案,建议你首先参考相关内容使用“MuseV”来生成视频(文本转视频、图像转视频或姿态转视频)。建议进行帧插值以提高帧率。然后,你可以参考相关内容使用“MuseTalk”来生成唇形同步视频。
实时推理
在此,我们提供推理脚本。该脚本会预先进行必要的预处理,如人脸检测、人脸解析以及变分自编码器(VAE)编码等操作。在推理过程中,仅涉及生成对抗网络(UNet)和变分自编码器解码器,这使得“MuseTalk”具备实时性。
python -m scripts.realtime_inference --inference_config configs/inference/realtime.yaml --batch_size 4
configs/inference/realtime.yaml
是实时推理配置文件的路径,包含准备工作(preparation
)、视频路径(video_path
)、bbox_shift
和音频片段(audio_clips
)等内容。
❗️此处代码get_image_blending有些问题,我们回退这个函数。
https://github.com/TMElyralab/MuseTalk/issues/220
在realtime.yaml
中将preparation
设为True
,以便为新的虚拟形象准备素材。(如果bbox_shift
发生了变化,也需要重新准备素材。)
之后,该虚拟形象将使用从音频片段中选取的一个音频片段来生成视频。
例如使用data/audio/yongen.wav
进行推理。
在“MuseTalk”进行推理时,子线程可以同时将结果推送给用户。在英伟达特斯拉V100显卡上,生成过程能够达到30帧每秒及以上的帧率。
如果想使用同一个虚拟形象生成更多视频,可将preparation
设为False
并运行此脚本。
❗️实时推理注意事项
如果想用同一个虚拟形象/视频生成多个视频,也可以使用此脚本来大幅加快生成过程。
在前面的脚本中,生成时间也受输入/输出(例如保存图像)的限制。如果你只是想测试生成速度而不保存图像,可以运行以下命令:
python -m scripts.realtime_inference --inference_config configs/inference/realtime.yaml --skip_save_images
启动app
#!/bin/bashecho "entrypoint.sh"
whoami
which python
source /opt/conda/etc/profile.d/conda.sh
conda activate musev
which python
python app.py
sh entrypoint.sh
效果展示
现在就让我们来体验音唇同步的魅力。
任务1:我们将之前用EchoMimicV2生成的14s视频,融合两段不同的音频。
原视频:奋斗的路漫长,爱情是甜蜜的糖,两者交织的光,把生命都照亮。
音频1:地球已经存在45亿年,人类文明的存在对于地球来说只是眨眼间的时间。人类用了几万年的时间征服地球,毁灭只用了短短的几秒钟。核辐射污染了整个地球,使地球所有生命都即将殆尽。那些幸存的人类,也许在外太空找了几十年,也没有找到适合人类居住的行星。
音频2:我见过你最爱我的样子,所以当你开始敷衍我的时候,其实我心里早就明白,只是还放不下那段曾经。 享受了工作带来的薪酬和成长,就要接纳工作带来的委屈和辛苦。 每一刻疲惫的瞬间,我想的都是好好挣钱好好生活。
任务2:我们将MuseTalk自带的人物视频,融合
EchoMimicV2官方介绍的音频(视频中提取)。
下面我们来看看MuseTalk给大家带来的效果: