commit
11ca6c9607
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
[**English**](./README.md) | [**中文简体**](./README_zh_CN.md)
|
[**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)
|
#### ✨ 改善了交互的一个分支推荐:[34j/so-vits-svc-fork](https://github.com/34j/so-vits-svc-fork)
|
||||||
|
|
||||||
|
@ -44,7 +44,7 @@
|
||||||
+ 增加 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 模型的问题
|
||||||
|
|
||||||
|
@ -79,13 +79,13 @@
|
||||||
+ contentvec :[checkpoint_best_legacy_500.pt](https://ibm.box.com/s/z1wgl1stco8ffooyatzdwsqn2psd9lrr)
|
+ contentvec :[checkpoint_best_legacy_500.pt](https://ibm.box.com/s/z1wgl1stco8ffooyatzdwsqn2psd9lrr)
|
||||||
+ 放在`pretrain`目录下
|
+ 放在`pretrain`目录下
|
||||||
|
|
||||||
或者下载下面的ContentVec,大小只有199MB,但效果相同:
|
或者下载下面的 ContentVec,大小只有 199MB,但效果相同:
|
||||||
+ contentvec :[hubert_base.pt](https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/hubert_base.pt)
|
+ contentvec :[hubert_base.pt](https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/hubert_base.pt)
|
||||||
+ 将文件名改为`checkpoint_best_legacy_500.pt`后,放在`pretrain`目录下
|
+ 将文件名改为`checkpoint_best_legacy_500.pt`后,放在`pretrain`目录下
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
# contentvec
|
# contentvec
|
||||||
wget -P pretrain/ http://obs.cstcloud.cn/share/obs/sankagenkeshi/checkpoint_best_legacy_500.pt
|
wget -P pretrain/ https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/hubert_base.pt -O checkpoint_best_legacy_500.pt
|
||||||
# 也可手动下载放在 pretrain 目录
|
# 也可手动下载放在 pretrain 目录
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -129,7 +129,7 @@ wget -P pretrain/ http://obs.cstcloud.cn/share/obs/sankagenkeshi/checkpoint_best
|
||||||
- "whisper-ppg-large"
|
- "whisper-ppg-large"
|
||||||
- "wavlmbase+"
|
- "wavlmbase+"
|
||||||
|
|
||||||
#### **可选项(强烈建议使用)**
|
#### **可选项(强烈建议使用)**
|
||||||
|
|
||||||
+ 预训练底模文件: `G_0.pth` `D_0.pth`
|
+ 预训练底模文件: `G_0.pth` `D_0.pth`
|
||||||
+ 放在`logs/44k`目录下
|
+ 放在`logs/44k`目录下
|
||||||
|
@ -137,13 +137,13 @@ wget -P pretrain/ http://obs.cstcloud.cn/share/obs/sankagenkeshi/checkpoint_best
|
||||||
+ 扩散模型预训练底模文件: `model_0.pt `
|
+ 扩散模型预训练底模文件: `model_0.pt `
|
||||||
+ 放在`logs/44k/diffusion`目录下
|
+ 放在`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 模型,如果不需要可以不下载
|
||||||
|
|
||||||
|
@ -265,7 +265,7 @@ python preprocess_flist_config.py --speech_encoder vec768l12 --vol_aug
|
||||||
|
|
||||||
* `timesteps` : 扩散模型总步数,默认为 1000.
|
* `timesteps` : 扩散模型总步数,默认为 1000.
|
||||||
|
|
||||||
* `k_step_max` : 训练时可仅训练`k_step_max`步扩散以节约训练时间,注意,该值必须小于`timesteps`,0为训练整个扩散模型,**注意,如果不训练整个扩散模型将无法使用仅扩散模型推理!**
|
* `k_step_max` : 训练时可仅训练`k_step_max`步扩散以节约训练时间,注意,该值必须小于`timesteps`,0 为训练整个扩散模型,**注意,如果不训练整个扩散模型将无法使用仅扩散模型推理!**
|
||||||
|
|
||||||
##### **声码器列表**
|
##### **声码器列表**
|
||||||
|
|
||||||
|
@ -311,7 +311,7 @@ python train.py -c configs/config.json -m 44k
|
||||||
|
|
||||||
### 扩散模型(可选)
|
### 扩散模型(可选)
|
||||||
|
|
||||||
尚若需要浅扩散功能,需要训练扩散模型,扩散模型训练方法为:
|
尚若需要浅扩散功能,需要训练扩散模型,扩散模型训练方法为:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
python train_diff.py -c configs/diffusion.yaml
|
python train_diff.py -c configs/diffusion.yaml
|
||||||
|
@ -338,11 +338,11 @@ python inference_main.py -m "logs/44k/G_30400.pth" -c "configs/config.json" -n "
|
||||||
|
|
||||||
可选项部分:部分具体见下一节
|
可选项部分:部分具体见下一节
|
||||||
+ `-lg` | `--linear_gradient`:两段音频切片的交叉淡入长度,如果强制切片后出现人声不连贯可调整该数值,如果连贯建议采用默认值 0,单位为秒
|
+ `-lg` | `--linear_gradient`:两段音频切片的交叉淡入长度,如果强制切片后出现人声不连贯可调整该数值,如果连贯建议采用默认值 0,单位为秒
|
||||||
+ `-f0p` | `--f0_predictor`:选择F0预测器,可选择crepe,pm,dio,harvest,默认为pm(注意:crepe为原F0使用均值滤波器)
|
+ `-f0p` | `--f0_predictor`:选择 F0 预测器,可选择 crepe,pm,dio,harvest, 默认为 pm(注意:crepe 为原 F0 使用均值滤波器)
|
||||||
+ `-a` | `--auto_predict_f0`:语音转换自动预测音高,转换歌声时不要打开这个会严重跑调
|
+ `-a` | `--auto_predict_f0`:语音转换自动预测音高,转换歌声时不要打开这个会严重跑调
|
||||||
+ `-cm` | `--cluster_model_path`:聚类模型或特征检索索引路径,留空则自动设为各方案模型的默认路径,如果没有训练聚类或特征检索则随便填
|
+ `-cm` | `--cluster_model_path`:聚类模型或特征检索索引路径,留空则自动设为各方案模型的默认路径,如果没有训练聚类或特征检索则随便填
|
||||||
+ `-cr` | `--cluster_infer_ratio`:聚类方案或特征检索占比,范围 0-1,若没有训练聚类模型或特征检索则默认 0 即可
|
+ `-cr` | `--cluster_infer_ratio`:聚类方案或特征检索占比,范围 0-1,若没有训练聚类模型或特征检索则默认 0 即可
|
||||||
+ `-eh` | `--enhance`:是否使用NSF_HIFIGAN增强器,该选项对部分训练集少的模型有一定的音质增强效果,但是对训练好的模型有反面效果,默认关闭
|
+ `-eh` | `--enhance`:是否使用 NSF_HIFIGAN 增强器,该选项对部分训练集少的模型有一定的音质增强效果,但是对训练好的模型有反面效果,默认关闭
|
||||||
+ `-shd` | `--shallow_diffusion`:是否使用浅层扩散,使用后可解决一部分电音问题,默认关闭,该选项打开时,NSF_HIFIGAN 增强器将会被禁止
|
+ `-shd` | `--shallow_diffusion`:是否使用浅层扩散,使用后可解决一部分电音问题,默认关闭,该选项打开时,NSF_HIFIGAN 增强器将会被禁止
|
||||||
+ `-usm` | `--use_spk_mix`:是否使用角色融合/动态声线融合
|
+ `-usm` | `--use_spk_mix`:是否使用角色融合/动态声线融合
|
||||||
+ `-lea` | `--loudness_envelope_adjustment`:输入源响度包络替换输出响度包络融合比例,越靠近 1 越使用输出响度包络
|
+ `-lea` | `--loudness_envelope_adjustment`:输入源响度包络替换输出响度包络融合比例,越靠近 1 越使用输出响度包络
|
||||||
|
@ -361,7 +361,7 @@ python inference_main.py -m "logs/44k/G_30400.pth" -c "configs/config.json" -n "
|
||||||
|
|
||||||
## 🤔 可选项
|
## 🤔 可选项
|
||||||
|
|
||||||
如果前面的效果已经满意,或者没看明白下面在讲啥,那后面的内容都可以忽略,不影响模型使用(这些可选项影响比较小,可能在某些特定数据上有点效果,但大部分情况似乎都感知不太明显)
|
如果前面的效果已经满意,或者没看明白下面在讲啥,那后面的内容都可以忽略,不影响模型使用(这些可选项影响比较小,可能在某些特定数据上有点效果,但大部分情况似乎都感知不太明显)
|
||||||
|
|
||||||
### 自动 f0 预测
|
### 自动 f0 预测
|
||||||
|
|
||||||
|
@ -379,7 +379,7 @@ python inference_main.py -m "logs/44k/G_30400.pth" -c "configs/config.json" -n "
|
||||||
+ 执行`python cluster/train_cluster.py`,模型的输出会在`logs/44k/kmeans_10000.pt`
|
+ 执行`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`即可
|
+ `inference_main.py`中指定`cluster_infer_ratio`,`0`为完全不使用聚类,`1`为只使用聚类,通常设置`0.5`即可
|
||||||
|
|
||||||
### 特征检索
|
### 特征检索
|
||||||
|
@ -397,7 +397,7 @@ python train_index.py -c configs/config.json
|
||||||
|
|
||||||
+ 推理过程:
|
+ 推理过程:
|
||||||
+ 需要首先指定`--feature_retrieval`,此时聚类方案会自动切换到特征检索方案
|
+ 需要首先指定`--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`即可
|
+ `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)
|
### [![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,7 +419,7 @@ python compress_model.py -c="configs/config.json" -i="logs/44k/G_30400.pth" -o="
|
||||||
|
|
||||||
**参考`webUI.py`文件中,小工具/实验室特性的静态声线融合。**
|
**参考`webUI.py`文件中,小工具/实验室特性的静态声线融合。**
|
||||||
|
|
||||||
介绍:该功能可以将多个声音模型合成为一个声音模型(多个模型参数的凸组合或线性组合),从而制造出现实中不存在的声线
|
介绍:该功能可以将多个声音模型合成为一个声音模型(多个模型参数的凸组合或线性组合),从而制造出现实中不存在的声线
|
||||||
**注意:**
|
**注意:**
|
||||||
|
|
||||||
1. 该功能仅支持单说话人的模型
|
1. 该功能仅支持单说话人的模型
|
||||||
|
@ -441,7 +441,7 @@ python compress_model.py -c="configs/config.json" -i="logs/44k/G_30400.pth" -o="
|
||||||
|
|
||||||
起始时间和前一个的终止时间必须相同,第一个起始时间必须为 0,最后一个终止时间必须为 1 (时间的范围为 0-1)
|
起始时间和前一个的终止时间必须相同,第一个起始时间必须为 0,最后一个终止时间必须为 1 (时间的范围为 0-1)
|
||||||
|
|
||||||
全部角色必须填写,不使用的角色填\[\[0., 1., 0., 0.]]即可
|
全部角色必须填写,不使用的角色填、[\[0., 1., 0., 0.]] 即可
|
||||||
|
|
||||||
融合数值可以随便填,在指定的时间段内从起始数值线性变化为终止数值,内部会自动确保线性组合为 1(凸组合条件),可以放心使用
|
融合数值可以随便填,在指定的时间段内从起始数值线性变化为终止数值,内部会自动确保线性组合为 1(凸组合条件),可以放心使用
|
||||||
|
|
||||||
|
@ -454,13 +454,12 @@ python compress_model.py -c="configs/config.json" -i="logs/44k/G_30400.pth" -o="
|
||||||
+ 新建文件夹:`checkpoints` 并打开
|
+ 新建文件夹:`checkpoints` 并打开
|
||||||
+ 在`checkpoints`文件夹中新建一个文件夹作为项目文件夹,文件夹名为你的项目名称,比如`aziplayer`
|
+ 在`checkpoints`文件夹中新建一个文件夹作为项目文件夹,文件夹名为你的项目名称,比如`aziplayer`
|
||||||
+ 将你的模型更名为`model.pth`,配置文件更名为`config.json`,并放置到刚才创建的`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) 中`path = "NyaruTaffy"` 的 `"NyaruTaffy"` 修改为你的项目名称,`path = "aziplayer" (onnx_export_speaker_mix,为支持角色混合的 onnx 导出)`
|
||||||
+ 运行 [onnx_export.py](onnx_export.py)
|
+ 运行 [onnx_export.py](onnx_export.py)
|
||||||
+ 等待执行完毕,在你的项目文件夹下会生成一个`model.onnx`,即为导出的模型
|
+ 等待执行完毕,在你的项目文件夹下会生成一个`model.onnx`,即为导出的模型
|
||||||
|
|
||||||
注意:Hubert Onnx 模型请使用 MoeSS 提供的模型,目前无法自行导出(fairseq 中 Hubert 有不少 onnx 不支持的算子和涉及到常量的东西,在导出时会报错或者导出的模型输入输出 shape 和结果都有问题)
|
注意:Hubert Onnx 模型请使用 MoeSS 提供的模型,目前无法自行导出(fairseq 中 Hubert 有不少 onnx 不支持的算子和涉及到常量的东西,在导出时会报错或者导出的模型输入输出 shape 和结果都有问题)
|
||||||
|
|
||||||
|
|
||||||
## 📎 引用及论文
|
## 📎 引用及论文
|
||||||
|
|
||||||
| URL | 名称 | 标题 | 源码 |
|
| URL | 名称 | 标题 | 源码 |
|
||||||
|
|
|
@ -14,6 +14,9 @@ logging.basicConfig(level=logging.INFO)
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
def train_cluster(in_dir, n_clusters, use_minibatch=True, verbose=False,use_gpu=False):#gpu_minibatch真拉,虽然库支持但是也不考虑
|
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}")
|
logger.info(f"Loading features from {in_dir}")
|
||||||
features = []
|
features = []
|
||||||
nums = 0
|
nums = 0
|
||||||
|
|
Loading…
Reference in New Issue