0.项目思路

首先,配置项目环境,制作数据集,预处理数据集,配置训练参数,进行训练得到模型,把模型拿来推理,得到最终结果。
项目地址:https://github.com/svc-develop-team/so-vits-svc
后续更新专栏:https://docs.qq.com/doc/DUWdxS1ZaV29vZnlV?dver=
旧版整合包下载:https://pan.baidu.com/s/1HZg5scN9JFcwujyqe3xRdA?pwd=fuqm 提取码:fuqm (推荐去专栏中下载)
云端训练教程:https://www.bilibili.com/video/BV1vM4y1S7zB/ (注意选择so-vits-svc 4.0 webui镜像)
视频参考:https://www.bilibili.com/video/BV1H24y187Ko/?share_source=copy_web&vd_source=e1bb759c8ad4001f1201bdb4ffdc44fe

1. 制作数据集

1.1 收集数据

1~2小时的人声干声,以质量优先。质量>>数量

1.2 处理数据

主要是去除背景音乐,底噪与混响,做到尽可能的干声。

1.2.1 UVR5去除人声和声和混响

【分离伴奏】

  1. Process Method: Demucs
  2. Stem: Vocals
  3. Demucs Model: v3|UVR-Model-1
  4. 勾选 GPU Conversion
  5. 开始处理,得到纯人声素材

【消除混响和声】

  1. 输入纯人声素材
  2. Process Method: VR Architecture
  3. Window Size: 320
  4. Aggression: 10
  5. VR Model: 5_HP_Karaoke_UVR
  6. 勾选 GPU Conversion/ Vocals Only
  7. 开始处理,得到去除底噪和声的人声素材

1.2.2 Audio Slicer切片处理

  1. 将去除底噪和声的人声素材丢到Task List中
  2. Settings中Minimum Length (ms)数值改为8000
  3. 设置一下output的路径
  4. 开始切片

切片完成后,应该都是wav格式,44k采样率,16bit位深,如果不是的话请返回处理好。
理想情况下1个小时可以切出几百片,请将切片处在的文件夹命名为所属者的英文。比如“Niord”
我们把“Niord”文件夹丢到整合包的“dataset_raw”路径下。注意文件结构。

2. 数据集预处理

做完上述操作后,双击”数据预处理.bat”。(电脑比较拉的话,可以少量多次进行)【4.0v2整合包在这里已经整合进了webui,不用再调用脚本了】
预处理做的大致是——数据重采样至44100hz,并生成配置文件与hubert/f0文件。
在目录下“dataset/44k”中就是已经预处理好的数据集了。包含了npy,pt和wav文件。
如果缺少了对应的文件,可能是wav格式问题,虚拟内存问题,切片长短问题等等。
另外,在目录下“filelists”中train.txt为数据集,test和via.txt为验证集,可以检查确认。

3. 修改配置参数并训练

这是训练前的最后一步,打开目录下的configs文件夹里的config.json文件。

1
2
3
第7行:"learning_rate": 0.0001,     #与batch_size成正比。
第13行:"batch_size": 6, # 数据抓取量,数值越高,速度越快,但越吃显存。
第24行:"keep_ckpts": 10 # 保留的最新的模型数量,默认3,每个模型的大小约几百MB,我这里设为10

配置完成,双击“训练.bat”进行训练。
大致是训练一个个Epoch,每隔200步进行评估,显示模型质量与Loss(五个参数,越小越好)如果使用新包推理,可以使用tensorboard脚本看走势图。
训练好的模型会生成在logs/44k路径下,我们多多推理,选用推理效果最好的模型。
顺手可以训练一下聚类模型,3060大约在20分钟以内的样子。
关于看Loss,目前还比较玄学,但有一些炼丹经验,比如:“d/total”和“g/fm”最好保持稳定,“g/fm”一路向上就废了;后四个loss走势最好是反比例下降,一旦上飘不止就废了。

3.1 更多操作流程

  1. 终止训练:Ctrl+C (注意释放与否)
  2. 继续训练:双击训练.bat【4.0v2整合包也整合进了webui】
  3. 重新训练:需要删除一些文件:
    “logs/44k”中的文件全部删除
    “dataset/44k”中的文件全部删除
    “dataset_raw”中的文件全部删除
    “pre_tarined_model”中复制两个预训练模型,丢到“logs/44k”里面。
    然后就可以重新预处理数据集并再次训练。

最终生成的模型是一个pt文件与pth文件。这时“logs/44k”目录下会有eval、config.json、pth、pt、log等文件。

4. 推理

我们已经得到了模型,存放在“logs/44k”的路径下,接着我们双击“推理_webui.bat”,转浏览器local url

1
http://127.0.0.1:7860

打开webui,进行以下操作。

  1. 选择训练好的模型。(选G开头的,D开头的是判别器)
  2. 选择配置文件config.json
  3. 选择聚类模型(kmeans-10000.pt)
  4. 点击加载模型(数据质量差的话可以选模型增强,可以去除一定程度的电音)
  5. 选择音色(就是所属人)
  6. 上传要模仿的干声素材(控制在45s-60s以内,以免爆显存)可以用Goldwave/AU来裁剪。记得去除背景音乐、和声、底噪等。
  7. 调整聚类比例(聚类使得音色更像,但咬字下降)
  8. 勾选/不勾选 f0预测(用于语音转换,唱歌不能用)如果使用了f0,那么对于要模仿的原声要求标准就会降低。
  9. 选择f0均值滤波(池化)可以有效减少转音的哑音。
  10. 根据歌曲调式,进行变调,一般男女之间差了5个Key(5个半音),根据伴奏调式,选择要不要直接降一个八度(12key)。
  11. 点击转换生成
  12. 后续音轨合成工作。(交给PR/AU了)
5. 炼丹笔记

5.1 较小数据集训练记录

5-12s切片,426片,全长约66min,数据质量较好。
纯女人声素材,无唱歌素材。
loss收敛的很迅速,每一个epoch大约90s上下。
在epoch51时,停止第一次训练,步数模型7200步。
监听效果较好。
【以下是推理记录】
男推理,需要变调6-12.

  • 男说话,效果不好。(可能需要聚类)
  • 男低音,效果还行。
  • 男中音,效果一般。
  • 男狂音,效果不好。

  • 女说话,效果不好。(可能需要聚类)

  • 女低音,效果很好。
  • 女中音,效果很好。
  • 女高音,效果还行。
  • 女狂音,效果不好。