更新於 2024/12/24閱讀時間約 11 分鐘

用 SO-VITS-SVC 打造 AI 歌姬,零基礎也能輕鬆上手-數據預處理



SO-VITS-SVC實戰經驗分享:從零開始打造我的專屬AI歌手




AI唱歌系列之四-數據集預處理與準備訓練






前言:

在使用 SO-VITS-SVC 進行聲音模型訓練時,數據集的準備與預處理是至關重要的步驟。本文將詳細介紹如何進行音訊切片、響度匹配、數據預處理以及訓練參數的設置,幫助你高效完成模型訓練,打造專屬的 AI 歌姬。


1.音頻切片

1-1.命名規範

在切片之前,請將待切片的音訊檔案以純數字、字母、底線命名,避免使用特殊符號,確保文件名規範化。


1-2. 使用WeBUI進行智慧音訊切片

  • 開啟 WebUI -小工具/實驗室特性 -智慧音訊切片。
  • 將包含所有待處理音訊檔案(必須為.wav 格式)的資料夾路徑輸入到原始音訊資料夾 內。
  • 點擊載入原始音訊 ,確認音訊被正確識別。
  • 輸入切片後的輸出目錄,選擇對過短音訊的處理方式。
  • 開始處理。


1-3. 注意事項

  • 將音訊切片至 5s - 15s , 稍微長點也無傷大雅(不要超過17秒),實在太長可能會導致訓練中途甚至預處理就爆顯存。
  • 推薦使用以下工具進行輔助切片。
  • 只要調整其中的  Minimum Interval ,一般說話素材通常會保持預設即可,歌唱素材可調整至  100  甚至  50。
  • 切完之後請手動處理過長(大於 15 秒)或過短(小於 4 秒)的音頻,過短的音頻可以多段拼接,而過長的音頻可以手動切分。
  • 如果你使用 Whisper-ppg 聲音編碼器來訓練,所有的切片長度必須小於 30s

2. 響度匹配與重採樣

2-1. 數據集預處理的流程是:

響度匹配 —— 重採樣 —— 產生設定檔 —— 擷取特徵。


2-2. 重採樣至 44100Hz 單聲道:

使用下面的指令(若已經經過響度匹配,請跳過該行看下面的 NOTE):



1.python resample.py


2-3. 響度匹配的重要性:

注意:雖然 So-VITS 專案自帶響度匹配腳本,但該腳本會將音訊配對到 0db, 這 可能會造成音質的受損。最佳的做法是使用專業音訊處理軟體, 如Adobe Audition自行將資料集響度配對處理後再進入預處理流程。如果資料集已經 完成了響度匹配或啟用了響度嵌入,可以在預處理時跳過程式自帶的響度匹配 流程。


2-4. 跳過響度匹配:

可以在執行上述指令時新增 --skip_loudnorm 跳過響度匹配步驟。如:



1.python resample.py --skip_loudnorm


2-5. 上述所有流程在 WebUI 中均可一键完成:

  1. 將上一步驟切片完成的數據集資料夾放置到整合包根目錄下dataset_raw資料夾內。
