Diffusers 文件
PriorTransformer
並獲得增強的文件體驗
開始使用
PriorTransformer
Prior Transformer 最初由 Ramesh 等人在《使用 CLIP 潛在變數進行分層文字條件影像生成》中提出。它用於從 CLIP 文字嵌入預測 CLIP 影像嵌入;影像嵌入透過去噪擴散過程進行預測。
論文摘要如下:
對比模型(如 CLIP)已被證明能夠學習到捕獲影像語義和風格的魯棒表示。為了利用這些表示進行影像生成,我們提出了一個兩階段模型:一個先驗模型,根據文字標題生成 CLIP 影像嵌入;一個解碼器,根據影像嵌入生成影像。我們發現,明確生成影像表示可以提高影像多樣性,同時最大限度地減少照片真實感和標題相似度的損失。我們的解碼器在影像表示的條件下,還可以生成影像的變體,這些變體既保留了語義和風格,又改變了影像表示中不存在的非必要細節。此外,CLIP 的聯合嵌入空間能夠以零樣本方式進行語言引導的影像操作。我們將擴散模型用於解碼器,並對先驗模型同時進行自迴歸和擴散模型的實驗,發現後者在計算上更高效,並能生成更高質量的樣本。
PriorTransformer
class diffusers.PriorTransformer
< 原始碼 >( num_attention_heads: int = 32 attention_head_dim: int = 64 num_layers: int = 20 embedding_dim: int = 768 num_embeddings = 77 additional_embeddings = 4 dropout: float = 0.0 time_embed_act_fn: str = 'silu' norm_in_type: typing.Optional[str] = None embedding_proj_norm_type: typing.Optional[str] = None encoder_hid_proj_type: typing.Optional[str] = 'linear' added_emb_type: typing.Optional[str] = 'prd' time_embed_dim: typing.Optional[int] = None embedding_proj_dim: typing.Optional[int] = None clip_embed_dim: typing.Optional[int] = None )
引數
- num_attention_heads (
int
, 可選, 預設為 32) — 用於多頭注意力機制的頭數量。 - attention_head_dim (
int
, 可選, 預設為 64) — 每個頭的通道數。 - num_layers (
int
, 可選, 預設為 20) — 要使用的 Transformer 塊層數。 - embedding_dim (
int
, 可選, 預設為 768) — 模型輸入hidden_states
的維度 - num_embeddings (
int
, 可選, 預設為 77) — 模型輸入hidden_states
的嵌入數量 - additional_embeddings (
int
, 可選, 預設為 4) — 附加到投影hidden_states
的附加 token 數量。所用hidden_states
的實際長度為num_embeddings + additional_embeddings
。 - dropout (
float
, 可選, 預設為 0.0) — 要使用的 dropout 機率。 - time_embed_act_fn (
str
, 可選, 預設為 'silu') — 用於建立時間步嵌入的啟用函式。 - norm_in_type (
str
, 可選, 預設為 None) — 在傳遞給 Transformer 塊之前,應用於隱藏狀態的歸一化層。如果不需要歸一化,請將其設定為None
。 - embedding_proj_norm_type (
str
, 可選, 預設為 None) — 應用於輸入proj_embedding
的歸一化層。如果不需要歸一化,請將其設定為None
。 - encoder_hid_proj_type (
str
, 可選, 預設為linear
) — 應用於輸入encoder_hidden_states
的投影層。如果encoder_hidden_states
為None
,請將其設定為None
。 - added_emb_type (
str
, 可選, 預設為prd
) — 用於調節模型的附加嵌入。可選擇prd
或None
。如果選擇prd
,它將預置一個 token,表示文字嵌入和影像嵌入之間的(量化)點積,如 unclip 論文 https://huggingface.co/papers/2204.06125 中所提出的。如果為None
,則不會預置任何附加嵌入。 - time_embed_dim (
int, *可選*, 預設為 None) -- 時間步嵌入的維度。如果為 None,將設定為
num_attention_heads * attention_head_dim` - embedding_proj_dim (
int
, 可選, 預設為 None) —proj_embedding
的維度。如果為 None,將設定為embedding_dim
。 - clip_embed_dim (
int
, 可選, 預設為 None) — 輸出的維度。如果為 None,將設定為embedding_dim
。
一個先驗 Transformer 模型。
forward
< 原始碼 >( hidden_states timestep: typing.Union[torch.Tensor, float, int] proj_embedding: Tensor encoder_hidden_states: typing.Optional[torch.Tensor] = None attention_mask: typing.Optional[torch.BoolTensor] = None return_dict: bool = True ) → PriorTransformerOutput or tuple
引數
- hidden_states (
torch.Tensor
, 形狀為(batch_size, embedding_dim)
) — 當前預測的影像嵌入。 - timestep (
torch.LongTensor
) — 當前去噪步驟。 - proj_embedding (
torch.Tensor
, 形狀為(batch_size, embedding_dim)
) — 去噪過程所依賴的投影嵌入向量。 - encoder_hidden_states (
torch.Tensor
, 形狀為(batch_size, num_embeddings, embedding_dim)
) — 去噪過程所依賴的文字嵌入的隱藏狀態。 - attention_mask (
torch.BoolTensor
, 形狀為(batch_size, num_embeddings)
) — 文字嵌入的文字掩碼。 - return_dict (
bool
, 可選, 預設為True
) — 是否返回 PriorTransformerOutput 而不是普通元組。
返回
PriorTransformerOutput 或 tuple
如果 return_dict 為 True,則返回 PriorTransformerOutput,否則返回一個元組,其中第一個元素是樣本張量。
PriorTransformer 前向方法。
設定注意力處理器
< 原始碼 >( processor: typing.Union[diffusers.models.attention_processor.AttnProcessor, diffusers.models.attention_processor.CustomDiffusionAttnProcessor, diffusers.models.attention_processor.AttnAddedKVProcessor, diffusers.models.attention_processor.AttnAddedKVProcessor2_0, diffusers.models.attention_processor.JointAttnProcessor2_0, diffusers.models.attention_processor.PAGJointAttnProcessor2_0, diffusers.models.attention_processor.PAGCFGJointAttnProcessor2_0, diffusers.models.attention_processor.FusedJointAttnProcessor2_0, diffusers.models.attention_processor.AllegroAttnProcessor2_0, diffusers.models.attention_processor.AuraFlowAttnProcessor2_0, diffusers.models.attention_processor.FusedAuraFlowAttnProcessor2_0, diffusers.models.attention_processor.FluxAttnProcessor2_0, diffusers.models.attention_processor.FluxAttnProcessor2_0_NPU, diffusers.models.attention_processor.FusedFluxAttnProcessor2_0, diffusers.models.attention_processor.FusedFluxAttnProcessor2_0_NPU, diffusers.models.attention_processor.CogVideoXAttnProcessor2_0, diffusers.models.attention_processor.FusedCogVideoXAttnProcessor2_0, diffusers.models.attention_processor.XFormersAttnAddedKVProcessor, diffusers.models.attention_processor.XFormersAttnProcessor, diffusers.models.attention_processor.XLAFlashAttnProcessor2_0, diffusers.models.attention_processor.AttnProcessorNPU, diffusers.models.attention_processor.AttnProcessor2_0, diffusers.models.attention_processor.MochiVaeAttnProcessor2_0, diffusers.models.attention_processor.MochiAttnProcessor2_0, diffusers.models.attention_processor.StableAudioAttnProcessor2_0, diffusers.models.attention_processor.HunyuanAttnProcessor2_0, diffusers.models.attention_processor.FusedHunyuanAttnProcessor2_0, diffusers.models.attention_processor.PAGHunyuanAttnProcessor2_0, diffusers.models.attention_processor.PAGCFGHunyuanAttnProcessor2_0, diffusers.models.attention_processor.LuminaAttnProcessor2_0, diffusers.models.attention_processor.FusedAttnProcessor2_0, diffusers.models.attention_processor.CustomDiffusionXFormersAttnProcessor, diffusers.models.attention_processor.CustomDiffusionAttnProcessor2_0, diffusers.models.attention_processor.SlicedAttnProcessor, diffusers.models.attention_processor.SlicedAttnAddedKVProcessor, diffusers.models.attention_processor.SanaLinearAttnProcessor2_0, diffusers.models.attention_processor.PAGCFGSanaLinearAttnProcessor2_0, diffusers.models.attention_processor.PAGIdentitySanaLinearAttnProcessor2_0, diffusers.models.attention_processor.SanaMultiscaleLinearAttention, diffusers.models.attention_processor.SanaMultiscaleAttnProcessor2_0, diffusers.models.attention_processor.SanaMultiscaleAttentionProjection, diffusers.models.attention_processor.IPAdapterAttnProcessor, diffusers.models.attention_processor.IPAdapterAttnProcessor2_0, diffusers.models.attention_processor.IPAdapterXFormersAttnProcessor, diffusers.models.attention_processor.SD3IPAdapterJointAttnProcessor2_0, diffusers.models.attention_processor.PAGIdentitySelfAttnProcessor2_0, diffusers.models.attention_processor.PAGCFGIdentitySelfAttnProcessor2_0, diffusers.models.attention_processor.LoRAAttnProcessor, diffusers.models.attention_processor.LoRAAttnProcessor2_0, diffusers.models.attention_processor.LoRAXFormersAttnProcessor, diffusers.models.attention_processor.LoRAAttnAddedKVProcessor]]] )
設定用於計算注意力的注意力處理器。
停用自定義注意力處理器並設定預設注意力實現。
PriorTransformerOutput
class diffusers.models.transformers.prior_transformer.PriorTransformerOutput
< 原始碼 >( predicted_image_embedding: Tensor )
PriorTransformer 的輸出。