首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

本地训练,开箱可用,Bert-VITS2 V2.0.2版本本地基于现有数据集训练(原神刻晴)

按照固有思维方式,深度学习的训练环节应该在云端,毕竟本地硬件条件有限。但事实上,在语音识别和自然语言处理层面,即使相对较少的数据量也可以训练出高性能的模型,对于预算有限的同学们来说,也没必要花冤枉钱上“云端”了,本次我们来演示如何在本地训练Bert-VITS2 V2.0.2模型。

Bert-VITS2 V2.0.2基于现有数据集

目前Bert-VITS2 V2.0.2大体上有两种训练方式,第一种是基于现有数据集,即原神各角色已经标注好的语音数据,这部分内容是公开的,但是不能商用,可以在这里下载:

https://pan.ai-hobbyist.org/Genshin%20Datasets/%E4%B8%AD%E6%96%87%20-%20Chinese/%E5%88%86%E8%A7%92%E8%89%B2%20-%20Single/%E8%A7%92%E8%89%B2%E8%AF%AD%E9%9F%B3%20-%20Character

我们只需要选择喜欢的角色进行下载即可:

第二种是没有现有的数据集,即假设我们想克隆地球人随便任意一个人的声音,这种情况下我们需要收集这个人的语音素材,然后自己制作数据集。

本次我们只演示第一种训练方式,即训练现有数据集的原神角色,第二种暂且按下不表。

Bert-VITS2 V2.0.2配置模型

首先克隆项目:

git?clone?https://github.com/v3ucn/Bert-VITS2_V202_Train.git

随后下载新版的bert模型:

链接:https://pan.baidu.com/s/11vLNEVDeP_8YhYIJUjcUeg?pwd=v3uc

下载成功后,解压放入项目的bert目录,目录结构如下所示:

E:\work\Bert-VITS2-v202\bert>tree?/f

Folder?PATH?listing?for?volume?myssd

Volume?serial?number?is?7CE3-15AE

E:.

│???bert_models.json

├───bert-base-japanese-v3

│???????config.json

│???????README.md

│???????tokenizer_config.json

│???????vocab.txt

├───bert-large-japanese-v2

│???????config.json

│???????README.md

│???????tokenizer_config.json

│???????vocab.txt

├───chinese-roberta-wwm-ext-large

│???????added_tokens.json

│???????config.json

│???????pytorch_model.bin

│???????README.md

│???????special_tokens_map.json

│???????tokenizer.json

│???????tokenizer_config.json

│???????vocab.txt

├───deberta-v2-large-japanese

│???????config.json

│???????pytorch_model.bin

│???????README.md

│???????special_tokens_map.json

│???????tokenizer.json

│???????tokenizer_config.json

└───deberta-v3-large

config.json

generator_config.json

pytorch_model.bin

README.md

spm.model

tokenizer_config.json

随后下载预训练模型:

https://openi.pcl.ac.cn/Stardust_minus/Bert-VITS2/modelmanage/model_readme_tmpl?name=Bert-VITS2%E4%B8%AD%E6%97%A5%E8%8B%B1%E5%BA%95%E6%A8%A1-fix

放入项目的pretrained_models目录,如下所示:

E:\work\Bert-VITS2-v202\pretrained_models>tree?/f

Folder?PATH?listing?for?volume?myssd

Volume?serial?number?is?7CE3-15AE

E:.

DUR_0.pth

D_0.pth

G_0.pth

接着把上文提到的刻晴数据集放入项目的Data目录中的raw目录:

E:\work\Bert-VITS2-v202\Data\keqing\raw\keqing>tree?/f

Folder?PATH?listing?for?volume?myssd

Volume?serial?number?is?7CE3-15AE

E:.

vo_card_keqing_endOfGame_fail_01.lab

vo_card_keqing_endOfGame_fail_01.wav

如果想定制化目录结构,可以修改config.yml文件:

bert_gen:

config_path:?config.json

device:?cuda

num_processes:?2

use_multi_device:?false

dataset_path:?Data\keqing

mirror:?''

openi_token:?''

preprocess_text:

clean:?true

cleaned_path:?filelists/cleaned.list

config_path:?config.json

max_val_total:?8

train_path:?filelists/train.list

transcription_path:?filelists/short_character_anno.list

val_path:?filelists/val.list

val_per_spk:?5

resample:

in_dir:?raw

out_dir:?raw

sampling_rate:?44100

至此,模型和数据集就配置好了。

Bert-VITS2 V2.0.2数据预处理

标注好的原始数据集并不能够直接进行训练,需要预处理一下,首先需要将原始数据文件转写成为标准的标注文件:

python3?transcribe_genshin.py

生成好的文件:

Data\keqing\raw/keqing/vo_card_keqing_endOfGame_fail_01.wav|keqing|ZH|我会勤加练习,拿下下一次的胜利。

Data\keqing\raw/keqing/vo_card_keqing_endOfGame_win_01.wav|keqing|ZH|胜负本是常事,不必太过挂怀。

Data\keqing\raw/keqing/vo_card_keqing_freetalk_01.wav|keqing|ZH|这「七圣召唤」虽说是游戏,但对局之中也隐隐有策算谋略之理。

这里ZH代表中文,新版的Bert-VITS2 V2.0.2也支持日文和英文,代码分别为JP和EN。

随后对文本进行预处理以及生成bert模型可读文件:

python3?preprocess_text.py

python3?bert_gen.py

执行后会产生训练集和验证集文件:

