- 介绍
- 准备工作
- 环境安装
- 环境安装问题
- 音频准备
- 数据预处理
- 训练
重要声明
不要滥用技术,做一个遵纪守法好公民!!!
任何涉及真人的东西都与开发者的意图背道而驰。请自行解决数据集授权问题,禁止使用非授权数据集进行训练!任何由于使用非授权数据集进行训练造成的问题,需自行承担全部责任和后果!
1. 介绍
项目链接:https://github.com/MaxMax2016/so-vits-svc
1.1 兼容4.0模型的问题
- 可通过修改 4.0 模型的 config.json 对 4.0 的模型进行支持,需要在 config.json 的 model 字段中添加 speech_encoder 字段,具体见下
"model": {
.........
"ssl_dim": 256,
"n_speakers": 200,
"speech_encoder":"vec256l9"
}
2. 准备工作
- 环境安装
- 预训练模型下载
- 数据准备
- 数据预处理
2.1 环境安装
- 官网建议 Python版本 3.8.9(我这边直接Python=3.8,也能运行)
win+R输入cmd,打开控制终端,创建名为svc的虚拟环境,激活虚拟环境:
conda create -n svc python=3.8
activate svc
- 安装环境之前先安装C++组件,否则会提示C++ extension is not available. 下载地址:https://visualstudio.microsoft.com/zh-hans/visual-cpp-build-tools/
- 进入到项目根目录安装依赖:
- 通过cd命令逐一进入
- 直接来到主文件在导航栏中输入cmd
通过下方命令安装依赖(要在虚拟环境下):
pip install -r requirements.txt
2.2 安装环境可能出现的报错:
ERROR:Could not find a version that satisfies the requirment selenium (from version: none)
ERROR: No matching distribution found for selenium
原因一:
pip的版本过低,需要升级一下,可以执行以下命令进行尝试
解决方法:
python -m pip install --upgrade pip
原因二:
当前库不行,切换库。(详情见文章:Python中pip切换国内源)
解决方法(这里提供临时使用):
pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple
2.3 预训练模型下载
- 编码器(必须)
- 预训练底模,扩散模型底模(可选)
- NSF-HIFIGAN 模型(可选,使用扩散模型时必须下载)
- RMVPE(可选)
编码器
推荐使用 contentvec 作为声音编码器(更多编码器见github)
- contentvec :checkpoint_best_legacy_500.pt
- 放在
pretrain
目录下
- 放在
或者下载下面的 ContentVec,大小只有 199MB,但效果相同:
- contentvec :hubert_base.pt
- 将文件名改为
checkpoint_best_legacy_500.pt
后,放在pretrain
目录下
- 将文件名改为
预训练底模文件
- 放在
logs/44k
目录下 -
扩散模型预训练底模文件: model_0.pt
- 放在
logs/44k/diffusion
目录下
- 放在
!!!底模的使用一般不会引起版权问题,但是还是要注意一下,如 事先询问作者。
NSF-HIFIGAN(想要使用扩散模型时,需要使用)
如果使用NSF-HIFIGAN 增强器
或浅层扩散
的话,需要下载预训练的 NSF-HIFIGAN 模型,如果不需要可以不下载
- 预训练的 NSF-HIFIGAN 声码器 :nsf_hifigan_20221211.zip
- 解压后,将四个文件放在
pretrain/nsf_hifigan
目录下
- 解压后,将四个文件放在
RMVPE
如果使用rmvpe
F0预测器的话,需要下载预训练的 RMVPE 模型
-
下载模型rmvpe.zip,目前首推该权重。
- 解压缩
rmvpe.zip
,并将其中的model.pt
文件改名为rmvpe.pt
并放在pretrain
目录下
- 解压缩
数据集准备
说话人1和说话人2的清晰音频各1小时
将音频切割为5-15秒的短音频,稍微长点也无所谓(文件类型必须 wav格式)
文件存放结构:
dataset_raw
├───speaker0
│ ├───xxx1-xxx1.wav
│ ├───...
│ └───Lxx-0xx8.wav
└───speaker1
├───xx2-0xxx2.wav
├───...
└───xxx7-xxx007.wav
数据预处理
-
重采样至 44100Hz 单声道
python resample.py
-
自动划分训练集、验证集,以及自动生成配置文件
python preprocess_flist_config.py --speech_encoder vec768l12
-
使用响度嵌入
若使用响度嵌入,需要增加--vol_aug
参数,比如:
python preprocess_flist_config.py --speech_encoder vec768l12 --vol_aug
-
生成 hubert 与 f0
python preprocess_hubert_f0.py --f0_predictor dio
-
尚若需要浅扩散功能(可选),需要增加--use_diff 参数,比如
python preprocess_hubert_f0.py --f0_predictor dio --use_diff
-
加速预处理(将所有workers分配到多个线程上)
python preprocess_hubert_f0.py --f0_predictor dio --use_diff --num_processes 8
模型训练
主模型训练
python train.py -c configs/config.json -m 44k
训练完成后模型储存在...\logs\44k中。
扩散模型(可选)
python train_diff.py -c configs/diffusion.yaml
模型训练结束后,模型文件保存在logs/44k
目录下,扩散模型在logs/44k/diffusion
下
推理
运行webUI.py,自动跳转到网页。
-
模型中传入训练好的主模型(...\logs\44k\G_9600.pth)
-
配置文件中传入config.json文件(...\configs\config.json)
-
扩散模型中传入训练好的扩散模型(...\log\44k\diffusion\model_10000.pt)
-
扩散模型配置文件中传入diffusion.yaml文件(...\config\diffusion.yaml)
-
选择音色(说话人)
-
传入音频点击预测
常见错误
- 错误1:
image = image.resize((scaled_width, scaled_height), Image.ANTIALIAS)
AttributeError: module 'PIL.Image' has no attribute 'ANTIALIAS'
原因:Pillow版本过高
解决方法:
pip install Pillow==9.5.0
- 错误2:
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
总结
优点:
-
效果理想
-
实现简便
缺点:
-
训练时间过长(平均一个epoch需要花费1分钟)。
-
理论上需要训练10000个epoch。尝试发现1000个epoch效果也还不错。
-
-
模型的预测效果极大程度上取决于数据集的数据质量。
-
音频克隆只能是训练集中的说话人声音互相克隆。
-
并不能在未训练的情况下,将其他任意音频转换为指定人物的音色。(也可能是训练epoch太少了或者数据集质量不够高,导致模型泛化性不够好)
-