# SanaTransformer2DModel

[SANA: Efficient High-Resolution Image Synthesis with Linear Diffusion Transformers](https://huggingface.co/papers/2410.10629) makalesinden 2D veriler için bir Diffusion Transformer modeli, NVIDIA ve MIT HAN Lab tarafından Enze Xie, Junsong Chen, Junyu Chen, Han Cai, Haotian Tang, Yujun Lin, Zhekai Zhang, Muyang Li, Ligeng Zhu, Yao Lu, Song Han tarafından tanıtıldı.

Makalenin özeti şudur:

*Sana'yı tanıtıyoruz; 4096×4096 çözünürlüğe kadar görüntüleri verimli bir şekilde üretebilen bir metinden görüntüye çerçevesi. Sana, son derece yüksek hızda, güçlü metin-görüntü hizalamasına sahip yüksek çözünürlüklü ve yüksek kaliteli görüntüler sentezleyebilir ve dizüstü bilgisayar GPU'larında dağıtılabilir. Temel tasarımlar şunları içerir: (1) Derin sıkıştırma otoenkoder: görüntüleri yalnızca 8× sıkıştıran geleneksel AE'lerin aksine, görüntüleri 32× sıkıştırabilen bir AE eğittik; bu, latent token sayısını etkili bir şekilde azaltır. (2) Doğrusal DiT: DiT'deki tüm standart dikkat mekanizmalarını, kaliteden ödün vermeden yüksek çözünürlüklerde daha verimli olan doğrusal dikkatle değiştirdik. (3) Sadece çözücü metin kodlayıcı: T5'i, metin kodlayıcı olarak modern, yalnızca çözücü tabanlı küçük bir LLM ile değiştirdik ve görüntü-metin hizalamasını güçlendirmek için bağlam içi öğrenme ile karmaşık insan talimatları tasarladık. (4) Verimli eğitim ve örneklem: örneklem adımlarını azaltmak için Flow-DPM-Solver öneriyoruz; yakınsamayı hızlandırmak için verimli başlık etiketleme ve seçimi kullanıyoruz. Sonuç olarak, Sana-0.6B, modern dev difüzyon modelleriyle (ör. Flux-12B) çok rekabetçidir; 20 kat daha küçük olup ölçülen verimlilikte 100+ kat daha hızlıdır. Ayrıca, Sana-0.6B, 16GB'lık bir dizüstü bilgisayar GPU'suna dağıtılabilir ve 1024×1024 çözünürlüğünde bir görüntü üretmek için 1 saniyeden az zaman alır. Sana, düşük maliyetle içerik oluşturmaya olanak tanır. Kod ve model kamuya açık olarak yayınlanacaktır.*

Model, aşağıdaki kod parçasıyla yüklenebilir.

```python
from diffusers import SanaTransformer2DModel

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

## SanaTransformer2DModel[[diffusers.SanaTransformer2DModel]]

#### diffusers.SanaTransformer2DModel[[diffusers.SanaTransformer2DModel]]

```python
diffusers.SanaTransformer2DModel(in_channels: int = 32, out_channels: int | None = 32, num_attention_heads: int = 70, attention_head_dim: int = 32, num_layers: int = 20, num_cross_attention_heads: int | None = 20, cross_attention_head_dim: int | None = 112, cross_attention_dim: int | None = 2240, caption_channels: int = 2304, mlp_ratio: float = 2.5, dropout: float = 0.0, attention_bias: bool = False, sample_size: int = 32, patch_size: int = 1, norm_elementwise_affine: bool = False, norm_eps: float = 1e-06, interpolation_scale: int | None = None, guidance_embeds: bool = False, guidance_embeds_scale: float = 0.1, qk_norm: str | None = None, timestep_scale: float = 1.0)
```

[Kaynak](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/transformers/sana_transformer.py#L294)

**Parametreler:**

in_channels (`int`, varsayılan `32`) : Girdideki kanal sayısı.

out_channels (`int`, *isteğe bağlı*, varsayılan `32`) : Çıktıdaki kanal sayısı.

num_attention_heads (`int`, varsayılan `70`) : Çok başlı dikkat için kullanılacak baş sayısı.

attention_head_dim (`int`, varsayılan `32`) : Her baştaki kanal sayısı.

num_layers (`int`, varsayılan `20`) : Kullanılacak Transformer bloğu katman sayısı.

num_cross_attention_heads (`int`, *isteğe bağlı*, varsayılan `20`) : Çapraz dikkat için kullanılacak baş sayısı.

cross_attention_head_dim (`int`, *isteğe bağlı*, varsayılan `112`) : Çapraz dikkat için her baştaki kanal sayısı.

cross_attention_dim (`int`, *isteğe bağlı*, varsayılan `2240`) : Çapraz dikkat çıktısındaki kanal sayısı.

caption_channels (`int`, varsayılan `2304`) : Başlık gömme vektörlerindeki kanal sayısı.

mlp_ratio (`float`, varsayılan `2.5`) : GLUMBConv katmanında kullanılacak genişletme oranı.

dropout (`float`, varsayılan `0.0`) : Dropout olasılığı.

attention_bias (`bool`, varsayılan `False`) : Dikkat katmanında önyargı (bias) kullanılıp kullanılmayacağı.

sample_size (`int`, varsayılan `32`) : Girdi latentinin temel boyutu.

patch_size (`int`, varsayılan `1`) : Yama gömme katmanında kullanılacak yamaların boyutu.

norm_elementwise_affine (`bool`, varsayılan `False`) : Normalizasyon katmanında öge bazlı yakınlığın (elementwise affinity) kullanılıp kullanılmayacağı.

norm_eps (`float`, varsayılan `1e-6`) : Normalizasyon katmanı için epsilon değeri.

qk_norm (`str`, *isteğe bağlı*, varsayılan `None`) : Sorgu ve anahtar için kullanılacak normalizasyon.

timestep_scale (`float`, varsayılan `1.0`) : Zaman adımları için kullanılacak ölçek.

[Sana](https://huggingface.co/papers/2410.10629) model ailesinde tanıtılan 2B Transformer modeli.

#### forward[[diffusers.SanaTransformer2DModel.forward]]

```python
forward(hidden_states: Tensor, encoder_hidden_states: Tensor, timestep: Tensor, guidance: typing.Optional[torch.Tensor] = None, encoder_attention_mask: typing.Optional[torch.Tensor] = None, attention_mask: typing.Optional[torch.Tensor] = None, attention_kwargs: dict[str, typing.Any] | None = None, controlnet_block_samples: tuple[torch.Tensor] | None = None, return_dict: bool = True)
```

[Kaynak](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/transformers/sana_transformer.py#L419)

**Parametreler:**

hidden_states (`torch.Tensor`, şekli `(batch_size, in_channels, height, width)`) : Girdi `hidden_states`.

encoder_hidden_states (`torch.Tensor`, şekli `(batch_size, sequence_len, embed_dims)`) : Kullanılacak koşullu gömlemeler (giriş koşullarından, örneğin istemlerden hesaplanan gömlemeler).

timestep (`torch.LongTensor`) : Gürültü azaltma adımını belirtmek için kullanılır.

guidance (`torch.Tensor`, *isteğe bağlı*) : Rehberlik ölçeği gömme (embedding).

encoder_attention_mask (`torch.Tensor`, *isteğe bağlı*) : `encoder_hidden_states`'e uygulanan çapraz dikkat maskesi.

attention_mask (`torch.Tensor`, *isteğe bağlı*) : `hidden_states`'e uygulanan öz-dikkat maskesi.

attention_kwargs (`dict`, *isteğe bağlı*) : Belirtilirse, [diffusers.models.attention_processor](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/attention_processor.py) içinde `self.processor` altında tanımlanan `AttentionProcessor`'a iletilen bir kwargs sözlüğü.

controlnet_block_samples (`tuple` of `torch.Tensor`, *opsiyonel*) : Belirtilirse, transformer bloklarının artımlarına eklenen tensörlerin listesi.

return_dict (`bool`, *isteğe bağlı*, varsayılan `True`) : Düz bir tuple yerine `~models.transformer_2d.Transformer2DModelOutput` döndürülüp döndürülmediğini belirtir.

**Dönüş:**

`return_dict` True ise, `~models.transformer_2d.Transformer2DModelOutput` döndürülür, aksi takdirde ilk öğesi örnek tensörü olan bir `tuple` döndürülür.

[SanaTransformer2DModel](/docs/diffusers/main/tr/api/models/sana_transformer2d#diffusers.SanaTransformer2DModel) ileri yöntemi.

## Transformer2DModelOutput[[diffusers.models.modeling_outputs.Transformer2DModelOutput]]

#### diffusers.models.modeling_outputs.Transformer2DModelOutput[[diffusers.models.modeling_outputs.Transformer2DModelOutput]]

```python
diffusers.models.modeling_outputs.Transformer2DModelOutput(sample: torch.Tensor)
```

[Kaynak](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/modeling_outputs.py#L21)

**Parametreler:**

sample (`torch.Tensor`, şekli `(batch_size, num_channels, height, width)` veya [Transformer2DModel](/docs/diffusers/main/tr/api/models/transformer2d#diffusers.Transformer2DModel) ayrık (discrete) ise `(batch size, num_vector_embeds - 1, num_latent_pixels)`) : `encoder_hidden_states` girdisine koşullu gizli durum (hidden states) çıktısı. Ayrık (discrete) ise, gürültüsü olmayan (unnoised) gizli (latent) pikseller için olasılık dağılımlarını döndürür.

[Transformer2DModel](/docs/diffusers/main/tr/api/models/transformer2d#diffusers.Transformer2DModel)'nin çıktısı.

