GPT-SoVITS語音合成模型實踐

哥不是小萝莉發表於2024-09-29

1.概述

GPT-SoVITS是一款開源的語音合成模型,結合了深度學習和聲學技術,能夠實現高質量的語音生成。其獨特之處在於支援使用參考音訊進行零樣本語音合成,即使沒有直接的訓練資料,模型仍能生成相似風格的語音。使用者可以透過微調模型,進一步提升其效能,以適應特定的應用需求。

2.內容

2.1 GPT-SoVITS簡介

這個開源的文字到語音(TTS)專案可以在Linux、MacOS和Windows系統上執行,具有極高的靈活性和相容性。使用者只需提供一段長達1分鐘的音訊檔案,即可輕鬆克隆特定的聲音。該專案支援將漢語、英語和日語的文字轉換為克隆的語音,為多語言環境中的應用提供了便利。

  • 專案地址:https://github.com/RVC-Boss/GPT-SoVITS
  • 官方教程:GPT-SoVITS手冊

2.2 語音合成

VITS是一種用於端到端文字到語音(TTS)的模型,結合了對抗學習和條件變分自動編碼器,旨在生成高質量的語音效果。近年來,雖然已經提出了多種單階段訓練和並行取樣的TTS模型,但它們的樣本質量往往無法與傳統的兩階段系統相媲美。為了解決這個問題,VITS採用了一種並行的端到端方法,能夠生成更自然、更真實的聲音。

該模型透過標準化流和對抗訓練過程增強的變分推理,顯著提升了生成建模的表達能力。此外,VITS引入了隨機持續時間預測器,能夠從輸入文字中合成出節奏各異的語音。這種設計允許模型捕捉潛在變數的不確定性,形成了一種自然的一對多關係,使得同一段文字可以以不同的音高和節奏進行多樣化的表達。這種靈活性和高質量的輸出使VITS在語音合成領域中具備了廣泛的應用潛力。

  • 論文地址:https://arxiv.org/pdf/2106.06103
  • Github地址:https://github.com/jaywalnut310/vits

2.3 Whisper語音識別

Whisper是OpenAI開發的先進自動語音識別(ASR)系統,經過訓練的語料庫包含68萬小時的多語言(涵蓋98種語言)和多工監督資料。OpenAI認為,這種龐大且多樣化的資料集顯著提升了系統對各種口音、背景噪音和專業術語的識別能力,使其在實際應用中表現出色。

除了語音識別功能,Whisper還支援多種語言的轉錄和翻譯,能夠將非英語語言直接翻譯成英語。這種多功能性使得Whisper不僅適用於語音轉文字的任務,還能在國際交流、內容建立和教育等領域發揮重要作用。憑藉其出色的準確性和靈活性,Whisper為使用者提供了一個強大的工具,有助於打破語言障礙,促進溝通與理解。

  • 論文地址:https://github.com/openai/whisper
  • GitHub地址:https://arxiv.org/pdf/2212.04356

Whisper的基本原理基於一種Transformer序列到序列模型,旨在處理多種語音任務,包括多語言語音識別、語音翻譯、口語語言識別以及語音活動檢測。透過將這些任務統一表示為一個需要解碼器預測的符號序列,Whisper能夠有效地替代傳統語音處理管道中的多個階段,簡化了處理流程。

該模型採用多工訓練的格式,使用一系列特殊符號作為任務指示符或分類目標。這種設計不僅提升了模型的靈活性,還使其在處理不同型別的語音輸入時表現出色。例如,當面對多種語言或不同口音時,Whisper能夠利用其訓練資料中的豐富資訊,快速適應並提高識別準確性。透過這種創新的方法,Whisper在語音處理領域展示了強大的能力,能夠滿足多樣化的使用者需求。


