项目介绍:AudioLDM 2
AudioLDM 2 是一种新的潜在文本到音频的扩散模型,能够生成任何文本输入所对应的真实音频。这款工具从 v0.21.0 起已经在 🧨 Diffusers 库中可用。
模型详情
AudioLDM 2 的设计和实现来自于 Haohe Liu 等人在他们的论文 AudioLDM 2: 学习整体音频生成的自监督预训练 中提出。这个模型通过接收文本提示来预测相应的音频输出。它可以生成与文本相关的声效、人体语音以及音乐。
检查点详情
AudioLDM 2 提供了一个原始的基本版本(也称为 audioldm2-full)。共有三个官方的 AudioLDM 2 检查点,其中两个应用于一般的文本到音频的生成任务,第三个则专注于文本到音乐的生成。这些检查点在文本编码器和 VAE 上的模型大小相同,但它们在 UNet 的大小和深度上有不同。以下是这三个官方检查点的详细信息:
检查点 | 任务 | UNet 模型大小 | 总模型大小 | 训练数据 / 小时 |
---|---|---|---|---|
audioldm2 | 文本到音频 | 350M | 1.1B | 1150k |
audioldm2-large | 文本到音频 | 750M | 1.5B | 1150k |
audioldm2-music | 文本到音乐 | 350M | 1.1B | 665k |
模型来源
使用方法
首先,需要安装所需的 Python 包:
pip install --upgrade diffusers transformers accelerate
文本到音频生成
对于文本到音频的生成,可以使用 AudioLDM2Pipeline 来加载预训练权重并生成文本条件音频输出:
from diffusers import AudioLDM2Pipeline
import torch
repo_id = "cvssp/audioldm2"
pipe = AudioLDM2Pipeline.from_pretrained(repo_id, torch_dtype=torch.float16)
pipe = pipe.to("cuda")
prompt = "The sound of a hammer hitting a wooden surface"
audio = pipe(prompt, num_inference_steps=200, audio_length_in_s=10.0).audios[0]
将生成的音频输出保存为 .wav
文件:
import scipy
scipy.io.wavfile.write("techno.wav", rate=16000, data=audio)
或在 Jupyter Notebook 和 Google Colab 中显示:
from IPython.display import Audio
Audio(audio, rate=16000)
小贴士
提示:
- 描述性提示输入效果最佳:可以使用形容词描述声音(例如“高质量”或“清晰”),并使提示具体化(例如“森林中的溪流”而不是“溪流”)。
- 尽量使用普通词汇,如“猫”或“狗”,而不是模型可能不熟悉的特定名称或抽象对象。
推理:
- 可以通过
num_inference_steps
参数控制预测音频样本的质量:步数越高,音频质量越好,但推理速度越慢。 - 可以通过改变
audio_length_in_s
参数控制预测音频样本的长度。
生成波形评估:
- 生成波形的质量可能会因种子而异。尝试使用不同的种子以找到满意的生成。
- 可以一次生成多个波形:将
num_waveforms_per_prompt
设置为大于1的值。生成的波形和提示文本之间会自动进行评分,然后音频将按照从好到差的顺序进行排名。
下面的示例展示了如何使用上述提示构建一个好的音频生成:
import scipy
import torch
from diffusers import AudioLDM2Pipeline
# 加载管道
repo_id = "cvssp/audioldm2"
pipe = AudioLDM2Pipeline.from_pretrained(repo_id, torch_dtype=torch.float16)
pipe = pipe.to("cuda")
# 定义提示
prompt = "The sound of a hammer hitting a wooden surface"
negative_prompt = "Low quality."
# 设置种子
generator = torch.Generator("cuda").manual_seed(0)
# 运行生成
audio = pipe(
prompt,
negative_prompt=negative_prompt,
num_inference_steps=200,
audio_length_in_s=10.0,
num_waveforms_per_prompt=3,
).audios
# 将最佳音频示例(索引0)保存为 .wav 文件
scipy.io.wavfile.write("techno.wav", rate=16000, data=audio[0])
引用
如果使用了本研究或相关模型,请引用以下论文:
BibTeX:
@article{liu2023audioldm2,
title={"AudioLDM 2: Learning Holistic Audio Generation with Self-supervised Pretraining"},
author={Haohe Liu and Qiao Tian and Yi Yuan and Xubo Liu and Xinhao Mei and Qiuqiang Kong and Yuping Wang and Wenwu Wang and Yuxuan Wang and Mark D. Plumbley},
journal={arXiv preprint arXiv:2308.05734},
year={2023}
}