Tango:基于LLM引导的扩散模型文本到音频生成和基于DPO的对齐
Tango 2 论文 | Tango 2 模型 | Tango 2 演示 | Tango 2 Replicate 演示 | Audio-Alpaca | Tango 2 网站
Tango 论文 | Tango 模型 | Tango 演示 | Tango 网站
🎵 🔥 🎉 🎉 作为我们与NVIDIA合作的一部分,我们正在发布两个新的检查点。方法和结果在这里报告。特别是文本到音乐的性能比其前身有了显著提升。可以在这里访问Tango的新版本。TangoMusic可以在这里访问。非常感谢我们的NVIDIA合作伙伴——所有功劳归功于他们。
🎵 🔥 🎉 🎉 我们正在发布基于Tango构建的Tango 2用于文本到音频生成。Tango 2使用Tango-full-ft检查点初始化,并在audio-alpaca(一个成对的文本到音频偏好数据集)上使用DPO进行对齐训练。下载模型,访问演示。训练器可在tango2目录中获得🎶
在Google Colab上快速开始
Tango模型系列
模型名称 | 模型路径 |
---|---|
Tango | https://huggingface.co/declare-lab/tango |
Tango-Full-FT-Audiocaps | https://huggingface.co/declare-lab/tango-full-ft-audiocaps |
Tango-Full-FT-Audio-Music-Caps | https://huggingface.co/declare-lab/tango-full-ft-audio-music-caps |
Mustango | https://huggingface.co/declare-lab/mustango |
Tango-Full | https://huggingface.co/declare-lab/tango-full |
Tango-2 | https://huggingface.co/declare-lab/tango2 |
Tango-2-full | https://huggingface.co/declare-lab/tango2-full |
Tango-AF-AC-FT-AC | https://huggingface.co/declare-lab/tango-af-ac-ft-ac |
TangoMusic-AF-FT-MC | https://huggingface.co/declare-lab/tango-music-af-ft-mc |
描述
TANGO是一个用于文本到音频(TTA)生成的潜在扩散模型(LDM)。TANGO可以根据文本提示生成真实的音频,包括人声、动物声、自然和人工声音以及音效。我们使用冻结的指令微调LLM Flan-T5作为文本编码器,并训练一个基于UNet的扩散模型进行音频生成。尽管在63倍小的数据集上训练LDM,我们在客观和主观指标上的表现与当前最先进的TTA模型相当。我们为研究社区发布了我们的模型、训练和推理代码以及预训练检查点。
🎵 🔥 我们正在发布基于Tango构建的Tango 2用于文本到音频生成。Tango 2使用Tango-full-ft检查点初始化,并在audio-alpaca(一个成对的文本到音频偏好数据集)上使用DPO进行对齐训练。🎶
🎵 🔥 我们还提供了Audio-alpaca。Audio-alpaca是一个包含约15k个(prompt,audio_w,audio_l)三元组的成对偏好数据集,其中给定一个文本提示,audio_w是首选生成的音频,audio_l是不理想的音频。下载Audio-alpaca。Tango 2在Audio-alpaca上训练。
快速入门指南
下载TANGO模型并从文本提示生成音频:
import IPython
import soundfile as sf
from tango import Tango
tango = Tango("declare-lab/tango2")
prompt = "一群观众欢呼鼓掌"
audio = tango.generate(prompt)
sf.write(f"{prompt}.wav", audio, samplerate=16000)
IPython.display.Audio(data=audio, rate=16000)
模型将自动下载并保存在缓存中。后续运行将直接从缓存加载模型。
generate
函数默认使用100步从潜在扩散模型中采样。我们建议使用200步生成更高质量的音频。这会增加运行时间。
prompt = "雷声滚滚伴随闪电"
audio = tango.generate(prompt, steps=200)
IPython.display.Audio(data=audio, rate=16000)
使用generate_for_batch
函数为一批文本提示生成多个音频样本:
prompts = [
"汽车引擎轰鸣",
"一只狗吠叫并发出沙沙声和一些咔嗒声",
"水流动和滴落"
]
audios = tango.generate_for_batch(prompts, samples=2)
这将为三个文本提示中的每一个生成两个样本。
更多生成的样本展示在这里。
先决条件
我们的代码基于pytorch版本1.13.1+cu117构建。我们在requirements文件中提到了torch==1.13.1
,但根据您的GPU设备类型,您可能需要安装特定cuda版本的torch。
安装requirements.txt
。
git clone https://github.com/declare-lab/tango/
cd tango
pip install -r requirements.txt
您可能还需要在Linux系统上安装libsndfile1
以确保soundfile正常工作:
(sudo) apt-get install libsndfile1
数据集
按照AudioCaps仓库中的说明下载数据。我们的data
目录中提供了音频位置和相应的标题。*.json
文件用于训练和评估。下载数据后,您应该能够使用文件ID将其映射到我们data/*.json
文件中提供的文件位置。
请注意,由于版权问题,我们无法分发数据。
🎵 🔥 我们还提供了Audio-alpaca。Audio-alpaca是一个成对偏好数据集,包含约15k个(prompt,audio_w,audio_l)三元组,其中给定文本提示,audio_w是首选生成的音频,audio_l是不理想的音频。下载Audio-alpaca。Tango 2是在Audio-alpaca上训练的。
如何训练?
我们使用Hugging Face的accelerate
包进行多GPU训练。从终端运行accelerate config
,通过回答问题来设置您的运行配置。
现在您可以使用以下命令在AudioCaps数据集上训练TANGO:
accelerate launch train.py \
--text_encoder_name="google/flan-t5-large" \
--scheduler_name="stabilityai/stable-diffusion-2-1" \
--unet_model_config="configs/diffusion_model_config.json" \
--freeze_text_encoder --augment --snr_gamma 5 \
参数--augment
使用论文中报告的增强数据进行训练。我们建议至少训练40个epochs,这是train.py
中的默认设置。
要从我们发布的检查点开始训练,请使用--hf_model
参数。
accelerate launch train.py \
--hf_model "declare-lab/tango" \
--unet_model_config="configs/diffusion_model_config.json" \
--freeze_text_encoder --augment --snr_gamma 5 \
查看train.py
和train.sh
以获取完整的参数列表及其使用方法。
训练脚本应该会自动从这里下载AudioLDM权重。但是,如果下载速度慢或遇到其他问题,您可以:i)从这里下载audioldm-s-full
文件,ii)将其重命名为audioldm-s-full.ckpt
,iii)将其放在/home/user/.cache/audioldm/
目录中。
要从TANGO检查点开始在Audio-alpaca数据集上训练TANGO 2,请使用: 训练脚本将下载audio_alpaca wav文件并将其保存在{PATH_TO_DOWNLOAD_WAV_FILE}/audio_alpaca中。默认位置将是~/.cache/huggingface/datasets。
accelerate launch tango2/tango2-train.py --hf_model "declare-lab/tango-full-ft-audiocaps" \
--unet_model_config="configs/diffusion_model_config.json" \
--freeze_text_encoder \
--learning_rate=9.6e-7 \
--num_train_epochs=5 \
--num_warmup_steps=200 \
--per_device_train_batch_size=4 \
--per_device_eval_batch_size=4 \
--gradient_accumulation_steps=4 \
--beta_dpo=2000 \
--sft_first_epochs=1 \
--dataset_dir={PATH_TO_DOWNLOAD_WAV_FILE}
如何进行推理?
从您训练的检查点
训练的检查点将保存在saved/*/
目录中。
要从您训练的检查点在AudioCaps测试集上执行音频生成和客观评估:
CUDA_VISIBLE_DEVICES=0 python inference.py \
--original_args="saved/*/summary.jsonl" \
--model="saved/*/best/pytorch_model_2.bin" \
查看inference.py
和inference.sh
以获取完整的参数列表及其使用方法。
要对TANGO 2在AudioCaps测试集上执行音频生成和客观评估:
CUDA_VISIBLE_DEVICES=0 python tango2/inference.py \
--original_args="saved/*/summary.jsonl" \
--model="saved/*/best/pytorch_model_2.bin" \
请注意,TANGO 2的inference.py脚本与TANGO不同。
从我们在Hugging Face Hub上发布的检查点
要从我们的huggingface检查点在AudioCaps测试集上执行音频生成和客观评估:
python inference_hf.py --checkpoint="declare-lab/tango"
注意
我们在inference.py
中使用audioldm_eval
的功能进行客观评估。它要求金标准参考音频文件和生成的音频文件具有相同的名称。您需要创建目录data/audiocaps_test_references/subset
并将参考音频文件放在那里。文件名应如下所示:output_0.wav
、output_1.wav
等。索引应与data/test_audiocaps_subset.json
中相应的行索引对应。
我们使用术语_subset_,因为AudioCaps中最初发布的一些数据实例已从YouTube中删除,不再可用。因此,我们在截至2023年4月8日可用的所有实例上评估了我们的模型。
我们使用wandb记录训练和推理结果。
实验结果
Tango
模型 | 数据集 | 文本 | 参数数量 | FD ↓ | KL ↓ | FAD ↓ | OVL ↑ | REL ↑ |
---|---|---|---|---|---|---|---|---|
原始音频 | − | − | − | − | − | − | 91.61 | 86.78 |
DiffSound | AS+AC | ✓ | 400M | 47.68 | 2.52 | 7.75 | − | − |
AudioGen | AS+AC+8 others | ✗ | 285M | − | 2.09 | 3.13 | − | − |
AudioLDM-S | AC | ✗ | 181M | 29.48 | 1.97 | 2.43 | − | − |
AudioLDM-L | AC | ✗ | 739M | 27.12 | 1.86 | 2.08 | − | − |
AudioLDM-M-Full-FT‡ | AS+AC+2 others | ✗ | 416M | 26.12 | 1.26 | 2.57 | 79.85 | 76.84 |
AudioLDM-L-Full‡ | AS+AC+2 others | ✗ | 739M | 32.46 | 1.76 | 4.18 | 78.63 | 62.69 |
AudioLDM-L-Full-FT | AS+AC+2 others | ✗ | 739M | 23.31 | 1.59 | 1.96 | − | − |
TANGO | AC | ✓ | 866M | 24.52 | 1.37 | 1.59 | 85.94 | 80.36 |
Tango 2
模型 | 参数数量 | FAD ↓ | KL ↓ | IS ↑ | CLAP ↑ | OVL ↑ | REL ↑ |
---|---|---|---|---|---|---|---|
AudioLDM-M-Full-FT | 4.16亿 | 2.57 | 1.26 | 8.34 | 0.43 | - | - |
AudioLDM-L-Full | 7.39亿 | 4.18 | 1.76 | 7.76 | 0.43 | - | - |
AudioLDM 2-Full | 3.46亿 | 2.18 | 1.62 | 6.92 | 0.43 | - | - |
AudioLDM 2-Full-Large | 7.12亿 | 2.11 | 1.54 | 8.29 | 0.44 | 3.56 | 3.19 |
Tango-full-FT | 8.66亿 | 2.51 | 1.15 | 7.87 | 0.54 | 3.81 | 3.77 |
Tango 2 | 8.66亿 | 2.69 | 1.12 | 9.09 | 0.57 | 3.99 | 4.07 |
引用
如果您觉得我们的工作有用,请考虑引用以下文章:
@misc{majumder2024tango,
title={Tango 2: 通过直接偏好优化对齐基于扩散的文本到音频生成},
author={Navonil Majumder and Chia-Yu Hung and Deepanway Ghosal and Wei-Ning Hsu and Rada Mihalcea and Soujanya Poria},
year={2024},
eprint={2404.09956},
archivePrefix={arXiv},
primaryClass={cs.SD}
}
@article{ghosal2023tango,
title={使用指令调优的LLM和潜在扩散模型进行文本到音频生成},
author={Ghosal, Deepanway and Majumder, Navonil and Mehrish, Ambuj and Poria, Soujanya},
journal={arXiv预印本 arXiv:2304.13731},
year={2023}
}
致谢
我们借用了audioldm
和audioldm_eval
中的代码,这些代码来自AudioLDM代码库。我们感谢AudioLDM团队开源他们的代码。