Transformers documentation
Свёрточный Vision Transformer (CvT)
Эта модель была опубликована в HF papers 29.03.2021 и добавлена в Hugging Face Transformers 18.05.2022.
Свёрточный Vision Transformer (CvT)
Convolutional Vision Transformer (CvT) — это модель, сочетающая преимущества свёрточных нейронных сетей (CNN) и Vision Transformers для задач компьютерного зрения. Она вводит свёрточные слои в архитектуру Vision Transformer, что позволяет улавливать локальные паттерны на изображениях, сохраняя при этом глобальный контекст, обеспечиваемый механизмами self-attention.
Все контрольные точки CvT можно найти в организации Microsoft.
Эта модель была предоставлена пользователем anujunj.
Щёлкните по моделям CvT в боковой панели справа, чтобы увидеть больше примеров применения CvT к различным задачам компьютерного зрения.
Пример ниже демонстрирует, как классифицировать изображение с помощью Pipeline или класса AutoModel.
from transformers import pipeline
pipeline = pipeline(
task="image-classification",
model="microsoft/cvt-13",
device=0
)
pipeline("https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/pipeline-cat-chonk.jpeg")import requests
import torch
from PIL import Image
from transformers import AutoImageProcessor, AutoModelForImageClassification
image_processor = AutoImageProcessor.from_pretrained("microsoft/cvt-13")
model = AutoModelForImageClassification.from_pretrained(
"microsoft/cvt-13",
device_map="auto"
)
url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/pipeline-cat-chonk.jpeg"
image = Image.open(requests.get(url, stream=True).raw)
inputs = image_processor(image, return_tensors="pt").to(model.device)
with torch.no_grad():
logits = model(**inputs).logits
predicted_class_id = logits.argmax(dim=-1).item()
class_labels = model.config.id2label
predicted_class_label = class_labels[predicted_class_id]
print(f"The predicted class label is: {predicted_class_label}")Ресурсы
Обратитесь к этому набору ноутбуков ViT, чтобы посмотреть примеры инференса и дообучения на собственных наборах данных. Замените в этих ноутбуках ViTFeatureExtractor и ViTForImageClassification на AutoImageProcessor и CvtForImageClassification.
CvtConfig
класс transformers.CvtConfig
< 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 = 3patch_sizes: list[int] | tuple[int, ...] = (7, 3, 3)patch_stride: list[int] | tuple[int, ...] = (4, 2, 2)patch_padding: list[int] | tuple[int, ...] = (2, 1, 1)embed_dim: list[int] | tuple[int, ...] = (64, 192, 384)num_heads: list[int] | tuple[int, ...] = (1, 3, 6)depth: list[int] | tuple[int, ...] = (1, 2, 10)mlp_ratio: list[float] | tuple[float, ...] = (4.0, 4.0, 4.0)attention_drop_rate: list[float] | tuple[float, ...] = (0.0, 0.0, 0.0)drop_rate: list[float] | tuple[float, ...] = (0.0, 0.0, 0.0)drop_path_rate: list[float] | tuple[float, ...] = (0.0, 0.0, 0.1)qkv_bias: list[bool] | tuple[bool, ...] = (True, True, True)cls_token: list[bool] | tuple[bool, ...] = (False, False, True)qkv_projection_method: list[str] | tuple[str, ...] = ('dw_bn', 'dw_bn', 'dw_bn')kernel_qkv: list[int] | tuple[int, ...] = (3, 3, 3)padding_kv: list[int] | tuple[int, ...] = (1, 1, 1)stride_kv: list[int] | tuple[int, ...] = (2, 2, 2)padding_q: list[int] | tuple[int, ...] = (1, 1, 1)stride_q: list[int] | tuple[int, ...] = (1, 1, 1)initializer_range: float = 0.02layer_norm_eps: float = 1e-12 )
Параметры
- num_channels (
int, необязательный, по умолчанию3) — Количество входных каналов. - patch_sizes (
Union[list[int], tuple[int, ...]], необязательный, по умолчанию(7, 3, 3)) — Размер патча на каждом этапе модели. - patch_stride (
list[int], необязательный, по умолчанию[4, 2, 2]) — Размер шага для каждого patch embedding в энкодере. - patch_padding (
list[int], необязательный, по умолчанию[2, 1, 1]) — Размер отступов для каждого встраивания патча энкодера. - embed_dim (
Union[list[int], tuple[int, ...]], необязательный, по умолчанию(64, 192, 384)) — Размерность эмбеддингов и скрытых состояний. - num_heads (
Union[list[int], tuple[int, ...]], необязательный, по умолчанию(1, 3, 6)) — Количество головок внимания для каждого слоя внимания в декодере Transformer. - depth (
list[int], необязательный, по умолчанию[1, 2, 10]) — Количество слоев в каждом блоке кодировщика. - mlp_ratio (
Union[list[float], tuple[float, ...]], необязательный, по умолчанию(4.0, 4.0, 4.0)) — Соотношение скрытого размера MLP к размеру эмбеддинга. - attention_drop_rate (
list[float], необязательный, по умолчанию[0.0, 0.0, 0.0]) — Коэффициент dropout для вероятностей внимания. - drop_rate (
list[float], необязательный, по умолчанию[0.0, 0.0, 0.0]) — Коэффициент dropout для вероятностей эмбеддингов патчей. - drop_path_rate (
Union[list[float], tuple[float, ...]], необязательный, по умолчанию(0.0, 0.0, 0.1)) — Коэффициент drop path для слияния патчей. - qkv_bias (
Union[list[bool], tuple[bool, ...]], необязательный, по умолчанию(True, True, True)) — Указывает, следует ли добавлять смещение (bias) к запросам, ключам и значениям. - cls_token (
list[bool], необязательный, по умолчанию[False, False, True]) — Указывает, следует ли добавлять токен классификации к выходу каждого из последних трёх этапов. - qkv_projection_method (
list[string], необязательный, по умолчанию [“dw_bn”, “dw_bn”, “dw_bn”]`) — Метод проекции для query, key и value. По умолчанию используются depth-wise свёртки с batch norm. Для Linear-проекции используйте “avg”. - kernel_qkv (
list[int], необязательный, по умолчанию[3, 3, 3]) — Размер ядра для query, key и value в слое внимания - padding_kv (
list[int], необязательный, по умолчанию[1, 1, 1]) — Размер отступов для ключей и значений в слое внимания - stride_kv (
list[int], необязательный, по умолчанию[2, 2, 2]) — Размер шага для ключей и значений в слое внимания - padding_q (
list[int], необязательный, по умолчанию[1, 1, 1]) — Размер отступов для запроса в слое внимания - stride_q (
list[int], необязательный, по умолчанию[1, 1, 1]) — Размер шага для запроса в слое внимания - initializer_range (
float, необязательный, по умолчанию0.02) — Стандартное отклонение truncated_normal_initializer, используемое для инициализации всех матриц весов. - layer_norm_eps (
float, необязательный, по умолчанию1e-12) — Значение epsilon, используемое слоями нормализации.
Это класс конфигурации для хранения настроек модели CvtModel. Он используется для создания модели Cvt в соответствии с указанными аргументами, определяя архитектуру модели. Создание конфигурации с параметрами по умолчанию даст конфигурацию, аналогичную конфигурации microsoft/cvt-13
Объекты конфигурации наследуются от PreTrainedConfig и могут использоваться для управления выводами модели. Подробнее читайте в документации PreTrainedConfig.
Пример:
>>> from transformers import CvtConfig, CvtModel
>>> # Initializing a Cvt msft/cvt style configuration
>>> configuration = CvtConfig()
>>> # Initializing a model (with random weights) from the msft/cvt style configuration
>>> model = CvtModel(configuration)
>>> # Accessing the model configuration
>>> configuration = model.configCvtModel
класс transformers.CvtModel
< source >( config: CvtConfigadd_pooling_layer = True )
Параметры
- config (CvtConfig) — Класс конфигурации модели, содержащий все параметры модели. Инициализация по файлу конфигурации не загружает веса, связанные с моделью, а только конфигурацию. Используйте метод from_pretrained() для загрузки весов модели.
- add_pooling_layer (
bool, необязательный, по умолчаниюTrue) — Добавлять ли слой пулинга
Модель Cvt без дополнительных слоёв, выводящая необработанные скрытые состояния.
Эта модель наследуется от 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 ) → BaseModelOutputWithCLSToken or tuple(torch.Tensor)
Параметры
- pixel_values (
torch.Tensorформы(batch_size, num_channels, image_size, image_size), необязательный) — Тензоры, соответствующие входным изображениям. Значения пикселей можно получить с помощью ConvNextImageProcessor. Подробности см. в ConvNextImageProcessor.call() (processor_classиспользует ConvNextImageProcessor для обработки изображений). - output_hidden_states (
bool, необязательный) — Указывает, следует ли возвращать скрытые состояния всех слоев. Подробности см. в описанииhidden_statesсреди возвращаемых тензоров. - return_dict (
bool, необязательный) — Указывает, следует ли возвращать ModelOutput вместо обычного кортежа.
Возвращает
BaseModelOutputWithCLSToken или tuple(torch.Tensor)
BaseModelOutputWithCLSToken или кортеж из
torch.Tensor (если передано return_dict=False или если config.return_dict=False), содержащий различные
элементы в зависимости от конфигурации (CvtConfig) и входных данных.
Метод forward класса CvtModel переопределяет специальный метод __call__.
Хотя рецепт для прямого прохода должен быть определён внутри этой функции, после этого следует вызывать экземпляр
Module, а не эту функцию, поскольку первый вариант обеспечивает выполнение шагов предварительной и последующей обработки, тогда как второй молча их игнорирует.
last_hidden_state (
torch.Tensorформы(batch_size, sequence_length, hidden_size), необязательный) — Последовательность скрытых состояний на выходе последнего слоя модели.cls_token_value (
torch.Tensorформы(batch_size, 1, hidden_size)) — Токен классификации на выходе последнего слоя модели.hidden_states (
tuple[torch.Tensor, ...], необязательный, возвращается при передачеoutput_hidden_states=Trueили когдаconfig.output_hidden_states=True) — Кортеж изtorch.Tensor(один для вывода слоя встраиваний, если модель имеет слой встраиваний, + один для вывода каждого слоя) формы(batch_size, sequence_length, hidden_size).Скрытые состояния модели на выходе каждого слоя, а также необязательные выходные значения начального слоя встраивания.
CvtForImageClassification
класс transformers.CvtForImageClassification
< source >( config: CvtConfig )
Параметры
- config (CvtConfig) — Класс конфигурации модели, содержащий все параметры модели. Инициализация по файлу конфигурации не загружает веса, связанные с моделью, а только конфигурацию. Используйте метод from_pretrained() для загрузки весов модели.
Модель Cvt с головной частью для классификации изображений (линейный слой поверх финального скрытого состояния токена [CLS]), например, для ImageNet.
Эта модель наследуется от 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 ) → ImageClassifierOutputWithNoAttention or tuple(torch.Tensor)
Параметры
- pixel_values (
torch.Tensorформы(batch_size, num_channels, image_size, image_size), необязательный) — Тензоры, соответствующие входным изображениям. Значения пикселей можно получить с помощью ConvNextImageProcessor. Подробности см. в ConvNextImageProcessor.call() (processor_classиспользует ConvNextImageProcessor для обработки изображений). - 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), содержащий различные
элементы в зависимости от конфигурации (CvtConfig) и входных данных.
Метод CvtForImageClassification forward переопределяет специальный метод __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, CvtForImageClassification
>>> import torch
>>> from datasets import load_dataset
>>> dataset = load_dataset("huggingface/cats-image")
>>> image = dataset["test"]["image"][0]
>>> image_processor = AutoImageProcessor.from_pretrained("microsoft/cvt-13")
>>> model = CvtForImageClassification.from_pretrained("microsoft/cvt-13")
>>> 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])
...