deformable-detr-single-scale-dc5

SenseTime
Detección de objetos

El modelo Deformable DETR (Transformador DEformable para la Detección de Objetos) de una escala con dilatación fue entrenado de principio a fin en la detección de objetos de COCO 2017 (118k imágenes anotadas). Fue introducido en el artículo Deformable DETR: Deformable Transformers for End-to-End Object Detection por Zhu et al. y se lanzó por primera vez en este repositorio. El equipo que lanzó Deformable DETR no escribió una tarjeta de modelo para este modelo, por lo que esta tarjeta de modelo ha sido escrita por el equipo de Hugging Face. El modelo DETR es un transformador de codificador-decodificador con una columna vertebral convolucional. Se añaden dos cabeceras en la parte superior de las salidas del decodificador para realizar la detección de objetos: una capa lineal para las etiquetas de clase y un MLP (perceptrón multicapa) para las cajas delimitadoras. El modelo utiliza las llamadas consultas de objetos para detectar objetos en una imagen. Cada consulta de objeto busca un objeto en particular en la imagen. Para COCO, el número de consultas de objetos se establece en 100. El modelo se entrena utilizando una 'pérdida de emparejamiento bipartito': se comparan las clases predichas + cajas delimitadoras de cada una de las N = 100 consultas de objeto con las anotaciones de verdad en tierra, rellenadas hasta la misma longitud N (si una imagen solo contiene 4 objetos, 96 anotaciones tendrán 'sin objeto' como clase y 'sin caja delimitadora' como caja). Se utiliza el algoritmo de emparejamiento húngaro para crear un mapeo óptimo uno a uno entre cada una de las N consultas y cada una de las N anotaciones. Luego, se utilizan la entropía cruzada estándar (para las clases) y una combinación lineal de la pérdida L1 y la pérdida de IoU generalizada (para las cajas delimitadoras) para optimizar los parámetros del modelo.

Como usar

Aquí se explica cómo usar este modelo:

from transformers import AutoImageProcessor, DeformableDetrForObjectDetection
import torch
from PIL import Image
import requests

url = "http://images.cocodataset.org/val2017/000000039769.jpg"
image = Image.open(requests.get(url, stream=True).raw)

processor = AutoImageProcessor.from_pretrained("SenseTime/deformable-detr-single-scale-dc5")
model = DeformableDetrForObjectDetection.from_pretrained("SenseTime/deformable-detr-single-scale-dc5")

inputs = processor(images=image, return_tensors="pt")
outputs = model(**inputs)

# convertir salidas (cajas delimitadoras y logits de clase) a la API COCO
# solo mantenemos detecciones con puntuación > 0.7
target_sizes = torch.tensor([image.size[::-1]])
results = processor.post_process_object_detection(outputs, target_sizes=target_sizes, threshold=0.7)[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 {round(score.item(), 3)} at location {box}")

Funcionalidades

Modelo de detección de objetos
Transformador de encoder-decoder
Espina dorsal convolucional
Consultas de objetos
Algoritmo de emparejamiento húngaro
Pérdida combinada de entropía cruzada, L1 y IoU generalizada

Casos de uso

Detección de objetos en imágenes.