Diffusers 文档
AudioLDM 2
并获得增强的文档体验
开始使用
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 和潜在扩散模型。在文本到音频、文本到音乐和文本到语音的主要基准测试中进行的实验表明,其性能达到或超过了现有方法。我们的代码、预训练模型和演示可在 此链接 获取。
此流水线由 sanchit-gandhi 和 Nguyễn Công Tú Anh 贡献。原始代码库可在 haoheliu/audioldm2 找到。
提示
选择检查点
AudioLDM2 有三种变体。其中两个检查点适用于文本到音频生成的一般任务。第三个检查点专门用于文本到音乐生成。
所有检查点共享相同的文本编码器和 VAE 模型大小。它们在 UNet 的大小和深度上有所不同。有关三个检查点的详细信息,请参见下表。
模型权重 | 任务 | UNet 模型大小 | 总模型大小 | 训练数据/小时 |
---|---|---|---|---|
audioldm2 | 文本到音频 | 350M | 1.1B | 1150k |
audioldm2-large | 文本到音频 | 750M | 1.5B | 1150k |
audioldm2-music | 文本到音乐 | 350M | 1.1B | 665k |
audioldm2-gigaspeech | 文本到语音 | 350M | 1.1B | 10k |
audioldm2-ljspeech | 文本到语音 | 350M | 1.1B |
构建提示
- 描述性提示输入效果最佳:使用形容词描述声音(例如,“高质量”或“清晰”),并使提示具有上下文特异性(例如,“森林中的溪流”而不是“溪流”)。
- 最好使用“猫”或“狗”等通用术语,而不是模型可能不熟悉的特定名称或抽象对象。
- 使用负面提示可以显著提高生成波形的质量,通过引导生成远离与低质量音频相关的术语。尝试使用“低质量”的负面提示。
控制推理
- 预测音频样本的质量可以通过
num_inference_steps
参数控制;步数越高,音频质量越高,但推理速度越慢。 - 预测音频样本的长度可以通过更改
audio_length_in_s
参数来控制。
评估生成的波形:
- 生成的波形质量会因随机种子而显著不同。尝试使用不同的随机种子进行生成,直到找到满意的结果。
- 可以一次生成多个波形:将
num_waveforms_per_prompt
设置为大于1的值。系统将自动对生成的波形和提示文本进行评分,并根据相似度将音频从最佳到最差进行排名。
以下示例演示了如何使用上述提示构建高质量的音乐和语音生成:示例。
AudioLDM2Pipeline
类 diffusers.AudioLDM2Pipeline
< 源 >( vae: AutoencoderKL text_encoder: ClapModel text_encoder_2: typing.Union[transformers.models.t5.modeling_t5.T5EncoderModel, transformers.models.vits.modeling_vits.VitsModel] projection_model: AudioLDM2ProjectionModel language_model: GPT2LMHeadModel tokenizer: typing.Union[transformers.models.roberta.tokenization_roberta.RobertaTokenizer, transformers.models.roberta.tokenization_roberta_fast.RobertaTokenizerFast] tokenizer_2: typing.Union[transformers.models.t5.tokenization_t5.T5Tokenizer, transformers.models.t5.tokenization_t5_fast.T5TokenizerFast, transformers.models.vits.tokenization_vits.VitsTokenizer] feature_extractor: ClapFeatureExtractor unet: AudioLDM2UNet2DConditionModel scheduler: KarrasDiffusionSchedulers vocoder: SpeechT5HifiGan )
参数
- vae (AutoencoderKL) — 用于将图像编码和解码为潜在表示的变分自编码器(VAE)模型。
- text_encoder (ClapModel) — 第一个冻结文本编码器。AudioLDM2 使用联合音频-文本嵌入模型 CLAP,特别是 laion/clap-htsat-unfused 变体。文本分支用于将文本提示编码为提示嵌入。完整的音频-文本模型用于通过计算相似度分数对生成的波形与文本提示进行排名。
- text_encoder_2 ([
~transformers.T5EncoderModel
,~transformers.VitsModel
]) — 第二个冻结文本编码器。AudioLDM2 使用 T5 的编码器,特别是 google/flan-t5-large 变体。第二个冻结文本编码器用于 TTS。AudioLDM2 使用 Vits 的编码器。 - projection_model (AudioLDM2ProjectionModel) — 一个训练过的模型,用于将第一个和第二个文本编码器模型的隐藏状态进行线性投影,并插入学习到的 SOS 和 EOS token 嵌入。来自两个文本编码器的投影隐藏状态被连接起来,作为语言模型的输入。一个用于 Vits 隐藏状态的学习位置嵌入。
- language_model (GPT2Model) — 一个自回归语言模型,用于生成一系列以两个文本编码器的投影输出为条件的隐藏状态。
- tokenizer (RobertaTokenizer) — 用于第一个冻结文本编码器文本分词的分词器。
- tokenizer_2 ([
~transformers.T5Tokenizer
,~transformers.VitsTokenizer
]) — 用于第二个冻结文本编码器文本分词的分词器。 - feature_extractor (ClapFeatureExtractor) — 特征提取器,用于将生成的音频波形预处理为对数梅尔谱图,以便进行自动评分。
- unet (UNet2DConditionModel) — 一个
UNet2DConditionModel
模型,用于对编码后的音频潜在表示进行去噪。 - scheduler (SchedulerMixin) — 用于与
unet
结合对编码后的音频潜在表示进行去噪的调度器。可以是DDIMScheduler、LMSDiscreteScheduler或PNDMScheduler之一。 - vocoder (SpeechT5HifiGan) — 用于将梅尔谱图潜在表示转换为最终音频波形的
SpeechT5HifiGan
类声码器。
用于使用 AudioLDM2 进行文本到音频生成的流水线。
此模型继承自DiffusionPipeline。请查看超类文档,了解所有流水线通用的方法(下载、保存、在特定设备上运行等)。
__call__
< 源 >( prompt: typing.Union[str, typing.List[str]] = None transcription: typing.Union[str, typing.List[str]] = None audio_length_in_s: typing.Optional[float] = None num_inference_steps: int = 200 guidance_scale: float = 3.5 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 prompt_embeds: typing.Optional[torch.Tensor] = None negative_prompt_embeds: typing.Optional[torch.Tensor] = None generated_prompt_embeds: typing.Optional[torch.Tensor] = None negative_generated_prompt_embeds: typing.Optional[torch.Tensor] = None attention_mask: typing.Optional[torch.LongTensor] = None negative_attention_mask: typing.Optional[torch.LongTensor] = None max_new_tokens: typing.Optional[int] = None return_dict: bool = True callback: typing.Optional[typing.Callable[[int, int, torch.Tensor], NoneType]] = None callback_steps: typing.Optional[int] = 1 cross_attention_kwargs: typing.Optional[typing.Dict[str, typing.Any]] = None output_type: typing.Optional[str] = 'np' ) → StableDiffusionPipelineOutput 或 tuple
参数
- prompt (
str
或List[str]
,可选) — 用于引导音频生成的提示。如果未定义,则需要传递prompt_embeds
。 - transcription (
str
或List[str]
,可选) — 文本转语音的转录本。 - audio_length_in_s (
int
, 可选, 默认为 10.24) — 生成音频样本的长度(秒)。 - num_inference_steps (
int
, 可选, 默认为 200) — 去噪步数。更多的去噪步数通常会带来更高的音频质量,但推理速度会更慢。 - guidance_scale (
float
, 可选, 默认为 3.5) — 较高的引导比例值会鼓励模型生成与文本prompt
密切相关的音频,但会牺牲较低的声音质量。当guidance_scale > 1
时启用引导比例。 - negative_prompt (
str
或List[str]
, 可选) — 用于引导音频生成中不包含内容的提示。如果未定义,则需要传递negative_prompt_embeds
。当不使用引导(guidance_scale < 1
)时忽略。 - num_waveforms_per_prompt (
int
, 可选, 默认为 1) — 每个提示生成波形数量。如果num_waveforms_per_prompt > 1
,则在生成输出和文本提示之间执行自动评分。此评分根据生成波形与联合文本-音频嵌入空间中文本输入的余弦相似度对生成波形进行排名。 - eta (
float
, 可选, 默认为 0.0) — 对应于 DDIM 论文中的参数 eta (η)。仅适用于 DDIMScheduler,在其他调度器中将被忽略。 - generator (
torch.Generator
或List[torch.Generator]
, 可选) — 一个torch.Generator
,用于生成确定性结果。 - latents (
torch.Tensor
, 可选) — 预先生成的从高斯分布中采样的噪声潜在变量,用作频谱图生成的输入。可用于使用不同提示调整相同生成。如果未提供,则使用提供的随机generator
采样生成潜在张量。 - prompt_embeds (
torch.Tensor
, 可选) — 预先生成的文本嵌入。可用于轻松调整文本输入(提示权重)。如果未提供,则从prompt
输入参数生成文本嵌入。 - negative_prompt_embeds (
torch.Tensor
, 可选) — 预先生成的负文本嵌入。可用于轻松调整文本输入(提示权重)。如果未提供,则从negative_prompt
输入参数生成negative_prompt_embeds
。 - generated_prompt_embeds (
torch.Tensor
, 可选) — 来自 GPT2 语言模型的预生成文本嵌入。可用于轻松调整文本输入,例如提示权重。如果未提供,将从prompt
输入参数生成文本嵌入。 - negative_generated_prompt_embeds (
torch.Tensor
, 可选) — 来自 GPT2 语言模型的预生成负文本嵌入。可用于轻松调整文本输入,例如提示权重。如果未提供,将根据negative_prompt
输入参数计算 negative_prompt_embeds。 - attention_mask (
torch.LongTensor
, 可选) — 应用于prompt_embeds
的预计算注意力掩码。如果未提供,注意力掩码将从prompt
输入参数计算。 - negative_attention_mask (
torch.LongTensor
, 可选) — 应用于negative_prompt_embeds
的预计算注意力掩码。如果未提供,注意力掩码将从negative_prompt
输入参数计算。 - max_new_tokens (
int
, 可选, 默认为 None) — 使用 GPT2 语言模型生成的新标记数量。如果未提供,标记数量将从模型的配置中获取。 - return_dict (
bool
, 可选, 默认为True
) — 是否返回 StableDiffusionPipelineOutput 而不是普通元组。 - callback (
Callable
, 可选) — 在推理过程中,每callback_steps
步调用的函数。该函数以以下参数调用:callback(step: int, timestep: int, latents: torch.Tensor)
。 - callback_steps (
int
, 可选, 默认为 1) —callback
函数被调用的频率。如果未指定,回调将在每一步调用。 - cross_attention_kwargs (
dict
, 可选) — 如果指定,将作为 kwargs 字典传递给self.processor
中定义的AttentionProcessor
。 - output_type (
str
, 可选, 默认为"np"
) — 生成音频的输出格式。选择"np"
返回 NumPynp.ndarray
或"pt"
返回 PyTorchtorch.Tensor
对象。设置为"latent"
返回潜在扩散模型 (LDM) 输出。
返回
StableDiffusionPipelineOutput 或 tuple
如果 return_dict
为 True
,则返回 StableDiffusionPipelineOutput,否则返回一个 tuple
,其中第一个元素是生成的音频列表。
用于生成的管道的调用函数。
示例
>>> 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")
>>> # 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_length_in_s=10.0,
... num_waveforms_per_prompt=3,
... generator=generator,
... ).audios
>>> # save the best audio sample (index 0) as a .wav file
>>> scipy.io.wavfile.write("techno.wav", rate=16000, data=audio[0])
#Using AudioLDM2 for Text To Speech
>>> import scipy
>>> import torch
>>> from diffusers import AudioLDM2Pipeline
>>> repo_id = "anhnct/audioldm2_gigaspeech"
>>> pipe = AudioLDM2Pipeline.from_pretrained(repo_id, torch_dtype=torch.float16)
>>> pipe = pipe.to("cuda")
>>> # define the prompts
>>> prompt = "A female reporter is speaking"
>>> transcript = "wish you have a good day"
>>> # set the seed for generator
>>> generator = torch.Generator("cuda").manual_seed(0)
>>> # run the generation
>>> audio = pipe(
... prompt,
... transcription=transcript,
... num_inference_steps=200,
... audio_length_in_s=10.0,
... num_waveforms_per_prompt=2,
... generator=generator,
... max_new_tokens=512, #Must set max_new_tokens equa to 512 for TTS
... ).audios
>>> # save the best audio sample (index 0) as a .wav file
>>> scipy.io.wavfile.write("tts.wav", rate=16000, data=audio[0])
禁用切片 VAE 解码。如果之前启用了 enable_vae_slicing
,此方法将返回一步计算解码。
enable_model_cpu_offload
< 来源 >( gpu_id: typing.Optional[int] = None device: typing.Union[torch.device, str] = 'cuda' )
使用 accelerate 将所有模型卸载到 CPU,以较低的性能影响降低内存使用。与 enable_sequential_cpu_offload
相比,此方法在调用 forward
方法时一次将一个完整模型移动到 GPU,并且模型保留在 GPU 中直到下一个模型运行。内存节省低于 enable_sequential_cpu_offload
,但由于 unet
的迭代执行,性能要好得多。
启用切片 VAE 解码。启用此选项后,VAE 会将输入张量分片,分步计算解码。这有助于节省一些内存并允许更大的批次大小。
encode_prompt
< 来源 >( prompt device num_waveforms_per_prompt do_classifier_free_guidance transcription = None negative_prompt = None prompt_embeds: typing.Optional[torch.Tensor] = None negative_prompt_embeds: typing.Optional[torch.Tensor] = None generated_prompt_embeds: typing.Optional[torch.Tensor] = None negative_generated_prompt_embeds: typing.Optional[torch.Tensor] = None attention_mask: typing.Optional[torch.LongTensor] = None negative_attention_mask: typing.Optional[torch.LongTensor] = None max_new_tokens: typing.Optional[int] = None ) → prompt_embeds (torch.Tensor
)
参数
- prompt (
str
或List[str]
, 可选) — 要编码的提示 - transcription (
str
或List[str]
) — 文本到语音的转录 - device (
torch.device
) — torch 设备 - num_waveforms_per_prompt (
int
) — 每个提示应生成的波形数量 - do_classifier_free_guidance (
bool
) — 是否使用分类器自由引导 - negative_prompt (
str
或List[str]
, 可选) — 不引导音频生成的提示。如果未定义,则必须传递negative_prompt_embeds
。在使用非引导模式时(即guidance_scale
小于1
时)将被忽略。 - prompt_embeds (
torch.Tensor
, 可选) — 来自 Flan T5 模型的预计算文本嵌入。可用于轻松调整文本输入,例如提示权重。如果未提供,文本嵌入将从prompt
输入参数计算。 - negative_prompt_embeds (
torch.Tensor
, 可选) — 来自 Flan T5 模型的预计算负文本嵌入。可用于轻松调整文本输入,例如提示权重。如果未提供, negative_prompt_embeds 将从negative_prompt
输入参数计算。 - generated_prompt_embeds (
torch.Tensor
, 可选) — 来自 GPT2 语言模型的预生成文本嵌入。可用于轻松调整文本输入,例如提示权重。如果未提供,文本嵌入将从prompt
输入参数生成。 - negative_generated_prompt_embeds (
torch.Tensor
, 可选) — 来自 GPT2 语言模型的预生成负文本嵌入。可用于轻松调整文本输入,例如提示权重。如果未提供, negative_prompt_embeds 将从negative_prompt
输入参数计算。 - attention_mask (
torch.LongTensor
, 可选) — 应用于prompt_embeds
的预计算注意力掩码。如果未提供,注意力掩码将从prompt
输入参数计算。 - negative_attention_mask (
torch.LongTensor
, 可选) — 应用于negative_prompt_embeds
的预计算注意力掩码。如果未提供,注意力掩码将从negative_prompt
输入参数计算。 - max_new_tokens (
int
, 可选, 默认为 None) — 使用 GPT2 语言模型生成的新标记数量。
返回
prompt_embeds (torch.Tensor
)
Flan T5 模型的文本嵌入。attention_mask (torch.LongTensor
): 应用于 prompt_embeds
的注意力掩码。generated_prompt_embeds (torch.Tensor
): 从 GPT2 语言模型生成的文本嵌入。
将提示编码为文本编码器隐藏状态。
示例
>>> 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")
>>> # Get text embedding vectors
>>> prompt_embeds, attention_mask, generated_prompt_embeds = pipe.encode_prompt(
... prompt="Techno music with a strong, upbeat tempo and high melodic riffs",
... device="cuda",
... do_classifier_free_guidance=True,
... )
>>> # Pass text embeddings to pipeline for text-conditional audio generation
>>> audio = pipe(
... prompt_embeds=prompt_embeds,
... attention_mask=attention_mask,
... generated_prompt_embeds=generated_prompt_embeds,
... num_inference_steps=200,
... audio_length_in_s=10.0,
... ).audios[0]
>>> # save generated audio sample
>>> scipy.io.wavfile.write("techno.wav", rate=16000, data=audio)
generate_language_model
< 来源 >( inputs_embeds: Tensor = None max_new_tokens: int = 8 **model_kwargs ) → inputs_embeds (torch.Tensor
of shape (batch_size, sequence_length, hidden_size)
)
从语言模型生成隐藏状态序列,以嵌入输入为条件。
AudioLDM2ProjectionModel
class diffusers.AudioLDM2ProjectionModel
< 来源 >( text_encoder_dim text_encoder_1_dim langauge_model_dim use_learned_position_embedding = None max_seq_length = None )
一个简单的线性投影模型,用于将两个文本嵌入映射到共享潜在空间。它还在每个文本嵌入序列的开始和结束处分别插入学习到的嵌入向量。每个附加 _1
的变量指的是与第二个文本编码器对应的变量。否则,它来自第一个。
forward
< 来源 >( hidden_states: typing.Optional[torch.Tensor] = None hidden_states_1: typing.Optional[torch.Tensor] = None attention_mask: typing.Optional[torch.LongTensor] = None attention_mask_1: typing.Optional[torch.LongTensor] = None )
AudioLDM2UNet2DConditionModel
class diffusers.AudioLDM2UNet2DConditionModel
< 来源 >( sample_size: typing.Optional[int] = None in_channels: int = 4 out_channels: int = 4 flip_sin_to_cos: bool = True freq_shift: int = 0 down_block_types: typing.Tuple[str] = ('CrossAttnDownBlock2D', 'CrossAttnDownBlock2D', 'CrossAttnDownBlock2D', 'DownBlock2D') mid_block_type: typing.Optional[str] = 'UNetMidBlock2DCrossAttn' up_block_types: typing.Tuple[str] = ('UpBlock2D', 'CrossAttnUpBlock2D', 'CrossAttnUpBlock2D', 'CrossAttnUpBlock2D') only_cross_attention: typing.Union[bool, typing.Tuple[bool]] = False block_out_channels: typing.Tuple[int] = (320, 640, 1280, 1280) layers_per_block: typing.Union[int, typing.Tuple[int]] = 2 downsample_padding: int = 1 mid_block_scale_factor: float = 1 act_fn: str = 'silu' norm_num_groups: typing.Optional[int] = 32 norm_eps: float = 1e-05 cross_attention_dim: typing.Union[int, typing.Tuple[int]] = 1280 transformer_layers_per_block: typing.Union[int, typing.Tuple[int]] = 1 attention_head_dim: typing.Union[int, typing.Tuple[int]] = 8 num_attention_heads: typing.Union[int, typing.Tuple[int], NoneType] = None use_linear_projection: bool = False class_embed_type: typing.Optional[str] = None num_class_embeds: typing.Optional[int] = None upcast_attention: bool = False resnet_time_scale_shift: str = 'default' time_embedding_type: str = 'positional' time_embedding_dim: typing.Optional[int] = None time_embedding_act_fn: typing.Optional[str] = None timestep_post_act: typing.Optional[str] = None time_cond_proj_dim: typing.Optional[int] = None conv_in_kernel: int = 3 conv_out_kernel: int = 3 projection_class_embeddings_input_dim: typing.Optional[int] = None class_embeddings_concat: bool = False )
参数
- sample_size (
int
或Tuple[int, int]
, 可选, 默认为None
) — 输入/输出样本的高度和宽度。 - in_channels (
int
, 可选, 默认为 4) — 输入样本中的通道数。 - out_channels (
int
, 可选, 默认为 4) — 输出中的通道数。 - flip_sin_to_cos (
bool
, 可选, 默认为False
) — 是否在时间嵌入中将正弦翻转为余弦。 - freq_shift (
int
, 可选, 默认为 0) — 应用于时间嵌入的频率偏移。 - down_block_types (
Tuple[str]
, 可选, 默认为("CrossAttnDownBlock2D", "CrossAttnDownBlock2D", "CrossAttnDownBlock2D", "DownBlock2D")
) — 要使用的下采样块的元组。 - mid_block_type (
str
, 可选, 默认为"UNetMidBlock2DCrossAttn"
) — UNet 中间块的类型,对于 AudioLDM2 只能是UNetMidBlock2DCrossAttn
。 - up_block_types (
Tuple[str]
, 可选, 默认为("UpBlock2D", "CrossAttnUpBlock2D", "CrossAttnUpBlock2D", "CrossAttnUpBlock2D")
) — 要使用的上采样块的元组。 - only_cross_attention (
bool
或Tuple[bool]
, 可选, 默认为False
) — 是否在基本 Transformer 块中包含自注意力,参见BasicTransformerBlock
。 - block_out_channels (
Tuple[int]
, 可选, 默认为(320, 640, 1280, 1280)
) — 每个块的输出通道元组。 - layers_per_block (
int
, 可选, 默认为 2) — 每个块的层数。 - downsample_padding (
int
, 可选, 默认为 1) — 下采样卷积使用的填充。 - mid_block_scale_factor (
float
, 可选, 默认为 1.0) — 中间块使用的缩放因子。 - act_fn (
str
, 可选, 默认为"silu"
) — 要使用的激活函数。 - norm_num_groups (
int
, 可选, 默认为 32) — 归一化使用的组数。如果为None
,则在后处理中跳过归一化和激活层。 - norm_eps (
float
, 可选, 默认为 1e-5) — 归一化使用的 epsilon 值。 - cross_attention_dim (
int
或Tuple[int]
, 可选, 默认为 1280) — 交叉注意力特征的维度。 - transformer_layers_per_block (
int
或Tuple[int]
, 可选, 默认为 1) —BasicTransformerBlock
类型的 Transformer 块的数量。仅与~models.unet_2d_blocks.CrossAttnDownBlock2D
、~models.unet_2d_blocks.CrossAttnUpBlock2D
、~models.unet_2d_blocks.UNetMidBlock2DCrossAttn
相关。 - attention_head_dim (
int
, 可选, 默认为 8) — 注意力头的维度。 - num_attention_heads (
int
, 可选) — 注意力头的数量。如果未定义,则默认为attention_head_dim
。 - resnet_time_scale_shift (
str
, 可选, 默认为"default"
) — ResNet 块的时间缩放偏移配置(参见ResnetBlock2D
)。选择default
或scale_shift
。 - class_embed_type (
str
, 可选, 默认为None
) — 要使用的类嵌入类型,最终与时间嵌入求和。选择None
、"timestep"
、"identity"
、"projection"
或"simple_projection"
。 - num_class_embeds (
int
, 可选, 默认为None
) — 可学习嵌入矩阵的输入维度,当class_embed_type
为None
时,该矩阵将投影到time_embed_dim
。 - time_embedding_type (
str
, 可选, 默认为positional
) — 时间步使用的位置嵌入类型。选择positional
或fourier
。 - time_embedding_dim (
int
, 可选, 默认为None
) — 投影时间嵌入维度的可选覆盖。 - time_embedding_act_fn (
str
, 可选, 默认为None
) — 在将时间嵌入传递给 UNet 的其余部分之前,仅使用一次的可选激活函数。选择silu
、mish
、gelu
和swish
。 - timestep_post_act (
str
, 可选, 默认为None
) — 时间步嵌入中要使用的第二个激活函数。选择silu
、mish
和gelu
。 - time_cond_proj_dim (
int
, 可选, 默认为None
) — 时间步嵌入中cond_proj
层的维度。 - conv_in_kernel (
int
, 可选, 默认为3
) —conv_in
层的核大小。 - conv_out_kernel (
int
, 可选, 默认为3
) —conv_out
层的核大小。 - projection_class_embeddings_input_dim (
int
, 可选) — 当class_embed_type="projection"
时,class_labels
输入的维度。当class_embed_type="projection"
时为必需参数。 - class_embeddings_concat (
bool
, 可选, 默认为False
) — 是否将时间嵌入与类嵌入连接起来。
一个条件 2D UNet 模型,它接受一个噪声样本、条件状态和一个时间步,并返回一个样本形状的输出。与普通的 UNet2DConditionModel 相比,此变体可选地在每个 Transformer 块中包含一个额外的自注意力层,以及多个交叉注意力层。它还允许最多两个交叉注意力嵌入,即 encoder_hidden_states
和 encoder_hidden_states_1
。
此模型继承自 ModelMixin。有关所有模型实现的通用方法(如下载或保存),请参阅超类文档。
forward
< 源代码 >( sample: Tensor timestep: typing.Union[torch.Tensor, float, int] encoder_hidden_states: Tensor class_labels: typing.Optional[torch.Tensor] = None timestep_cond: typing.Optional[torch.Tensor] = None attention_mask: typing.Optional[torch.Tensor] = None cross_attention_kwargs: typing.Optional[typing.Dict[str, typing.Any]] = None encoder_attention_mask: typing.Optional[torch.Tensor] = None return_dict: bool = True encoder_hidden_states_1: typing.Optional[torch.Tensor] = None encoder_attention_mask_1: typing.Optional[torch.Tensor] = None ) → UNet2DConditionOutput 或 tuple
参数
- sample (
torch.Tensor
) — 具有以下形状的噪声输入张量:(batch, channel, height, width)
。 - timestep (
torch.Tensor
或float
或int
) — 去噪输入的时间步数。 - encoder_hidden_states (
torch.Tensor
) — 形状为(batch, sequence_length, feature_dim)
的编码器隐藏状态。 - encoder_attention_mask (
torch.Tensor
) — 应用于encoder_hidden_states
的交叉注意力掩码,形状为(batch, sequence_length)
。如果为True
,则保留掩码,否则(如果为False
)丢弃。掩码将转换为偏差,这会向对应于“丢弃”令牌的注意力分数添加大的负值。 - return_dict (
bool
, 可选, 默认为True
) — 是否返回 UNet2DConditionOutput 而不是普通元组。 - cross_attention_kwargs (
dict
, 可选) — 一个 kwargs 字典,如果指定,将传递给AttnProcessor
。 - encoder_hidden_states_1 (
torch.Tensor
, 可选) — 第二组编码器隐藏状态,形状为(batch, sequence_length_2, feature_dim_2)
。可用于根据不同的嵌入集对模型进行条件化,即encoder_hidden_states
。 - encoder_attention_mask_1 (
torch.Tensor
, 可选) — 应用于encoder_hidden_states_1
的交叉注意力掩码,形状为(batch, sequence_length_2)
。如果为True
,则保留掩码,否则(如果为False
)丢弃。掩码将转换为偏差,这会向对应于“丢弃”令牌的注意力分数添加大的负值。
返回
UNet2DConditionOutput 或 tuple
如果 return_dict
为 True,则返回 UNet2DConditionOutput,否则返回一个 tuple
,其中第一个元素是样本张量。
AudioLDM2UNet2DConditionModel 的 forward 方法。
AudioPipelineOutput
class diffusers.AudioPipelineOutput
< 源代码 >( audios: ndarray )
音频流水线的输出类。