Transformers documentation

MobileViTV2

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

Este modelo se publicó en HF papers el 2022-06-06 y se contribuyó a Hugging Face Transformers el 2023-06-02.

MobileViTV2

Resumen

El modelo MobileViTV2 fue propuesto en Separable Self-attention for Mobile Vision Transformers por Sachin Mehta y Mohammad Rastegari.

MobileViTV2 es la segunda versión de MobileViT, construida reemplazando la autoatención multi-cabeza de MobileViT con autoatención separable.

El resumen del artículo es el siguiente:

Los transformers de visión móvil (MobileViT) pueden lograr un rendimiento de última generación en varias tareas de visión móvil, incluida la clasificación y la detección. Aunque estos modelos tienen menos parámetros, presentan una latencia alta en comparación con los modelos basados en redes neuronales convolucionales. El principal cuello de botella de eficiencia en MobileViT es la autoatención multi-cabeza (MHA) en los transformers, que requiere una complejidad temporal de O(k2) con respecto al número de tokens (o parches) k. Además, la MHA requiere operaciones costosas (por ejemplo, multiplicación de matrices por lotes) para calcular la autoatención, lo que afecta la latencia en dispositivos con recursos limitados. Este artículo introduce un método de autoatención separable con complejidad lineal, es decir, O(k). Una característica simple pero efectiva del método propuesto es que utiliza operaciones elemento a elemento para calcular la autoatención, lo que lo convierte en una buena opción para dispositivos con recursos limitados. El modelo mejorado, MobileViTV2, es de última generación en varias tareas de visión móvil, incluida la clasificación de objetos en ImageNet y la detección de objetos en MS-COCO. Con aproximadamente tres millones de parámetros, MobileViTV2 logra una precisión top-1 del 75,6 % en el conjunto de datos ImageNet, superando a MobileViT en aproximadamente un 1 % mientras se ejecuta 3,2 veces más rápido en un dispositivo móvil.

Este modelo fue aportado por shehan97. El código original se puede encontrar aquí.

Consejos de uso

  • MobileViTV2 se parece más a una CNN que a un modelo Transformer. No funciona con datos de secuencias, sino con lotes de imágenes. A diferencia de ViT, no hay embeddings. El modelo backbone genera un mapa de características.
  • Se puede usar MobileViTImageProcessor para preparar las imágenes para el modelo. Tenga en cuenta que si realiza su propio preprocesamiento, los puntos de control preentrenados esperan que las imágenes estén en orden de píxeles BGR (no RGB).
  • Los puntos de control de clasificación de imágenes disponibles están preentrenados en ImageNet-1k (también conocido como ILSVRC 2012, una colección de 1,3 millones de imágenes y 1.000 clases).
  • El modelo de segmentación utiliza una cabeza DeepLabV3. Los puntos de control de segmentación semántica disponibles están preentrenados en PASCAL VOC.

MobileViTV2Config

clase transformers.MobileViTV2Config

< >

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

Parámetros

  • num_channels (int, opcional, valor predeterminado 3) — El número de canales de entrada.
  • image_size (Union[int, list[int], tuple[int, int]], opcional, valor predeterminado 256) — El tamaño (resolución) de cada imagen.
  • patch_size (Union[int, list[int], tuple[int, int]], opcional, valor predeterminado 2) — El tamaño (resolución) de cada parche.
  • expand_ratio (float, opcional, valor predeterminado 2.0) — Ratio de expansión para establecer las dimensiones de salida de la expansión
  • hidden_act (str, opcional, valor predeterminado swish) — La función de activación no lineal (función o cadena) en el decodificador. Por ejemplo, "gelu", "relu", "silu", etc.
  • conv_kernel_size (int, opcional, valor predeterminado 3) — El tamaño del kernel de convolución.
  • output_stride (int, opcional, valor predeterminado 32) — La proporción entre la resolución espacial de los mapas de características de entrada y salida.
  • classifier_dropout_prob (Union[float, int], opcional, valor predeterminado 0.1) — La proporción de dropout para el clasificador.
  • initializer_range (float, opcional, valor predeterminado 0.02) — La desviación estándar del truncated_normal_initializer para inicializar todas las matrices de pesos.
  • layer_norm_eps (float, opcional, valor predeterminado 1e-05) — El epsilon utilizado por las capas de normalización de capa.
  • aspp_out_channels (int, opcional, valor predeterminado 512) — Número de canales de salida utilizados en la capa ASPP para la segmentación semántica.
  • atrous_rates (list[int], opcional, valor predeterminado [6, 12, 18]) — Factores de dilatación (atrous) utilizados en la capa ASPP para la segmentación semántica.
  • aspp_dropout_prob (float, opcional, valor predeterminado 0.1) — La proporción de dropout para la capa ASPP en la segmentación semántica.
  • semantic_loss_ignore_index (int, opcional, valor predeterminado 255) — El índice que se ignora en la función de pérdida del modelo de segmentación semántica.
  • n_attn_blocks (list[int], opcional, valor predeterminado [2, 4, 3]) — El número de bloques de atención en cada MobileViTV2Layer
  • base_attn_unit_dims (list[int], opcional, valor predeterminado [128, 192, 256]) — El multiplicador base para las dimensiones de los bloques de atención en cada MobileViTV2Layer
  • width_multiplier (float, opcional, valor predeterminado 1.0) — El multiplicador de ancho para MobileViTV2.
  • ffn_multiplier (int, opcional, valor predeterminado 2) — El multiplicador de FFN para MobileViTV2.
  • attn_dropout (Union[float, int], opcional, valor predeterminado 0.0) — La proporción de dropout para las probabilidades de atención.
  • ffn_dropout (float, opcional, valor predeterminado 0.0) — El dropout entre las capas FFN.

