Deformable DETR con refinamiento de cuadros de dos etapas
Modelo Deformable DETR con base ResNet-50, refinamiento de cuadros y dos etapas. El modelo Deformable DEtection TRansformer (DETR) con refinamiento de cuadros y dos etapas ha sido entrenado de principio a fin en la detección de objetos 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. El modelo es un transformador codificador-decodificador con una base convolucional. Dos cabezales se añaden 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 una MLP (perceptrón multicapa) para los cuadros delimitadores. El modelo utiliza consultas de objetos para detectar objetos en una imagen. Cada consulta de objeto busca un objeto particular en la imagen. Está entrenado usando una 'pérdida de emparejamiento bipartito', donde se compara las clases predichas y los cuadros delimitadores de cada una de las N = 100 consultas de objetos con las anotaciones de verdad del terreno, ajustadas a la misma longitud N. El algoritmo de emparejamiento húngaro se utiliza para crear un mapeo óptimo de uno-a-uno entre cada una de las N consultas y cada una de las N anotaciones. Posteriormente, se usa la entropía cruzada estándar (para las clases) y una combinación lineal de la pérdida L1 y IoU generalizada (para los cuadros delimitadores) para optimizar los parámetros del modelo.
Como usar
Aquí está 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-with-box-refine-two-stage")
model = DeformableDetrForObjectDetection.from_pretrained("SenseTime/deformable-detr-with-box-refine-two-stage")
inputs = processor(images=image, return_tensors="pt")
outputs = model(**inputs)
# convertir salidas (cuadros delimitadores y logits de clase) a API COCO
# mantengamos solo las 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"Detectado {model.config.id2label[label.item()]} con confianza "
f"{round(score.item(), 3)} en la ubicación {box}")
Actualmente, tanto el extractor de características como el modelo soportan PyTorch.
Funcionalidades
- Transformador codificador-decodificador con base convolucional.
- Capas adicionales para la detección de objetos.
- Consultas de objetos para detectar objetos específicos en una imagen.
- Pérdida de emparejamiento bipartito para la optimización.
- Algoritmo de emparejamiento húngaro para un mapeo óptimo.
Casos de uso
- Detección de objetos en imágenes.
- Aplicaciones de visión por computadora que requieren identificación de objetos específicos.
- Automatización de tareas de reconocimiento de objetos en datasets como COCO.