Deformable DETR con refinamiento de cajas

SenseTime
Detección de objetos

Deformable DEtection TRansformer (DETR), con refinamiento de cajas entrenado de extremo a extremo 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 fue lanzado por primera vez en este repositorio. El modelo DETR es un transformador de encoder-decoder con una columna vertebral convolucional. Se agregan dos cabezas en la salida del decoder 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 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 + las cajas delimitadoras de cada una de las N = 100 consultas de objetos con las anotaciones de verdad en el suelo, acolchadas hasta la misma longitud N (por lo que si una imagen solo contiene 4 objetos, 96 anotaciones solo tendrán 'ningún objeto' como clase y 'ninguna caja delimitadora' como caja). El algoritmo de emparejamiento húngaro se utiliza para crear una asignación óptima uno a uno entre cada una de las N consultas y cada una de las N anotaciones. A continuación, 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 IoU generalizada (para las cajas delimitadoras) para optimizar los parámetros del modelo.

Como usar

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')
model = DeformableDetrForObjectDetection.from_pretrained('SenseTime/deformable-detr-with-box-refine')

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

# convert outputs (bounding boxes and class logits) to COCO API
# let's only keep detections with score > 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 DETR con transformador de encoder-decoder
Columna vertebral convolucional
Capa lineal para etiquetas de clase
MLP para cajas delimitadoras
Utiliza consultas de objetos
Número de consultas de objetos establecido en 100
Algoritmo de emparejamiento húngaro
Entropía cruzada estándar y combinación lineal de pérdidas L1 e IoU generalizada

Casos de uso

Detección de objetos en imágenes utilizando el modelo bruto.