GPT-SoVITS语音合成技术实现

技术介绍

GPT-SoVITS 是一款结合了 GPT(Generative Pre-trained Transformer)和 SoVITS(Soft-VC Integrated Text-to-Speech)的创新型语音合成技术。它在语音克隆、跨语言语音合成以及文本到语音转换方面表现出色。以下是关于 GPT-SoVITS 的一些关键知识点:

1. 核心特点:

少样本语音克隆:

    GPT-SoVITS 能够仅使用少量目标说话人的语音样本(通常几分钟)来克隆其声音。这使得创建个性化的语音模型变得更加容易。

跨语言语音合成:

    该模型支持跨语言的文本到语音转换。这意味着你可以使用一种语言的文本来生成另一种语言的语音,同时保持克隆的音色。

高质量语音合成:

    GPT-SoVITS 能够生成自然流畅、接近真人发声的语音,提高了合成语音的真实感。

WebUI工具:

    该项目附带的WebUI工具集成了音频伴奏分离,训练集自动分割,中文自动语音识别(ASR)以及文本标注功能,极大的降低了用户使用门槛。

2. 技术原理:

SoVITS 的基础:

    GPT-SoVITS 基于 SoVITS 架构,利用变分自编码器(VAE)学习音色表示,并结合其他技术实现高质量的语音合成。

GPT 的引入:

    通过引入 GPT 模型,GPT-SoVITS 增强了对上下文信息的理解能力,从而使得生成的语音在语调、韵律等方面更加自然。

HuBERT的使用:

    HuBERT用于提取语音的内容表示。

1.整合包下载链接

百度网盘 请输入提取码

2.解压并打开

 2.1解压

注意使用7-Zip解压,使用其他工具会吞文件

官网英文原版下载:Download

具体解压方法:右键压缩包选择解压到GPT-SoVITS-v2-xxxx\,如果是win11需要先点击显示更多选项

2.2打开

打开文件来到根目录,双击go-webui.bat打开,不要以管理员身份运行!

这就是正常打开了,稍加等待就会弹出网页。如果没有弹出网页可以复制http://0.0.0.0:9874到浏览器打开

打开的网页端如图

在开始使用前先提醒一下大家:打开的bat不可以关闭!这个黑色的bat框就是控制台,所有的日志都会在这上面呈现,所有的信息以控制台为准。

3.数据集准备

 3.1使用UVR5处理原音频(如果原音频足够干净可以跳过这步,比如游戏中提取的干声) 

点击开启UVR5-WebUI稍加等待自动弹出图二网页,如果没有弹出复制http://0.0.0.0:9873到浏览器打开

首先输入音频文件夹

粘贴到输入路径里,下拉选择model_bs_roformer_ep_317_sdr_12.9755模型,然后点击转换,稍等片刻输出信息就会显示xxxx->Success

可以打开bat控制台,在这可以查看当前进度

然后打开GPT-SoVITS文件夹下的output文件夹

打开uvr5_opt文件夹

这里会有输入文件数两倍的文件,其中instrumental文件是不需要的,都必须删掉,否则会影响最终效果。再新建一个文件夹把这两个文件移过去

然后输入路径改成上面那个新建文件夹,下拉选择onnx_dereverb_By_FoxJoy模型,点击转换。然后要等待比较长一段时间。同样可以在bat控制台看进度,如果等待的时间实在太长可以跳过这个模型,影响不大。输入的文件还是在uvr5_opt文件夹,其中others是不需要的,删掉。上一步的vocal也不需要了可以删掉。再新建一个文件夹把_vocal_main_vocal这两个文件移过去

然后输入路径改成上面那个新建文件夹,下拉选择VR-DeEchoAggressive模型(如果混响很重选DeReverb,比较轻选Normal,中间选Aggressive),点击转换。稍微等待一段时间,再打开uvr5_opt文件夹,把instrument开头的删掉就好了

3.2切割音频

首先输入原音频的文件夹路径(不要有中文),如果刚刚经过了UVR5处理那么就是uvr5_opt这个文件夹。然后建议可以调整的参数有min_length、min_interval和max_sil_kept单位都是ms。min_length根据显存大小调整,显存越小调越小。min_interval根据音频的平均间隔调整,如果音频太密集可以适当调低。max_sil_kept会影响句子的连贯性,不同音频不同调整,不会调的话保持默认。其他参数不建议调整。点击开启语音切割,马上就切割好了。默认输出路径在output/slicer_opt。当然也可以使用其他切分工具切分。

首先输入原音频的文件夹路径(不要有中文),如果刚刚经过了UVR5处理那么就是uvr5_opt这个文件夹。然后建议可以调整的参数有min_length、min_interval和max_sil_kept单位都是ms。min_length根据显存大小调整,显存越小调越小。min_interval根据音频的平均间隔调整,如果音频太密集可以适当调低。max_sil_kept会影响句子的连贯性,不同音频不同调整,不会调的话保持默认。其他参数不建议调整。点击开启语音切割,马上就切割好了。默认输出路径在output/slicer_opt。当然也可以使用其他切分工具切分。

