开始之前#
so-vits-svc 是一个可以将声音训练成为一个可以唱歌的模型并且通过这个模型转换歌声的项目,svc 即 Singing Voice Conversion(歌声转换)的缩写。而 GPT-SoVITS 是属于 tts (文本转语音),开始之前请注意两者区别。
本教程使用 bilibili@羽毛布団 的整合包,依据 GitHub 上的项目:
SoftVC VITS Singing Voice Conversion
该项目现在已经存档,只能访问和克隆等,最新版本是 4.1。之前 GitHub 上的 5.0 版并非官方的后续版本,该项目作者通过偷取成果、碰瓷甚至开盒 So-VITS 开发者的方式为自己赚取名声,行径极其恶劣,任何为其贡献热度的行为都是在损害开源社区生态,因此不建议任何人使用该项目。
许可证声明作品简介模板#
So-VITS 项目使用 AGPL-3.0 许可证,任何基于 So-VITS 项目和本整合包产出的作品必须遵循以下协议条款:
- 未经授权同意,禁止在音视频网站发布的作品中标注项目仓库地址、仓库作者、贡献者、整合包作者的信息。
- 必须在作品中标注免责声明,免去仓库作者、贡献者、整合包作者对该作品一切后果的责任。
- 无论以任何形式二次发布基于该项目的软件,都必须同时开放源代码。
准备#
最好在开始之前准备好想要制作模型的声音文件,尽量不要包含背景音,电流音,杂音等等,声音越干净越好。语音时长最好大于 10min,30min为最佳。
电脑要求:
- 显卡显存至少在 6G 或以上;
- 显卡支持 NVIDIA-CUDA;
- python 版本 >= 3.1(官方在自述文件中告诉
Python 3.8.9
能够稳定地运行该项目)
当然,以上以上条件不满足可以自己租赁云计算服务,我在本教程使用的是 AutoDL 你可以使用其他的平台,操作类似。
开始安装#
如果是在自己电脑上进行部署可以直接前往下载(Windows 版)
如果是使用云计算服务可以尝试在社区镜像中寻找,关键词为so-vits-svc
。
显卡选择便宜的并且显存大于 6G 即可。
运行 WebUI#
成功开机后选择「JupyterLab」,打开 JupyterLab 界面。
接下来如果你不懂 python 可以按照你的镜像中告诉你的信息进行运行即可,下面使用使用的镜像进行示例。
svc-develop-team/so-vits-svc/so-vits-svc-4.1-Stable / v14.2
进行的操作。仅仅作为参考,镜像不同请不要直接进行使用,具体请根据自己使用的镜像进行操作。首先运行移动文件到自己数据盘:
选择
#移动项目文件夹到数据盘以节约系统盘空间
%mv /root/workdir /root/autodl-tmp
再点击编辑器左上角「▶(运行指定单元格并向前移动)」,以下步骤类似;
然后再让工作区进入到项目文件夹中:
#进入项目文件夹
%cd /root/autodl-tmp/workdir/so-vits-svc
接下来的步骤可以直接使用 WebUI 进行操作,跳到启动 WebUI 步骤:
#使用webui进行推理,也可以进行训练,不过用笔记本会多两个编码器
#运行后会生成两条链接,一条是本地端口6006,通过自定义服务访问或者通过ssh隧道访问(强烈建议通过ssh隧道,关于如何使用请看 BV1oh4y1n7Nv )
# 另一条是公共端口,可以直接在其他电脑上打开,貌似只能用于推理
!python app.py
然后就会有运行结果,点击Running on public URL
后的链接:
进入到 WebUI 后就可以开始进行数据预处理等了。
数据预处理#
数据预处理主要有提炼人声和音频切割两部分。
提取人声#
首先将在准备过程准备好的音频进行降噪和去除背景音,如果你的音频已经非常干净就不需要了。
降噪和去除背景噪音十分推荐使用 UVR5。但是 UVR5 也对显卡有一定性能要求。如果电脑实在不够可以尝试将 GPT-SoVITS
克隆到机器上单独使用其中的 UVR5 WebUI 版本。
1 min voice data can also be used to train a good TTS model! (few shot voice cloning)
当然,音频切割也可以在 GPT-SoVITS 中完成。
音频切割#
这里如果你使用了 GPT-SoVITS 可以在预处理工具中找到音频切割 WebUI 工具,如果没使用 GPT-SoVITS 其实在 so-vits-svc 中也有包括音频切割工具。
将原音频放在云机器上在「原始音频文件夹」一项键入正确的文件夹路径,输出文件夹也键入想要输出的路径,然后点击「加载原始音频」。没有想要更改的设定的话加载完毕后点击「开始切片」即可。
生成底模#
在dataset_raw
文件夹下创建一个角色名称目录,我这里就叫做Mushnine
,让后将切出来的所有音频放入这个你创建的文件夹中。请注意是dataset_raw
再新建一个文件夹。
回到 WebUI,选项卡选择「训练」。点击「识别数据集」,查看是否有你刚刚创建的文件夹名字,没有的话确认一下是不是在dataset_raw
下新创建文件夹再将音频切片放进去的。如果发现还有一个ipynb_checkpoints
不用在意。
如果你是萌新接下在这些参数都不用动,直接点击「数据预处理」。然后会在预处理输出信息
的框中显示预处理的输出,等待显示 100%
后可以先清空一下输出信息。
模型训练#
接下来就可以进行模型训练了:
「当前使用显卡信息」: 确认是否是自己的显卡型号;
「多卡用户请指定希望训练使用的显卡ID」: 字面意思;
「每隔多少步(steps)生成一次评估日志」: 填入想要多少步打印一次训练的评估日志,例如我填了 200
2025-02-19 02:15:29,695 44k INFO Train Epoch: 20 [90%] 2025-02-19 02:15:29,696 44k INFO Losses: [2.5530827045440674, 2.2724742889404297, 8. 821123123168945, 14.801704406738281, 1.3729219436645508], step: 200, lr: 9. 976276699833672e-05, reference_loss: 29.821304321289062
「每隔多少步(steps)验证并保存一次模型」: 字面意思,期望每多少步保存一次模型,你可以通过观察评估日志决定到哪一步可以中断训练
下面的参数都不用动了,观察「说话人列表」是否为在dataset_raw
文件夹中新建的文件夹名称。
点击「写入配置文件」后点击「从头开始训练」即可,然后回到 JupyterLab,可以看到训练模型的输出,到了你觉得合适的时候就可以点击左上角「⏹(中断内核)」。(一般训练到 5000 步可以进行测试,训练到 10000 步可以进行使用)。
你可以将训练到合适的模型下载下来修改成自己方便认识的名称保存在本地,记同时将对应的config.json
下载下来。训练出来的模型一般在logs/44k/
文件夹下。
推理#
终于可以开始推理了。顶部选择「推理」选项卡。(如果使用的是外部下载的模型config
请存放在config
文件夹下,模型存放在logs/44k/
文件夹下。)
首先选择你想要使用的模型,等加载完毕后再选择对应的配置文件(config)。
如果之前没有训练浅扩散模型下面浅扩散模型相关的就不用管了,到下面选择「加载模型」即可。(需要浅扩散模型可以到「训练」中自行训练一份)
下面的选项都在项目名后面有介绍,按需选择,一般默认即可。
接下来将想要唱出来的纯人声进行上传,如果有多份可以先上传到机器上然后在「批量音频上传」选择音频文件夹(如果没有纯人声可以通过 UVR5 将想要唱的歌人声提炼出来)。接下来点击「音频转换」,等待推理结束就可以听到你想要的结果了。
参考和鸣谢#
- so-vits-svc 项目组和项目
- bilibili@羽毛布団 和制作的整合包及对应使用文档