Stable Audio
Stable Audio 由 Zach Evans 等人在 Stable Audio Open 中提出。它以文本提示作为输入,并预测相应的音频或音乐样本。
Stable Audio Open 从文本提示生成可变长度(最长 47 秒)的 44.1kHz 立体声音频。它包含三个组件:一个将波形压缩成可管理序列长度的自编码器,一个基于 T5 的文本嵌入用于文本条件,以及一个在自编码器潜在空间中运行的基于 Transformer 的扩散 (DiT) 模型。
Stable Audio 训练数据集包含约 48,000 个音频录音,其中约 47,000 个来自 Freesound,其余来自 Free Music Archive (FMA)。所有音频文件均在 CC0、CC BY 或 CC Sampling+ 许可证下发布。这些数据用于训练自动编码器和 DiT。
论文摘要如下:开放式生成模型对于社区至关重要,它允许微调并作为展示新模型时的基准。然而,大多数当前的文本转音频模型都是私有的,艺术家和研究人员无法在其基础上进行构建。在这里,我们描述了一个新的开放权重文本转音频模型的架构和训练过程,该模型使用知识共享数据进行训练。我们的评估表明,该模型的性能在各种指标上均与最先进的模型相媲美。值得注意的是,报告的 FDopenl3 结果(衡量生成的真实性)展示了其在 44.1kHz 下进行高质量立体声合成音频的潜力。
此管道由 Yoach Lacombe 贡献。原始代码库可在 Stability-AI/stable-audio-tool 找到。
提示
构建提示时,请记住
- 描述性的提示输入效果最佳;使用形容词描述声音(例如,“高质量”或“清晰”),并在可能的情况下使提示上下文具体(例如,“带有快速节奏和合成器的旋律科技音乐”比“科技音乐”效果更好)。
- 使用负向提示可以显著提高生成音频的质量。尝试使用“低质量、一般质量”作为负向提示。
推理期间
- 生成的音频样本的质量可以通过
num_inference_steps
参数控制;更高的步骤可以获得更高质量的音频,但推理速度会变慢。 - 可以一次生成多个波形:将
num_waveforms_per_prompt
设置为大于 1 的值以启用。系统将在生成的波形和提示文本之间进行自动评分,并根据评分将音频从最佳到最差进行排序。
StableAudioPipeline
类 diffusers.StableAudioPipeline
< 源代码 >( vae: AutoencoderOobleck text_encoder: T5EncoderModel projection_model: StableAudioProjectionModel tokenizer: Union transformer: StableAudioDiTModel scheduler: EDMDPMSolverMultistepScheduler )
参数
- vae (AutoencoderOobleck) — 用于将图像编码和解码到潜在表示以及从潜在表示解码回图像的变分自动编码器 (VAE) 模型。
- text_encoder (T5EncoderModel) — 冻结的文本编码器。StableAudio 使用 T5 的编码器,特别是 google-t5/t5-base 变体。
- projection_model (
StableAudioProjectionModel
) — 用于线性投影文本编码器模型和开始和结束秒数的隐藏状态的训练模型。编码器的投影隐藏状态和条件秒数连接起来,以提供给转换器模型的输入。 - tokenizer (T5Tokenizer) — 用于对冻结文本编码器的文本进行标记化的标记器。
- transformer (StableAudioDiTModel) — 用于对编码的音频潜在变量进行去噪的
StableAudioDiTModel
。 - scheduler (EDMDPMSolverMultistepScheduler) — 用于与
transformer
结合对编码的音频潜在变量进行去噪的调度器。
使用 StableAudio 生成文本到音频的管道。
此模型继承自 DiffusionPipeline。请查看超类文档以了解为所有管道实现的通用方法(下载、保存、在特定设备上运行等)。
__call__
< 源代码 >( prompt: Union = None audio_end_in_s: Optional = None audio_start_in_s: Optional = 0.0 num_inference_steps: int = 100 guidance_scale: float = 7.0 negative_prompt: Union = None num_waveforms_per_prompt: Optional = 1 eta: float = 0.0 generator: Union = None latents: Optional = None initial_audio_waveforms: Optional = None initial_audio_sampling_rate: Optional = None prompt_embeds: Optional = None negative_prompt_embeds: Optional = None attention_mask: Optional = None negative_attention_mask: Optional = None return_dict: bool = True callback: Optional = None callback_steps: Optional = 1 output_type: Optional = 'pt' ) → StableDiffusionPipelineOutput 或 tuple
参数
- prompt (
str
或List[str]
, 可选) — 指导音频生成的提示或提示。如果未定义,则需要传递prompt_embeds
。 - audio_end_in_s (
float
, 可选, 默认为 47.55) — 音频结束索引(单位:秒)。 - audio_start_in_s (
float
, 可选, 默认为 0) — 音频开始索引(单位:秒)。 - num_inference_steps (
int
, 可选, 默认为 100) — 降噪步骤的数量。更多的降噪步骤通常会导致更高的音频质量,但推理速度会变慢。 - guidance_scale (
float
, 可选, 默认为 7.0) — 更高的引导比例值鼓励模型生成与文本prompt
密切相关的音频,但会牺牲音质。当guidance_scale > 1
时启用引导比例。 - negative_prompt (
str
或List[str]
, 可选) — 指导音频生成中不包含内容的提示或提示。如果未定义,则需要改为传递negative_prompt_embeds
。在不使用引导(guidance_scale < 1
)时忽略。 - num_waveforms_per_prompt (
int
, 可选, 默认为 1) — 每个提示生成波形的数量。 - eta (
float
, 可选,默认为 0.0) — 对应于 DDIM 论文中的参数 eta (η)。仅适用于 DDIMScheduler,在其他调度器中会被忽略。 - generator (
torch.Generator
或List[torch.Generator]
, 可选) — 用于使生成确定性的torch.Generator
。 - latents (
torch.Tensor
, 可选) — 从高斯分布采样的预生成噪声潜在变量,用作音频生成的输入。可用于使用不同的提示微调相同的生成。如果未提供,则通过使用提供的随机generator
采样来生成潜在变量张量。 - initial_audio_waveforms (
torch.Tensor
, 可选) — 可选的初始音频波形,用作生成的初始音频波形。必须为形状(batch_size, num_channels, audio_length)
或(batch_size, audio_length)
,其中batch_size
对应于传递给模型的提示的数量。 - initial_audio_sampling_rate (
int
, 可选) — 如果提供了initial_audio_waveforms
,则为其采样率。必须与模型相同。 - prompt_embeds (
torch.Tensor
, 可选) — 来自文本编码器模型的预计算文本嵌入。可用于轻松调整文本输入,例如提示加权。如果未提供,则将根据prompt
输入参数计算文本嵌入。 - negative_prompt_embeds (
torch.Tensor
, 可选) — 来自文本编码器模型的预计算负文本嵌入。可用于轻松调整文本输入,例如提示加权。如果未提供,则将根据negative_prompt
输入参数计算negative_prompt_embeds
。 - attention_mask (
torch.LongTensor
, 可选) — 要应用于prompt_embeds
的预计算注意力掩码。如果未提供,则将根据prompt
输入参数计算注意力掩码。 - negative_attention_mask (
torch.LongTensor
, 可选) — 要应用于negative_text_audio_duration_embeds
的预计算注意力掩码。 - return_dict (
bool
, 可选,默认为True
) — 是否返回 StableDiffusionPipelineOutput 而不是普通元组。 - output_type (
str
, 可选,默认为"pt"
) — 生成的音频的输出格式。在"np"
(返回 NumPynp.ndarray
)和"pt"
(返回 PyTorchtorch.Tensor
对象)之间选择。设置为"latent"
以返回潜在扩散模型 (LDM) 输出。
返回
StableDiffusionPipelineOutput 或 tuple
如果 return_dict
为 True
,则返回 StableDiffusionPipelineOutput,否则返回一个 tuple
,其中第一个元素是包含生成音频的列表。
管道生成调用的函数。
示例
>>> import scipy
>>> import torch
>>> import soundfile as sf
>>> from diffusers import StableAudioPipeline
>>> repo_id = "stabilityai/stable-audio-open-1.0"
>>> pipe = StableAudioPipeline.from_pretrained(repo_id, torch_dtype=torch.float16)
>>> pipe = pipe.to("cuda")
>>> # define the prompts
>>> prompt = "The sound of a hammer hitting a wooden surface."
>>> negative_prompt = "Low quality."
>>> # set the seed for generator
>>> generator = torch.Generator("cuda").manual_seed(0)
>>> # run the generation
>>> audio = pipe(
... prompt,
... negative_prompt=negative_prompt,
... num_inference_steps=200,
... audio_end_in_s=10.0,
... num_waveforms_per_prompt=3,
... generator=generator,
... ).audios
>>> output = audio[0].T.float().cpu().numpy()
>>> sf.write("hammer.wav", output, pipe.vae.sampling_rate)
禁用切片式 VAE 解码。如果之前启用了 enable_vae_slicing
,则此方法将返回一步计算解码。
启用切片式 VAE 解码。启用此选项后,VAE 将输入张量分割成切片,以便分多个步骤计算解码。这有助于节省内存并允许使用更大的批次大小。