# تحوّل الرؤية الالتفافية (CvT)

[Convolutional Vision Transformer (CvT)](https://huggingface.co/papers/2103.15808) هو نموذج يجمع بين نقاط قوة شبكات العصبية التلافيفية (CNNs) ومحوّلات الرؤية (Vision Transformers) لمهام الرؤية الحاسوبية. فهو يُدخل طبقات تلافيفية في بنية محوّل الرؤية، مما يتيح له التقاط الأنماط المحلية في الصور مع الحفاظ على السياق العام الذي توفره آليات الانتباه الذاتي.

يمكنك العثور على جميع نقاط التفتيش الخاصة بـ CvT تحت منظمة [Microsoft](https://huggingface.co/microsoft?search_models=cvt).

> [!TIP]
> تمت مساهمة هذا النموذج من قِبل [anujunj](https://huggingface.co/anugunj).
>
> انقر على نماذج CvT في الشريط الجانبي الأيمن لمزيد من الأمثلة حول كيفية تطبيق CvT على مهام مختلفة في مجال الرؤية الحاسوبية.

يُبيّن المثال أدناه كيفية تصنيف صورة باستخدام [Pipeline](/docs/transformers/main/ar/main_classes/pipelines#transformers.Pipeline) أو فئة [AutoModel](/docs/transformers/main/ar/model_doc/auto#transformers.AutoModel).

```python
from transformers import pipeline

pipeline = pipeline(
    task="image-classification",
    model="microsoft/cvt-13",
    device=0
)
pipeline("https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/pipeline-cat-chonk.jpeg")
```

```python
import requests
import torch
from PIL import Image

from transformers import AutoImageProcessor, AutoModelForImageClassification

image_processor = AutoImageProcessor.from_pretrained("microsoft/cvt-13")
model = AutoModelForImageClassification.from_pretrained(
    "microsoft/cvt-13",
    device_map="auto"
)

url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/pipeline-cat-chonk.jpeg"
image = Image.open(requests.get(url, stream=True).raw)
inputs = image_processor(image, return_tensors="pt").to(model.device)

with torch.no_grad():
  logits = model(**inputs).logits
predicted_class_id = logits.argmax(dim=-1).item()

class_labels = model.config.id2label
predicted_class_label = class_labels[predicted_class_id]
print(f"The predicted class label is: {predicted_class_label}")
```

## الموارد

راجع هذه المجموعة من [دفاتر ملاحظات](https://github.com/NielsRogge/Transformers-Tutorials/tree/master/VisionTransformer) ViT للحصول على أمثلة على الاستدلال والتدريب الدقيق على مجموعات بيانات مخصصة. استبدل `ViTFeatureExtractor` و[ViTForImageClassification](/docs/transformers/main/ar/model_doc/vit#transformers.ViTForImageClassification) في هذه الدفاتر بـ [AutoImageProcessor](/docs/transformers/main/ar/model_doc/auto#transformers.AutoImageProcessor) و[CvtForImageClassification](/docs/transformers/main/ar/model_doc/cvt#transformers.CvtForImageClassification).

## CvtConfig[[transformers.CvtConfig]]

#### transformers.CvtConfig[[transformers.CvtConfig]]

```python
transformers.CvtConfig(transformers_version: str | None = None, architectures: list[str] | None = None, output_hidden_states: bool | None = False, return_dict: bool | None = True, dtype: str | torch.dtype | None = None, chunk_size_feed_forward: int = 0, is_encoder_decoder: bool = False, id2label: dict[int, str] | dict[str, str] | None = None, label2id: dict[str, int] | dict[str, str] | None = None, problem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = None, num_channels: int = 3, patch_sizes: list[int] | tuple[int, ...] = (7, 3, 3), patch_stride: list[int] | tuple[int, ...] = (4, 2, 2), patch_padding: list[int] | tuple[int, ...] = (2, 1, 1), embed_dim: list[int] | tuple[int, ...] = (64, 192, 384), num_heads: list[int] | tuple[int, ...] = (1, 3, 6), depth: list[int] | tuple[int, ...] = (1, 2, 10), mlp_ratio: list[float] | tuple[float, ...] = (4.0, 4.0, 4.0), attention_drop_rate: list[float] | tuple[float, ...] = (0.0, 0.0, 0.0), drop_rate: list[float] | tuple[float, ...] = (0.0, 0.0, 0.0), drop_path_rate: list[float] | tuple[float, ...] = (0.0, 0.0, 0.1), qkv_bias: list[bool] | tuple[bool, ...] = (True, True, True), cls_token: list[bool] | tuple[bool, ...] = (False, False, True), qkv_projection_method: list[str] | tuple[str, ...] = ('dw_bn', 'dw_bn', 'dw_bn'), kernel_qkv: list[int] | tuple[int, ...] = (3, 3, 3), padding_kv: list[int] | tuple[int, ...] = (1, 1, 1), stride_kv: list[int] | tuple[int, ...] = (2, 2, 2), padding_q: list[int] | tuple[int, ...] = (1, 1, 1), stride_q: list[int] | tuple[int, ...] = (1, 1, 1), initializer_range: float = 0.02, layer_norm_eps: float = 1e-12)
```

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

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

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

patch_sizes (`Union[list[int], tuple[int, ...]]`، *اختياري*، القيمة الافتراضية `(7, 3, 3)`) : حجم البقعة (Patch size) في كل مرحلة من مراحل النموذج.

patch_stride (`list[int]`، *اختياري*، القيمة الافتراضية `[4, 2, 2]`) : حجم الخطوة (stride) لتضمين الباتش (patch embedding) الخاص بكل مشفّر.

patch_padding (`list[int]`، *اختياري*، القيمة الافتراضية `[2, 1, 1]`) : حجم الحشو (padding) لكل مضمّن رقعة (patch embedding) في المُشفِّر.

embed_dim (`Union[list[int], tuple[int, ...]]`، *اختياري*، القيمة الافتراضية `(64, 192, 384)`) : أبعاد التضمينات والحالات المخفية.

num_heads (`Union[list[int], tuple[int, ...]]`، *اختياري*، القيمة الافتراضية `(1, 3, 6)`) : عدد رؤوس الانتباه لكل طبقة انتباه في مُفكِّك Transformer.

depth (`list[int]`، *اختياري*، القيمة الافتراضية `[1, 2, 10]`) : عدد الطبقات في كل كتلة مُشفِّر.

mlp_ratio (`Union[list[float], tuple[float, ...]]`، *اختياري*، القيمة الافتراضية `(4.0, 4.0, 4.0)`) : نسبة بُعد مخفي MLP إلى بُعد التضمين.

attention_drop_rate (`list[float]`، *اختياري*، القيمة الافتراضية `[0.0, 0.0, 0.0]`) : نسبة dropout لاحتمالات الانتباه.

drop_rate (`list[float]`، *اختياري*، القيمة الافتراضية `[0.0, 0.0, 0.0]`) : نسبة dropout لاحتمالات تضمينات الباتش.

drop_path_rate (`Union[list[float], tuple[float, ...]]`، *اختياري*، القيمة الافتراضية `(0.0, 0.0, 0.1)`) : معدل مسار الإسقاط (Drop path) لدمج البقع (patch fusion).

qkv_bias (`Union[list[bool], tuple[bool, ...]]`، *اختياري*، القيمة الافتراضية `(True, True, True)`) : ما إذا كان يجب إضافة انحياز إلى الاستعلامات والمفاتيح والقيم.

cls_token (`list[bool]`، *اختياري*، القيمة الافتراضية `[False, False, True]`) : ما إذا كان يجب إضافة رمز تصنيف إلى مخرجات كلٍّ من المراحل الثلاث الأخيرة.

qkv_projection_method (`list[string]`، *اختياري*، القيمة الافتراضية ["dw_bn", "dw_bn", "dw_bn"]) : طريقة الإسقاط للاستعلام والمفتاح والقيمة. الافتراضي هو الالتفاف العميق مع تطبيع الدفعة. لاستخدام الإسقاط الخطي استخدم "avg".

kernel_qkv (`list[int]`، *اختياري*، القيمة الافتراضية `[3, 3, 3]`) : حجم النواة للاستعلام والمفتاح والقيمة في طبقة الانتباه

padding_kv (`list[int]`، *اختياري*، القيمة الافتراضية `[1, 1, 1]`) : حجم الحشو للمفتاح والقيمة في طبقة الانتباه

stride_kv (`list[int]`، *اختياري*، القيمة الافتراضية `[2, 2, 2]`) : حجم الخطوة (stride) للمفتاح والقيمة في طبقة الانتباه

padding_q (`list[int]`، *اختياري*، القيمة الافتراضية `[1, 1, 1]`) : حجم الحشو للاستعلام في طبقة الانتباه

stride_q (`list[int]`، *اختياري*، القيمة الافتراضية `[1, 1, 1]`) : حجم الخطوة للاستعلام في طبقة الانتباه

initializer_range (`float`، *اختياري*، القيمة الافتراضية `0.02`) : الانحراف المعياري لـ truncated_normal_initializer المستخدم في تهيئة جميع مصفوفات الأوزان.

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

هذه فئة الإعدادات المخزنة لإعدادات نموذج CvtModel. تُستخدم لاستحداث نموذج Cvt وفقاً للحجج المحددة، مع تعريف بنية النموذج. إن استحداث إعدادات باستخدام القيم الافتراضية سيؤدي إلى إعدادات مشابهة لتلك الخاصة بـ [microsoft/cvt-13](https://huggingface.co/microsoft/cvt-13)

ترث كائنات الإعداد من [PreTrainedConfig](/docs/transformers/main/ar/main_classes/configuration#transformers.PreTrainedConfig) ويمكن استخدامها للتحكم في مخرجات النموذج. اقرأ التوثيق الخاص بـ [PreTrainedConfig](/docs/transformers/main/ar/main_classes/configuration#transformers.PreTrainedConfig) لمزيد من المعلومات.

مثال:

```python
>>> from transformers import CvtConfig, CvtModel

>>> # Initializing a Cvt msft/cvt style configuration
>>> configuration = CvtConfig()

>>> # Initializing a model (with random weights) from the msft/cvt style configuration
>>> model = CvtModel(configuration)

>>> # Accessing the model configuration
>>> configuration = model.config
```

## CvtModel[[transformers.CvtModel]]

#### transformers.CvtModel[[transformers.CvtModel]]

```python
transformers.CvtModel(config: CvtConfig, add_pooling_layer = True)
```

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

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

config ([CvtConfig](/docs/transformers/main/ar/model_doc/cvt#transformers.CvtConfig)) : فئة إعدادات النموذج التي تحتوي على جميع معاملات النموذج. عند التهيئة باستخدام ملف إعدادات، لا يتم تحميل الأوزان المرتبطة بالنموذج، بل الإعدادات فقط. راجع طريقة [from_pretrained()](/docs/transformers/main/ar/main_classes/model#transformers.PreTrainedModel.from_pretrained) لتحميل أوزان النموذج.

add_pooling_layer (`bool`، *اختياري*، القيمة الافتراضية `True`) : ما إذا كان يجب إضافة طبقة تجميع

نموذج Cvt العاري الذي يُخرج حالات مخفية خام دون أي رأس محدد في الأعلى.

يرث هذا النموذج من [PreTrainedModel](/docs/transformers/main/ar/main_classes/model#transformers.PreTrainedModel). راجع توثيق الفئة الأصلية لمعرفة الطرق العامة التي تنفذها المكتبة لجميع نماذجها (مثل التنزيل أو الحفظ، وتغيير حجم تضمينات الإدخال، وقص الرؤوس، وما إلى ذلك).

هذا النموذج هو أيضاً فئة فرعية من [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) في PyTorch. استخدمه كوحدة PyTorch عادية، وارجع إلى توثيق PyTorch لكل ما يتعلق بالاستخدام العام والسلوك.

#### forward[[transformers.CvtModel.forward]]

```python
forward(pixel_values: typing.Optional[torch.Tensor] = None, output_hidden_states: bool | None = None, return_dict: bool | None = None, **kwargs)
```

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

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

pixel_values (`torch.Tensor` من الشكل `(batch_size, num_channels, image_size, image_size)`، *اختياري*) : المصفوفات المقابلة للصور المدخلة. يمكن الحصول على قيم البكسل باستخدام [ConvNextImageProcessor](/docs/transformers/main/ar/model_doc/convnext#transformers.ConvNextImageProcessor). راجع [ConvNextImageProcessor.__call__()](/docs/transformers/main/ar/model_doc/molmo2#transformers.Molmo2ImageProcessor.__call__) للتفاصيل (`processor_class` يستخدم [ConvNextImageProcessor](/docs/transformers/main/ar/model_doc/convnext#transformers.ConvNextImageProcessor) لمعالجة الصور).

output_hidden_states (`bool`, *اختياري*) : ما إذا كان سيتم إرجاع الحالات المخفية لجميع الطبقات. راجع `hidden_states` ضمن الموترات المُرجعة لمزيد من التفاصيل.

return_dict (`bool`، *اختياري*) : ما إذا كان سيتم إرجاع [ModelOutput](/docs/transformers/main/ar/main_classes/output#transformers.utils.ModelOutput) بدلاً من tuple عادي.

**يعيد:** `BaseModelOutputWithCLSToken` أو `tuple(torch.Tensor)`

`BaseModelOutputWithCLSToken` أو مجموعة من `torch.Tensor` (إذا تم تمرير `return_dict=False` أو عندما يكون `config.return_dict=False`) تتكون من عناصر مختلفة اعتماداً على الإعداد ([CvtConfig](/docs/transformers/main/ar/model_doc/cvt#transformers.CvtConfig)) والمدخلات.

تتجاوز طريقة [CvtModel](/docs/transformers/main/ar/model_doc/cvt#transformers.CvtModel) الخاصة بالتقديم (forward) الطريقة الخاصة `__call__`.

على الرغم من أنه يجب تعريف وصفة المرور الأمامي داخل هذه الدالة، إلا أنه ينبغي استدعاء كائن `Module` بدلاً من هذه الدالة، لأن الكائن يتولى تنفيذ خطوات المعالجة المسبقة والمعالجة اللاحقة، بينما تتجاهل الدالة هذه الخطوات بصمت.

- **last_hidden_state** (`torch.Tensor` بأبعاد `(batch_size, sequence_length, hidden_size)`، *اختياري*) -- تسلسل من الحالات المخفية عند مخرجات الطبقة الأخيرة من النموذج.
- **cls_token_value** (`torch.Tensor` من الشكل `(batch_size, 1, hidden_size)`) -- رمز التصنيف عند مخرج الطبقة الأخيرة من النموذج.
- **hidden_states** (`tuple[torch.Tensor, ...]`, *اختياري*, يُعاد عند تمرير `output_hidden_states=True` أو عند `config.output_hidden_states=True`) -- مجموعة مرتبة من `torch.Tensor` (واحدة لمخرجات التضمينات، إذا كان النموذج يحتوي على طبقة تضمين، + واحدة لمخرجات كل طبقة) من الشكل `(batch_size, sequence_length, hidden_size)`.

  حالات النموذج المخفية عند مخرج كل طبقة بالإضافة إلى مخرجات التضمين الأولي الاختيارية.

## CvtForImageClassification[[transformers.CvtForImageClassification]]

#### transformers.CvtForImageClassification[[transformers.CvtForImageClassification]]

```python
transformers.CvtForImageClassification(config: CvtConfig)
```

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

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

config ([CvtConfig](/docs/transformers/main/ar/model_doc/cvt#transformers.CvtConfig)) : فئة إعدادات النموذج التي تحتوي على جميع معاملات النموذج. عند التهيئة باستخدام ملف إعدادات، لا يتم تحميل الأوزان المرتبطة بالنموذج، بل الإعدادات فقط. راجع طريقة [from_pretrained()](/docs/transformers/main/ar/main_classes/model#transformers.PreTrainedModel.from_pretrained) لتحميل أوزان النموذج.

نموذج Cvt مُحوِّل (Transformer) مع رأس تصنيف صور في الأعلى (طبقة خطية فوق الحالة المخفية النهائية لرمز [CLS])، على سبيل المثال لـ ImageNet.

يرث هذا النموذج من [PreTrainedModel](/docs/transformers/main/ar/main_classes/model#transformers.PreTrainedModel). راجع توثيق الفئة الأصلية لمعرفة الطرق العامة التي تنفذها المكتبة لجميع نماذجها (مثل التنزيل أو الحفظ، وتغيير حجم تضمينات الإدخال، وقص الرؤوس، وما إلى ذلك).

هذا النموذج هو أيضاً فئة فرعية من [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) في PyTorch. استخدمه كوحدة PyTorch عادية، وارجع إلى توثيق PyTorch لكل ما يتعلق بالاستخدام العام والسلوك.

#### forward[[transformers.CvtForImageClassification.forward]]

```python
forward(pixel_values: typing.Optional[torch.Tensor] = None, labels: typing.Optional[torch.Tensor] = None, output_hidden_states: bool | None = None, return_dict: bool | None = None, **kwargs)
```

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

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

pixel_values (`torch.Tensor` من الشكل `(batch_size, num_channels, image_size, image_size)`، *اختياري*) : المصفوفات المقابلة للصور المدخلة. يمكن الحصول على قيم البكسل باستخدام [ConvNextImageProcessor](/docs/transformers/main/ar/model_doc/convnext#transformers.ConvNextImageProcessor). راجع [ConvNextImageProcessor.__call__()](/docs/transformers/main/ar/model_doc/molmo2#transformers.Molmo2ImageProcessor.__call__) للتفاصيل (`processor_class` يستخدم [ConvNextImageProcessor](/docs/transformers/main/ar/model_doc/convnext#transformers.ConvNextImageProcessor) لمعالجة الصور).

labels (من نوع `torch.LongTensor` بأبعاد `(batch_size,)`، *اختياري*) : تسميات لحساب خسارة تصنيف/الانحدار للصور. يجب أن تكون الفهارس ضمن `[0, ..., config.num_labels - 1]`. إذا كان `config.num_labels == 1` يتم حساب خسارة الانحدار (خسارة متوسط المربع)، وإذا كان `config.num_labels > 1` يتم حساب خسارة التصنيف (الإنتروبيا المتقاطعة).

output_hidden_states (`bool`, *اختياري*) : ما إذا كان سيتم إرجاع الحالات المخفية لجميع الطبقات. راجع `hidden_states` ضمن الموترات المُرجعة لمزيد من التفاصيل.

return_dict (`bool`، *اختياري*) : ما إذا كان سيتم إرجاع [ModelOutput](/docs/transformers/main/ar/main_classes/output#transformers.utils.ModelOutput) بدلاً من tuple عادي.

**يعيد:** [ImageClassifierOutputWithNoAttention](/docs/transformers/main/ar/main_classes/output#transformers.modeling_outputs.ImageClassifierOutputWithNoAttention) أو `tuple(torch.Tensor)`

[ImageClassifierOutputWithNoAttention](/docs/transformers/main/ar/main_classes/output#transformers.modeling_outputs.ImageClassifierOutputWithNoAttention) أو مجموعة من `torch.Tensor` (إذا تم تمرير `return_dict=False` أو عندما يكون `config.return_dict=False`) تتكون من عناصر مختلفة اعتماداً على الإعداد ([CvtConfig](/docs/transformers/main/ar/model_doc/cvt#transformers.CvtConfig)) والمدخلات.

تتجاوز طريقة [CvtForImageClassification](/docs/transformers/main/ar/model_doc/cvt#transformers.CvtForImageClassification) الخاصة بالتقديم (forward) الطريقة الخاصة `__call__`.

على الرغم من أنه يجب تعريف وصفة المرور الأمامي داخل هذه الدالة، إلا أنه ينبغي استدعاء كائن `Module` بدلاً من هذه الدالة، لأن الكائن يتولى تنفيذ خطوات المعالجة المسبقة والمعالجة اللاحقة، بينما تتجاهل الدالة هذه الخطوات بصمت.

- **loss** (`torch.Tensor` من الشكل `(1,)`, *اختياري*، يُعاد عند تقديم `labels`) -- خسارة التصنيف (أو الانحدار إذا كان config.num_labels==1).
- **logits** (`torch.Tensor` من الشكل `(batch_size, config.num_labels)`) -- درجات التصنيف (أو الانحدار إذا كان config.num_labels==1) (قبل SoftMax).
- **hidden_states** (`tuple(torch.Tensor)`، *اختياري*، يُعاد عند تمرير `output_hidden_states=True` أو عند `config.output_hidden_states=True`) -- مجموعة مرتبة من `torch.Tensor` (واحدة لمخرجات التضمينات، إذا كان النموذج يحتوي على طبقة تضمين، + واحدة لمخرجات كل مرحلة) بشكل `(batch_size, num_channels, height, width)`. حالات النموذج المخفية (المعروفة أيضًا باسم خرائط الميزات) عند مخرجات كل مرحلة.

مثال:

```python
>>> from transformers import AutoImageProcessor, CvtForImageClassification
>>> import torch
>>> from datasets import load_dataset

>>> dataset = load_dataset("huggingface/cats-image")
>>> image = dataset["test"]["image"][0]

>>> image_processor = AutoImageProcessor.from_pretrained("microsoft/cvt-13")
>>> model = CvtForImageClassification.from_pretrained("microsoft/cvt-13")

>>> inputs = image_processor(image, return_tensors="pt")

>>> with torch.no_grad():
...     logits = model(**inputs).logits

>>> # model predicts one of the 1000 ImageNet classes
>>> predicted_label = logits.argmax(-1).item()
>>> print(model.config.id2label[predicted_label])
...
```

