Diffusers documentation
QwenImage21Transformer2DModel
QwenImage21Transformer2DModel
Transformer luồng đơn được sử dụng bởi Qwen-Image 2.1. Latent của văn bản và hình ảnh chia sẻ một chuỗi duy nhất, và một phép chiếu modulation dùng chung duy nhất cung cấp cho mọi khối.
Hai hành vi phân biệt 2.1 với các transformer QwenImage trước đó:
- Chú ý nhân quả theo khối — chú ý tuân theo
(q_idx >= kv_idx) or same_image_block, do đó chuỗi kết hợp là nhân quả trong khi mỗi khối ảnh vẫn giữ tính hai chiều bên trong.QwenImage21AttnProcessortriển khai điều này dưới dạng một lần gọi chú ý cho mỗi đoạn tiền tố và là mặc định.QwenImage21FlexAttnProcessortriển khai dưới dạng một lần gọiflex_attentionduy nhất được điều khiển bởiBlockMask, nhanh hơn khi mô hình đã được biên dịch. Cả hai đều cho ra kết quả giống nhau. causal_condition— các token văn bản và ảnh điều kiện được điều biến từt = 0thay vì từ bước thời gian được lấy mẫu. Hoạt động của chúng độc lập với bước khử nhiễu, do đó các key và value của phần tiền tố đó có thể được lưu cache qua các bước thông qua đối sốkv_cache.
Tải nó bằng cách:
import torch
from diffusers import QwenImage21Transformer2DModel
transformer = QwenImage21Transformer2DModel.from_pretrained(
"Qwen/Qwen-Image-2.1", subfolder="transformer", dtype=torch.bfloat16
)QwenImage21Transformer2DModel
lớp diffusers.QwenImage21Transformer2DModel
< source >( patch_size: int = 1in_channels: int = 64out_channels: int | None = 64num_layers: int = 32attention_head_dim: int = 128num_attention_heads: int = 32context_in_dim: int = 4096mlp_ratio: int = 3axes_dims_rope: tuple = (16, 56, 56)eps: float = 1e-06causal_condition: bool = True )
Tham số
- patch_size (
int, mặc định là1) — Độ dài cạnh của latent patch được gập vào chiều kênh. Phiên bản 2.1 sử dụng latent không gập patch. - in_channels (
int, mặc định là64) — Số kênh tiềm ẩn của đầu vào. - out_channels (
int, tùy chọn, mặc định là64) — Số kênh latent của đầu ra. Nếu không được chỉ định, sẽ dùngin_channels. - num_layers (
int, mặc định là32) — Số lượng khối single-stream. - attention_head_dim (
int, mặc định là128) — Số kênh cho mỗi đầu chú ý. - num_attention_heads (
int, mặc định là32) — Số lượng đầu chú ý (attention heads). - context_in_dim (
int, mặc định là4096) — Kích thước kênh củaencoder_hidden_states. - mlp_ratio (
int, mặc định là3) — Hệ số mở rộng feed-forward. - axes_dims_rope (
tuple[int], mặc định là(16, 56, 56)) — Các chiều Rotary cho các trục frame, height và width. - eps (
float, mặc định là1e-6) — Epsilon cho các lớp chuẩn hóa. - causal_condition (
bool, mặc định làTrue) — Điều biến các token văn bản và ảnh điều kiện từt = 0. Bắt buộc cho việc đệm KV.
Transformer luồng đơn được sử dụng bởi Qwen-Image 2.1.
Latent của văn bản và hình ảnh chia sẻ một chuỗi duy nhất: các token của ảnh điều kiện được thay thế vào luồng văn bản tại các vị trí mà bộ mã hóa ngôn ngữ-thị giác đã dành sẵn cho chúng, và các token của ảnh đích được nối thêm vào. Một phép chiếu modulation dùng chung duy nhất cung cấp cho mọi khối, do đó các khối không giữ các tham số modulation của riêng chúng.
Hai hành vi đặc trưng cho phiên bản 2.1:
- Chú ý nhân quả theo khối — chú ý tuân theo
(q_idx >= kv_idx) or same_image_block, do đó chuỗi là nhân quả trong khi mỗi khối ảnh vẫn giữ tính hai chiều bên trong. Backend chú ýflexcho phép chú ý một lượt hiệu quả; nếu không có nó, mô hình sẽ dùng prefill SDPA đa lượt chính xác, xử lý từng khối riêng biệt. causal_condition— các token văn bản và ảnh điều kiện được điều biến từt = 0thay vì bước thời gian được lấy mẫu, điều này cũng khiến kích hoạt của chúng không phụ thuộc vào bước thời gian và do đó có thể được đệm (cache) qua các bước khử nhiễu.
build_token_metadata
< source >( image_pad_mask: Tensorimg_shapes: list ) → tuple[torch.Tensor, torch.Tensor]
Tham số
- image_pad_mask (
torch.Tensor) —(seq_len,)bool,Truetại các vị trí token ảnh. - img_shapes (
list[tuple[int, int, int]]) —(frame, height, width)theo từng ảnh, tính bằng số token tiềm ẩn, với các ảnh điều kiện đứng trước và ảnh đích đứng cuối.
Trả về
tuple[torch.Tensor, torch.Tensor]
image_ids (seq_len,) với -1 tại các vị trí văn bản và một id duy nhất cho mỗi khối hình ảnh, cùng target_token_mask (seq_len,) đánh dấu các token của hình ảnh đích.
Gán nhãn cho từng token của chuỗi kết hợp với khối hình ảnh mà nó thuộc về.
Các ranh giới khối được xác định từ số lượng token trong img_shapes, chứ không phải từ các chuỗi True liên tiếp trong image_pad_mask: hai ảnh điều kiện nằm cạnh nhau mà không có văn bản ở giữa sẽ tạo thành một chuỗi duy nhất nhưng vẫn phải được giữ làm các khối riêng biệt, nếu không chúng sẽ chú ý lẫn nhau theo hai chiều.
forward
< source >( hidden_states: Tensorencoder_hidden_states: Tensortimestep: Tensorimg_shapes: listimg_mask: Tensorencoder_hidden_states_mask: typing.Optional[torch.Tensor] = Noneattention_kwargs: dict[str, typing.Any] | None = Nonekv_cache: diffusers.models.transformers.transformer_qwenimage21.QwenImage21KVCache | None = Nonekv_cache_mode: str | None = Nonereturn_dict: bool = True ) → Transformer2DModelOutput or tuple
Tham số
- hidden_states (
torch.Tensorcó hình dạng(batch_size, image_sequence_length, in_channels)) — Các latent đã đóng gói, với các ảnh điều kiện ở trước và ảnh đích ở cuối. - encoder_hidden_states (
torch.Tensorcó hình dạng(batch_size, text_sequence_length, context_in_dim)) — Các vector nhúng văn bản từ bộ mã hóa thị giác-ngôn ngữ. - timestep (
torch.Tensor) — Bước khử nhiễu hiện tại, được quy đổi về[0, 1]. - img_shapes (
list[list[tuple[int, int, int]]]) — Danh sách theo từng mẫu gồm các(frame, height, width)trong latent tokens, với ảnh điều kiện đứng trước và ảnh đích đứng sau. Tất cả các mẫu phải cùng một bố cục. - img_mask (
torch.Tensorcó hình dạng(batch_size, vlm_sequence_length)) —Truetại các vị trí ảnh của bộ mã hóa thị giác-ngôn ngữ, mỗi vị trí đại diện cho một nhóm2x2các token tiềm ẩn. - encoder_hidden_states_mask (
torch.Tensor, tùy chọn) —(batch_size, text_sequence_length)bool đánh dấu các token văn bản hợp lệ. Các vị trí được đệm (padding) sẽ bị loại khỏi attention. - kv_cache (
QwenImage21KVCache, tuỳ chọn) — Bộ chứa cache. Truyền cùng vớikv_cache_modeđể bật tính năng cache KV tiền tố. - kv_cache_mode (
str, tùy chọn) —"extract"để prefill bộ nhớ đệm (bước khử nhiễu đầu tiên),"cached"để giải mã từ bộ nhớ đệm (các bước sau). Yêu cầucausal_condition=True. - attention_kwargs (
dict, tùy chọn) — Được chuyển tiếp đến các bộ xử lý attention và mangscalecho các lớp LoRA. - return_dict (
bool, tùy chọn, mặc định làTrue) — Có nên trả về một Transformer2DModelOutput thay vì một tuple thông thường hay không.
Trả về
Transformer2DModelOutput hoặc tuple
Transformer2DModelOutput nếu return_dict là True, ngược lại là một tuple thông thường mà phần tử đầu tiên là các latents đã khử nhiễu.
Transformer2DModelOutput
lớp diffusers.models.modeling_outputs.Transformer2DModelOutput
< source >( sample: torch.Tensor )
Tham số
- sample (
torch.Tensorcó hình dạng(batch_size, num_channels, height, width)hoặc(batch size, num_vector_embeds - 1, num_latent_pixels)nếu Transformer2DModel là rời rạc) — Trạng thái ẩn đầu ra được điều kiện bởi đầu vàoencoder_hidden_states. Nếu là rời rạc, trả về các phân phối xác suất cho các pixel tiềm ẩn không nhiễu.
Đầu ra của Transformer2DModel.