Code Monkey home page Code Monkey logo

-ai-so-vits-svc-chinese-detaild-documents's Introduction

本帮助文档为项目 so-vits-svc 的详细中文安装、调试、推理教程,您也可以直接选择官方README文档 撰写:Sucial 点击跳转 B 站主页

写在开头:与 3.0 版本相比,4.0 和 4.1 版本的安装、训练、推理操作更为简单,建议直接点击访问官方文档。如需 3.0 版本的教程,请切换至 3.0 分支

相关参考资料 官方 README 文档 | 一些报错的解决办法(来自 B 站 up:羽毛布団

文档的持续完善:若遇到本文档内未提到的报错,您可以在 issues 中提问;若遇到项目 bug,请给原项目提 issues;想要更加完善这份教程,欢迎来提 pr


✅SoftVC VITS Singing Voice Conversion 教程目录

最后更新时间:2024.1.14

本文档配套视频教程 点击前往

SoftVC VITS Singing Voice Conversion 教程

✅0. 用前须知

0.0 任何国家,地区,组织和个人使用此项目必须遵守以下法律

《民法典》

第一千零一十九条

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

第一千零二十四条

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

第一千零二十七条

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

本教程仅供交流与学习使用,请勿用于违法违规或违反公序良德等不良用途

出于对音源提供者的尊重请勿用于鬼畜用途

0.0.1. 继续使用视为已同意本教程所述相关条例,本教程已进行劝导义务,不对后续可能存在问题负责。

  1. 本教程内容仅代表个人,均不代表 so-vits-svc 团队及原作者观点
  2. 本教程涉及到的开源代码请自行遵守其开源协议
  3. 本教程默认使用由so-vits-svc 团队维护的仓库
  4. 若制作视频发布,推荐注明使用项目的Github链接,tag推荐使用so-vits-svc以便和其他基于技术进行区分
  5. 云端训练和推理部分可能涉及资金使用,如果你是未成年人,请在获得监护人的许可与理解后进行,未经许可引起的后续问题,本教程概不负责
  6. 本地训练(尤其是在硬件较差的情况下)可能需要设备长时间高负荷运行,请做好设备养护和散热措施
  7. 请确保你制作数据集的数据来源合法合规,且数据提供者明确你在制作什么以及可能造成的后果
  8. 出于设备原因,本教程仅在Windows系统下进行过测试,Mac 和 Linux 请确保自己有一定解决问题能力
  9. 该项目为歌声合成项目,无法进行其他用途,请知悉

0.0.2. 声明

本项目为开源、离线的项目,SvcDevelopTeam 的所有成员与本项目的所有开发者以及维护者(以下简称贡献者)对本项目没有控制力。本项目的贡献者从未向任何组织或个人提供包括但不限于数据集提取、数据集加工、算力支持、训练支持、推理等一切形式的帮助;本项目的贡献者不知晓也无法知晓使用者使用该项目的用途。故一切基于本项目训练的 AI 模型和合成的音频都与本项目贡献者无关。一切由此造成的问题由使用者自行承担。

此项目完全离线运行,不能收集任何用户信息或获取用户输入数据。因此,这个项目的贡献者不知道所有的用户输入和模型,因此不负责任何用户输入。

本项目只是一个框架项目,本身并没有语音合成的功能,所有的功能都需要用户自己训练模型。同时,这个项目没有任何模型,任何二次分发的项目都与这个项目的贡献者无关。

0.0.3. 使用规约

Warning:请自行解决数据集授权问题,禁止使用非授权数据集进行训练!任何由于使用非授权数据集进行训练造成的问题,需自行承担全部责任和后果!与仓库、仓库维护者、svc develop team、教程发布者 无关

  1. 本项目是基于学术交流目的建立,仅供交流与学习使用,并非为生产环境准备。
  2. 任何发布到视频平台的基于 sovits 制作的视频,都必须要在简介明确指明用于变声器转换的输入源歌声、音频,例如:使用他人发布的视频 / 音频,通过分离的人声作为输入源进行转换的,必须要给出明确的原视频、音乐链接;若使用是自己的人声,或是使用其他歌声合成引擎合成的声音作为输入源进行转换的,也必须在简介加以说明。
  3. 由输入源造成的侵权问题需自行承担全部责任和一切后果。使用其他商用歌声合成软件作为输入源时,请确保遵守该软件的使用条例,注意,许多歌声合成引擎使用条例中明确指明不可用于输入源进行转换!
  4. 禁止使用该项目从事违法行为与宗教、政治等活动,该项目维护者坚决抵制上述行为,不同意此条则禁止使用该项目。
  5. 继续使用视为已同意本仓库 README 所述相关条例,本仓库 README 已进行劝导义务,不对后续可能存在问题负责。
  6. 如果将此项目用于任何其他企划,请提前联系并告知本仓库作者,十分感谢。

0.1 硬件需求

  1. 推理目前分为命令行推理WebUI 推理,对速度要求不高的话 CPU 和 GPU 均可使用
  2. 至少需要6G 以上显存的NVIDIA 显卡(如 RTX3060)
  3. 云端一般常见的为 V100(16G)、V100(32G)、A100(40G)、A100(80G)等显卡,部分云端提供 RTX3090 等显卡

0.2 提前准备

  1. 至少准备 200 条 8s(约 30 分钟持续说话时长,即约 1.5 小时正常说话采样)左右时长的干净人声(无底噪,无混响)作为训练集。并且最好保持说话者情绪起伏波动较小,人声响度合适,并且做好响度匹配
  2. 请提前准备训练需要用到的底模挺重要的
  3. 须知:歌声作为训练集只能用来推理歌声,但语音作为训练集即可以推理歌声,也可以用来生成 TTS。但用语音作为训练集可能使高音和低音推理出现问题(即缺少高低音训练样本),有一种可行的解决方法是模型融合。
  4. 推理:需准备底噪<30dB,尽量不要带过多混响和和声干音进行推理
  5. 须知:推理女声歌曲时,建议用女声训练模型,同理男声也类似

0.3 训练周期

有底模的前提下,选取500 条音频作为训练集,经多次测试(RTX3060 Laptop,专用显存6G, batch_size = 3)得到以下结论:

  1. 模型训练步数 10w+(若每晚训练约 8 小时,需要约 7 天+)
  2. 模型训练步数 2w-3w(若每晚训练约 8 小时,需要约 2-3 天)
  3. 模型训练步数 5w-8w(若每晚训练约 8 小时,需要约 4-5 天)

模型怎样才算训练好了

  1. 这是一个非常无聊且没有意义的问题。就好比上来就问老师我家孩子怎么才能学习好,除了你自己,没有人能回答这个问题。
  2. 模型的训练关联于你的数据集质量、时长,所选的编码器、f0 算法,甚至一些超自然的玄学因素,即便你有一个成品模型,最终的转换效果也要取决于你的输入源以及推理参数。这不是一个线性的的过程,之间的变量实在是太多,所以你非得问“为什么我的模型出来不像啊”、“模型怎样才算训练好了”这样的问题,我只能说 WHO F**KING KNOWS?
  3. 但也不是一点办法没有,只能烧香拜佛了。我不否认烧香拜佛当然是一个有效的手段,但你也可以借助一些科学的工具,例如 Tensorboard 等,下一段就将教你怎么通过看 Tensorboard 来辅助了解训练状态,当然,最强的辅助工具其实长在你自己身上,一个声学模型怎样才算训练好了? 塞上耳机,让你的耳朵告诉你吧

✅1. 环境依赖

本项目需要的环境:NVIDIA-CUDA | Python = 3.8.9 | Pytorch | FFmpeg

1.1 Cuda

  • 在 cmd 控制台里输入nvidia-smi.exe以查看显卡驱动版本和对应的 cuda 版本

  • 前往 NVIDIA-Developer 官网下载与系统对应的 Cuda 版本 以Cuda-11.7版本为例(注:本文下述所有配置均在Cuda-11.7下演示Cuda11.7 下载地址 根据自己的系统和需求选择安装(一般本地 Windows 用户请依次选择Windows, x86_64, 系统版本, exe(local)

  • 安装成功之后在 cmd 控制台中输入nvcc -V, 出现类似以下内容则安装成功:

    nvcc: NVIDIA (R) Cuda compiler driver
    Copyright (c) 2005-2022 NVIDIA Corporation
    Built on Tue_May__3_19:00:59_Pacific_Daylight_Time_2022
    Cuda compilation tools, release 11.7, V11.7.64
    Build cuda_11.7.r11.7/compiler.31294372_0

特别注意!

  • Cuda需要与下方 1.3 Pytorch版本相匹配
  • 卸载方法:打开控制面板-程序-卸载程序,将带有NVIDIA CUDA的程序全部卸载即可(一共 5 个)

1.2 Python

  • 前往 Python 官网 下载 Python3.8.9(若使用conda配置python遇到没有3.8.9版本也可以直接输入3.8)详细安装方法以及添加 Path 此处省略,网上随便一查都有)
  • 安装完成后在 cmd 控制台中输入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能够稳定地运行该项目 (但不排除高版本也可以运行)

  • 配置 python 下载镜像源(有国外网络条件可跳过) 在 cmd 控制台依次执行
    # 设置清华大学下载镜像
    pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
    pip config set global.trusted-host pypi.tuna.tsinghua.edu.cn
  • 如果想要还原为默认源,类似的,你仅需要在控制台执行
pip config set global.index-url https://pypi.python.org/simple
  • 以下是一些国内常用的镜像源

python国内镜像源

# 临时更换
pip install package -i https://pypi.tuna.tsinghua.edu.cn/simple
# 永久更换
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

1.3 Pytorch

  • 首先我们需要单独安装torch, torchaudio, torchvision这三个库,直接前往 Pytorch 官网 选择所需版本然后复制 Run this Command 栏显示的命令至 cmd 安装

  • 安装完torch, torchaudio, torchvision这三个库之后,在 cmd 控制台运用以下命令检测 cuda 与 torch 版本是否匹配

    python
    # 回车运行
    import torch
    # 回车运行
    print(torch.__version__)
    # 回车运行
    print(torch.cuda.is_available())
    # 回车运行
  • 最后一行出现True则成功,出现False则失败,需要重新安装

1.4 安装依赖

  • 在项目文件夹内右击空白处选择 在终端中打开 并执行下面命令以安装库(若出现报错请尝试用pip install [库名称]重新单独安装直至成功)
  • 注意,项目文件夹内含有三个 requirements 的 txt 分别对应不同系统和需求,请根据需求选择其中一个(没什么特殊需求并且是 windows 系统的话选 requirements_win.txt)
    pip install -r requirements_win.txt

确保安装正确无误后请更新以下三个依赖:

pip install --upgrade fastapi==0.84.0
pip install --upgrade gradio==3.41.2
pip install --upgrade pydantic==1.10.12

关于 fairseq 安装不了的问题,windows 的解决方案如下

  • 第一步:更新 pip 到最新版
  • 第二步:安装 visual studio 2022,社区版就行,然后组件里装“使用 c++的桌面开发”。全部安装完成之后再重新 pip install farseq 即可完成安装

在安装依赖时出现的相关报错汇总

1. webUI 相关报错

出现以下报错时:

  • 启动 webUI 时报错:ImportError: cannot import name 'Schema' from 'pydantic'
  • webUI 加载模型时报错:AttributeError("'Dropdown' object has no attribute 'update'")
  • 凡是涉及到 fastapi, gradio, pydantic 这三个依赖的报错

解决方法如下: 请限制以下依赖版本:

fastapi==0.84.0 (>0.80.0 <=0.88.0)
gradio==3.41.2 (>=3.41.2 <=3.42.0)
pydantic==1.10.12

具体解决方法为:在安装完requirements_win.txt后,在 cmd 中依次输入以下命令以更新依赖包:

pip install --upgrade fastapi==0.84.0
pip install --upgrade gradio==3.41.2
pip install --upgrade pydantic==1.10.12

2. 依赖找不到导致的无法安装

出现类似以下报错时:

ERROR: Could not find a version that satisfies the requirement librosa==0.9.1 (from versions: none)
ERROR: No matching distribution found for librosa==0.9.1
# 主要特征是
No matching distribution found for xxxxx
Could not find a version that satisfies the requirement xxxx

具体解决方法为:更换安装源。手动安装这一依赖时添加下载源,以下是两个常用的镜像源地址

具体方法为:pip install [包名称] -i [下载源地址],例如我想在阿里源下载 librosa 这个依赖,并且要求依赖版本是 0.9.1,那么应该在 cmd 中输入以下命令:

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

1.5 FFmpeg

  • 前往 FFmpeg 官网 下载。解压至任意位置并在高级系统设置-环境变量中添加 Path 定位至.\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. 配置及训练(参考官方文档)

2.0 关于兼容 4.0 模型的问题

  • 可通过修改 4.0 模型的 config.json 对 4.0 的模型进行支持,需要在 config.json 的 model 字段中添加 speech_encoder 字段,具体见下
  "model": {
    .........
    "ssl_dim": 256,
    "n_speakers": 200,
    "speech_encoder":"vec256l9"
  }

2.1 关于 Python 版本问题

在进行测试后,我们认为Python 3.8.9能够稳定地运行该项目 (但不排除高版本也可以运行)

配置及训练

2.2 预先下载的模型文件

必须项

以下编码器需要选择一个使用

1. 若使用 contentvec 作为声音编码器(推荐)

vec768l12vec256l9 需要该编码器

或者下载下面的 ContentVec,大小只有 199MB,但效果相同:

  • contentvec :hubert_base.pt
    • 将文件名改为checkpoint_best_legacy_500.pt后,放在pretrain目录下
# contentvec
wget -P pretrain/ http://obs.cstcloud.cn/share/obs/sankagenkeshi/checkpoint_best_legacy_500.pt
# 也可手动下载放在pretrain目录
2. 若使用 hubertsoft 作为声音编码器
3. 若使用 Whisper-ppg 作为声音编码器
  • 下载模型 medium.pt, 该模型适配whisper-ppg
  • 下载模型 large-v2.pt, 该模型适配whisper-ppg-large
    • 放在pretrain目录下
4. 若使用 cnhubertlarge 作为声音编码器
5. 若使用 dphubert 作为声音编码器
6. 若使用 OnnxHubert/ContentVec 作为声音编码器

编码器列表

  • "vec768l12"
  • "vec256l9"
  • "vec256l9-onnx"
  • "vec256l12-onnx"
  • "vec768l9-onnx"
  • "vec768l12-onnx"
  • "hubertsoft-onnx"
  • "hubertsoft"
  • "whisper-ppg"
  • "cnhubertlarge"
  • "dphubert"
  • "whisper-ppg-large"

可选项(强烈建议使用)

  • 预训练底模文件: G_0.pth D_0.pth

    • 放在logs/44k目录下
  • 扩散模型预训练底模文件: model_0.pt

    • 放在logs/44k/diffusion目录下

扩散模型引用了DDSP-SVC的 Diffusion Model,底模与DDSP-SVC的扩散模型底模通用,可以去DDSP-SVC获取扩散模型的底模

虽然底模一般不会引起什么版权问题,但还是请注意一下,比如事先询问作者,又或者作者在模型描述中明确写明了可行的用途

提供 4.1 训练底模,需自行下载,下载地址:https://huggingface.co/Sucial/so-vits-svc4.1-pretrain_model 还包含扩散模型训练底模

提供 4.0 训练底模,需自行下载,下载地址:https://huggingface.co/datasets/ms903/sovits4.0-768vec-layer12/tree/main/sovits_768l12_pre_large_320k 并需要改名为 G_0.pth 和 D_0.pth

提供 3.0 训练底模,需自行下载,下载地址:https://pan.baidu.com/s/1uw6W3gOBvMbVey1qt_AzhA?pwd=80eo 提取码:80eo

可选项(根据情况选择)

如果使用NSF-HIFIGAN增强器浅层扩散的话,需要下载预训练的 NSF-HIFIGAN 模型,如果不需要可以不下载

  • 预训练的 NSF-HIFIGAN 声码器 :nsf_hifigan_20221211.zip
    • 解压后,将四个文件放在pretrain/nsf_hifigan目录下
# nsf_hifigan
wget -P pretrain/ https://github.com/openvpi/vocoders/releases/download/nsf-hifigan-v1/nsf_hifigan_20221211.zip
unzip -od pretrain/nsf_hifigan pretrain/nsf_hifigan_20221211.zip
# 也可手动下载放在pretrain/nsf_hifigan目录
# 地址:https://github.com/openvpi/vocoders/releases/tag/nsf-hifigan-v1

2.3 数据集准备

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

dataset_raw
├───speaker0
│   ├───xxx1-xxx1.wav
│   ├───...
│   └───Lxx-0xx8.wav
└───speaker1
    ├───xx2-0xxx2.wav
    ├───...
    └───xxx7-xxx007.wav

可以自定义说话人名称

dataset_raw
└───suijiSUI
    ├───1.wav
    ├───...
    └───25788785-20221210-200143-856_01_(Vocals)_0_0.wav

2.4 数据预处理

2.4.0 音频切片

将音频切片至5s - 15s, 稍微长点也无伤大雅,实在太长可能会导致训练中途甚至预处理就爆显存

可以使用audio-slicer-GUIaudio-slicer-CLI

一般情况下只需调整其中的Minimum Interval,普通陈述素材通常保持默认即可,歌唱素材可以调整至100甚至50

切完之后手动删除过长过短的音频

如果你使用 Whisper-ppg 声音编码器进行训练,所有的切片长度必须小于 30s

2.4.1 重采样至 44100Hz 单声道

python resample.py

注意

虽然本项目拥有重采样、转换单声道与响度匹配的脚本 resample.py,但是默认的响度匹配是匹配到 0db。这可能会造成音质的受损。而 python 的响度匹配包 pyloudnorm 无法对电平进行压限,这会导致爆音。所以建议可以考虑使用专业声音处理软件如adobe audition等软件做响度匹配处理。若已经使用其他软件做响度匹配,可以在运行上述命令时添加--skip_loudnorm跳过响度匹配步骤。如:

python resample.py --skip_loudnorm

2.4.2 自动划分训练集、验证集,以及自动生成配置文件

python preprocess_flist_config.py --speech_encoder vec768l12

speech_encoder 拥有七个选择

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

如果省略 speech_encoder 参数,默认值为 vec768l12

使用响度嵌入

若使用响度嵌入,需要增加--vol_aug参数,比如:

python preprocess_flist_config.py --speech_encoder vec768l12 --vol_aug

使用后训练出的模型将匹配到输入源响度,否则为训练集响度。

此时可以在生成的 config.json 与 diffusion.yaml 修改部分参数

  • keep_ckpts:训练时保留最后几个模型,0为保留所有,默认只保留最后3

  • all_in_mem,cache_all_data:加载所有数据集到内存中,某些平台的硬盘 IO 过于低下、同时内存容量 远大于 数据集体积时可以启用

  • batch_size:单次训练加载到 GPU 的数据量,调整到低于显存容量的大小即可

  • vocoder_name : 选择一种声码器,默认为nsf-hifigan.

声码器列表
nsf-hifigan
nsf-snake-hifigan

2.4.3 生成 hubert 与 f0

python preprocess_hubert_f0.py --f0_predictor dio

f0_predictor 拥有四个选择

crepe
dio
pm
harvest

如果训练集过于嘈杂,请使用 crepe 处理 f0

如果省略 f0_predictor 参数,默认值为 dio

尚若需要浅扩散功能(可选),需要增加--use_diff 参数,比如

python preprocess_hubert_f0.py --f0_predictor dio --use_diff

执行完以上步骤后 dataset 目录便是预处理完成的数据,可以删除 dataset_raw 文件夹了

2.5 训练

2.5.1 扩散模型(可选)

尚若需要浅扩散功能,需要训练扩散模型,扩散模型训练方法为:

python train_diff.py -c configs/diffusion.yaml

2.5.2 主模型训练

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

模型训练结束后,模型文件保存在logs/44k目录下,扩散模型在logs/44k/diffusion

主模型训练时出现的相关报错汇总

1. 报错: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 值,调大虚拟内存,重启电脑清理显存,直到 batchsize 值和虚拟内存合适不报错为止

✅3. 推理(参考官方文档)

3.1 命令行推理

使用 inference_main.py

#
python inference_main.py -m "logs/44k/G_30400.pth" -c "configs/config.json" -n "君の知らない物語-src.wav" -t 0 -s "nen"

必填项部分:

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

可选项部分:部分具体见下一节

  • -lg | --linear_gradient:两段音频切片的交叉淡入长度,如果强制切片后出现人声不连贯可调整该数值,如果连贯建议采用默认值 0,单位为秒
  • -f0p | --f0_predictor:选择 F0 预测器,可选择 crepe,pm,dio,harvest,默认为 pm(注意:crepe 为原 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 参数将会变成特征检索的索引路径与混合比例

浅扩散设置:

  • -dm | --diffusion_model_path:扩散模型路径
  • -dc | --diffusion_config_path:扩散模型配置文件路径
  • -ks | --k_step:扩散步数,越大越接近扩散模型的结果,默认 100
  • -od | --only_diffusion:纯扩散模式,该模式不会加载 sovits 模型,以扩散模型推理
  • -se | --second_encoding:二次编码,浅扩散前会对原始音频进行二次编码,玄学选项,有时候效果好,有时候效果差

注意

如果使用whisper-ppg 声音编码器进行推理,需要将--clip设置为 25,-lg设置为 1。否则将无法正常推理。

3.2 WebUI 推理

使用以下命令打开 webui 界面,推理参数参考 3.1

python webUI.py

✅4. 增强效果的可选项

如果前面的效果已经满意,或者没看明白下面在讲啥,那后面的内容都可以忽略,不影响模型使用(这些可选项影响比较小,可能在某些特定数据上有点效果,但大部分情况似乎都感知不太明显)

自动 f0 预测

4.0 模型训练过程会训练一个 f0 预测器,对于语音转换可以开启自动音高预测,如果效果不好也可以使用手动的,但转换歌声时请不要启用此功能!!!会严重跑调!!

  • 在 inference_main 中设置 auto_predict_f0 为 true 即可

聚类音色泄漏控制

介绍:聚类方案可以减小音色泄漏,使得模型训练出来更像目标的音色(但其实不是特别明显),但是单纯的聚类方案会降低模型的咬字(会口齿不清)(这个很明显),本模型采用了融合的方式,可以线性控制聚类方案与非聚类方案的占比,也就是可以手动在"像目标音色" 和 "咬字清晰" 之间调整比例,找到合适的折中点

使用聚类前面的已有步骤不用进行任何的变动,只需要额外训练一个聚类模型,虽然效果比较有限,但训练成本也比较低

  • 训练过程:
    • 使用 cpu 性能较好的机器训练,据我的经验在腾讯云 6 核 cpu 训练每个 speaker 需要约 4 分钟即可完成训练
    • 执行python cluster/train_cluster.py,模型的输出会在logs/44k/kmeans_10000.pt
    • 聚类模型目前可以使用 gpu 进行训练,执行python cluster/train_cluster.py --gpu
# CPU
python cluster/train_cluster.py
# GPU
python cluster/train_cluster.py --gpu
  • 推理过程:
    • inference_main.py中指定cluster_model_path
    • inference_main.py中指定cluster_infer_ratio0为完全不使用聚类,1为只使用聚类,通常设置0.5即可

特征检索

介绍:跟聚类方案一样可以减小音色泄漏,咬字比聚类稍好,但会降低推理速度,采用了融合的方式,可以线性控制特征检索与非特征检索的占比,

  • 训练过程: 首先需要在生成 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_ratio0为完全不使用特征检索,1为只使用特征检索,通常设置0.5即可

✅5.其他可选项

5.1 模型压缩

生成的模型含有继续训练所需的信息。如果确认不再训练,可以移除模型中此部分信息,得到约 1/3 大小的最终模型。

使用 compress_model.py

#
python compress_model.py -c="configs/config.json" -i="logs/44k/G_30400.pth" -o="logs/44k/release.pth"

5.2 声线混合

5.2.1 静态声线混合

参考webUI.py文件中,小工具/实验室特性的静态声线融合。

介绍:该功能可以将多个声音模型合成为一个声音模型(多个模型参数的凸组合或线性组合),从而制造出现实中不存在的声线 注意:

  1. 该功能仅支持单说话人的模型
  2. 如果强行使用多说话人模型,需要保证多个模型的说话人数量相同,这样可以混合同一个 SpaekerID 下的声音
  3. 保证所有待混合模型的 config.json 中的 model 字段是相同的
  4. 输出的混合模型可以使用待合成模型的任意一个 config.json,但聚类模型将不能使用
  5. 批量上传模型的时候最好把模型放到一个文件夹选中后一起上传
  6. 混合比例调整建议大小在 0-100 之间,也可以调为其他数字,但在线性组合模式下会出现未知的效果
  7. 混合完毕后,文件将会保存在项目根目录中,文件名为 output.pth
  8. 凸组合模式会将混合比例执行 Softmax 使混合比例相加为 1,而线性组合模式不会

5.2.2 动态声线混合

参考spkmix.py文件中关于动态声线混合的介绍

角色混合轨道 编写规则:

角色 ID : [[起始时间 1, 终止时间 1, 起始数值 1, 起始数值 1], [起始时间 2, 终止时间 2, 起始数值 2, 起始数值 2]]

起始时间和前一个的终止时间必须相同,第一个起始时间必须为 0,最后一个终止时间必须为 1 (时间的范围为 0-1)

全部角色必须填写,不使用的角色填[[0., 1., 0., 0.]]即可

融合数值可以随便填,在指定的时间段内从起始数值线性变化为终止数值,内部会自动确保线性组合为 1(凸组合条件),可以放心使用

推理的时候使用--use_spk_mix参数即可启用动态声线混合

5.3 Onnx 导出

使用 onnx_export.py

  • 新建文件夹:checkpoints 并打开
  • checkpoints文件夹中新建一个文件夹作为项目文件夹,文件夹名为你的项目名称,比如aziplayer
  • 将你的模型更名为model.pth,配置文件更名为config.json,并放置到刚才创建的aziplayer文件夹下
  • 将 onnx_export.py 中path = "NyaruTaffy""NyaruTaffy" 修改为你的项目名称,path = "aziplayer" (onnx_export_speaker_mix,为支持角色混合的onnx导出)
  • 运行 onnx_export.py
  • 等待执行完毕,在你的项目文件夹下会生成一个model.onnx,即为导出的模型

注意:Hubert Onnx 模型请使用 MoeSS 提供的模型,目前无法自行导出(fairseq 中 Hubert 有不少 onnx 不支持的算子和涉及到常量的东西,在导出时会报错或者导出的模型输入输出 shape 和结果都有问题)

✅6. 简单混音处理及成品导出

使用 Ultimate Vocal Remover,SpectraLayers 10,RipX 等软件预处理推理前音频,使用音频宿主软件(FL studio,Studio One 等等)处理推理后音频,具体流程比较麻烦,请参考https://www.bilibili.com/video/BV1CP411x7Vf/

✅ 附录:常见报错的解决办法

部分报错及解决方法,来自https://www.bilibili.com/read/cv22206231

报错:UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd0 in position xx 答:数据集文件名中不要包含中文或日文等非西文字符。

报错:页面文件太小,无法完成操作。 答:调整一下虚拟内存大小,具体的方法各种地方一搜就能搜到,不展开了。

报错:UnboundLocalError: local variable 'audio' referenced before assignment 答:上传的推理音频需要是 16 位整数 wav 格式,用 Au 转换一下就好。或者装个 ffmpeg 一劳永逸地解决问题。

报错:AssertionError: CPU training is not allowed. 答:非 N 卡跑不了的。

报错:torch.cuda.OutOfMemoryError: CUDA out of memory 答:爆显存了,试着把 batch_size 改小,改到 1 还爆的话建议云端训练。

报错:RuntimeError: DataLoader worker (pid(s) xxxx) exited unexpectedly 答:把虚拟内存再调大一点。

报错:NotImplementedError: Only 2D, 3D, 4D, 5D padding with non-constant padding are supported for no 答:数据集切片切太长了,5-10 秒差不多。

报错:CUDA error: CUBLAS_STATUS_NOT_INITIALIZED when calling 'cublasCreate(handle)' 答:爆显存了,基本上跟 CUDA 有关的报错大都是爆显存……

报错:torch.multiprocessing.spawn.ProcessExitedException: process 0 terminated with exit code 3221225477 答:调大虚拟内存,管理员运行脚本

报错:'HParams' object has no attribute 'xxx' 答:无法找到音色,一般是配置文件和模型没对应,打开配置文件拉到最下面看看有没有你训练的音色

报错:The expand size of the tensor (768) must match the existing size (256) at non-singleton dimension 0. 答:把 dataset/44k 下的内容全部删了,重新走一遍预处理流程

报错: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 的配置文件,如果上面报错的 256 的 768 位置反过来了那就是 vec768 的模型用了 v1 的配置文件

在安装依赖时出现的相关报错汇总

1. webUI 相关报错

出现以下报错时:

  • 启动 webUI 时报错:ImportError: cannot import name 'Schema' from 'pydantic'
  • webUI 加载模型时报错:AttributeError("'Dropdown' object has no attribute 'update'")
  • 凡是涉及到 fastapi, gradio, pydantic 这三个依赖的报错

解决方法如下: 请限制以下依赖版本:

fastapi==0.84.0 (>0.80.0 <=0.88.0)
gradio==3.41.2 (>=3.41.2 <=3.42.0)
pydantic==1.10.12

具体解决方法为:在安装完requirements_win.txt后,在 cmd 中依次输入以下命令以更新依赖包:

pip install --upgrade fastapi==0.84.0
pip install --upgrade gradio==3.41.2
pip install --upgrade pydantic==1.10.12

2. 依赖找不到导致的无法安装

出现类似以下报错时:

ERROR: Could not find a version that satisfies the requirement librosa==0.9.1 (from versions: none)
ERROR: No matching distribution found for librosa==0.9.1
# 主要特征是
No matching distribution found for xxxxx
Could not find a version that satisfies the requirement xxxx

具体解决方法为:更换安装源。手动安装这一依赖时添加下载源,以下是两个常用的镜像源地址

具体方法为:pip install [包名称] -i [下载源地址],例如我想在阿里源下载 librosa 这个依赖,并且要求依赖版本是 0.9.1,那么应该在 cmd 中输入以下命令:

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

主模型训练时出现的相关报错汇总

1. 报错: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 值,调大虚拟内存,重启电脑清理显存,直到 batchsize 值和虚拟内存合适不报错为止


感谢名单:

-ai-so-vits-svc-chinese-detaild-documents's People

Contributors

suc-driverold avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.