當前位置: 華文問答 > 數碼

有開源的AI聲音複制庫嗎?

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