AI語音:ChatTTS 真有點東西啊!

托尼不是塔克發表於2024-06-05
今天要介紹一個最近剛出的語音合成專案,效果非常驚豔
釋出三天已經有9K的Star了,聽過的都說好。
演示影片
這效果怎麼樣?逼真嗎?
這個專案的名字叫ChatTTS,一個充滿情感的語音合成專案!
簡介
ChatTTS是一款專為對話場景設計的語音生成模型,適用於AI助手對話、對話語音和影片介紹,支援中英文。
它最佳化了對話任務,實現自然流暢的多說話人語音合成,並能控制細粒度的韻律特徵,如笑聲、停頓和插入詞。
ChatTTS在韻律方面表現卓越,提供預訓練模型,支援進一步研究。
亮點
  • 對話式TTS: ChatTTS針對對話式任務進行了最佳化,實現了自然流暢的語音合成,同時支援多說話人。
  • 細粒度控制:該模型能夠預測和控制細粒度的韻律特徵,包括笑聲、停頓和插入詞等。
  • 更好的韻律:ChatTTS在韻律方面超越了大部分開源TTS模型。同時提供預訓練模型,支援進一步的研究。
這些亮點,在同型別開源專案中卻是非常突出。
用法
專案主頁提供了一些程式碼例項,便於快速體驗。執行下面程式碼前記得克隆專案,安裝req檔案裡面的依賴。
基本用法
#匯入庫:import ChatTTS和from IPython. display import Audio。 import ChatTTS from IPython.display import Audio #初始化ChatTTS:建立一個ChatTTS物件chat= ChatTTS. Chat()。 chat = ChatTTS.Chat() #載入模型:使用chat. load_models()載入預訓練模型。 chat.load_models() #設定文字:定義要轉換為語音的文字列表texts=["< PUT YOUR TEXT HERE>",]。 texts = ["<PUT YOUR TEXT HERE>",] #生成語音:使用chat. infer( texts, use_decoder= True)將文字轉換為語音波形資料。 wavs = chat.infer(texts, use_decoder=True) #播放語音:透過Audio( wavs[0], rate=24_000, autoplay= True)播放生成的語音。 Audio(wavs[0], rate=24_000, autoplay=True)
基本用法總共7行程式碼,全是使用預設引數,非常簡單。如果需要自定義一些引數,可以參考進階程式碼。
進階用法
################################### # Sample a speaker from Gaussian. import torch std, mean = torch.load('ChatTTS/asset/spk_stat.pt').chunk(2) rand_spk = torch.randn(768) * std + mean params_infer_code = { 'spk_emb': rand_spk, # add sampled speaker 'temperature': .3, # using custom temperature 'top_P': 0.7, # top P decode 'top_K': 20, # top K decode } ################################### # For sentence level manual control. # use oral_(0-9), laugh_(0-2), break_(0-7) # to generate special token in text to synthesize. params_refine_text = { 'prompt': '[oral_2][laugh_0][break_6]' } wav = chat.infer("<PUT YOUR TEXT HERE>", params_refine_text=params_refine_text, params_infer_code=params_infer_code) ################################### # For word level manual control. # use_decoder=False to infer faster with a bit worse quality text = 'What is [uv_break]your favorite english food?[laugh][lbreak]' wav = chat.infer(text, skip_refine_text=True, params_infer_code=params_infer_code, use_decoder=False)
進階程式碼主要載入了一個pt檔案,然後構建了params_refine_text和params_infer_code這兩個引數。 透過引數設定,可以更加精準的控制生成效果。
計劃路線
  • 開源4w小時基礎模型和spk_stats檔案
  • 開源VQ encoder和Lora訓練程式碼
  • 在非refine text情況下,流式生成音訊*
  • 開源多情感可控的4w小時版本
  • ChatTTS.cpp maybe? (歡迎社群PR或獨立的新repo)
從介紹中可以看到,已經開源了4萬小時的基礎模型和spk_stats檔案。
接下來還有開源編碼器和微調程式碼,包括流式生成,多情感可控版本,設定可能會有更高效的C程式碼版本。
可以期待一下啊。
常見問題
以下是官方總結的一些常見問題,可以參考一下。
連不上HuggingFace
請使用modelscope的版本。並設定cache的位置
我要存多少錢?Infer的速度是怎麼樣的?
對於30s的音訊,至少需要4G的視訊記憶體。對於4090D,1s生成約7個字所對應的音訊。RTF約0.65。
模型穩定性似乎不夠好,會出現其他說話人或音質很差的現象。
這是自迴歸模型通常都會出現的問題。說話人可能會在中間變化,可能會取樣到音質非常差的結果,這通常難以避免。可以多采樣幾次來找到合適的結果。 除了笑聲還能控制什麼嗎?還能控制其他情感嗎?
現在放出的模型版本中,只有[ laugh]和[ uv_break],[ lbreak]作為字級別的控制單元。在未來的版本中我們可能會開源其他情感控制的版本。
相關資源
整理了一些擴充套件內容。包括官方完整的演示影片,線上體驗地址,和Colab筆記本。
官方演示影片:
https://www.bilibili.com/video/BV1zn4y1o7iV
線上體驗地址:
https://huggingface.co/spaces/Dzkaka/ChatTTS
Colab筆記本:
https://github.com/dream80/TonyColab
最後強調一下,這個專案真不錯!值得研究一下!

相關文章