so-vits-svc-Deployment-Documents

GitHub
747 106 较难 1 次阅读 3周前AGPL-3.0开发框架
AI 解读 由 AI 自动生成,仅供参考

so-vits-svc-Deployment-Documents 是一套专为 SoftVC VITS 歌声转换项目打造的本地部署指南,旨在帮助用户轻松搭建和运行 so-vits-svc 模型。它详细记录了从环境配置、依赖安装到数据预处理、模型训练及推理的全过程,并提供了可直接运行的 Google Colab 笔记本,让用户无需在本地复杂配置即可快速体验。

这套文档主要解决了开源歌声转换项目在落地过程中常见的“门槛高、易报错、文档分散”等痛点。通过分步骤的教程和常见错误解决方案,它大幅降低了用户将算法转化为实际应用的时间成本。此外,文档还特别强调了法律合规性,提醒使用者遵守相关法律法规,尊重声音权益。

该资源非常适合希望尝试歌声转换技术的普通爱好者、需要本地化部署方案的开发者,以及从事音频算法研究的研究人员。对于不想手动配置环境的用户,文档也推荐了成熟的整合包作为替代方案。其技术亮点在于对 4.1 版本的深度适配、详尽的编码器解析以及对旧版本用户的分支指引,确保了不同需求层次的用户都能找到适合自己的路径。无论是想制作个人翻唱作品,还是进行二次开发,这份文档都是不可或缺的实用手册。

使用场景

一位独立音乐人希望将自己录制的干声歌曲转换为特定歌手的音色,以制作高质量的 AI 翻唱作品,但缺乏深度学习环境配置经验。

没有 so-vits-svc-Deployment-Documents 时

  • 面对复杂的 Python 依赖库和 PyTorch 版本冲突,手动配置本地环境屡屡失败,耗费数天仍无法运行代码。
  • 不清楚数据预处理的具体标准(如切片长度、重采样至 44100Hz 单声道),导致训练数据格式错误,模型无法收敛。
  • 缺少预训练模型下载指引和编码器详细说明,不得不盲目搜索资源,甚至下载到不兼容的旧版本文件。
  • 遇到报错时无处查证,官方文档过于简略,只能在外网论坛大海捞针寻找解决方案,学习曲线极其陡峭。
  • 因害怕操作失误损坏系统,不敢尝试本地部署,最终被迫放弃个性化音色定制的想法。

使用 so-vits-svc-Deployment-Documents 后

  • 直接利用提供的 Colab 笔记本或按部就班的安装教程,快速解决环境依赖问题,半小时内即可启动项目。
  • 依据清晰的音频处理指南(含 FFmpeg 使用及自动切片说明),轻松完成标准化数据准备,确保训练顺利进行。
  • 通过文档中列出的必选与可选模型文件清单,精准下载预训练底模和编码器,避免了版本不匹配的陷阱。
  • 参考“常见错误解决方案”章节和详细的调试步骤,迅速定位并修复运行中的报错,大幅降低试错成本。
  • 在详尽的流程指引下成功完成本地部署与推理,顺利生成目标音色的翻唱作品,实现了创作自由。

so-vits-svc-Deployment-Documents 将高门槛的算法部署转化为可执行的标准化流程,让非技术背景创作者也能轻松驾驭顶尖的歌声转换技术。

运行环境要求

操作系统
  • Windows
  • Linux (需自行解决)
  • macOS (需自行解决)
GPU
  • 训练必需 NVIDIA GPU,显存至少 6GB
  • 推理可选 CPU 或 GPU
  • 未明确说明具体 CUDA 版本
内存

虚拟内存至少 30GB(建议设置在 SSD 上),物理内存未明确说明最低/推荐值。

依赖
notes1. 训练必须使用 GPU,推理可使用 CPU 但速度较慢。2. 务必将系统虚拟内存设置为至少 30GB 且最好位于 SSD,否则速度极慢。3. 需提前下载预训练底模文件。4. 数据集要求:至少 30 分钟干净人声(无背景噪音、无混响),音域越宽越好。5. 文档主要在 Windows 上测试,Mac 和 Linux 用户需具备自行解决问题的能力。6. 建议使用 Google Colab 进行云端训练。
python未说明 (文档目录提及 Python 但未列出具体版本号)
PyTorch
FFmpeg
so-vits-svc-Deployment-Documents hero image

快速开始

SoftVC VITS 歌唱语音转换本地部署教程

在 Google Colab 中打开
English | 简体中文
本帮助文档提供了项目 so-vits-svc 的详细安装、调试和推理教程。您也可以直接参考官方的 README 文档。
由 Sucial 撰写。Bilibili | Github


点击查看:配套视频教程 | UVR5 人声分离教程(注:配套视频可能已过时,请以最新教程文档为准!)

相关资源:官方 README 文档 | 常见错误解决方案 | 羽毛布団

[!IMPORTANT]

  1. 重要!请先阅读! 如果您不想手动配置环境或正在寻找集成包,请使用 羽毛布団 提供的集成包。
  2. 关于旧版本教程:如需 so-vits-svc3.0 版本的教程,请切换到 3.0 分支。该分支已不再更新!
  3. 持续改进文档:如果您遇到本文未提及的错误,可在 issues 区域提问。对于项目本身的 bug,请向原项目提交 issue。如果您希望改进本教程,欢迎提交 PR!

教程目录

0. 使用前须知

任何国家、地区、组织或个人使用本项目时,必须遵守以下法律:

民法典

第一千零一十九条

任何组织或者个人不得以丑化、污损,或者利用信息技术手段伪造等方式侵害他人的肖像权。未经肖像权人同意,不得制作、使用、公开肖像权人的肖像,但是法律另有规定的除外。未经肖像权人同意,肖像作品权利人不得以发表、复制、发行、出租、展览等方式使用或者公开肖像权人的肖像。对自然人声音的保护,参照适用肖像权保护的有关规定。 对自然人声音的保护,参照适用肖像权保护的有关规定

第一千零二十四条

【名誉权】民事主体享有名誉权。任何组织或者个人不得以侮辱、诽谤等方式侵害他人的名誉权。

第一千零二十七条

【作品侵害名誉权】行为人发表的文学、艺术作品以真人真事或者特定人为描述对象,含有侮辱、诽谤内容,侵害他人名誉权的,受害人有权依法请求该行为人承担民事责任。行为人发表的文学、艺术作品不以特定人为描述对象,仅其中的情节与该特定人的情况相似的,不承担民事责任。

中华人民共和国宪法》|《中华人民共和国刑法》|《中华人民共和国民法典》|《中华人民共和国合同法

0.1 使用规定

[!WARNING]

  1. 本教程仅用于交流和学习目的,请勿将其用于非法活动、违反公共秩序或其他不道德的目的。为尊重音频来源提供者,请勿将本教程用于不当用途。
  2. 继续使用本教程即表示您同意此处所述的相关规定。本教程仅履行其指导义务,不对后续可能出现的问题承担责任。
  3. 请自行解决数据集授权问题。请勿使用未经授权的数据集进行训练!因使用未经授权的数据集而产生的任何问题均由您自行负责,与本仓库、仓库维护者、svc开发团队或教程作者无关。

