Transformers documentation

SwiftFormer

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v5.22.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Эта модель была опубликована в HF papers 27.03.2023 и добавлена в Hugging Face Transformers 12.05.2023.

SwiftFormer

Обзор

Модель SwiftFormer была предложена в статье SwiftFormer: Efficient Additive Attention for Transformer-based Real-time Mobile Vision Applications авторами Abdelrahman Shaker, Muhammad Maaz, Hanoona Rasheed, Salman Khan, Ming-Hsuan Yang, Fahad Shahbaz Khan.

Статья SwiftFormer представляет новый эффективный механизм аддитивного внимания, который эффективно заменяет квадратичные операции умножения матриц в вычислениях само-внимения линейными поэлементными умножениями. На этой основе построена серия моделей под названием «SwiftFormer», которая демонстрирует наилучшие результаты как по точности, так и по скорости инференса на мобильных устройствах. Даже их малый вариант достигает точности top-1 78,5% на ImageNet1K при задержке всего 0,8 мс на iPhone 14, что точнее и в 2 раза быстрее по сравнению с MobileViT-v2.

Аннотация из статьи следующая:

Само-внимание стало фактическим стандартом для захвата глобального контекста в различных задачах компьютерного зрения. Однако его квадратичная вычислительная сложность в зависимости от разрешения изображения ограничивает его применение в задачах реального времени, особенно при развёртывании на мобильных устройствах с ограниченными ресурсами. Хотя были предложены гибридные подходы, сочетающие преимущества свёрток и само-внимания для достижения лучшего баланса между скоростью и точностью, дорогостоящие операции матричного умножения в само-внимании по-прежнему остаются узким местом. В данной работе мы предлагаем новый эффективный механизм аддитивного внимания, который эффективно заменяет квадратичные операции матричного умножения линейными поэлементными умножениями. Наш дизайн показывает, что взаимодействие ключ-значение можно заменить линейным слоем без потери точности. В отличие от предыдущих методов, демонстрирующих наилучшие результаты, наша эффективная формулировка само-внимания позволяет использовать его на всех этапах сети. Используя предложенное нами эффективное аддитивное внимание, мы создали серию моделей под названием «SwiftFormer», которые демонстрируют наилучшие результаты как по точности, так и по скорости инференса на мобильных устройствах. Наша малая версия достигает точности top-1 78,5% на ImageNet-1K при задержке всего 0,8 мс на iPhone 14, что точнее и в 2 раза быстрее по сравнению с MobileViT-v2.

Эта модель была предоставлена пользователем shehan97. Исходный код можно найти здесь.

SwiftFormerConfig

класс transformers.SwiftFormerConfig

< >

( 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] = 224num_channels: int = 3depths: list[int] | tuple[int, ...] = (3, 3, 6, 4)embed_dims: list[int] | tuple[int, ...] = (48, 56, 112, 220)mlp_ratio: int = 4downsamples: list[bool] | tuple[bool, ...] = (True, True, True, True)hidden_act: str = 'gelu'down_patch_size: int | list[int] | tuple[int, int] = 3down_stride: int = 2down_pad: int = 1drop_path_rate: float | int = 0.0drop_mlp_rate: float | int = 0.0drop_conv_encoder_rate: float | int = 0.0use_layer_scale: bool = Truelayer_scale_init_value: float = 1e-05batch_norm_eps: float = 1e-05 )

