Transformers documentation

SwiftFormer

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 27 de marzo de 2023 y se contribuyó a Hugging Face Transformers el 12 de mayo de 2023.

SwiftFormer

Resumen

El modelo SwiftFormer fue propuesto en SwiftFormer: Efficient Additive Attention for Transformer-based Real-time Mobile Vision Applications por Abdelrahman Shaker, Muhammad Maaz, Hanoona Rasheed, Salman Khan, Ming-Hsuan Yang, Fahad Shahbaz Khan.

El artículo SwiftFormer presenta un nuevo mecanismo de atención aditiva eficiente que reemplaza eficazmente las operaciones de multiplicación de matrices cuadráticas en el cálculo de autoatención con multiplicaciones elementales lineales. Sobre esta base se construye una serie de modelos denominados ‘SwiftFormer’, que alcanzan un rendimiento de última generación tanto en precisión como en velocidad de inferencia en dispositivos móviles. Incluso su variante pequeña logra una precisión top-1 del 78,5 % en ImageNet1K con una latencia de solo 0,8 ms en iPhone 14, lo que la hace más precisa y 2 veces más rápida en comparación con MobileViT-v2.

El resumen del artículo es el siguiente:

La autoatención se ha convertido en la opción de facto para capturar el contexto global en diversas aplicaciones de visión. Sin embargo, su complejidad computacional cuadrática con respecto a la resolución de la imagen limita su uso en aplicaciones en tiempo real, especialmente para su despliegue en dispositivos móviles con recursos limitados. Aunque se han propuesto enfoques híbridos para combinar las ventajas de las convoluciones y la autoatención para lograr un mejor equilibrio entre velocidad y precisión, las costosas operaciones de multiplicación de matrices en la autoatención siguen siendo un cuello de botella. En este trabajo, introducimos un nuevo mecanismo de atención aditiva eficiente que reemplaza eficazmente las operaciones de multiplicación de matrices cuadráticas por multiplicaciones elementales lineales. Nuestro diseño demuestra que la interacción clave-valor puede reemplazarse por una capa lineal sin sacrificar ninguna precisión. A diferencia de los métodos de estado del arte anteriores, nuestra formulación eficiente de la autoatención permite su uso en todas las etapas de la red. Utilizando nuestra atención aditiva eficiente propuesta, construimos una serie de modelos llamados “SwiftFormer” que logra un rendimiento de estado del arte en términos de precisión y velocidad de inferencia móvil. Nuestra variante pequeña logra una precisión top-1 del 78,5 % en ImageNet-1K con una latencia de solo 0,8 ms en iPhone 14, lo que es más preciso y 2 veces más rápido en comparación con MobileViT-v2.

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

SwiftFormerConfig

clase transformers.SwiftFormerConfig

< >

( 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 = Noneimage_size: int | list[int] | tuple[int, int] = 224num_channels: int = 3depths: list[int] | tuple[int, ...] = (3, 3, 6, 4)embed_dims: list[int] | tuple[int, ...] = (48, 56, 112, 220)mlp_ratio: int = 4downsamples: list[bool] | tuple[bool, ...] = (True, True, True, True)hidden_act: str = 'gelu'down_patch_size: int | list[int] | tuple[int, int] = 3down_stride: int = 2down_pad: int = 1drop_path_rate: float | int = 0.0drop_mlp_rate: float | int = 0.0drop_conv_encoder_rate: float | int = 0.0use_layer_scale: bool = Truelayer_scale_init_value: float = 1e-05batch_norm_eps: float = 1e-05 )

