# العمود الفقري

تستخدم مهام الرؤية الحاسوبية الأعلى مستوى، مثل اكتشاف الكائنات أو تجزئة الصور، عدة نماذج معًا لتوليد تنبؤ. يُستخدم نموذج منفصل لكل من *backbone* والرقبة والرأس. يستخرج الـ backbone ميزات مفيدة من صورة الإدخال إلى خريطة ميزات، وتقوم الرقبة بدمج ومعالجة خرائط الميزات، بينما يستخدم الرأس هذه الميزات لإجراء تنبؤ.

    

حمّل العمود الفقري باستخدام [from_pretrained()](/docs/transformers/main/ar/main_classes/configuration#transformers.PreTrainedConfig.from_pretrained) واستخدم معامل `out_indices` لتحديد الطبقة التي سيتم استخراج خريطة الميزات منها، وذلك بناءً على الفهرس المُعطى.

```py
from transformers import AutoBackbone

model = AutoBackbone.from_pretrained("microsoft/swin-tiny-patch4-window7-224", out_indices=(1,))
```

يصف هذا الدليل فئة العمود الفقري (backbone)، والأعمدة الفقرية من مكتبة [timm](https://hf.co/docs/timm/index)، وكيفية استخراج الميزات باستخدامها.

## فئات الهيكل

توجد فئتان أساسيتان.

- `~transformers.utils.BackboneMixin` يتيح لك تحميل العمود الفقري (backbone) ويتضمن دوال لاستخراج خرائط الميزات والفهارس من الإعدادات.
- `~transformers.utils.BackboneConfigMixin` يتيح لك ضبط خريطة الميزات والفهارس وإتقانها والتحقق منها في إعداد العمود الفقري.

راجع توثيق واجهة [Backbone](./main_classes/backbones) للتحقق من النماذج التي تدعم العمود الفقري.

هناك طريقتان لتحميل هيكل Transformers الأساسي، وهما [AutoBackbone](/docs/transformers/main/ar/main_classes/backbones#transformers.AutoBackbone) وفئة هيكل مخصصة لنموذج معين.

تحمّل واجهة [AutoClass](./model_doc/auto) تلقائيًا نموذج رؤية مُدرَّب مسبقًا باستخدام [from_pretrained()](/docs/transformers/main/ar/main_classes/configuration#transformers.PreTrainedConfig.from_pretrained) كهيكل أساسي إذا كان مدعومًا.

اضبط معامل `out_indices` على الطبقة التي تريد الحصول على خريطة الميزات منها. وإذا كنت تعرف اسم الطبقة، يمكنك أيضاً استخدام `out_features`. يمكن استخدام هذين المعاملين بالتبادل، لكن إذا استخدمتَ كلاهما، فتأكد من أنهما يشيران إلى الطبقة نفسها.

عند عدم استخدام `out_indices` أو `out_features`، تُرجع البنية الأساسية خريطة الميزات من الطبقة الأخيرة. يستخدم كود المثال أدناه `out_indices=(1,)` للحصول على خريطة الميزات من الطبقة الأولى.

    

```py
from transformers import AutoImageProcessor, AutoBackbone

model = AutoBackbone.from_pretrained("microsoft/swin-tiny-patch4-window7-224", out_indices=(1,))
```

عندما تعلم أن نموذجًا ما يدعم هيكلًا أساسيًا (backbone)، يمكنك تحميل الهيكل الأساسي والجزء الأوسط (neck) مباشرةً في إعدادات النموذج. مرّر الإعدادات إلى النموذج لمهيئته لمهمة معينة.

يُحمّل المثال أدناه هيكلًا (backbone) وعنقًا (neck) من [ResNet](./model_doc/resnet) للاستخدام في رأس تقسيم الكائنات (instance segmentation) من [MaskFormer](./model_doc/maskformer).

لاحظ أن التهيئة من ملف الإعدادات ستُنشئ النموذج بأوزان عشوائية. إذا كنت ترغب في تحميل نموذج مُدرَّب مسبقًا، فاستخدم واجهة `from_pretrained`.

```py
from transformers import AutoConfig, MaskFormerConfig, MaskFormerForInstanceSegmentation

backbone_config = AutoConfig.from_pretrained("microsoft/resnet-50")
config = MaskFormerConfig(backbone_config=backbone_config)
model = MaskFormerForInstanceSegmentation(config)
```

خيار آخر هو تحميل إعدادات الهيكل الأساسي بشكل منفصل ثم تمريرها إلى `backbone_config` في إعدادات النموذج.

```py
from transformers import MaskFormerConfig, MaskFormerForInstanceSegmentation, ResNetConfig

# instantiate backbone configuration
backbone_config = ResNetConfig()
# load backbone in model
config = MaskFormerConfig(backbone_config=backbone_config)
# attach backbone to model head
model = MaskFormerForInstanceSegmentation(config)
```

## هياكل timm

[timm](https://hf.co/docs/timm/index) هو مجموعة من نماذج الرؤية للتدريب والاستدلال. يدعم Transformers نماذج timm كهيكل أساسي من خلال الفئات [TimmBackbone](/docs/transformers/main/ar/main_classes/backbones#transformers.TimmBackbone) و[TimmBackboneConfig](/docs/transformers/main/ar/main_classes/backbones#transformers.TimmBackboneConfig). اضبط نقطة التفتيش اللازمة للهيكل الأساسي في `backbone` لإنشاء نموذج بهيكل أساسي Timm بأوزان مهيأة عشوائيًا.

```py
from transformers import MaskFormerConfig, MaskFormerForInstanceSegmentation, TimmBackboneConfig

backbone_config = TimmBackboneConfig(backbone="resnet50", out_indices=[-1])
config = MaskFormerConfig(backbone_config=backbone_config)
model = MaskFormerForInstanceSegmentation(config)
```

يمكنك أيضًا استدعاء فئة [TimmBackboneConfig](/docs/transformers/main/ar/main_classes/backbones#transformers.TimmBackboneConfig) صراحةً لتحميل وإنشاء هيكل عظمي (backbone) مُدرَّب مسبقًا من timm.

```py
from transformers import TimmBackboneConfig

backbone_config = TimmBackboneConfig("resnet50")
```

مرّر إعداد العمود الفقري إلى إعداد النموذج وأنشئ رأس النموذج، [MaskFormerForInstanceSegmentation](/docs/transformers/main/ar/model_doc/maskformer#transformers.MaskFormerForInstanceSegmentation)، باستخدام العمود الفقري.

```py
from transformers import MaskFormerConfig, MaskFormerForInstanceSegmentation

config = MaskFormerConfig(backbone_config=backbone_config)
model = MaskFormerForInstanceSegmentation(config)
```

## استخراج الميزات

يُستخدم العمود الفقري لاستخراج ميزات الصورة. مرّر صورة عبر العمود الفقري للحصول على خرائط الميزات.

حمّل صورةً وقم بمعالجتها مسبقًا ثم مرّرها إلى العمود الفقري. يستخرج المثال أدناه خرائط الميزات من الطبقة الأولى.

```py
from transformers import AutoImageProcessor, AutoBackbone
import torch
from PIL import Image
import requests

model = AutoBackbone.from_pretrained("microsoft/swin-tiny-patch4-window7-224", out_indices=(1,))
processor = AutoImageProcessor.from_pretrained("microsoft/swin-tiny-patch4-window7-224")

url = "http://images.cocodataset.org/val2017/000000039769.jpg"
image = Image.open(requests.get(url, stream=True).raw)

inputs = processor(image, return_tensors="pt")
outputs = model(**inputs)
```

تُخزَّن الميزات وتُستخدَم من خلال خاصية `feature_maps` في المخرجات.

```py
feature_maps = outputs.feature_maps
list(feature_maps[0].shape)
[1, 96, 56, 56]
```

