🚀 TANGO:使用指令引導擴散實現文本轉音頻
TANGO 是一種用於文本轉音頻生成的潛在擴散模型。它能夠根據文本提示生成逼真的音頻,涵蓋人類聲音、動物聲音、自然和人造聲音以及音效。我們使用經過凍結指令微調的大語言模型 Flan - T5 作為文本編碼器,並訓練了一個基於 UNet 的擴散模型用於音頻生成。在客觀和主觀指標上,我們的模型均優於當前最先進的音頻生成模型。我們向研究社區發佈了模型、訓練和推理代碼以及預訓練檢查點。
📣 我們正在發佈 [Tango - Full - FT - Audiocaps](https://huggingface.co/declare - lab/tango - full - ft - audiocaps),該模型首先在 [TangoPromptBank](https://huggingface.co/datasets/declare - lab/TangoPromptBank)(一個包含多樣化文本 - 音頻對的集合)上進行預訓練,隨後在 AudioCaps 上進行微調。該檢查點在 AudioCaps 上的文本轉音頻生成任務中取得了最先進的成果。
🚀 快速開始
下載 TANGO 模型並根據文本提示生成音頻:
import IPython
import soundfile as sf
from tango import Tango
tango = Tango("declare-lab/tango")
prompt = "An audience cheering and clapping"
audio = tango.generate(prompt)
sf.write(f"{prompt}.wav", audio, samplerate=16000)
IPython.display.Audio(data=audio, rate=16000)
[An audience cheering and clapping.webm](https://user-images.githubusercontent.com/13917097/233851915 - e702524d - cd35 - 43f7 - 93e0 - 86ea579231a7.webm)
模型將自動下載並保存到緩存中。後續運行將直接從緩存中加載模型。
generate
函數默認使用 100 步從潛在擴散模型中採樣。我們建議使用 200 步來生成更高質量的音頻,但這會增加運行時間。
prompt = "Rolling thunder with lightning strikes"
audio = tango.generate(prompt, steps=200)
IPython.display.Audio(data=audio, rate=16000)
[Rolling thunder with lightning strikes.webm](https://user-images.githubusercontent.com/13917097/233851929 - 90501e41 - 911d - 453f - a00b - b215743365b4.webm)
使用 generate_for_batch
函數為一批文本提示生成多個音頻樣本:
prompts = [
"A car engine revving",
"A dog barks and rustles with some clicking",
"Water flowing and trickling"
]
audios = tango.generate_for_batch(prompts, samples=2)
這將為三個文本提示中的每個提示生成兩個樣本。
✨ 主要特性
- 多樣化音頻生成:能夠生成包括人類聲音、動物聲音、自然和人造聲音以及音效等多種類型的逼真音頻。
- 先進的模型架構:使用凍結指令微調的大語言模型 Flan - T5 作為文本編碼器,並訓練基於 UNet 的擴散模型進行音頻生成。
- 優於當前 SOTA:在客觀和主觀指標上均優於當前最先進的音頻生成模型。
📦 安裝指南
請遵循倉庫中的說明進行安裝、使用和實驗。我們的代碼發佈在:[https://github.com/declare - lab/tango](https://github.com/declare - lab/tango)
💻 使用示例
基礎用法
import IPython
import soundfile as sf
from tango import Tango
tango = Tango("declare-lab/tango")
prompt = "An audience cheering and clapping"
audio = tango.generate(prompt)
sf.write(f"{prompt}.wav", audio, samplerate=16000)
IPython.display.Audio(data=audio, rate=16000)
高級用法
prompt = "Rolling thunder with lightning strikes"
audio = tango.generate(prompt, steps=200)
IPython.display.Audio(data=audio, rate=16000)
prompts = [
"A car engine revving",
"A dog barks and rustles with some clicking",
"Water flowing and trickling"
]
audios = tango.generate_for_batch(prompts, samples=2)
📚 詳細文檔
我們上傳了幾個 TANGO 生成的樣本:[https://tango - web.github.io/](https://tango - web.github.io/)
🔧 技術細節
TANGO 是一種潛在擴散模型,使用凍結指令微調的大語言模型 Flan - T5 作為文本編碼器,訓練基於 UNet 的擴散模型進行音頻生成。通過在 AudioCaps 等數據集上的訓練和微調,在文本轉音頻生成任務中取得了良好的效果。
📄 許可證
本項目採用 CC - BY - NC - SA 4.0 許可證。
🔧 侷限性
TANGO 在小型 AudioCaps 數據集上進行訓練,因此可能無法生成與訓練中未見過的概念相關的高質量音頻樣本(例如“唱歌”)。出於同樣的原因,TANGO 並不總是能夠根據文本控制提示精確控制其生成結果。例如,對於提示“在木桌上切西紅柿”和“在金屬桌上切土豆”,TANGO 生成的音頻非常相似,“在桌子上切蔬菜”也會產生類似的音頻樣本。因此,需要在更大的數據集上訓練文本轉音頻生成模型,以便模型學習文本概念的組成和不同的文本 - 音頻映射。
我們正在更大的數據集上訓練另一個版本的 TANGO,以增強其泛化、組合和可控生成能力。