系统环境安装

所需硬件列表:

  • nVidia 显卡一张 本篇使用 Tesla P4
  • Windows 系统
  • 脑子

首先前往 Python Release Page 下载 Python。官方建议版本为 Python 3.8.9,但本篇教程使用的是 Python 3.10.11 无伤大雅。
其次安装显卡驱动,如果你和我一样使用的是计算卡的话,前往 nVidia datacenter driver 下载驱动程序。一般来说如果你不需要打游戏直接安装这页面里的即可,如果需要图形计算可以到文末下载 GRID 驱动(只在本人的 P4 上测试过)。
安装驱动时不需要安装 RTX Desktop Manager
安装完驱动后前往 CUDA Archive 安装 CUDA。版本根据你的驱动版本标注的选择即可。
全部安装完后,打开 cmd。输入 nvidia-sminvcc -V 检查安装状态。

获取源码

找到一个有足够空间的盘。

git clone https://github.com/svc-develop-team/so-vits-svc
cd so-vits-svc
pip install -r requirements.txt

准备模型

声音编码器

根据你选择声音编码器下载文件,详情可见项目自述文件。
如果你是小白,请选择 vec768l12 编码器(跟着我下面的步骤走即可)。
下载 checkpoint_best_legacy_500.pt 放在 pretrain 目录下。

底模

可在 Sucial 的 HuggingFace 仓库获取底模。
预训练底模文件: G_0.pth D_0.pth 放在 logs/44k 目录下。
扩散模型预训练底模文件: model_0.pt 放在 logs/44k/diffusion 目录下。

RMVPE f0 预测器(建议使用)

下载 rmvpe.zip 解压,并将其中的 model.pt 文件改名为 rmvpe.pt 并放在 pretrain 目录下。

数据集准备

仅需要以以下文件结构将数据集放入 dataset_raw 目录即可

dataset_raw
├───speaker0
│   ├───1.wav
│   ├───...
│   └───z.wav
└───speaker1
    ├───xx2-0xxx2.wav
    ├───...
    └───xxx7-xxx007.wav

文件名取名没有要求,但必须是波形音频文件。

数据预处理

音频切片

将音源切分成 5s-15s 一个的音频文件作为数据集按照上文格式放好。
如果你使用 Whisper-ppg 声音编码器进行训练,所有的切片长度必须小于 30s

重采样

python resample.py

划分训练集与验证集

python preprocess_flist_config.py --speech_encoder vec768l12

修改配置文件

配置文件位于 configs 目录下。
以下文字摘录自官方自述文件。

config.json:
keep_ckpts:训练时保留最后几个模型,0为保留所有,默认只保留最后3个
all_in_mem:加载所有数据集到内存中,某些平台的硬盘 IO 过于低下、同时内存容量 远大于 数据集体积时可以启用
batch_size:单次训练加载到 GPU 的数据量,调整到低于显存容量的大小即可
vocoder_name:选择一种声码器,默认为nsf-hifigan.

diffusion.yaml:
cache_all_data:加载所有数据集到内存中,某些平台的硬盘 IO 过于低下、同时内存容量 远大于 数据集体积时可以启用
duration:训练时音频切片时长,可根据显存大小调整,注意,该值必须小于训练集内音频的最短时间!
batch_size:单次训练加载到 GPU 的数据量,调整到低于显存容量的大小即可
timesteps: 扩散模型总步数,默认为 1000.
k_step_max: 训练时可仅训练k_step_max步扩散以节约训练时间,注意,该值必须小于timesteps,0 为训练整个扩散模型,注意,如果不训练整个扩散模型将无法使用仅扩散模型推理!

个人建议all_in_memcache_all_data 开启,除非你的内存实在过于小。batch_size 按需修改,我的 8g 显存可用 6

生成 hubert 与 f0

python preprocess_hubert_f0.py --f0_predictor rmvpe --num_processes 2

训练

训练主模型

python train.py -c configs/config.json -m 44k

开启 tensorboard

tensorboard --logdir logs/44k

关于loss

这绝不是衡量模型的唯一标准。tensorboard 网页中的 audio 选项卡里有评估样本,gen 是推理得到的音频,gt 是源音频。

loss/g/total 上升,loss/d/total 收敛:考虑数据集质量问题
loss/g/total 先下降后上升:考虑是否过拟合
loss/g/lf0 应收敛在 1e-4 以下,loss/g/kl 应收敛在 0.5 以下,loss/g/mel 应震荡下降

最后修改:2024 年 04 月 14 日
如果觉得我的文章对你有用,请随意赞赏