经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 大数据/云/AI » 人工智能基础 » 查看文章
本地训练,开箱可用,Bert-VITS2 V2.0.2版本本地基于现有数据集训练(原神刻晴)
来源:cnblogs  作者:刘悦的技术博客  时间:2023/11/22 16:45:32  对本文有异议

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

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

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

  1. 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配置模型

首先克隆项目:

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

随后下载新版的bert模型:

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

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

  1. E:\work\Bert-VITS2-v202\bert>tree /f
  2. Folder PATH listing for volume myssd
  3. Volume serial number is 7CE3-15AE
  4. E:.
  5. bert_models.json
  6. ├───bert-base-japanese-v3
  7. config.json
  8. README.md
  9. tokenizer_config.json
  10. vocab.txt
  11. ├───bert-large-japanese-v2
  12. config.json
  13. README.md
  14. tokenizer_config.json
  15. vocab.txt
  16. ├───chinese-roberta-wwm-ext-large
  17. added_tokens.json
  18. config.json
  19. pytorch_model.bin
  20. README.md
  21. special_tokens_map.json
  22. tokenizer.json
  23. tokenizer_config.json
  24. vocab.txt
  25. ├───deberta-v2-large-japanese
  26. config.json
  27. pytorch_model.bin
  28. README.md
  29. special_tokens_map.json
  30. tokenizer.json
  31. tokenizer_config.json
  32. └───deberta-v3-large
  33. config.json
  34. generator_config.json
  35. pytorch_model.bin
  36. README.md
  37. spm.model
  38. tokenizer_config.json

随后下载预训练模型:

  1. 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目录,如下所示:

  1. E:\work\Bert-VITS2-v202\pretrained_models>tree /f
  2. Folder PATH listing for volume myssd
  3. Volume serial number is 7CE3-15AE
  4. E:.
  5. DUR_0.pth
  6. D_0.pth
  7. G_0.pth

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

  1. E:\work\Bert-VITS2-v202\Data\keqing\raw\keqing>tree /f
  2. Folder PATH listing for volume myssd
  3. Volume serial number is 7CE3-15AE
  4. E:.
  5. vo_card_keqing_endOfGame_fail_01.lab
  6. vo_card_keqing_endOfGame_fail_01.wav

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

  1. bert_gen:
  2. config_path: config.json
  3. device: cuda
  4. num_processes: 2
  5. use_multi_device: false
  6. dataset_path: Data\keqing
  7. mirror: ''
  8. openi_token: ''
  9. preprocess_text:
  10. clean: true
  11. cleaned_path: filelists/cleaned.list
  12. config_path: config.json
  13. max_val_total: 8
  14. train_path: filelists/train.list
  15. transcription_path: filelists/short_character_anno.list
  16. val_path: filelists/val.list
  17. val_per_spk: 5
  18. resample:
  19. in_dir: raw
  20. out_dir: raw
  21. sampling_rate: 44100

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

Bert-VITS2 V2.0.2数据预处理

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

  1. python3 transcribe_genshin.py

生成好的文件:

  1. Data\keqing\raw/keqing/vo_card_keqing_endOfGame_fail_01.wav|keqing|ZH|我会勤加练习,拿下下一次的胜利。
  2. Data\keqing\raw/keqing/vo_card_keqing_endOfGame_win_01.wav|keqing|ZH|胜负本是常事,不必太过挂怀。
  3. Data\keqing\raw/keqing/vo_card_keqing_freetalk_01.wav|keqing|ZH|这「七圣召唤」虽说是游戏,但对局之中也隐隐有策算谋略之理。

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

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

  1. python3 preprocess_text.py
  2. python3 bert_gen.py

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

  1. E:\work\Bert-VITS2-v202\Data\keqing\filelists>tree /f
  2. Folder PATH listing for volume myssd
  3. Volume serial number is 7CE3-15AE
  4. E:.
  5. cleaned.list
  6. short_character_anno.list
  7. train.list
  8. val.list

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

