Transformers documentation
Базовые модели
Базовые модели
Задачи компьютерного зрения высокого уровня, такие как обнаружение объектов или сегментация изображений, используют несколько моделей совместно для генерации предсказания. Отдельная модель используется для backbone, neck и head. Backbone извлекает полезные признаки из входного изображения в виде карты признаков, neck объединяет и обрабатывает карты признаков, а head использует их для формирования предсказания.

Загрузите backbone с помощью from_pretrained() и используйте параметр out_indices, чтобы определить, из какого слоя (по индексу) извлекать карту признаков.
from transformers import AutoBackbone
model = AutoBackbone.from_pretrained("microsoft/swin-tiny-patch4-window7-224", out_indices=(1,))В этом руководстве описан базовый класс, бэкбоны из библиотеки timm и способы извлечения признаков с их помощью.
Классы базовых моделей
Существуют два класса базовых моделей.
~transformers.utils.BackboneMixinпозволяет загрузить backbone и включает функции для извлечения карт признаков и индексов из конфигурации.~transformers.utils.BackboneConfigMixinпозволяет задавать, выравнивать и проверять карты признаков и индексы конфигурации бэкбона.
См. документацию API Backbone, чтобы узнать, какие модели поддерживают backbone.
Существует два способа загрузить базовую модель Transformers: AutoBackbone и класс базовой модели, специфичный для конкретной модели.
API AutoClass автоматически загружает предобученную модель зрения с помощью from_pretrained() в качестве базовой сети, если это поддерживается.
Установите параметр out_indices в значение слоя, из которого вы хотите получить карту признаков. Если вам известно имя слоя, можно также использовать out_features. Эти параметры взаимозаменяемы, но если вы используете оба, убедитесь, что они ссылаются на один и тот же слой.
Если out_indices или out_features не используются, backbone возвращает карту признаков из последнего слоя. В примере кода ниже используется out_indices=(1,), чтобы получить карту признаков из первого слоя.

from transformers import AutoImageProcessor, AutoBackbone
model = AutoBackbone.from_pretrained("microsoft/swin-tiny-patch4-window7-224", out_indices=(1,))Когда вы знаете, что модель поддерживает backbone, вы можете загрузить backbone и neck непосредственно в конфигурацию модели. Передайте конфигурацию модели для её инициализации под конкретную задачу.
Пример ниже загружает ResNet в качестве основы и «шеи» для использования в голове сегментации инстансов MaskFormer.
Обратите внимание, что инициализация из конфигурации создаст модель со случайными весами. Если вы хотите загрузить предобученную модель, используйте 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)Другой вариант — отдельно загрузить конфигурацию бэкбона, а затем передать её в backbone_config в конфигурации модели.
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 — это коллекция моделей компьютерного зрения для обучения и инференса. Transformers поддерживает модели timm в качестве базовых (backbone) с помощью классов TimmBackbone и TimmBackboneConfig. Чтобы создать модель с базовой частью Timm и случайно инициализированными весами, укажите необходимый чекпоинт базовой части в backbone.
from transformers import MaskFormerConfig, MaskFormerForInstanceSegmentation, TimmBackboneConfig
backbone_config = TimmBackboneConfig(backbone="resnet50", out_indices=[-1])
config = MaskFormerConfig(backbone_config=backbone_config)
model = MaskFormerForInstanceSegmentation(config)Вы также можете явно вызвать класс TimmBackboneConfig, чтобы загрузить и создать предобученный timm backbone.
from transformers import TimmBackboneConfig
backbone_config = TimmBackboneConfig("resnet50")Передайте конфигурацию backbone в конфигурацию модели и создайте голову модели MaskFormerForInstanceSegmentation с использованием backbone.
from transformers import MaskFormerConfig, MaskFormerForInstanceSegmentation
config = MaskFormerConfig(backbone_config=backbone_config)
model = MaskFormerForInstanceSegmentation(config)Извлечение признаков
Бэкбон используется для извлечения признаков изображения. Пропустите изображение через бэкбон, чтобы получить карты признаков.
Загрузите и предобработайте изображение и передайте его в backbone. В примере ниже извлекаются карты признаков из первого слоя.
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 в выходных данных.
feature_maps = outputs.feature_maps
list(feature_maps[0].shape)
[1, 96, 56, 56]