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

目前最火的中文声音训练项目要数"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

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

解压后如图

如果你的计算机中没有按照 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个参数了,只需要 texttext_language就可以了

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

相关推荐
Open-AI2 分钟前
Python如何判断一个数是几位数
python
逆天的蝈蝈4 分钟前
开源与商业的碰撞TPFLOW与Gadmin低代码的商业合作
低代码·开源
极客代码5 分钟前
【Python TensorFlow】入门到精通
开发语言·人工智能·python·深度学习·tensorflow
义小深8 分钟前
TensorFlow|咖啡豆识别
人工智能·python·tensorflow
疯一样的码农12 分钟前
Python 正则表达式(RegEx)
开发语言·python·正则表达式
Tianyanxiao1 小时前
如何利用探商宝精准营销,抓住行业机遇——以AI技术与大数据推动企业信息精准筛选
大数据·人工智能·科技·数据分析·深度优先·零售
撞南墙者1 小时前
OpenCV自学系列(1)——简介和GUI特征操作
人工智能·opencv·计算机视觉
OCR_wintone4211 小时前
易泊车牌识别相机,助力智慧工地建设
人工智能·数码相机·ocr
进击的六角龙1 小时前
Python中处理Excel的基本概念(如工作簿、工作表等)
开发语言·python·excel
王哈哈^_^1 小时前
【数据集】【YOLO】【VOC】目标检测数据集,查找数据集,yolo目标检测算法详细实战训练步骤!
人工智能·深度学习·算法·yolo·目标检测·计算机视觉·pyqt