Diffusers documentation

SanaTransformer2DModel

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.43.0).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

SanaTransformer2DModel

NVIDIA 和 MIT HAN Lab 的 Enze Xie、Junsong Chen、Junyu Chen、Han Cai、Haotian Tang、Yujun Lin、Zhekai Zhang、Muyang Li、Ligeng Zhu、Yao Lu、Song Han 在 SANA: Efficient High-Resolution Image Synthesis with Linear Diffusion Transformers 中介绍了一种用于 2D 数据的 Diffusion Transformer 模型。

该论文的摘要如下:

我们推出了 Sana,一个能够高效生成最高达 4096×4096 分辨率图像的文本到图像框架。Sana 能够以极快的速度合成高分辨率、高质量且文本-图像对齐度强的图像,并且可以部署在笔记本电脑 GPU 上。其核心设计包括:(1) 深度压缩自编码器:与传统仅将图像压缩 8 倍的自编码器不同,我们训练了一个能够将图像压缩 32 倍的自编码器,从而有效减少潜在 token 的数量。(2) 线性 DiT:我们将 DiT 中所有的标准注意力机制替换为线性注意力机制,使其在高分辨率下更加高效,同时不牺牲质量。(3) 仅解码器文本编码器:我们用现代仅解码器的小型 LLM 替换了 T5 作为文本编码器,并设计了复杂的人类指令,通过上下文学习来增强图像-文本对齐。(4) 高效的训练与采样:我们提出了 Flow-DPM-Solver 以减少采样步数,并通过高效的字幕标注和选择来加速收敛。因此,Sana-0.6B 与当今的大型扩散模型(例如 Flux-12B)相比极具竞争力,其体积缩小了 20 倍,实测吞吐量提升了 100 倍以上。此外,Sana-0.6B 可以部署在 16GB 的笔记本电脑 GPU 上,生成一张 1024×1024 分辨率的图像所需时间不到 1 秒。Sana 实现了低成本的创作。代码和模型将公开发布。

可以使用以下代码片段加载该模型。

from diffusers import SanaTransformer2DModel

transformer = SanaTransformer2DModel.from_pretrained("Efficient-Large-Model/Sana_1600M_1024px_BF16_diffusers", subfolder="transformer", dtype=torch.bfloat16)

SanaTransformer2DModel

class diffusers.SanaTransformer2DModel

< >

( 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 )

参数

  • in_channels (int,默认为 32) — 输入数据的通道数。
  • out_channels (int,可选,默认为 32) — 输出中的通道数。
  • num_attention_heads (int,默认为 70) — 多头注意力机制中使用的注意力头数量。
  • attention_head_dim (int,默认为 32) — 每个注意力头中的通道数。
  • num_layers(int,默认为 20)— 要使用的 Transformer 块层数。
  • num_cross_attention_heads (int,可选,默认为 20) — 用于交叉注意力的注意力头数量。
  • cross_attention_head_dim (int,可选,默认为 112) — 交叉注意力中每个头的通道数。
  • cross_attention_dim (int,可选,默认为 2240) — 交叉注意力输出的通道数。
  • caption_channels (int,默认为 2304) — caption 嵌入的通道数。
  • mlp_ratio (float,默认为 2.5) — GLUMBConv 层中使用的扩展比率。
  • dropout (float,默认为 0.0) — Dropout 概率。
  • attention_bias (bool,默认为 False) — 是否在注意力层中使用偏置。
  • sample_size (int,默认为 32) — 输入潜变量的基础尺寸。
  • patch_size (int,默认为 1) — 用于 patch 嵌入层的 patch 大小。
  • norm_elementwise_affine (bool,默认为 False) — 是否在归一化层中使用逐元素仿射变换。
  • norm_eps (float,默认为 1e-6) — 归一化层的 epsilon 值。
  • qk_norm (str, 可选,默认为 None) — 用于查询和键的归一化方法。
  • timestep_scale (float,默认为 1.0) — 用于时间步的缩放系数。

在 Sana 系列模型中引入的一种 2D Transformer 模型。

forward

< >

( 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 )

参数

  • hidden_states(形状为 (batch_size, in_channels, height, width) 的 torch.Tensor)— 输入的 hidden_states。
  • encoder_hidden_states (torch.Tensor,形状为 (batch_size, sequence_len, embed_dims)) — 要使用的条件嵌入(从输入条件(例如提示词)计算得出的嵌入)。
  • timestep (torch.LongTensor) — 用于指示去噪步骤。
  • guidance (torch.Tensor,可选) — 引导尺度嵌入。
  • encoder_attention_mask (torch.Tensor, 可选) — 应用于 encoder_hidden_states 的交叉注意力掩码。
  • attention_mask (torch.Tensor, 可选) — 应用于 hidden_states 的自注意力掩码。
  • attention_kwargs (dict, 可选) — 一个 kwargs 字典,如果指定,将传递给 diffusers.models.attention_processor 中定义的 AttentionProcessor,该处理器在 self.processor 下定义。
  • controlnet_block_samples(tuple of torch.Tensor,可选)— 一个张量列表,如果指定,将被添加到 transformer 块的残差中。
  • return_dict (bool,可选,默认为 True) — 是否返回 ~models.transformer_2d.Transformer2DModelOutput 而不是普通的元组。

SanaTransformer2DModel 的前向方法。

Transformer2DModelOutput

类 diffusers.models.modeling_outputs.Transformer2DModelOutput

< >

( sample: torch.Tensor )

参数

  • sample(形状为 (batch_size, num_channels, height, width) 的 torch.Tensor,或者如果 Transformer2DModel 是离散的,则为 (batch size, num_vector_embeds - 1, num_latent_pixels))— 以 encoder_hidden_states 输入为条件的隐藏状态输出。如果是离散的,则返回未加噪潜在像素的概率分布。

Transformer2DModel 的输出。

Update on GitHub