Whisper系統提供了五種不同的模型尺寸,以平衡速度和準確性。每種模型的設計旨在滿足不同應用場景的需求,使用者可以根據自己的具體要求選擇合適的模型。以下是可用模型的名稱、對應的大致記憶體需求和相對速度:

  • 小型模型:記憶體需求低,速度快,適合實時語音識別任務,但在複雜音訊環境中的準確性可能稍遜。
  • 中型模型:提供更好的準確性,同時保持相對較快的速度,適合大多數日常應用。
  • 大型模型:在準確性上有顯著提升,適合對精度要求較高的場景,如醫療記錄轉錄和法律檔案審閱,但相對速度略慢。
  • 超大型模型:具有出色的語音識別效能,能夠處理複雜口音和技術術語,適合專業領域的使用,記憶體需求較高,速度相對較慢。
  • 特大模型:提供頂尖的準確性,特別適用於高噪聲環境和多方對話場景,記憶體需求極大,速度較慢,適合不需要實時處理的情況。

透過這些不同尺寸的模型,使用者可以根據自己的硬體資源和應用需求,靈活選擇最合適的選項,以實現最佳的語音識別效果。

3.GPT-SoVITS安裝與部署

3.1 配置要求

1.訓練

  • Windows
    • 需支援CUDA的nVIDIA顯示卡,視訊記憶體至少6GB。
    • 不支援的顯示卡包括:10系之前的所有型號、GTX 1060及以下、GTX 1660及以下、GTX 2060及以下,以及3050 4GB顯示卡。
    • 作業系統需為Windows 10或11。
    • 如果沒有顯示卡,系統會自動切換至CPU訓練,但速度非常慢。
  • macOS
    • 需執行macOS 14或更高版本。
    • 必須安裝Xcode命令列工具,可透過執行xcode-select --install完成安裝。
  • Linux
    • 熟練使用Linux環境。
    • 需配備視訊記憶體至少為6GB的顯示卡。
    • 同樣,如果沒有顯示卡,系統將自動切換至CPU訓練,速度較慢。

2.推理

  • Windows
    • 需支援CUDA的nVIDIA顯示卡,視訊記憶體至少4GB(未經過測試,3GB可能無法完成語音合成,因此推測4GB應該足夠)。
    • 作業系統需為Windows 10或11。
    • 如果沒有顯示卡,系統會自動識別並使用CPU進行推理。
  • macOS
    • 需執行macOS 14或更高版本。
    • 必須安裝Xcode命令列工具,方法同上。
  • Linux
    • 熟練使用Linux環境。
    • 需配備視訊記憶體至少為4GB的顯示卡。
    • 如果沒有顯示卡,系統將自動識別並使用CPU進行推理。

透過這些配置要求,使用者可以確保系統能夠高效地進行訓練和推理,以實現最佳的效能表現。

3.2 Mac環境要求

1.軟體要求

  • 確保已透過執行 xcode-select --install 安裝 Xcode 命令列工具。
  • 安裝 Homebrew 以便於安裝必要的軟體(如 git、ffmpeg)。

2.安裝 conda(如果已安裝可以跳過)

測試透過的 Python 和 PyTorch 版本:

  • Python 3.9、Pytorch 2.2.1

可以透過如下命令檢測是否已安裝。

conda info

3.安裝FFmpeg(如果已安裝可以跳過)

可以透過如下命令檢測是否已安裝以及版本要大於等於6.1

# 安裝
brew install ffmpeg
# 檢查環境
ffmpeg -version

3.3 專案準備

1.下載專案程式碼

如果沒有安裝Git,開啟終端執行

brew install git
brew install git-lfs
brew install rust

如果已安裝Git,直接在終端中定位到要存放專案的目錄(此處以桌面為例,請按實際情況操作,本文件所有路徑皆基於此前提),然後克隆倉庫到本地,~/代表當前使用者目錄下

#示例
cd ~/desktop # ~代表當前使用者
git clone --depth=1 https://github.com/RVC-Boss/GPT-SoVITS

2.下載預訓練模型(直接參考專案README.md就好)

從 GPT-SoVITS Models 下載預訓練模型,並將它們解壓替換 ~/desktop/GPT-SoVITS/GPT_SoVITS/pretrained_models 。對於 UVR5(人聲/伴奏分離和混響移除)(推薦使用UVR5客戶端,可以跳過這步) 的是UVR5教程從 UVR5 Weights 下載模型,並將它們放置在 ~/GPT-SoVITS/tools/uvr5/uvr5_weights 中。(若使用UVR5客戶端,可以跳過這步)對於中文自動語音識別,從 Damo ASR Model 下載模型,將它們解壓替換 ~/desktop/GPT-SoVITS/tools/asr/models 。

