Diffusers documentation
SanaTransformer2DModel
SanaTransformer2DModel
Một mô hình Diffusion Transformer cho dữ liệu 2D từ SANA: Efficient High-Resolution Image Synthesis with Linear Diffusion Transformers đã được giới thiệu bởi NVIDIA và MIT HAN Lab, do Enze Xie, Junsong Chen, Junyu Chen, Han Cai, Haotian Tang, Yujun Lin, Zhekai Zhang, Muyang Li, Ligeng Zhu, Yao Lu, Song Han thực hiện.
Tóm tắt từ bài báo là:
Chúng tôi giới thiệu Sana, một framework tạo ảnh từ văn bản có khả năng tạo ảnh hiệu quả với độ phân giải lên đến 4096×4096. Sana có thể tổng hợp các hình ảnh độ phân giải cao, chất lượng cao với sự tương ứng mạnh mẽ giữa văn bản và hình ảnh ở tốc độ cực kỳ nhanh, có thể triển khai trên GPU của laptop. Các thiết kế cốt lõi bao gồm: (1) Autoencoder nén sâu: khác với các AE truyền thống chỉ nén ảnh 8×, chúng tôi đã huấn luyện một AE có thể nén ảnh 32×, giảm hiệu quả số lượng token tiềm ẩn. (2) Linear DiT: chúng tôi thay thế tất cả các vanilla attention trong DiT bằng linear attention, hiệu quả hơn ở độ phân giải cao mà không làm giảm chất lượng. (3) Text encoder chỉ có decoder: chúng tôi thay thế T5 bằng các LLM nhỏ hiện đại chỉ có decoder làm text encoder và thiết kế các chỉ dẫn phức tạp từ con người với in-context learning để tăng cường sự tương ứng giữa hình ảnh và văn bản. (4) Huấn luyện và lấy mẫu hiệu quả: chúng tôi đề xuất Flow-DPM-Solver để giảm số bước lấy mẫu, kết hợp với việc gắn nhãn và chọn lọc caption hiệu quả để tăng tốc hội tụ. Kết quả là, Sana-0.6B rất cạnh tranh với các mô hình khuếch tán khổng lồ hiện đại (ví dụ: Flux-12B), nhỏ hơn 20 lần và nhanh hơn 100+ lần về thông lượng đo được. Hơn nữa, Sana-0.6B có thể được triển khai trên GPU laptop 16GB, mất ít hơn 1 giây để tạo một hình ảnh độ phân giải 1024×1024. Sana cho phép tạo nội dung với chi phí thấp. Mã và mô hình sẽ được công bố công khai.
Mô hình có thể được tải bằng đoạn mã sau.
from diffusers import SanaTransformer2DModel
transformer = SanaTransformer2DModel.from_pretrained("Efficient-Large-Model/Sana_1600M_1024px_BF16_diffusers", subfolder="transformer", dtype=torch.bfloat16)SanaTransformer2DModel
lớp diffusers.SanaTransformer2DModel
< source >( in_channels: int = 32out_channels: int | None = 32num_attention_heads: int = 70attention_head_dim: int = 32num_layers: int = 20num_cross_attention_heads: int | None = 20cross_attention_head_dim: int | None = 112cross_attention_dim: int | None = 2240caption_channels: int = 2304mlp_ratio: float = 2.5dropout: float = 0.0attention_bias: bool = Falsesample_size: int = 32patch_size: int = 1norm_elementwise_affine: bool = Falsenorm_eps: float = 1e-06interpolation_scale: int | None = Noneguidance_embeds: bool = Falseguidance_embeds_scale: float = 0.1qk_norm: str | None = Nonetimestep_scale: float = 1.0 )
Tham số
- in_channels (
int, mặc định là32) — Số lượng kênh trong đầu vào. - out_channels (
int, tùy chọn, mặc định là32) — Số lượng kênh trong đầu ra. - num_attention_heads (
int, mặc định là70) — Số lượng đầu (heads) được sử dụng cho cơ chế chú ý đa đầu (multi-head attention). - attention_head_dim (
int, mặc định là32) — Số lượng kênh trong mỗi head. - num_layers (
int, mặc định là20) — Số lượng lớp khối Transformer cần sử dụng. - num_cross_attention_heads (
int, tùy chọn, mặc định là20) — Số lượng heads sử dụng cho cross-attention. - cross_attention_head_dim (
int, tùy chọn, mặc định là112) — Số lượng kênh trong mỗi head cho cross-attention. - cross_attention_dim (
int, tùy chọn, mặc định là2240) — Số lượng kênh trong đầu ra của cross-attention. - caption_channels (
int, mặc định là2304) — Số lượng kênh trong các embedding mô tả. - mlp_ratio (
float, mặc định là2.5) — Tỷ lệ mở rộng được sử dụng trong lớp GLUMBConv. - dropout (
float, mặc định là0.0) — Xác suất dropout. - attention_bias (
bool, mặc định làFalse) — Có sử dụng bias trong lớp attention hay không. - sample_size (
int, mặc định là32) — Kích thước cơ bản của latent đầu vào. - patch_size (
int, mặc định là1) — Kích thước của các patch được sử dụng trong lớp nhúng patch. - norm_elementwise_affine (
bool, mặc định làFalse) — Có sử dụng tính liên kết từng phần tử trong lớp chuẩn hóa hay không. - norm_eps (
float, mặc định là1e-6) — Giá trị epsilon cho lớp chuẩn hóa. - qk_norm (
str, tùy chọn, mặc định làNone) — Phương pháp chuẩn hóa được sử dụng cho query và key. - timestep_scale (
float, mặc định là1.0) — Hệ số tỷ lệ cần sử dụng cho các bước thời gian (timesteps).
Mô hình Transformer 2D được giới thiệu trong dòng mô hình Sana.
forward
< source >( hidden_states: Tensorencoder_hidden_states: Tensortimestep: Tensorguidance: typing.Optional[torch.Tensor] = Noneencoder_attention_mask: typing.Optional[torch.Tensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Noneattention_kwargs: dict[str, typing.Any] | None = Nonecontrolnet_block_samples: tuple[torch.Tensor] | None = Nonereturn_dict: bool = True )
Tham số
- hidden_states (
torch.Tensorcó hình dạng(batch_size, in_channels, height, width)) —hidden_statesđầu vào. - encoder_hidden_states (
torch.Tensorcó hình dạng(batch_size, sequence_len, embed_dims)) — Các embedding điều kiện (embedding được tính từ các điều kiện đầu vào như prompt) cần sử dụng. - timestep (
torch.LongTensor) — Dùng để chỉ bước khử nhiễu. - guidance (
torch.Tensor, tùy chọn) — Nhúng thang độ hướng dẫn. - encoder_attention_mask (
torch.Tensor, tùy chọn) — Mặt nạ cross-attention được áp dụng choencoder_hidden_states. - attention_mask (
torch.Tensor, tùy chọn) — Mặt nạ self-attention được áp dụng chohidden_states. - attention_kwargs (
dict, tùy chọn) — Một từ điển kwargs, nếu được chỉ định, sẽ được truyền đếnAttentionProcessornhư đã định nghĩa dướiself.processortrong diffusers.models.attention_processor. - controlnet_block_samples (
tuplecủatorch.Tensor, tùy chọn) — Một danh sách các tensor mà nếu được chỉ định sẽ được cộng vào phần dư (residuals) của các khối transformer. - return_dict (
bool, tùy chọn, mặc định làTrue) — Có nên trả về một~models.transformer_2d.Transformer2DModelOutputthay vì một tuple thông thường hay không.
Phương thức forward của SanaTransformer2DModel.
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.