Transformers documentation
Backbones
Backbones
Tarefas de visão computacional de alto nível, como detecção de objetos ou segmentação de imagem, utilizam vários modelos em conjunto para gerar uma previsão. Um modelo separado é usado para o backbone, o neck e o head. O backbone extrai recursos úteis de uma imagem de entrada para um mapa de recursos, o neck combina e processa os mapas de recursos, e o head os utiliza para fazer uma previsão.

Carregue um backbone com from_pretrained() e use o parâmetro out_indices para determinar de qual camada, indicada pelo índice, extrair o mapa de características.
from transformers import AutoBackbone
model = AutoBackbone.from_pretrained("microsoft/swin-tiny-patch4-window7-224", out_indices=(1,))Este guia descreve a classe backbone, os backbones da biblioteca timm e como extrair recursos com eles.
Classes de backbone
Existem duas classes de backbone.
~transformers.utils.BackboneMixinpermite carregar um backbone e inclui funções para extrair os feature maps e os índices a partir do config.~transformers.utils.BackboneConfigMixinpermite definir, alinhar e verificar o mapa de recursos e os índices de uma configuração de backbone.
Consulte a documentação da API Backbone para verificar quais modelos suportam um backbone.
Existem duas formas de carregar um backbone do Transformers, AutoBackbone e uma classe de backbone específica do modelo.
A API AutoClass carrega automaticamente um modelo de visão pré-treinado com from_pretrained() como backbone, caso seja suportado.
Defina o parâmetro out_indices para a camada da qual você deseja obter o mapa de recursos. Se você souber o nome da camada, também pode usar out_features. Esses parâmetros podem ser usados de forma intercambiável, mas, se usar ambos, certifique-se de que eles se refiram à mesma camada.
Quando out_indices ou out_features não são usados, o backbone retorna o mapa de características da última camada. O código de exemplo abaixo usa out_indices=(1,) para obter o mapa de características da primeira camada.

from transformers import AutoImageProcessor, AutoBackbone
model = AutoBackbone.from_pretrained("microsoft/swin-tiny-patch4-window7-224", out_indices=(1,))Quando você sabe que um modelo suporta um backbone, você pode carregar o backbone e o neck diretamente na configuração do modelo. Passe a configuração para o modelo para inicializá-lo para uma tarefa.
O exemplo abaixo carrega um backbone e um neck ResNet para uso em uma cabeça de segmentação de instâncias MaskFormer.
Observe que a inicialização a partir da configuração criará o modelo com pesos aleatórios. Se você deseja carregar um modelo pré-treinado, use a API from_pretrained.
from transformers import AutoConfig, MaskFormerConfig, MaskFormerForInstanceSegmentation
backbone_config = AutoConfig.from_pretrained("microsoft/resnet-50")
config = MaskFormerConfig(backbone_config=backbone_config)
model = MaskFormerForInstanceSegmentation(config)Outra opção é carregar a configuração do backbone separadamente e, em seguida, passá-la para backbone_config na configuração do modelo.
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)backbones do timm
timm é uma coleção de modelos de visão para treinamento e inferência. O Transformers suporta modelos timm como backbones por meio das classes TimmBackbone e TimmBackboneConfig. Defina o checkpoint de backbone necessário em backbone para criar um modelo com backbone Timm com pesos inicializados aleatoriamente.
from transformers import MaskFormerConfig, MaskFormerForInstanceSegmentation, TimmBackboneConfig
backbone_config = TimmBackboneConfig(backbone="resnet50", out_indices=[-1])
config = MaskFormerConfig(backbone_config=backbone_config)
model = MaskFormerForInstanceSegmentation(config)Você também pode chamar explicitamente a classe TimmBackboneConfig para carregar e criar um backbone timm pré-treinado.
from transformers import TimmBackboneConfig
backbone_config = TimmBackboneConfig("resnet50")Passe a configuração do backbone para a configuração do modelo e instancie a cabeça do modelo, MaskFormerForInstanceSegmentation, com o backbone.
from transformers import MaskFormerConfig, MaskFormerForInstanceSegmentation
config = MaskFormerConfig(backbone_config=backbone_config)
model = MaskFormerForInstanceSegmentation(config)Extração de recursos
O backbone é usado para extrair recursos de imagem. Passe uma imagem pelo backbone para obter os mapas de recursos.
Carregue e pré-processa uma imagem e a passa para o backbone. O exemplo abaixo extrai os mapas de características da primeira camada.
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)Os recursos são armazenados e acessados pelo atributo feature_maps das saídas.
feature_maps = outputs.feature_maps
list(feature_maps[0].shape)
[1, 96, 56, 56]