Transformers documentation

Dilated Neighborhood Attention Transformer

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

Dilated Neighborhood Attention Transformer

Обзор

DiNAT был предложен в статье Dilated Neighborhood Attention Transformer Али Хассани и Хамфри Ши.

Он расширяет NAT за счёт добавления паттерна Dilated Neighborhood Attention для захвата глобального контекста и демонстрирует значительное улучшение производительности по сравнению с ним.

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

Архитектуры Transformers стремительно становятся одними из наиболее широко применяемых архитектур глубокого обучения в различных модальностях, областях и задачах. В области компьютерного зрения, помимо продолжающихся работ над «чистыми» трансформерами, значительное внимание привлекают иерархические трансформеры благодаря их производительности и простоте интеграции в существующие фреймворки. Эти модели, как правило, используют механизмы локального внимания, такие как скользящее окно Neighborhood Attention (NA) или Shifted Window Self Attention из Swin Transformer. Хотя эти механизмы эффективно снижают квадратичную сложность self attention, локальное внимание ослабляет два наиболее желательных свойства self attention: моделирование долгосрочных взаимозависимостей и глобальное поле восприятия. В данной статье мы представляем Dilated Neighborhood Attention (DiNA) — естественное, гибкое и эффективное расширение NA, которое позволяет захватывать более глобальный контекст и экспоненциально расширять поле восприятия без дополнительных затрат. Локальное внимание NA и разреженное глобальное внимание DiNA дополняют друг друга, поэтому мы представляем Dilated Neighborhood Attention Transformer (DiNAT) — новый иерархический vision transformer, построенный на основе обоих механизмов. Варианты DiNAT демонстрируют значительное улучшение по сравнению с сильными базовыми моделями, такими как NAT, Swin и ConvNeXt. Наша большая модель работает быстрее и превосходит аналогичную модель Swin на 1,5% box AP в задаче обнаружения объектов COCO, на 1,3% mask AP в задаче сегментации экземпляров COCO и на 1,1% mIoU в задаче семантической сегментации ADE20K. В сочетании с новыми фреймворками наш большой вариант становится новой state of the art моделью паноптической сегментации на COCO (58.2 PQ) и ADE20K (48.5 PQ), а также моделью сегментации экземпляров на Cityscapes (44.5 AP) и ADE20K (35.4 AP) (без дополнительных данных). Она также соответствует уровню state of the art специализированных моделей семантической сегментации на ADE20K (58.2 mIoU) и занимает второе место на Cityscapes (84.5 mIoU) (без дополнительных данных).

drawing Neighborhood Attention with different dilation values. Taken from the original paper.

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

Советы по использованию

DiNAT можно использовать в качестве базовой архитектуры. При output_hidden_states = True модель выводит как hidden_states, так и reshaped_hidden_states. Размерность reshaped_hidden_states составляет (batch, num_channels, height, width), а не (batch_size, height, width, num_channels).

Примечания:

  • DiNAT использует реализацию Neighborhood Attention и Dilated Neighborhood Attention из NATTEN. Вы можете установить его с помощью предварительно собранных колёс для Linux, следуя инструкции на shi-labs.com/natten, либо собрать его на своей системе, выполнив pip install natten. Обратите внимание, что во втором случае компиляция, скорее всего, займёт некоторое время. NATTEN пока не поддерживает устройства под управлением Windows.
  • В настоящее время поддерживается только размер патча 4.

Ресурсы

Список официальных ресурсов Hugging Face и сообщества (отмечены значком 🌎), которые помогут вам начать работу с DiNAT.

Image Classification

Если вы хотите предложить ресурс для включения в этот раздел, пожалуйста, создайте Pull Request, и мы его рассмотрим! В идеале ресурс должен демонстрировать что-то новое, а не дублировать уже имеющийся.

DinatConfig

класс transformers.DinatConfig

< >

