Transformers documentation
ViTDet
Эта модель была опубликована в HF papers 30.03.2022 и добавлена в Hugging Face Transformers 29.08.2023.
ViTDet
Обзор
Модель ViTDet была предложена в работе Exploring Plain Vision Transformer Backbones for Object Detection (Англоязычный заголовок: «Исследование обычных Vision Transformer в качестве основы для обнаружения объектов») Янхао Ли, Ханьци Мао, Росс Гиршик, Каймин Хэ. ViTDet использует обычный Vision Transformer для задачи обнаружения объектов.
Аннотация из статьи следующая:
Мы рассматриваем обычный, не иерархический Vision Transformer (ViT) в качестве базовой сети для обнаружения объектов. Такой подход позволяет дообучать исходную архитектуру ViT для обнаружения объектов без необходимости перепроектирования иерархической базовой сети для предварительного обучения. При минимальных адаптациях для дообучения наш детектор с обычной базовой сетью способен достигать конкурентоспособных результатов. Удивительно, но мы наблюдаем: (i) достаточно построить простой пирамидный набор признаков из одномасштабной карты признаков (без распространённого дизайна FPN) и (ii) достаточно использовать оконное внимание (без сдвига) в сочетании с очень небольшим количеством блоков межоконной передачи. При использовании обычных базовых сетей ViT, предварительно обученных как Masked Autoencoders (MAE), наш детектор, названный ViTDet, способен конкурировать с предыдущими ведущими методами, все из которых были основаны на иерархических базовых сетях, достигая до 61.3 AP_box на наборе данных COCO при использовании только предварительного обучения на ImageNet-1K. Мы надеемся, что наше исследование привлечёт внимание к исследованиям детекторов с обычными базовыми сетями.
Эта модель была предоставлена пользователем nielsr. Исходный код можно найти здесь.
Советы:
- На данный момент доступен только backbone.
VitDetConfig
класс transformers.VitDetConfig
< 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 = Nonehidden_size: int = 768num_hidden_layers: int = 12num_attention_heads: int = 12mlp_ratio: int = 4hidden_act: str = 'gelu'dropout_prob: float | int = 0.0initializer_range: float = 0.02layer_norm_eps: float = 1e-06image_size: int | list[int] | tuple[int, int] = 224pretrain_image_size: int | list[int] | tuple[int, int] = 224patch_size: int | list[int] | tuple[int, int] = 16num_channels: int = 3qkv_bias: bool = Truedrop_path_rate: float | int = 0.0window_block_indices: list[int] | tuple[int, ...] = ()residual_block_indices: list[int] | tuple[int, ...] = ()use_absolute_position_embeddings: bool = Trueuse_relative_position_embeddings: bool = Falsewindow_size: int = 0_out_features: list[str] | None = None_out_indices: list[int] | None = None )
Параметры
- hidden_size (
int, необязательный, по умолчанию768) — Размерность скрытых представлений. - num_hidden_layers (
int, необязательный, по умолчанию12) — Количество скрытых слоев в декодере Transformer. - num_attention_heads (
int, необязательный, по умолчанию12) — Количество головок внимания в каждом слое внимания декодера Transformer. - mlp_ratio (
int, необязательный, по умолчанию4) — Соотношение скрытого размера MLP к размеру эмбеддинга. - hidden_act (
str, необязательный, по умолчаниюgelu) — Нелинейная функция активации (функция или строка) в декодере. Например,"gelu","relu","silu"и т. д. - dropout_prob (
Union[float, int], необязательный, по умолчанию0.0) — Доля для всех слоёв dropout. - initializer_range (
float, необязательный, по умолчанию0.02) — Стандартное отклонение truncated_normal_initializer, используемое для инициализации всех матриц весов. - layer_norm_eps (
float, необязательный, по умолчанию1e-06) — Значение epsilon, используемое слоями нормализации. - image_size (
Union[int, list[int], tuple[int, int]], необязательный, по умолчанию224) — Размер (разрешение) каждого изображения. - pretrain_image_size (
int, необязательный, по умолчанию 224) — Размер (разрешение) каждого изображения во время предварительного обучения. - patch_size (
Union[int, list[int], tuple[int, int]], необязательный, по умолчанию16) — Размер (разрешение) каждого патча. - num_channels (
int, необязательный, по умолчанию3) — Количество входных каналов. - qkv_bias (
bool, необязательный, по умолчаниюTrue) — Добавлять ли смещение к запросам, ключам и значениям. - drop_path_rate (
Union[float, int], необязательный, по умолчанию0.0) — Коэффициент drop path для слияния патчей. - window_block_indices (
list[int], необязательный, по умолчанию[]) — Список индексов блоков, для которых следует использовать оконное внимание (window attention) вместо обычного глобального само-внимания. - residual_block_indices (
list[int], необязательный, по умолчанию[]) — Список индексов блоков, после MLP которых должен добавляться дополнительный residual-блок. - use_absolute_position_embeddings (
bool, необязательный, по умолчаниюTrue) — Использовать ли абсолютные позиционные эмбеддинги. - use_relative_position_embeddings (
bool, необязательный, по умолчаниюFalse) — Указывает, следует ли добавлять в карты внимания относительные позиционные эмбеддинги. - window_size (
int, необязательный, по умолчанию 0) — Размер окна внимания.
Это класс конфигурации для хранения настроек модели VitDetModel. Он используется для создания модели Vitdet в соответствии с указанными аргументами, определяя архитектуру модели. Создание конфигурации с параметрами по умолчанию даст конфигурацию, аналогичную конфигурации google/vitdet-base-patch16-224
Объекты конфигурации наследуются от PreTrainedConfig и могут использоваться для управления выводами модели. Подробнее читайте в документации PreTrainedConfig.
Пример:
>>> from transformers import VitDetConfig, VitDetModel
>>> # Initializing a VitDet configuration
>>> configuration = VitDetConfig()
>>> # Initializing a model (with random weights) from the configuration
>>> model = VitDetModel(configuration)
>>> # Accessing the model configuration
>>> configuration = model.configVitDetModel
класс transformers.VitDetModel
< source >( config: VitDetConfig )
Параметры
- config (VitDetConfig) — Класс конфигурации модели, содержащий все параметры модели. Инициализация по файлу конфигурации не загружает веса, связанные с моделью, а только конфигурацию. Чтобы загрузить веса модели, используйте метод from_pretrained().
Модель Vitdet без дополнительных слоёв, выводящая необработанные скрытые состояния.
Эта модель наследуется от PreTrainedModel. См. документацию родительского класса для общих методов, которые библиотека реализует для всех своих моделей (например, загрузка или сохранение, изменение размера входных эмбеддингов, обрезка голов и т. д.)
Эта модель также является подклассом torch.nn.Module в PyTorch. Используйте её как обычный модуль PyTorch и обращайтесь к документации PyTorch по всем вопросам, связанным с общим использованием и поведением.
forward
< source >( pixel_values: typing.Optional[torch.Tensor] = Noneoutput_attentions: bool | None = Noneoutput_hidden_states: bool | None = Nonereturn_dict: bool | None = None**kwargs ) → BaseModelOutput or tuple(torch.Tensor)
Параметры
- pixel_values (
torch.Tensorформы(batch_size, num_channels, image_size, image_size), необязательный) — Тензоры, соответствующие входным изображениям. Значения пикселей можно получить с помощьюimage_processor_class. Подробности см. вimage_processor_class.__call__(processor_classиспользуетimage_processor_classдля обработки изображений). - output_attentions (
bool, необязательный) — Указывает, следует ли возвращать тензоры внимания всех слоев внимания. Подробности см. в описанииattentionsв разделе возвращаемых тензоров. - output_hidden_states (
bool, необязательный) — Указывает, следует ли возвращать скрытые состояния всех слоев. Подробности см. в описанииhidden_statesсреди возвращаемых тензоров. - return_dict (
bool, необязательный) — Указывает, следует ли возвращать ModelOutput вместо обычного кортежа.
Возвращает
BaseModelOutput или tuple(torch.Tensor)
Объект BaseModelOutput или кортеж из
torch.Tensor (если передано return_dict=False или если config.return_dict=False), содержащий различные
элементы в зависимости от конфигурации (VitDetConfig) и входных данных.
Метод forward модели VitDetModel переопределяет специальный метод __call__.
Хотя рецепт для прямого прохода должен быть определён внутри этой функции, после этого следует вызывать экземпляр
Module, а не эту функцию, поскольку первый вариант обеспечивает выполнение шагов предварительной и последующей обработки, тогда как второй молча их игнорирует.
last_hidden_state (
torch.Tensorформы(batch_size, sequence_length, hidden_size)) — Последовательность скрытых состояний на выходе последнего слоя модели.hidden_states (
tuple(torch.Tensor), optional, возвращается, если передано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 в механизме внимания, используемые для вычисления взвешенного среднего в головах само-внимания.
Примеры:
>>> from transformers import VitDetConfig, VitDetModel
>>> import torch
>>> config = VitDetConfig()
>>> model = VitDetModel(config)
>>> pixel_values = torch.randn(1, 3, 224, 224)
>>> with torch.no_grad():
... outputs = model(pixel_values)
>>> last_hidden_states = outputs.last_hidden_state
>>> list(last_hidden_states.shape)
[1, 768, 14, 14]