Esta es la clase de configuración para almacenar la configuración de un MobileViTV2Model. Se utiliza para instanciar un modelo Mobilevitv2 según los argumentos especificados, definiendo la arquitectura del modelo. Instanciar una configuración con los valores predeterminados producirá una configuración similar a la de apple/mobilevitv2-1.0

Los objetos de configuración heredan de PreTrainedConfig y se pueden usar para controlar las salidas del modelo. Lea la documentación de PreTrainedConfig para obtener más información.

Ejemplo:

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

MobileViTV2Model

clase transformers.MobileViTV2Model

< >

( config: MobileViTV2Configexpand_output: bool = True )

Parámetros

  • config (MobileViTV2Config) — Clase de configuración del modelo con todos los parámetros del modelo. Inicializar con un archivo de configuración no carga los pesos asociados con el modelo, solo la configuración. Consulte el método from_pretrained() para cargar los pesos del modelo.
  • expand_output (bool, opcional, valor predeterminado True) — Si se debe expandir la salida del modelo. Si es True, el modelo emitirá características agrupadas además de los estados ocultos. Si es False, solo se devolverán los estados ocultos.

El modelo Mobilevitv2 básico que emite estados ocultos sin ningún cabezal específico en la parte superior.

Este modelo hereda de PreTrainedModel. Consulta la documentación de la clase superior para los métodos genéricos que la biblioteca implementa para todos sus modelos (como la descarga o el guardado, el redimensionamiento de las incrustaciones de entrada, la poda de cabezas, etc.).

Este modelo también es una subclase de torch.nn.Module de PyTorch. Úsalo como un módulo de PyTorch regular y consulta la documentación de PyTorch para todo lo relacionado con el uso y el comportamiento generales.

forward

< >

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

Parámetros

  • pixel_values (torch.Tensor de forma (batch_size, num_channels, image_size, image_size), opcional) — Los tensores correspondientes a las imágenes de entrada. Los valores de píxeles se pueden obtener utilizando MobileViTImageProcessor. Consulte MobileViTImageProcessor.call() para más detalles (processor_class utiliza MobileViTImageProcessor para procesar las imágenes).
  • output_hidden_states (bool, opcional) — Indica si se deben devolver los estados ocultos de todas las capas. Consulte hidden_states en los tensores devueltos para obtener más detalles.
  • return_dict (bool, opcional) — Indica si se debe devolver un ModelOutput en lugar de una tupla simple.

Devuelve

BaseModelOutputWithPoolingAndNoAttention o tuple(torch.Tensor)

Un BaseModelOutputWithPoolingAndNoAttention o una tupla de torch.Tensor (si se pasa return_dict=False o cuando config.return_dict=False) que comprende varios elementos según la configuración (MobileViTV2Config) y las entradas.

El método forward de MobileViTV2Model sobrescribe el método especial __call__.

