Transformers documentation
Backbones
Backbones
Les tâches de vision par ordinateur de haut niveau, telles que la détection d'objets ou la segmentation d'images, utilisent plusieurs modèles ensemble pour générer une prédiction. Un modèle distinct est utilisé pour le backbone, le cou (neck) et la tête (head). Le backbone extrait des caractéristiques utiles d'une image d'entrée pour former une carte de caractéristiques, le cou combine et traite les cartes de caractéristiques, et la tête les utilise pour effectuer une prédiction.

Chargez un backbone avec from_pretrained() et utilisez le paramètre out_indices pour déterminer de quelle couche, donnée par l'index, extraire une carte de caractéristiques.
from transformers import AutoBackbone
model = AutoBackbone.from_pretrained("microsoft/swin-tiny-patch4-window7-224", out_indices=(1,))Ce guide décrit la classe backbone, les backbones issus de la bibliothèque timm, et comment extraire des caractéristiques à leur aide.
Classes de backbone
Il existe deux classes de backbone.
~transformers.utils.BackboneMixinpermet de charger un backbone et inclut des fonctions pour extraire les cartes de caractéristiques et les indices à partir de la configuration.~transformers.utils.BackboneConfigMixinpermet de définir, d’aligner et de vérifier la carte de caractéristiques et les indices d’une configuration de backbone.
Consultez la documentation de l'API Backbone pour vérifier quels modèles prennent en charge un backbone.
Il existe deux façons de charger un backbone Transformers, AutoBackbone et une classe de backbone spécifique à un modèle.
L’API AutoClass charge automatiquement un modèle de vision préentraîné avec from_pretrained() en tant que backbone si c’est pris en charge.
Définissez le paramètre out_indices sur la couche dont vous souhaitez obtenir la carte de caractéristiques. Si vous connaissez le nom de la couche, vous pouvez également utiliser out_features. Ces paramètres sont interchangeables, mais si vous utilisez les deux, assurez-vous qu’ils font référence à la même couche.
Lorsque out_indices ou out_features n’est pas utilisé, le backbone renvoie la carte de caractéristiques de la dernière couche. Le code d’exemple ci-dessous utilise out_indices=(1,) pour obtenir la carte de caractéristiques de la première couche.

from transformers import AutoImageProcessor, AutoBackbone
model = AutoBackbone.from_pretrained("microsoft/swin-tiny-patch4-window7-224", out_indices=(1,))Lorsque vous savez qu'un modèle prend en charge un backbone, vous pouvez charger le backbone et le neck directement dans la configuration du modèle. Transmettez la configuration au modèle pour l'initialiser pour une tâche.
L'exemple ci-dessous charge un backbone et un neck ResNet pour les utiliser dans une tête de segmentation d'instances MaskFormer.
Notez que l’initialisation à partir de la configuration crée le modèle avec des poids aléatoires. Si vous souhaitez charger un modèle pré-entraîné, utilisez l’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)Une autre option consiste à charger séparément la configuration du backbone, puis à la passer à backbone_config dans la configuration du modèle.
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 timm
timm est une collection de modèles de vision pour l’entraînement et l’inférence. Transformers prend en charge les modèles timm comme squelettes via les classes TimmBackbone et TimmBackboneConfig. Définissez le point de contrôle de squelette nécessaire dans backbone pour créer un modèle avec un squelette Timm aux poids initialisés aléatoirement.
from transformers import MaskFormerConfig, MaskFormerForInstanceSegmentation, TimmBackboneConfig
backbone_config = TimmBackboneConfig(backbone="resnet50", out_indices=[-1])
config = MaskFormerConfig(backbone_config=backbone_config)
model = MaskFormerForInstanceSegmentation(config)Vous pouvez également appeler explicitement la classe TimmBackboneConfig pour charger et créer un backbone timm pré-entraîné.
from transformers import TimmBackboneConfig
backbone_config = TimmBackboneConfig("resnet50")Transmettez la configuration du backbone à la configuration du modèle et instanciez la tête du modèle, MaskFormerForInstanceSegmentation, avec le backbone.
from transformers import MaskFormerConfig, MaskFormerForInstanceSegmentation
config = MaskFormerConfig(backbone_config=backbone_config)
model = MaskFormerForInstanceSegmentation(config)Extraction de caractéristiques
Le backbone est utilisé pour extraire les caractéristiques de l'image. Faites passer une image à travers le backbone pour obtenir les cartes de caractéristiques.
Chargez et prétraitez une image, puis transmettez-la au backbone. L’exemple ci-dessous extrait les cartes de caractéristiques de la première couche.
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)Les fonctionnalités sont stockées et accessibles via l'attribut feature_maps des sorties.
feature_maps = outputs.feature_maps
list(feature_maps[0].shape)
[1, 96, 56, 56]