Bert-vits2更新了版本V210,修正了日/英的bert對齊問題,效果進一步最佳化;對底模使用的資料進行最佳化和加量,減少finetune失敗以及電音的可能性;日語bert更換了模型,完善了多語言推理。
更多情報請參考Bert-vits2官網:
https://github.com/fishaudio/Bert-VITS2/releases/tag/2.1
最近的事情大家也都曉得了,馬督工義無反顧帶頭衝鋒,身體力行地實踐著橫渠四句:為天地立心,為生民立命,為往聖繼絕學,為萬世開太平。
本次我們基於Bert-vits2的新版本V210,復刻馬督工,向他致敬。
Bert-vits2V210整備資料集
我們知道馬督工的風格是語速極快,也沒啥肢體語言,語調上也基本沒有變化,除了換氣,基本上就像機關槍一樣無限念稿。當然,這也是因為睡前訊息內容密度過大導致的,但作為深度學習訓練資料集來說,睡前訊息節目的音訊素材顯然是不合格的。
真正好的高質量資料集應該包含以下幾個特徵:
音色多樣性:資料集應該包含目標說話人的多個語音樣本,涵蓋他們在不同情感狀態、不同語速和不同音高下的說話。這樣可以捕捉到目標說話人在不同情境下的聲音特徵。
音訊質量:確保語音樣本的音訊質量高,沒有明顯的噪聲、失真或其他干擾。音訊質量的好壞直接影響到復刻結果的質量。
多樣的語音內容:語音樣本應該包含不同型別的語音內容,例如單詞、短語、句子和段落。這有助於捕捉到目標說話人在不同語境下的音色特徵。
語音平衡:確保資料集中包含目標說話人的樣本數量相對平衡,以避免訓練出偏向某些樣本的模型。
覆蓋不同音高:收集目標說話人在不同音高和音調下的語音樣本。這樣可以更好地捕捉到他們聲音的變化和音高特徵。
語音環境:包含不同環境下的語音樣本,例如室內、室外、靜音和嘈雜環境等。這樣可以使復刻的音色更具魯棒性,適應不同的環境條件。
長度和多樣性:語音樣本的長度和多樣性也是需要考慮的因素。收集包含不同長度和語音風格的樣本,以便更好地捕捉到目標說話人的聲音特徵。
當然了,完全滿足上述特點基本不太可能,這裡選擇馬督工和劉女神的一段採訪影片:
https://www.bilibili.com/video/BV1sN411M73g/
首先將影片進行下載,這裡使用you-get:
pip install you-get
執行命令:
https://www.bilibili.com/video/BV1sN411M73g/
下載成功後,將馬督工的聲音提取出來。
Bert-vits2V210訓練模型
首先克隆筆者fork自官網的v210專案:
git clone https://github.com/v3ucn/Bert-VITS2_V210.git
將素材放入Data/meimei/raw/meimei目錄中,注意必須是wav檔案。
然後更換新的底模,下載地址:
https://openi.pcl.ac.cn/Stardust_minus/Bert-VITS2/modelmanage/show_model
把Bert-VITS2_2.1-Emo底模放入專案的pretrained_models目錄。
同時單獨把deberta-v2-large-japanese-char-wwm模型放入到專案的bert/deberta-v2-large-japanese-char-wwm目錄中。
由於新增了多維情感模型,所以也需要單獨下載模型:
https://huggingface.co/facebook/wav2vec2-large-robust/tree/main
放入專案的emotional目錄:
E:\work\Bert-VITS2-v21_demo\emotional>tree /f
Folder PATH listing for volume myssd
Volume serial number is 7CE3-15AE
E:.
└───wav2vec2-large-robust-12-ft-emotion-msp-dim
.gitattributes
config.json
LICENSE
preprocessor_config.json
pytorch_model.bin
README.md
vocab.json
執行指令碼,切分素材:
python3 audio_slicer.py
隨後進行重取樣和文字識別:
python3 short_audio_transcribe.py
接著進行標註:
python3 preprocess_text.py
和V2.0.2不同的是,V2.1需要生成多維情感模型檔案:
python3 emo_gen.py
相對於原版,新版增加了,針對訓練集的spec快取,可以有效提高訓練效率:
python3 spec_gen.py
最後生成bert模型可讀檔案:
python3 bert_gen.py
最後開始訓練:
python3 train_ms.py
Bert-vits2V210模型推理
模型訓練好之後,進入到推理環節,首先修改根目錄的config.yml檔案:
bert_gen:
config_path: config.json
device: cuda
num_processes: 2
use_multi_device: false
dataset_path: Data\meimei
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
server:
device: cuda
models:
- config: ./Data/meimei/config.json
device: cuda
language: ZH
model: ./Data/meimei/models/G_0.pth
speakers:
- length_scale: 1
noise_scale: 0.6
noise_scale_w: 0.8
sdp_ratio: 0.2
speaker: "\u79D1\u6BD4"
- length_scale: 0.5
noise_scale: 0.7
noise_scale_w: 0.8
sdp_ratio: 0.3
speaker: "\u4E94\u6761\u609F"
- length_scale: 1.2
noise_scale: 0.6
noise_scale_w: 0.8
sdp_ratio: 0.2
speaker: "\u5B89\u500D\u664B\u4E09"
- config: ./Data/meimei/config.json
device: cuda
language: JP
model: ./Data/meimei/models/G_0.pth
speakers: []
port: 7860
train_ms:
base:
model_image: "Bert-VITS2_2.1-Emo底模"
repo_id: Stardust_minus/Bert-VITS2
use_base_model: false
config_path: config.json
env:
MASTER_ADDR: localhost
MASTER_PORT: 10086
RANK: 0
THE_ENV_VAR_YOU_NEED_TO_USE: '1234567'
WORLD_SIZE: 1
keep_ckpts: 8
model: models
num_workers: 16
spec_cache: true
translate:
app_key: ''
secret_key: ''
webui:
config_path: Data/meimei/config.json
debug: false
device: cuda
language_identification_library: langid
model: models/G_150.pth
port: 7860
share: false
在後面的webui配置中寫入模型檔名:model: models/G_150.pth。
隨後啟動推理指令碼:
python3 webui.py
就可以進行推理了:
請注意,推理建議使用官方的基於Gradio版本的推理頁面,而非FastApi的版本。
結語
本專案只是用於Bert-vits2的研究和測試,毫無疑問,想透過30秒的素材就復刻馬督工根本是天方夜譚,但馬督工的精神,是我們每一個人都可以復刻的。