deformable-detr-escala-sencilla
El modelo DETR deformable con un backbone ResNet-50, escala sencilla es un modelo de DEtection TRansformer (DETR), entrenado de extremo a extremo en la detección de objetos en COCO 2017 (118k imágenes anotadas). El modelo es un transformer de codificador-decodificador con una columna vertebral convolucional. Se agregan dos cabezales 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 los cuadros delimitadores. El modelo utiliza consultas de objetos para detectar objetos en una imagen, y el número de consultas de objetos se establece en 100 para COCO. El modelo se entrena utilizando una 'pérdida de coincidencia bipartita', comparando las clases y los cuadros delimitadores predichos de cada una de las consultas de objetos con las anotaciones de verdad del terreno. El algoritmo de emparejamiento húngaro se utiliza para crear una asignación óptima uno a uno entre las consultas y las anotaciones. Se utilizan la entropía cruzada estándar (para las clases) y una combinación lineal de la pérdida L1 y la IoU generalizada (para los cuadros delimitadores) para optimizar los parámetros del modelo.
Como usar
Aquí le mostramos 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")
model = DeformableDetrForObjectDetection.from_pretrained("SenseTime/deformable-detr-single-scale")
inputs = processor(images=image, return_tensors="pt")
outputs = model(**inputs)
# convertir salidas (cuadros delimitadores y logits de clase) a API de COCO
# solo conservamos detecciones con puntaje > 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 "
f"{round(score.item(), 3)} at location {box}")
Funcionalidades
- Transformer codificador-decodificador con columna vertebral convolucional
- Capa lineal para etiquetas de clase
- MLP para cuadros delimitadores
- Usa consultas de objetos para la detección de objetos
- Algoritmo de emparejamiento húngaro para asignación óptima
- Entropía cruzada y combinaciones de pérdidas L1 e IoU generalizada
Casos de uso
- Detección de objetos en imágenes
- Aplicaciones en sistemas de seguridad y vigilancia
- Procesamiento de imágenes para análisis de contenido
- Automatización de etiquetado de imágenes para grandes datasets