Skip to content

基于Bert-VITS2做的表情、动画测试. Animation testing based on Bert-VITS2.

License

Notifications You must be signed in to change notification settings

see2023/Bert-VITS2-ext

Folders and files

NameName
Last commit message
Last commit date

Latest commit

e7e6e5a · Feb 28, 2025

History

18 Commits
Jan 19, 2024
Dec 27, 2023
Jan 24, 2024
Dec 27, 2023
Dec 27, 2023
Dec 27, 2023
Dec 27, 2023
Dec 27, 2023
Mar 8, 2024
Dec 27, 2023
Dec 27, 2023
Dec 27, 2023
Dec 27, 2023
Dec 27, 2023
Dec 27, 2023
Dec 27, 2023
Dec 27, 2023
Dec 27, 2023
Aug 27, 2024
Dec 27, 2023
Dec 27, 2023
Dec 27, 2023
Dec 27, 2023
Dec 27, 2023
Dec 27, 2023
Dec 27, 2023
Jan 5, 2024
Dec 27, 2023
Dec 27, 2023
Dec 27, 2023
Dec 27, 2023
Dec 27, 2023
Feb 28, 2025
Dec 27, 2023
Dec 27, 2023
Dec 27, 2023
Dec 27, 2023
Mar 8, 2024
Dec 27, 2023
Dec 27, 2023
Dec 27, 2023
Dec 27, 2023
Dec 27, 2023
Jan 5, 2024
Dec 27, 2023
Dec 27, 2023
Dec 27, 2023
Dec 27, 2023
Dec 27, 2023

Repository files navigation

简介

扩展到CosyVoice

扩展到GPT-SoVITS

  • GPT-SoVITS 表情测试
    • 直接在 GPT-SoVITS上重新训练,实测结果比较糟糕
    • 暂时使用的方法是从Bert-VITS2-ext里直接把后验部分以及表情生成部分模型复制到GPT-SoVITS里测试。
    • 这会导致一次重复的计算,以及更多的预测变差

TTS

TTS同步输出表情

思路

  • 参考VITS论文的网络结构图(非bert-vits2,但大体结构是一样的),获取文本编码及变换后、解码前的隐变量z,从旁路输出表情值(Live Link Face数值)
    • 冻结原网络的参数,单独增加一路LSTM和MLP处理,完成z到表情的seq2seq生成与映射
    • 当然如果有高质量的表情数据,也可以把表情也加入原始TTS网络训练,应该能提高音频质量

网络结构

数据采集

  • 设置Live Link Face 的Targets 为本机IP,端口默认11111
  • 同步采集语音和对应的Live Link输出的表情值,分别存入到records文件夹
    • 执行一下脚本采集,每次20秒
    • 音频默认为44100 Hz
    • 音频、表情的采集可能有偏移
    • 可对比验证集的损失找到同一数据源的最佳偏移位置
python ./motion/record.py
  • 查看数据是否正常

  • 测试数据

    • 将录下的bs数据通过live link发给UE中的MetaHuman,同步播放语音,检查是否匹配
python ./motion/tts2ue.py --bs_npy_file  ./records/2023-12-23-17-19-54.npy --wav_file ./records/2023-12-23-17-19-54.wav  --fps 60

数据预处理

  • 读取records中的所有音频文件,利用后验编码器,把音频编码后的隐变量z存入 *.z.npy
  • 写入训练和验证用的文件列表
    • filelists/val_visemes.list
    • filelists/train_visemes.list
python ./motion/prepare_visemes.py

训练

  • 在train_ms.py 后加上--visemes来区别和主网的训练
python train_ms.py  -m OUTPUT_MODEL --config ./configs/config.json --visemes

推理

  • 在webui.py执行时,将输出的音频、隐变量、动画数据写入当前目录,可用tts2ue.py来查看生成效果
  • 生成的动画默认的fps是和隐变量一样的86.1328125
    • 44100/86.1328125 = 512,刚好整除,这是Bert-VITS2音频采样频率、网络结构和hidden_channels决定的
python ./motion/tts2ue.py --bs_npy_file ./tmp.npy --wav_file ./tmp.wav --delay_ms 700

声音到表情

  • 利用后验编码器,把声音转换成z,然后再把z转成表情
    • 音频需转成44100hz的wav文件,并只保留一个通道(ffmpeg)
# 音频截取转换
ffmpeg -i input_file -ss 00:00:00 -t 00:00:10 -ar 44100 -f wav test.wav

# 保留通道1
ffmpeg -i test.wav -map_channel 0.0.0 output.wav

python  ./motion/wav_to_visemes.py output.wav

身体动画

MotionGPT

  • 有了语音和表情后,还可以在LLM驱动下产生与之匹配的动作描述,然后用text to motion模型生成与说话内容匹配的身体动画,甚至和场景、他人进行交互。
  • text to motion测试采用的项目是 MotionGPT
    • 暂未做动画过度处理,看介绍模型是支持的 motion in-between
    • MotionGPT用的flan-t5-base,不能理解中文,所以无法用说话的文本产生同步度很高的动画(翻译成英文后语序多少有些变化)
      • 是否可以用说话的文本或隐变量z来指导动作生成暂未可知
  • MotionGPT输出的是骨骼位置,与UE的骨骼动画不能直接对接
    • 目前用了简化方法估算运动数值,会有不小的位置损失
      • 计算出骨骼相对父节点的旋转变化量(四元数)
      • 通过OSC协议发送给 VMCtoMOP程序,可预览动画,并做协议转换
      • 借助Mop插件将MOP数据映射给MetaHuman
        • 测试版本是UE5.3

audio2photoreal

Bert-VITS2 原版声明

LOGO

VITS2 Backbone with multilingual bert

For quick guide, please refer to webui_preprocess.py.

简易教程请参见 webui_preprocess.py

请注意,本项目核心思路来源于anyvoiceai/MassTTS 一个非常好的tts项目

成熟的旅行者/开拓者/舰长/博士/sensei/猎魔人/喵喵露/V应当参阅代码自己学习如何训练。

严禁将此项目用于一切违反《中华人民共和国宪法》,《中华人民共和国刑法》,《中华人民共和国治安管理处罚法》和《中华人民共和国民法典》之用途。

严禁用于任何政治相关用途。

References

感谢所有贡献者作出的努力

About

基于Bert-VITS2做的表情、动画测试. Animation testing based on Bert-VITS2.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages