AudioLDM 2
AudioLDM 2 在 AudioLDM 2: 学习通过自我监督预训练的整体音频生成 中由郝合刘等人提出。AudioLDM 2 以文本提示作为输入,并预测相应的音频。它可以生成文本条件音效、人声和音乐。
受 Stable Diffusion 的启发,AudioLDM 2 是一种文本到音频的潜在扩散模型 (LDM),它从文本嵌入中学习连续音频表示。使用两个文本编码器模型从提示输入计算文本嵌入:CLAP 的文本分支和 Flan-T5 的编码器。然后,这些文本嵌入通过 AudioLDM2ProjectionModel 投影到共享嵌入空间。一个 GPT2 语言模型 (LM) 用于自回归预测 8 个新的嵌入向量,条件为投射的 CLAP 和 Flan-T5 嵌入。生成的嵌入向量和 Flan-T5 文本嵌入用作 LDM 中的交叉注意条件。AudioLDM 2 的 UNet 是独一无二的,因为它采用了两个交叉注意嵌入,而不是像大多数其他 LDM 采用的一个交叉注意条件。
论文的摘要如下所示
虽然音频生成在不同的音频类型之间具有共性,如语音、音乐和音效,但为每种类型设计模型需要仔细考虑具体的目标和偏见,这些目标和偏见可能与其他类型的目标和偏见有显著差异。为了让我们更接近于统一的音频生成视角,本文提出一个使用相同的学习方法进行语音、音乐和音效生成的框架。我们的框架引入了音频的一般表示,“音频语言”(LOA)。基于 AudioMAE(一种自监督预训练表示学习模型),任何音频都可以转化为 LOA。在生成过程中,我们使用 GPT-2 模型将任何模态转换为 LOA,并在 LOA 条件下使用潜在扩散模型执行自监督音频生成学习。所提出的框架自然带来了优势,例如上下文学习能力以及可重复使用的自监督预训练 AudioMAE 和潜在扩散模型。在文本转音频、文本转音乐和文本转语音的主要基准上的实验表明,与之前的做法相比,该方法处于最先进或有竞争力的性能水平。我们的代码、预训练模型和演示可在以下网址获得:https://audioldm.github.io/audioldm2。
此管道由 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:Union projection_model:AudioLDM2ProjectionModel language_model:GPT2Model tokenizer:Union tokenizer_2:Union 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 标记嵌入的训练模型。两个文本编码器的投影隐含状态连接起来以提供语言模型的输入。Vits 隐含状态的学习位置嵌入
- language_model (GPT2Model) — 用于生成基于两个文本编码器投影输出的隐含状态序列的自回归语言模型。
- 分词器 (RobertaTokenizer) — 用来对用于冻结第一个文本编码器的文本进行分词的 tokenizer。
- 分词器_2 ([
~transformers.T5Tokenizer
,~transformers.VitsTokenizer
]) — 用来对用于冻结的第二个文本编码器的文本进行分词的 tokenizer。 - feature_extractor (ClapFeatureExtractor) — 对生成的音频波形进行预处理,获得自动评分的对数梅尔频谱图。
- unet (UNet2DConditionModel) — 用于对编码后的音频潜在信息进行去噪的
UNet2DConditionModel
。 - scheduler (SchedulerMixin) — 当与
unet
配合使用时,对编码音频潜变量去噪的调度器。可以是 DDIMScheduler、LMSDiscreteScheduler 或 PNDMScheduler 之一。 - vocoder (SpeechT5HifiGan) — SpeechT5HifiGan 类的 Vocoder,用于将梅尔谱图潜变量转换为最终音频波形。
使用 AudioLDM2 进行文本到音频生成的管道。
此模型继承自 DiffusionPipeline。查看超类的文档,了解为所有管道实现的通用方法(下载、保存、在特定设备上运行等)。
__call__
< 源代码 >( prompt: Union = None transcription: Union = None audio_length_in_s: Optional = None num_inference_steps: int = 200 guidance_scale: float = 3.5 negative_prompt: Union = None num_waveforms_per_prompt: Optional = 1 eta: float = 0.0 generator: Union = None latents: Optional = None prompt_embeds: Optional = None negative_prompt_embeds: Optional = None generated_prompt_embeds: Optional = None negative_generated_prompt_embeds: Optional = None attention_mask: Optional = None negative_attention_mask: Optional = None max_new_tokens: Optional = None return_dict: bool = True callback: Optional = None callback_steps: Optional = 1 cross_attention_kwargs: Optional = None output_type: Optional = 'np' ) → StableDiffusionPipelineOutput or tuple
参数
- 提示 (
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) — 更高的 guidance scale 值会鼓励模型生成更紧密地与文本prompt
联系在一起的音频,但以降低音质为代价。当guidance_scale > 1
时启用 guidance scale。 - 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
,用于确保生成的可确定性。 - 噪声潜码 (
torch.Tensor
, 可选) — 预先生成的从正态分布中采样的噪声潜码,用作生成频谱图的输入。可用于通过不同的提示微调同一生成。如果没有提供,生成潜码张量采用利用提供的随机生成器采样。 - 提示嵌入 (
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
, 可选,默认为无) — 使用 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 字典传递给AttentionProcessor
,在self.processor
中进行了定义。 - output_type (
str
, 可选,默认值"np"
) — 生成音频的输出格式。在"np"
中选择以返回 NumPynp.ndarray
或在"pt"
中选择以返回 PyTorchtorch.Tensor
对象。设置为"latent"
以返回潜在扩散模型 (LDM) 输出。
返回
AudioToAudioPipelineOutput 或 tuple
如果 return_dict
为 True
,则返回 AudioToAudioPipelineOutput,否则返回一个 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
,则此方法将返回在一步中计算解码。
使用 accelerate 将所有模型卸载到 CPU,从而降低内存使用量,并对性能影响很小。与 `enable_sequential_cpu_offload` 相比,这种方法在调用 `forward` 方法时一次将整个模型移动到GPU,并且模型将保留在 GPU 中,直到运行下一个模型。与 `enable_sequential_cpu_offload` 相比,节省的内存较少,但由于 `unet` 的迭代执行,性能会好得多。
启用切片 VAE 解码。当启用此选项时,VAE 会将输入张量拆分为切片,以便分几个步骤计算解码。这有助于节省一些内存并允许更大的批次大小。
encode_prompt
< 源代码 >( 提示 设备 每提示波形数量 执行分类器无指导 转录 = 无 反向提示 = 无 提示嵌入: 可选 = 无 反向提示嵌入: 可选 = 无 生成的提示嵌入: 可选 = 无 生成的反向提示嵌入: 可选 = 无 注意力掩码: 可选 = 无 反向注意力掩码: 可选 = 无 最大新标记: 可选 = 无 ) → 提示嵌入 (torch.Tensor
)
参数
- prompt (
str
或List[str]
,可选) — 要编码的提示 - transcription (
str
或List[str]
) — 语音转文本的转录 - 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
输入参数计算负 prompt 嵌入。 - generated_prompt_embeds (
torch.Tensor
, 可选) — 来自 GPT2 语言模型的预先生成的文本嵌入。可用于轻松调整文本输入,例如提示权重。如果未提供,则会从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类型形状如下
(batch_size, sequence_length, hidden_size)`)
参数
- inputs_embeds (
torch.Tensor
类型形状如下(batch_size, sequence_length, hidden_size)
) — 用作生成提示的序列。 - max_new_tokens (
int
) — 生成的新标识符的数量。 - model_kwargs (
Dict[str, Any]
,可选) — 附加特定于模型的 kwargs 的临时参数化,它将被转发给模型的forward
函数。
返回
inputs_embeds (
torch.Tensorof shape
(batch_size, sequence_length, hidden_size)`)
生成的 hidden-states 序列。
从语言模型生成 hidden-states 序列,以嵌入输入为条件。
AudioLDM2ProjectionModel
类 diffusers.AudioLDM2ProjectionModel
< 源 >( text_encoder_dim text_encoder_1_dim langauge_model_dim use_learned_position_embedding = None max_seq_length = None )
一个简单的线性投影模型,用于将两个文本嵌入映射到一个共享的潜在空间。它还分别在每个文本嵌入序列的开头和结尾处插入已学习的嵌入向量。以 _1
附加的每个变量都参考对应于第二个文本编码器的变量。否则,它来自第一个。
转发
< 源代码 > ( hidden_states:可选 = 无 hidden_states_1:可选 = 无 attention_mask:可选 = 无 attention_mask_1:可选 = 无 )
AudioLDM2UNet2DConditionModel
class diffusers.AudioLDM2UNet2DConditionModel
< 源 >( sample_size: Optional = None in_channels: int = 4 out_channels: int = 4 flip_sin_to_cos: bool = True freq_shift: int = 0 down_block_types: Tuple = ('CrossAttnDownBlock2D', 'CrossAttnDownBlock2D', 'CrossAttnDownBlock2D', 'DownBlock2D') mid_block_type: Optional = 'UNetMidBlock2DCrossAttn' up_block_types: Tuple = ('UpBlock2D', 'CrossAttnUpBlock2D', 'CrossAttnUpBlock2D', 'CrossAttnUpBlock2D') only_cross_attention: Union = False block_out_channels: Tuple = (320, 640, 1280, 1280) layers_per_block: Union = 2 downsample_padding: int = 1 mid_block_scale_factor: float = 1 act_fn: str = 'silu' norm_num_groups: Optional = 32 norm_eps: float = 1e-05 cross_attention_dim: Union = 1280 transformer_layers_per_block: Union = 1 attention_head_dim: Union = 8 num_attention_heads: Union = None use_linear_projection: bool = False class_embed_type: Optional = None num_class_embeds: Optional = None upcast_attention: bool = False resnet_time_scale_shift: str = 'default' time_embedding_type: str = 'positional' time_embedding_dim: Optional = None time_embedding_act_fn: Optional = None timestep_post_act: Optional = None time_cond_proj_dim: Optional = None conv_in_kernel: int = 3 conv_out_kernel: int = 3 projection_class_embeddings_input_dim: Optional = None class_embeddings_concat: bool = False )
参数
- sample_size (
int
或Tuple[int, int]
,可选,默认为None
) — 输入/输出样本的高度和宽度。 - in_channels (
int
,可选,默认为 4) — 输入样本中的通道数。 - 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) — 每个块的层数。 - act_fn (
str
, 可选,默认为"silu"
) — 要使用的激活函数。 - cross_attention_dim (
int
或Tuple[int]
,可选,默认为 1280) — 交叉注意特征维度。 - transformer_layers_per_block (
int
或Tuple[int]
,可选,默认为1) — 类型为BasicTransformerBlock
的转换器块数量。仅适用于~models.unet_2d_blocks.CrossAttnDownBlock2D
,~models.unet_2d_blocks.CrossAttnUpBlock2D
,~models.unet_2d_blocks.UNetMidBlock2DCrossAttn
。 - attention_head_dim (
int
,可选,默认为8) — 注意力头的维度。 - num_attention_heads (
int
, optional) - 注意头的数量。如果未定义,默认为 `attention_head_dim` - resnet_time_scale_shift (
str
, optional, defaults to"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
层的内核大小。 - class_embeddings_concat (
bool
, optional, defaults toFalse
) — 是否将时间嵌入与类嵌入串联。
一个条件 2D UNet 模型,它接受一个有噪样本、条件状态和一个时间步长,并返回一个样本形状的输出。与普通的 UNet2DConditionModel 相比,该变体在每个 Transformer 块中可以选择包含一个额外的自注意力层以及多个交叉注意力层。它还允许最多两个交叉注意力嵌入,encoder_hidden_states
和 encoder_hidden_states_1
。
此模型继承自 ModelMixin。查看超类文档,了解为所有模型实现的通用方法(例如下载或保存)。
转发
< 源代码 > ( sample: 张量 timestep: 联合 encoder_hidden_states: 张量 class_labels: 可选,默认为 None timestep_cond: 可选,默认为 None attention_mask: 可选,默认为 None cross_attention_kwargs: 可选,默认为 None encoder_attention_mask: 可选,默认为 None return_dict: 布尔值,默认为 True encoder_hidden_states_1: 可选,默认为 None encoder_attention_mask_1: 可选,默认为 None ) → UNet2DConditionOutput 或 元组
参数
- sample (
torch.Tensor
) — 带有以下形状的噪声输入张量(batch, channel, height, width)
。 - timestep (
torch.Tensor
或float
或int
) — 对输入进行去噪的步数。 - return_dict (
bool
,可选,默认值为True
) — 返回 UNet2DConditionOutput 而不是普通元组。 - cross_attention_kwargs (
dict
, 可选) — 一个关键字参数字典,如果指定,将传递给AttnProcessor
。 - encoder_hidden_states_1 (
torch.Tensor
, 可选) — 第二组编码器隐藏状态,形状为(batch, sequence_length_2, feature_dim_2)
。可用于对模型进行其他一组嵌入条件,作为encoder_hidden_states
。 - encoder_attention_mask_1 (
torch.Tensor
, optional) — 跨注意力掩码,形状为(batch, sequence_length_2)
,应用于encoder_hidden_states_1
。如果为True
,则保留掩码,否则如果为False
,则丢弃掩码。掩码将转换为偏差,在“丢弃”标记对应的注意力得分上添加较大的负值。
返回
UNet2DConditionOutput 或 tuple
如果 return_dict
为 True
,则返回 UNet2DConditionOutput,否则返回 tuple
,其中第一个元素是示例张量。
AudioPipelineOutput
class diffusers.AudioPipelineOutput
< 源 >( audios: ndarray )
音频管道输出类。