技术介绍
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_v2和GPT_weights_v2这两个文件夹,选择合适轮数的模型,记得带上参考音频一起打包成压缩文件,就可以分享了。别人只要将GPT模型(ckpt后缀)放入GPT_weights_v2文件夹,SoVITS模型(pth后缀)放入SoVITS_weights_v2文件夹就可以推理了
PS:本项目是在我学习研究原项目之后的结果,因为过程中可能会出现很多问题,所以写下来给大家分享!
原作者项目:GPT-SoVITS指南 · 语雀 小破站可搜白菜工厂1145号员工