具体使用规定如下:

  • 本教程的内容仅代表个人观点,不代表so-vits-svc团队或原作者的观点。
  • 本教程假定使用so-vits-svc团队维护的仓库。请遵守所涉及的任何开源代码的开源许可证。
  • 基于sovits制作并发布在视频平台上的任何视频,都必须在说明中明确注明用于语音转换器的输入歌声或音频来源。例如,如果在分离人声后使用他人的视频或音频作为输入源,则必须提供原始视频或音乐的清晰链接。如果使用自己的声音或由其他语音合成引擎合成的声音,也必须在说明中予以注明。
  • 确保用于创建数据集的数据来源合法合规,并且数据提供者知晓您正在创作的内容及其可能带来的后果。因输入来源引发的任何侵权问题均由您自行负责。在使用其他商业语音合成软件作为输入来源时,务必遵守该软件的使用条款。请注意,许多语音合成引擎的使用条款明确禁止将其用作转换的输入源!
  • 云端训练和推理可能会产生费用。如果您是未成年人,请在继续操作前征得监护人的许可和理解。本教程不对未经授权使用可能引发的任何后续问题负责。
  • 本地训练(尤其是在性能较弱的硬件上)可能需要设备长时间高负载运行。请确保对设备采取适当的维护和散热措施。
  • 由于设备原因,本教程仅在Windows系统上进行了测试。对于Mac和Linux用户,请确保具备一定的问题解决能力。
  • 继续使用本仓库即表示您同意README中所述的相关规定。本README仅履行其指导义务,不对后续可能出现的问题承担责任。

0.2 硬件要求

  1. 训练必须使用GPU进行!对于推理,可以通过命令行推理WebUI推理完成,若对速度要求不高,可使用CPU或GPU。
  2. 如果您计划训练自己的模型,请准备一块至少具有6GB显存的NVIDIA显卡
  3. 确保您的计算机虚拟内存设置为至少30GB,最好将其设置在SSD上,否则会非常缓慢。
  4. 对于云端训练,建议使用Google Colab,您可以按照我们提供的sovits4_for_colab.ipynb进行配置。

0.3 准备工作

  1. 准备至少30分钟(越多越好!)的干净人声作为您的训练集,要求无背景噪声且无混响。演唱时最好保持音色一致,确保音域宽广(训练集的音域决定了训练后模型的音域!),并使音量适中。如果可能,可使用Audition等音频处理软件进行音量匹配
  2. 重要! 提前下载训练所需的基础模型。请参考2.2.2 预训练基础模型(强烈推荐)
  3. 对于推理:准备干燥的人声,要求背景噪声<30dB,最好无混响或和声

[!NOTE]

注1:唱歌和说话都可以作为训练集,但使用语音作为训练集可能会导致推理时高低音出现问题(通常称为音域问题或声音闷塞),因为训练集的音域很大程度上决定了训练后模型的音域。因此,如果您的最终目标是实现歌唱效果,建议使用唱歌的人声作为训练集。

注2:当使用男声模型来推理女歌手演唱的歌曲时,若出现明显闷塞现象,可尝试降低音高(通常降低12个半音,即一个八度)。同样地,当使用女声模型来推理男歌手演唱的歌曲时,可以尝试提高音高。

✨ 2024年3月8日最新建议 ✨:目前,GPT-SoVITS项目的TTS(文本转语音)功能相比so-vits-svc的TTS,所需训练集更小、训练速度更快且效果更好。因此,如果您希望使用语音合成功能,请切换至GPT-SoVITS。相应地,建议在此项目中使用唱歌的人声作为训练集。

1. 环境依赖

本项目所需环境: NVIDIA-CUDA | Python = 3.8.9(推荐此版本)| Pytorch | FFmpeg

您也可以尝试使用我的脚本进行一键环境搭建和WebUI启动:so-vits-svc-webUI-QuickStart-bat

1.1 so-vits-svc4.1 源代码

您可以通过以下任一方式下载或克隆源代码:

  1. 从Github项目页面下载源代码ZIP文件:前往so-vits-svc官方仓库,点击右上角的绿色Code按钮,选择Download ZIP即可下载压缩包。如果需要其他分支的代码,请先切换到相应分支。下载完成后,将ZIP文件解压到任意目录,该目录即为您的工作目录。

  2. 使用git克隆源代码:运行以下命令:

    git clone https://github.com/svc-develop-team/so-vits-svc.git
    

1.2 Python

  • 请访问Python官方网站下载Python 3.8,并将其添加到系统环境变量PATH中。详细的安装方法及Path配置在此不再赘述,网上均可轻松找到相关教程。
# Conda配置方法,将YOUR_ENV_NAME替换为您想要创建的虚拟环境名称。
conda create -n YOUR_ENV_NAME python=3.8 -y
conda activate YOUR_ENV_NAME
# 在执行任何命令之前,请确保您已进入该虚拟环境!
  • 安装完成后,在命令提示符中输入python。若输出类似如下内容,则表示安装成功:

    Python 3.8.9 (tags/v3.8.9:9d38120, Mar 23 2022, 23:13:41) [MSC v.1929 64 bit (AMD64)] on win32
    Type "help", "copyright", "credits" or "license" for more information.
    >>>
    

关于Python版本:经测试,Python 3.8.9可稳定运行该项目(尽管更高版本也可能适用)。

1.3 Pytorch

[!IMPORTANT]

✨ 我们强烈建议您安装Pytorch 11.7或11.8。版本高于12.0可能与当前项目不兼容。

  • 我们需要单独安装torchtorchaudiotorchvision库。直接访问Pytorch官网选择所需版本,然后将“Run this Command”部分显示的命令复制到控制台执行安装。您还可以从这里下载旧版本的Pytorch。

  • 安装完torchtorchaudiotorchvision后,在cmd控制台中使用以下命令检查torch是否能成功调用CUDA。若最后一行显示True,则表示成功;若显示False,则需重新安装正确版本。

python
# 按Enter键执行
import torch
# 按Enter键执行
print(torch.cuda.is_available())
# 按Enter键执行

[!NOTE]

  1. 如果需要手动指定torch的版本,只需在后面加上版本号。例如:pip install torch==2.0.1 torchvision==0.15.2 torchaudio==2.0.2 --index-url https://download.pytorch.org/whl/cu117
  2. 在安装适用于CUDA 11.7的Pytorch时,可能会遇到错误ERROR: Package 'networkx' requires a different Python: 3.8.9 not in '>=3.9'。此时,可先执行pip install networkx==3.0,再继续安装Pytorch,以避免类似错误。
  3. 由于版本更新,您可能无法直接复制Pytorch 11.7的下载链接。在这种情况下,您可以直接复制下方的安装命令来安装Pytorch 11.7。或者,您也可以从这里下载旧版本。
pip install torch==2.0.1 torchvision==0.15.2 torchaudio==2.0.2 --index-url https://download.pytorch.org/whl/cu117

1.4 其他依赖的安装

[!IMPORTANT] ✨ 在开始安装其他依赖之前,请务必下载并安装Visual Studio 2022Microsoft C++ Build Tools(后者体积较小)。选择并安装“使用C++的桌面开发”组件包,然后执行修改操作,等待安装完成。

  • 在从1.1获取的文件夹中右键单击,选择在终端中打开。使用以下命令首先更新pipwheelsetuptools
pip install --upgrade pip==23.3.2 wheel setuptools
  • 执行以下命令安装库文件(若出现错误,请多次尝试,直至无误且所有依赖均安装成功)。请注意,项目文件夹中有三个requirements文本文件,此处请选择requirements_win.txt
pip install -r requirements_win.txt
  • 确保安装正确且无误后,使用以下命令更新fastapigradiopydantic依赖:
pip install --upgrade fastapi==0.84.0
pip install --upgrade pydantic==1.10.12
pip install --upgrade gradio==3.41.2

1.5 FFmpeg

  • 请访问FFmpeg官方网站下载FFmpeg。将其解压到任意位置,并将路径添加到环境变量中。导航至.\ffmpeg\bin(详细的安装方法及Path配置在此不再赘述,网上均可轻松找到相关教程)。

  • 安装完成后,在cmd控制台中输入ffmpeg -version。若输出类似如下内容,则表示安装成功:

