# UNet2DModel

تم تقديم نموذج [UNet](https://huggingface.co/papers/1505.04597) في الأصل بواسطة Ronneberger et al. لتجزئة الصور الطبية الحيوية، لكنه يُستخدم أيضاً بشكل شائع في 🤗 Diffusers لأنه يُخرج صوراً بنفس حجم المدخلات. وهو أحد أهم مكونات نظام الانتشار لأنه ييسّر عملية الانتشار الفعلية. توجد عدة متغيرات لنموذج UNet في 🤗 Diffusers، اعتماداً على عدد أبعاده وعلى ما إذا كان نموذجاً شرطياً أم لا. هذا نموذج UNet ثنائي الأبعاد.

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

*يوجد إجماع واسع على أن التدريب الناجح للشبكات العميقة يتطلب آلاف الأمثلة التدريبية الموسومة. في هذه الورقة، نقدم شبكة واستراتيجية تدريب تعتمدان على الاستخدام القوي لزيادة البيانات لاستخدام الأمثلة الموسومة المتاحة بكفاءة أكبر. تتكون البنية من مسار انكماشي لالتقاط السياق ومسار متوسع متماثل يمكّن من تحديد دقيق للمواقع. نُظهر أن مثل هذه الشبكة يمكن تدريبها من البداية إلى النهاية من عدد قليل جداً من الصور، وتتفوق على أفضل طريقة سابقة (شبكة تلافيفية بنافذة منزلقة) في تحدي ISBI لتجزئة الهياكل العصبية في المكدسات المجهرية الإلكترونية. وباستخدام نفس الشبكة المدرَّبة على صور المجهر الضوئي المنقول (تباين الطور وDIC)، فزنا بتحدي ISBI لتتبع الخلايا 2015 في هذه الفئات بفارق كبير. علاوة على ذلك، الشبكة سريعة. تستغرق تجزئة صورة 512x512 أقل من ثانية على وحدة معالجة رسومية حديثة. تتوفر التنفيذ الكامل (المبني على Caffe) والشبكات المدرَّبة على http://lmb.informatik.uni-freiburg.de/people/ronneber/u-net.*

## UNet2DModel[[diffusers.UNet2DModel]]

#### diffusers.UNet2DModel[[diffusers.UNet2DModel]]

```python
diffusers.UNet2DModel(sample_size: int | tuple[int, int] | None = None, in_channels: int = 3, out_channels: int = 3, center_input_sample: bool = False, time_embedding_type: str = 'positional', time_embedding_dim: int | None = None, freq_shift: int = 0, flip_sin_to_cos: bool = True, down_block_types: tuple[str, ...] = ('DownBlock2D', 'AttnDownBlock2D', 'AttnDownBlock2D', 'AttnDownBlock2D'), mid_block_type: str | None = 'UNetMidBlock2D', up_block_types: tuple[str, ...] = ('AttnUpBlock2D', 'AttnUpBlock2D', 'AttnUpBlock2D', 'UpBlock2D'), block_out_channels: tuple[int, ...] = (224, 448, 672, 896), layers_per_block: int = 2, mid_block_scale_factor: float = 1, downsample_padding: int = 1, downsample_type: str = 'conv', upsample_type: str = 'conv', dropout: float = 0.0, act_fn: str = 'silu', attention_head_dim: int | None = 8, norm_num_groups: int = 32, attn_norm_num_groups: int | None = None, norm_eps: float = 1e-05, resnet_time_scale_shift: str = 'default', add_attention: bool = True, class_embed_type: str | None = None, num_class_embeds: int | None = None, num_train_timesteps: int | None = None)
```

[المصدر](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/models/unets/unet_2d.py#L39)

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

sample_size (`int` أو `tuple[int, int]`، *اختياري*، القيمة الافتراضية `None`) : ارتفاع وعينة الإدخال/الإخراج. يجب أن تكون الأبعاد مضاعفًا لـ `2 ** (len(block_out_channels) - 1)`.

in_channels (`int`، *اختياري*، القيمة الافتراضية 3) : عدد القنوات في العينة المدخلة.

out_channels (`int`، *اختياري*، القيمة الافتراضية 3) : عدد القنوات في المخرجات.

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

time_embedding_type (`str`، *اختياري*، القيمة الافتراضية `"positional"`) : نوع تضمين الوقت المستخدم.

freq_shift (`int`، *اختياري*، القيمة الافتراضية 0) : إزاحة التردد للتضمين الزمني لـ Fourier.

flip_sin_to_cos (`bool`، *اختياري*، القيمة الافتراضية `True`) : ما إذا كان يجب عكس sin إلى cos لتضمين الوقت في فورييه.

down_block_types (`tuple[str]`، *اختياري*، القيمة الافتراضية `("DownBlock2D", "AttnDownBlock2D", "AttnDownBlock2D", "AttnDownBlock2D")`) : مجموعة من أنواع كتل التقليل (downsample).

mid_block_type (`str`، *اختياري*، القيمة الافتراضية `"UNetMidBlock2D"`) : نوع الكتلة في منتصف UNet، يمكن أن يكون إما `UNetMidBlock2D` أو `None`.

up_block_types (`tuple[str]`، *اختياري*، القيمة الافتراضية `("AttnUpBlock2D", "AttnUpBlock2D", "AttnUpBlock2D", "UpBlock2D")`) : مجموعة من أنواع كتل التوسيع.

block_out_channels (`tuple[int]`، *اختياري*، القيمة الافتراضية `(224, 448, 672, 896)`) : مجموعة من قنوات المخرجات لكل كتلة.

layers_per_block (`int`، *اختياري*، القيمة الافتراضية `2`) : عدد الطبقات في كل كتلة.

mid_block_scale_factor (`float`، *اختياري*، القيمة الافتراضية `1`) : معامل المقياس للكتلة الوسطى.

downsample_padding (`int`، *اختياري*، القيمة الافتراضية `1`) : الحشو الخاص بتمرير التقليل (downsample convolution).

downsample_type (`str`، *اختياري*، الافتراضي `conv`) : نوع التصفية (downsample) لطبقات التصفية. اختر بين "conv" و "resnet"

upsample_type (`str`، *اختياري*، الافتراضي `conv`) : نوع التوسيع لطبقات التوسيع. اختر بين "conv" و "resnet"

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

act_fn (`str`، *اختياري*، القيمة الافتراضية `"silu"`) : دالة التنشيط المستخدمة.

attention_head_dim (`int`، *اختياري*، القيمة الافتراضية `8`) : بُعد رأس الانتباه.

norm_num_groups (`int`، *اختياري*، القيمة الافتراضية `32`) : عدد المجموعات للتطبيع.

attn_norm_num_groups (`int`, *اختياري*، القيمة الافتراضية `None`) : إذا تم تعيينه إلى عدد صحيح، فسيتم إنشاء طبقة group norm في طبقة `Attention` داخل الكتلة الوسطى مع العدد المحدد من المجموعات. إذا تُركت القيمة `None`، فلن يتم إنشاء طبقة group norm إلا إذا كان `resnet_time_scale_shift` مُعيَّنًا على `default`، وإذا تم إنشاؤها فستحتوي على `norm_num_groups` مجموعات.

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

resnet_time_scale_shift (`str`، *اختياري*، القيمة الافتراضية `"default"`) : إعدادات إزاحة مقياس الوقت لكتل ResNet (انظر `ResnetBlock2D`). اختر من بين `default` أو `scale_shift`.

class_embed_type (`str`، *اختياري*، القيمة الافتراضية `None`) : نوع تضمين الفئة (class embedding) الذي سيتم استخدامه، والذي يُجمع في النهاية مع تضمينات الوقت. اختر من بين `None` أو `"timestep"` أو `"identity"`.

num_class_embeds (`int`، *اختياري*، القيمة الافتراضية `None`) : بُعد المدخلات لمصفوفة التضمين القابلة للتعلم التي سيتم إسقاطها إلى `time_embed_dim` عند تنفيذ التكييف حسب الفئة مع أن `class_embed_type` يساوي `None`.

نموذج UNet ثنائي الأبعاد يستقبل عينة ضجيج وخطوة زمنية ويعيد إخراجًا على شكل العينة.

يرث هذا النموذج من [ModelMixin](/docs/diffusers/v0.43.0/ar/api/models/overview#diffusers.ModelMixin). راجع توثيق الفئة الأصلية لمعرفة طرقه العامة المُنفَّذة لجميع النماذج (مثل التنزيل أو الحفظ).

#### forward[[diffusers.UNet2DModel.forward]]

```python
forward(sample: Tensor, timestep: typing.Union[torch.Tensor, float, int], class_labels: typing.Optional[torch.Tensor] = None, return_dict: bool = True)
```

[المصدر](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/models/unets/unet_2d.py#L249)

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

sample (`torch.Tensor`) : المصفوفة المدخلة الضوضائية ذات الشكل التالي `(batch, channel, height, width)`.

timestep (`torch.Tensor` أو `float` أو `int`) : عدد خطوات الزمن لإزالة الضوضاء من مدخل.

class_labels (`torch.Tensor`، *اختياري*، القيمة الافتراضية `None`) : تسميات فئات اختيارية للتكييف. سيتم جمع تمثيلاتها مع تمثيلات خطوة الزمن.

return_dict (`bool`، *اختياري*، القيمة الافتراضية `True`) : ما إذا كان يجب إرجاع [UNet2DOutput](/docs/diffusers/v0.43.0/ar/api/models/unet2d#diffusers.models.unets.unet_2d.UNet2DOutput) بدلاً من tuple عادي.

**يعيد:** [UNet2DOutput](/docs/diffusers/v0.43.0/ar/api/models/unet2d#diffusers.models.unets.unet_2d.UNet2DOutput) أو `tuple`

إذا كان `return_dict` صحيحًا، يُعاد [UNet2DOutput](/docs/diffusers/v0.43.0/ar/api/models/unet2d#diffusers.models.unets.unet_2d.UNet2DOutput)، وإلا يُعاد `tuple` يكون عنصره الأول هو متجه العينة.

طريقة [UNet2DModel](/docs/diffusers/v0.43.0/ar/api/models/unet2d#diffusers.UNet2DModel) الأمامية.

## UNet2DOutput[[diffusers.models.unets.unet_2d.UNet2DOutput]]

#### diffusers.models.unets.unet_2d.UNet2DOutput[[diffusers.models.unets.unet_2d.UNet2DOutput]]

```python
diffusers.models.unets.unet_2d.UNet2DOutput(sample: Tensor)
```

[المصدر](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/models/unets/unet_2d.py#L27)

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

sample (`torch.Tensor` من الشكل `(batch_size, num_channels, height, width)`) : حالات الإخفاء المُخرَجة من الطبقة الأخيرة للنموذج.

مخرجات [UNet2DModel](/docs/diffusers/v0.43.0/ar/api/models/unet2d#diffusers.UNet2DModel).

