欢迎光临散文网 会员登陆 & 注册

DiffSinger全流程教程(四)

2023-02-25 20:37 作者:孙飒_TS  | 我要投稿

声库制作

这一部分主要为从训练到推理的全部流程,不打算自己训练的同学无须此部分

最新的语雀更新: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

打开后,【转换-安装插件】

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

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

根据需求选择参数

*小重点来咯

这三个参数需要根据模型选择

  1. 词典预设:严氏词典或者原版opencpop词典,目前教程所用基本均为严氏词典

  2. 音素参数模式:注意,音素参数目前只支持使用X Studio Pro1.9.2冻结,使用教程训练的自制声库目前均需要冻结音素才能正常使用(这部分优化中)

  3. 音高参数模式:目前除原版模型外均需要调参文件才能获得最佳体验

需要注意的是,插件暂不支持汉语拼音以外的发音,如果有【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的英文音源。使用方法

目前限制

  • 暂不支持多说话人混合




DiffSinger全流程教程(四)的评论 (共 条)

分享到微博请遵守国家法律