Deformable DETR con refinamiento de cajas
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.