Transformers documentation
MobileViTV2
Эта модель была опубликована в HF papers 06.06.2022 и добавлена в Hugging Face Transformers 02.06.2023.
MobileViTV2
Обзор
Модель MobileViTV2 была предложена в статье Separable Self-attention for Mobile Vision Transformers Sachin Mehta и Mohammad Rastegari.
MobileViTV2 — это вторая версия MobileViT, созданная путём замены многоголовного само-внимания в MobileViT на сепарабельное само-внимание.
Аннотация из статьи следующая:
Мобильные визуальные трансформеры (MobileViT) способны обеспечить передовую производительность в нескольких мобильных визуальных задачах, включая классификацию и обнаружение объектов. Хотя эти модели имеют меньшее количество параметров, их задержка выше, чем у моделей на основе свёрточных нейронных сетей. Основным узким местом эффективности в MobileViT является многоголовное само-внимание (MHA) в трансформерах, которое требует временной сложности O(k2) относительно количества токенов (или патчей) k. Кроме того, для вычисления само-внимания MHA требует дорогостоящих операций (например, матричного умножения по батчам), что влияет на задержку на устройствах с ограниченными ресурсами. В данной статье представлен метод разделимого само-внимания с линейной сложностью, то есть O(k). Простая, но эффективная особенность предложенного метода заключается в том, что для вычисления само-внимания используются поэлементные операции, что делает его хорошим выбором для устройств с ограниченными ресурсами. Улучшенная модель, MobileViTV2, демонстрирует передовую производительность в нескольких мобильных визуальных задачах, включая классификацию объектов ImageNet и обнаружение объектов MS-COCO. Имея около трёх миллионов параметров, MobileViTV2 достигает точности top-1 75,6% на наборе данных ImageNet, превосходя MobileViT примерно на 1% при работе в 3,2 раза быстрее на мобильном устройстве.
Эта модель была предоставлена пользователем shehan97. Исходный код можно найти здесь.
Советы по использованию
- MobileViTV2 больше похож на CNN, чем на модель Transformer. Он работает не с последовательностями, а с батчами изображений. В отличие от ViT, здесь нет эмбеддингов. Базовая модель (backbone) выводит карту признаков.
- Для подготовки изображений к модели можно использовать MobileViTImageProcessor. Обратите внимание, что при самостоятельной предобработке предобученные контрольные точки ожидают, что изображения будут в порядке пикселей BGR (а не RGB).
- Доступные контрольные точки для классификации изображений предварительно обучены на ImageNet-1k (также известном как ILSVRC 2012, набор из 1,3 миллиона изображений и 1000 классов).
- Модель сегментации использует головку DeepLabV3. Доступные контрольные точки семантической сегментации предварительно обучены на PASCAL VOC.
MobileViTV2Config
класс transformers.MobileViTV2Config
< 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 = Nonenum_channels: int = 3image_size: int | list[int] | tuple[int, int] = 256patch_size: int | list[int] | tuple[int, int] = 2expand_ratio: float = 2.0hidden_act: str = 'swish'conv_kernel_size: int = 3output_stride: int = 32classifier_dropout_prob: float | int = 0.1initializer_range: float = 0.02layer_norm_eps: float = 1e-05aspp_out_channels: int = 512atrous_rates: list[int] | tuple[int, ...] = (6, 12, 18)aspp_dropout_prob: float | int = 0.1semantic_loss_ignore_index: int = 255n_attn_blocks: list[int] | tuple[int, ...] = (2, 4, 3)base_attn_unit_dims: list[int] | tuple[int, ...] = (128, 192, 256)width_multiplier: float | int = 1.0ffn_multiplier: int = 2attn_dropout: float | int = 0.0ffn_dropout: float | int = 0.0 )
Параметры
- num_channels (
int, необязательный, по умолчанию3) — Количество входных каналов. - image_size (
Union[int, list[int], tuple[int, int]], необязательный, по умолчанию256) — Размер (разрешение) каждого изображения. - patch_size (
Union[int, list[int], tuple[int, int]], необязательный, по умолчанию2) — Размер (разрешение) каждого патча. - expand_ratio (
float, необязательный, по умолчанию2.0) — Коэффициент расширения для задания выходных размеров при расширении - hidden_act (
str, необязательный, по умолчаниюswish) — Нелинейная функция активации (функция или строка) в декодере. Например,"gelu","relu","silu"и т. д. - conv_kernel_size (
int, необязательный, по умолчанию3) — Размер свёрточного ядра. - output_stride (
int, необязательный, по умолчанию32) — Соотношение между пространственным разрешением входных и выходных карт признаков. - classifier_dropout_prob (
Union[float, int], необязательный, по умолчанию0.1) — Коэффициент dropout для классификатора. - initializer_range (
float, необязательный, по умолчанию0.02) — Стандартное отклонение truncated_normal_initializer, используемое для инициализации всех матриц весов. - layer_norm_eps (
float, необязательный, по умолчанию1e-05) — Значение epsilon, используемое слоями нормализации. - aspp_out_channels (
int, необязательный, по умолчанию 512) — Количество выходных каналов, используемых в слое ASPP для семантической сегментации. - atrous_rates (
list[int], необязательный, по умолчанию[6, 12, 18]) — Коэффициенты дилатации (atrous), используемые в слое ASPP для семантической сегментации. - aspp_dropout_prob (
float, необязательный, по умолчанию 0.1) — Коэффициент dropout для слоя ASPP, используемого в семантической сегментации. - semantic_loss_ignore_index (
int, необязательный, по умолчанию255) — Индекс, который игнорируется функцией потерь модели семантической сегментации. - n_attn_blocks (
list[int], необязательный, по умолчанию[2, 4, 3]) — Количество блоков внимания в каждом MobileViTV2Layer - base_attn_unit_dims (
list[int], необязательный, по умолчанию[128, 192, 256]) — Базовый множитель для размерностей блоков внимания в каждом MobileViTV2Layer - width_multiplier (
float, необязательный, по умолчанию 1.0) — Множитель ширины для MobileViTV2. - ffn_multiplier (
int, необязательный, по умолчанию 2) — Множитель FFN для MobileViTV2. - attn_dropout (
Union[float, int], необязательный, по умолчанию0.0) — Коэффициент dropout для вероятностей внимания. - ffn_dropout (
float, необязательный, по умолчанию 0.0) — Dropout между слоями FFN.
Это класс конфигурации для хранения настроек модели MobileViTV2Model. Он используется для создания модели Mobilevitv2 в соответствии с указанными аргументами, определяя архитектуру модели. Создание конфигурации с параметрами по умолчанию даст конфигурацию, аналогичную конфигурации модели apple/mobilevitv2-1.0
Объекты конфигурации наследуются от PreTrainedConfig и могут использоваться для управления выводами модели. Подробнее читайте в документации PreTrainedConfig.
Пример:
>>> from transformers import MobileViTV2Config, MobileViTV2Model
>>> # Initializing a mobilevitv2-small style configuration
>>> configuration = MobileViTV2Config()
>>> # Initializing a model from the mobilevitv2-small style configuration
>>> model = MobileViTV2Model(configuration)
>>> # Accessing the model configuration
>>> configuration = model.configMobileViTV2Model
класс transformers.MobileViTV2Model
< source >( config: MobileViTV2Configexpand_output: bool = True )
Параметры
- config (MobileViTV2Config) — Класс конфигурации модели, содержащий все параметры модели. Инициализация по файлу конфигурации не загружает веса, связанные с моделью, а только конфигурацию. Чтобы загрузить веса модели, используйте метод from_pretrained().
- expand_output (
bool, необязательный, по умолчаниюTrue) — Определяет, следует ли расширять выход модели. ЕслиTrue, модель выводит пул-фичи в дополнение к скрытым состояниям. ЕслиFalse, возвращаются только скрытые состояния.
Модель Mobilevitv2 без дополнительных слоёв, выводящая необработанные скрытые состояния.
Эта модель наследуется от PreTrainedModel. См. документацию родительского класса для общих методов, которые библиотека реализует для всех своих моделей (например, загрузка или сохранение, изменение размера входных эмбеддингов, обрезка голов и т. д.)
Эта модель также является подклассом torch.nn.Module в PyTorch. Используйте её как обычный модуль PyTorch и обращайтесь к документации PyTorch по всем вопросам, связанным с общим использованием и поведением.
forward
< source >( pixel_values: typing.Optional[torch.Tensor] = Noneoutput_hidden_states: bool | None = Nonereturn_dict: bool | None = None**kwargs ) → BaseModelOutputWithPoolingAndNoAttention or tuple(torch.Tensor)
Параметры
- pixel_values (
torch.Tensorформы(batch_size, num_channels, image_size, image_size), необязательный) — Тензоры, соответствующие входным изображениям. Значения пикселей можно получить с помощью MobileViTImageProcessor. Подробности см. в MobileViTImageProcessor.call() (processor_classиспользует MobileViTImageProcessor для обработки изображений). - output_hidden_states (
bool, необязательный) — Указывает, следует ли возвращать скрытые состояния всех слоев. Подробности см. в описанииhidden_statesсреди возвращаемых тензоров. - return_dict (
bool, необязательный) — Указывает, следует ли возвращать ModelOutput вместо обычного кортежа.
Возвращает
BaseModelOutputWithPoolingAndNoAttention или tuple(torch.Tensor)
BaseModelOutputWithPoolingAndNoAttention или кортеж из
torch.Tensor (если передано return_dict=False или если config.return_dict=False), содержащий различные
элементы в зависимости от конфигурации (MobileViTV2Config) и входных данных.
Метод forward модели MobileViTV2Model переопределяет специальный метод __call__.
Хотя рецепт для прямого прохода должен быть определён внутри этой функции, после этого следует вызывать экземпляр
Module, а не эту функцию, поскольку первый вариант обеспечивает выполнение шагов предварительной и последующей обработки, тогда как второй молча их игнорирует.
last_hidden_state (
torch.Tensorформы(batch_size, num_channels, height, width)) — Последовательность скрытых состояний на выходе последнего слоя модели.pooler_output (
torch.Tensorформы(batch_size, hidden_size)) — Скрытое состояние последнего слоя после операции пулинга по пространственным измерениям.hidden_states (
tuple(torch.Tensor), необязательный, возвращается, если переданоoutput_hidden_states=Trueили еслиconfig.output_hidden_states=True) — Кортеж изtorch.Tensor(один для вывода слоя встраиваний, если модель имеет слой встраиваний, + один для вывода каждого слоя) формы(batch_size, num_channels, height, width).Скрытые состояния модели на выходе каждого слоя, а также необязательные выходные значения начального слоя встраивания.
MobileViTV2ForImageClassification
класс transformers.MobileViTV2ForImageClassification
< source >( config: MobileViTV2Config )
Параметры
- config (MobileViTV2Config) — Класс конфигурации модели, содержащий все параметры модели. Инициализация по файлу конфигурации не загружает веса, связанные с моделью, а только конфигурацию. Чтобы загрузить веса модели, используйте метод from_pretrained().
Модель MobileViTV2 с головной частью для классификации изображений (линейный слой поверх пуллованных признаков), например, для ImageNet.
Эта модель наследуется от PreTrainedModel. См. документацию родительского класса для общих методов, которые библиотека реализует для всех своих моделей (например, загрузка или сохранение, изменение размера входных эмбеддингов, обрезка голов и т. д.)
Эта модель также является подклассом torch.nn.Module в PyTorch. Используйте её как обычный модуль PyTorch и обращайтесь к документации PyTorch по всем вопросам, связанным с общим использованием и поведением.
forward
< source >( pixel_values: typing.Optional[torch.Tensor] = Noneoutput_hidden_states: bool | None = Nonelabels: typing.Optional[torch.Tensor] = Nonereturn_dict: bool | None = None**kwargs ) → ImageClassifierOutputWithNoAttention or tuple(torch.Tensor)
Параметры
- pixel_values (
torch.Tensorформы(batch_size, num_channels, image_size, image_size), необязательный) — Тензоры, соответствующие входным изображениям. Значения пикселей можно получить с помощью MobileViTImageProcessor. Подробности см. в MobileViTImageProcessor.call() (processor_classиспользует MobileViTImageProcessor для обработки изображений). - output_hidden_states (
bool, необязательный) — Указывает, следует ли возвращать скрытые состояния всех слоев. Подробности см. в описанииhidden_statesсреди возвращаемых тензоров. - labels (
torch.LongTensorформы(batch_size,), необязательный) — Метки для вычисления функции потерь классификации/регрессии изображений. Индексы должны находиться в диапазоне[0, ..., config.num_labels - 1]. Еслиconfig.num_labels == 1, вычисляется функция потерь регрессии (среднеквадратичная ошибка), еслиconfig.num_labels > 1— функция потерь классификации (кросс-энтропия). - return_dict (
bool, необязательный) — Указывает, следует ли возвращать ModelOutput вместо обычного кортежа.
Возвращает
ImageClassifierOutputWithNoAttention или tuple(torch.Tensor)
Объект ImageClassifierOutputWithNoAttention или кортеж
torch.Tensor (если передано return_dict=False или если config.return_dict=False), содержащий различные
элементы в зависимости от конфигурации (MobileViTV2Config) и входных данных.
Метод forward класса MobileViTV2ForImageClassification переопределяет специальный метод __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, MobileViTV2ForImageClassification
>>> import torch
>>> from datasets import load_dataset
>>> dataset = load_dataset("huggingface/cats-image")
>>> image = dataset["test"]["image"][0]
>>> image_processor = AutoImageProcessor.from_pretrained("apple/mobilevitv2-1.0")
>>> model = MobileViTV2ForImageClassification.from_pretrained("apple/mobilevitv2-1.0")
>>> 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])
...MobileViTV2ForSemanticSegmentation
класс transformers.MobileViTV2ForSemanticSegmentation
< source >( config: MobileViTV2Config )
Параметры
- config (MobileViTV2Config) — Класс конфигурации модели, содержащий все параметры модели. Инициализация по файлу конфигурации не загружает веса, связанные с моделью, а только конфигурацию. Чтобы загрузить веса модели, используйте метод from_pretrained().
Модель MobileViTV2 с головой семантической сегментации, например, для Pascal VOC.
Эта модель наследуется от PreTrainedModel. См. документацию родительского класса для общих методов, которые библиотека реализует для всех своих моделей (например, загрузка или сохранение, изменение размера входных эмбеддингов, обрезка голов и т. д.)
Эта модель также является подклассом torch.nn.Module в PyTorch. Используйте её как обычный модуль PyTorch и обращайтесь к документации PyTorch по всем вопросам, связанным с общим использованием и поведением.
forward
< source >( pixel_values: typing.Optional[torch.Tensor] = Nonelabels: typing.Optional[torch.Tensor] = Noneoutput_hidden_states: bool | None = Nonereturn_dict: bool | None = None**kwargs ) → SemanticSegmenterOutput or tuple(torch.Tensor)
Параметры
- pixel_values (
torch.Tensorформы(batch_size, num_channels, image_size, image_size), необязательный) — Тензоры, соответствующие входным изображениям. Значения пикселей можно получить с помощью MobileViTImageProcessor. Подробности см. в MobileViTImageProcessor.call() (processor_classиспользует MobileViTImageProcessor для обработки изображений). - labels (
torch.LongTensorформы(batch_size, height, width), необязательный) — Карты семантической сегментации для вычисления функции потерь. Индексы должны находиться в диапазоне[0, ..., config.num_labels - 1]. Еслиconfig.num_labels > 1, вычисляется функция потерь для классификации (Cross-Entropy). - output_hidden_states (
bool, необязательный) — Указывает, следует ли возвращать скрытые состояния всех слоев. Подробности см. в описанииhidden_statesсреди возвращаемых тензоров. - return_dict (
bool, необязательный) — Указывает, следует ли возвращать ModelOutput вместо обычного кортежа.
Возвращает
SemanticSegmenterOutput или tuple(torch.Tensor)
Объект SemanticSegmenterOutput или кортеж из
torch.Tensor (если передано return_dict=False или если config.return_dict=False), содержащий различные
элементы в зависимости от конфигурации (MobileViTV2Config) и входных данных.
Метод forward класса MobileViTV2ForSemanticSegmentation переопределяет специальный метод __call__.
Хотя рецепт для прямого прохода должен быть определён внутри этой функции, после этого следует вызывать экземпляр
Module, а не эту функцию, поскольку первый вариант обеспечивает выполнение шагов предварительной и последующей обработки, тогда как второй молча их игнорирует.
loss (
torch.Tensorформы(1,), необязательный, возвращается, если заданlabels) — Потери классификации (или регрессии, если config.num_labels==1).logits (
torch.Tensorформы(batch_size, config.num_labels, logits_height, logits_width)) — Оценки классификации для каждого пикселя.Возвращаемые logits не обязательно имеют тот же размер, что и переданные на вход
pixel_values. Это сделано, чтобы избежать двойной интерполяции и потери качества, когда пользователю необходимо изменить размер logits до исходного размера изображения на этапе постобработки. Всегда проверяйте форму logits и изменяйте размер по мере необходимости.hidden_states (
tuple(torch.Tensor), необязательный, возвращается при передачеoutput_hidden_states=Trueили когдаconfig.output_hidden_states=True) — Кортеж изtorch.Tensor(один для вывода слоя встраиваний, если модель имеет слой встраиваний, + один для вывода каждого слоя) формы(batch_size, patch_size, hidden_size).Скрытые состояния модели на выходе каждого слоя, а также необязательные выходные значения начального слоя встраивания.
attentions (
tuple(torch.Tensor), необязательный, возвращается при передачеoutput_attentions=Trueили приconfig.output_attentions=True) — Кортежtorch.Tensor(по одному на каждый слой) формы(batch_size, num_heads, patch_size, sequence_length).Веса внимания после softmax в механизме внимания, используемые для вычисления взвешенного среднего в головах само-внимания.
Примеры:
>>> from huggingface_hub.utils import httpx
>>> from io import BytesIO
>>> import torch
>>> from PIL import Image
>>> from transformers import AutoImageProcessor, MobileViTV2ForSemanticSegmentation
>>> 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("apple/mobilevitv2-1.0-imagenet1k-256")
>>> model = MobileViTV2ForSemanticSegmentation.from_pretrained("apple/mobilevitv2-1.0-imagenet1k-256")
>>> inputs = image_processor(images=image, return_tensors="pt")
>>> with torch.no_grad():
... outputs = model(**inputs)
>>> # logits are of shape (batch_size, num_labels, height, width)
>>> logits = outputs.logits