Diffusers documentation
SanaTransformer2DModel
SanaTransformer2DModel
Un modelo Diffusion Transformer para datos 2D de SANA: Efficient High-Resolution Image Synthesis with Linear Diffusion Transformers fue introducido por NVIDIA y MIT HAN Lab, por Enze Xie, Junsong Chen, Junyu Chen, Han Cai, Haotian Tang, Yujun Lin, Zhekai Zhang, Muyang Li, Ligeng Zhu, Yao Lu, Song Han.
El resumen del artículo es:
Presentamos Sana, un marco de texto a imagen que puede generar imágenes de forma eficiente hasta una resolución de 4096×4096. Sana puede sintetizar imágenes de alta resolución y alta calidad con una fuerte alineación texto-imagen a una velocidad notablemente rápida, y es desplegable en la GPU de un portátil. Los diseños principales incluyen: (1) Autoencoder de compresión profunda: a diferencia de los AE tradicionales, que comprimen las imágenes solo 8×, entrenamos un AE que puede comprimir las imágenes 32×, reduciendo efectivamente el número de tokens latentes. (2) DiT lineal: reemplazamos toda la atención vanilla en DiT con atención lineal, que es más eficiente en altas resoluciones sin sacrificar la calidad. (3) Codificador de texto solo decodificador: reemplazamos T5 con un pequeño LLM moderno solo decodificador como codificador de texto y diseñamos instrucciones humanas complejas con aprendizaje in-context para mejorar la alineación imagen-texto. (4) Entrenamiento y muestreo eficientes: proponemos Flow-DPM-Solver para reducir los pasos de muestreo, con etiquetado y selección de descripciones eficientes para acelerar la convergencia. Como resultado, Sana-0.6B es muy competitivo con el modelo de difusión gigante moderno (p. ej. Flux-12B), siendo 20 veces más pequeño y más de 100 veces más rápido en el rendimiento medido. Además, Sana-0.6B puede desplegarse en una GPU de portátil de 16GB, tardando menos de 1 segundo en generar una imagen de resolución 1024×1024. Sana permite la creación de contenido a bajo costo. El código y el modelo se publicarán.
El modelo se puede cargar con el siguiente fragmento de código.
from diffusers import SanaTransformer2DModel
transformer = SanaTransformer2DModel.from_pretrained("Efficient-Large-Model/Sana_1600M_1024px_BF16_diffusers", subfolder="transformer", dtype=torch.bfloat16)SanaTransformer2DModel
clase 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 )
Parámetros
- in_channels (
int, por defecto32) — El número de canales en la entrada. - out_channels (
int, opcional, valor predeterminado32) — El número de canales en la salida. - num_attention_heads (
int, por defecto70) — El número de cabezas a utilizar para la atención multi-cabeza. - attention_head_dim (
int, por defecto32) — El número de canales en cada cabeza. - num_layers (
int, por defecto20) — El número de capas de bloques Transformer a utilizar. - num_cross_attention_heads (
int, opcional, valor predeterminado20) — El número de cabezas a utilizar para la atención cruzada. - cross_attention_head_dim (
int, opcional, valor predeterminado112) — El número de canales en cada cabeza para la atención cruzada. - cross_attention_dim (
int, opcional, valor predeterminado2240) — El número de canales en la salida de la atención cruzada. - caption_channels (
int, por defecto2304) — El número de canales en los embeddings de la descripción. - mlp_ratio (
float, por defecto2.5) — La proporción de expansión a utilizar en la capa GLUMBConv. - dropout (
float, por defecto0.0) — La probabilidad de dropout. - attention_bias (
bool, por defectoFalse) — Si se debe usar sesgo en la capa de atención. - sample_size (
int, por defecto32) — El tamaño base del latente de entrada. - patch_size (
int, por defecto1) — El tamaño de los parches a utilizar en la capa de incrustación de parches. - norm_elementwise_affine (
bool, por defectoFalse) — Si se debe usar afinidad por elemento en la capa de normalización. - norm_eps (
float, por defecto1e-6) — El valor de epsilon para la capa de normalización. - qk_norm (
str, opcional, valor predeterminadoNone) — La normalización a utilizar para la consulta y la clave. - timestep_scale (
float, por defecto1.0) — La escala a utilizar para los pasos de tiempo.
Un modelo Transformer 2D introducido en la familia de modelos 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 )
Parámetros
- hidden_states (
torch.Tensorde forma(batch_size, in_channels, height, width)) — Entradahidden_states. - encoder_hidden_states (
torch.Tensorde forma(batch_size, sequence_len, embed_dims)) — Incrustaciones condicionales (incrustaciones calculadas a partir de las condiciones de entrada, como los prompts) que se deben utilizar. - timestep (
torch.LongTensor) — Se utiliza para indicar el paso de desruido. - guidance (
torch.Tensor, opcional) — Incrustación de escala de orientación. - encoder_attention_mask (
torch.Tensor, opcional) — Máscara de atención cruzada aplicada aencoder_hidden_states. - attention_mask (
torch.Tensor, opcional) — Máscara de autoatención aplicada ahidden_states. - attention_kwargs (
dict, opcional) — Un diccionario de kwargs que, si se especifica, se pasa alAttentionProcessordefinido enself.processordentro de diffusers.models.attention_processor. - controlnet_block_samples (
tupledetorch.Tensor, opcional) — Una lista de tensores que, si se especifica, se añaden a los residuos de los bloques del transformer. - return_dict (
bool, opcional, valor predeterminadoTrue) — Indica si se debe devolver un~models.transformer_2d.Transformer2DModelOutputen lugar de una tupla simple.
El método forward de SanaTransformer2DModel.
Transformer2DModelOutput
clase diffusers.models.modeling_outputs.Transformer2DModelOutput
< source >( sample: torch.Tensor )
Parámetros
- sample (
torch.Tensorde forma(batch_size, num_channels, height, width)o(batch size, num_vector_embeds - 1, num_latent_pixels)si Transformer2DModel es discreto) — La salida de estados ocultos condicionada a la entradaencoder_hidden_states. Si es discreto, devuelve distribuciones de probabilidad para los píxeles latentes sin ruido.
La salida de Transformer2DModel.