# VQModel

تم تقديم نموذج VQ-VAE في [Neural Discrete Representation Learning](https://huggingface.co/papers/1711.00937) بواسطة Aaron van den Oord و Oriol Vinyals و Koray Kavukcuoglu. يُستخدم النموذج في 🤗 Diffusers لفك ترميز التمثيلات الكامنة إلى صور. على عكس [AutoencoderKL](/docs/diffusers/v0.43.0/ar/api/models/autoencoderkl#diffusers.AutoencoderKL)، يعمل [VQModel](/docs/diffusers/v0.43.0/ar/api/models/vq#diffusers.VQModel) في فضاء كامن مُكمَّم.

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

*تعلّم تمثيلات مفيدة دون إشراف يظل تحديًا رئيسيًا في تعلّم الآلة. في هذه الورقة، نقترح نموذجًا توليديًا بسيطًا وقويًا يتعلم مثل هذه التمثيلات المنفصلة. يختلف نموذجنا، وهو الترميز التلقائي التبايني الكمي المتجهي (VQ-VAE)، عن نماذج VAE بطريقتين رئيسيتين: شبكة المُرمِّز تُخرج رموزًا منفصلة، وليس مستمرة؛ والسابق (prior) يتعلم بدلاً من أن يكون ثابتًا. من أجل تعلّم تمثيل كامن منفصل، ندمج أفكارًا من التكميم المتجهي (VQ). يسمح استخدام طريقة VQ للنموذج بتجاوز مشكلات "انهيار الخلفي" (posterior collapse) -- حيث يتم تجاهل الكمونيات عندما تُقرن بمُفكِّك ذاتي التراجع قوي -- وهي المشكلات التي تُلاحظ عادةً في إطار VAE. عند إقران هذه التمثيلات بسابق ذاتي التراجع، يمكن للنموذج توليد صور وفيديوهات وكلام عالية الجودة، بالإضافة إلى تنفيذ تحويل متحدث عالي الجودة وتعلّم غير مُشرَف على الفونيمات، مما يوفر مزيدًا من الأدلة على فائدة التمثيلات المتعلمة.*

## VQModel[[diffusers.VQModel]]

#### diffusers.VQModel[[diffusers.VQModel]]

```python
diffusers.VQModel(in_channels: int = 3, out_channels: int = 3, down_block_types: tuple[str, ...] = ('DownEncoderBlock2D',), up_block_types: tuple[str, ...] = ('UpDecoderBlock2D',), block_out_channels: tuple[int, ...] = (64,), layers_per_block: int = 1, act_fn: str = 'silu', latent_channels: int = 3, sample_size: int = 32, num_vq_embeddings: int = 256, norm_num_groups: int = 32, vq_embed_dim: int | None = None, scaling_factor: float = 0.18215, norm_type: str = 'group', mid_block_add_attention = True, lookup_from_codebook = False, force_upcast = False)
```

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

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

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

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

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

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

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

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

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

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

sample_size (`int`، *اختياري*، القيمة الافتراضية `32`) : حجم الإدخال العينة.

num_vq_embeddings (`int`، *اختياري*، القيمة الافتراضية `256`) : عدد متجهات كتاب الرموز في VQ-VAE.

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

vq_embed_dim (`int`، *اختياري*) : البُعد الخفيّ لمتجهات دفتر الرموز في VQ-VAE.

scaling_factor (`float`، *اختياري*، القيمة الافتراضية `0.18215`) : الانحراف المعياري لكل مكوّن في الفضاء الكامن المُدرَّب، المُحسوب باستخدام الدفعة الأولى من مجموعة التدريب. يُستخدم هذا الانحراف لتقريب الفضاء الكامن بحيث يكون له تباين وحدة عند تدريب نموذج الانتشار. يتم تقريب الكمونات باستخدام الصيغة `z = z * scaling_factor` قبل تمريرها إلى نموذج الانتشار. عند فك الترميز، تُعاد الكمونات إلى المقياس الأصلي باستخدام الصيغة: `z = 1 / scaling_factor * z`. لمزيد من التفاصيل، راجع الأقسام 4.3.2 و D.1 من ورقة [High-Resolution Image Synthesis with Latent Diffusion Models](https://huggingface.co/papers/2112.10752).

norm_type (`str`، *اختياري*، الافتراضي `"group"`) : نوع طبقة التطبيع المستخدمة. يمكن أن يكون `"group"` أو `"spatial"`.

نموذج VQ-VAE لفك ترميز التمثيلات الكامنة.

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

#### forward[[diffusers.VQModel.forward]]

```python
forward(sample: Tensor, return_dict: bool = True)
```

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

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

sample (`torch.Tensor`) : عينة الإدخال.

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

**يعيد:** [VQEncoderOutput](/docs/diffusers/v0.43.0/ar/api/models/vq#diffusers.models.autoencoders.vq_model.VQEncoderOutput) أو `tuple`

إذا كانت return_dict تساوي True، يُعاد [VQEncoderOutput](/docs/diffusers/v0.43.0/ar/api/models/vq#diffusers.models.autoencoders.vq_model.VQEncoderOutput)، وإلا يُعاد `tuple` عادي.

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

## VQEncoderOutput[[diffusers.models.autoencoders.vq_model.VQEncoderOutput]]

#### diffusers.models.autoencoders.vq_model.VQEncoderOutput[[diffusers.models.autoencoders.vq_model.VQEncoderOutput]]

```python
diffusers.models.autoencoders.vq_model.VQEncoderOutput(latents: Tensor)
```

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

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

latents (`torch.Tensor` من الشكل `(batch_size, num_channels, height, width)`) : عينة المخرجات المُرمّزة من الطبقة الأخيرة للنموذج.

مخرجات طريقة الترميز في VQModel.

