GPT-SoVITS - 1分钟人声样本,完成声音克隆

编辑于 2024-03-11 10:37:10 阅读 506

简介

GPT-SoVITS - 1分钟的语音数据也可以用来训练一个好的TTS模型!

集成了语音伴奏分离、训练集自动分割、中文ASR、文本标注等工具,帮助初学者创建训练数据集和GPT/SoVITS模型。

部署

直接用GPT-SoVITS仓库下的docker-compose.yaml即可

准备

准备一个3,5分钟的音频,1分钟也行,我用了一个10几分钟的。

训练

  • 9874:GPT-SoVITS WebUI,主界面
  • 9873:UVR5-WebUI,人声/伴奏分离和混响去除
  • 9872:语音合成(推理),最终的使用模型
  • 9871:校对工具,音频切片后的校对
  • 9880: api接口

服务启动后,即可访问程序主界面 ,会看到打开 UVR5-WebUI,点击打开,然后就能访问 UVR5-WebUI,在这个页面,上传你准备的音频文件,其中模型选择HP2_all_vocals,最后就可以执行了,成功后,在output/uvr5_opt目录会生成两个文件,其中vocal_开头的是纯净的人声文件,下一步会用到

下一步,音频切片器:将上一步得到的vocal_开头的文件所在目录(其他文件删掉,或把该文件复制到一个新文件夹)的路径添加到音频切片器输入(文件或文件夹),我这里是/workspace/output/uvr5_opt,然后点击启动音频切片器,成功后会在/workspace/output/slicer_opt目录产生分离后的小文件

接着,语音降噪工具:忽略

继续,中文ASR工具:在输入文件夹路径填写上一步得到的小文件目录/workspace/output/slicer_opt,然后点击启动批处理 ASR,成功后会产生一个list文件/workspace/output/asr_opt/slicer_opt.list。注意,这一步会下载一个模型,速度很慢,实在不行就手动执行框框中提示的命令。

继续,启用语音转文本校对工具:在.list 批注文件路径输入/workspace/output/asr_opt/slicer_opt.list,然后点击开放标签 WebUI,就可以访问校对工具了。

继续,语音转文本校对工具:在这个页面可以检查一下系统生成的文本,标点符号等是否正确,不正确就修改一下。也可以进行合并,拆分等。这里我跳过。

继续,我们回到主页面,点击第二个tab 1-GPT-SOVITS-TTS,填写实验/模型名称,要英文的;

然后看到下面有3个tab,先看第一个1A-数据集格式:填写文字标签文件,就是list文件路径/workspace/output/asr_opt/slicer_opt.list,然后音频数据集文件夹,就是分割后的小文件目录/workspace/output/slicer_opt,接着点击开始一键格式化

接着,第二个tab 1B-微调训练:训练SoVITS_weights模型,其中参数每个 GPU 的批处理大小总纪元数要根据自己GPU的性能进行调整,总纪元数越大越好,约耗时间,当然也别成百上千,没必要。我填的25,最后点击开始SoVITS培训

接着,训练GPT_weights模型,参数都模型,直接点击开始 GPT 训练

接着,第三个tab,1C-推理,点击刷新模型路径,选择刚训练的模型,然后点击开放TTS推理WEBUI,就可以访问语音合成(推理)

最后,先上传参考音频文件,再添加对应的文本,为了省事,我们可以上传一个分割后的小音频文件。然后填写推理文本,就是你要合成语音的文本,最后点击开始推理就能合成了。

模型分享

分享需要的模型都在SoVITS_weights和GPT_weights这两个文件夹,选择合适轮数的模型,记得带上参考音频一起打包成压缩文件,就可以分享了。别人只要将GPT模型(ckpt后缀)放入GPT_weights文件夹,SoVITS模型(pth后缀)放入SoVITS_weights文件夹就可以推理了

以为的模型为例

- /workspace/GPT_weights/yangmi-e15.ckpt
- /workspace/SoVITS_weights/yangmi_e24_s1344.pth

- /workspace/output/slicer_opt/vocal_yangmi.WAV_10.flac_0000000000_0000135040.wav
- 音频对应的文本

将以上4部分打包就可以分享了

这里有作者分享的一些模型: https://www.yuque.com/baicaigongchang1145haoyuangong/ib3g1e/nwnaga50cazb2v93

API调用

启动服务

执行参数

  • -s:SoVITS模型路径
  • -g:GPT模型路径
  • -dr:默认参考音频路径
  • -dt:默认参考音频文本
  • -dl:默认参考音频语种,//中文,英文,日文,zh,en,ja
python api.py -dr "/workspace/output/slicer_opt/vocal_yangmi.WAV_10.flac_0000000000_0000135040.wav" -dt "我觉得有那些角色在哪儿,是因为我运气好。" -dl "zh" -s "/workspace/SoVITS_weights/yangmi_e24_s1344.pth" -g "/workspace/GPT_weights/yangmi-e15.ckpt"

文本转语音

curl --location 'http://localhost:9880' \
--header 'Content-Type: application/json' \
--data '{
    "refer_wav_path": "/workspace/output/slicer_opt/vocal_yangmi.WAV_10.flac_0000000000_0000135040.wav",
    "prompt_text": "我觉得有那些角色在哪儿,是因为我运气好。",
    "prompt_language": "zh",
    "text": "今天我吃了两个包子,一个鸡蛋,还有一杯豆浆。",
    "text_language": "zh"
}'

参考

https://github.com/RVC-Boss/GPT-SoVITS

广而告之,我的新作品《语音助手》上架Google Play了,欢迎下载体验