Transformers documentation

FocalNet

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 22.03.2022 и добавлена в Hugging Face Transformers 23.04.2023.

FocalNet

Обзор

Модель FocalNet была предложена в работе Focal Modulation Networks авторами Jianwei Yang, Chunyuan Li, Xiyang Dai, Lu Yuan, Jianfeng Gao. FocalNets полностью заменяют self-attention (используемый в моделях, таких как ViT и Swin) механизмом focal modulation для моделирования взаимодействий между токенами в задачах компьютерного зрения. Авторы утверждают, что FocalNets превосходят модели на основе self-attention с сопоставимыми вычислительными затратами на задачах классификации изображений, обнаружения объектов и сегментации.

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

Мы предлагаем фокальные модуляционные сети (FocalNets), в которых само-внимание (SA) полностью заменяется механизмом фокальной модуляции для моделирования взаимодействий между токенами в задачах компьютерного зрения. Фокальная модуляция состоит из трёх компонентов: (i) иерархическая контекстуализация, реализованная с помощью стека сверточных слоёв с глубиной (depth-wise), для кодирования визуальных контекстов от коротких до длинных диапазонов; (ii) агрегация с гейтами (gated aggregation) для выборочного сбора контекстов для каждого запросного токена на основе его содержимого; и (iii) поэлементная модуляция или аффинное преобразование для внедрения агрегированного контекста в запрос. Обширные эксперименты показывают, что FocalNets превосходят передовые аналоги на основе SA (например, Swin и Focal Transformers) при сопоставимых вычислительных затратах на задачах классификации изображений, обнаружения объектов и сегментации. В частности, FocalNets с размером tiny и base достигают точности top-1 82,3% и 83,9% на ImageNet-1K. После предобучения на ImageNet-22K с разрешением 224, модель достигает точности top-1 86,5% и 87,3% при дообучении с разрешением 224 и 384 соответственно. При переносе на задачи нижнего уровня FocalNets демонстрируют явное превосходство. Для обнаружения объектов с Mask R-CNN, FocalNet base, обученный с расписанием 1\times, превосходит аналог Swin на 2,1 балла и уже превосходит Swin, обученный с расписанием 3\times (49,0 против 48,5). Для семантической сегментации с UPerNet, FocalNet base в одноуровневом режиме превосходит Swin на 2,4 балла и превосходит Swin в многоуровневом режиме (50,5 против 49,7). Используя крупный FocalNet и Mask2former, мы достигли 58,5 mIoU для семантической сегментации ADE20K и 57,9 PQ для паноптической сегментации COCO. Используя огромный FocalNet и DINO, мы достигли 64,3 и 64,4 mAP на COCO minival и test-dev соответственно, установив новый SoTA, превосходящий значительно более крупные модели на основе внимания, такие как Swinv2-G и BEIT-3.

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

FocalNetConfig

класс transformers.FocalNetConfig

< >

( 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 = 96use_conv_embed: bool = Falsehidden_sizes: list[int] | tuple[int, ...] = (192, 384, 768, 768)depths: list[int] | tuple[int, ...] = (2, 2, 6, 2)focal_levels: list[int] | tuple[int, ...] = (2, 2, 2, 2)focal_windows: list[int] | tuple[int, ...] = (3, 3, 3, 3)hidden_act: str = 'gelu'mlp_ratio: float = 4.0hidden_dropout_prob: float | int = 0.0drop_path_rate: float | int = 0.1use_layerscale: bool = Falselayerscale_value: float = 0.0001use_post_layernorm: bool = Falseuse_post_layernorm_in_modulation: bool = Falsenormalize_modulator: 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) — Размерность эмбеддингов и скрытых состояний.
  • use_conv_embed (bool, необязательный, по умолчанию False) — Использовать ли свёрточное встраивание. Авторы отмечают, что использование свёрточного встраивания обычно улучшает производительность, но по умолчанию оно не используется.
  • hidden_sizes (Union[list[int], tuple[int, ...]], необязательный, по умолчанию (192, 384, 768, 768)) — Размерность (hidden size) на каждом этапе модели.
  • depths (Union[list[int], tuple[int, ...]], необязательный, по умолчанию (2, 2, 6, 2)) — Глубина каждого слоя в Transformer.
  • focal_levels (list(int), необязательный, по умолчанию [2, 2, 2, 2]) — Количество фокусных уровней в каждом слое соответствующих стадий в кодере.
  • focal_windows (list(int), необязательный, по умолчанию [3, 3, 3, 3]) — Размер фокального окна в каждом слое соответствующих стадий в кодере.
  • hidden_act (str, необязательный, по умолчанию gelu) — Нелинейная функция активации (функция или строка) в декодере. Например, "gelu", "relu", "silu" и т. д.
  • mlp_ratio (float, необязательный, по умолчанию 4.0) — Соотношение скрытого размера MLP к размеру эмбеддинга.
  • hidden_dropout_prob (float, необязательный, по умолчанию 0.0) — Вероятность dropout для всех полносвязных слоев в блоках эмбеддингов и энкодера.
  • drop_path_rate (Union[float, int], необязательный, по умолчанию 0.1) — Коэффициент drop path для слияния патчей.
  • use_layerscale (bool, необязательный, по умолчанию False) — Использовать ли layer scale в энкодере.
  • layerscale_value (float, необязательный, по умолчанию 0.0001) — Начальное значение масштаба слоя.
  • use_post_layernorm (bool, необязательный, по умолчанию False) — Использовать ли нормализацию после слоя в кодере.
  • use_post_layernorm_in_modulation (bool, необязательный, по умолчанию False) — Использовать ли нормализацию после слоя в модуляционном слое.
  • normalize_modulator (bool, необязательный, по умолчанию False) — Нормализовать ли модулятор.
  • initializer_range (float, необязательный, по умолчанию 0.02) — Стандартное отклонение truncated_normal_initializer, используемое для инициализации всех матриц весов.
  • layer_norm_eps (float, необязательный, по умолчанию 1e-05) — Значение epsilon, используемое слоями нормализации.
  • encoder_stride (int, необязательный, по умолчанию 32) — Коэффициент, во сколько раз увеличивается пространственное разрешение в декодерной голове для моделирования замаскированных изображений.

