so-vits-svc - 歌声音色转换模型,通过SoftVC内容编码器提取源音频语音特征,与F0同时输入VITS替换原本的文本输入达到歌声转换的效果。同时,更换声码器为 NSF HiFiGAN 解决断音问题

Created at: 2023-03-10 17:31:09
Language: Python
License: MIT

软VC VITS 歌声转换

中文 |中文简体

使用条款

  1. 本项目仅以学术交流为目的,旨在用于交流和学习目的。它不适用于生产环境。请自行解决数据集的授权问题。对于因使用未经授权的数据集进行训练而导致的任何问题及其一切后果,你应自行承担。
  2. 任何基于sovit的视频在视频平台上发布,都必须在描述中明确注明用于变声,并注明语音或音频的输入源,例如使用他人发布的视频或音频,并将人声分离作为输入源进行转换,必须提供清晰的原始视频或音乐链接。如果你自己的声音或其他商业人声合成软件的其他合成声音用作转换的输入源,你还必须在说明中说明。
  3. 对于输入源引起的任何侵权问题,你应自行承担。使用其他商业人声合成软件作为输入源时,请确保你遵守该软件的使用条款。请注意,许多人声合成引擎在其使用条款中明确声明它们不能用于输入源转换。
  4. 继续使用本项目即视为同意本存储库自述文件中所述的相关规定。本存储库自述文件有义务说服,并且不对可能出现的任何后续问题负责。
  5. 如果你分发本仓库的代码或公开发布本项目产生的任何结果(包括但不限于视频共享平台),请注明原作者和代码来源(本仓库)。
  6. 如果你将此项目用于任何其他计划,请提前联系并告知此存储库的作者。谢谢。

更新

更新了 4.0-v2 模型,整个过程与 4.0 相同。与 4.0 相比,在某些情况下有一些改进,但也有一些情况有所倒退。有关详细信息,请参阅 4.0-v2 分支

型号介绍

歌声转换模型使用SoftVC内容编码器提取源音频语音特征,然后将向量直接馈送到VITS中,而不是转换为基于文本的中间;因此,音高和语调是守恒的。此外,声码器改为NSF HiFiGAN,以解决声音中断的问题。

4.0 版本更新内容

  • 功能输入更改为内容 Vec
  • 采样率统一使用44100Hz
  • 由于跳跃大小和其他参数的变化,以及某些模型结构的简化,推理所需的 GPU 内存显着减少。4.0 版的 44kHz GPU 内存使用量甚至小于 3.0 版的 32kHz 使用量。
  • 调整了一些代码结构
  • 数据集创建和训练过程与 3.0 版本一致,但模型完全非通用,数据集需要再次进行完全预处理。
  • 新增选项1:VC模式自动音高预测,即转换语音时无需手动输入音高键,男女声调可自动转换。但是,转换歌曲时,此模式会导致音高偏移。
  • 新增选项2:通过k均值聚类方案减少音色泄漏,使音色与目标音色更相似。

预训练模型文件

必填

# contentvec
wget -P hubert/ http://obs.cstcloud.cn/share/obs/sankagenkeshi/checkpoint_best_legacy_500.pt
# Alternatively, you can manually download and place it in the hubert directory

可选(强烈推荐)

  • 预训练模型文件:
    G_0.pth
    D_0.pth
    • 将它们放在目录下
      logs/44k

从svc-develop-team(TBD)或其他任何地方获取它们。

虽然预训练模型一般不会造成任何版权问题,但请注意。例如,提前询问作者,或者作者在描述中已经明确指出了可行的用途。

数据集准备

只需将数据集放在具有以下文件结构的目录中即可。

dataset_raw

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

预处理

  1. 重新采样至 44100hz
python resample.py
  1. 自动将数据集拆分为训练集、验证集和测试集,并生成配置文件
python preprocess_flist_config.py
  1. 生成休伯特和 f0
python preprocess_hubert_f0.py

完成上述步骤后,数据集目录将包含预处理后的数据,可以删除dataset_raw文件夹。

