本地训练,开箱可用,Bert-VITS2 V2.0.2版本本地基于现有数据集训练(原神刻晴)
按照固有思維方式,深度學(xué)習(xí)的訓(xùn)練環(huán)節(jié)應(yīng)該在云端,畢竟本地硬件條件有限。但事實(shí)上,在語(yǔ)音識(shí)別和自然語(yǔ)言處理層面,即使相對(duì)較少的數(shù)據(jù)量也可以訓(xùn)練出高性能的模型,對(duì)于預(yù)算有限的同學(xué)們來(lái)說(shuō),也沒(méi)必要花冤枉錢上“云端”了,本次我們來(lái)演示如何在本地訓(xùn)練Bert-VITS2 V2.0.2模型。
Bert-VITS2 V2.0.2基于現(xiàn)有數(shù)據(jù)集
目前Bert-VITS2 V2.0.2大體上有兩種訓(xùn)練方式,第一種是基于現(xiàn)有數(shù)據(jù)集,即原神各角色已經(jīng)標(biāo)注好的語(yǔ)音數(shù)據(jù),這部分內(nèi)容是公開(kāi)的,但是不能商用,可以在這里下載:
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
我們只需要選擇喜歡的角色進(jìn)行下載即可:
第二種是沒(méi)有現(xiàn)有的數(shù)據(jù)集,即假設(shè)我們想克隆地球人隨便任意一個(gè)人的聲音,這種情況下我們需要收集這個(gè)人的語(yǔ)音素材,然后自己制作數(shù)據(jù)集。
本次我們只演示第一種訓(xùn)練方式,即訓(xùn)練現(xiàn)有數(shù)據(jù)集的原神角色,第二種暫且按下不表。
Bert-VITS2 V2.0.2配置模型
首先克隆項(xiàng)目:
git clone https://github.com/v3ucn/Bert-VITS2_V202_Train.git
隨后下載新版的bert模型:
鏈接:https://pan.baidu.com/s/11vLNEVDeP_8YhYIJUjcUeg?pwd=v3uc
下載成功后,解壓放入項(xiàng)目的bert目錄,目錄結(jié)構(gòu)如下所示:
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
隨后下載預(yù)訓(xùn)練模型:
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
放入項(xiàng)目的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
接著把上文提到的刻晴數(shù)據(jù)集放入項(xiàng)目的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
如果想定制化目錄結(jié)構(gòu),可以修改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
至此,模型和數(shù)據(jù)集就配置好了。
Bert-VITS2 V2.0.2數(shù)據(jù)預(yù)處理
標(biāo)注好的原始數(shù)據(jù)集并不能夠直接進(jìn)行訓(xùn)練,需要預(yù)處理一下,首先需要將原始數(shù)據(jù)文件轉(zhuǎn)寫成為標(biāo)準(zhǔn)的標(biāo)注文件:
python3 transcribe_genshin.py
生成好的文件:
Data\keqing\raw/keqing/vo_card_keqing_endOfGame_fail_01.wav|keqing|ZH|我會(huì)勤加練習(xí),拿下下一次的勝利。
Data\keqing\raw/keqing/vo_card_keqing_endOfGame_win_01.wav|keqing|ZH|勝負(fù)本是常事,不必太過(guò)掛懷。
Data\keqing\raw/keqing/vo_card_keqing_freetalk_01.wav|keqing|ZH|這「七圣召喚」雖說(shuō)是游戲,但對(duì)局之中也隱隱有策算謀略之理。
這里ZH代表中文,新版的Bert-VITS2 V2.0.2也支持日文和英文,代碼分別為JP和EN。
隨后對(duì)文本進(jìn)行預(yù)處理以及生成bert模型可讀文件:
python3 preprocess_text.py
python3 bert_gen.py
執(zhí)行后會(huì)產(chǎn)生訓(xùn)練集和驗(yàn)證集文件:
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
檢查無(wú)誤后,數(shù)據(jù)預(yù)處理就完成了。
Bert-VITS2 V2.0.2本地訓(xùn)練
萬(wàn)事俱備,只差訓(xùn)練。先不要著急,打開(kāi)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"
}
這里需要調(diào)整的參數(shù)是batch_size,如果顯存不夠,需要往下調(diào)整,否則會(huì)出現(xiàn)“爆顯存”的問(wèn)題,假設(shè)顯存為8G,那么該數(shù)值最好不要超過(guò)8。
與此同時(shí),首次訓(xùn)練建議把log_interval和eval_interval參數(shù)調(diào)小一點(diǎn),即訓(xùn)練的保存間隔,方便訓(xùn)練過(guò)程中隨時(shí)進(jìn)行推理驗(yàn)證。
隨后輸入命令,開(kāi)始訓(xùn)練:
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)
說(shuō)明訓(xùn)練已經(jīng)開(kāi)始了。
訓(xùn)練過(guò)程中,可以通過(guò)命令:
python3 -m tensorboard.main --logdir=Data/keqing/models
來(lái)查看loss損失率,訪問(wèn):
http://localhost:6006/#scalars
一般情況下,訓(xùn)練損失率低于50%,并且損失函數(shù)在訓(xùn)練集和驗(yàn)證集上都趨于穩(wěn)定,則可以認(rèn)為模型已經(jīng)收斂。收斂的模型就可以為我們所用了,如何使用訓(xùn)練好的模型,請(qǐng)移步:又欲又撩人,基于新版Bert-vits2V2.0.2音色模型雷電將軍八重神子一鍵推理整合包分享,囿于篇幅,這里不再贅述。
訓(xùn)練好的模型存放在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
需要注意的是,首次訓(xùn)練需要將預(yù)訓(xùn)練模型拷貝到models目錄。
結(jié)語(yǔ)
除了中文,Bert-VITS2 V2.0.2也支持日語(yǔ)和英語(yǔ),同時(shí)提供中英日混合的Mix推理模式,欲知后事如何,且聽(tīng)下回分解。
總結(jié)
以上是生活随笔為你收集整理的本地训练,开箱可用,Bert-VITS2 V2.0.2版本本地基于现有数据集训练(原神刻晴)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: fgo拿破仑是谁画的呢?
- 下一篇: 暗黑3卡奈魔盒怎么得 赛斯切隆废墟卡奈魔