Параметры

  • image_size (Union[int, list[int], tuple[int, int]], необязательный, по умолчанию 224) — Размер (разрешение) каждого изображения.
  • num_channels (int, необязательный, по умолчанию 3) — Количество входных каналов.
  • depths (Union[list[int], tuple[int, ...]], необязательный, по умолчанию (3, 3, 6, 4)) — Глубина каждого слоя в Transformer.
  • embed_dims (list[int], необязательный, по умолчанию [48, 56, 112, 220]) — Размерность эмбеддингов на каждом этапе
  • mlp_ratio (int, необязательный, по умолчанию 4) — Соотношение скрытого размера MLP к размеру эмбеддинга.
  • downsamples (list[bool], необязательный, по умолчанию [True, True, True, True]) — Определяет, следует ли уменьшать размерность входных данных между двумя этапами.
  • hidden_act (str, необязательный, по умолчанию gelu) — Нелинейная функция активации (функция или строка) в декодере. Например, "gelu", "relu", "silu" и т. д.
  • down_patch_size (int, необязательный, по умолчанию 3) — Размер патчей в слоях понижающей дискретизации.
  • down_stride (int, необязательный, по умолчанию 2) — Шаг свёрточных ядер в слоях понижающей дискретизации.
  • down_pad (int, необязательный, по умолчанию 1) — Размер отступов в слоях понижающей дискретизации.
  • drop_path_rate (Union[float, int], необязательный, по умолчанию 0.0) — Коэффициент drop path для слияния патчей.
  • drop_mlp_rate (float, необязательный, по умолчанию 0.0) — Коэффициент dropout для компонента MLP в SwiftFormer.
  • drop_conv_encoder_rate (float, необязательный, по умолчанию 0.0) — Коэффициент dropout для компонента ConvEncoder в SwiftFormer.
  • use_layer_scale (bool, необязательный, по умолчанию True) — Указывает, следует ли масштабировать выходные данные миксеров токенов.
  • layer_scale_init_value (float, необязательный, по умолчанию 1e-05) — Масштаб, используемый в слоях само-внимания. 0.1 для базовой модели, 1e-6 для большой. Установите 0, чтобы отключить масштабирование слоя.
  • batch_norm_eps (float, необязательный, по умолчанию 1e-05) — Значение epsilon, используемое слоями batch normalization.

Это класс конфигурации для хранения настроек модели SwiftFormerModel. Он используется для создания модели Swiftformer в соответствии с указанными аргументами, определяя архитектуру модели. Создание конфигурации с параметрами по умолчанию даст конфигурацию, аналогичную конфигурации MBZUAI/swiftformer-xs

Объекты конфигурации наследуются от PreTrainedConfig и могут использоваться для управления выводами модели. Подробнее читайте в документации PreTrainedConfig.

Пример:

>>> from transformers import SwiftFormerConfig, SwiftFormerModel

>>> # Initializing a SwiftFormer swiftformer-base-patch16-224 style configuration
>>> configuration = SwiftFormerConfig()

>>> # Initializing a model (with random weights) from the swiftformer-base-patch16-224 style configuration
>>> model = SwiftFormerModel(configuration)

>>> # Accessing the model configuration
>>> configuration = model.config

SwiftFormerModel

класс transformers.SwiftFormerModel

< >

( config: SwiftFormerConfig )

Параметры

  • config (SwiftFormerConfig) — Класс конфигурации модели, содержащий все параметры модели. Инициализация с помощью файла конфигурации не загружает веса, связанные с моделью, а только конфигурацию. Используйте метод from_pretrained() для загрузки весов модели.

Модель Swiftformer без дополнительных слоёв, выводящая необработанные скрытые состояния.

Эта модель наследуется от PreTrainedModel. См. документацию родительского класса для общих методов, которые библиотека реализует для всех своих моделей (например, загрузка или сохранение, изменение размера входных эмбеддингов, обрезка голов и т. д.)

Эта модель также является подклассом torch.nn.Module в PyTorch. Используйте её как обычный модуль PyTorch и обращайтесь к документации PyTorch по всем вопросам, связанным с общим использованием и поведением.

forward

< >

( pixel_values: typing.Optional[torch.Tensor] = Noneoutput_hidden_states: bool | None = Nonereturn_dict: bool | None = None**kwargs ) → BaseModelOutputWithNoAttention or tuple(torch.Tensor)

