🚀 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,以增强其泛化、组合和可控生成能力。