Aunque la receta para la pasada hacia adelante debe definirse dentro de esta función, se debe llamar a la instancia de Module después en lugar de a esta, ya que la primera se encarga de ejecutar los pasos de pre y postprocesamiento, mientras que la segunda los ignora silenciosamente.

  • last_hidden_state (torch.Tensor de forma (batch_size, num_channels, height, width)) — Secuencia de estados ocultos en la salida de la última capa del modelo.

  • pooler_output (torch.Tensor de forma (batch_size, hidden_size)) — Estado oculto de la última capa después de una operación de agrupación en las dimensiones espaciales.

  • hidden_states (tuple(torch.Tensor), opcional, devuelto cuando se pasa output_hidden_states=True o cuando config.output_hidden_states=True) — Tupla de torch.Tensor (una para la salida de las incrustaciones, si el modelo tiene una capa de incrustaciones, + una para la salida de cada capa) de forma (batch_size, num_channels, height, width).

    Estados ocultos del modelo en la salida de cada capa más las salidas opcionales de la incrustación inicial.

Ejemplo:

MobileViTV2ForImageClassification

clase transformers.MobileViTV2ForImageClassification

< >

( config: MobileViTV2Config )

Parámetros

  • config (MobileViTV2Config) — Clase de configuración del modelo con todos los parámetros del modelo. Inicializar con un archivo de configuración no carga los pesos asociados con el modelo, solo la configuración. Consulte el método from_pretrained() para cargar los pesos del modelo.

Modelo MobileViTV2 con una cabeza de clasificación de imágenes en la parte superior (una capa lineal sobre las características agrupadas), por ejemplo, para ImageNet.

Este modelo hereda de PreTrainedModel. Consulta la documentación de la clase superior para los métodos genéricos que la biblioteca implementa para todos sus modelos (como la descarga o el guardado, el redimensionamiento de las incrustaciones de entrada, la poda de cabezas, etc.).

Este modelo también es una subclase de torch.nn.Module de PyTorch. Úsalo como un módulo de PyTorch regular y consulta la documentación de PyTorch para todo lo relacionado con el uso y el comportamiento generales.

forward

< >

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

Parámetros

  • pixel_values (torch.Tensor de forma (batch_size, num_channels, image_size, image_size), opcional) — Los tensores correspondientes a las imágenes de entrada. Los valores de píxeles se pueden obtener utilizando MobileViTImageProcessor. Consulte MobileViTImageProcessor.call() para más detalles (processor_class utiliza MobileViTImageProcessor para procesar las imágenes).
  • output_hidden_states (bool, opcional) — Indica si se deben devolver los estados ocultos de todas las capas. Consulte hidden_states en los tensores devueltos para obtener más detalles.
  • labels (torch.LongTensor de forma (batch_size,), opcional) — Etiquetas para calcular la pérdida de clasificación/regresión de imágenes. Los índices deben estar en [0, ..., config.num_labels - 1]. Si config.num_labels == 1 se calcula una pérdida de regresión (pérdida de error cuadrático medio), si config.num_labels > 1 se calcula una pérdida de clasificación (entropía cruzada).
  • return_dict (bool, opcional) — Indica si se debe devolver un ModelOutput en lugar de una tupla simple.

Devuelve

ImageClassifierOutputWithNoAttention o tuple(torch.Tensor)

Un ImageClassifierOutputWithNoAttention o una tupla de torch.Tensor (si se pasa return_dict=False o cuando config.return_dict=False) que comprende varios elementos según la configuración (MobileViTV2Config) y las entradas.

El método forward de MobileViTV2ForImageClassification reemplaza el método especial __call__.

Aunque la receta para la pasada hacia adelante debe definirse dentro de esta función, se debe llamar a la instancia de Module después en lugar de a esta, ya que la primera se encarga de ejecutar los pasos de pre y postprocesamiento, mientras que la segunda los ignora silenciosamente.

  • loss (torch.Tensor de forma (1,), opcional, se devuelve cuando se proporciona labels) — Pérdida de clasificación (o de regresión si config.num_labels==1).
  • logits (torch.Tensor de forma (batch_size, config.num_labels)) — Puntuaciones de clasificación (o de regresión si config.num_labels==1) (antes de SoftMax).
  • hidden_states (tuple(torch.Tensor), opcional, devuelto cuando se pasa output_hidden_states=True o cuando config.output_hidden_states=True) — Tupla de torch.Tensor (una para la salida de las incrustaciones, si el modelo tiene una capa de incrustación, + una para la salida de cada etapa) de forma (batch_size, num_channels, height, width). Estados ocultos (también llamados mapas de características) del modelo en la salida de cada etapa.