训练

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

注意:在训练过程中,旧模型将自动清除,仅保留最新的三个模型。如果要防止过度拟合,则需要手动备份模型检查点,或将配置文件修改为 0 以永不清除它们。

keep_ckpts

推理

使用inference_main.py

到目前为止,版本 4.0(训练和推理)的使用与版本 3.0 完全相同,没有变化(推理现在支持命令行)。

# Example
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:位于 raw 文件夹中的 wav 文件名列表。
  • -t, --trans:音高调整,支持正负(半音)值。
  • -s, --spk_list:用于合成的目标说话人名称。

可选参数:请参阅下一节

  • -a, --auto_predict_f0:语音转换的自动音高预测,转换歌曲时不要启用此功能,因为它可能会导致严重的音高问题。
  • -cm, --cluster_model_path:聚类分析模型的路径,如果未训练聚类分析,请填写任意值。
  • -cr, --cluster_infer_ratio:聚类解决方案的比例,范围 0-1,如果未训练聚类模型,则填写 0。

可选设置

如果上一节的结果令人满意,或者你不了解下一节中讨论的内容,则可以跳过它,它不会影响模型的使用。(这些可选设置的影响相对较小,并且它们可能对某些特定数据产生一些影响,但在大多数情况下,差异可能并不明显。

自动 f0 预测

在 4.0 模型训练期间,还会训练 f0 预测器,可用于语音转换过程中的自动音高预测。但是,如果效果不好,则可以使用手动音高预测。但是请不要在转换歌声时启用此功能,因为它可能会导致严重的音高转换!

  • 在inference_main中将“auto_predict_f0”设置为 true。

基于集群的音色泄漏控制

简介:聚类方案可以减少音色泄漏,使训练好的模型听起来更像目标的音色(虽然这种效果不是很明显),但单独使用聚类会降低模型的清晰度(模型可能听起来不清楚)。因此,该模型采用融合方法线性控制聚类和非聚类方案的比例。换句话说,你可以手动调整“听起来像目标音色”和“清晰清晰”之间的比例,以找到合适的权衡点。

不需要更改群集之前的现有步骤。你需要做的就是训练一个额外的聚类分析模型,该模型的训练成本相对较低。

  • 培训流程:
    • 在具有良好 CPU 性能的计算机上训练。根据我的经验,在腾讯云 6 核 CPU 上训练每个扬声器大约需要 4 分钟。
    • 执行“python cluster/train_cluster.py”。模型的输出将保存在“logs/44k/kmeans_10000.pt”中。
  • 推理过程:
    • 在inference_main中指定“cluster_model_path”。
    • 在inference_main中指定“cluster_infer_ratio”,其中 0 表示根本不使用聚类,1 表示仅使用聚类,通常 0.5 就足够了。

在科拉布中打开 sovits4_for_colab.ipynb

导出到 Onnx

使用onnx_export.py

  • 创建一个名为并打开它的文件夹
    checkpoints
  • 例如,在该文件夹中创建一个文件夹作为项目文件夹,以项目命名
    checkpoints
    aziplayer
  • 将模型重命名为 ,配置文件重命名为 ,并将它们放在刚刚创建的文件夹中
    model.pth
    config.json
    aziplayer
  • onnx_export.py修改你的项目名称,
    "NyaruTaffy"
    path = "NyaruTaffy"
    path = "aziplayer"
  • 运行onnx_export.py
  • 等待它完成运行。将在项目文件夹中生成 A,即导出的模型。
    model.onnx

对 Onnx 模型的 UI 支持

注意:对于休伯特 Onnx 型号,请使用 MoeSS 提供的型号。目前,它们不能单独导出(fairseq 中的 Hubert 有许多不受支持的运算符和涉及常量的东西,这些常量可能会导致错误或导致导出时输入/输出形状和结果出现问题。休伯特4.0

一些法律条文供参考

《民法典》

第一千零一十九条

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

第一千零二十四条

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

第一千零二十七条

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