( 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 = Nonepatch_size: int | list[int] | tuple[int, int] = 4num_channels: int = 3embed_dim: int = 64depths: list[int] | tuple[int, ...] = (3, 4, 6, 5)num_heads: list[int] | tuple[int, ...] = (2, 4, 8, 16)kernel_size: int = 7dilations: list | tuple | None = Nonemlp_ratio: float = 3.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'initializer_range: float = 0.02layer_norm_eps: float = 1e-05layer_scale_init_value: float = 0.0_out_features: list[str] | None = None_out_indices: list[int] | None = None )

Параметры

  • patch_size (Union[int, list[int], tuple[int, int]], необязательный, по умолчанию 4) — Размер (разрешение) каждого патча.
  • num_channels (int, необязательный, по умолчанию 3) — Количество входных каналов.
  • embed_dim (int, необязательный, по умолчанию 64) — Размерность эмбеддингов и скрытых состояний.
  • depths (Union[list[int], tuple[int, ...]], необязательный, по умолчанию (3, 4, 6, 5)) — Глубина каждого слоя в Transformer.
  • num_heads (Union[list[int], tuple[int, ...]], необязательный, по умолчанию (2, 4, 8, 16)) — Количество голок внимания для каждого слоя внимания в декодере Transformer.
  • kernel_size (int, необязательный, по умолчанию 7) — Размер свёрточного ядра.
  • dilations (list[list[int]], необязательный, по умолчанию [[1, 8, 1], [1, 4, 1, 4], [1, 2, 1, 2, 1, 2], [1, 1, 1, 1, 1]]) — Значение дилатации для каждого слоя NA в кодере Transformer.
  • mlp_ratio (float, необязательный, по умолчанию 3.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" и т. д.
  • initializer_range (float, необязательный, по умолчанию 0.02) — Стандартное отклонение truncated_normal_initializer, используемое для инициализации всех матриц весов.
  • layer_norm_eps (float, необязательный, по умолчанию 1e-05) — Значение epsilon, используемое слоями нормализации.
  • layer_scale_init_value (float, необязательный, по умолчанию 0.0) — Масштаб, используемый в слоях само-внимания. 0.1 для базовой модели, 1e-6 для крупной. Установите 0, чтобы отключить масштабирование слоя.

Это класс конфигурации для хранения настроек модели DinatModel. Он используется для создания модели Dinat в соответствии с указанными аргументами, определяя архитектуру модели. Создание конфигурации с параметрами по умолчанию даст конфигурацию, аналогичную конфигурации shi-labs/dinat-mini-in1k-224

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

Пример:

>>> from transformers import DinatConfig, DinatModel

>>> # Initializing a Dinat shi-labs/dinat-mini-in1k-224 style configuration
>>> configuration = DinatConfig()

>>> # Initializing a model (with random weights) from the shi-labs/dinat-mini-in1k-224 style configuration
>>> model = DinatModel(configuration)

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

DinatModel

класс transformers.DinatModel

< >

( config: DinatConfigadd_pooling_layer = True )

Параметры

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

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

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

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

forward

< >

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

Параметры

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

Возвращает

DinatModelOutput или tuple(torch.Tensor)

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

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

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

Пример:

DinatForImageClassification

класс transformers.DinatForImageClassification

< >

( config: DinatConfig )

Параметры

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

Модель Dinat: трансформер с головной частью для классификации изображений (линейный слой поверх финального скрытого состояния токена [CLS]), например, для ImageNet.

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

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

forward

< >

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

Возвращает

DinatImageClassifierOutput или tuple(torch.Tensor)

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

Метод forward класса DinatForImageClassification переопределяет специальный метод __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, DinatForImageClassification
>>> import torch
>>> from datasets import load_dataset

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

>>> image_processor = AutoImageProcessor.from_pretrained("shi-labs/dinat-mini-in1k-224")
>>> model = DinatForImageClassification.from_pretrained("shi-labs/dinat-mini-in1k-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])
...
Update on GitHub