AudioLDM 2
AudioLDM 2 由 Haohe Liu 等人在 AudioLDM 2: Learning Holistic Audio Generation with Self-supervised Pretraining 中提出。AudioLDM 2 以文本提示为输入,并预测相应的音频。它可以生成文本条件的声音效果、人类语音和音乐。
受 Stable Diffusion 的启发,AudioLDM 2 是一种文本到音频的 潜在扩散模型 (LDM),它从文本嵌入中学习连续的音频表示。使用两个文本编码器模型来计算从提示输入的文本嵌入:CLAP 的文本分支和 Flan-T5 的编码器。这些文本嵌入随后通过 AudioLDM2ProjectionModel 投影到一个共享的嵌入空间。一个 GPT2 语言模型 (LM) 用于自回归地预测八个新的嵌入向量,条件是投影的 CLAP 和 Flan-T5 嵌入。生成的嵌入向量和 Flan-T5 文本嵌入在 LDM 中用作交叉注意力条件。AudioLDM 2 的 UNet 独特之处在于它接受 两个 交叉注意力嵌入,而大多数其他 LDM 只接受一个交叉注意力条件。
论文的摘要如下:
尽管音频生成在不同类型的音频(如语音、音乐和声音效果)之间有共同点,但为每种类型设计模型需要仔细考虑特定的目标和偏差,这些目标和偏差可能与其他类型的目标和偏差显著不同。为了让我们更接近音频生成的统一视角,本文提出了一种框架,该框架使用相同的学习方法进行语音、音乐和声音效果生成。我们的框架引入了一种通用的音频表示,称为“音频语言”(LOA)。任何音频都可以基于 AudioMAE(一种自监督预训练表示学习模型)转换为 LOA。在生成过程中,我们使用 GPT-2 模型将任何模态转换为 LOA,并通过以 LOA 为条件的潜在扩散模型进行自监督音频生成学习。所提出的框架自然带来了上下文学习能力和可重复使用的自监督预训练 AudioMAE 和潜在扩散模型的优势。在文本到音频、文本到音乐和文本到语音的主要基准测试中,实验表明与之前的方法相比,达到了最先进的或具有竞争力的性能。我们的代码、预训练模型和演示可在 此 https URL 获得。
此管道由 sanchit-gandhi 和 Nguyễn Công Tú Anh 贡献。原始代码库可在 haoheliu/audioldm2 找到。
提示
选择检查点
AudioLDM2 有三种变体。其中两个检查点适用于文本到音频生成的通用任务。第三个检查点专门针对文本到音乐生成进行训练。
所有检查点在文本编码器和 VAE 的模型大小上相同。它们在 UNet 的大小和深度上有所不同。 请参见下表了解三个检查点的详细信息:
Checkpoint | Task | UNet Model Size | Total Model Size | Training Data / h |
---|---|---|---|---|
audioldm2 | Text-to-audio | 350M | 1.1B | 1150k |
audioldm2-large | Text-to-audio | 750M | 1.5B | 1150k |
audioldm2-music | Text-to-music | 350M | 1.1B | 665k |
audioldm2-gigaspeech | Text-to-speech | 350M | 1.1B | 10k |
audioldm2-ljspeech | Text-to-speech | 350M | 1.1B |
构建提示
- 描述性的提示输入效果最佳:使用形容词来描述声音(例如“高质量”或“清晰”),并使提示具有特定上下文(例如“森林中的溪流”而不是“溪流”)。
- 最好使用一般术语,如“猫”或“狗”,而不是模型可能不熟悉的特定名称或抽象对象。
- 使用负面提示可以显著提高生成波形的质量,通过引导生成远离与低质量音频相对应的术语。尝试使用“低质量”作为负面提示。
控制推理
- 预测音频样本的质量可以通过
num_inference_steps
参数控制;更高的步数会以较慢的推理速度为代价提供更高质量的音频。 - 预测音频样本的长度可以通过调整
audio_length_in_s
参数来控制。
评估生成的波形:
- 生成的波形的质量可能会因种子而显著变化。尝试使用不同的种子生成,直到找到满意的生成结果。
- 可以一次性生成多个波形:将
num_waveforms_per_prompt
设置为大于1的值。系统将对生成的波形和提示文本进行自动评分,并相应地从最佳到最差进行排序。
以下示例展示了如何使用上述技巧构建良好的音乐和语音生成:示例。
AudioLDM2Pipeline
[[autodoc]] AudioLDM2Pipeline - all - call
AudioLDM2ProjectionModel
[[autodoc]] AudioLDM2ProjectionModel - forward
AudioLDM2UNet2DConditionModel
[[autodoc]] AudioLDM2UNet2DConditionModel - forward
AudioPipelineOutput
[[autodoc]] pipelines.AudioPipelineOutput