#一步到位命令
cd ~/desktop/GPT-SoVITS/tools/asr/models
git lfs install
git clone https://www.modelscope.cn/iic/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch.git
git clone https://www.modelscope.cn/iic/punc_ct-transformer_zh-cn-common-vocab272727-pytorch.git
git clone https://www.modelscope.cn/iic/speech_fsmn_vad_zh-cn-16k-common-pytorch.git

3.4 環境準備

1.建立環境

先關閉終端,再開啟終端輸入

conda create -n GPTSoVits python=3.9
conda activate GPTSoVits

遇到y/n的就一直點y回車
如果遇到:connot find conda,那是因為conda沒裝好,輸入

conda -v

檢視有沒有裝好。可以試試重新開啟終端。

2.安裝依賴

終端輸入

cd ~/desktop/GPT-SoVITS
conda activate GPTSoVits
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt

3.執行

conda activate GPTSoVits
cd ~/desktop/GPT-SoVITS
python webui.py zh_CN

4.訓練模型

GPT-SoVITS WebUI提供了全面的功能,包括資料集製作、模型微調訓練和語音克隆推理。如果您只是想體驗效果,可以直接使用官方分享的語音模型。這種設計使使用者能夠迅速上手,無需複雜的設定或深入的技術知識。

4.1 資料集處理

1.處理原音訊

如果原音訊足夠乾淨,比如從遊戲中提取的幹聲,可以跳過這一步。接著,點選開啟Open UVR5-WebUI,稍等片刻後,開啟瀏覽器訪問 http://localhost:9873。

2.切割音訊

在切割音訊之前,建議將所有音訊檔案匯入音訊軟體(如剪映)進行音量調整,將最大音量設定為-9dB到-6dB,過高的音量應予以刪除。

開啟WebUI後,首先輸入原音訊的資料夾路徑。接下來,可以調整以下建議引數:

  • min_length:根據視訊記憶體大小調整,視訊記憶體越小,值調得越小。
  • min_interval:根據音訊的平均間隔進行調整。如果音訊過於密集,可以適當降低該值。
  • max_sil_kept:此引數會影響句子的連貫性,不同音訊需不同調整。如果不確定,建議保持預設值。

點選“開啟語音切割”,切割過程將立即完成,預設輸出路徑為 output/slicer_opt。這樣,您就能快速獲得處理後的音訊片段。

開啟切分資料夾,將時長超過“視訊記憶體數”秒的音訊手動切分至該時長以下。例如,如果顯示卡視訊記憶體為10GB,建議將超過10秒的音訊切分至10秒以下,或者直接刪除(稍微超出一點的可以不處理)。過長的音訊可能會導致視訊記憶體爆滿。

如果經過語音切割後仍然是一個檔案,說明音訊過於密集,可以嘗試調低min_interval引數以獲得更好的切割效果。這樣可以確保音訊檔案在處理時不會超出視訊記憶體限制。

3.音訊降噪

如果原音訊足夠乾淨,比如從遊戲中提取的幹聲,可以跳過這一步。輸入剛才切割完成音訊的資料夾路徑,預設為 output/slicer_opt,然後點選“開啟語音降噪”。處理完成後,降噪後的音訊將預設輸出到 output/denoise_opt 目錄。這樣,您就可以輕鬆獲得清晰的音訊檔案。

4.打標並校對

只需輸入剛才的切分資料夾路徑,如果音訊經過降噪處理,預設輸出路徑為 output/denoise_opt;如果沒有降噪,則為 output/slicer_opt。

接下來,選擇達摩ASR或Fast Whisper,然後點選“開啟離線批次ASR”。預設輸出路徑為 output/asr_opt。請注意,這一步可能需要等待一段時間,因為系統需要下載相應的模型。

  • 達摩ASR:專用於中文識別,效果最佳。
  • Fast Whisper:支援99種語言,尤其在英語和日語的識別方面表現突出。建議選擇large V3模型,語種選擇自動(auto)即可。

