# SanaTransformer2DModel

A Diffusion Transformer model for 2D data from [SANA: Efficient High-Resolution Image Synthesis with Linear Diffusion Transformers](https://huggingface.co/papers/2410.10629) was introduced from NVIDIA and MIT HAN Lab, by Enze Xie, Junsong Chen, Junyu Chen, Han Cai, Haotian Tang, Yujun Lin, Zhekai Zhang, Muyang Li, Ligeng Zhu, Yao Lu, Song Han.

ملخص الورقة البحثية هو:

*نقدّم Sana، وهو إطار لتوليد الصور من النص قادر على توليد صور بكفاءة تصل دقتها إلى 4096×4096. يمكن لـ Sana توليد صور عالية الدقة والجودة مع توافق قوي بين النص والصورة بسرعة فائقة، ويمكن نشره على وحدة معالجة رسومية في حاسوب محمول. تشمل التصاميم الأساسية: (1) مُشفِّر تلقائي ضاغط بعمق: على عكس المُشفِّفات التلقائية التقليدية التي تضغط الصور 8× فقط، درّبنا مُشفِّفاً تلقائياً يمكنه ضغط الصور 32×، مما يقلل بشكل فعال عدد الرموز الكامنة. (2) DiT الخطي: استبدلنا كل الانتباه العادي في DiT بالانتباه الخطي، وهو أكثر كفاءة عند الدقات العالية دون التضحية بالجودة. (3) مُشفِّر نصي يعتمد على المُفكِّك فقط: استبدلنا T5 بنموذج لغوي صغير حديث يعتمد على المُفكِّك فقط كمُشفِّر للنص، وصممنا تعليمات بشرية معقدة باستخدام التعلم في السياق لتعزيز التوافق بين الصورة والنص. (4) تدريب وعيّنة فعّالان: نقترح Flow-DPM-Solver لتقليل خطوات العينة، مع تسمية واختيار فعّالين للوصف لتسريع التقارب. ونتيجة لذلك، يُعد Sana-0.6B منافساً قوياً لنماذج الانتشار العملاقة الحديثة (مثل Flux-12B)، فهو أصغر بـ 20 مرة وأسرع بأكثر من 100 مرة في معدل الإنتاج المقاس. علاوة على ذلك، يمكن نشر Sana-0.6B على وحدة معالجة رسومية بحجم 16 جيجابايت في حاسوب محمول، ويستغرق أقل من ثانية واحدة لتوليد صورة بدقة 1024×1024. يتيح Sana إنشاء المحتوى بتكلفة منخفضة. سيتم إصدار الكود والنموذج علنياً.*

يمكن تحميل النموذج باستخدام مقتطف الشيفرة التالي.

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

[المصدر](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/transformers/sana_transformer.py#L294)

**المعاملات:**

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`) : عدد القنوات في تضمينات الوصف.

mlp_ratio (`float`، القيمة الافتراضية `2.5`) : نسبة التوسيع المستخدمة في طبقة GLUMBConv.

dropout (`float`، القيمة الافتراضية `0.0`) : احتمال الإسقاط (dropout).

attention_bias (`bool`، القيمة الافتراضية `False`) : ما إذا كان سيتم استخدام الانحياز في طبقة الانتباه.

sample_size (`int`، القيمة الافتراضية `32`) : الحجم الأساسي للكامن المُدخل.

patch_size (`int`، القيمة الافتراضية `1`) : حجم البقع المستخدمة في طبقة تضمين البقع.

norm_elementwise_affine (`bool`، القيمة الافتراضية `False`) : ما إذا كان سيتم استخدام التقارب العنصري في طبقة التطبيع.

norm_eps (`float`، القيمة الافتراضية `1e-6`) : قيمة إبسيلون لطبقة التطبيع.

qk_norm (`str`، *اختياري*، القيمة الافتراضية `None`) : طريقة التطبيع المستخدمة للاستعلام والمفتاح.

timestep_scale (`float`، القيمة الافتراضية `1.0`) : المقياس المستخدم للخطوات الزمنية.

نموذج Transformer ثنائي الأبعاد تم تقديمه في عائلة نماذج [Sana](https://huggingface.co/papers/2410.10629).

#### 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)
```

[المصدر](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/transformers/sana_transformer.py#L419)

**المعاملات:**

hidden_states (`torch.Tensor` من الشكل `(batch_size, in_channels, height, width)`) : مدخلات `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 يُمرَّر إلى `AttentionProcessor` إذا تم تحديده، كما هو معرَّف تحت `self.processor` في [diffusers.models.attention_processor](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/attention_processor.py).

controlnet_block_samples (`tuple` من `torch.Tensor`، *اختياري*) : قائمة من الموترات التي إذا تم تحديدها تُضاف إلى بقايا كتل التحويل.

return_dict (`bool`، *اختياري*، القيمة الافتراضية `True`) : ما إذا كان يجب إرجاع `~models.transformer_2d.Transformer2DModelOutput` بدلاً من tuple عادي.

**يعيد:**

إذا كان `return_dict` صحيحًا، يُعاد `~models.transformer_2d.Transformer2DModelOutput`، وإلا يُعاد `tuple` يكون عنصره الأول هو تينسور العينة.

طريقة [SanaTransformer2DModel](/docs/diffusers/main/ar/api/models/sana_transformer2d#diffusers.SanaTransformer2DModel) الأمامية.

## 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)
```

[المصدر](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/modeling_outputs.py#L21)

**المعاملات:**

sample (`torch.Tensor` من الشكل `(batch_size, num_channels, height, width)` أو `(batch size, num_vector_embeds - 1, num_latent_pixels)` إذا كان [Transformer2DModel](/docs/diffusers/main/ar/api/models/transformer2d#diffusers.Transformer2DModel) منفصلاً): مخرجات الحالات المخفية المشروطة على مدخل `encoder_hidden_states`. إذا كان منفصلاً، يعيد توزيعات الاحتمال للبكسلات الكامنة غير الملوثة.

مخرجات [Transformer2DModel](/docs/diffusers/main/ar/api/models/transformer2d#diffusers.Transformer2DModel).

