# Backbones

Tugas computer vision tingkat tinggi, seperti object detection atau image segmentation, menggunakan beberapa model secara bersama untuk menghasilkan prediksi. Model terpisah digunakan untuk *backbone*, neck, dan head. Backbone mengekstrak fitur yang berguna dari gambar input menjadi feature map, neck menggabungkan dan memproses feature map tersebut, dan head menggunakannya untuk membuat prediksi.

    

Muat backbone dengan [from_pretrained()](/docs/transformers/main/id/main_classes/configuration#transformers.PreTrainedConfig.from_pretrained) dan gunakan parameter `out_indices` untuk menentukan lapisan mana, yang diberikan oleh indeks, yang akan diekstrak peta fiturnya.

```py
from transformers import AutoBackbone

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

Panduan ini menjelaskan kelas backbone, backbone dari pustaka [timm](https://hf.co/docs/timm/index), dan cara mengekstrak fitur dengan menggunakan backbone tersebut.

## Kelas backbone

Ada dua kelas backbone.

- `~transformers.utils.BackboneMixin` memungkinkan Anda memuat backbone dan mencakup fungsi untuk mengekstrak feature maps dan indeks dari config.
- `~transformers.utils.BackboneConfigMixin` memungkinkan Anda untuk mengatur, menyelaraskan, dan memverifikasi peta fitur serta indeks dari konfigurasi backbone.

Lihat dokumentasi API [Backbone](./main_classes/backbones) untuk memeriksa model mana yang mendukung backbone.

Ada dua cara untuk memuat backbone Transformers, yaitu [AutoBackbone](/docs/transformers/main/id/main_classes/backbones#transformers.AutoBackbone) dan kelas backbone yang spesifik untuk model tertentu.

API [AutoClass](./model_doc/auto) secara otomatis memuat model visi terlatih sebelumnya dengan [from_pretrained()](/docs/transformers/main/id/main_classes/configuration#transformers.PreTrainedConfig.from_pretrained) sebagai backbone jika didukung.

Atur parameter `out_indices` ke lapisan yang ingin Anda gunakan untuk mendapatkan feature map. Jika Anda mengetahui nama lapisannya, Anda juga dapat menggunakan `out_features`. Parameter-parameter ini dapat digunakan secara bergantian, tetapi jika Anda menggunakan keduanya, pastikan keduanya merujuk ke lapisan yang sama.

Ketika `out_indices` atau `out_features` tidak digunakan, backbone mengembalikan feature map dari lapisan terakhir. Contoh kode di bawah menggunakan `out_indices=(1,)` untuk mendapatkan feature map dari lapisan pertama.

    

```py
from transformers import AutoImageProcessor, AutoBackbone

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

Ketika Anda mengetahui bahwa sebuah model mendukung backbone, Anda dapat memuat backbone dan neck secara langsung ke dalam konfigurasi model. Teruskan konfigurasi tersebut ke model untuk menginisialisasinya untuk suatu tugas.

Contoh di bawah ini memuat backbone dan neck [ResNet](./model_doc/resnet) untuk digunakan dalam head segmentasi instans [MaskFormer](./model_doc/maskformer).

Perhatikan bahwa inisialisasi dari konfigurasi akan membuat model dengan bobot acak. Jika Anda ingin memuat model pralatih, gunakan API `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)
```

Opsi lain adalah memuat konfigurasi backbone secara terpisah dan kemudian meneruskannya ke `backbone_config` dalam konfigurasi model.

```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)
```

## backbone timm

[timm](https://hf.co/docs/timm/index) adalah kumpulan model visi untuk pelatihan dan inferensi. Transformers mendukung model timm sebagai backbone dengan kelas [TimmBackbone](/docs/transformers/main/id/main_classes/backbones#transformers.TimmBackbone) dan [TimmBackboneConfig](/docs/transformers/main/id/main_classes/backbones#transformers.TimmBackboneConfig). Atur checkpoint backbone yang diperlukan di `backbone` untuk membuat model dengan backbone Timm yang bobotnya diinisialisasi secara acak.

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

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

Anda juga dapat secara eksplisit memanggil kelas [TimmBackboneConfig](/docs/transformers/main/id/main_classes/backbones#transformers.TimmBackboneConfig) untuk memuat dan membuat timm backbone yang telah dilatih sebelumnya.

```py
from transformers import TimmBackboneConfig

backbone_config = TimmBackboneConfig("resnet50")
```

Lewatkan konfigurasi backbone ke konfigurasi model dan instansiasi kepala model, [MaskFormerForInstanceSegmentation](/docs/transformers/main/id/model_doc/maskformer#transformers.MaskFormerForInstanceSegmentation), dengan backbone.

```py
from transformers import MaskFormerConfig, MaskFormerForInstanceSegmentation

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

## Ekstraksi fitur

Backbone digunakan untuk mengekstrak fitur gambar. Lewatkan gambar melalui backbone untuk mendapatkan peta fitur.

Muat dan praproses sebuah gambar lalu teruskan ke backbone. Contoh di bawah mengekstrak peta fitur dari lapisan pertama.

```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)
```

Fitur disimpan dan diakses dari atribut `feature_maps` pada output.

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

