# ViTDet

## نظرة عامة

قُدِّم نموذج ViTDet في [Exploring Plain Vision Transformer Backbones for Object Detection](https://huggingface.co/papers/2203.16527) من قِبل Yanghao Li وHanzi Mao وRoss Girshick وKaiming He. يستفيد VitDet من [Vision Transformer](vit) العادي لأداء مهمة كشف الكائنات.

المستخلص من الورقة البحثية هو كالتالي:

*نستكشف محوّل الرؤية (ViT) العادي غير التسلسلي كخلفية شبكية للكشف عن الأشياء. تُمكّن هذه التصميم من ضبط المحوّل الأصلي ViT بشكل دقيق للكشف عن الأشياء دون الحاجة إلى إعادة تصميم خلفية تسلسلية للتدريب المسبق. ومع تكييفات ضئيلة للضبط الدقيق، يمكن لكاشف الخلفية العادية لدينا تحقيق نتائج تنافسية. وبشكل مفاجئ، نلاحظ: (i) يكفي بناء هرم ميزات بسيط من خريطة ميزات أحادية المقياس (بدون تصميم FPN الشائع) و (ii) يكفي استخدام انتباه النوافذ (بدون إزاحة) مدعومًا بعدد قليل جدًا من كتل انتشار بين النوافذ. باستخدام محولات ViT العادية كخلفيات مُدرَّبة مسبقًا كمشفّرات ذاتية مقنّعة (MAE)، يمكن لكاشفنا، المسمى ViTDet، المنافسة مع الأساليب الرائدة السابقة التي كانت جميعها مبنية على خلفيات تسلسلية، حيث يصل إلى 61.3 AP_box على مجموعة بيانات COCO باستخدام التدريب المسبق على ImageNet-1K فقط. نأمل أن يجذب بحثنا الانتباه إلى أبحاث كواشف الخلفية العادية.*

تمت مساهمة هذا النموذج من قِبل [nielsr](https://huggingface.co/nielsr). يمكن العثور على الكود الأصلي [هنا](https://github.com/facebookresearch/detectron2/tree/main/projects/ViTDet).

نصائح:

- حالياً، المتاح هو الهيكل الأساسي فقط.

## VitDetConfig[[transformers.VitDetConfig]]

#### transformers.VitDetConfig[[transformers.VitDetConfig]]

```python
transformers.VitDetConfig(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, hidden_size: int = 768, num_hidden_layers: int = 12, num_attention_heads: int = 12, mlp_ratio: int = 4, hidden_act: str = 'gelu', dropout_prob: float | int = 0.0, initializer_range: float = 0.02, layer_norm_eps: float = 1e-06, image_size: int | list[int] | tuple[int, int] = 224, pretrain_image_size: int | list[int] | tuple[int, int] = 224, patch_size: int | list[int] | tuple[int, int] = 16, num_channels: int = 3, qkv_bias: bool = True, drop_path_rate: float | int = 0.0, window_block_indices: list[int] | tuple[int, ...] = (), residual_block_indices: list[int] | tuple[int, ...] = (), use_absolute_position_embeddings: bool = True, use_relative_position_embeddings: bool = False, window_size: int = 0, _out_features: list[str] | None = None, _out_indices: list[int] | None = None)
```

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

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

hidden_size (`int`، *اختياري*، القيمة الافتراضية `768`) : بُعد التمثيلات المخفية.

num_hidden_layers (`int`، *اختياري*، القيمة الافتراضية `12`) : عدد الطبقات المخفية في مُفكِّك Transformer.

num_attention_heads (`int`، *اختياري*، القيمة الافتراضية `12`) : عدد رؤوس الانتباه في كل طبقة انتباه داخل مُفكِّك Transformer.

mlp_ratio (`int`، *اختياري*، القيمة الافتراضية `4`) : نسبة بُعد مخفي MLP إلى بُعد التضمين.

hidden_act (`str`، *اختياري*، القيمة الافتراضية `gelu`) : دالة التنشيط غير الخطية (دالة أو نص) في المُفكِّك. على سبيل المثال، `"gelu"`، `"relu"`، `"silu"`، وما إلى ذلك.

dropout_prob (`Union[float, int]`، *اختياري*، القيمة الافتراضية `0.0`) : نسبة جميع طبقات dropout.

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

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

image_size (`Union[int, list[int], tuple[int, int]]`، *اختياري*، القيمة الافتراضية `224`) : حجم (دقة) كل صورة.

pretrain_image_size (`int`، *اختياري*، القيمة الافتراضية 224) : حجم (دقة) كل صورة أثناء التدريب المسبق.

patch_size (`Union[int, list[int], tuple[int, int]]`، *اختياري*، القيمة الافتراضية `16`) : حجم (دقة) كل رقعة.

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

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

drop_path_rate (`Union[float, int]`, *اختياري*, القيمة الافتراضية هي `0.0`) : معدل إسقاط المسار لدمج البقع.

window_block_indices (`list[int]`، *اختياري*، القيمة الافتراضية `[]`) : قائمة بمؤشرات الكتل التي يجب أن تستخدم انتباه النافذة بدلاً من الانتباه الذاتي العالمي العادي.

residual_block_indices (`list[int]`، *اختياري*، القيمة الافتراضية `[]`) : قائمة بمؤشرات الكتل التي يجب أن تحتوي على كتلة متبقية إضافية بعد وحدة MLP.

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

use_relative_position_embeddings (`bool`، *اختياري*، القيمة الافتراضية `False`) : ما إذا كان يجب إضافة تضمينات الموضع النسبي إلى خرائط الانتباه.

window_size (`int`، *اختياري*، القيمة الافتراضية 0) : حجم نافذة الانتباه.

هذه فئة الإعدادات المخزنة لإعدادات نموذج VitDetModel. تُستخدم لاستحداث نموذج Vitdet وفقاً للحجج المحددة، مع تعريف بنية النموذج. إن استحداث إعدادات باستخدام القيم الافتراضية سيؤدي إلى الحصول على إعدادات مشابهة لتلك الخاصة بـ [google/vitdet-base-patch16-224](https://huggingface.co/google/vitdet-base-patch16-224)

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

مثال:

```python
>>> from transformers import VitDetConfig, VitDetModel

>>> # Initializing a VitDet configuration
>>> configuration = VitDetConfig()

>>> # Initializing a model (with random weights) from the configuration
>>> model = VitDetModel(configuration)

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

## VitDetModel[[transformers.VitDetModel]]

#### transformers.VitDetModel[[transformers.VitDetModel]]

```python
transformers.VitDetModel(config: VitDetConfig)
```

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

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

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

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

يرث هذا النموذج من [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.VitDetModel.forward]]

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

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

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

pixel_values (`torch.Tensor` من الشكل `(batch_size, num_channels, image_size, image_size)`، *اختياري*) : المصفوفات المقابلة للصور المدخلة. يمكن الحصول على قيم البكسل باستخدام `image_processor_class`. راجع `image_processor_class.__call__` للتفاصيل (`processor_class` يستخدم `image_processor_class` لمعالجة الصور).

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

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

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

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

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

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

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

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

  حالات النموذج المخفية عند مخرج كل طبقة بالإضافة إلى مخرجات التضمين الأولي الاختيارية.
- **attentions** (`tuple(torch.Tensor)`، *اختياري*، يُعاد عند تمرير `output_attentions=True` أو عند تعيين `config.output_attentions=True`) -- مجموعة من `torch.Tensor` (واحدة لكل طبقة) بأبعاد `(batch_size, num_heads, sequence_length, sequence_length)`.

  أوزان الانتباه بعد تطبيق دالة softmax على الانتباه، وتُستخدم لحساب المتوسط الموزون في رؤوس الانتباه الذاتي.

أمثلة:

```python
>>> from transformers import VitDetConfig, VitDetModel
>>> import torch

>>> config = VitDetConfig()
>>> model = VitDetModel(config)

>>> pixel_values = torch.randn(1, 3, 224, 224)

>>> with torch.no_grad():
...     outputs = model(pixel_values)

>>> last_hidden_states = outputs.last_hidden_state
>>> list(last_hidden_states.shape)
[1, 768, 14, 14]
```