切分完后文件在output\slicer_opt。打开切分文件夹,排序方式选大小,将时长超过 显存数 秒的音频手动切分至 显存数 秒以下。比如显卡是4090 显存是24g,那么就要将超过24秒的音频手动切分至24s以下,音频时长太长的会爆显存。如果语音切割后还是一个文件,那是因为音频太密集了。可以调低min_interval,从300调到100基本能解决这问题。

3.3音频降噪(如果原音频足够干净可以跳过这步,例如游戏中提取的干声)

如果觉得音频足够清晰可以跳过这步,降噪对音频的损伤较大

输入刚才切割完音频的文件夹,默认是output/slicer_opt文件夹。然后点击开启语音降噪。默认输出路径在output/denoise_opt。

3.4打标

给每个音频配上文字,让AI学习到每个字该怎么读,这里的标指的是标注。

如果你上一步切分了或者降噪了,那么已经自动帮你填充好路径了。然后选择达摩ASR或者fast whisper。达摩ASR只能用于识别汉语和粤语,效果也最好。fast whisper可以标注99种语言,是目前最好的英语和日语识别,模型尺寸选large V3,语种选auto自动。whisper可以选择精度,建议选float16,float16比float32快,int8速度几乎和float16一样。然后点开启离线批量ASR就好了,默认输出是output/asr_opt这个路径。ASR需要一些时间,看着控制台有没有报错就好了

3.5校对标注

上一步打标完会自动填写list路径,你只需要点击开启打标webui

打开后就是SubFix,从左往右从上到下依次意思是:跳转页码、保存修改、合并音频、删除音频、上一页、下一页、分割音频、保存文件、反向选择。每一页修改完都要点一下保存修改(Submit Text),如果没保存就翻页那么会重置文本,在完成退出前要点保存文件(Save File),做任何其他操作前最好先点一下保存修改(Submit Text)。合并音频和分割音频不建议使用,精度非常差,一堆bug。删除音频先要点击要删除的音频右边的yes,再点删除音频(Delete Audio)。删除完后文件夹中的音频不会删除但标注已经删除了,不会加入训练集的。这个SubFix一堆bug,任何操作前都多点两下保存。

4.训练

 4.1输出logs

来到第二个页面

先设置好实验名也就是模型名,理论上可以是中文!打标结束会自动填写路径,只要点下一键三连就好了

4.2微调训练

首先设置batch_size,sovits训练建议batch_size设置为显存的一半以下,高了会爆显存。bs并不是越高越快!batch_size也需要根据数据集大小调整。

接着设置轮数,相比V1,V2对训练集的还原更好,但也更容易学习到训练集中的负面内容。所以如果你的素材中有底噪、混响、喷麦、响度不统一、电流声、口水音、口齿不清、音质差等情况那么请不要调高SoVITS模型轮数,否则会有负面效果。GPT模型轮数一般情况下不高于20,建议设置10。然后先点开启SoVITS训练,训练完后再点开启GPT训练,不可以一起训练(除非你有两张卡)!如果中途中断了,直接再点开始训练就好了,会从最近的保存点开始训练。

训练的时候请ctrl+shift+esc打开任务管理器看,下拉打开选项,选择cuda。如果cuda占用为0那么就不在训练。专用GPU内存就是显存,其他的内存都是共享的,并不是真正的显存。爆显存了就调低bs。或者存在过长的音频,需要回到2.2步重新制作数据集。

4.3训练基本完成

由于数据集不足,目前训练未用到情感分类。经过调研,采用已经训练过ColorSplitter情感分类的数据集会获得更丰富稳定的情感。

训练好的模型(v2)分别在GPT_weights_v2文件夹下的.ckpt文件和在SoVITS_weights_v2下的.pth文件。

5.推理

 5.1开启推理界面

先点一下刷新模型,下拉选择模型推理,e代表轮数,s代表步数。不是轮数越高越好。选择好模型点开启TTS推理,自动弹出推理界面。如果没有弹出,复制http://0.0.0.0:9872到浏览器打开。

 5.2开始推理

在GPT模型列表和SoVITS模型列表分别上传训练好的模型文件

然后上传一段参考音频,建议是数据集中的音频。最好5秒。参考音频很重要!会学习语速和语气,请认真选择。参考音频的文本是参考音频说什么就填什么,语种也要对应。在0217版本之后可以选择无参考文本模式,但非常不建议使用,效果非常拉胯。

接着就是输入要合成的文本了,注意语种要对应。目前可以中英混合,日英混合和中日英混合。切分建议无脑选凑四句一切,低于四句的不会切。如果凑四句一切报错的话就是显存太小了可以按句号切。

选择想要语音合成的文本,将文本输入后合成语音,可以得到对应模型的语音

6.分享模型

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

PS:本项目是在我学习研究原项目之后的结果,因为过程中可能会出现很多问题,所以写下来给大家分享!

原作者项目:GPT-SoVITS指南 · 语雀 小破站可搜白菜工厂1145号员工

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值