需要注意的是,由於識別出的文字可能不夠準確,建議進行人工校對標註(這一步較耗時間,如果不追求極致效果可以選擇跳過)。這裡我只是為了演示流程,所以此步驟可以略過。

4.2 微調訓練

1. 資料集格式化

在1-GPT-SOVITS-TTS選項卡中,填寫以下資訊:

  • 實驗/模型名:輸入實驗名稱,確保不要使用中文。
  • 文字標註檔案:選擇您的標註檔案。
  • 訓練集音訊檔案目錄:指定音訊資料集的資料夾路徑。

確保所有路徑和檔名正確無誤,以便順利進行後續操作。

填寫完成後,您可以選擇逐個點選下面的三個按鈕,等待每個操作執行結束後再點選下一個。如果遇到報錯,請檢視後臺日誌,有些報錯只需重試即可解決。

另外,您也可以直接使用“開啟一鍵三連”按鈕,一鍵完成這三步操作,節省時間和精力。

2.訓練微調模型

選擇 1B-微調訓練 子選項卡,配置 batch_size 等引數。然後依次點選 開啟 SoVITS 訓練開啟 GPT 訓練。請注意,這兩個訓練任務不能同時進行(除非您有兩張顯示卡)。如果訓練過程中中斷,您可以直接再點選開始訓練,系統會從最近的儲存點繼續。

對於 SoVITS 訓練,建議將 batch_size 設定為視訊記憶體的一半以下。過高的設定可能導致視訊記憶體爆滿,並不是越高就越快。您需要根據資料集的大小進行調整,而不是嚴格按照視訊記憶體的一半來設定。如果出現視訊記憶體不足的情況,請適當降低 batch_size。以下是針對切片長度為10秒時,不同視訊記憶體下 SoVITS 訓練的最大 batch_size 的實測值供您參考;如果切片更長或資料集更大,則需要適當減少。

接下來,設定訓練輪數。SoVITS 模型的輪數可以設定得高一些,因為訓練速度較快。而對於 GPT 模型,通常建議設定輪數為10,不要超過20,以確保訓練效率和模型效能的平衡。

4.3 推理

1.開啟推理服務

選擇 1C-推理 子選項卡,配置模型路徑(如果模型沒有顯示出來,可以點選右側的按鈕進行重新整理)。然後,點選 開啟 TTS 推理 WEBUI 按鈕以開啟推理頁面。在推理頁面中,您可以輸入文字並生成語音,體驗模型的效果。

稍等片刻後,開啟瀏覽器訪問 http://localhost:9872。

2.語音克隆推理

在推理頁面中,第一步選擇所需的模型。第二步上傳參考語音和文字(建議時長在5秒到10秒之間,參考音訊非常重要,它會影響模型學習語速和語氣,請認真選擇)。第三步輸入您希望用於語音克隆的文字,準備開始生成語音。

5.總結

GPT-SoVITS是一款開源語音合成框架,結合了生成對抗網路和變分推理技術,能夠實現高質量的文字到語音轉換。該框架支援多種功能,包括模型微調、語音克隆和多語言處理,使用者可以透過友好的Web介面輕鬆操作。GPT-SoVITS尤其適合於生成自然流暢的語音,廣泛應用於遊戲、影視配音和語音助手等領域。

6.結束語

這篇部落格就和大家分享到這裡,如果大家在研究學習的過程當中有什麼問題,可以加群進行討論或傳送郵件給我,我會盡我所能為您解答,與君共勉!

另外,博主出新書了《深入理解Hive》、同時已出版的《Kafka並不難學》和《Hadoop大資料探勘從入門到進階實戰》也可以和新書配套使用,喜歡的朋友或同學, 可以在公告欄那裡點選購買連結購買博主的書進行學習,在此感謝大家的支援。關注下面公眾號,根據提示,可免費獲取書籍的教學影片。

相關文章