Parámetros

  • image_size (Union[int, list[int], tuple[int, int]], opcional, valor predeterminado 224) — El tamaño (resolución) de cada imagen.
  • num_channels (int, opcional, valor predeterminado 3) — El número de canales de entrada.
  • depths (Union[list[int], tuple[int, ...]], opcional, valor predeterminado (3, 3, 6, 4)) — Profundidad de cada capa en el Transformer.
  • embed_dims (list[int], opcional, valor predeterminado [48, 56, 112, 220]) — La dimensión de la incrustación en cada etapa
  • mlp_ratio (int, opcional, valor predeterminado 4) — Relación entre la dimensión oculta del MLP y la dimensión de la incrustación.
  • downsamples (list[bool], opcional, valor predeterminado [True, True, True, True]) — Si se deben o no reducir la resolución de las entradas entre dos etapas.
  • hidden_act (str, opcional, valor predeterminado gelu) — La función de activación no lineal (función o cadena) en el decodificador. Por ejemplo, "gelu", "relu", "silu", etc.
  • down_patch_size (int, opcional, valor predeterminado 3) — El tamaño de los parches en las capas de muestreo descendente.
  • down_stride (int, opcional, valor predeterminado 2) — El paso de los núcleos de convolución en las capas de muestreo descendente.
  • down_pad (int, opcional, valor predeterminado 1) — Relleno en las capas de muestreo descendente.
  • drop_path_rate (Union[float, int], opcional, valor predeterminado 0.0) — Tasa de drop path para la fusión de parches.
  • drop_mlp_rate (float, opcional, valor predeterminado 0.0) — Tasa de dropout para el componente MLP de SwiftFormer.
  • drop_conv_encoder_rate (float, opcional, valor predeterminado 0.0) — Tasa de dropout para el componente ConvEncoder de SwiftFormer.
  • use_layer_scale (bool, opcional, valor predeterminado True) — Si se deben escalar las salidas de los mezcladores de tokens.
  • layer_scale_init_value (float, opcional, valor predeterminado 1e-05) — Escala a utilizar en las capas de autoatención. 0.1 para base, 1e-6 para grande. Establezca 0 para deshabilitar la escala de capa.
  • batch_norm_eps (float, opcional, valor predeterminado 1e-05) — La epsilon utilizada por las capas de normalización por lote.

Esta es la clase de configuración para almacenar la configuración de un SwiftFormerModel. Se utiliza para instanciar un modelo Swiftformer 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 MBZUAI/swiftformer-xs

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 SwiftFormerConfig, SwiftFormerModel

>>> # Initializing a SwiftFormer swiftformer-base-patch16-224 style configuration
>>> configuration = SwiftFormerConfig()

>>> # Initializing a model (with random weights) from the swiftformer-base-patch16-224 style configuration
>>> model = SwiftFormerModel(configuration)

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

SwiftFormerModel

clase transformers.SwiftFormerModel

< >

( config: SwiftFormerConfig )

Parámetros

  • config (SwiftFormerConfig) — 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.

El modelo Swiftformer 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 ) → BaseModelOutputWithNoAttention 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 ViTImageProcessor. Consulte ViTImageProcessor.call() para más detalles (processor_class utiliza ViTImageProcessor 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

BaseModelOutputWithNoAttention o tuple(torch.Tensor)

Un BaseModelOutputWithNoAttention 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 (SwiftFormerConfig) y las entradas.

El método forward de SwiftFormerModel 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.

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

SwiftFormerForImageClassification

clase transformers.SwiftFormerForImageClassification

< >

( config: SwiftFormerConfig )

Parámetros

  • config (SwiftFormerConfig) — 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.

El modelo Swiftformer con una cabeza de clasificación de imágenes en la parte superior, 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] = Nonelabels: typing.Optional[torch.Tensor] = Noneoutput_hidden_states: bool | None = 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 ViTImageProcessor. Consulte ViTImageProcessor.call() para más detalles (processor_class utiliza ViTImageProcessor para procesar las imágenes).
  • 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).
  • 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

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 (SwiftFormerConfig) y las entradas.

El método forward de SwiftFormerForImageClassification 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)) — 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, SwiftFormerForImageClassification
>>> import torch
>>> from datasets import load_dataset

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

>>> image_processor = AutoImageProcessor.from_pretrained("MBZUAI/swiftformer-xs")
>>> model = SwiftFormerForImageClassification.from_pretrained("MBZUAI/swiftformer-xs")

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