目前最火的中文声音训练项目要数"GPT-SoVITS"了,只需数秒到一分钟的任意声音样本,就能训练出媲美原声的模型。之前介绍过几篇使用 "CoquiTTS"进行声音克隆的项目,该项目在英语语言方面很强,但对中文的支持相对较差,断句、中英混杂难以区分,相比"GPT-SoVITS"在中文方面逊色许多。
本文讲下如何安装部署以及使用GPT-SoVITS训练出一个自己的声音模型,并使用该模型进行文字合成,以及api的简单使用。
本文包括以下几部分。
- 安装下载
- 界面介绍
- 人声和背景音分离
- 语音切割
- 语音文字识别
- 对识别的文字修改打标
- 开启训练
- 进行微调
- 使用训练模型合成声音
- API的简单使用
安装下载,以windows版为例
打开GPT-SoVITS项目的中文说明页 github.com/RVC-Boss/GP...
下载之后,建议解压到英文目录下,目录中不要含有空格,避免出现奇怪问题。
解压后如图
如果你的计算机中没有按照 ffmpeg 和 ffprobe,需要下载这2个exe文件,并放在上图显示的目录下 ffmpeg.exe ffprobe.exe下载地址
一切准备好后,双击 go-webui.bat
等待浏览器自动打开训练界面。
界面介绍
界面元素比较多,新手看起来可能有点摸不着头脑,简单区分下。
主要分为
数据处理区: 也就是对你搜集的声音样板进行去除背景音、切分片段、将音频识别为文字等格式化处理。
训练和微调区域: 主要设置训练参数,比如训练轮次、每批量大小等
测试训练效果区: 针对训练完毕后的新模型,使用文字合成声音,测试效果怎么样
人声和背景噪声分离:
如果你的声音样本中有背景音乐或噪声,可选择"是否开启UVR5-WebUI",稍等自动弹出分离页面,如下图。
如果要处理的音频文件有多个,可将这些音频文件都放在一个文件夹中,然后在图中文本框内填写该文件夹路径,如果只有一个音频文件,直接点击上传即可。
模型选择"HP2_all_vocals",导出文件格式选择"wav",然后点击转换按钮,等待处理完毕。
分离完毕后的文件默认存储在软件目录下/output/uvr5_opt
文件夹内,以 vocal_ 开头的wav就是单独的人声音频文件。直接删除其他非 vocal_ 开头的背景噪声文件,以便将该目录作为接下来的声音样本文件夹。
将音频样本切分/语音切分
在文本框内输入刚才分离后的vocal_ 人声音频文件所在文件夹完整路径,比如我的路径是F:\python\sovits\GPT-SoVITS-beta0217\output\uvr5_opt
,我将这路径填入就可以了。
特别需要注意:如果是填写的人声背景分离后输出目录,那么其中除了vocal_开头的人声文件,还有 instr开头的背景噪声文件,请确保删除这些噪声文件。
该区域的其他参数无需改动,除非你知道这意味着什么,点击"开启语音切割"按钮,等待右侧空白文本框内显示执行完成。
执行完毕后,已经完成切割的音频片段会输出到 软件目录下/output/slicer_opt
文件夹
记住这个地址,下一步将需要填写,比如我的路径是F:\python\sovits\GPT-SoVITS-beta0217\output\slicer_opt
将语音识别为文字/中文批量离线ASR
上一步切割后的语音片段需要识别出文字,将上一步的输出文件夹 软件目录下/output/slicer_opt
填写到 下图中的"输入文件夹",填写完整路径哦,比如我本地路径是F:\python\sovits\GPT-SoVITS-beta0217\output\slicer_opt
然后点击"开启离线批量ASR",等待下方空白文本框内显示执行完毕。完毕后可到软件目录下\output\asr_opt
中找到一个.list
后缀的文件,记住这个地址,下一步需要填写。
修改识别错误的文字/语音文本校对标注
这一步主要是修改识别错误的文字或者添加缺少的标点符号,会有更好的训练效果,当然这不是必须的,可以跳过这一步。
将上一步的 .list
完整路径和名称填写到".list标准文件的路径"文本框中。比如我这里的是F:\python\sovits\GPT-SoVITS-beta0217\output\asr_opt\slicer_opt.list
,我将该路径填写到文本框,然后选中"是否开启打标WebUI"工具,静待自动打开一个页面。
打开后的页面如下,可以在每一行检查错别字修改为正确的,添加或删除标点符号。
修改完成后,一定要点击 "Submit Text"和"Save File",否则你的修改工作就白费了。
正式进入训练步骤
点击顶部tab中的"1-GPT-SoVITS-TTS"打开训练界面
这里需要填写的也很少
实验/模型名:为训练后的模型起一个名称,训练后的模型名将以该处填写的值为开头,建议只使用英文、数字、下划线组成,避免中文、空格、特殊符号等。
文本标注文件 :填写上一步得到的".list"文件的完整名称,比如我的是F:\python\sovits\GPT-SoVITS-beta0217\output\asr_opt\slicer_opt.list
训练集音频文件目录 :这个就是语音切割后的文件夹完整路径,如果不清楚,看下 将音频样本切分/语音切分 步骤,我本地目录是F:\python\sovits\GPT-SoVITS-beta0217\output\slicer_opt
其他无需填写,默认即可。
点击底部的按钮"开启一键三连",等待右侧空白区域显示执行完成。
当右侧显示"一键三连结束"时,点击"1B-微调训练",进行微调。
进入GPT 和 SoVITS 微调训练
点击"1B-微调训练",进入微调界面,如下图操作
耐心等待右侧空白区域提示训练结束。
测试训练效果
点击"1C-推理",测试效果
选中"是否开启TTS推理WebUI",耐心等待打开TTS页面
如上图所示:首先找到你训练的模型,模型名称以你命名的模型名开头,后跟 e数字
,选择数字最大的一个。 如果看不到,则刷新模型路径。
然后上传一个参考音频,参考音频必须同你训练时用的声音一致,才能取得最好效果。可直接从"语音切割"后的目录中找到一个质量最好的,作为参考音频,但要注意,时长必须在3-10秒内。
然后在参考音频右侧填写该音频里的文字内容。
输入想合成的文字之后,点击"合成语音"按钮,等待合成结束,会在右侧显示音频,点击播放试听效果。
到这里,训练就完成了。可以直接在TTS推理WebUI界面中使用,也可以启动api接口,供其他程序使用。
开启 api 接口
软件自带一个api.py 接口文件,用编辑器打开该文件。
在大约 133 行之后添加如下两行代码
python
g_config.sovits_path=r'你训练后的sovits模型的完整路径和名称,以pth结尾'
g_config.gpt_path='你训练的gpt模型,以ckpt结尾'
将 r''
内的文字替换为你训练后的模型的真实路径,之所以这么指定,是方便其他地方调用时,无需再额外指定,当然你也可以在 config.py 中指定,那么就不必添加上方2行代码。
地址栏输入 cmd 回车,在打开的cmd窗口中输入 .\runtime\python api.py
,即开启了api接口,默认端口 9880.
其他程序可以通过向 http://127.0.0.1:9880
发送GET 或 POST 请求来使用。 支持的参数有
bash
# 参考音频路径
"refer_wav_path": "123.wav",
#参考音频的文字内容
"prompt_text": "一二三。",
#参考音频的语言代码 zh en ja
"prompt_language": "zh",
#想要合成声音的文字
"text": "先帝创业未半而中道崩殂,今天下三分,益州疲弊,此诚危急存亡之秋也。",
#文字的语言代码
"text_language": "zh"
比如以 GET 方式请求上述数据:
http://127.0.0.1:9880?refer_wav_path=123.wav&prompt_text=一二三。&prompt_language=zh&text=先帝创业未半而中道崩殂,今天下三分,益州疲弊,此诚危急存亡之秋也。&text_language=zh
使用提示:如果你确定了使用某个训练好的模型,并且指定只想使用某个音频当做参考文件,那么启动命令可以修改为
python api.py -dr "参考音频路径名称" -dt "参考音频的文本" -dl "参考音频语言"
这样其他程序请求使用时,就不必携带 refer_wav_path prompt_text prompt_language
这3个参数了,只需要 text
和text_language
就可以了
目前该api还无法动态切换不同模型,也就是你指定了默认模型后,想切换其他模型,得修改后手动重启,使用略有不便。