Bert-VITS2 V2.0.2本地训练

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

  1. {
  2. "train": {
  3. "log_interval": 50,
  4. "eval_interval": 50,
  5. "seed": 42,
  6. "epochs": 200,
  7. "learning_rate": 0.0001,
  8. "betas": [
  9. 0.8,
  10. 0.99
  11. ],
  12. "eps": 1e-09,
  13. "batch_size": 8,
  14. "fp16_run": false,
  15. "lr_decay": 0.99995,
  16. "segment_size": 16384,
  17. "init_lr_ratio": 1,
  18. "warmup_epochs": 0,
  19. "c_mel": 45,
  20. "c_kl": 1.0,
  21. "skip_optimizer": false
  22. },
  23. "data": {
  24. "training_files": "Data/keqing/filelists/train.list",
  25. "validation_files": "Data/keqing/filelists/val.list",
  26. "max_wav_value": 32768.0,
  27. "sampling_rate": 44100,
  28. "filter_length": 2048,
  29. "hop_length": 512,
  30. "win_length": 2048,
  31. "n_mel_channels": 128,
  32. "mel_fmin": 0.0,
  33. "mel_fmax": null,
  34. "add_blank": true,
  35. "n_speakers": 1,
  36. "cleaned_text": true,
  37. "spk2id": {
  38. "keqing": 0
  39. }
  40. },
  41. "model": {
  42. "use_spk_conditioned_encoder": true,
  43. "use_noise_scaled_mas": true,
  44. "use_mel_posterior_encoder": false,
  45. "use_duration_discriminator": true,
  46. "inter_channels": 192,
  47. "hidden_channels": 192,
  48. "filter_channels": 768,
  49. "n_heads": 2,
  50. "n_layers": 6,
  51. "kernel_size": 3,
  52. "p_dropout": 0.1,
  53. "resblock": "1",
  54. "resblock_kernel_sizes": [
  55. 3,
  56. 7,
  57. 11
  58. ],
  59. "resblock_dilation_sizes": [
  60. [
  61. 1,
  62. 3,
  63. 5
  64. ],
  65. [
  66. 1,
  67. 3,
  68. 5
  69. ],
  70. [
  71. 1,
  72. 3,
  73. 5
  74. ]
  75. ],
  76. "upsample_rates": [
  77. 8,
  78. 8,
  79. 2,
  80. 2,
  81. 2
  82. ],
  83. "upsample_initial_channel": 512,
  84. "upsample_kernel_sizes": [
  85. 16,
  86. 16,
  87. 8,
  88. 2,
  89. 2
  90. ],
  91. "n_layers_q": 3,
  92. "use_spectral_norm": false,
  93. "gin_channels": 256
  94. },
  95. "version": "2.0"
  96. }

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

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

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

  1. python3 train_ms.py

程序返回:

  1. 11-22 13:20:28 INFO | data_utils.py:61 | Init dataset...
  2. 100%|█████████████████████████████████████████████████████████████████████████████| 581/581 [00:00<00:00, 48414.40it/s]
  3. 11-22 13:20:28 INFO | data_utils.py:76 | skipped: 31, total: 581
  4. 11-22 13:20:28 INFO | data_utils.py:61 | Init dataset...
  5. 100%|████████████████████████████████████████████████████████████████████████████████████████████| 5/5 [00:00<?, ?it/s]
  6. 11-22 13:20:28 INFO | data_utils.py:76 | skipped: 0, total: 5
  7. Using noise scaled MAS for VITS2
  8. Using duration discriminator for VITS2
  9. INFO:models:Loaded checkpoint 'Data\keqing\models\DUR_0.pth' (iteration 7)
  10. INFO:models:Loaded checkpoint 'Data\keqing\models\G_0.pth' (iteration 7)
  11. INFO:models:Loaded checkpoint 'Data\keqing\models\D_0.pth' (iteration 7)

说明训练已经开始了。

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

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

来查看loss损失率,访问:

  1. http://localhost:6006/#scalars

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

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

  1. E:\work\Bert-VITS2-v202\Data\keqing\models>tree /f
  2. Folder PATH listing for volume myssd
  3. Volume serial number is 7CE3-15AE
  4. E:.
  5. DUR_0.pth
  6. DUR_550.pth
  7. DUR_600.pth
  8. DUR_650.pth
  9. D_0.pth
  10. D_600.pth
  11. D_650.pth
  12. events.out.tfevents.1700625154.ly.24008.0
  13. events.out.tfevents.1700630428.ly.20380.0
  14. G_0.pth
  15. G_450.pth
  16. G_500.pth
  17. G_550.pth
  18. G_600.pth
  19. G_650.pth
  20. train.log
  21. └───eval
  22. events.out.tfevents.1700625154.ly.24008.1
  23. events.out.tfevents.1700630428.ly.20380.1

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

结语

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

原文链接:https://www.cnblogs.com/v3ucn/p/17849184.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号