E:\work\Bert-VITS2-v202\Data\keqing\filelists>tree?/f

Folder?PATH?listing?for?volume?myssd

Volume?serial?number?is?7CE3-15AE

E:.

cleaned.list

short_character_anno.list

train.list

val.list

检查无误后,数据预处理就完成了。

Bert-VITS2 V2.0.2本地训练

万事俱备,只差训练。先不要着急,打开Data/keqing/config.json配置文件:

{

"train":?{

"log_interval":?50,

"eval_interval":?50,

"seed":?42,

"epochs":?200,

"learning_rate":?0.0001,

"betas":?[

0.8,

0.99

],

"eps":?1e-09,

"batch_size":?8,

"fp16_run":?false,

"lr_decay":?0.99995,

"segment_size":?16384,

"init_lr_ratio":?1,

"warmup_epochs":?0,

"c_mel":?45,

"c_kl":?1.0,

"skip_optimizer":?false

},

"data":?{

"training_files":?"Data/keqing/filelists/train.list",

"validation_files":?"Data/keqing/filelists/val.list",

"max_wav_value":?32768.0,

"sampling_rate":?44100,

"filter_length":?2048,

"hop_length":?512,

"win_length":?2048,

"n_mel_channels":?128,

"mel_fmin":?0.0,

"mel_fmax":?null,

"add_blank":?true,

"n_speakers":?1,

"cleaned_text":?true,

"spk2id":?{

"keqing":?0

}

},

"model":?{

"use_spk_conditioned_encoder":?true,

"use_noise_scaled_mas":?true,

"use_mel_posterior_encoder":?false,

"use_duration_discriminator":?true,

"inter_channels":?192,

"hidden_channels":?192,

"filter_channels":?768,

"n_heads":?2,

"n_layers":?6,

"kernel_size":?3,

"p_dropout":?0.1,

"resblock":?"1",

"resblock_kernel_sizes":?[

3,

7,

11

],

"resblock_dilation_sizes":?[

[

1,

3,

5

],

[

1,

3,

5

],

[

1,

3,

5

]

],

"upsample_rates":?[

8,

8,

2,

2,

2

],

"upsample_initial_channel":?512,

"upsample_kernel_sizes":?[

16,

16,

8,

2,

2

],

"n_layers_q":?3,

"use_spectral_norm":?false,

"gin_channels":?256

},

"version":?"2.0"

}

这里需要调整的参数是batch_size,如果显存不够,需要往下调整,否则会出现“爆显存”的问题,假设显存为8G,那么该数值最好不要超过8。

与此同时,首次训练建议把log_interval和eval_interval参数调小一点,即训练的保存间隔,方便训练过程中随时进行推理验证。

随后输入命令,开始训练:

python3?train_ms.py

程序返回:

11-22?13:20:28?INFO?????|?data_utils.py:61?|?Init?dataset...

100%|█████████████████████████████████████████████████████████████████████████████|?581/581?[00:00

11-22?13:20:28?INFO?????|?data_utils.py:76?|?skipped:?31,?total:?581

11-22?13:20:28?INFO?????|?data_utils.py:61?|?Init?dataset...

100%|████████████████████████████████████████████████████████████████████████████████████████████|?5/5?[00:00

11-22?13:20:28?INFO?????|?data_utils.py:76?|?skipped:?0,?total:?5

Using?noise?scaled?MAS?for?VITS2

Using?duration?discriminator?for?VITS2

INFO:models:Loaded?checkpoint?'Data\keqing\models\DUR_0.pth'?(iteration?7)

INFO:models:Loaded?checkpoint?'Data\keqing\models\G_0.pth'?(iteration?7)

INFO:models:Loaded?checkpoint?'Data\keqing\models\D_0.pth'?(iteration?7)

说明训练已经开始了。

训练过程中,可以通过命令:

python3?-m?tensorboard.main?--logdir=Data/keqing/models

来查看loss损失率,访问:

http://localhost:6006/#scalars

一般情况下,训练损失率低于50%,并且损失函数在训练集和验证集上都趋于稳定,则可以认为模型已经收敛。收敛的模型就可以为我们所用了,如何使用训练好的模型,请移步:又欲又撩人,基于新版Bert-vits2V2.0.2音色模型雷电将军八重神子一键推理整合包分享,囿于篇幅,这里不再赘述。

训练好的模型存放在Data/keqing/models目录:

E:\work\Bert-VITS2-v202\Data\keqing\models>tree?/f

Folder?PATH?listing?for?volume?myssd

Volume?serial?number?is?7CE3-15AE

E:.

│???DUR_0.pth

│???DUR_550.pth

│???DUR_600.pth

│???DUR_650.pth

│???D_0.pth

│???D_600.pth

│???D_650.pth

│???events.out.tfevents.1700625154.ly.24008.0

│???events.out.tfevents.1700630428.ly.20380.0

│???G_0.pth

│???G_450.pth

│???G_500.pth

│???G_550.pth

│???G_600.pth

│???G_650.pth

│???train.log

└───eval

events.out.tfevents.1700625154.ly.24008.1

events.out.tfevents.1700630428.ly.20380.1

需要注意的是,首次训练需要将预训练模型拷贝到models目录。

结语

除了中文,Bert-VITS2 V2.0.2也支持日语和英语,同时提供中英日混合的Mix推理模式,欲知后事如何,且听下回分解。

  • 发表于:
  • 原文链接https://page.om.qq.com/page/On43kMHSnjmLvIORGvZE5nAg0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券
http://www.vxiaotou.com