From d6e732999baba79d5cff8dfa5868262ee19cf5c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stardust=C2=B7=E5=87=8F?= <2225664821@qq.com> Date: Sun, 9 Jul 2023 17:01:34 +0800 Subject: [PATCH 1/4] Update README_zh_CN.md --- README_zh_CN.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README_zh_CN.md b/README_zh_CN.md index b3af5f0..1cc062c 100644 --- a/README_zh_CN.md +++ b/README_zh_CN.md @@ -85,7 +85,7 @@ ```shell # contentvec -wget -P pretrain/ http://obs.cstcloud.cn/share/obs/sankagenkeshi/checkpoint_best_legacy_500.pt +wget -P pretrain/checkpoint_best_legacy_500.pt https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/hubert_base.pt # 也可手动下载放在pretrain目录 ``` From a870db540ace7794adb0a9566542996e1e36a0e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stardust=C2=B7=E5=87=8F?= <2225664821@qq.com> Date: Sun, 9 Jul 2023 17:23:52 +0800 Subject: [PATCH 2/4] Update README_zh_CN.md --- README_zh_CN.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README_zh_CN.md b/README_zh_CN.md index 1cc062c..80a8e33 100644 --- a/README_zh_CN.md +++ b/README_zh_CN.md @@ -85,7 +85,7 @@ ```shell # contentvec -wget -P pretrain/checkpoint_best_legacy_500.pt https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/hubert_base.pt +wget -P pretrain/ https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/hubert_base.pt -O checkpoint_best_legacy_500.pt # 也可手动下载放在pretrain目录 ``` From f26d9fd5d531dbec1ca72557f519109535f30516 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A4=9A=E7=8E=A9=E5=B9=BB=E7=81=B5qwq?= <94176676+HuanLinOTO@users.noreply.github.com> Date: Mon, 10 Jul 2023 14:02:09 +0800 Subject: [PATCH 3/4] feat(cluster): ignore .ipynb_checkpoints --- cluster/train_cluster.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/cluster/train_cluster.py b/cluster/train_cluster.py index 7e42de4..dfa55e6 100644 --- a/cluster/train_cluster.py +++ b/cluster/train_cluster.py @@ -14,6 +14,9 @@ logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) def train_cluster(in_dir, n_clusters, use_minibatch=True, verbose=False,use_gpu=False):#gpu_minibatch真拉,虽然库支持但是也不考虑 + if in_dir.endswith(".ipynb_checkpoints"): + logger.info(f"Ignore {in_dir}") + logger.info(f"Loading features from {in_dir}") features = [] nums = 0 From 41b1a784bfdad7e000d7f26f7e3e9cbba91eb9cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A4=9A=E7=8E=A9=E5=B9=BB=E7=81=B5qwq?= <94176676+HuanLinOTO@users.noreply.github.com> Date: Mon, 10 Jul 2023 17:12:09 +0800 Subject: [PATCH 4/4] docs(readme.md): pangu format --- README_zh_CN.md | 169 ++++++++++++++++++++++++------------------------ 1 file changed, 84 insertions(+), 85 deletions(-) diff --git a/README_zh_CN.md b/README_zh_CN.md index 80a8e33..f2fcae9 100644 --- a/README_zh_CN.md +++ b/README_zh_CN.md @@ -2,13 +2,13 @@ [**English**](./README.md) | [**中文简体**](./README_zh_CN.md) -#### ✨ 带有F0曲线编辑器,角色混合时间轴编辑器的推理端 (Onnx模型的用途) : [MoeVoiceStudio](https://github.com/NaruseMioShirakana/MoeVoiceStudio) +#### ✨ 带有 F0 曲线编辑器,角色混合时间轴编辑器的推理端 (Onnx 模型的用途) : [MoeVoiceStudio](https://github.com/NaruseMioShirakana/MoeVoiceStudio) #### ✨ 改善了交互的一个分支推荐:[34j/so-vits-svc-fork](https://github.com/34j/so-vits-svc-fork) #### ✨ 支持实时转换的一个客户端:[w-okada/voice-changer](https://github.com/w-okada/voice-changer) -**本项目与Vits有着根本上的不同。Vits是TTS,本项目是SVC。本项目无法实现TTS,Vits也无法实现SVC,这两个项目的模型是完全不通用的。** +**本项目与 Vits 有着根本上的不同。Vits 是 TTS,本项目是 SVC。本项目无法实现 TTS,Vits 也无法实现 SVC,这两个项目的模型是完全不通用的。** ## 重要通知 @@ -16,7 +16,7 @@ ## 声明 -本项目为开源、离线的项目,SvcDevelopTeam的所有成员与本项目的所有开发者以及维护者(以下简称贡献者)对本项目没有控制力。本项目的贡献者从未向任何组织或个人提供包括但不限于数据集提取、数据集加工、算力支持、训练支持、推理等一切形式的帮助;本项目的贡献者不知晓也无法知晓使用者使用该项目的用途。故一切基于本项目训练的AI模型和合成的音频都与本项目贡献者无关。一切由此造成的问题由使用者自行承担。 +本项目为开源、离线的项目,SvcDevelopTeam 的所有成员与本项目的所有开发者以及维护者(以下简称贡献者)对本项目没有控制力。本项目的贡献者从未向任何组织或个人提供包括但不限于数据集提取、数据集加工、算力支持、训练支持、推理等一切形式的帮助;本项目的贡献者不知晓也无法知晓使用者使用该项目的用途。故一切基于本项目训练的 AI 模型和合成的音频都与本项目贡献者无关。一切由此造成的问题由使用者自行承担。 此项目完全离线运行,不能收集任何用户信息或获取用户输入数据。因此,这个项目的贡献者不知道所有的用户输入和模型,因此不负责任何用户输入。 @@ -35,20 +35,20 @@ ## 📝 模型简介 -歌声音色转换模型,通过SoftVC内容编码器提取源音频语音特征,与F0同时输入VITS替换原本的文本输入达到歌声转换的效果。同时,更换声码器为 [NSF HiFiGAN](https://github.com/openvpi/DiffSinger/tree/refactor/modules/nsf_hifigan)解决断音问题。 +歌声音色转换模型,通过 SoftVC 内容编码器提取源音频语音特征,与 F0 同时输入 VITS 替换原本的文本输入达到歌声转换的效果。同时,更换声码器为 [NSF HiFiGAN](https://github.com/openvpi/DiffSinger/tree/refactor/modules/nsf_hifigan) 解决断音问题。 ### 🆕 4.1-Stable 版本更新内容 -+ 特征输入更换为 [Content Vec](https://github.com/auspicious3000/contentvec) 的第12层Transformer输出,并兼容4.0分支 ++ 特征输入更换为 [Content Vec](https://github.com/auspicious3000/contentvec) 的第 12 层 Transformer 输出,并兼容 4.0 分支 + 更新浅层扩散,可以使用浅层扩散模型提升音质 -+ 增加whisper语音编码器的支持 ++ 增加 whisper 语音编码器的支持 + 增加静态/动态声线融合 + 增加响度嵌入 -+ 增加特征检索,来自于[RVC](https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI) ++ 增加特征检索,来自于 [RVC](https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI) -### 🆕 关于兼容4.0模型的问题 +### 🆕 关于兼容 4.0 模型的问题 -+ 可通过修改4.0模型的config.json对4.0的模型进行支持,需要在config.json的model字段中添加speech_encoder字段,具体见下 ++ 可通过修改 4.0 模型的 config.json 对 4.0 的模型进行支持,需要在 config.json 的 model 字段中添加 speech_encoder 字段,具体见下 ``` "model": { @@ -72,45 +72,45 @@ **以下编码器需要选择一个使用** -##### **1. 若使用contentvec作为声音编码器(推荐)** +##### **1. 若使用 contentvec 作为声音编码器(推荐)** `vec768l12`与`vec256l9` 需要该编码器 + contentvec :[checkpoint_best_legacy_500.pt](https://ibm.box.com/s/z1wgl1stco8ffooyatzdwsqn2psd9lrr) + 放在`pretrain`目录下 -或者下载下面的ContentVec,大小只有199MB,但效果相同: +或者下载下面的 ContentVec,大小只有 199MB,但效果相同: + contentvec :[hubert_base.pt](https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/hubert_base.pt) + 将文件名改为`checkpoint_best_legacy_500.pt`后,放在`pretrain`目录下 ```shell # contentvec wget -P pretrain/ https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/hubert_base.pt -O checkpoint_best_legacy_500.pt -# 也可手动下载放在pretrain目录 +# 也可手动下载放在 pretrain 目录 ``` -##### **2. 若使用hubertsoft作为声音编码器** +##### **2. 若使用 hubertsoft 作为声音编码器** + soft vc hubert:[hubert-soft-0d54a1f4.pt](https://github.com/bshall/hubert/releases/download/v0.1/hubert-soft-0d54a1f4.pt) + 放在`pretrain`目录下 -##### **3. 若使用Whisper-ppg作为声音编码器** +##### **3. 若使用 Whisper-ppg 作为声音编码器** + 下载模型 [medium.pt](https://openaipublic.azureedge.net/main/whisper/models/345ae4da62f9b3d59415adc60127b97c714f32e89e936602e85993674d08dcb1/medium.pt), 该模型适配`whisper-ppg` + 下载模型 [large-v2.pt](https://openaipublic.azureedge.net/main/whisper/models/81f7c96c852ee8fc832187b0132e569d6c3065a3252ed18e56effd0b6a73e524/large-v2.pt), 该模型适配`whisper-ppg-large` + 放在`pretrain`目录下 - -##### **4. 若使用cnhubertlarge作为声音编码器** + +##### **4. 若使用 cnhubertlarge 作为声音编码器** + 下载模型 [chinese-hubert-large-fairseq-ckpt.pt](https://huggingface.co/TencentGameMate/chinese-hubert-large/resolve/main/chinese-hubert-large-fairseq-ckpt.pt) + 放在`pretrain`目录下 -##### **5. 若使用dphubert作为声音编码器** +##### **5. 若使用 dphubert 作为声音编码器** + 下载模型 [DPHuBERT-sp0.75.pth](https://huggingface.co/pyf98/DPHuBERT/resolve/main/DPHuBERT-sp0.75.pth) + 放在`pretrain`目录下 -##### **6. 若使用WavLM作为声音编码器** +##### **6. 若使用 WavLM 作为声音编码器** + 下载模型 [WavLM-Base+.pt](https://valle.blob.core.windows.net/share/wavlm/WavLM-Base+.pt?sv=2020-08-04&st=2023-03-01T07%3A51%3A05Z&se=2033-03-02T07%3A51%3A00Z&sr=c&sp=rl&sig=QJXmSJG9DbMKf48UDIU1MfzIro8HQOf3sqlNXiflY1I%3D), 该模型适配`wavlmbase+` + 放在`pretrain`目录下 -##### **7. 若使用OnnxHubert/ContentVec作为声音编码器** +##### **7. 若使用 OnnxHubert/ContentVec 作为声音编码器** + 下载模型 [MoeSS-SUBModel](https://huggingface.co/NaruseMioShirakana/MoeSS-SUBModel/tree/main) + 放在`pretrain`目录下 @@ -129,7 +129,7 @@ wget -P pretrain/ https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/mai - "whisper-ppg-large" - "wavlmbase+" -#### **可选项(强烈建议使用)** +#### **可选项(强烈建议使用)** + 预训练底模文件: `G_0.pth` `D_0.pth` + 放在`logs/44k`目录下 @@ -137,30 +137,30 @@ wget -P pretrain/ https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/mai + 扩散模型预训练底模文件: `model_0.pt ` + 放在`logs/44k/diffusion`目录下 -从svc-develop-team(待定)或任何其他地方获取Sovits底模 +从 svc-develop-team(待定)或任何其他地方获取 Sovits 底模 -扩散模型引用了[Diffusion-SVC](https://github.com/CNChTu/Diffusion-SVC)的Diffusion Model,底模与[Diffusion-SVC](https://github.com/CNChTu/Diffusion-SVC)的扩散模型底模通用,可以去[Diffusion-SVC](https://github.com/CNChTu/Diffusion-SVC)获取扩散模型的底模 +扩散模型引用了 [Diffusion-SVC](https://github.com/CNChTu/Diffusion-SVC) 的 Diffusion Model,底模与 [Diffusion-SVC](https://github.com/CNChTu/Diffusion-SVC) 的扩散模型底模通用,可以去 [Diffusion-SVC](https://github.com/CNChTu/Diffusion-SVC) 获取扩散模型的底模 虽然底模一般不会引起什么版权问题,但还是请注意一下,比如事先询问作者,又或者作者在模型描述中明确写明了可行的用途 -#### **可选项(根据情况选择)** +#### **可选项(根据情况选择)** -如果使用`NSF-HIFIGAN增强器`或`浅层扩散`的话,需要下载预训练的NSF-HIFIGAN模型,如果不需要可以不下载 +如果使用`NSF-HIFIGAN 增强器`或`浅层扩散`的话,需要下载预训练的 NSF-HIFIGAN 模型,如果不需要可以不下载 -+ 预训练的NSF-HIFIGAN声码器 :[nsf_hifigan_20221211.zip](https://github.com/openvpi/vocoders/releases/download/nsf-hifigan-v1/nsf_hifigan_20221211.zip) ++ 预训练的 NSF-HIFIGAN 声码器 :[nsf_hifigan_20221211.zip](https://github.com/openvpi/vocoders/releases/download/nsf-hifigan-v1/nsf_hifigan_20221211.zip) + 解压后,将四个文件放在`pretrain/nsf_hifigan`目录下 ```shell # 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目录 +# 也可手动下载放在 pretrain/nsf_hifigan 目录 # 地址:https://github.com/openvpi/vocoders/releases/tag/nsf-hifigan-v1 ``` ## 📊 数据集准备 -仅需要以以下文件结构将数据集放入dataset_raw目录即可 +仅需要以以下文件结构将数据集放入 dataset_raw 目录即可 ``` dataset_raw @@ -190,15 +190,15 @@ dataset_raw 将音频切片至`5s - 15s`, 稍微长点也无伤大雅,实在太长可能会导致训练中途甚至预处理就爆显存 -可以使用[audio-slicer-GUI](https://github.com/flutydeer/audio-slicer)、[audio-slicer-CLI](https://github.com/openvpi/audio-slicer) +可以使用 [audio-slicer-GUI](https://github.com/flutydeer/audio-slicer)、[audio-slicer-CLI](https://github.com/openvpi/audio-slicer) 一般情况下只需调整其中的`Minimum Interval`,普通陈述素材通常保持默认即可,歌唱素材可以调整至`100`甚至`50` 切完之后手动删除过长过短的音频 -**如果你使用Whisper-ppg声音编码器进行训练,所有的切片长度必须小于30s** +**如果你使用 Whisper-ppg 声音编码器进行训练,所有的切片长度必须小于 30s** -### 1. 重采样至44100Hz单声道 +### 1. 重采样至 44100Hz 单声道 ```shell python resample.py @@ -206,7 +206,7 @@ python resample.py #### 注意 -虽然本项目拥有重采样、转换单声道与响度匹配的脚本resample.py,但是默认的响度匹配是匹配到0db。这可能会造成音质的受损。而python的响度匹配包pyloudnorm无法对电平进行压限,这会导致爆音。所以建议可以考虑使用专业声音处理软件如`adobe audition`等软件做响度匹配处理。若已经使用其他软件做响度匹配,可以在运行上述命令时添加`--skip_loudnorm`跳过响度匹配步骤。如: +虽然本项目拥有重采样、转换单声道与响度匹配的脚本 resample.py,但是默认的响度匹配是匹配到 0db。这可能会造成音质的受损。而 python 的响度匹配包 pyloudnorm 无法对电平进行压限,这会导致爆音。所以建议可以考虑使用专业声音处理软件如`adobe audition`等软件做响度匹配处理。若已经使用其他软件做响度匹配,可以在运行上述命令时添加`--skip_loudnorm`跳过响度匹配步骤。如: ```shell python resample.py --skip_loudnorm @@ -218,7 +218,7 @@ python resample.py --skip_loudnorm python preprocess_flist_config.py --speech_encoder vec768l12 ``` -speech_encoder拥有以下选择 +speech_encoder 拥有以下选择 ``` vec768l12 @@ -231,7 +231,7 @@ dphubert wavlmbase+ ``` -如果省略speech_encoder参数,默认值为vec768l12 +如果省略 speech_encoder 参数,默认值为 vec768l12 **使用响度嵌入** @@ -243,30 +243,30 @@ python preprocess_flist_config.py --speech_encoder vec768l12 --vol_aug 使用后训练出的模型将匹配到输入源响度,否则为训练集响度。 -#### 此时可以在生成的config.json与diffusion.yaml修改部分参数 +#### 此时可以在生成的 config.json 与 diffusion.yaml 修改部分参数 ##### config.json * `keep_ckpts`:训练时保留最后几个模型,`0`为保留所有,默认只保留最后`3`个 -* `all_in_mem`:加载所有数据集到内存中,某些平台的硬盘IO过于低下、同时内存容量 **远大于** 数据集体积时可以启用 +* `all_in_mem`:加载所有数据集到内存中,某些平台的硬盘 IO 过于低下、同时内存容量 **远大于** 数据集体积时可以启用 -* `batch_size`:单次训练加载到GPU的数据量,调整到低于显存容量的大小即可 +* `batch_size`:单次训练加载到 GPU 的数据量,调整到低于显存容量的大小即可 * `vocoder_name` : 选择一种声码器,默认为`nsf-hifigan`. ##### diffusion.yaml -* `cache_all_data`:加载所有数据集到内存中,某些平台的硬盘IO过于低下、同时内存容量 **远大于** 数据集体积时可以启用 +* `cache_all_data`:加载所有数据集到内存中,某些平台的硬盘 IO 过于低下、同时内存容量 **远大于** 数据集体积时可以启用 * `duration`:训练时音频切片时长,可根据显存大小调整,**注意,该值必须小于训练集内音频的最短时间!** -* `batch_size`:单次训练加载到GPU的数据量,调整到低于显存容量的大小即可 +* `batch_size`:单次训练加载到 GPU 的数据量,调整到低于显存容量的大小即可 -* `timesteps` : 扩散模型总步数,默认为1000. +* `timesteps` : 扩散模型总步数,默认为 1000. + +* `k_step_max` : 训练时可仅训练`k_step_max`步扩散以节约训练时间,注意,该值必须小于`timesteps`,0 为训练整个扩散模型,**注意,如果不训练整个扩散模型将无法使用仅扩散模型推理!** -* `k_step_max` : 训练时可仅训练`k_step_max`步扩散以节约训练时间,注意,该值必须小于`timesteps`,0为训练整个扩散模型,**注意,如果不训练整个扩散模型将无法使用仅扩散模型推理!** - ##### **声码器列表** ``` @@ -274,13 +274,13 @@ nsf-hifigan nsf-snake-hifigan ``` -### 3. 生成hubert与f0 +### 3. 生成 hubert 与 f0 ```shell python preprocess_hubert_f0.py --f0_predictor dio ``` -f0_predictor拥有四个选择 +f0_predictor 拥有四个选择 ``` crepe @@ -289,11 +289,11 @@ pm harvest ``` -如果训练集过于嘈杂,请使用crepe处理f0 +如果训练集过于嘈杂,请使用 crepe 处理 f0 -如果省略f0_predictor参数,默认值为dio +如果省略 f0_predictor 参数,默认值为 dio -尚若需要浅扩散功能(可选),需要增加--use_diff参数,比如 +尚若需要浅扩散功能(可选),需要增加--use_diff 参数,比如 ```shell python preprocess_hubert_f0.py --f0_predictor dio --use_diff @@ -311,7 +311,7 @@ python train.py -c configs/config.json -m 44k ### 扩散模型(可选) -尚若需要浅扩散功能,需要训练扩散模型,扩散模型训练方法为: +尚若需要浅扩散功能,需要训练扩散模型,扩散模型训练方法为: ```shell python train_diff.py -c configs/diffusion.yaml @@ -334,39 +334,39 @@ python inference_main.py -m "logs/44k/G_30400.pth" -c "configs/config.json" -n " + `-n` | `--clean_names`:wav 文件名列表,放在 raw 文件夹下 + `-t` | `--trans`:音高调整,支持正负(半音) + `-s` | `--spk_list`:合成目标说话人名称 -+ `-cl` | `--clip`:音频强制切片,默认0为自动切片,单位为秒/s ++ `-cl` | `--clip`:音频强制切片,默认 0 为自动切片,单位为秒/s 可选项部分:部分具体见下一节 -+ `-lg` | `--linear_gradient`:两段音频切片的交叉淡入长度,如果强制切片后出现人声不连贯可调整该数值,如果连贯建议采用默认值0,单位为秒 -+ `-f0p` | `--f0_predictor`:选择F0预测器,可选择crepe,pm,dio,harvest,默认为pm(注意:crepe为原F0使用均值滤波器) ++ `-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增强器将会被禁止 ++ `-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参数将会变成特征检索的索引路径与混合比例 ++ `-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模型,以扩散模型推理 ++ `-ks` | `--k_step`:扩散步数,越大越接近扩散模型的结果,默认 100 ++ `-od` | `--only_diffusion`:纯扩散模式,该模式不会加载 sovits 模型,以扩散模型推理 + `-se` | `--second_encoding`:二次编码,浅扩散前会对原始音频进行二次编码,玄学选项,有时候效果好,有时候效果差 ### 注意! -如果使用`whisper-ppg` 声音编码器进行推理,需要将`--clip`设置为25,`-lg`设置为1。否则将无法正常推理。 +如果使用`whisper-ppg` 声音编码器进行推理,需要将`--clip`设置为 25,`-lg`设置为 1。否则将无法正常推理。 ## 🤔 可选项 -如果前面的效果已经满意,或者没看明白下面在讲啥,那后面的内容都可以忽略,不影响模型使用(这些可选项影响比较小,可能在某些特定数据上有点效果,但大部分情况似乎都感知不太明显) +如果前面的效果已经满意,或者没看明白下面在讲啥,那后面的内容都可以忽略,不影响模型使用(这些可选项影响比较小,可能在某些特定数据上有点效果,但大部分情况似乎都感知不太明显) -### 自动f0预测 +### 自动 f0 预测 -4.0模型训练过程会训练一个f0预测器,对于语音转换可以开启自动音高预测,如果效果不好也可以使用手动的,但转换歌声时请不要启用此功能!!!会严重跑调!! -+ 在inference_main中设置auto_predict_f0为true即可 +4.0 模型训练过程会训练一个 f0 预测器,对于语音转换可以开启自动音高预测,如果效果不好也可以使用手动的,但转换歌声时请不要启用此功能!!!会严重跑调!! ++ 在 inference_main 中设置 auto_predict_f0 为 true 即可 ### 聚类音色泄漏控制 @@ -375,11 +375,11 @@ python inference_main.py -m "logs/44k/G_30400.pth" -c "configs/config.json" -n " 使用聚类前面的已有步骤不用进行任何的变动,只需要额外训练一个聚类模型,虽然效果比较有限,但训练成本也比较低 + 训练过程: - + 使用cpu性能较好的机器训练,据我的经验在腾讯云6核cpu训练每个speaker需要约4分钟即可完成训练 + + 使用 cpu 性能较好的机器训练,据我的经验在腾讯云 6 核 cpu 训练每个 speaker 需要约 4 分钟即可完成训练 + 执行`python cluster/train_cluster.py`,模型的输出会在`logs/44k/kmeans_10000.pt` - + 聚类模型目前可以使用gpu进行训练,执行`python cluster/train_cluster.py --gpu` + + 聚类模型目前可以使用 gpu 进行训练,执行`python cluster/train_cluster.py --gpu` + 推理过程: - + `inference_main.py`中指定`cluster_model_path` 为模型输出文件, 留空则默认为`logs/44k/kmeans_10000.pt` + + `inference_main.py`中指定`cluster_model_path` 为模型输出文件,留空则默认为`logs/44k/kmeans_10000.pt` + `inference_main.py`中指定`cluster_infer_ratio`,`0`为完全不使用聚类,`1`为只使用聚类,通常设置`0.5`即可 ### 特征检索 @@ -387,7 +387,7 @@ python inference_main.py -m "logs/44k/G_30400.pth" -c "configs/config.json" -n " 介绍:跟聚类方案一样可以减小音色泄漏,咬字比聚类稍好,但会降低推理速度,采用了融合的方式,可以线性控制特征检索与非特征检索的占比, + 训练过程: - 首先需要在生成hubert与f0后执行: + 首先需要在生成 hubert 与 f0 后执行: ```shell python train_index.py -c configs/config.json @@ -397,7 +397,7 @@ python train_index.py -c configs/config.json + 推理过程: + 需要首先指定`--feature_retrieval`,此时聚类方案会自动切换到特征检索方案 - + `inference_main.py`中指定`cluster_model_path` 为模型输出文件, 留空则默认为`logs/44k/feature_and_index.pkl` + + `inference_main.py`中指定`cluster_model_path` 为模型输出文件,留空则默认为`logs/44k/feature_and_index.pkl` + `inference_main.py`中指定`cluster_infer_ratio`,`0`为完全不使用特征检索,`1`为只使用特征检索,通常设置`0.5`即可 ### [![Open in Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/svc-develop-team/so-vits-svc/blob/4.1-Stable/sovits4_for_colab.ipynb) [sovits4_for_colab.ipynb](https://colab.research.google.com/github/svc-develop-team/so-vits-svc/blob/4.1-Stable/sovits4_for_colab.ipynb) @@ -419,17 +419,17 @@ python compress_model.py -c="configs/config.json" -i="logs/44k/G_30400.pth" -o=" **参考`webUI.py`文件中,小工具/实验室特性的静态声线融合。** -介绍:该功能可以将多个声音模型合成为一个声音模型(多个模型参数的凸组合或线性组合),从而制造出现实中不存在的声线 +介绍:该功能可以将多个声音模型合成为一个声音模型(多个模型参数的凸组合或线性组合),从而制造出现实中不存在的声线 **注意:** 1. 该功能仅支持单说话人的模型 -2. 如果强行使用多说话人模型,需要保证多个模型的说话人数量相同,这样可以混合同一个SpaekerID下的声音 -3. 保证所有待混合模型的config.json中的model字段是相同的 -4. 输出的混合模型可以使用待合成模型的任意一个config.json,但聚类模型将不能使用 +2. 如果强行使用多说话人模型,需要保证多个模型的说话人数量相同,这样可以混合同一个 SpaekerID 下的声音 +3. 保证所有待混合模型的 config.json 中的 model 字段是相同的 +4. 输出的混合模型可以使用待合成模型的任意一个 config.json,但聚类模型将不能使用 5. 批量上传模型的时候最好把模型放到一个文件夹选中后一起上传 -6. 混合比例调整建议大小在0-100之间,也可以调为其他数字,但在线性组合模式下会出现未知的效果 -7. 混合完毕后,文件将会保存在项目根目录中,文件名为output.pth -8. 凸组合模式会将混合比例执行Softmax使混合比例相加为1,而线性组合模式不会 +6. 混合比例调整建议大小在 0-100 之间,也可以调为其他数字,但在线性组合模式下会出现未知的效果 +7. 混合完毕后,文件将会保存在项目根目录中,文件名为 output.pth +8. 凸组合模式会将混合比例执行 Softmax 使混合比例相加为 1,而线性组合模式不会 ### 动态声线混合 @@ -437,29 +437,28 @@ python compress_model.py -c="configs/config.json" -i="logs/44k/G_30400.pth" -o=" 角色混合轨道 编写规则: -角色ID : \[\[起始时间1, 终止时间1, 起始数值1, 起始数值1], [起始时间2, 终止时间2, 起始数值2, 起始数值2]] +角色 ID : \[\[起始时间 1, 终止时间 1, 起始数值 1, 起始数值 1], [起始时间 2, 终止时间 2, 起始数值 2, 起始数值 2]] -起始时间和前一个的终止时间必须相同,第一个起始时间必须为0,最后一个终止时间必须为1 (时间的范围为0-1) +起始时间和前一个的终止时间必须相同,第一个起始时间必须为 0,最后一个终止时间必须为 1 (时间的范围为 0-1) -全部角色必须填写,不使用的角色填\[\[0., 1., 0., 0.]]即可 +全部角色必须填写,不使用的角色填、[\[0., 1., 0., 0.]] 即可 -融合数值可以随便填,在指定的时间段内从起始数值线性变化为终止数值,内部会自动确保线性组合为1(凸组合条件),可以放心使用 +融合数值可以随便填,在指定的时间段内从起始数值线性变化为终止数值,内部会自动确保线性组合为 1(凸组合条件),可以放心使用 推理的时候使用`--use_spk_mix`参数即可启用动态声线混合 -## 📤 Onnx导出 +## 📤 Onnx 导出 使用 [onnx_export.py](onnx_export.py) + 新建文件夹:`checkpoints` 并打开 + 在`checkpoints`文件夹中新建一个文件夹作为项目文件夹,文件夹名为你的项目名称,比如`aziplayer` + 将你的模型更名为`model.pth`,配置文件更名为`config.json`,并放置到刚才创建的`aziplayer`文件夹下 -+ 将 [onnx_export.py](onnx_export.py) 中`path = "NyaruTaffy"` 的 `"NyaruTaffy"` 修改为你的项目名称,`path = "aziplayer" (onnx_export_speaker_mix,为支持角色混合的onnx导出)` -+ 运行 [onnx_export.py](onnx_export.py) ++ 将 [onnx_export.py](onnx_export.py) 中`path = "NyaruTaffy"` 的 `"NyaruTaffy"` 修改为你的项目名称,`path = "aziplayer" (onnx_export_speaker_mix,为支持角色混合的 onnx 导出)` ++ 运行 [onnx_export.py](onnx_export.py) + 等待执行完毕,在你的项目文件夹下会生成一个`model.onnx`,即为导出的模型 -注意:Hubert Onnx模型请使用MoeSS提供的模型,目前无法自行导出(fairseq中Hubert有不少onnx不支持的算子和涉及到常量的东西,在导出时会报错或者导出的模型输入输出shape和结果都有问题) - +注意:Hubert Onnx 模型请使用 MoeSS 提供的模型,目前无法自行导出(fairseq 中 Hubert 有不少 onnx 不支持的算子和涉及到常量的东西,在导出时会报错或者导出的模型输入输出 shape 和结果都有问题) ## 📎 引用及论文 @@ -484,7 +483,7 @@ python compress_model.py -c="configs/config.json" -i="logs/44k/G_30400.pth" -o=" ## ☀️ 旧贡献者 -因为某些原因原作者进行了删库处理,本仓库重建之初由于组织成员疏忽直接重新上传了所有文件导致以前的contributors全部木大,现在在README里重新添加一个旧贡献者列表 +因为某些原因原作者进行了删库处理,本仓库重建之初由于组织成员疏忽直接重新上传了所有文件导致以前的 contributors 全部木大,现在在 README 里重新添加一个旧贡献者列表 *某些成员已根据其个人意愿不将其列出* @@ -495,7 +494,7 @@ python compress_model.py -c="configs/config.json" -i="logs/44k/G_30400.pth" -o="
しぐれ


TomoGaSukunai


Plachtaa

-
zd小达

+
zd 小达


凍聲響世