請注意檔案結構:dataset_raw/speaker_name/*.wav。
  1. 在 WebUI 訓練標籤中,點選識別數據集,確認數據集被正確識別。
  2. 根據說明自行選擇訓練使用的編碼器和 f0 預測器。
  3. 如要訓練擴散模型或啟用響度嵌入,請自行勾選。
勾選訓練擴散後將會擷取擴散模型所需的特徵文件,會佔用更多硬碟空間。有關擴散模型的詳細說明,請參考训练参数详解.。
啟用響度嵌入需要選擇 Vec768L12 編碼器,其它編碼器沒有響度嵌入的底模。


  1. 點選數據預處理:
資料預處理的輸出資訊中可能存在報錯資訊。如果出現報錯,則代表資料預處理未完 成。你可以參考常見報錯和解決方案自行排障。


數據預處理可以多進程執行,但會顯著佔用顯存和内存。建議 6G 以下顯存不要 開啟多線程。12G 以下顯存不要將線程數設置為 2 以上。
同一個數據集只需要預處理一次,往後繼續訓練不需要也不可以重新預處理!



提供一個好用的響度匹配工具:



2-6. 自動劃分訓練集、驗證集,以及自動產生設定檔

使用下面的指令(若需要響度嵌入,請跳過該行看下面的使用響度嵌入):



1.python preprocess_flist_config.py --speech_encoder vec768l12



編碼器詳解:


speech_encoder :

擁有以下七個選擇,具體講解請看2.2.1必須項及各編碼器的詳解。如果省略 speech_encoder 參數,預設值為 vec768l12。

1.vec768l12
2.vec256l9
3.hubertsoft
4.whisper-ppg
5.whisper-ppg-large
6.cnhubertlarge
7.dphubert
8.


更多的編碼器選項,請參考 訓練參數詳解 - 關於特徵編碼器。


音色洩漏指的是輸出的音色向底模/推理輸入源的原始音色接近,模型說話者越多, 音色洩漏越嚴重。考慮到大多數人都希望盡可能還原目標說話者的音色,因此音色洩露 被認為是一種不受歡迎的結果。



2-7. 使用響度嵌入

  • 使用響度嵌入後訓練出的模型將匹配到輸入源響度,否則為訓練集響度。 (可簡單理解為訓練後模型的音量會與資料集匹配,否則會與底模匹配)。
  • 若使用響度嵌入,需要增加 --vol_aug 參數,例如:


1.python preprocess_flist_config.py --speech_encoder vec768l12 --vol_aug




3. 設定檔依需求修改


config.json


3-1. 基本參數:

  • vocoder_name : 選擇一種聲碼器,預設為 nsf-hifigan。
  • log_interval :多少步輸出一次日誌,預設為  200。
  • eval_interval :多少步進行一次驗證並保存一次模型,預設為  800。
  • epochs :訓練總輪數,預設為  10000 ,達到此輪數後將自動停止訓練。
  • learning_rate :學習率,建議保持預設值不要改。
  • batch_size :單次訓練載入到 GPU 的資料量,調整到低於顯存容量的大小即可(單位:個,即資料集中的wav個數)。
  • all_in_mem :將所有資料集載入到記憶體中,某些平台的硬碟 IO 過於低、同時記憶體容量  遠大於  資料集體積時可啟用。
  • keep_ckpts :訓練時保留最後幾個模型, 0 為保留所有,預設只保留最後 3 個。


聲碼器列表:

1.nsf-hifigan
2.nsf-snake-hifigan
3.


diffusion.yaml


3-2. 擴散模型參數:

  • cache_all_data :載入所有數據集到記憶體中,某些平台的硬碟 IO 過於低、同時記憶體容量  遠大於  數據集體積時可以啟用(註:至少還得預留1-2G記憶體給作業系統)。
  • duration :訓練時音訊切片時長,可依顯存大小調整, 注意,此值必須小於數據集內音訊的最短時間!
  • batch_size :單次訓練載入到 GPU 的資料量,調整到低於顯存容量的大小即可(單位:個,即資料集中的wav個數)。
  • timesteps  : 擴散模式總步數,預設為 1000。完整的高斯擴散共 1000 步。
  • k_step_max  : 訓練時可僅訓練  k_step_max  步擴散以節約訓練時間,注意,該值必須小於 timesteps ,0 為訓練整個擴散模型, 注意,如果不訓練整個擴散模型將無法使用僅擴散模型推理!


注意事項:

  • 請嚴格區分輪數 (Epoch) 和步數 (Step):1 個 Epoch 代表訓練集中的所有樣本都參與了 一次學習,1 Step 代表進行了一步學習,由於 batch size 的存在,每步學習可以含有數 條樣本,因此,Epoch 和 Step 的換算如下:


  • 訓練預設 10000 輪後結束,但正常訓練通常只需要數百輪即可有較好的效果。當你覺得 訓練差不多完成了,可以在訓練終端按 Ctrl + C 中斷訓練。中斷後只要沒有重新預處理 訓練集,就可以在 WebUI 中繼續上一次儲存的訓練進度。



4. F0 預測器選擇與最佳實踐


生成 hubert 與 f0


4-1. 使用下面的指令(若需要訓練淺擴散,請跳過該行看下面的淺擴散):

1.# 下面的命令使用了rmvpe作为f0预测器,你可以手动进行修改
2.python preprocess_hubert_f0.py --f0_predictor rmvpe


f0_predictor


4-2. 擁有六個選擇,部分 f0 預測器需要額外下載預處理模型,請參考2.2.3-可選項-根據情況選擇

1.crepe
2.dio
3.pm
4.harvest
5.rmvpe(推荐!)
6.fcpe
7.


4-3. 各 f0 預測器的優缺點:


4-4. 注意:

  1. 如果訓練集過於吵雜,請使用 crepe 處理 f0。
  2. 如果省略 f0_predictor 參數,預設值為 rmvpe。


若需要淺擴散功能(可選):


4-5. 需要增加--use_diff 參數,例如:

1.# 下面的命令使用了rmvpe作为f0预测器,你可以手动进行修改
2.python preprocess_hubert_f0.py --f0_predictor rmvpe --use_diff


執行完以上步驟後產生的 dataset 目錄便是預處理完成的數據,此時你可以按需刪除 dataset_raw 資料夾了。



最佳實踐

如果你是初次接觸,面對眼花撩亂的可選項,不知道該如何設定預處理參數,這裡為你 提供了一些不同使用場景下的最佳實踐:

4-6. 用於翻唱(非即時轉換):


4-7. 用於朗讀 / 說話(非即時轉換):



結語:

完成數據集的準備與預處理是 SO-VITS-SVC 訓練的關鍵步驟。通過規範的音訊切片、響度匹配與參數設置,你可以顯著提升模型的訓練效果。希望本文能幫助你順利完成專屬 AI 歌姬的打造!如果遇到問題,請參考官方文檔或社群資源進行排障。


























分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.