ffmpeg version git-2020-08-12-bb59bdb Copyright (c) 2000-2020 the FFmpeg developers
built with gcc 10.2.1 (GCC) 20200805
configuration: 这里是一堆配置信息
libavutil      56. 58.100 / 56. 58.100
libavcodec     58.100.100 / 58.100.100
...

2. 配置与训练

✨ 本节是整篇教程文档中最关键的部分。它参考了官方文档,并加入了一些解释和说明,以便更好地理解。

✨ 在进入第二部分内容之前,请确保您的计算机虚拟内存设置为30GB或以上,最好位于固态硬盘(SSD)上。具体操作方法可在网络上搜索获取。

2.1 与4.0模型兼容性相关问题

  • 您可以通过修改4.0模型的config.json来确保对4.0模型的支持。需要在config.json中的model部分添加speech_encoder字段,如下所示:
  "model":
  {
    # 其他内容省略

    # “ssl_dim”,填写256或768,需与下方“speech_encoder”的值一致
    "ssl_dim": 256,
    # 发音人数量
    "n_speakers": 200,
    # 或者“vec768l12”,但请注意,此处的值应与上方的“ssl_dim”匹配。即,256对应vec256l9,768对应vec768l12。
    "speech_encoder":"vec256l9"
    # 如果您不确定自己的模型是vec768l12还是vec256l9,可以通过查看“gin_channels”字段的值来确认。

    # 其他内容省略
  }

2.2 预下载模型文件

2.2.1 必备项

[!WARNING]

您必须选择以下编码器之一使用:

  • “vec768l12”
  • “vec256l9”
  • “vec256l9-onnx”
  • “vec256l12-onnx”
  • “vec768l9-onnx”
  • “vec768l12-onnx”
  • “hubertsoft-onnx”
  • “hubertsoft”
  • “whisper-ppg”
  • “cnhubertlarge”
  • “dphubert”
  • “whisper-ppg-large”
  • “wavlmbase+”
编码器 下载链接 存放位置 说明
contentvec(推荐) checkpoint_best_legacy_500.pt 放入pretrain目录 vec768l12vec256l9需要此编码器
hubert_base.pt 重命名为checkpoint_best_legacy_500.pt,然后放入pretrain目录 效果与上述checkpoint_best_legacy_500.pt相同,但仅199MB
hubertsoft hubert-soft-0d54a1f4.pt 放入pretrain目录 被so-vits-svc3.0使用
Whisper-ppg medium.pt 放入pretrain目录 whisper-ppg兼容
whisper-ppg-large large-v2.pt 放入pretrain目录 whisper-ppg-large兼容
cnhubertlarge chinese-hubert-large-fairseq-ckpt.pt 放入pretrain目录 -
dphubert DPHuBERT-sp0.75.pth 放入pretrain目录 -
WavLM WavLM-Base+.pt 放入pretrain目录 下载链接可能存在问题,无法下载
OnnxHubert/ContentVec MoeSS-SUBModel 放入pretrain目录 -

各编码器详细说明

编码器名称 优点 缺点
vec768l12(最推荐) 声音保真度最佳,基础模型较大,支持响度嵌入 发音清晰度较弱
vec256l9 无特别优势 不支持扩散模型
hubertsoft 发音清晰度强 容易出现声音泄漏
whisper-ppg 发音清晰度最强 容易出现声音泄漏,显存占用高

2.2.2 预训练基础模型(强烈推荐)

  • 预训练基础模型文件:G_0.pthD_0.pth。请将其放置于logs/44k目录下。

  • 扩散模型预训练基础模型文件:model_0.pt。请将其放置于logs/44k/diffusion目录下。

该扩散模型参考了DDSP-SVC中的扩散模型,基础模型与DDSP-SVC的扩散模型兼容。部分提供的基础模型文件来自“羽毛布団”(bilibili空间)的集成包,在此向其表示感谢。

提供4.1训练用的基础模型,请自行下载(需具备外网条件)

编码器类型 主模型基础 扩散模型基础 说明
vec768l12 G_0.pth, D_0.pth model_0.pt 如果仅训练100步扩散,即 k_step_max = 100,请使用 model_0.pt 作为扩散模型
vec768l12 (带响度嵌入) G_0.pth, D_0.pth model_0.pt 如果仅训练100步扩散,即 k_step_max = 100,请使用 model_0.pt 作为扩散模型
vec256l9 G_0.pth, D_0.pth 不支持 -
hubertsoft G_0.pth, D_0.pth model_0.pt -
whisper-ppg G_0.pth, D_0.pth model_0.pt -
tiny (vec768l12_vol_emb) G_0.pth, D_0.pth - TINY 基于原始 So-VITS 模型,通过减少网络参数、采用深度可分离卷积和共享参数的 FLOW 技术,显著缩小了模型体积并提升了推理速度。TINY 专为实时转换设计;由于参数减少,其转换效果理论上不如原模型。So-VITS 的实时转换 GUI 正在开发中。在此之前,如无特殊需求,不建议训练 TINY 模型。

[!WARNING]

不提供未提及的其他编码器的预训练模型。请在没有基础模型的情况下进行训练,这可能会显著增加训练难度!

基础模型与支持情况

标准基础 响度嵌入 响度嵌入 + TINY 全扩散 100 步浅扩散
Vec768L12 支持 支持 支持 支持
Vec256L9 支持 不支持 不支持 不支持
hubertsoft 支持 不支持 支持 不支持
whisper-ppg 支持 不支持 支持 不支持

2.2.3 可选项目(根据需要选择)

1. NSF-HIFIGAN

如果使用 NSF-HIFIGAN 增强器浅扩散,则需要下载由 [OpenVPI] 提供的预训练 NSF-HIFIGAN 模型。如果不需使用,可跳过此步骤。

  • 预训练 NSF-HIFIGAN 语音合成器:
  • 解压后,将四个文件放入 pretrain/nsf_hifigan 目录中。
  • 如果下载的是2024年2月版本的语音合成器,请将 model.ckpt 重命名为 model,即去掉文件扩展名。

2. RMVPE

如果使用 rmvpe F0 预测器,则需要下载预训练的 RMVPE 模型。

  • 下载模型 rmvpe.zip,这是目前推荐的版本。
  • 解压 rmvpe.zip,将 model.pt 文件重命名为 rmvpe.pt,然后将其放入 pretrain 目录中。

3. FCPE(预览版)

FCPE(快速上下文音高估计器)是由 svc-develop-team 独立开发的新一代 F0 预测器,专为实时语音转换设计。未来它将成为 Sovits 实时语音转换的首选 F0 预测器。

如果使用 fcpe F0 预测器,则需要下载预训练的 FCPE 模型。

  • 下载模型 fcpe.pt
  • 将其放入 pretrain 目录中。

2.3 数据准备

  1. 按照以下文件结构将数据集整理到 dataset_raw 目录中。
dataset_raw
├───speaker0
│   ├───xxx1-xxx1.wav
│   ├───...
│   └───Lxx-0xx8.wav
└───speaker1
    ├───xx2-0xxx2.wav
    ├───...
    └───xxx7-xxx007.wav
  1. 您可以自定义说话人的名称。
dataset_raw
└───suijiSUI
    ├───1.wav
    ├───...
    └───25788785-20221210-200143-856_01_(Vocals)_0_0.wav
  1. 此外,您还需要在 dataset_raw 中创建并编辑 config.json 文件。
{
  "n_speakers": 10,

  "spk": {
    "speaker0": 0,
    "speaker1": 1
  }
}
  • "n_speakers": 10":该数字表示说话人的数量,从1开始计数,需与下方的数字对应。
  • "speaker0": 0":“speaker0”指的是说话人的名字,可以更改。数字0、1、2…代表说话人编号,从0开始。

2.4 数据预处理

