本地训练,开箱可用,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<00:00, 48414.40it/s]  
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<?, ?it/s]  
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推理模式,欲知后事如何,且听下回分解。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/208023.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

分享给自媒体人:做自媒体最好的心态

做自媒体路上的两大修行&#xff1a; 一是状态不好的时候&#xff0c;明知道停更会掉流量&#xff0c;依然可以毫不焦虑地躺平; 二是发的东西没人看&#xff0c;坚持更新也没流量&#xff0c;却依然可以坚定地做自己。 做号这件事&#xff0c;就是一分耕耘一分收获的。 可能有人…

什么是视频直播美颜SDK?美颜SDK对比评测与实战应用

为了满足用户对于高质量美颜的需求&#xff0c;各种美颜技术应运而生&#xff0c;其中最为关键的工具之一就是视频直播美颜SDK。 一、视频直播美颜SDK简介 美颜SDK专注于提供实时美颜效果&#xff0c;使得在视频直播过程中能够实现肤色均匀、磨皮、瘦脸等效果&#xff0c;提高…

(C++)验证回文字符串

愿所有美好如期而遇 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台备战技术面试&#xff1f;力扣提供海量技术面试资源&#xff0c;帮助你高效提升编程技能&#xff0c;轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/valid-pali…

51单片机按键控制LED灯亮灭的N个玩法

51单片机按键控制LED灯亮灭的N个玩法 1.概述 这篇文章介绍按键的使用&#xff0c;以及通过控制LED灯的小实验&#xff0c;发现按键中存在的问题&#xff0c;然后思考并解决这些问题。达到熟练使用按键控制元器件。 2.搭建硬件环境 1.硬件准备 名称型号数量单片机STC12C205…

1992-2021年省市县经过矫正的夜间灯光数据(GNLD、VIIRS)

1992-2021年省市县经过矫正的夜间灯光数据&#xff08;GNLD、VIIRS&#xff09; 1、时间&#xff1a;1992-2021年3月&#xff0c;其中1992-2013年为年度数据&#xff0c;2013-2021年3月为月度数据 2、来源&#xff1a;DMSP、VIIRS 3、范围&#xff1a;分区域汇总&#xff1a…

最易上手的电子期刊制作工具,快来使用!

快节奏时代&#xff0c;纸质书籍逐渐淡出人们的视野&#xff0c;取而代之的就是电子刊物制作。而电子期刊开始寻求更多的互动和丰富的内容形式&#xff0c;给人以良好的阅读体验。 如何制作呢&#xff1f;便成为了当下必须要学会的新技能&#xff0c;接下来分享一个比PPT更简单…

面试题-8

1.vue路由是怎么传参的&#xff1f; params传参 this.$router.push({name:index}) this.$route.params.id 路由属性传参 this.$router.push({name:/index/${item.id}}) 配置路由{path:/index:id} query传参(可以解决页面刷新参数丢失的问题) this.$router.push({ name…

AIGC,ChatGPT AI绘画 Midjourney 注册流程详细步骤

AI 绘画,Midjourney完成高清图片绘制,轻松掌握AI工具。 前期准备: ① 一个能使用的谷歌账号 ② 可以访问外网 Midjourney注册 1.进入midjourney官网https://www.midjourney.com 点击左下角”Join the Beta”,就可以注册,第一次使用的小伙伴会弹出提示,只需要点击Acc…

调试接口速度,打印毫秒数,找出慢的地方,优化

方法的最开头写上 $start_time microtime(true); 然后代码行里 dump(All 1: time ’ . (microtime(true) - $start_time)); dump(All 1.2: time ’ . (microtime(true) - $start_time)); 类似这样的最终打印

实验7设计建模工具的使用(三)

二&#xff0c;实验内容与步骤 1. 百度搜索1-2张状态图&#xff0c;请重新绘制它们&#xff0c;并回答以下问题&#xff1a; 1&#xff09;有哪些状态&#xff1b; 2&#xff09;简要描述该图所表达的含义&#xff1b; 要求&#xff1a;所绘制的图不得与本文中其它习题一样…

sqli-labs(3)

11. 看到登录框直接or 11 在hackerabar中我们可以看到这里是post传递的数据&#xff0c;在get中用--来注释后面的内容 因为get中#是用来指导浏览器动作的&#xff0c;--代表注释是空格&#xff0c;所以这里用# 之后就和get的一样了 1 order by 2 # order by 3报错 联合注入 …

【C语法学习】26 - strcmp()函数

文章目录 1 函数原型2 参数3 返回值4 比较机制5 示例5.1 示例1 1 函数原型 strcmp()&#xff1a;比较str1指向的字符串和str2指向的字符串&#xff0c;函数原型如下&#xff1a; int strcmp(const char *str1, const char *str2);2 参数 strcmp()函数有两个参数str1和str2&a…