Transformers documentation
DAB-DETR
Este modelo se publicó en HF papers el 28-01-2022 y se contribuyó a Hugging Face Transformers el 04-02-2025.
DAB-DETR
Resumen
El modelo DAB-DETR fue propuesto en DAB-DETR: Dynamic Anchor Boxes are Better Queries for DETR por Shilong Liu, Feng Li, Hao Zhang, Xiao Yang, Xianbiao Qi, Hang Su, Jun Zhu, Lei Zhang. DAB-DETR es una variante mejorada de Conditional DETR. Utiliza cajas de anclaje actualizadas dinámicamente para proporcionar tanto un punto de consulta de referencia (x, y) como un tamaño de anclaje de referencia (w, h), mejorando el cálculo de la atención cruzada. Este nuevo enfoque logra un 45,7% de AP cuando se entrena durante 50 épocas con un único modelo ResNet-50 como columna vertebral.
El resumen del artículo es el siguiente:
En este artículo presentamos una nueva formulación de consultas que utiliza cajas de anclaje dinámicas para DETR (DEtection TRansformer) y ofrecemos una comprensión más profunda del papel de las consultas en DETR. Esta nueva formulación utiliza directamente las coordenadas de las cajas como consultas en los decodificadores Transformer y las actualiza dinámicamente capa por capa. El uso de coordenadas de cajas no solo ayuda a emplear priores posicionales explícitos para mejorar la similitud entre la consulta y las características y eliminar el problema de la lenta convergencia del entrenamiento en DETR, sino que también nos permite modular el mapa de atención posicional utilizando la información del ancho y alto de la caja. Este diseño hace evidente que las consultas en DETR pueden implementarse como una capa de pooling ROI suave que se ejecuta capa por capa de manera en cascada. Como resultado, logra el mejor rendimiento en el benchmark MS-COCO entre los modelos de detección similares a DETR bajo la misma configuración, por ejemplo, un AP del 45,7 % utilizando ResNet50-DC5 como backbone entrenado durante 50 épocas. También realizamos experimentos extensos para confirmar nuestro análisis y verificar la efectividad de nuestros métodos.
Este modelo fue aportado por davidhajdu. El código original se puede encontrar aquí.
Cómo empezar con el modelo
Use el siguiente código para comenzar con el modelo.
import requests
import torch
from PIL import Image
from transformers import AutoImageProcessor, AutoModelForObjectDetection
url = 'http://images.cocodataset.org/val2017/000000039769.jpg'
image = Image.open(requests.get(url, stream=True).raw)
image_processor = AutoImageProcessor.from_pretrained("IDEA-Research/dab-detr-resnet-50")
model = AutoModelForObjectDetection.from_pretrained("IDEA-Research/dab-detr-resnet-50", device_map="auto")
inputs = image_processor(images=image, return_tensors="pt").to(model.device)
with torch.no_grad():
outputs = model(**inputs)
results = image_processor.post_process_object_detection(outputs, target_sizes=torch.tensor([image.size[::-1]]), threshold=0.3)
for result in results:
for score, label_id, box in zip(result["scores"], result["labels"], result["boxes"]):
score, label = score.item(), label_id.item()
box = [round(i, 2) for i in box.tolist()]
print(f"{model.config.id2label[label]}: {score:.2f} {box}")Esto debería imprimir
cat: 0.87 [14.7, 49.39, 320.52, 469.28] remote: 0.86 [41.08, 72.37, 173.39, 117.2] cat: 0.86 [344.45, 19.43, 639.85, 367.86] remote: 0.61 [334.27, 75.93, 367.92, 188.81] couch: 0.59 [-0.04, 1.34, 639.9, 477.09]
Existen otras tres formas de instanciar un modelo DAB-DETR (según lo que prefieras):
Opción 1: Instanciar DAB-DETR con pesos preentrenados para el modelo completo
from transformers import DabDetrForObjectDetection
model = DabDetrForObjectDetection.from_pretrained("IDEA-Research/dab-detr-resnet-50", device_map="auto")Opción 2: Instanciar DAB-DETR con pesos inicializados aleatoriamente para Transformer, pero con pesos preentrenados para backbone
from transformers import DabDetrConfig, DabDetrForObjectDetection
config = DabDetrConfig()
model = DabDetrForObjectDetection(config)Opción 3: Instanciar DAB-DETR con pesos inicializados aleatoriamente para el backbone + Transformer
config = DabDetrConfig() model = DabDetrForObjectDetection(config)
DabDetrConfig
clase transformers.DabDetrConfig
< 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 = 0id2label: 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 = Noneis_encoder_decoder: bool = Truebackbone_config: dict | transformers.configuration_utils.PreTrainedConfig | None = Nonenum_queries: int = 300encoder_layers: int = 6encoder_ffn_dim: int = 2048encoder_attention_heads: int = 8decoder_layers: int = 6decoder_ffn_dim: int = 2048decoder_attention_heads: int = 8activation_function: str = 'prelu'hidden_size: int = 256dropout: float | int = 0.1attention_dropout: float | int = 0.0activation_dropout: float | int = 0.0init_std: float = 0.02init_xavier_std: float = 1.0auxiliary_loss: bool = Falsedilation: bool = Falseclass_cost: int = 2bbox_cost: int = 5giou_cost: int = 2cls_loss_coefficient: int = 2bbox_loss_coefficient: int = 5giou_loss_coefficient: int = 2focal_alpha: float = 0.25temperature_height: int = 20temperature_width: int = 20query_dim: int = 4random_refpoints_xy: bool = Falsekeep_query_pos: bool = Falsenum_patterns: int = 0normalize_before: bool = Falsesine_position_embedding_scale: float | None = Noneinitializer_bias_prior_prob: float | None = Nonetie_word_embeddings: bool = True )
Parámetros
- is_encoder_decoder (
bool, opcional, valor predeterminadoTrue) — Indica si el modelo se utiliza como codificador/decodificador o no. - backbone_config (
Union[dict, ~configuration_utils.PreTrainedConfig], opcional) — La configuración del modelo backbone. - num_queries (
int, opcional, valor predeterminado 300) — Número de consultas de objetos, es decir, ranuras de detección. Este es el número máximo de objetos que DabDetrModel puede detectar en una sola imagen. Para COCO, recomendamos 100 consultas. - encoder_layers (
int, opcional, valor predeterminado6) — Número de capas ocultas en el codificador del Transformer. Usará el mismo valor quenum_layerssi no se establece. - encoder_ffn_dim (
int, opcional, valor predeterminado2048) — Dimensionalidad de la capa “intermedia” (a menudo denominada feed-forward) en el codificador. - encoder_attention_heads (
int, opcional, valor predeterminado8) — Número de cabezas de atención para cada capa de atención en el codificador Transformer. - decoder_layers (
int, opcional, valor predeterminado6) — Número de capas ocultas en el decodificador del Transformer. Si no se establece, se usará el mismo valor quenum_layers. - decoder_ffn_dim (
int, opcional, valor predeterminado2048) — Dimensionalidad de la capa “intermedia” (a menudo denominada feed-forward) en el decodificador. - decoder_attention_heads (
int, opcional, valor predeterminado8) — Número de cabezas de atención para cada capa de atención en el decodificador del Transformer. - activation_function (
str, opcional, valor predeterminadoprelu) — La función de activación no lineal (función o cadena) en el decodificador. Por ejemplo,"gelu","relu","silu", etc. - hidden_size (
int, opcional, valor predeterminado256) — Dimensión de las representaciones ocultas. - dropout (
Union[float, int], opcional, valor predeterminado0.1) — La proporción para todas las capas de dropout. - attention_dropout (
Union[float, int], opcional, valor predeterminado0.0) — La proporción de dropout para las probabilidades de atención. - activation_dropout (
Union[float, int], opcional, valor predeterminado0.0) — La proporción de dropout para las activaciones dentro de la capa totalmente conectada. - init_std (
float, opcional, valor predeterminado0.02) — La desviación estándar del truncated_normal_initializer para inicializar todas las matrices de pesos. - init_xavier_std (
float, opcional, valor predeterminado1.0) — El factor de escala utilizado para la inicialización de Xavier de los pesos de la atención cruzada. - auxiliary_loss (
bool, opcional, valor predeterminadoFalse) — Si se deben utilizar las pérdidas de decodificación auxiliares (pérdidas en cada capa del decodificador). - dilation (
bool, opcional, valor predeterminadoFalse) — Si se debe reemplazar el stride con dilation en el último bloque convolucional (DC5). Solo se admite cuandouse_timm_backbone=True. - class_cost (
int, opcional, valor predeterminado2) — Peso relativo del error de clasificación en el coste de correspondencia húngara. - bbox_cost (
int, opcional, valor predeterminado5) — Peso relativo del error de la caja delimitadora L1 en el costo de correspondencia húngara. - giou_cost (
int, opcional, valor predeterminado2) — Peso relativo de la pérdida de IoU generalizada en el costo de correspondencia húngara. - cls_loss_coefficient (
int, opcional, valor predeterminado2) — Peso relativo de la pérdida de clasificación en la pérdida de segmentación panóptica. - bbox_loss_coefficient (
int, opcional, valor predeterminado5) — Peso relativo de la pérdida de caja delimitadora L1 en la pérdida de segmentación panóptica. - giou_loss_coefficient (
int, opcional, valor predeterminado2) — Peso relativo de la pérdida de IoU generalizada en la pérdida de segmentación panóptica. - focal_alpha (
float, opcional, valor predeterminado0.25) — Parámetro alfa en la pérdida focal. - temperature_height (
int, opcional, valor predeterminado 20) — Parámetro de temperatura para ajustar la planitud de la atención posicional (HEIGHT) - temperature_width (
int, opcional, valor predeterminado 20) — Parámetro de temperatura para ajustar la planitud de la atención posicional (WIDTH) - query_dim (
int, opcional, valor predeterminado 4) — El parámetro de dimensión de consulta representa el tamaño del vector de salida. - random_refpoints_xy (
bool, opcional, valor predeterminadoFalse) — Si se fijan las coordenadas x e y de las cajas de anclaje con una inicialización aleatoria. - keep_query_pos (
bool, opcional, valor predeterminadoFalse) — Si se debe concatenar el embebido posicional proyectado de la consulta de objeto a la consulta (clave) original en cada capa del decodificador. - num_patterns (
int, opcional, valor predeterminado 0) — Número de incrustaciones de patrón. - normalize_before (
bool, opcional, valor predeterminadoFalse) — Si se utiliza una capa de normalización en el Encoder o no. - sine_position_embedding_scale (
float, opcional, valor predeterminado ‘None’) — Factor de escala aplicado a las codificaciones posicionales normalizadas. - initializer_bias_prior_prob (
float, opcional) — La probabilidad a priori utilizada por el inicializador de sesgo para inicializar los sesgos deenc_score_headyclass_embed. SiNone,prior_probse calcula comoprior_prob = 1 / (num_labels + 1)durante la inicialización de los pesos del modelo. - tie_word_embeddings (
bool, opcional, valor predeterminadoTrue) — Si se deben vincular las matrices de pesos de embeddings según el mapeotied_weights_keysdel modelo.
Esta es la clase de configuración para almacenar la configuración de un modelo Dab Detr. Se utiliza para instanciar un modelo Dab Detr 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 IDEA-Research/dab-detr-resnet-50
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.
Ejemplos:
>>> from transformers import DabDetrConfig, DabDetrModel
>>> # Initializing a DAB-DETR IDEA-Research/dab-detr-resnet-50 style configuration
>>> configuration = DabDetrConfig()
>>> # Initializing a model (with random weights) from the IDEA-Research/dab-detr-resnet-50 style configuration
>>> model = DabDetrModel(configuration)
>>> # Accessing the model configuration
>>> configuration = model.configDabDetrModel
clase transformers.DabDetrModel
< source >( config: DabDetrConfig )
Parámetros
- config (DabDetrConfig) — 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 DAB-DETR básico (constituido por un backbone y un Transformer encoder-decoder) que genera estados ocultos crudos, estados ocultos intermedios, puntos de referencia y coordenadas de salida, sin ninguna cabeza específica 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: Tensorpixel_mask: typing.Optional[torch.LongTensor] = Nonedecoder_attention_mask: typing.Optional[torch.LongTensor] = Noneencoder_outputs: typing.Optional[torch.Tensor] = Noneinputs_embeds: typing.Optional[torch.Tensor] = Nonedecoder_inputs_embeds: typing.Optional[torch.Tensor] = Noneoutput_attentions: bool | None = Noneoutput_hidden_states: bool | None = Nonereturn_dict: bool | None = None**kwargs ) → DabDetrModelOutput or tuple(torch.Tensor)
Parámetros
- pixel_values (
torch.Tensorde forma(batch_size, num_channels, image_size, image_size)) — 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). - pixel_mask (
torch.LongTensorde forma(batch_size, height, width), opcional) — Máscara para evitar realizar atención sobre los valores de píxeles de relleno. Valores de máscara seleccionados en[0, 1]:- 1 para los píxeles reales (es decir, no enmascarados),
- 0 para los píxeles que son relleno (es decir, mascarados).
- decoder_attention_mask (
torch.Tensorde forma(batch_size, num_queries), opcional) — No se utiliza de forma predeterminada. Puede usarse para enmascarar las consultas de objetos. - encoder_outputs (
torch.Tensor, opcional) — La tupla consiste en (last_hidden_state, opcional:hidden_states, opcional:attentions)last_hidden_statede forma(batch_size, sequence_length, hidden_size), opcional) es una secuencia de hidden-states en la salida de la última capa del codificador. Se utiliza en la atención cruzada del decodificador. - inputs_embeds (
torch.Tensorde forma(batch_size, sequence_length, hidden_size), opcional) — Opcionalmente, en lugar de pasar el mapa de características aplanado (salida del backbone + capa de proyección), puedes elegir pasar directamente una representación aplanada de una imagen. - decoder_inputs_embeds (
torch.Tensorde forma(batch_size, num_queries, hidden_size), opcional) — Opcionalmente, en lugar de inicializar las consultas con un tensor de ceros, puedes elegir pasar directamente una representación incrustada. - 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
DabDetrModelOutput o tuple(torch.Tensor)
Un DabDetrModelOutput 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 (DabDetrConfig) y las entradas.
El método forward de DabDetrModel 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
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 decodificador del modelo.Si se utiliza
past_key_values, solo se genera el último hidden-state de las secuencias con forma(batch_size, 1, hidden_size).past_key_values (
EncoderDecoderCache, opcional, se devuelve cuando se pasause_cache=Trueo cuandoconfig.use_cache=True) — Es una instancia de EncoderDecoderCache. Para más detalles, consulte nuestra guía de caché kv.Contiene estados ocultos precalculados (claves y valores en los bloques de autoatención y en los bloques de atención cruzada) que pueden utilizarse (véase la entrada
past_key_values) para acelerar la decodificación secuencial.decoder_hidden_states (
tuple(torch.Tensor), opcional, se devuelve cuando se pasaoutput_hidden_states=Trueo cuandoconfig.output_hidden_states=True) — Tupla detorch.Tensor(una para la salida de los embeddings, si el modelo tiene una capa de embedding, + una para la salida de cada capa) de forma(batch_size, sequence_length, hidden_size).Estados ocultos del decodificador en la salida de cada capa más las salidas opcionales de la incrustación inicial.
decoder_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 del decodificador, después del softmax de atención, utilizados para calcular la media ponderada en las cabezas de autoatención.
cross_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 de la capa de atención cruzada del decodificador, después del softmax de atención, utilizados para calcular la media ponderada en las cabezas de atención cruzada.
encoder_last_hidden_state (
torch.Tensorde forma(batch_size, sequence_length, hidden_size), opcional) — Secuencia de estados ocultos en la salida de la última capa del codificador del modelo.encoder_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 codificador en la salida de cada capa más las salidas opcionales de la incrustación inicial.
encoder_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 del codificador, después del softmax de atención, utilizados para calcular la media ponderada en las cabezas de autoatención.
intermediate_hidden_states (
torch.Tensorde forma(config.decoder_layers, batch_size, sequence_length, hidden_size), opcional, se devuelve cuandoconfig.auxiliary_loss=True) — Activaciones intermedias del decodificador, es decir, la salida de cada capa del decodificador, cada una de ellas pasada por un layernorm.reference_points (
torch.Tensorde forma(config.decoder_layers, batch_size, num_queries, 2 (anchor points))) — Puntos de referencia (puntos de referencia de cada capa del decodificador).
Ejemplos:
>>> from transformers import AutoImageProcessor, AutoModel
>>> from PIL import Image
>>> from huggingface_hub.utils import httpx
>>> from io import BytesIO
>>> 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("IDEA-Research/dab-detr-resnet-50")
>>> model = AutoModel.from_pretrained("IDEA-Research/dab-detr-resnet-50")
>>> # prepare image for the model
>>> inputs = image_processor(images=image, return_tensors="pt")
>>> # forward pass
>>> outputs = model(**inputs)
>>> # the last hidden states are the final query embeddings of the Transformer decoder
>>> # these are of shape (batch_size, num_queries, hidden_size)
>>> last_hidden_states = outputs.last_hidden_state
>>> list(last_hidden_states.shape)
[1, 300, 256]DabDetrForObjectDetection
clase transformers.DabDetrForObjectDetection
< source >( config: DabDetrConfig )
Parámetros
- config (DabDetrConfig) — 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 DAB_DETR (constituido por un backbone y un Transformer encoder-decoder) con cabezas de detección de objetos en la parte superior, para tareas como la detección COCO.
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: Tensorpixel_mask: typing.Optional[torch.LongTensor] = Nonedecoder_attention_mask: typing.Optional[torch.LongTensor] = Noneencoder_outputs: typing.Optional[torch.Tensor] = Noneinputs_embeds: typing.Optional[torch.Tensor] = Nonedecoder_inputs_embeds: typing.Optional[torch.Tensor] = Nonelabels: list[dict] | None = Noneoutput_attentions: bool | None = Noneoutput_hidden_states: bool | None = Nonereturn_dict: bool | None = None**kwargs ) → DabDetrObjectDetectionOutput or tuple(torch.Tensor)
Parámetros
- pixel_values (
torch.Tensorde forma(batch_size, num_channels, image_size, image_size)) — 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). - pixel_mask (
torch.LongTensorde forma(batch_size, height, width), opcional) — Máscara para evitar realizar atención sobre los valores de píxeles de relleno. Valores de máscara seleccionados en[0, 1]:- 1 para los píxeles reales (es decir, no enmascarados),
- 0 para los píxeles que son relleno (es decir, mascarados).
- decoder_attention_mask (
torch.Tensorde forma(batch_size, num_queries), opcional) — No se utiliza de forma predeterminada. Puede usarse para enmascarar las consultas de objetos. - encoder_outputs (
torch.Tensor, opcional) — La tupla consiste en (last_hidden_state, opcional:hidden_states, opcional:attentions)last_hidden_statede forma(batch_size, sequence_length, hidden_size), opcional) es una secuencia de hidden-states en la salida de la última capa del codificador. Se utiliza en la atención cruzada del decodificador. - inputs_embeds (
torch.Tensorde forma(batch_size, sequence_length, hidden_size), opcional) — Opcionalmente, en lugar de pasar el mapa de características aplanado (salida del backbone + capa de proyección), puedes elegir pasar directamente una representación aplanada de una imagen. - decoder_inputs_embeds (
torch.Tensorde forma(batch_size, num_queries, hidden_size), opcional) — Opcionalmente, en lugar de inicializar las consultas con un tensor de ceros, puedes elegir pasar directamente una representación incrustada. - labels (
list[Dict]de longitud(batch_size,), opcional) — Etiquetas para calcular la pérdida de bipartite matching. Lista de diccionarios, donde cada diccionario contiene al menos las siguientes 2 claves: ‘class_labels’ y ‘boxes’ (las etiquetas de clase y las cajas delimitadoras de una imagen del lote, respectivamente). Las etiquetas de clase en sí deben ser untorch.LongTensorde longitud(number of bounding boxes in the image,)y las cajas untorch.Tensorde forma(number of bounding boxes in the image, 4). - 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
DabDetrObjectDetectionOutput o tuple(torch.Tensor)
Un DabDetrObjectDetectionOutput 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 (DabDetrConfig) y las entradas.
El método forward de DabDetrForObjectDetection 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
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.
loss (
torch.Tensorde forma(1,), opcional, devuelta cuando se proporcionanlabels) — Pérdida total como combinación lineal de una log-verosimilitud negativa (entropía cruzada) para la predicción de clases y una pérdida de caja delimitadora. Esta última se define como una combinación lineal de la pérdida L1 y la pérdida de IoU generalizada e invariante a la escala.loss_dict (
Dict, opcional) — Un diccionario que contiene las pérdidas individuales. Útil para el registro.logits (
torch.Tensorde forma(batch_size, num_queries, num_classes + 1)) — Logits de clasificación (incluyendo no-objeto) para todas las consultas.pred_boxes (
torch.Tensorde forma(batch_size, num_queries, 4)) — Coordenadas de cajas normalizadas para todas las consultas, representadas como (center_x, center_y, width, height). Estos valores están normalizados en [0, 1], relativos al tamaño de cada imagen individual del lote (ignorando el posible relleno). Puede usar~DabDetrImageProcessor.post_process_object_detectionpara obtener las cajas delimitadoras no normalizadas.auxiliary_outputs (
list[Dict], opcional) — Opcional, solo se devuelve cuando se activan las pérdidas auxiliares (es decir,config.auxiliary_lossestá establecido enTrue) y se proporcionan etiquetas. Es una lista de diccionarios que contienen las dos claves anteriores (logitsypred_boxes) para cada capa del decodificador.last_hidden_state (
torch.Tensorde forma(batch_size, sequence_length, hidden_size), opcional) — Secuencia de estados ocultos en la salida de la última capa del decodificador del modelo.decoder_hidden_states (
tuple[torch.Tensor], opcional, se devuelve cuando se pasaoutput_hidden_states=Trueo cuandoconfig.output_hidden_states=True) — Tupla detorch.Tensor(una para la salida de los embeddings, si el modelo tiene una capa de embedding, + una para la salida de cada capa) de forma(batch_size, sequence_length, hidden_size).Estados ocultos del decodificador en la salida de cada capa más las salidas de la incrustación inicial.
decoder_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 del decodificador, después del softmax de atención, utilizados para calcular la media ponderada en las cabezas de autoatención.
cross_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 de la capa de atención cruzada del decodificador, después del softmax de atención, utilizados para calcular la media ponderada en las cabezas de atención cruzada.
encoder_last_hidden_state (
torch.Tensorde forma(batch_size, sequence_length, hidden_size), opcional) — Secuencia de estados ocultos en la salida de la última capa del codificador del modelo.encoder_hidden_states (
tuple[torch.Tensor], opcional, se devuelve 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 codificador en la salida de cada capa más las salidas de la incrustación inicial.
encoder_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 del codificador, después del softmax de atención, utilizados para calcular la media ponderada en las cabezas de autoatención.
Ejemplos:
>>> from transformers import AutoImageProcessor, AutoModelForObjectDetection
>>> from PIL import Image
>>> from huggingface_hub.utils import httpx
>>> from io import BytesIO
>>> 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("IDEA-Research/dab-detr-resnet-50")
>>> model = AutoModelForObjectDetection.from_pretrained("IDEA-Research/dab-detr-resnet-50")
>>> inputs = image_processor(images=image, return_tensors="pt")
>>> with torch.no_grad():
>>> outputs = model(**inputs)
>>> # convert outputs (bounding boxes and class logits) to Pascal VOC format (xmin, ymin, xmax, ymax)
>>> target_sizes = torch.tensor([(image.height, image.width)])
>>> results = image_processor.post_process_object_detection(outputs, threshold=0.5, target_sizes=target_sizes)[0]
>>> for score, label, box in zip(results["scores"], results["labels"], results["boxes"]):
... box = [round(i, 2) for i in box.tolist()]
... print(
... f"Detected {model.config.id2label[label.item()]} with confidence "
... f"{round(score.item(), 3)} at location {box}"
... )
Detected remote with confidence 0.833 at location [38.31, 72.1, 177.63, 118.45]
Detected cat with confidence 0.831 at location [9.2, 51.38, 321.13, 469.0]
Detected cat with confidence 0.804 at location [340.3, 16.85, 642.93, 370.95]
Detected remote with confidence 0.683 at location [334.48, 73.49, 366.37, 190.01]
Detected couch with confidence 0.535 at location [0.52, 1.19, 640.35, 475.1]