2.4.0 音频切片

  • 将音频切分为 5秒 - 15秒 的片段。稍长的片段也可以接受,但过长的片段可能导致训练或预处理过程中出现内存不足的错误。

  • 您可以使用 audio-slicer-GUIaudio-slicer-CLI 来辅助切片。通常只需调整 Minimum Interval 参数即可。对于普通语音材料,使用默认值通常就足够了;而对于歌唱材料,则可以将其调整为 100 甚至 50

  • 切片完成后,手动处理过长(超过15秒)或过短(低于4秒)的音频。较短的音频可以拼接成多个片段,而较长的音频则可以手动分割。

[!WARNING]

如果您使用 Whisper-ppg 声学编码器进行训练,所有切片的长度都必须小于30秒。

2.4.1 重采样至44100Hz单声道

使用以下命令(如果已进行响度匹配,则跳过此步骤):

python resample.py

[!NOTE]

虽然该项目提供了用于重采样、转单声道和响度匹配的脚本 resample.py,但默认的响度匹配会将音量调整至0dB,这可能会降低音频质量。此外,Python中的响度归一化库 pyloudnorm 无法应用电平限制,可能导致削波现象。建议考虑使用专业的音频处理软件,如 Adobe Audition 进行响度匹配。您也可以使用我开发的响度匹配工具 Loudness Matching Tool。如果您已经使用其他软件进行了响度匹配,可以在运行上述命令时添加 --skip_loudnorm 参数来跳过响度匹配步骤。例如:

python resample.py --skip_loudnorm

2.4.2 自动数据集划分及配置文件生成

使用以下命令(如果需要响度嵌入,则跳过此步骤):

python preprocess_flist_config.py --speech_encoder vec768l12

speech_encoder 参数有七种选项,具体说明见 2.2.1 必需项及各编码器详解。若省略 speech_encoder 参数,则默认值为 vec768l12

vec768l12
vec256l9
hubertsoft
whisper-ppg
whisper-ppg-large
cnhubertlarge
dphubert

使用响度嵌入

  • 使用响度嵌入时,训练好的模型会匹配输入源的响度;否则,它将匹配训练集的响度。
  • 如果使用响度嵌入,需要添加 --vol_aug 参数,例如:
python preprocess_flist_config.py --speech_encoder vec768l12 --vol_aug

2.4.3 根据需要修改配置文件

config.json

  • vocoder_name: 选择声码器,默认为 nsf-hifigan
  • log_interval: 日志输出频率,默认为 200
  • eval_interval: 验证和保存模型的频率,默认为 800
  • epochs: 总训练轮数,默认为 10000。达到该轮数后训练将自动停止。
  • learning_rate: 学习率,建议保持默认值。
  • batch_size: 每次训练步骤加载到 GPU 上的数据量,应调整为小于 GPU 显存容量的值。
  • all_in_mem: 将整个数据集加载到内存中。如果某些平台的磁盘 IO 过慢,且内存容量远大于数据集大小时,可启用此选项。
  • keep_ckpts: 训练过程中保留的最近模型数量,0 表示保留所有模型。默认仅保留最后 3 个模型。

声码器选项

nsf-hifigan
nsf-snake-hifigan

diffusion.yaml

  • cache_all_data: 将整个数据集加载到内存中。如果某些平台的磁盘 IO 过慢,且内存容量远大于数据集大小时,可启用此选项。
  • duration: 训练时音频片段的持续时间。请根据 GPU 显存大小进行调整。注意:该值必须小于训练集中最短音频的持续时间!
  • batch_size: 每次训练步骤加载到 GPU 上的数据量,应调整为小于 GPU 显存容量的值。
  • timesteps: 扩散模型的总步数,默认为 1000。完整的高斯扩散过程共有 1000 步。
  • k_step_max: 训练时仅训练前 k_step_max 步以节省训练时间。请注意,该值必须小于 timesteps0 表示训练整个扩散模型。注意:如果不训练整个扩散模型,则无法仅使用扩散模型进行推理!

2.4.3 生成 Hubert 和 F0

使用以下命令(若训练浅层扩散则跳过此步骤):

# 下述命令使用 rmvpe 作为 F0 预测器,您可手动修改
python preprocess_hubert_f0.py --f0_predictor rmvpe

f0_predictor 参数有六种选项,部分 F0 预测器需要下载额外的预处理模型。详情请参阅 2.2.3 可选项目(按需选择)

crepe
dio
pm
harvest
rmvpe(推荐!)
fcpe

各 F0 预测器的优缺点

预测器 优点 缺点
pm 速度快、资源消耗低 容易产生气声
crepe 很少产生气声 内存消耗大,可能产生音准偏差
dio - 可能产生音准偏差
harvest 在低音域表现更好 在其他音域表现较差
rmvpe 几乎无瑕疵,目前最为准确的预测器 几乎没有缺点(极低音可能存在问题)
fcpe 由 SVC 团队开发,目前速度最快的预测器,准确度与 crepe 相当 -

[!NOTE]

  1. 如果训练集噪声过大,请使用 crepe 处理 F0。
  2. 如果省略 f0_predictor 参数,则默认使用 rmvpe。

若需浅层扩散功能(可选),请添加 --use_diff 参数,例如:

# 下述命令使用 rmvpe 作为 F0 预测器,您可手动修改
python preprocess_hubert_f0.py --f0_predictor rmvpe --use_diff

若处理速度较慢,或您的数据集较大,可添加 --num_processes 参数:

# 下述命令使用 rmvpe 作为 F0 预测器,您可手动更改
python preprocess_hubert_f0.py --f0_predictor rmvpe --num_processes 8
# 所有工作进程将自动分配到多个线程

完成上述步骤后,生成的 dataset 目录即为预处理后的数据,您可以根据需要删除 dataset_raw 文件夹。

2.5 训练

2.5.1 主模型训练(必选)

使用以下命令训练主模型。若训练中断,也可使用相同命令继续训练。

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