Ejemplo:

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

clase transformers.MobileViTV2ForSemanticSegmentation

< >

( config: MobileViTV2Config )

Parámetros

  • config (MobileViTV2Config) — Clase de configuración del modelo con todos los parámetros del modelo. Inicializar con un archivo de configuración no carga los pesos asociados con el modelo, solo la configuración. Consulte el método from_pretrained() para cargar los pesos del modelo.

Modelo MobileViTV2 con una cabeza de segmentación semántica en la parte superior, por ejemplo, para Pascal VOC.

Este modelo hereda de PreTrainedModel. Consulta la documentación de la clase superior para los métodos genéricos que la biblioteca implementa para todos sus modelos (como la descarga o el guardado, el redimensionamiento de las incrustaciones de entrada, la poda de cabezas, etc.).

Este modelo también es una subclase de torch.nn.Module de PyTorch. Úsalo como un módulo de PyTorch regular y consulta la documentación de PyTorch para todo lo relacionado con el uso y el comportamiento generales.

forward

< >

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

Parámetros

  • pixel_values (torch.Tensor de forma (batch_size, num_channels, image_size, image_size), opcional) — Los tensores correspondientes a las imágenes de entrada. Los valores de píxeles se pueden obtener utilizando MobileViTImageProcessor. Consulte MobileViTImageProcessor.call() para más detalles (processor_class utiliza MobileViTImageProcessor para procesar las imágenes).
  • labels (torch.LongTensor de forma (batch_size, height, width), opcional) — Mapas de segmentación semántica de referencia para calcular la pérdida. Los índices deben estar en [0, ..., config.num_labels - 1]. Si config.num_labels > 1, se calcula una pérdida de clasificación (Cross-Entropy).
  • output_hidden_states (bool, opcional) — Indica si se deben devolver los estados ocultos de todas las capas. Consulte hidden_states en los tensores devueltos para obtener más detalles.
  • return_dict (bool, opcional) — Indica si se debe devolver un ModelOutput en lugar de una tupla simple.

Devuelve

SemanticSegmenterOutput o tuple(torch.Tensor)

Un SemanticSegmenterOutput o una tupla de torch.Tensor (si se pasa return_dict=False o cuando config.return_dict=False) que comprende varios elementos según la configuración (MobileViTV2Config) y las entradas.

El método forward de MobileViTV2ForSemanticSegmentation sobrescribe el método especial __call__.

Aunque la receta para la pasada hacia adelante debe definirse dentro de esta función, se debe llamar a la instancia de Module después en lugar de a esta, ya que la primera se encarga de ejecutar los pasos de pre y postprocesamiento, mientras que la segunda los ignora silenciosamente.

  • loss (torch.Tensor de forma (1,), opcional, se devuelve cuando se proporciona labels) — Pérdida de clasificación (o de regresión si config.num_labels==1).

  • logits (torch.Tensor de forma (batch_size, config.num_labels, logits_height, logits_width)) — Puntuaciones de clasificación para cada píxel.

    Los logits devueltos no tienen necesariamente el mismo tamaño que los pixel_values pasados como entradas. Esto se hace para evitar realizar dos interpolaciones y perder algo de calidad cuando un usuario necesita redimensionar los logits al tamaño de la imagen original como procesamiento posterior. Debe comprobar siempre la forma de sus logits y redimensionarlos según sea necesario.

  • hidden_states (tuple(torch.Tensor), opcional, devuelto cuando se pasa output_hidden_states=True o cuando config.output_hidden_states=True) — Tupla de torch.Tensor (una para la salida de las incrustaciones, si el modelo tiene una capa de incrustaciones, + una para la salida de cada capa) de forma (batch_size, patch_size, hidden_size).

    Estados ocultos del modelo en la salida de cada capa más las salidas opcionales de la incrustación inicial.

  • attentions (tuple(torch.Tensor), opcional, se devuelve cuando se pasa output_attentions=True o cuando config.output_attentions=True) — Tupla de torch.Tensor (una por cada capa) de forma (batch_size, num_heads, patch_size, sequence_length).

    Pesos de atención tras el softmax de atención, utilizados para calcular la media ponderada en las cabezas de autoatención.

Ejemplos:

>>> 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
Update on GitHub