deformable-detr-single-scale-dc5
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.