Transformers documentation
Swin Transformer
Эта модель была опубликована в HF papers 25.03.2021 и добавлена в Hugging Face Transformers 21.01.2022.
Swin Transformer
Swin Transformer — это иерархический vision transformer. Изображения обрабатываются в виде патчей, а для извлечения локальной информации используется оконное self-attention. Эти окна смещаются по изображению, что обеспечивает связи между окнами и позволяет более эффективно захватывать глобальную информацию. Такой иерархический подход со смещёнными окнами позволяет Swin Transformer эффективно обрабатывать изображения в разных масштабах и достигать линейной вычислительной сложности относительно размера изображения, что делает его универсальным базовым модулем для различных задач компьютерного зрения, таких как классификация изображений и обнаружение объектов.
Все официальные контрольные точки Swin Transformer находятся в организации Microsoft.
Щёлкните по моделям Swin Transformer в боковой панели справа, чтобы увидеть дополнительные примеры применения Swin Transformer к различным задачам обработки изображений.
Пример ниже демонстрирует, как классифицировать изображение с помощью Pipeline или класса AutoModel.
from transformers import pipeline
pipeline = pipeline(
task="image-classification",
model="microsoft/swin-tiny-patch4-window7-224",
device=0
)
pipeline("https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/pipeline-cat-chonk.jpeg")import requests
import torch
from PIL import Image
from transformers import AutoImageProcessor, AutoModelForImageClassification
image_processor = AutoImageProcessor.from_pretrained(
"microsoft/swin-tiny-patch4-window7-224",
use_fast=True,
)
model = AutoModelForImageClassification.from_pretrained(
"microsoft/swin-tiny-patch4-window7-224",
device_map="auto"
)
url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/pipeline-cat-chonk.jpeg"
image = Image.open(requests.get(url, stream=True).raw)
inputs = image_processor(image, return_tensors="pt").to(model.device)
with torch.no_grad():
logits = model(**inputs).logits
predicted_class_id = logits.argmax(dim=-1).item()
class_labels = model.config.id2label
predicted_class_label = class_labels[predicted_class_id]
print(f"The predicted class label is: {predicted_class_label}")Примечания
- Swin может дополнять входные данные для любой высоты и ширины, кратных
32. - Swin можно использовать в качестве backbone. При
output_hidden_states = Trueон выводит какhidden_states, так иreshaped_hidden_states. Размерностьreshaped_hidden_statesсоставляет(batch, num_channels, height, width), а не(batch_size, sequence_length, num_channels).
SwinConfig
класс transformers.SwinConfig
< source >( transformers_version: str | None = Nonearchitectures: list[str] | None = Noneoutput_hidden_states: bool | None = Falsereturn_dict: bool | None = Truedtype: str | torch.dtype | None = Nonechunk_size_feed_forward: int = 0is_encoder_decoder: bool = Falseid2label: dict[int, str] | dict[str, str] | None = Nonelabel2id: dict[str, int] | dict[str, str] | None = Noneproblem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = Noneimage_size: int | list[int] | tuple[int, int] = 224patch_size: int | list[int] | tuple[int, int] = 4num_channels: int = 3embed_dim: int = 96depths: list[int] | tuple[int, ...] = (2, 2, 6, 2)num_heads: list[int] | tuple[int, ...] = (3, 6, 12, 24)window_size: int = 7mlp_ratio: float | int = 4.0qkv_bias: bool = Truehidden_dropout_prob: float | int = 0.0attention_probs_dropout_prob: float | int = 0.0drop_path_rate: float | int = 0.1hidden_act: str = 'gelu'use_absolute_embeddings: bool = Falseinitializer_range: float = 0.02layer_norm_eps: float = 1e-05encoder_stride: int = 32_out_features: list[str] | None = None_out_indices: list[int] | None = None )
Параметры
- image_size (
Union[int, list[int], tuple[int, int]], необязательный, по умолчанию224) — Размер (разрешение) каждого изображения. - patch_size (
Union[int, list[int], tuple[int, int]], необязательный, по умолчанию4) — Размер (разрешение) каждого патча. - num_channels (
int, необязательный, по умолчанию3) — Количество входных каналов. - embed_dim (
int, необязательный, по умолчанию96) — Размерность эмбеддингов и скрытых состояний. - depths (
list(int), необязательный, по умолчанию[2, 2, 6, 2]) — Глубина каждого слоя в кодере Transformer. - num_heads (
list(int), необязательный, по умолчанию[3, 6, 12, 24]) — Количество головок внимания в каждом слое кодировщика Transformer. - window_size (
int, необязательный, по умолчанию 7) — Размер окон. - mlp_ratio (
Union[float, int], необязательный, по умолчанию4.0) — Соотношение скрытого размера MLP к размеру эмбеддинга. - qkv_bias (
bool, необязательный, по умолчаниюTrue) — Добавлять ли смещение к запросам, ключам и значениям. - hidden_dropout_prob (
Union[float, int], необязательный, по умолчанию0.0) — Вероятность dropout для всех полносвязных слоёв в блоках эмбеддингов, энкодера и пуллера. - attention_probs_dropout_prob (
Union[float, int], необязательный, по умолчанию0.0) — Коэффициент dropout для вероятностей внимания. - drop_path_rate (
Union[float, int], необязательный, по умолчанию0.1) — Коэффициент drop path для слияния патчей. - hidden_act (
str, необязательный, по умолчаниюgelu) — Нелинейная функция активации (функция или строка) в декодере. Например,"gelu","relu","silu"и т. д. - use_absolute_embeddings (
bool, необязательный, по умолчаниюFalse) — Использовать ли абсолютные позиционные эмбеддинги. - initializer_range (
float, необязательный, по умолчанию0.02) — Стандартное отклонение truncated_normal_initializer, используемое для инициализации всех матриц весов. - layer_norm_eps (
float, необязательный, по умолчанию1e-05) — Значение epsilon, используемое слоями нормализации. - encoder_stride (
int, необязательный, по умолчанию 32) — Коэффициент, во сколько раз увеличивается пространственное разрешение в декодерной голове для моделирования замаскированных изображений.
Это класс конфигурации для хранения настроек модели SwinModel. Он используется для создания модели Swin в соответствии с указанными аргументами, определяя архитектуру модели. Создание конфигурации с параметрами по умолчанию даст конфигурацию, аналогичную конфигурации microsoft/swin-tiny-patch4-window7-224
Объекты конфигурации наследуются от PreTrainedConfig и могут использоваться для управления выводами модели. Подробнее читайте в документации PreTrainedConfig.
Пример:
>>> from transformers import SwinConfig, SwinModel
>>> # Initializing a Swin microsoft/swin-tiny-patch4-window7-224 style configuration
>>> configuration = SwinConfig()
>>> # Initializing a model (with random weights) from the microsoft/swin-tiny-patch4-window7-224 style configuration
>>> model = SwinModel(configuration)
>>> # Accessing the model configuration
>>> configuration = model.configSwinModel
класс transformers.SwinModel
< source >( config: SwinConfigadd_pooling_layer = Trueuse_mask_token = False )
Параметры
- config (SwinConfig) — Класс конфигурации модели, содержащий все параметры модели. Инициализация с помощью файла конфигурации не загружает веса, связанные с моделью, а только конфигурацию. Чтобы загрузить веса модели, используйте метод from_pretrained().
- add_pooling_layer (
bool, необязательный, по умолчаниюTrue) — Указывает, следует ли применять слой пулинга. - use_mask_token (
bool, необязательный, по умолчаниюFalse) — Создавать и применять токены маски в слое встраивания или нет.
Базовая модель Swin, выводящая необработанные скрытые состояния без какого-либо специализированного слоя наверху.
Эта модель наследуется от PreTrainedModel. См. документацию родительского класса для общих методов, которые библиотека реализует для всех своих моделей (например, загрузка или сохранение, изменение размера входных эмбеддингов, обрезка голов и т. д.)
Эта модель также является подклассом torch.nn.Module в PyTorch. Используйте её как обычный модуль PyTorch и обращайтесь к документации PyTorch по всем вопросам, связанным с общим использованием и поведением.
forward
< source >( pixel_values: typing.Optional[torch.Tensor] = Nonebool_masked_pos: typing.Optional[torch.BoolTensor] = Noneinterpolate_pos_encoding: bool = False**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → SwinModelOutput or tuple(torch.Tensor)
Параметры
- pixel_values (
torch.Tensorформы(batch_size, num_channels, image_size, image_size), необязательный) — Тензоры, соответствующие входным изображениям. Значения пикселей можно получить с помощью ViTImageProcessor. Подробности см. в ViTImageProcessor.call() (processor_classиспользует ViTImageProcessor для обработки изображений). - bool_masked_pos (
torch.BoolTensorформы(batch_size, num_patches), необязательный) — Логические позиции маски. Указывает, какие патчи замаскированы (1), а какие нет (0). - interpolate_pos_encoding (
bool, необязательный, по умолчаниюFalse) — Указывает, следует ли интерполировать предобученные позиционные кодировки.
Возвращает
SwinModelOutput или tuple(torch.Tensor)
SwinModelOutput или кортеж из
torch.Tensor (если передано return_dict=False или если config.return_dict=False), содержащий различные
элементы в зависимости от конфигурации (SwinConfig) и входных данных.
Метод forward класса SwinModel переопределяет специальный метод __call__.
Хотя рецепт для прямого прохода должен быть определён внутри этой функции, после этого следует вызывать экземпляр
Module, а не эту функцию, поскольку первый вариант обеспечивает выполнение шагов предварительной и последующей обработки, тогда как второй молча их игнорирует.
last_hidden_state (
torch.Tensorформы(batch_size, sequence_length, hidden_size), необязательный) — Последовательность скрытых состояний на выходе последнего слоя модели.pooler_output (
torch.Tensorформы(batch_size, hidden_size), необязательный, возвращается при передачеadd_pooling_layer=True) — Средневзвешенное усреднение (average pooling) скрытых состояний последнего слоя.hidden_states (
tuple[torch.Tensor, ...], необязательный, возвращается при передачеoutput_hidden_states=Trueили когдаconfig.output_hidden_states=True) — Кортеж изtorch.Tensor(один для вывода слоя встраиваний, если модель имеет слой встраиваний, + один для вывода каждого слоя) формы(batch_size, sequence_length, hidden_size).Скрытые состояния модели на выходе каждого слоя, а также необязательные выходные значения начального слоя встраивания.
attentions (
tuple[torch.Tensor, ...], необязательный, возвращается при передачеoutput_attentions=Trueили когдаconfig.output_attentions=True) — Кортежtorch.Tensor(по одному на каждый слой) формы(batch_size, num_heads, sequence_length, sequence_length).Веса внимания после softmax в механизме внимания, используемые для вычисления взвешенного среднего в головах само-внимания.
reshaped_hidden_states (
tuple(torch.Tensor), необязательный, возвращается при передачеoutput_hidden_states=Trueили приconfig.output_hidden_states=True) — Кортеж изtorch.Tensor(один для вывода эмбеддингов + один для вывода каждого этапа) с формой(batch_size, hidden_size, height, width).Скрытые состояния модели на выходе каждого слоя, а также выходные значения начального слоя встраиваний, преобразованные в форму, включающую пространственные измерения.
SwinForMaskedImageModeling
класс transformers.SwinForMaskedImageModeling
< source >( config: SwinConfig )
Параметры
- config (SwinConfig) — Класс конфигурации модели, содержащий все параметры модели. Инициализация с помощью файла конфигурации не загружает веса, связанные с моделью, а только конфигурацию. Чтобы загрузить веса модели, используйте метод from_pretrained().
Модель Swin с декодером сверху для моделирования замаскированных изображений, как предложено в SimMIM.
Эта модель наследуется от PreTrainedModel. См. документацию родительского класса для общих методов, которые библиотека реализует для всех своих моделей (например, загрузка или сохранение, изменение размера входных эмбеддингов, обрезка голов и т. д.)
Эта модель также является подклассом torch.nn.Module в PyTorch. Используйте её как обычный модуль PyTorch и обращайтесь к документации PyTorch по всем вопросам, связанным с общим использованием и поведением.
forward
< source >( pixel_values: typing.Optional[torch.Tensor] = Nonebool_masked_pos: typing.Optional[torch.BoolTensor] = Noneinterpolate_pos_encoding: bool = False**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → SwinMaskedImageModelingOutput or tuple(torch.Tensor)
Параметры
- pixel_values (
torch.Tensorформы(batch_size, num_channels, image_size, image_size), необязательный) — Тензоры, соответствующие входным изображениям. Значения пикселей можно получить с помощью ViTImageProcessor. Подробности см. в ViTImageProcessor.call() (processor_classиспользует ViTImageProcessor для обработки изображений). - bool_masked_pos (
torch.BoolTensorформы(batch_size, num_patches)) — Позиции маски в булевом формате. Указывает, какие патчи замаскированы (1), а какие нет (0). - interpolate_pos_encoding (
bool, необязательный, по умолчаниюFalse) — Указывает, следует ли интерполировать предобученные позиционные кодировки.
Возвращает
SwinMaskedImageModelingOutput или tuple(torch.Tensor)
SwinMaskedImageModelingOutput или кортеж из
torch.Tensor (если передано return_dict=False или если config.return_dict=False), содержащий различные
элементы в зависимости от конфигурации (SwinConfig) и входных данных.
Метод forward класса SwinForMaskedImageModeling переопределяет специальный метод __call__.
Хотя рецепт для прямого прохода должен быть определён внутри этой функции, после этого следует вызывать экземпляр
Module, а не эту функцию, поскольку первый вариант обеспечивает выполнение шагов предварительной и последующей обработки, тогда как второй молча их игнорирует.
loss (
torch.Tensorформы(1,), необязательный, возвращается, если переданbool_masked_pos) — Потеря маскированного моделирования изображений (MLM).восстановление (
torch.Tensorформы(batch_size, num_channels, height, width)) — Восстановленные значения пикселей.hidden_states (
tuple[torch.Tensor, ...], необязательный, возвращается при передачеoutput_hidden_states=Trueили когдаconfig.output_hidden_states=True) — Кортеж изtorch.Tensor(один для вывода слоя встраиваний, если модель имеет слой встраиваний, + один для вывода каждого слоя) формы(batch_size, sequence_length, hidden_size).Скрытые состояния модели на выходе каждого слоя, а также необязательные выходные значения начального слоя встраивания.
attentions (
tuple[torch.Tensor, ...], необязательный, возвращается при передачеoutput_attentions=Trueили когдаconfig.output_attentions=True) — Кортежtorch.Tensor(по одному на каждый слой) формы(batch_size, num_heads, sequence_length, sequence_length).Веса внимания после softmax в механизме внимания, используемые для вычисления взвешенного среднего в головах само-внимания.
reshaped_hidden_states (
tuple(torch.Tensor), необязательный, возвращается при передачеoutput_hidden_states=Trueили приconfig.output_hidden_states=True) — Кортеж изtorch.Tensor(один для вывода эмбеддингов + один для вывода каждого этапа) с формой(batch_size, hidden_size, height, width).Скрытые состояния модели на выходе каждого слоя, а также выходные значения начального слоя встраиваний, преобразованные в форму, включающую пространственные измерения.
Примеры:
>>> from transformers import AutoImageProcessor, SwinForMaskedImageModeling
>>> import torch
>>> from PIL import Image
>>> from huggingface_hub.utils import httpx
>>> from io import BytesIO
>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> with httpx.stream("GET", url) as response:
... image = Image.open(BytesIO(response.read()))
>>> image_processor = AutoImageProcessor.from_pretrained("microsoft/swin-base-simmim-window6-192")
>>> model = SwinForMaskedImageModeling.from_pretrained("microsoft/swin-base-simmim-window6-192")
>>> num_patches = (model.config.image_size // model.config.patch_size) ** 2
>>> pixel_values = image_processor(images=image, return_tensors="pt").pixel_values
>>> # create random boolean mask of shape (batch_size, num_patches)
>>> bool_masked_pos = torch.randint(low=0, high=2, size=(1, num_patches)).bool()
>>> outputs = model(pixel_values, bool_masked_pos=bool_masked_pos)
>>> loss, reconstructed_pixel_values = outputs.loss, outputs.reconstruction
>>> list(reconstructed_pixel_values.shape)
[1, 3, 192, 192]SwinForImageClassification
класс transformers.SwinForImageClassification
< source >( config: SwinConfig )
Параметры
- config (SwinConfig) — Класс конфигурации модели, содержащий все параметры модели. Инициализация с помощью файла конфигурации не загружает веса, связанные с моделью, а только конфигурацию. Чтобы загрузить веса модели, используйте метод from_pretrained().
Модель-трансформер Swin с головной частью для классификации изображений (линейный слой поверх финального скрытого состояния токена [CLS]), например, для ImageNet.
Обратите внимание, что Swin можно дообучать на изображениях с более высоким разрешением, чем те, на которых он обучался, установив
interpolate_pos_encodingвTrueв forward модели. Это позволит интерполировать предобученные позиционные эмбеддинги под более высокое разрешение.
Эта модель наследуется от PreTrainedModel. См. документацию родительского класса для общих методов, которые библиотека реализует для всех своих моделей (например, загрузка или сохранение, изменение размера входных эмбеддингов, обрезка голов и т. д.)
Эта модель также является подклассом torch.nn.Module в PyTorch. Используйте её как обычный модуль PyTorch и обращайтесь к документации PyTorch по всем вопросам, связанным с общим использованием и поведением.
forward
< source >( pixel_values: typing.Optional[torch.Tensor] = Nonelabels: typing.Optional[torch.LongTensor] = Noneinterpolate_pos_encoding: bool = False**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → SwinImageClassifierOutput or tuple(torch.Tensor)
Параметры
- pixel_values (
torch.Tensorформы(batch_size, num_channels, image_size, image_size), необязательный) — Тензоры, соответствующие входным изображениям. Значения пикселей можно получить с помощью ViTImageProcessor. Подробности см. в ViTImageProcessor.call() (processor_classиспользует ViTImageProcessor для обработки изображений). - labels (
torch.LongTensorформы(batch_size,), необязательный) — Метки для вычисления функции потерь классификации/регрессии изображений. Индексы должны находиться в диапазоне[0, ..., config.num_labels - 1]. Еслиconfig.num_labels == 1, вычисляется функция потерь регрессии (среднеквадратичная ошибка), еслиconfig.num_labels > 1— функция потерь классификации (кросс-энтропия). - interpolate_pos_encoding (
bool, необязательный, по умолчаниюFalse) — Указывает, следует ли интерполировать предобученные позиционные кодировки.
Возвращает
SwinImageClassifierOutput или tuple(torch.Tensor)
SwinImageClassifierOutput или кортеж из
torch.Tensor (если передано return_dict=False или если config.return_dict=False), содержащий различные
элементы в зависимости от конфигурации (SwinConfig) и входных данных.
Метод forward класса SwinForImageClassification переопределяет специальный метод __call__.
Хотя рецепт для прямого прохода должен быть определён внутри этой функции, после этого следует вызывать экземпляр
Module, а не эту функцию, поскольку первый вариант обеспечивает выполнение шагов предварительной и последующей обработки, тогда как второй молча их игнорирует.
loss (
torch.Tensorформы(1,), необязательный, возвращается, если заданlabels) — Потери классификации (или регрессии, если config.num_labels==1).logits (
torch.Tensorформы(batch_size, config.num_labels)) — Оценки для классификации (или регрессии, если config.num_labels==1) до применения SoftMax.hidden_states (
tuple[torch.Tensor, ...], необязательный, возвращается при передачеoutput_hidden_states=Trueили когдаconfig.output_hidden_states=True) — Кортеж изtorch.Tensor(один для вывода слоя встраиваний, если модель имеет слой встраиваний, + один для вывода каждого слоя) формы(batch_size, sequence_length, hidden_size).Скрытые состояния модели на выходе каждого слоя, а также необязательные выходные значения начального слоя встраивания.
attentions (
tuple[torch.Tensor, ...], необязательный, возвращается при передачеoutput_attentions=Trueили когдаconfig.output_attentions=True) — Кортежtorch.Tensor(по одному на каждый слой) формы(batch_size, num_heads, sequence_length, sequence_length).Веса внимания после softmax в механизме внимания, используемые для вычисления взвешенного среднего в головах само-внимания.
reshaped_hidden_states (
tuple(torch.Tensor), необязательный, возвращается при передачеoutput_hidden_states=Trueили приconfig.output_hidden_states=True) — Кортеж изtorch.Tensor(один для вывода эмбеддингов + один для вывода каждого этапа) с формой(batch_size, hidden_size, height, width).Скрытые состояния модели на выходе каждого слоя, а также выходные значения начального слоя встраиваний, преобразованные в форму, включающую пространственные измерения.
Пример:
>>> from transformers import AutoImageProcessor, SwinForImageClassification
>>> import torch
>>> from datasets import load_dataset
>>> dataset = load_dataset("huggingface/cats-image")
>>> image = dataset["test"]["image"][0]
>>> image_processor = AutoImageProcessor.from_pretrained("microsoft/swin-tiny-patch4-window7-224")
>>> model = SwinForImageClassification.from_pretrained("microsoft/swin-tiny-patch4-window7-224")
>>> inputs = image_processor(image, return_tensors="pt")
>>> with torch.no_grad():
... logits = model(**inputs).logits
>>> # model predicts one of the 1000 ImageNet classes
>>> predicted_label = logits.argmax(-1).item()
>>> print(model.config.id2label[predicted_label])
...