# 백본

객체 감지나 이미지 분할과 같은 고수준 컴퓨터 비전 작업은 예측을 생성하기 위해 여러 모델을 함께 사용합니다. *backbone*, neck, head 각각에 별도의 모델이 사용됩니다. backbone은 입력 이미지에서 유용한 특징을 feature map으로 추출하고, neck은 feature map을 결합 및 처리하며, head는 이를 사용하여 예측을 수행합니다.

    

[from_pretrained()](/docs/transformers/main/ko/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) 라이브러리에서 제공하는 backbones, 그리고 이를 사용하여 특징을 추출하는 방법에 대해 설명합니다.

## Backbone 클래스

두 가지 backbone 클래스가 있습니다.

- `~transformers.utils.BackboneMixin`은 백본을 로드할 수 있게 하며, config에서 feature map과 인덱스를 추출하는 함수를 포함합니다.
- `~transformers.utils.BackboneConfigMixin`은 백본 구성의 feature map과 인덱스를 설정, 정렬 및 검증할 수 있도록 합니다.

어떤 모델이 backbone을 지원하는지 확인하려면 [Backbone](./main_classes/backbones) API 문서를 참조하세요.

Transformers 백본을 로드하는 방법은 두 가지가 있습니다. [AutoBackbone](/docs/transformers/main/ko/main_classes/backbones#transformers.AutoBackbone)과 모델별 백본 클래스입니다.

[AutoClass](./model_doc/auto) API는 지원되는 경우, 사전 학습된 비전 모델을 [from_pretrained()](/docs/transformers/main/ko/main_classes/configuration#transformers.PreTrainedConfig.from_pretrained)를 통해 백본으로 자동으로 로드합니다.

`out_indices` 매개변수를 feature map을 가져오려는 레이어로 설정합니다. 레이어 이름을 알고 있다면 `out_features`를 사용할 수도 있습니다. 이 두 매개변수는 상호 교환적으로 사용할 수 있지만, 둘 다 사용하는 경우 동일한 레이어를 참조하도록 확인하세요.

`out_indices` 또는 `out_features`가 사용되지 않으면 backbone은 마지막 레이어의 feature map을 반환합니다. 아래 예제 코드는 `out_indices=(1,)`를 사용하여 첫 번째 레이어의 feature map을 가져옵니다.

    

```py
from transformers import AutoImageProcessor, AutoBackbone

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

모델이 backbone을 지원하는지 확인되면, backbone과 neck을 모델의 구성에 직접 로드할 수 있습니다. 구성을 모델에 전달하여 작업을 초기화합니다.

아래 예시에서는 [MaskFormer](./model_doc/maskformer) 인스턴스 분할 헤드에 사용하기 위해 [ResNet](./model_doc/resnet) 백본과 넥을 로드합니다.

config에서 초기화하면 무작위 가중치로 모델이 생성됩니다. 사전 학습된 모델을 로드하려면 `from_pretrained` API를 사용하세요.

```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는 [TimmBackbone](/docs/transformers/main/ko/main_classes/backbones#transformers.TimmBackbone) 및 [TimmBackboneConfig](/docs/transformers/main/ko/main_classes/backbones#transformers.TimmBackboneConfig) 클래스를 통해 timm 모델을 백본으로 지원합니다. 무작위 초기화 가중치를 가진 Timm 백본 모델을 생성하려면 `backbone`에 필요한 백본 체크포인트를 설정하세요.

```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/ko/main_classes/backbones#transformers.TimmBackboneConfig) 클래스를 명시적으로 호출하여 사전 학습된 timm 백본을 로드하고 생성할 수도 있습니다.

```py
from transformers import TimmBackboneConfig

backbone_config = TimmBackboneConfig("resnet50")
```

backbone 구성을 model 구성에 전달하고 backbone으로 model head인 [MaskFormerForInstanceSegmentation](/docs/transformers/main/ko/model_doc/maskformer#transformers.MaskFormerForInstanceSegmentation)을 초기화합니다.

```py
from transformers import MaskFormerConfig, MaskFormerForInstanceSegmentation

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

## Feature extraction

backbone는 이미지 특징을 추출하는 데 사용됩니다. 이미지를 backbone에 통과시켜 특징 맵을 얻습니다.

이미지를 로드하고 전처리한 뒤 백본에 전달합니다. 아래 예제에서는 첫 번째 레이어에서 특징 맵을 추출합니다.

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

