DiffSinger全流程教程(四)
声库制作
这一部分主要为从训练到推理的全部流程,不打算自己训练的同学无须此部分
最新的语雀更新:https://www.yuque.com/sunsa-i3ayc/sivu7h

推理与训练
以windows为例
一、安装PyTorch
打开命令行
activate diff
回车,切换到刚刚创建的虚拟环境
*这里因为我本地环境不同用的与之前不同,实际使用的为你之前制作数据集所创建的虚拟环境,如diff
每次重新打开conda终端都要切换到项目对应的虚拟环境,看到开头由base变为diffsinger就说明切换到虚拟环境了。

输入:
*这条代码并不适用所有人,需要根据显卡自行更改!!!
下方有查看方法
conda install pytorch torchvision torchaudio pytorch-cuda=11.6 -c pytorch -c nvidia
按下回车键,安装pytorch

(这里推荐根据你的显卡到官网https://pytorch.org/get-started/locally/ 下载)
(无独立显卡或者A卡用户可以选择CPU版本,推理可能较慢)

(查看显卡最高支持版本可以在命令行输入 nvidia-smi 查询CUDA Version)

等待conda查找完成输入:
y
按回车键开始安装

等待下载和安装完成

P.S.
Q:我的显卡显示CUDA Version低于11.6(可是显卡型号很新)怎么办?
A:如果更新到最新NVIDIA显卡驱动后仍无法在官网找到对应版本下载,可以输入
conda install pytorch==1.12.1 torchvision==0.13.1 torchaudio==0.12.1 cudatoolkit=11.3
下载11.3版本的Pytorch(再低就不建议本地推理了,可能不一定有CPU快)
P.P.S.
Q:conda安装torch时候太慢了怎么办?
A:更换pip安装
pip3 install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu116
P.P.P.S.
40系显卡请安装cuda11.8以上版本
pip3 install --pre torch torchvision torchaudio --index-url https://download.pytorch.org/whl/nightly/cu118

为了确保安装版本的正确,可以逐条输入并回车以下代码
python
回车
import torch
回车
print(torch.__version__)
回车
print(torch.cuda.is_available())
回车
进行检验

如图返回True说明正确安装GPU版本torch
然后可以输入
exit()
退出Python
二、安装requirements
cd 你解压的DiffSinger仓库的地址
切换到DiffSinger仓库

这里如果你解压在非C盘路径,可能会出现cd后无变化的情况

这时你可以输入对应盘符,例如
f:
回车
*请根据自己情况操作

然后
pip install -r requirements.txt -i https://pypi.doubanio.com/simple
安装剩余依赖(如果你是海外用户,通常你不需要使用-i和其后面内容)

等待下载安装完成

请确认安装依赖过程中无任何报错(大部分报错可以通过百度、谷歌或者必应解决。当然,你也可以尝试咨询ChatGPT3)

打开一个新的终端,切换到之前为diffsinger准备的环境
Conda输入:
activate diff
cd diffsinger仓库目录
切换到diffsinger仓库
*以下内容请根据你在制作数据集时最后一步提示的代码运行
*以下内容请根据你在制作数据集时最后一步提示的代码运行
*以下内容请根据你在制作数据集时最后一步提示的代码运行
Conda逐行输入:
set PYTHONPATH=.
回车
set CUDA_VISIBLE_DEVICES=0
回车
python data_gen/binarize.py --config data/expname/config.yaml
回车
开始预处理
等待预处理完成
然后输入:
python run.py --config data/expname/config.yaml --exp_name ***_expname_ds1000 --reset
回车

打开命令窗口,
输入
pip install tensorflow -i https://pypi.tuna.tsinghua.edu.cn/simple
回车并等待安装完成
如果输入后出现failed to create process
那需要在前面加python -m
即使用
python -m pip install tensorflow -i https://pypi.tuna.tsinghua.edu.cn/simple
安装完成后,输入
python
然后输入
import tensorflow
测试是否成功安装
输入
exit()
回车,退出Python
输入
tensorboard --logdir=F:\DiffSinger-refactor\checkpoints\XXX\lightning_logs\lastest
前面路径对应你使用的分支文件夹,XXX是你训练时使用的exp_name
然后在浏览器中
输入
http://localhost:6006/
即可查看tensorboard,可以试听与查看loss

这里以实验权重为例
自制权重流程相同
下载交流群(907879266)里的权重
1215_opencpop_ds1000_nomidi.zip(声学模型,使用你自制的,本地训练无需下载,云端训练下载下来即可)
nsf_hifigan_20221211.zip(前面放置过声码器的话无需重复下载)

解压到你解压的DiffSinger仓库的地址的checkpoints文件夹下
*如无相应能力请勿修改名称等
下载群文件里的ds文件(你也可以使用自制ds),出于方便可以放在你解压的DiffSinger仓库的地址根目录

打开终端,激活虚拟环境
activate diff
切换到diffsinger目录
然后输入
python main.py 我多想说再见啊_with_ph_dur.ds --exp 1215_opencpop_ds1000_nomidi
*这里--exp用来指定模型权重,后面填你所使用的权重的文件夹名(以下图片暂未更新)

进度条走完后会提示音频保存地址

main.py可以指定以下参数

-h 展示帮助信息并退出
--exp 指定权重文件夹
--out 指定输出文件夹
--title 输出文件名
--num 一次运行渲染次数
--key 变调(半音)
--seed 指定随机种子
--speedup PNDM加速倍速(默认10倍,不建议过高)
--mel 保存梅尔谱而不是WAV文件
--spk 指定组合模型的说话人(--spk 制作时设定的speaker)
组合模型的推理
1.指定说话人
python main.py 我多想说再见啊_with_ph_dur.ds --exp expname --spk speakername
expname是模型训练时的expname,speakername是制作数据集时指定的
2.按比例混合
python main.py 我多想说再见啊_with_ph_dur.ds --exp expname --spk "speakerid:0.2|speakerid:0.5|speakerid:0.3"
expname是模型训练时的expname,speakername
例如你的模型由 opencpop qixuan xiayezi三人构成
1. "opencpop|qixuan|xiayezi" 这种情况三人均分
2. "opencpop:0.5|qixuan"
3. "opencpop:0.4|qixuan:0.6"
4. "opencpop:0.1|qixuan:0.2" 这种情况会进行归一化
5. "opencpop:0.5|qixuan|xiayezi" 这种情况opencpop占一半剩下俩均分
Gen参数的推理
python main.py xxx.ds --exp expname --gender GEN
expname是你训练时的expname,GEN是介于 -1 和 1 之间的浮点值(负趋向于男性,正趋向于女性)
控制 *.ds 文件中的性别曲线:
{ "gender_timestep": "0.005", // timestep in seconds, like f0_timestep "gender": "-1.0 -0.9 -0.8 ... 0.8 0.9 1.0", // sequence of float values, like f0_seq ... // other attributes }
因为代码迭代很快,请以最新仓库信息为准

ds文件的获得
推理是需要ds文件,相关解决方案如下,如果你有拥有对应ds工程,可以跳过此步
Q:ds文件应当怎么获得呢?
A:下载OpenSVIP
地址:https://openvpi.github.io
可以将其他工程文件转换为ds文件

下载主程序和对应插件

根据原始工程自行选择下载

下载后的主程序解压到任意目录

双击打开OpenSvip.GUI.exe
打开后,【转换-安装插件】

选择下载好的插件,确定并安装

安装后选择对应输入输出格式,在左侧选择导入文件,下方可以选择输出路径
根据需求选择参数

*小重点来咯

这三个参数需要根据模型选择
词典预设:严氏词典或者原版opencpop词典,目前教程所用基本均为严氏词典
音素参数模式:注意,音素参数目前只支持使用X Studio Pro1.9.2冻结,使用教程训练的自制声库目前均需要冻结音素才能正常使用(这部分优化中)
音高参数模式:目前除原版模型外均需要调参文件才能获得最佳体验
需要注意的是,插件暂不支持汉语拼音以外的发音,如果有【ki】之类的需求,可以手动在ds文件中修改
Q:上面没有支持我的工程文件的插件怎么办?
A:使用svp中转
如果上面没有你需要的插件,如vsqx工程文件
你可以使用utaformatix(http://atonystyle.gitee.io/utaformatix3/)转换为svp工程文件


*请确保你的工程原作者允许此操作
选择转换音高参数并下一步

点击导出即可下载

然后下载上方的svp插件用作转换

Q:怎么为ds文件冻结参数呢?
A:首先下载X Studio Pro
可在【群文件-实用工具】下载

解压后将“XStudioPro”文件夹存放至你觉得合适的目录
双击运行其中的 XStudioSinger.exe。

点击【打开工程】打开你喜欢的工程
或者使用OpenSVIP转换为svip工程
或者你也可以【新建工程】(教程:B站号BV1nk4y117AC)

打开后点击【参数】切换到参数模式

等待从云端获取参数

调整参数后,在乐谱区空白处

右键
【冻结Ai参数】
点击【确定】即可冻结音高参数
点击参数切换按钮
点击【音素】切换到音素参数界面
可能加载较慢
调整参数后,在乐谱区空白处
右键
【冻结全部音素】
点击【确定】即可冻结音素
最后快捷键【Ctrl+S】保存工程
将保存的工程使用OpenSVIP转换为ds工程
*需要将音高和音素均设为有参
Q:OpenSVIP转换SVIP时,动态库怎么设置?
A:可参考下面设置
如果你安装有X Studio,正常情况下无须配置
如果报错
1.更新最新版插件,无需设置
2.可参阅插件信息设置

打包成OpenUtau可用模型
1.将DiffSinger声库模型转换为ONNX模型
打开conda终端
创建一个虚拟环境
conda create -n onnx python=3.8 -y
这里的onnx可以是任何你喜欢的单词
激活虚拟环境
activate onnx
每次重新打开conda终端都要切换到项目对应的虚拟环境,看到开头由base变为onnx 就说明切换到虚拟环境了
cd 你解压的DiffSinger-refactor仓库的地址
切换到DiffSinger-refactor仓库

这里如果你解压在非C盘路径,可能会出现cd后无变化的情况

这时你可以输入对应盘符,例如
f:
回车

安装依赖
pip install pytorch==1.8 -i https://pypi.tuna.tsinghua.edu.cn/simplepip install onnx==1.12.0 onnxsim==0.4.10 protobuf==3.13.0 -i https://pypi.tuna.tsinghua.edu.cn/simplepip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

导出onnx模型
python onnx/export/export_acoustic.py --exp EXP --out TARGET
EXP是你训练的权重名称,TARGET是目标 onnx 文件的路径
如果你不了解请使用
python onnx/export/export_acoustic.py --exp EXP
组合模型需要使用
导出某一人
python onnx/export/export_acoustic.py --exp EXP --freeze_spk Speakername
其中Speakername是你自制时设定的
按比例混合
python onnx/export/export_acoustic.py --exp EXP --freeze_spk "MySpeaker=spk1|spk2"
MySpeaker是你要给混合模型起的名字
例如你的模型由 opencpop qixuan xiayezi三人构成
1. "MySpeaker=opencpop|qixuan|xiayezi" 这种情况三人均分
2. "MySpeaker=opencpop:0.5|qixuan"
3. "MySpeaker=opencpop:0.4|qixuan:0.6"
4. "MySpeaker=opencpop:0.1|qixuan:0.2" 这种情况会进行归一化
5. "MySpeaker=opencpop:0.5|qixuan|xiayezi" 这种情况opencpop占一半剩下俩均分
导出支持Gen参数的模型
*注意:导出支持Gen参数的模型需要在dsconfig.yaml加入对应的参数,详见最后【使用说明】
python onnx/export/export_acoustic.py --exp expname --expose_gender
或者冻结性别
python onnx/export/export_acoustic.py --exp expname --freeze_gender GEN
举个例子
例如你有一个组合模型由 opencpop qixuan xiayezi三人构成,训练时候opencpop的speakerID设定的niufuren,expname是hunhe,你想导出opencpop可调Gen的模型,你需要
python onnx/export/export_acoustic.py --exp hunhe --freeze_spk niufuren --expose_gender
又例如你有一个组合模型由 opencpop qixuan xiayezi三人构成,训练时候设定的expname是niufuren,你想导出opencpop和qixuan混合其名为nvsheng可调Gen的模型,你需要
python onnx/export/export_acoustic.py --exp niufuren --freeze_spk "nvsheng=opencpop:0.5|qixuan:0.5" --expose_gender
*注意事项:目前暂不支持之前安装的torch版本,需要重新安装1.8及以下版本的torch,如果你不了解如何卸载重装可以考虑百度一下、必应一下,或者重新创建一个虚拟环境
torch版本不支持的报错如下图所示(这里仅需要CPU版本的torch即可)

运行完成后会提示你去哪里找到你的模型

2.打包声库模型
新建一个文件夹,模型复制进来
除此之外,文件夹里还需要有
character.txt #音源基本信息文件
character.yaml #OpenUTAU音源信息文件
dsconfig.yaml #Diffsinger音源信息文件
phonemes.txt #音素列表
dsdict.txt #拼音转音素字典
这些文件你通常可以通过下载其他音源获得并参考
具体设置为
character.txt
注:只有第一行name是必需的,其他均为可选项
name=音源名
image=图标文件(如果使用了这一行,就需要把图标png或bmp文件打包到音源中)
author=作者
voice=声音提供者
web=音源官网
例如:
name=Zhibin Diffsinger
image=zhibin.png
author=Chisong
voice=Chisong
web=http://zhibin.club/
character.yaml
请勿手动修改此文件
text_file_encoding: utf-8
portrait_opacity: 0.67
default_phonemizer: OpenUtau.Core.DiffSinger.DiffsingerMandarinPhonemizer
dsconfig.yaml
(注意:不是训练音源时的配置文件!!不是训练音源时的配置文件!!请参照下面的格式):
phonemes: phonemes.txt #音素列表
acoustic: acoustic.onnx #声学模型
vocoder: nsf_hifigan #所使用的声码器包名
# 以下是性别参数相关设置,参见 https://github.com/openvpi/DiffSinger/releases/tag/v1.6.0
# 只有当你的音源导出时使用了--expose_gender时,才需要此部分
# 这一部分可以直接从训练使用的配置文件中复制过来
augmentation_args:
random_pitch_shifting:
range: [-5., 5.]
scale: 1.0
use_key_shift_embed: true
phonemes.txt
每行一个音素,开头的reserved_tokens要空出对应数量的行数
dsdict.txt
每行一个拼音,参阅
https://github.com/openvpi/DiffSingerMiniEngine/blob/main/assets/dictionaries/opencpop-strict.txt
设置完成后压缩整个文件夹

一、下载适用于DiffSinger的OpenUtau
https://github.com/xunmengshe/OpenUtau/releases
推荐带有DiffsingerPack的整合包
如果加载过慢可以右键复制链接使用https://d.serctl.com/搭配idm等多线程下载程序进行加速下载
二、下载音源,拖入OpenUTAU窗口安装
安装时右上角选择能正常显示的编码,如utf-8
三、选择歌手
在音轨左侧的歌手菜单的“DiffSinger”分类中找到你安装的歌手,选择
注:歌词支持汉字或拼音输入,连音符为加号+,呼吸音为AP,停顿为SP
说明
OpenUTAU默认开启自动预渲染,即你每进行一笔编辑,都会立即渲染音频并缓存。如果OpenUTAU卡顿,可在“工具→使用偏好→渲染”中关闭自动预渲染
DiffSinger相关设置可在“工具→使用偏好→渲染”中编辑:
渲染加速倍数:默认为50倍。降低加速倍数可提高音质,但会使合成速度变慢
默认使用CPU渲染,使用DirectML渲染速度更快。请将“机器学习运行器”设置为directml,GPU选择你的独显(NVIDIA和AMD显卡均支持),然后重新启动OpenUTAU
参数
DiffSinger支持以下参数
音高曲线
音素长度
DYN(音量曲线)
GENC(性别,需音源支持,默认可调范围±100相当于∓12半音,正方向为男声(共振峰降低))
参数的可调范围可在钢琴窗左下角的齿轮图标设置
音素器
目前OpenUTAU for Diffsinger包含4个用于Diffsinger的音素器:
DIFFS ZH 位于ZH分类,基于OpenUTAU内置的vogen音素模型,无需配置,支持汉语普通话
DIFFS RHY 位于ZH分类,基于 Diffsinger rhythmizer音素模型,效果更好
ENUNU X 位于General分类,基于NNSVS音素模型,需要音源开发者适配。适用于ENUNU支持的各种自定义语言。使用方法
ENUNU X EN 位于EN分类,基于NNSVS音素模型,需要音源开发者适配。适用于使用CMUDict的英文音源。使用方法
目前限制
暂不支持多说话人混合
