GPT-SoVITS - 1分钟人声样本,完成声音克隆
简介
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"
}'