義無反顧馬督工,Bert-vits2V210復刻馬督工實踐(Python3.10)

劉悅的技術部落格發表於2023-11-29

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秒的素材就復刻馬督工根本是天方夜譚,但馬督工的精神,是我們每一個人都可以復刻的。

相關文章