2.5.2 扩散模型(可选)

  • So-VITS-SVC 4.1 的一项重大更新是引入了浅层扩散机制,该机制会将 SoVITS 原始输出的音频转换为梅尔频谱图,添加噪声,并进行浅层扩散处理,然后再通过声码器输出音频。测试表明,原始输出音频经过浅层扩散处理后,音质显著提升,能够有效解决电子噪声和背景噪声等问题
  • 如果需要使用浅层扩散功能,则需训练扩散模型。在训练之前,请确保已下载并正确放置 NSF-HIFIGAN请参阅 [2.2.3 可选项目](#223-optional-items-choose-as-needed)),并在预处理生成 Hubert 和 F0 时添加 --use_diff 参数(请参阅 2.4.3 生成 Hubert 和 F0)。

要训练扩散模型,可以使用以下命令:

python train_diff.py -c configs/diffusion.yaml

模型训练完成后,模型文件会保存在 logs/44k 目录下,其中扩散模型会保存在 logs/44k/diffusion 中。

[!IMPORTANT]

如何判断模型是否训练到位?

  1. 这其实是一个非常无聊且毫无意义的问题。就好比你问老师如何让孩子学得好一样,除了你自己之外,没有人能回答这个问题。
  2. 模型训练的效果与你的数据集质量、持续时间、所选编码器、F0 算法,甚至一些玄学因素都有关。即便你已经得到了一个训练好的模型,最终的合成效果仍然取决于你的输入源以及推理参数。这并不是一个线性过程,涉及的变量太多。所以,如果你还在纠结“为什么我的模型听起来不像?”或者“怎么知道模型训练得怎么样呢?”,那我只能说:谁知道呢?
  3. 不过这也并不意味着完全没有方法。你可以多祈祷、多拜一拜。我并不否认这种方式的有效性,但也可以借助一些科学工具,比如 TensorBoard 等。下面的 2.5.3 TensorBoard 就会教你如何利用 TensorBoard 来辅助判断训练状态。当然,最强大的工具其实在于你自己的耳朵。如何判断声学模型是否训练到位?戴上耳机,用耳朵去听就知道了。

Epoch 与 Step 的关系

在训练过程中,根据 config.json 中的设置,每隔指定步数(默认为 800 步,对应 eval_interval 值)就会保存一次模型。 需要注意的是,Epoch 和 Step 是不同的概念:1 Epoch 表示训练集中所有样本都参与了一次完整的学习过程;而 1 Step 则表示完成了一次学习步骤。由于存在 batch_size,每次学习步骤可能包含多个样本。因此,Epoch 和 Step 之间的换算关系如下:

$$ Epoch = \frac{Step}{(\text{数据集中的样本总数} \div batch_size)} $$

默认情况下,训练会在达到 10,000 个 Epoch 后结束(可以通过修改 config.json 中的 epoch 字段来调整上限),但通常几百个 Epoch 就能达到不错的效果。当你觉得训练差不多完成时,可以在训练终端按下 Ctrl + C 来中断训练。中断后,只要没有重新处理训练集,就可以从最近保存的检查点继续训练。

2.5.3 TensorBoard

你可以使用 TensorBoard 来可视化训练过程中损失函数值的变化趋势、聆听音频样本,并帮助判断模型的训练状态。然而,对于 So-VITS-SVC 项目而言,损失函数值本身并没有太大的参考意义(无需比较或研究其具体数值),真正有参考价值的还是通过耳朵聆听推理后的音频输出!

  • 使用以下命令打开 TensorBoard:
tensorboard --logdir=./logs/44k

TensorBoard 默认每 200 步会生成一次评估日志。如果训练尚未达到 200 步,TensorBoard 中将不会显示任何图像。这个 200 步的间隔可以通过修改 config.json 中的 log_interval 值来调整。

  • 关于损失的说明

你无需深入理解每个损失的具体含义。一般来说:

  • loss/g/f0loss/g/melloss/g/total 应该呈现波动,并最终收敛到某个稳定值。
  • loss/g/kl 应保持较低水平的波动。
  • loss/g/fm 在训练中期应持续上升,而在后期则应逐渐放缓甚至开始下降。

[!IMPORTANT]

✨ 观察损失曲线的变化趋势可以帮助你判断模型的训练状态。然而,仅凭损失值并不能作为判断模型训练状态的唯一依据,事实上,这些损失值的参考意义并不大。判断模型是否训练到位,仍然需要依靠耳朵聆听音频输出

[!WARNING]

  1. 对于小型数据集(30 分钟甚至更小),在加载基础模型时,不建议进行过长时间的训练,这样可以更好地发挥基础模型的优势。通常几千步甚至几百步就能取得较好的效果。
  2. TensorBoard 中的音频样本是基于你的验证集生成的,并不能代表模型的最终表现

3. 推理

✨ 在进行推理之前,请准备好你需要推理的干声文件,确保其无背景噪声/混响且质量良好。你可以使用 UVR5 进行处理以获得干声。此外,我还制作了一个 UVR5 人声分离教程

3.1 命令行推理

使用 inference_main.py 进行推理


# 示例
python inference_main.py -m "logs/44k/G_30400.pth" -c "configs/config.json" -n "your_inference_audio.wav" -t 0 -s "speaker"

必填参数:

  • -m | --model_path: 模型路径
  • -c | --config_path: 配置文件路径
  • -n | --clean_names: wav文件名列表,位于raw文件夹中
  • -t | --trans: 音高调整,支持正负值(以半音为单位)
  • -s | --spk_list: 合成目标说话人名称
  • -cl | --clip: 音频强制裁剪,默认0为自动裁剪,单位为秒。

[!NOTE]

音频裁剪

  • 在推理过程中,裁剪工具会根据静音段将上传的音频分割成若干小片段,推理完成后重新拼接成完整音频。这种方式有利于降低小片段音频对显存的占用,从而实现对长音频的分段推理,避免显存溢出。裁剪阈值参数控制最小满刻度分贝值,低于该值的部分会被视为静音并移除。因此,当上传的音频较为嘈杂时,可以将此参数调高(如-30);而对于较干净的音频,则可调低至-50,以避免切掉呼吸声和微弱的人声。

  • 开发团队近期测试表明,较小的裁剪阈值(如-50)能够提升输出音频的清晰度,尽管其原理目前尚不明确。

强制裁剪 -cl | --clip

  • 在推理过程中,若连续的语音部分长时间无静音间隔,裁剪工具有时会产生过长的音频片段,可能导致显存溢出。自动音频裁剪功能会设定一个最大音频分割时长。在初次分割后,如果仍有超过该时长的音频片段,系统会按照此时长对其进行强制再次分割,以避免显存溢出问题。
  • 强制裁剪可能会导致音频在单词中间被切断,从而造成合成语音的不连贯。您需要在高级设置中调整强制裁剪的交叉淡化长度来缓解这一问题。

可选参数:具体说明见下节

  • -lg | --linear_gradient: 两个音频片段之间的交叉淡化长度。若强制裁剪后出现语音不连贯的情况,请调整该值;建议使用默认值0,单位为秒。
  • -f0p | --f0_predictor: 选择F0预测器,选项包括crepe、pm、dio、harvest、rmvpe、fcpe,默认为pm(注:crepe会对原始F0使用均值滤波)。不同F0预测器的优缺点参见2.4.3 F0预测器的优缺点
  • -a | --auto_predict_f0: 在语音转换过程中自动预测音高。请勿在转换歌声时启用此选项,否则可能导致严重跑调。
  • -cm | --cluster_model_path: 聚类模型或特征检索索引的路径。留空则自动设置为各解决方案模型的默认路径;若未训练聚类或特征检索模型,则随机填写。
  • -cr | --cluster_infer_ratio: 聚类方案或特征检索的比例,范围为0-1。若未训练聚类模型或特征检索模型,则默认为0。
  • -eh | --enhance: 是否使用NSF_HIFIGAN增强器。该选项对训练数据较少的模型有一定音质提升效果,但对训练充分的模型则可能产生负面影响,默认关闭。
  • -shd | --shallow_diffusion: 是否使用浅层扩散。启用此选项可解决部分电子音问题,默认关闭。当启用此选项时,NSF_HIFIGAN增强器将被禁用。
  • -usm | --use_spk_mix: 是否使用说话人混合/动态语音混合。
  • -lea | --loudness_envelope_adjustment: 输入源响度包络替换与输出响度包络融合的比例。越接近1,越倾向于使用输出响度包络。
  • -fr | --feature_retrieval: 是否使用特征检索。若已使用聚类模型,则该选项将被禁用,此时cm和cr参数将分别变为特征检索的索引路径和混合比例。

[!NOTE]

聚类模型/特征检索混合比例 -cr | --cluster_infer_ratio

  • 本参数控制在使用聚类模型或特征检索模型时线性参与的比例。聚类模型和特征检索模型均可略微提升音色相似度,但代价是降低发音准确性(特征检索的发音略优于聚类)。该参数范围为0-1,其中0表示未启用;数值越接近1,音色越相似,发音则越模糊。
  • 聚类模型和特征检索共用此参数。加载模型时,实际使用的模型将由该参数决定。
  • 请注意,当未加载聚类模型或特征检索模型时,请将此参数保持为0,否则会导致错误。

浅层扩散设置:

  • -dm | --diffusion_model_path: 扩散模型路径。
  • -dc | --diffusion_config_path: 扩散模型配置文件路径。
  • -ks | --k_step: 扩散步骤数。数值越大,结果越接近扩散模型的效果,默认为100。
  • -od | --only_diffusion: 纯扩散模式。该模式不加载sovits模型,仅基于扩散模型进行推理。
  • -se | --second_encoding: 二次编码。原始音频将在浅层扩散前再次编码,这是一个神秘的选项,有时效果很好,有时则不然。

[!NOTE]

关于浅层扩散步骤 -ks | --k_step

完整的高斯扩散过程需1000步。当浅层扩散步骤达到1000步时,最终输出结果将完全由扩散模型决定,而So-VITS模型的作用将被抑制。浅层扩散步骤越多,结果就越接近扩散模型的输出。如果您希望仅利用浅层扩散去除电子噪声,同时尽可能保留So-VITS模型的音色,则可将浅层扩散步骤设置为30-50步。

[!WARNING]

若使用whisper-ppg语音编码器进行推理,应将--clip设置为25,-lg设置为1。否则,推理将无法正常工作。

3.2 WebUI 推理

使用以下命令打开 WebUI 界面,上传并加载模型,根据说明填写推理参数,上传推理音频,然后开始推理。

推理参数的详细说明与 3.1 命令行推理 中的参数相同,只是移至交互式界面,并配有简单说明。

python webUI.py

[!WARNING]

请务必查看 命令行推理,以了解各参数的具体含义。特别注意 NOTE 和 WARNING 中的提醒!

WebUI 还内置了**文本到语音(TTS)**功能:

  • 文本到语音功能使用 Microsoft 的 edge_TTS 服务生成一段原始语音,再通过 So-VITS 将该语音转换为目标音色。需要注意的是,So-VITS 目前仅支持歌声的语音转换(SVC),并不具备原生的文本到语音功能!由于 Microsoft 的 edge_TTS 生成的语音较为生硬、缺乏情感,因此所有经过转换的音频也会呈现出类似的特点。如果您需要带有情感的 TTS 功能,请访问 GPT-SoVITS 项目。
  • 目前,文本到语音功能共支持 55 种语言,覆盖了大多数常用语言。程序会根据文本框中输入的内容自动识别语言并进行转换。
  • 自动识别仅能确定语言,而某些语言可能有不同的口音或发音者。如果使用自动识别功能,程序将随机选择符合该语言和指定性别的一位发音者进行转换。若您的目标语言存在多种口音或发音者(例如英语),建议您手动指定一位特定口音的发音者。一旦手动指定了发音者,之前手动选择的性别选项将被忽略。

4. 可选增强功能

✨ 如果您对之前的处理效果已经满意,或者对下文内容不太理解,可以跳过以下内容,不会影响模型的正常使用(这些可选增强功能的效果相对较小,通常只在特定数据上有所体现,但在大多数情况下并不明显)。

4.1 自动 F0 预测

在模型训练过程中,会同时训练一个 F0 预测器,它是一种自动音高调整功能,能够在推理时使模型音高与源音高匹配,对于语音转换任务尤其有用,能够更好地匹配音高。然而,在转换歌声时切勿启用此功能!!!否则会导致严重的跑调!!!

  • 命令行推理:在 inference_main 中将 auto_predict_f0 设置为 true
  • WebUI 推理:勾选相应的选项。

4.2 聚类音色泄漏控制

聚类方案可以减少音色泄漏,使模型输出更接近目标音色(尽管效果并不显著)。然而,单独使用聚类可能会降低模型的发音清晰度(导致发音模糊)。本模型采用融合方式,允许线性控制聚类方案与非聚类方案的比例。也就是说,您可以手动调整“更接近目标音色”与“清晰发音”之间的比例,找到一个合适的平衡点。

使用聚类无需更改前面提到的现有步骤,只需额外训练一个聚类模型即可。虽然效果有限,但训练成本也相对较低。

  • 训练方法:
# 使用 CPU 训练:
python cluster/train_cluster.py
# 或使用 GPU 训练:
python cluster/train_cluster.py --gpu

训练完成后,模型输出将保存在 logs/44k/kmeans_10000.pt

  • 命令行推理时:
    • inference_main.py 中指定 cluster_model_path
    • inference_main.py 中指定 cluster_infer_ratio,其中 0 表示完全不使用聚类,1 表示仅使用聚类。通常设置为 0.5 即可。
  • WebUI 推理时:
    • 上传并加载聚类模型。
    • 设置聚类模型/特征检索的混合比例,范围为 0 到 1,其中 0 表示完全不使用聚类/特征检索。使用聚类/特征检索可以提高音色相似度,但可能会降低发音清晰度(如果使用,建议设置为 0.5 左右)。

4.3 特征检索

与聚类方案类似,特征检索也可以减少音色泄漏,且在发音清晰度方面略优于聚类,不过可能会降低推理速度。同样采用融合方式,允许线性控制特征检索与非特征检索的比例。

  • 训练过程:在生成 hubert 和 f0 后,执行以下命令:
python train_index.py -c configs/config.json

训练完成后,模型输出将保存在 logs/44k/feature_and_index.pkl

  • 命令行推理时:
    • 首先指定 --feature_retrieval,此时聚类方案将自动切换为特征检索方案。
    • inference_main.py 中指定 cluster_model_path 为模型输出文件。
    • inference_main.py 中指定 cluster_infer_ratio,其中 0 表示完全不使用特征检索,1 表示仅使用特征检索。通常设置为 0.5 即可。
  • WebUI 推理时:
    • 上传并加载聚类模型。
    • 设置聚类模型/特征检索的混合比例,范围为 0 到 1,其中 0 表示完全不使用聚类/特征检索。使用聚类/特征检索可以提高音色相似度,但可能会降低发音清晰度(如果使用,建议设置为 0.5 左右)。

4.4 语音编码器微调

在 So-VITS 中使用扩散模型时,经过扩散模型增强的梅尔频谱图会通过语音编码器输出为最终音频。语音编码器对输出音频的质量起着决定性作用。目前,So-VITS-SVC 使用的是 NSF-HiFiGAN 社区语音编码器。实际上,你也可以在 So-VITS 的 扩散流程 中,利用自己的数据集对该语音编码器模型进行微调,使其更好地适配你的模型任务。

SingingVocoders 项目提供了语音编码器微调的方法。在 Diffusion-SVC 项目中,使用微调后的语音编码器可以显著提升输出音质。你也可以用自己收集的数据训练一个微调版的语音编码器,并将其应用到本集成包中。

  1. 使用 SingingVocoders 训练一个微调版的语音编码器,并获取其模型文件和配置文件。
  2. 将模型文件和配置文件放置于 pretrain/{微调后语音编码器名称}/ 目录下。
  3. 修改对应模型的扩散模型配置文件 diffusion.yaml 如下:
vocoder:
  ckpt: pretrain/nsf_hifigan/model.ckpt # 此行填写你微调后语音编码器的路径
  type: nsf-hifigan # 此行填写你微调后语音编码器的类型,不确定时请勿修改
  1. 按照 3.2 webUI 推理 的步骤,上传扩散模型以及 修改后的扩散模型配置文件,即可使用微调后的语音编码器。

[!WARNING]

目前仅 NSF-HiFiGAN 语音编码器支持微调。

4.5 模型保存目录

截至上一节,我们已经介绍了总共四种可训练的模型类型。下表总结了这四种模型及其对应的配置文件。

在 webUI 中,除了上传和加载模型之外,你还可以直接读取本地模型文件。只需先将这些模型放入一个文件夹中,再将该文件夹放入 trained 文件夹内。点击“刷新本地模型列表”,webUI 就会识别出该模型。然后手动选择需要加载的模型进行加载。注意:对于下表中的(可选)模型,自动加载本地模型功能可能无法正常工作。

文件 文件名及扩展名 存放位置
So-VITS 模型 G_xxxx.pth logs/44k
So-VITS 模型配置文件 config.json configs
扩散模型(可选) model_xxxx.pt logs/44k/diffusion
扩散模型配置文件(可选) diffusion.yaml configs
K-means 聚类模型(可选) kmeans_10000.pt logs/44k
特征检索模型(可选) feature_and_index.pkl logs/44k

5. 其他可选功能

✨ 与前面几节相比,本部分的重要性较低。除 5.1 模型压缩 这一较为便捷的功能外,其他可选功能的实际使用频率相对较低。因此,此处仅提供官方文档的参考链接及简要说明。

5.1 模型压缩

生成的模型包含了继续训练所需的信息。如果你 确定不再继续训练,可以移除模型中的这部分信息,从而得到一个体积约为原模型三分之一的最终模型。

使用 compress_model.py 脚本:

# 例如,若要压缩 logs/44k/ 目录下的 G_30400.pth 模型,且配置文件为 configs/config.json,则可运行以下命令:
python compress_model.py -c="configs/config.json" -i="logs/44k/G_30400.pth" -o="logs/44k/release.pth"
# 压缩后的模型将保存为 logs/44k/release.pth

[!WARNING]

注意:压缩后的模型不可再用于继续训练!

5.2 音色混合

5.2.1 静态音色混合

请参考 Tools/Experimental Features 目录下的 webUI.py 文件中的静态音色混合功能。

该功能可以将多个音色模型合并为一个音色模型(通过对多个模型参数进行凸组合或线性组合),从而创造出现实中不存在的音色特征。

注意事项:

  1. 该功能仅支持单说话人模型。
  2. 若强行使用多说话人模型,需确保各模型的说话人数量相同,以便将相同 SpeakerID 下的音色进行混合。
  3. 确保所有待混合模型的 config.json 文件中 model 字段一致。
  4. 输出的混合模型可以使用任一待混合模型的 config.json 文件,但聚类模型将无法使用。
  5. 批量上传模型时,建议将模型放入一个文件夹中一起上传。
  6. 建议将混合比例调整在 0 到 100 之间。虽然也可以设置其他数值,但在线性组合模式下可能会出现未知效果。
  7. 混合完成后,文件将以 output.pth 为文件名保存在项目根目录下。
  8. 凸组合模式会对混合比例执行 Softmax 处理,以保证各比例之和为 1;而线性组合模式则不会进行此操作。

5.2.2 动态音色混合

请参考 spkmix.py 文件中关于动态音色混合的介绍。

角色轨道混合规则如下:

  • Speaker ID:[[开始时间 1, 结束时间 1, 开始值 1, 结束值 1], [开始时间 2, 结束时间 2, 开始值 2, 结束值 2]]
  • 每个时间段的开始时间必须与前一个时间段的结束时间相同,第一个开始时间必须为 0,最后一个结束时间必须为 1(时间范围为 0–1)。
  • 必须完整填写所有角色信息,未使用的角色可用 [[0., 1., 0., 0.]] 填充。
  • 融合值可任意填写,在指定的时间范围内,它会从开始值线性变化到结束值。系统内部会自动确保线性组合结果为 1(满足凸组合条件),因此你可以放心使用。

在命令行推理时,使用 --use_spk_mix 参数启用动态音色混合功能。在 webUI 推理时,请勾选“动态音色混合”选项。

5.3 ONNX 导出

使用 onnx_export.py 脚本。目前,只有 MoeVoiceStudio 需要使用 ONNX 模型。更多详细操作和使用方法,请参考 MoeVoiceStudio 仓库的说明文档。

  • 创建一个新文件夹:checkpoints 并打开它。
  • checkpoints 文件夹中,创建一个以项目命名的文件夹,例如 aziplayer
  • 将您的模型重命名为 model.pth,配置文件重命名为 config.json,并将它们放入刚刚创建的 aziplayer 文件夹中。
  • 修改 onnx_export.py 中的 path = "NyaruTaffy",将 "NyaruTaffy" 替换为您的项目名称,即 path = "aziplayer"(用于支持角色混合的 ONNX 导出)。
  • 运行 python onnx_export.py
  • 等待执行完成。在您的项目文件夹中会生成一个 model.onnx 文件,这就是导出的模型。

注意:Hubert 的 ONNX 模型请使用 MoeVoiceStudio 提供的 ONNX 模型。目前无法独立导出(fairseq 中的 Hubert 包含许多 ONNX 不支持的算子,并且涉及常量,在导出时会导致输入输出形状及结果出现错误或问题)。

6. 简单混音与成品导出

使用音频宿主软件处理推理后的音频

关于如何使用音频宿主软件对推理后的音频进行处理和优化,请参考相关视频教程或其他专业的混音教程。

附录:常见错误及解决方案

部分错误解决方案感谢 羽毛布団相关专栏 | 相关文档

关于内存不足 (OOM)

如果在终端或 WebUI 中遇到类似以下的错误:

OutOfMemoryError: CUDA 内存不足。尝试分配 XX GiB(GPU 0:总容量 XX GiB;已分配 XX GiB;空闲 XX MiB;PyTorch 总共保留了 XX GiB)

请不要怀疑,这确实是您的 GPU 显存或虚拟内存不足所致。以下步骤可以 100% 解决该问题,请按照这些步骤操作即可。请避免在各处重复提问,因为解决方案已经非常明确。

  1. 在错误信息中,查看 XX GiB already allocated 后是否显示 0 bytes free。如果显示 0 bytes free,请按照步骤 2、3、4 操作;如果显示 XX MiB freeXX GiB free,则按照步骤 5 操作。
  2. 如果内存不足发生在预处理阶段:
    • 使用对 GPU 友好的 F0 预测器(友好程度从高到低依次为:pm >= harvest >= rmvpe ≈ fcpe >> crepe)。建议优先使用 rmvpe 或 fcpe。
    • 将多进程预处理设置为 1。
  3. 如果内存不足发生在训练阶段:
    • 检查数据集中是否存在过长的片段(超过 20 秒)。
    • 减少批次大小。
    • 使用资源需求较低的项目。
    • 在 Google Colab 等平台上租用显存更大的 GPU 进行训练。
  4. 如果内存不足发生在推理阶段:
    • 确保源音频(干声)干净(无残留混响、伴奏或和声),因为脏音频会影响自动切片。可参考 UVR5 人声分离教程 获取最佳实践。
    • 提高切片阈值(例如从 -40 调整为 -30;但不要调得过高,否则可能导致音频被突然切断)。
    • 设置强制切片,从 60 秒开始,每次减少 10 秒,直到推理成功为止。
    • 使用 CPU 进行推理,虽然速度较慢,但不会出现内存不足的问题。
  5. 如果仍有可用内存,但仍然出现内存不足错误,则将虚拟内存增加至至少 50G。

以上步骤应能有效管理和解决内存不足问题,确保在预处理、训练和推理过程中顺利运行。

安装依赖时的常见错误及解决方案

1. 安装带有 CUDA=11.7 的 PyTorch 时出错

ERROR: 包 'networkx' 需要不同的 Python 版本:3.8.9 不在 '> =3.9' 范围内

解决方案:

  • 升级 Python 至 3.10:
  • (推荐)保持 Python 版本不变: 先安装版本为 3.0 的 networkx,然后再安装 PyTorch。
pip install networkx==3.0
# 然后继续安装 PyTorch。

2. 依赖包未找到

如果您遇到类似以下的错误:

ERROR: 找不到满足 librosa==0.9.1 要求的版本(从现有版本中找不到)
ERROR: 没有找到匹配的 librosa==0.9.1 发行版
# 错误特征:
没有找到 xxxxx 的匹配发行版
找不到满足 xxxx 要求的版本

解决方案: 更改安装源。手动安装依赖时添加下载源。

使用命令 pip install [包名] -i [源地址]。例如,从阿里云源下载 librosa 0.9.1 版本,可以使用以下命令:

pip install librosa==0.9.1 -i http://mirrors.aliyun.com/pypi/simple

3. 某些依赖因 pip 版本过高而无法安装

2024 年 6 月 21 日,pip 更新至 24.1 版本。直接使用 pip install --upgrade pip 会将 pip 升级到 24.1 版本。然而,某些依赖需要安装 23.0 版本的 pip,因此需要手动降级 pip 版本。目前已知受此影响的有 hydra-core、omegaconf 和 fastapi。安装时遇到的具体错误如下:

如果您需要使用此版本,请使用 pip<24.1。
INFO: pip 正在检查 hydra-core 的多个版本,以确定哪个版本与其他要求兼容。这可能需要一些时间。
ERROR: 无法安装 -r requirements.txt(第 20 行)和 fairseq,因为这些包的版本存在依赖冲突。

冲突原因如下:
    fairseq 0.12.2 依赖 omegaconf<2.1
    hydra-core 1.0.7 依赖 omegaconf<2.1 且 >=2.0.5

要解决此问题,您可以尝试:
1. 放宽您指定的包版本范围
2. 删除包版本,让 pip 尝试解决依赖冲突

解决方案是在安装其他依赖之前限制 pip 版本,具体方法参见 1.5 其他依赖的安装。使用以下命令限制 pip 版本:

pip install --upgrade pip==23.3.2 wheel setuptools

执行完此命令后,再继续安装其他依赖。

数据集预处理与模型训练中的常见错误

1. 错误:UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd0 in position xx

  • 请确保数据集文件名中不包含非西方字符,例如中文或日文,尤其是中文标点符号,如括号、逗号、冒号、分号、引号等。重命名后,请重新处理数据集,然后再继续训练。

2. 错误:The expand size of the tensor (768) must match the existing size (256) at non-singleton dimension 0.

  • 请删除 dataset/44k 下的所有内容,并重新执行预处理步骤。

3. 错误:RuntimeError: DataLoader worker (pid(s) 13920) exited unexpectedly

raise RuntimeError(f'DataLoader worker (pid(s) {pids_str}) exited unexpectedly') from e
RuntimeError: DataLoader worker (pid(s) 13920) exited unexpectedly
  • 请减小 batchsize 值,增加虚拟内存,并重启电脑以释放 GPU 内存,直到 batchsize 和虚拟内存设置合理且不再报错为止。

4. 错误:torch.multiprocessing.spawn.ProcessExitedException: process 0 terminated with exit code 3221225477

  • 请增加虚拟内存并减小 batchsize 值,直到 batchsize 和虚拟内存设置合理且不再报错为止。

5. 错误:AssertionError: CPU training is not allowed.

  • 无解决方案: 不支持在没有 NVIDIA GPU 的情况下进行训练。对于初学者来说,直接的答案就是无法在没有 NVIDIA GPU 的情况下进行训练。

6. 错误:FileNotFoundError: No such file or directory: 'pretrain/rmvpe.pt'

  • 如果您运行 python preprocess_hubert_f0.py --f0_predictor rmvpe --use_diff 时遇到 FileNotFoundError: No such file or directory: 'pretrain/rmvpe.pt',这是因为官方文档更新了用于 F0 处理的 rmvpe 预处理器。请参考教程文档 #2.2.3,下载预处理模型 rmvpe.pt 并将其放置到相应目录中。

7. 错误:“页面文件太小,无法完成操作。”

  • 解决方案: 增加虚拟内存。您可以根据自己的操作系统,在网上查找详细的设置方法。

使用 WebUI 时的错误**

1. 在 WebUI 中启动或加载模型时的错误

  • 启动 WebUI 时的错误: ImportError: cannot import name 'Schema' from 'pydantic'
  • 在 WebUI 中加载模型时的错误: AttributeError("'Dropdown' object has no attribute 'update'")
  • 与依赖项相关的错误: 如果错误涉及 fastapigradiopydantic

解决方案:

  • 某些依赖项需要特定版本。安装完 requirements_win.txt 后,请在命令提示符中输入以下命令来更新相关包:
pip install --upgrade fastapi==0.84.0
pip install --upgrade gradio==3.41.2
pip install --upgrade pydantic==1.10.12

2. 错误:Given groups=1, weight of size [xxx, 256, xxx], expected input[xxx, 768, xxx] to have 256 channels, but got 768 channels instead

或者 错误:配置文件中编码器和模型维度不匹配

  • 原因: v1 分支的模型使用了 vec768 配置文件,反之亦然。
  • 解决方案: 请检查您的配置文件中的 ssl_dim 设置。如果 ssl_dim 是 256,则 speech_encoder 应为 vec256|9;如果是 768,则应为 vec768|12
  • 详细说明请参阅 #2.1

3. 错误:'HParams' object has no attribute 'xxx'

  • 原因: 通常表示找不到音色,且配置文件与模型不匹配。
  • 解决方案: 打开配置文件,滚动到底部,检查是否包含了您所训练的音色。

致谢

我们衷心感谢以下个人和组织,正是他们的贡献和资源使本项目得以实现:

版本历史

v24.6.212024/06/21
v24.5.182024/05/17
v24.4.282024/04/28
v24.3.92024/03/09

常见问题

相似工具推荐

openclaw

OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你

349.3k|★★★☆☆|2周前
Agent开发框架图像

n8n

n8n 是一款面向技术团队的公平代码(fair-code)工作流自动化平台,旨在让用户在享受低代码快速构建便利的同时,保留编写自定义代码的灵活性。它主要解决了传统自动化工具要么过于封闭难以扩展、要么完全依赖手写代码效率低下的痛点,帮助用户轻松连接 400 多种应用与服务,实现复杂业务流程的自动化。 n8n 特别适合开发者、工程师以及具备一定技术背景的业务人员使用。其核心亮点在于“按需编码”:既可以通过直观的可视化界面拖拽节点搭建流程,也能随时插入 JavaScript 或 Python 代码、调用 npm 包来处理复杂逻辑。此外,n8n 原生集成了基于 LangChain 的 AI 能力,支持用户利用自有数据和模型构建智能体工作流。在部署方面,n8n 提供极高的自由度,支持完全自托管以保障数据隐私和控制权,也提供云端服务选项。凭借活跃的社区生态和数百个现成模板,n8n 让构建强大且可控的自动化系统变得简单高效。

184.7k|★★☆☆☆|今天
数据工具开发框架Agent

AutoGPT

AutoGPT 是一个旨在让每个人都能轻松使用和构建 AI 的强大平台,核心功能是帮助用户创建、部署和管理能够自动执行复杂任务的连续型 AI 智能体。它解决了传统 AI 应用中需要频繁人工干预、难以自动化长流程工作的痛点,让用户只需设定目标,AI 即可自主规划步骤、调用工具并持续运行直至完成任务。 无论是开发者、研究人员,还是希望提升工作效率的普通用户,都能从 AutoGPT 中受益。开发者可利用其低代码界面快速定制专属智能体;研究人员能基于开源架构探索多智能体协作机制;而非技术背景用户也可直接选用预置的智能体模板,立即投入实际工作场景。 AutoGPT 的技术亮点在于其模块化“积木式”工作流设计——用户通过连接功能块即可构建复杂逻辑,每个块负责单一动作,灵活且易于调试。同时,平台支持本地自托管与云端部署两种模式,兼顾数据隐私与使用便捷性。配合完善的文档和一键安装脚本,即使是初次接触的用户也能在几分钟内启动自己的第一个 AI 智能体。AutoGPT 正致力于降低 AI 应用门槛,让人人都能成为 AI 的创造者与受益者。

183.6k|★★★☆☆|今天
Agent语言模型插件

stable-diffusion-webui

stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。

162.1k|★★★☆☆|2周前
开发框架图像Agent

everything-claude-code

everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上

161.7k|★★☆☆☆|今天
开发框架Agent语言模型

ComfyUI

ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。

109.2k|★★☆☆☆|2天前
开发框架图像Agent