Diffusers 文档
稳定音频
并获得增强的文档体验
开始使用
Stable Audio
Stable Audio 由 Zach Evans 等人在 Stable Audio Open 中提出。它以文本提示作为输入,并预测相应的声音或音乐样本。
Stable Audio Open 从文本提示生成可变长度(最长 47 秒)、44.1kHz 的立体声音频。它包含三个组件:一个将波形压缩成可管理序列长度的自编码器,一个用于文本调节的基于 T5 的文本嵌入,以及一个在自编码器的潜在空间中运行的基于 Transformer 的扩散 (DiT) 模型。
Stable Audio 在大约 4.8 万个音频记录的语料库上进行训练,其中约 4.7 万个来自 Freesound,其余来自 Free Music Archive (FMA)。所有音频文件均根据 CC0、CC BY 或 CC Sampling+ 许可。此数据用于训练自编码器和 DiT。
该论文的摘要如下:开放生成模型对于社区至关重要,允许进行微调,并在展示新模型时作为基线。然而,目前大多数文本到音频模型都是私有的,艺术家和研究人员无法在其基础上构建。在此,我们描述了一个新的开放权重文本到音频模型的架构和训练过程,该模型使用知识共享数据进行训练。我们的评估表明,该模型的性能在各种指标上都与最先进水平相当。值得注意的是,报告的 FDopenl3 结果(衡量生成结果的真实性)展示了其在 44.1kHz 下进行高质量立体声音频合成的潜力。
此 pipeline 由 Yoach Lacombe 贡献。原始代码库可以在 Stability-AI/stable-audio-tools 找到。
提示
在构建 prompt 时,请记住
- 描述性 prompt 输入效果最佳;使用形容词来描述声音(例如,“高质量”或“清晰”),并在可能的情况下使 prompt 上下文具体化(例如,“带有快速节拍和合成器的旋律技术舞曲”比“技术舞曲”效果更好)。
- 使用 负面 prompt 可以显着提高生成音频的质量。尝试使用 “低质量,普通质量” 的负面 prompt。
在推理过程中
- 生成的音频样本的 质量 可以通过
num_inference_steps
参数控制;更高的步数会带来更高质量的音频,但会牺牲推理速度。 - 一次可以生成多个波形:将
num_waveforms_per_prompt
设置为大于 1 的值即可启用。将在生成的波形和提示文本之间执行自动评分,并据此对音频进行从最佳到最差的排序。
StableAudioPipeline
类 diffusers.StableAudioPipeline
< source >( vae: AutoencoderOobleck text_encoder: T5EncoderModel projection_model: StableAudioProjectionModel tokenizer: typing.Union[transformers.models.t5.tokenization_t5.T5Tokenizer, transformers.models.t5.tokenization_t5_fast.T5TokenizerFast] transformer: StableAudioDiTModel scheduler: EDMDPMSolverMultistepScheduler )
参数
- vae (AutoencoderOobleck) — 变分自编码器 (VAE) 模型,用于将图像编码和解码为潜在表示形式以及从潜在表示形式解码为图像。
- text_encoder (T5EncoderModel) — 冻结的文本编码器。 StableAudio 使用 T5 的编码器,特别是 google-t5/t5-base 变体。
- projection_model (
StableAudioProjectionModel
) — 一个经过训练的模型,用于线性投影来自文本编码器模型的隐藏状态以及开始和结束秒数。来自编码器的投影隐藏状态和条件秒数被连接起来,以提供给 transformer 模型的输入。 - tokenizer (T5Tokenizer) — 用于为冻结的文本编码器标记文本的分词器。
- transformer (StableAudioDiTModel) — 一个
StableAudioDiTModel
,用于对编码的音频潜在空间进行去噪。 - scheduler (EDMDPMSolverMultistepScheduler) — 一个调度器,与
transformer
结合使用,以对编码的音频潜在空间进行去噪。
使用 StableAudio 进行文本到音频生成的 Pipeline。
此模型继承自 DiffusionPipeline。查看超类文档以获取为所有 pipeline 实现的通用方法(下载、保存、在特定设备上运行等)。
__call__
< source >( prompt: typing.Union[str, typing.List[str]] = None audio_end_in_s: typing.Optional[float] = None audio_start_in_s: typing.Optional[float] = 0.0 num_inference_steps: int = 100 guidance_scale: float = 7.0 negative_prompt: typing.Union[str, typing.List[str], NoneType] = None num_waveforms_per_prompt: typing.Optional[int] = 1 eta: float = 0.0 generator: typing.Union[torch._C.Generator, typing.List[torch._C.Generator], NoneType] = None latents: typing.Optional[torch.Tensor] = None initial_audio_waveforms: typing.Optional[torch.Tensor] = None initial_audio_sampling_rate: typing.Optional[torch.Tensor] = None prompt_embeds: typing.Optional[torch.Tensor] = None negative_prompt_embeds: typing.Optional[torch.Tensor] = None attention_mask: typing.Optional[torch.LongTensor] = None negative_attention_mask: typing.Optional[torch.LongTensor] = None return_dict: bool = True callback: typing.Optional[typing.Callable[[int, int, torch.Tensor], NoneType]] = None callback_steps: typing.Optional[int] = 1 output_type: typing.Optional[str] = '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) — 更高的 guidance scale 值会鼓励模型生成与文本prompt
紧密相关的音频,但会以降低音质为代价。当guidance_scale > 1
时,guidance scale 启用。 - negative_prompt (
str
或List[str]
, 可选) — 用于引导音频生成中不包含的内容的提示或提示语。如果未定义,则需要传递negative_prompt_embeds
代替。当不使用 guidance 时(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 而不是普通元组。 - callback (
Callable
, optional) — 一个在推理过程中每callback_steps
步调用的函数。该函数被调用时会传入以下参数:callback(step: int, timestep: int, latents: torch.Tensor)
。 - callback_steps (
int
, optional, defaults to 1) —callback
函数被调用的频率。如果未指定,则在每个步骤都调用回调函数。 - output_type (
str
, optional, defaults to"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 将输入张量分割成切片,分步计算解码。这有助于节省一些内存并允许更大的批处理大小。