【AI变声/翻唱】so-vits-svc指南
这篇专栏针对Windows系统,不过用GNU Linux的想必也不需要教程。
这不是一键包教程。
在开始之前,请先确保你有显存在6GB以上的N卡,10GB以上的可用磁盘空间(SSD),和足够的耐心。一次训练(包括浅扩散模型)可能要耗费数天时间。
环境准备
下载并安装Python(https://www.python.org/downloads/)
Python3.8.9为so-vits-svc官方推荐版本,但实测3.8.9到3.9.13均能正常运行,3.10及之后版本未测试,个人推荐3.9.13。在安装时请勾选Add to Path。安装完成后,在命令提示符(cmd)中执行python -V 和 pip -V,若正常输出版本则安装没有问题
可选项:安装Git(https://gitforwindows.org)
下载so-vits-svc(https://github.com/svc-develop-team/so-vits-svc)
如果你下载了git,请直接将仓库clone到本地。如果没有,点击绿色的Code,选择Download ZIP,下载压缩包并解压到本地。
搜索安装自己显卡对应的Cuda
在命令提示符(cmd)中导航到解压得到的so-vits-svc-4.1-Stable文件夹中,执行下面的命令,安装所需的第三方库:
pip install wheel
pip install -i https://pypi.douban.com/simple -r requirements_win.txt
注:这里使用的是豆瓣源,如果下载速度过慢请更换为其它源
由于pip会安装cpu版本的pytorch,因此需要卸载后重新安装Cuda版本的Pytorch
打开命令提示符,执行pip uninstall torch -y 和 pip uninstall torchvision -y
到https://pytorch.org/选择自己Cuda版本对应的Pytorch,执行Run this Command:后面的命令
至此,环境搭建完毕
训练、推理:
https://github.com/svc-develop-team/so-vits-svc/blob/4.1-Stable/README_zh_CN.md
这是官方的教程,很详细,请在完整阅读后看看下面的几点补充:
在确定使用某个声音编码器后最好不要再改,若想试试别的编码器请复制一份源码后重新添加预训练模型
若无法访问hugging face请看我之前的专栏
文章提供的预训练底模文件不全,这里提供部分底模下载
https://huggingface.co/datasets/ms903/sovits4.0-768vec-layer12
这里有vec768l12编码器的底模,若需要响度嵌入请下载vol_emb里的文件。下载后将它们重命名为D_0.pth和G_0.pth,放到logs/44k下。
https://github.com/CNChTu/Diffusion-SVC#21-训练完整过程的扩散预训练模型
请一并复制后边的中文后访问。这里有扩散模型的下载链接,请选择与你的声音编码器对应的版本。下载后将model_0.pt放到logs/44k/diffusion下。
训练
数据集质量比数量更重要,请一定不要为了数量而添加低质量/带混响的音频,这即会拖慢训练也会降低质量
请务必在运行preprocess_flist_config.py后修改config.json 与 diffusion.yaml
config.json
将all_in_mem改为true,除非数据集过大,你的内存实在不够用
将batch_size改为你的显存大小,以GB为单位(batch_size≠消耗的显存量,但我实测大致相等,不必是2的n次方)
diffusion.yaml
cache_all_data和config.json中的all_in_mem意思一样,默认开启,若你的内存不够用可改为false
batch_size默认48,实测大概2~5G显存占用,可适当调大
训练途中不要再更改参数,若要训练新模型请解压源码到新的目录并添加预训练模型和数据集
关于loss
tensorboard可视化:
打开命令提示符,执行tensorboard --logdir [你的模型输出路径,如.\logs\44k或.\logs\44k\diffusion]
若想在外部访问,请添加--bind_all参数
在浏览器中访问127.0.0.1:6006
这绝不是衡量模型的唯一标准,最好的loss计算器就是你自己。tensorboard网页中的audio选项卡里有评估样本,gen是推理得到的音频,gt是源音频。
loss/g/total上升,loss/d/total收敛:考虑数据集质量问题
floss/g/fm上升为正常现象
loss/g/total先下降后上升:考虑是否过拟合
loss/g/lf0应收敛在1e-4以下,loss/g/kl应收敛在0.5以下,loss/g/mel应震荡下降
推理
请确保你要用于推理的源音频很“干净”,没有杂音/伴奏,若无法除去请使用crepe作为f0预测器
仅支持单声道,若需要推理多声道音频请拆分后分别推理
对于歌声转换,个人推荐rmvpe f0预测器,效果相当好。需要下载预训练的 RMVPE 模型。
若效果不满意请更换参数反复测试,后期处理也是必要的,这里没有“一键处理”
f0预测器说明:
crepe:一种数据驱动的音高(f0)跟踪算法,它基于直接在时域波形上运行的深度卷积神经网络。自带均值滤波。
pm:蛇佬腔,默认f0预测器,效果不错,有时会有哑音
dio:基于歌声与语音声带振动周期提取的F0估计方法。
harvest: 语音的高性能f0估计。低音专精,推荐用于男声或语音转换。
rmvpe:复调音乐中f0估计的鲁棒模型。
此专栏在CC BY-SA 4.0下提供