Это класс конфигурации для хранения настроек модели FocalNetModel. Он используется для создания модели Focalnet в соответствии с указанными аргументами, определяя архитектуру модели. Создание конфигурации с параметрами по умолчанию даст конфигурацию, аналогичную конфигурации microsoft/focalnet-tiny

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

Пример:

>>> from transformers import FocalNetConfig, FocalNetModel

>>> # Initializing a FocalNet microsoft/focalnet-tiny style configuration
>>> configuration = FocalNetConfig()

>>> # Initializing a model (with random weights) from the microsoft/focalnet-tiny style configuration
>>> model = FocalNetModel(configuration)

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

FocalNetModel

класс transformers.FocalNetModel

< >

( config: FocalNetConfigadd_pooling_layer = Trueuse_mask_token = False )

Параметры

  • config (FocalNetConfig) — Класс конфигурации модели, содержащий все параметры модели. Инициализация с помощью файла конфигурации не загружает веса, связанные с моделью, а только конфигурацию. Чтобы загрузить веса модели, используйте метод from_pretrained().
  • add_pooling_layer (bool, необязательный, по умолчанию True) — Добавлять ли слой пулинга
  • use_mask_token (bool, необязательный, по умолчанию False) — Использовать ли токен маски для моделирования изображений с масками.

Модель Focalnet без дополнительных компонентов, выводящая необработанные скрытые состояния без какого-либо специализированного слоя на выходе.

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

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

forward

< >

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

Параметры

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

Возвращает

FocalNetModelOutput или tuple(torch.Tensor)

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

Метод forward модели FocalNetModel переопределяет специальный метод __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).

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

  • reshaped_hidden_states (tuple(torch.Tensor), необязательный, возвращается при передаче output_hidden_states=True или при config.output_hidden_states=True) — Кортеж из torch.Tensor (один для вывода эмбеддингов + один для вывода каждого этапа) с формой (batch_size, hidden_size, height, width).

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

Пример:

FocalNetForMaskedImageModeling

класс transformers.FocalNetForMaskedImageModeling

< >

( config: FocalNetConfig )

Параметры

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

Модель FocalNet с декодером для моделирования замаскированных изображений.

Это следует той же реализации, что и в SimMIM.

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

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

forward

< >

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

Параметры

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

Возвращает

FocalNetMaskedImageModelingOutput или tuple(torch.Tensor)

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

Метод forward класса FocalNetForMaskedImageModeling переопределяет специальный метод __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).

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

  • 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, FocalNetConfig, FocalNetForMaskedImageModeling
>>> 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/focalnet-base-simmim-window6-192")
>>> config = FocalNetConfig()
>>> model = FocalNetForMaskedImageModeling(config)

>>> 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.logits
>>> list(reconstructed_pixel_values.shape)
[1, 3, 192, 192]

FocalNetForImageClassification

класс transformers.FocalNetForImageClassification

< >

( config: FocalNetConfig )

Параметры

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

Модель FocalNet с головой для классификации изображений (линейный слой поверх пуллинг-выхода), например, для ImageNet.

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

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

forward

< >

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

Параметры

  • pixel_values (torch.Tensor формы (batch_size, num_channels, image_size, image_size), необязательный) — Тензоры, соответствующие входным изображениям. Значения пикселей можно получить с помощью BitImageProcessor. Подробности см. в BitImageProcessor.call() (processor_class использует BitImageProcessor для обработки изображений).
  • 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 вместо обычного кортежа.

Возвращает

FocalNetImageClassifierOutput или tuple(torch.Tensor)

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

Метод forward класса FocalNetForImageClassification переопределяет специальный метод __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).

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

  • 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, FocalNetForImageClassification
>>> import torch
>>> from datasets import load_dataset

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

>>> image_processor = AutoImageProcessor.from_pretrained("microsoft/focalnet-tiny")
>>> model = FocalNetForImageClassification.from_pretrained("microsoft/focalnet-tiny")

>>> 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