系统环境安装
所需硬件列表:
- 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-smi
和 nvcc -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_mem
与 cache_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
应震荡下降