deformable-detr-escala-sencilla

SenseTime
Detección de objetos

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