使用GPT-SoVITS训练真假难辨的说话声

3,488 阅读8分钟

目前最火的中文声音训练项目要数“GPT-SoVITS”了,只需数秒到一分钟的任意声音样本,就能训练出媲美原声的模型。之前介绍过几篇使用 “CoquiTTS”进行声音克隆的项目,该项目在英语语言方面很强,但对中文的支持相对较差,断句、中英混杂难以区分,相比“GPT-SoVITS”在中文方面逊色许多。

本文讲下如何安装部署以及使用GPT-SoVITS训练出一个自己的声音模型,并使用该模型进行文字合成,以及api的简单使用。

本文包括以下几部分。

  • 安装下载
  • 界面介绍
  • 人声和背景音分离
  • 语音切割
  • 语音文字识别
  • 对识别的文字修改打标
  • 开启训练
  • 进行微调
  • 使用训练模型合成声音
  • 训练好的模型在哪里
  • API的简单使用

安装下载,以windows版为例

打开GPT-SoVITS项目的中文说明页 github.com/RVC-Boss/GP…

点击下载预打包文件,下载地址(需科学上网)https://huggingface.co/lj1995/GPT-SoVITS-windows-package/resolve/main/GPT-SoVITS-beta.7z?download=true

image.png

下载之后,建议解压到英文目录下,目录中不要含有空格,避免出现奇怪问题。

解压后如图

image.png

如果你的计算机中没有按照 ffmpeg 和 ffprobe,需要下载这2个exe文件,并放在上图显示的目录下 ffmpeg.exe ffprobe.exe下载地址

一切准备好后,双击 go-webui.bat 等待浏览器自动打开训练界面。

image.png

界面介绍

界面元素比较多,新手看起来可能有点摸不着头脑,简单区分下。

主要分为

数据处理区: 也就是对你搜集的声音样板进行去除背景音、切分片段、将音频识别为文字等格式化处理。

image.png

训练和微调区域: 主要设置训练参数,比如训练轮次、每批量大小等

image.png

image.png

测试训练效果区: 针对训练完毕后的新模型,使用文字合成声音,测试效果怎么样

image.png

人声和背景噪声分离:

如果你的声音样本中有背景音乐或噪声,可选择“是否开启UVR5-WebUI”,稍等自动弹出分离页面,如下图。

如果要处理的音频文件有多个,可将这些音频文件都放在一个文件夹中,然后在图中文本框内填写该文件夹路径,如果只有一个音频文件,直接点击上传即可。

image.png

模型选择“HP2_all_vocals”,导出文件格式选择“wav”,然后点击转换按钮,等待处理完毕。

分离完毕后的文件默认存储在软件目录下/output/uvr5_opt文件夹内,以 vocal_ 开头的wav就是单独的人声音频文件。直接删除其他非 vocal_ 开头的背景噪声文件,以便将该目录作为接下来的声音样本文件夹。

image.png

将音频样本切分/语音切分

在文本框内输入刚才分离后的vocal_ 人声音频文件所在文件夹完整路径,比如我的路径是F:\python\sovits\GPT-SoVITS-beta0217\output\uvr5_opt,我将这路径填入就可以了。

特别需要注意:如果是填写的人声背景分离后输出目录,那么其中除了vocal_开头的人声文件,还有 instr开头的背景噪声文件,请确保删除这些噪声文件。

image.png

image.png

该区域的其他参数无需改动,除非你知道这意味着什么,点击“开启语音切割”按钮,等待右侧空白文本框内显示执行完成。

执行完毕后,已经完成切割的音频片段会输出到 软件目录下/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

image.png

然后点击“开启离线批量ASR”,等待下方空白文本框内显示执行完毕。完毕后可到软件目录下\output\asr_opt 中找到一个.list后缀的文件,记住这个地址,下一步需要填写。

修改识别错误的文字/语音文本校对标注

这一步主要是修改识别错误的文字或者添加缺少的标点符号,会有更好的训练效果,当然这不是必须的,可以跳过这一步。

将上一步的 .list 完整路径和名称填写到".list标准文件的路径"文本框中。比如我这里的是F:\python\sovits\GPT-SoVITS-beta0217\output\asr_opt\slicer_opt.list,我将该路径填写到文本框,然后选中“是否开启打标WebUI”工具,静待自动打开一个页面。

image.png

打开后的页面如下,可以在每一行检查错别字修改为正确的,添加或删除标点符号。

image.png

修改完成后,一定要点击 “Submit Text”和“Save File”,否则你的修改工作就白费了。

正式进入训练步骤

点击顶部tab中的“1-GPT-SoVITS-TTS”打开训练界面

image.png

这里需要填写的也很少

实验/模型名:为训练后的模型起一个名称,训练后的模型名将以该处填写的值为开头,建议只使用英文、数字、下划线组成,避免中文、空格、特殊符号等。

文本标注文件:填写上一步得到的“.list”文件的完整名称,比如我的是F:\python\sovits\GPT-SoVITS-beta0217\output\asr_opt\slicer_opt.list

训练集音频文件目录:这个就是语音切割后的文件夹完整路径,如果不清楚,看下 将音频样本切分/语音切分 步骤,我本地目录是F:\python\sovits\GPT-SoVITS-beta0217\output\slicer_opt

其他无需填写,默认即可。

点击底部的按钮“开启一键三连”,等待右侧空白区域显示执行完成。

image.png

当右侧显示“一键三连结束”时,点击“1B-微调训练”,进行微调。

进入GPT 和 SoVITS 微调训练

点击“1B-微调训练”,进入微调界面,如下图操作

image.png

耐心等待右侧空白区域提示训练结束。

测试训练效果

点击“1C-推理”,测试效果

image.png

选中“是否开启TTS推理WebUI”,耐心等待打开TTS页面

image.png

如上图所示:首先找到你训练的模型,模型名称以你命名的模型名开头,后跟 e数字,选择数字最大的一个。 如果看不到,则刷新模型路径。

然后上传一个参考音频,参考音频必须同你训练时用的声音一致,才能取得最好效果。可直接从“语音切割”后的目录中找到一个质量最好的,作为参考音频,但要注意,时长必须在3-10秒内。

然后在参考音频右侧填写该音频里的文字内容。

输入想合成的文字之后,点击“合成语音”按钮,等待合成结束,会在右侧显示音频,点击播放试听效果。

到这里,训练就完成了。可以直接在TTS推理WebUI界面中使用,也可以启动api接口,供其他程序使用。

自己训练的模型在哪里

GPT-SoVITS 根目录下有2个文件夹

SoVITS_weights 文件夹中存放sovits模型,该类模型以 .pth 为后缀

GPT_weights文件夹中存放 gpt模型,该类模型以 .ckpt 为后缀

可以到这2个文件夹中寻找以你命名的模型开头,后跟e最大数字的模型文件。

开启 api 接口

软件自带一个api.py 接口文件,用编辑器打开该文件。

在大约 133 行之后添加如下两行代码

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 请求来使用。 支持的参数有

# 参考音频路径
    "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个参数了,只需要 texttext_language就可以了

目前该api还无法动态切换不同模型,也就是你指定了默认模型后,想切换其他模型,得修改后手动重启,使用略有不便。