配置要求
一张支持 CUDA 的 nVIDIA 显卡,拥有至少 6G 以上显存下载地址
百度网盘
提取码:g8n4Google Drive
https://drive.google.com/file/d/1qEjZW3Lrf0QTjs8vkx1MyvT0naEETp5A/view?usp=sharing
增量更新 ⚠️v1.x 版本的整合包无法通过增量更新更新至 v2,请参考这里了解更新方式
百度网盘:https://pan.baidu.com/s/1N-47gaAFE1Ewd4hrOQEu8A?pwd=yryv 提取码:yryv底模DLC
预训练模型(底模)可以大大减少小数据集的训练难度。整合包内已经自带了底模,并会在训练时自动加载。但是目前 Vec768l12 编码器有一个更强的底模。你可以自行下载并替换原来的底模。1将下载的底模分别改名为 G_0.pth 和D_0.pth
2替换到 pre_trained_model/768l12 目录下同名文件
下载地址:
ms903/sovits4.0-768vec-layer12 at main
在开始之前
为了避免在之后的使用中出现各种意料之外的问题,请务必对照下面的 Checklist 检查本机环境。关闭全局梯子 / 绕过局域网
使用推荐的浏览器(✅Chrome / Edge / Firefox)
关闭浏览器自带的网页翻译功能
关闭所有第三方杀毒软件 / 安全卫士等
将系统虚拟内存设置为至少 30G
部分浏览器(尤其是 Edge)会出现 WebUI 打开后无法正常工作的现象。如果遇到卡死/无法点击交互等现象,请尝试更换为上述推荐的其他浏览器。 ### 启动 WebUI 本整合包的所有训练/推理流程均在浏览器交互界面(WebUI)中实现。
1将整合包解压至硬盘内,请确保硬盘内至少还有 20GB 的剩余空间
2双击整合包内启动webui.bat即可启动 WebUI,初次使用需要初始化,可能会等待较长时间,启动完成后将会使用默认浏览器自动弹出 WebUI 窗口。
推理
推理 (Inference) 是指将输入源音频通过 So-VITS 模型转换为目标音色的过程。因此,执行 So-VITS 的推理过程,你必须拥有:
名称 | 文件后缀 | 存放目录 | 描述 |
---|---|---|---|
So-VITS 模型 | .pth | .\logs\44k | 推理所必须的神经网络模型 |
配置文件 | .json | .\configs | 存放模型参数的配置文件,必须与模型一一对应 |
名称 | 文件后缀 | 存放目录 | 描述 |
---|---|---|---|
聚类 (Kmeans) 模型 | .pt | .\logs\44k | 执行混合聚类方案必须的模型 |
扩散模型 | .pt | .\logs\44k\diffusion | 执行浅扩散推理必须的模型 |
扩散模型配置文件 | .yaml | .\configs | 存放扩散模型参数的配置文件,必须与模型一一对应 |
特征索引模型 | .pkl | .\logs\44k | 执行混合特征索引必须的模型 |
⚠️在默认模式下,上述所有文件必须放置在对应的存放目录,否则无法正常读取。如有较多模型,可以启用独立目录模式管理模型,具体请参考多模型管理。
从外部迁移模型
⏩从外部转移模型时,只要将对应的文件放置到models文件夹下,然后在 WebUI 底部启用独立目录模式即可(详情参考多模型管理)。模型的文件名可以任意更改,但请保持后缀不变。聚类模型和扩散模型使用的是同一个后缀(.pt),请在重命名时显著区分这两种模型。⚠️从云端下载模型时,请务必注意只有”G“模型才是推理可用的模型。错误下载”D“模型将无法正常推理。 ### 加载模型 在推理过程中,模型会默认被加载到 CUDA 设备(显卡)或 CPU 上,取决于你当前可用的设备。按照以下步骤加载模型:
1选择所使用的 So-VITS 模型,此时会自动读取模型所使用的编码器
⏩关于不同的编码器详解,请参考训练 - 编码器详解
2选择该模型对应的配置文件,此时会自动读取配置文件中的编码器参数
⚠️配置文件与模型的编码器必须对应,否则无法正常推理。旧版模型需要修改配置文件以兼容 4.1 版本,关于如何修改配置文件兼容,请参考旧模型兼容。
3如需使用浅扩散、聚类模型、NSF-HifiGAN 声码器增强器,请自行选择
4点击加载模型
浅扩散、聚类模型及声码器增强器需要在选中后再加载模型。如果已经有模型加载,选中选项后需要重新加载模型。
模型加载需要大约 10-30 秒,多说话人模型可以在 So-VITS 说话人列表中选择对应的说话人。
上传音频并转换
你需要首先上传一段输入源音频才能进行转换,优秀的输入源音频的要求是:●纯人声,无伴奏、底噪、和声、混响等
●WAV 格式,44100 hz,16 bit
⏩关于如何从歌曲中分离伴奏、去除混响和声,请参考训练 - 数据集处理 - 人声伴奏分离
⏩整合包中预装了 FFmpeg,因此即便不是 44100 hz, 16 bit 的 WAV 文件也可以上传。如果在推理时遇到 FFmpeg 相关的错误,请重启 WebUI 后再次尝试,或手动使用音频处理软件转换为正确的格式
一般来说,默认的参数对于转换歌曲足够使用。你也可以参考推理参数详解来了解各个推理可选项的参数说明
训练
训练是指使用目标说话人的音声数据集令 AI 学习特征并生成神经网络模型。在训练之前,你需要准备:目标说话人的授权数据集(至少 30 分钟的纯人声 / 歌声,1-2 小时最佳)
音频处理软件(Adobe Audition, UVR5)
本整合包
⚠️训练过程的显卡负载非常高,且一般会持续数小时,在此期间建议不要使用计算机进行其他的任务。 ### 数据集处理 人声伴奏分离
如果你使用的是带伴奏的歌曲作为数据集,那么请一定要将人声从伴奏中分离出来。分离伴奏和人声推荐使用 Ultimate Vocal Remover 5 (UVR5), 并下载对应的处理模型。一些推荐的处理模型和功能如下:
●Demucs - v3 | UVR_Model_1: 分离人声及伴奏
●VR Architecture - 5_HP-Karaoke-UVR: 分离和声
●VR Architecture - UVR-DeEcho-DeReverb: 去除混响和回声
⏩上述所有模型均可在 UVR5 软件选择模型处 —— Download More Models 下载
需要注意的是,没有任何一种方法能够做到无损分离人声。当歌曲中的伴奏越复杂,分离后的人声失真越严重。较差的人声质量会显著影响模型训练的结果。 ### 音频切片 数据集的音频需要切分成数秒至数十秒的片段。一般来说 3- 15 秒为佳。在 WebUI 里整合了一个智能音频切片工具,可以满足上述切片要求。
⚠️在切片之前,请将待切片的音频文件以纯数字、字母、下划线命名。
1打开 WebUI - 小工具/实验室特性 - 智能音频切片
2将包含所有待处理音频文件(.wav 格式)的文件夹路径输入到原始音频文件夹内
3点击加载原始音频,确认音频被正确识别
4输入切片后的输出目录,选择对过短音频的处理方式
5开始处理
预处理
数据集预处理的流程是:响度匹配 —— 重采样 —— 生成配置文件 —— 提取特征
⚠️注意:虽然 So-VITS 项目自带响度匹配脚本,但该脚本会将音频匹配到 0db, 这可能会造成音质的受损。最佳的做法是使用专业音频处理软件,如 Adobe Audition自行对数据集进行响度匹配处理后再进入预处理流程。如果数据集已经完成了响度匹配或启用了响度嵌入,可以在预处理时跳过程序自带的响度匹配流程。
上述所有流程在 WebUI 中均可一键完成:
1将上一步切片完成的数据集文件夹放置到整合包根目录下dataset_raw文件夹内
⚠️请注意文件结构:dataset_raw/speaker_name/*.wav
2在 WebUI 训练选项卡中,点击识别数据集,确认数据集被正确识别
3根据说明自行选择训练使用的编码器和 f0 预测器
编码器详解
编码器名称 | 优点 | 缺点 |
---|---|---|
vec256l9 | - | 不支持扩散模型 |
vec768l12(推荐) | 最还原音色、有大型底模、支持响度嵌入 | 咬字能力较弱 |
hubertsoft | 咬字能力较强 | 音色泄露 |
whisper-ppg | 咬字最强 | 音色泄露、显存占用高 |
🦻音色泄露指的是输出的音色向底模/推理输入源的原始音色接近,模型说话人越多,音色泄露越严重。考虑到大多数人都希望尽可能还原目标说话人的音色,因此音色泄露被认为是一种不受欢迎的结果。
4如要训练扩散模型或启用响度嵌入,请自行勾选
勾选训练扩散后将会提取扩散模型所需的特征文件,会占用更多硬盘空间。有关扩散模型的详细说明,请参考训练参数详解。
⚠️启用响度嵌入需要选择 Vec768L12 编码器,其它编码器没有响度嵌入的底模。
5点击数据预处理
数据预处理的输出信息中可能存在报错信息。如果出现报错,则代表数据预处理未完成。你可以参考常见报错和解决方案自行排障。
⚠️数据预处理可以多进程执行,但会显著占用显存和内存。建议 6G 以下显存不要开启多线程。12G 以下显存不要将线程数设置为 2 以上。
⚠️同一个数据集只需要预处理一次,往后继续训练不需要也不可以重新预处理! ### 训练参数设置和开始训练 请参考 WebUI 中的说明自行设置参数并开始训练。有关训练参数和聚类模型的更多说明,请参考训练参数详解。
训练过程中会根据你之前设置的保存步数(默认为 800 步)保存一次模型。
请严格区分轮数 (Epoch) 和步数 (Step):1 个 Epoch 代表训练集中的所有样本都参与了一次学习,1 Step 代表进行了一步学习,由于 batch size 的存在,每步学习可以含有数条样本,因此,Epoch 和 Step 的换算如下:
Epoch=(数据集条数÷batc__hsize)Step_
Tensorboard
可以用 Tensorboard 来查看训练过程中的损失函数值 (loss) 趋势,试听音频,从而辅助判断模型训练状态。
1双击启动tensorboard.bat运行 Tensorboard
Tensorboard 是根据训练时默认每 200 步的评估生成日志的,如果训练未满 200 步,则 Tensorboard 中不会出现任何图像。
Losses 详解
你不需要理解每一个 loss 的具体含义,大致来说:
●loss/g/f0、loss/g/mel和loss/g/total应当是震荡下降的,并最终收敛在某个值
●loss/g/kl应当是低位震荡的
●loss/g/fm应当在训练的中期持续上升,并在后期放缓上升趋势甚至开始下降
观察 losses 曲线的趋势可以帮助你判断模型的训练状态。但 losses 并不能作为判断模型训练状态的唯一参考,甚至它的参考价值其实并不大,你仍需要通过自己的耳朵来判断模型是否训练好了。
对于小数据集(30分钟甚至更小),在加载底模的情况下,不建议训练过久,这样是为了尽可能利用底模的优势。数千步甚至数百步就能有最好的结果。