# 1. GPT-SoVITS基本介绍
# 1.1 GPT-SoVITS简介
一个开源的TTS项目,支持在Linux、MacOS、Win下运行,只需要1分钟的音频文件就可以克隆声音,支持将汉语、英语、日语三种语言的文本转为克隆声音。
# 1.2 VITS语音合成
VITS:用于端到端文本到语音的具有对抗学习的条件变分自动编码器,生成的语音效果比较好。
项目简介:最近已经提出了几种支持单阶段训练和并行采样的端到端文本到语音 (TTS) 模型,但它们的样本质量与两阶段 TTS 系统的样本质量不匹配。在这项工作中,我们提出了一种并行的端到端 TTS 方法,它比当前的两阶段模型生成更自然的声音。我们的方法采用通过标准化流和对抗训练过程增强的变分推理,提高了生成建模的表达能力。我们还提出了一个随机持续时间预测器,以从输入文本中合成具有不同节奏的语音。通过对潜在变量的不确定性建模和随机持续时间预测器,我们的方法表达了自然的一对多关系,其中文本输入可以以不同的音高和节奏以多种方式说出。
- 论文地址:https://arxiv.org/abs/2106.06103 (opens new window)
- 项目地址:https://github.com/jaywalnut310/vits (opens new window)
应用实例:https://github.com/JOETtheIV/VITS-Paimon (opens new window)(效果体验:派蒙语音合成Google-Colab (opens new window))
# 2. GPT-SoVITS部署面板
# 2.1 准备实验环境
# 2.1.1 租用GPU服务器
实验环境:租用的AutoDL的GPU服务器,NVIDIA RTX 3080 / 10GB,Ubuntu20.04,Python 3.9, CUDA 11.8。
- 关于GPU服务器租用这里就不赘述了,详见我的另一篇博客:常用深度学习平台的使用指南 (opens new window)
# 2.1.2 安装基础环境
安装conda环境
$ curl -O https://repo.anaconda.com/archive/Anaconda3-2019.03-Linux-x86_64.sh // 从官网下载安装脚本
$ bash Anaconda3-2019.03-Linux-x86_64.sh // 阅读协议确认安装,安装完成后再输入yes以便不需要手动将Anaconda添加到PATH
$ conda create -n GPTSoVits python=3.9 // 安装虚拟环境,GPTSoVits是给虚拟环境起的别名(任意即可)
$ source /root/miniconda3/etc/profile.d/conda.sh // conda初始化
$ conda activate GPTSoVits // 激活虚拟环境
2
3
4
5
安装其他版本的CUDA/cuDNN
$ conda search cudatoolkit
$ conda install cudatoolkit==11.8.0
$ conda list cudatoolkit
$ conda search cudnn --channel nvidia
$ conda install cudnn=8.9.2.26
$ conda list cudnn
2
3
4
5
6
注:默认镜像都内置了最原生的CUDA和cuDNN,如果您自己安装了cudatoolkits等,那么一般会默认优先使用conda中安装的cudatoolkits。
# 2.2 部署GPT-SoVITS服务
# 2.2.1 拉取代码安装依赖
拉取GPT-SoVITS代码,使用官方提供的一键脚本安装依赖。
$ git clone https://github.com/RVC-Boss/GPT-SoVITS.git
$ cd GPT-SoVITS
$ conda activate GPTSoVits
$ bash install.sh
2
3
4
# 2.2.2 下载模型文件
可以通过如下链接并点击“下载副本”来下载这两个模型,然后将模型文件放置到指定目录。
- GPT-SoVITS Models (opens new window)(放到
./GPT_SoVITS/pretrained_models
目录) - UVR5 Weights (opens new window)(放到
./tools/uvr5/uvr5_weights
目录)
# 2.2.3 启动WebUI面板
启动服务,然后配置一下自定义服务(下同,不再赘述),在本地 http://localhost:9874
进行访问。
$ python3 webui.py
# 3. GPT-SoVITS训练模型
GPT-SoVITS WebUI提供了完整的数据集制作、模型微调训练、语音克隆推理功能,如果只是想体验效果,可以直接使用4.3节官方分享的派蒙语音模型。
# 3.1 数据集处理
# 3.1.1 UVR5提取人声
如果原音频足够干净可以跳过这步,比如游戏中提取的干声。
点击开启Open UVR5-WebUI,稍加等待之后,打开http://localhost:9873
地址。
先用HP2模型处理一遍(提取人声),然后将输出的干声音频再用onnx_dereverb最后用DeEcho-Aggressive(去混响),输出格式选wav。
处理完的音频vocal是人声,instrument是伴奏,vocal才是要用的文件,其他都可以删除,结束后建议到WebUI里关闭UVR5以节省显存。
# 3.1.2 切割音频
在切割音频前建议把所有音频拖进音频软件(如剪映)调整音量,最大音量调整至-9dB到-6dB,过高的删除。
打开WebUI,首先输入原音频的文件夹路径,然后建议可以调整的参数有min_length、min_interval和max_sil_kept单位都是ms,其他参数不建议调整。
- min_length根据显存大小调整,显存越小调越小。
- min_interval根据音频的平均间隔调整,如果音频太密集可以适当调低。
- max_sil_kept会影响句子的连贯性,不同音频不同调整,不会调的话保持默认。
点击开启语音切割,马上就切割好了,默认输出路径在output/slicer_opt。
打开切分文件夹,将时长超过“显存数”秒的音频手动切分至“显存数”秒以下。比如显卡是3080显存是10g,那么建议将超过10s的音频手动切分至10s以下或者直接删掉(稍微超一点儿的可以不管),音频时长太长的可能会爆显存。如果语音切割后还是一个文件,那是因为音频太密集了,可以调低min_interval。
# 3.1.3 音频降噪
如果原音频足够干净可以跳过这步,比如游戏中提取的干声。
输入刚才切割完音频的文件夹,默认是output/slicer_opt目录,然后点击开启语音降噪,默认输出路径在output/denoise_opt。
# 3.1.4 打标并校对
只要把刚才的切分文件夹输入,如果音频降噪过,那么默认是output/denoise_opt目录,如果切分了没有降噪,那么默认是output/slicer_opt目录。
然后选择达摩ASR或者fast whisper,点开启离线批量ASR就好了,默认输出是output/asr_opt这个路径。这里需要等待一些时间,因为它要下载模型。
- 达摩ASR只能用于识别中文,效果也最好。
- fast whisper可以标注99种语言,是目前最好的英语和日语识别,模型尺寸选large V3,语种选auto自动就好了。
由于识别出的文本不够准确,因此需要人工校对标注(这步比较费时间,如果不追求极致效果可以跳过。这里我只是为了跑个流程,此步骤就略过了)
- 注:如果有字幕的可以用字幕标注,那就更准确了,内嵌字幕或者外挂字幕都可以。
# 3.2 微调训练
# 3.2.1 数据集格式化
来到1-GPT-SOVITS-TTS选项卡,填写Experiment/model name(实验名,不要有中文)、Text labelling file(标注文件)、Audio dataset folder(音频数据集)
填写完成后,分别点击下面三个按钮,每个按钮点完后,等待执行结束再点击下一个。如果出现报错,就去看一下后台日志,有的报错重试就可以走通。
注:也可以直接使用 Start one-click formatting 按钮一键完成这三步操作。
# 3.2.2 训练微调模型
选择 1B-Fine-tuned training 子选项卡,配置batch_size等参数。然后依次点击 Start SoVITS training、Start GPT training。不可以一起训练(除非有两张卡)。如果中途中断了,直接再点开始训练就好了,会从最近的保存点开始训练。
sovits训练建议batch_size设置为显存一半以下,高了会爆显存,也不是越高就训练越快,它需要根据数据集大小调整,也并不是严格按照显存数一半来设置,如果爆显存就调低。以下是切片长度为10s时实测的不同显存的sovits训练最大batch_size,可以对照这个设置。如果切片更长、数据集更大的话要适当减少。
显存 | batch_size | 切片长度 |
---|---|---|
6g | 1 | 10s |
8g | 2 | 10s |
12g | 5 | 10s |
16g | 8 | 10s |
22g | 12 | 10s |
24g | 14 | 10s |
32g | 18 | 10s |
40g | 24 | 10s |
80g | 48 | 10s |
在0213版本之后添加了dpo训练。dpo大幅提升了模型的效果,几乎不会吞字和复读,能够推理的字数也翻了几倍,但同时训练时显存占用多了2倍多,训练速度慢了4倍,12g以下显卡无法训练。数据集质量要求也高了很多,如果数据集有杂音,有混响,音质差,不校对标注,那么会有负面效果。
如果你的显卡大于12g,且数据集质量较好,且愿意等待漫长的训练时间,那么可以开启dpo训练。否则请不要开启。下面是切片长度为10s时实测的不同显存的gpt训练最大batch_size。如果切片更长、数据集更大的话要适当减少。
显存 | 未开启dpo batch_size | 开启dpo batch_size | 切片长度 |
---|---|---|---|
6g | 1 | 无法训练 | 10s |
8g | 2 | 无法训练 | 10s |
12g | 4 | 1 | 10s |
16g | 7 | 1 | 10s |
22g | 10 | 4 | 10s |
24g | 11 | 6 | 10s |
32g | 16 | 6 | 10s |
40g | 21 | 8 | 10s |
80g | 44 | 18 | 10s |
接着设置轮数,SoVITS模型轮数可以设置的高一点,反正训练的很快。GPT模型轮数一般情况下建议设置10,不要高于20。
有关训练参数的常见问题:
- 关于高训练轮数:但高轮数并不就是好,如果要训练高轮数请先保证数据集质量极好,标注全都经过手动校对,时长至少超过1小时才有必要拉高轮数。否则默认的十几轮效果已经很好了。
- 关于数据集长度:请先保证数据集质量。音频千万不能有杂音,要口齿清晰,响度统一,没有混响,每句话尽量完整,全部手动校对标注。30分钟内有明显提升,不建议再增加数据集长度。
# 4. GPT-SoVITS推理服务
# 4.1 开启推理服务页面
选择 1C-inference 子选项卡,选择模型路径(没出来的话就点击右侧按钮刷新),然后点击 Open TTS inference WEBUI 按钮打开推理页面。
稍加等待之后,打开http://localhost:9872
地址。
# 4.2 使用语音克隆推理
第一步选择模型,第二步上传参考语音及文本(建议5s左右,参考音频很重要,会学习语速和语气,请认真选择),第三步输入用于语音克隆的文本。
# 4.3 模型分享及使用
分享需要的模型都在SoVITS_weights和GPT_weights这两个目录,选择合适轮数的模型,记得带上参考音频一起打包成压缩文件,就可以分享了。
官方提供了个极佳模型的分享(使用30小时派蒙数据集,100%正确率标注):派蒙-30h.zip (opens new window)
把它下载下来上传到SoVITS_weights和GPT_weights目录即可,然后使用参考音频体验其效果。
# 5. 参考资料
[1] GPT-SoVITS用一分钟语音完美克隆自己的声音 from 微信公众号 (opens new window)
[2] GPT-SoVITS指南 from 官方文档 (opens new window)
[3] GPT-SoVITS整合包教程 from 官方文档 (opens new window)
[4] GPT-SoVITS使用字幕标注 from 官方文档 (opens new window)