Bert-vits2專案近期炸裂更新,放出了v2.0.2版本的程式碼,修正了存在於2.0先前版本的重大bug,並且重煉了底模,本次更新是即1.1.1版本後最重大的更新,支援了三語言訓練及混合合成,並且做到向下相容,可以推理老版本的模型,本次我們基於新版V2.0.2來本地推理原神小姐姐們的音色模型。
具體的更新日誌請參見官網:
https://github.com/fishaudio/Bert-VITS2/releases
模型配置
首先克隆官方最近的v2.0.2程式碼:
git clone https://github.com/fishaudio/Bert-VITS2.git
隨後在專案的根目錄建立Data目錄
cd Bert-VITS2
mkdir Data
該目錄用來存放音色模型檔案。
隨後下載雷電將軍和八重神子的音色模型:
連結:https://pan.baidu.com/s/1e9gKidfvYKLU2IzjoW3sVw?pwd=v3uc
這兩個模型都是基於老版本進行訓練的,囿於篇幅,訓練流程先按下不表。
需要注意的是,模型檔案所在的目錄不支援中文,最好改成英文,目錄結構如下所示:
E:\work\Bert-VITS2-v202_launch_yingAndBachong\Data>tree/F
Folder PATH listing for volume myssd
Volume serial number is 7CE3-15AE
E:.
├───bachong
│ │ config.json
│ │
│ └───models
│ G_47700.pth
│
└───ying
│ config.json
│ config.yml
│
├───custom_character_voice
├───filelists
└───models
G_4600.pth
這裡.pth檔案就是模型本體,config.json是模型配置檔案。
當然,除了筆者分享的模型,也可以載入之前老版本自己訓練的模型,但需要注意的是,必須指定模型訓練的版本,也就是當時訓練操作過程中Bert-VITS2的版本,比如筆者的模型訓練時是基於v1.1.1,那麼就必須在config中進行指定:
{
"train": {
"log_interval": 100,
"eval_interval": 100,
"seed": 52,
"epochs": 200,
"learning_rate": 0.0001,
"betas": [
0.8,
0.99
],
"eps": 1e-09,
"batch_size": 4,
"fp16_run": false,
"lr_decay": 0.999875,
"segment_size": 16384,
"init_lr_ratio": 1,
"warmup_epochs": 0,
"c_mel": 45,
"c_kl": 1.0,
"skip_optimizer": true
},
"data": {
"training_files": "filelists/train.list",
"validation_files": "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": 2,
"cleaned_text": true,
"spk2id": {
"bachong": 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": "1.1.1"
}
最後的version引數用來指定模型,如果不指定模型,系統預設是v2.0版本,假設模型和版本不匹配,會造成本地推理的音色異常。
修改好版本之後,可以透過pip安裝依賴:
pip install -r requirements.txt
至此,模型就配置好了。
本地推理
依賴安裝好之後,在根目錄執行命令:
python3 server_fastapi.py
程式返回:
E:\work\Bert-VITS2-v202_launch_yingAndBachong>python server_fastapi.py
E:\work\Bert-VITS2-v202_launch_yingAndBachong\venv\lib\site-packages\torch\nn\utils\weight_norm.py:30: UserWarning: torch.nn.utils.weight_norm is deprecated in favor of torch.nn.utils.parametrizations.weight_norm.
warnings.warn("torch.nn.utils.weight_norm is deprecated in favor of torch.nn.utils.parametrizations.weight_norm.")
11-20 11:08:46 SUCCESS | server_fastapi.py:101 | 新增模型E:\work\Bert-VITS2-v202_launch_yingAndBachong\Data\ying\models\G_4600.pth,使用配置檔案E:\work\Bert-VITS2-v202_launch_yingAndBachong\Data\ying\config.json
11-20 11:08:46 SUCCESS | server_fastapi.py:107 | 模型已存在,新增模型引用。
11-20 11:08:46 WARNING | server_fastapi.py:626 | 本地服務,請勿將服務埠暴露於外網
11-20 11:08:46 INFO | server_fastapi.py:627 | api文件地址 http://127.0.0.1:7860/docs
說明服務已經啟動,沒錯,Bert-vits2的推理api是基於Fast-api的。關於Fast-api框架,請移步:
2020年是時候更新你的技術武器庫了:Asgi vs Wsgi(FastAPI vs Flask)
隨後訪問http://127.0.0.1:7860/:
這裡可以將兩個模型一起載入進來。
右側引數為推理裝置和語言,預設是使用cuda和中文。
如果是沒有N卡的同學,也可以選擇用cpu進行本地推理。
隨後將推理文字寫入文字框:
這裡值得一提的是,Bert-vits2解決了長文字報錯的問題,如果是長文字,只需要開啟自動切分的選項即可,系統會根據文字中的標點進行切割,減少每次推理的token數量,從而避免報錯。
最後新版本支援多模型同時推理:
只需要選擇對應的模型選項,然後下載音訊即可。
結語
筆者已經採用:一鍵整合,萬用萬靈,Python3.10專案嵌入式一鍵整合包的製作(Embed)的方式將專案做成了一鍵整合包,解壓後執行launch.bat檔案,開箱可用,一鍵推理:
連結:https://pan.baidu.com/s/12pinwHb5mmYvskYTZtLKvg?pwd=v3uc
歡迎諸公下載品鑑。