Transformers documentation
ViTDet
Este modelo se publicó en HF papers el 2022-03-30 y se contribuyó a Hugging Face Transformers el 2023-08-29.
ViTDet
Resumen
El modelo ViTDet fue propuesto en Exploring Plain Vision Transformer Backbones for Object Detection por Yanghao Li, Hanzi Mao, Ross Girshick y Kaiming He. ViTDet aprovecha el Vision Transformer plano para la tarea de detección de objetos.
El resumen del artículo es el siguiente:
Exploramos el Vision Transformer (ViT) plano, no jerárquico, como red de base para la detección de objetos. Este diseño permite ajustar la arquitectura original de ViT para la detección de objetos sin necesidad de rediseñar una base jerárquica para el preentrenamiento. Con adaptaciones mínimas para el ajuste fino, nuestro detector con base plana puede lograr resultados competitivos. Sorprendentemente, observamos: (i) es suficiente construir una pirámide de características simple a partir de un mapa de características de una sola escala (sin el diseño común de FPN) y (ii) es suficiente usar atención de ventana (sin desplazamiento) apoyada en muy pocos bloques de propagación entre ventanas. Con bases de ViT plano preentrenadas como Autoencoders Enmascarados (MAE), nuestro detector, llamado ViTDet, puede competir con los métodos líderes anteriores, que se basaban todos en bases jerárquicas, alcanzando hasta 61.3 AP_box en el conjunto de datos COCO utilizando solo preentrenamiento en ImageNet-1K. Esperamos que nuestro estudio llame la atención sobre la investigación de detectores con base plana.
Este modelo fue aportado por nielsr. El código original se puede encontrar aquí.
Consejos:
- Por el momento, solo está disponible el backbone.
VitDetConfig
clase 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 )
Parámetros
- hidden_size (
int, opcional, valor predeterminado768) — Dimensión de las representaciones ocultas. - num_hidden_layers (
int, opcional, valor predeterminado12) — Número de capas ocultas en el decodificador del Transformer. - num_attention_heads (
int, opcional, valor predeterminado12) — Número de cabezas de atención para cada capa de atención en el decodificador Transformer. - mlp_ratio (
int, opcional, valor predeterminado4) — Relación entre la dimensión oculta del MLP y la dimensión de la incrustación. - hidden_act (
str, opcional, valor predeterminadogelu) — La función de activación no lineal (función o cadena) en el decodificador. Por ejemplo,"gelu","relu","silu", etc. - dropout_prob (
Union[float, int], opcional, valor predeterminado0.0) — La proporción para todas las capas de dropout. - initializer_range (
float, opcional, valor predeterminado0.02) — La desviación estándar del truncated_normal_initializer para inicializar todas las matrices de pesos. - layer_norm_eps (
float, opcional, valor predeterminado1e-06) — La epsilon utilizada por las capas de normalización de capa. - image_size (
Union[int, list[int], tuple[int, int]], opcional, valor predeterminado224) — El tamaño (resolución) de cada imagen. - pretrain_image_size (
int, opcional, valor predeterminado 224) — El tamaño (resolución) de cada imagen durante el preentrenamiento. - patch_size (
Union[int, list[int], tuple[int, int]], opcional, valor predeterminado16) — El tamaño (resolución) de cada parche. - num_channels (
int, opcional, valor predeterminado3) — El número de canales de entrada. - qkv_bias (
bool, opcional, valor predeterminadoTrue) — Si se debe añadir un sesgo a las consultas, claves y valores. - drop_path_rate (
Union[float, int], opcional, valor predeterminado0.0) — Tasa de drop path para la fusión de parches. - window_block_indices (
list[int], opcional, valor predeterminado[]) — Lista de índices de bloques que deben tener atención de ventana en lugar de la autoatención global regular. - residual_block_indices (
list[int], opcional, valor predeterminado[]) — Lista de índices de bloques que deben tener un bloque residual adicional después del MLP. - use_absolute_position_embeddings (
bool, opcional, valor predeterminadoTrue) — Si se deben usar embeddings de posición absoluta. - use_relative_position_embeddings (
bool, opcional, valor predeterminadoFalse) — Indica si se deben añadir embeddings de posición relativa a los mapas de atención. - window_size (
int, opcional, valor predeterminado 0) — El tamaño de la ventana de atención.
Esta es la clase de configuración para almacenar la configuración de un VitDetModel. Se utiliza para instanciar un modelo Vitdet 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 google/vitdet-base-patch16-224
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 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
clase transformers.VitDetModel
< source >( config: VitDetConfig )
Parámetros
- config (VitDetConfig) — 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 Vitdet 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
< 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)
Parámetros
- pixel_values (
torch.Tensorde 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 utilizandoimage_processor_class. Consulteimage_processor_class.__call__para más detalles (processor_classutilizaimage_processor_classpara procesar las imágenes). - output_attentions (
bool, opcional) — Indica si se deben devolver los tensores de atención de todas las capas de atención. Consulteattentionsen los tensores devueltos para obtener más detalles. - output_hidden_states (
bool, opcional) — Indica si se deben devolver los estados ocultos de todas las capas. Consultehidden_statesen 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
BaseModelOutput o tuple(torch.Tensor)
Un BaseModelOutput 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 (VitDetConfig) y las entradas.
El método forward de VitDetModel 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
Moduledespué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.Tensorde forma(batch_size, sequence_length, hidden_size)) — Secuencia de estados ocultos en la salida de la última capa del modelo.hidden_states (
tuple(torch.Tensor), opcional, devuelto cuando se pasaoutput_hidden_states=Trueo cuandoconfig.output_hidden_states=True) — Tupla detorch.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, sequence_length, 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 pasaoutput_attentions=Trueo cuandoconfig.output_attentions=True) — Tupla detorch.Tensor(una por cada capa) de forma(batch_size, num_heads, sequence_length, 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 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]