Параметры

  • pixel_values (torch.Tensor формы (batch_size, num_channels, image_size, image_size), необязательный) — Тензоры, соответствующие входным изображениям. Значения пикселей можно получить с помощью ViTImageProcessor. Подробности см. в ViTImageProcessor.call() (processor_class использует ViTImageProcessor для обработки изображений).
  • output_hidden_states (bool, необязательный) — Указывает, следует ли возвращать скрытые состояния всех слоев. Подробности см. в описании hidden_states среди возвращаемых тензоров.
  • return_dict (bool, необязательный) — Указывает, следует ли возвращать ModelOutput вместо обычного кортежа.

Возвращает

BaseModelOutputWithNoAttention или tuple(torch.Tensor)

BaseModelOutputWithNoAttention или кортеж torch.Tensor (если передано return_dict=False или если config.return_dict=False), содержащий различные элементы в зависимости от конфигурации (SwiftFormerConfig) и входных данных.

Метод forward модели SwiftFormerModel переопределяет специальный метод __call__.

Хотя рецепт для прямого прохода должен быть определён внутри этой функции, после этого следует вызывать экземпляр Module, а не эту функцию, поскольку первый вариант обеспечивает выполнение шагов предварительной и последующей обработки, тогда как второй молча их игнорирует.

  • last_hidden_state (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, num_channels, height, width).

    Скрытые состояния модели на выходе каждого слоя, а также необязательные выходные значения начального слоя встраивания.

Пример:

SwiftFormerForImageClassification

класс transformers.SwiftFormerForImageClassification

< >

( config: SwiftFormerConfig )

Параметры

  • config (SwiftFormerConfig) — Класс конфигурации модели, содержащий все параметры модели. Инициализация с помощью файла конфигурации не загружает веса, связанные с моделью, а только конфигурацию. Используйте метод from_pretrained() для загрузки весов модели.

Модель Swiftformer с головой для классификации изображений, например, для ImageNet.

Эта модель наследуется от PreTrainedModel. См. документацию родительского класса для общих методов, которые библиотека реализует для всех своих моделей (например, загрузка или сохранение, изменение размера входных эмбеддингов, обрезка голов и т. д.)

Эта модель также является подклассом torch.nn.Module в PyTorch. Используйте её как обычный модуль PyTorch и обращайтесь к документации PyTorch по всем вопросам, связанным с общим использованием и поведением.

forward

< >

( pixel_values: typing.Optional[torch.Tensor] = Nonelabels: typing.Optional[torch.Tensor] = Noneoutput_hidden_states: bool | None = Nonereturn_dict: bool | None = None**kwargs ) → ImageClassifierOutputWithNoAttention 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 — функция потерь классификации (кросс-энтропия).
  • output_hidden_states (bool, необязательный) — Указывает, следует ли возвращать скрытые состояния всех слоев. Подробности см. в описании hidden_states среди возвращаемых тензоров.
  • return_dict (bool, необязательный) — Указывает, следует ли возвращать ModelOutput вместо обычного кортежа.

Возвращает

ImageClassifierOutputWithNoAttention или tuple(torch.Tensor)

Объект ImageClassifierOutputWithNoAttention или кортеж torch.Tensor (если передано return_dict=False или если config.return_dict=False), содержащий различные элементы в зависимости от конфигурации (SwiftFormerConfig) и входных данных.

Метод forward класса SwiftFormerForImageClassification переопределяет специальный метод __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, num_channels, height, width). Скрытые состояния (также называемые картами признаков) модели на выходе каждого этапа.

Пример:

>>> from transformers import AutoImageProcessor, SwiftFormerForImageClassification
>>> import torch
>>> from datasets import load_dataset

>>> dataset = load_dataset("huggingface/cats-image")
>>> image = dataset["test"]["image"][0]

>>> image_processor = AutoImageProcessor.from_pretrained("MBZUAI/swiftformer-xs")
>>> model = SwiftFormerForImageClassification.from_pretrained("MBZUAI/swiftformer-xs")

>>> 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])
...
Update on GitHub