RT-DETR
La serie YOLO se ha convertido en el marco más popular para la detección de objetos en tiempo real debido a su razonable equilibrio entre velocidad y precisión. Sin embargo, observamos que la velocidad y precisión de YOLOs se ven negativamente afectadas por el NMS. Recientemente, los detectores basados en transformadores de extremo a extremo (DETRs) han proporcionado una alternativa para eliminar el NMS. No obstante, el alto costo computacional limita su practicidad e impide que aprovechen completamente la ventaja de excluir NMS. En este artículo, proponemos el Real-Time DEtection TRansformer (RT-DETR), el primer detector de objetos en tiempo real de extremo a extremo que, según nuestro conocimiento, resuelve el dilema anterior. Construimos RT-DETR en dos pasos, basándonos en el avanzado DETR: primero nos enfocamos en mantener la precisión mientras mejoramos la velocidad y, posteriormente, en mantener la velocidad mientras mejoramos la precisión. Diseñamos un codificador híbrido eficiente para procesar rápidamente características a múltiples escalas al desacoplar la interacción intra-escala y la fusión entre escalas para mejorar la velocidad. Luego, proponemos la selección de consultas con mínima incertidumbre para proporcionar consultas iniciales de alta calidad al decodificador, mejorando así la precisión. Además, RT-DETR admite ajustes de velocidad flexibles ajustando el número de capas del decodificador para adaptarse a varios escenarios sin necesidad de reentrenamiento. Nuestro RT-DETR-R50 / R101 logra un 53.1% / 54.3% AP en COCO y 108 / 74 FPS en GPU T4, superando a los YOLOs avanzados anteriores tanto en velocidad como en precisión. También desarrollamos RT-DETRs escalados que superan a los detectores YOLO más ligeros (modelos S y M). Además, RT-DETR-R50 supera al DINO-R50 en un 2.2% AP en precisión y alrededor de 21 veces en FPS. Después de pre-entrenarse con Objects365, RT-DETR-R50 / R101 alcanza un 55.3% / 56.2% AP.
Como usar
Usa el siguiente código para comenzar con el modelo.
import torch
import requests
from PIL import Image
from transformers import RTDetrForObjectDetection, RTDetrImageProcessor
url = 'http://images.cocodataset.org/val2017/000000039769.jpg'
image = Image.open(requests.get(url, stream=True).raw)
image_processor = RTDetrImageProcessor.from_pretrained("PekingU/rtdetr_r18vd")
model = RTDetrForObjectDetection.from_pretrained("PekingU/rtdetr_r18vd")
inputs = image_processor(images=image, return_tensors="pt")
with torch.no_grad():
outputs = model(**inputs)
results = image_processor.post_process_object_detection(outputs, target_sizes=torch.tensor([image.size[::-1]]), threshold=0.3)
for result in results:
for score, label_id, box in zip(result["scores"], result["labels"], result["boxes"]):
score, label = score.item(), label_id.item()
box = [round(i, 2) for i in box.tolist()]
print(f"{model.config.id2label[label]}: {score:.2f} {box}")
Esto debería generar:
sofa: 0.97 [0.14, 0.38, 640.13, 476.21]
gato: 0.96 [343.38, 24.28, 640.14, 371.5]
gato: 0.96 [13.23, 54.18, 318.98, 472.22]
control remoto: 0.95 [40.11, 73.44, 175.96, 118.48]
control remoto: 0.92 [333.73, 76.58, 369.97, 186.99]
Funcionalidades
- Codificador híbrido eficiente que mejora la velocidad
- Selección de consultas con mínima incertidumbre que mejora la precisión
- Soporte para ajustes de velocidad flexible sin reentrenamiento
- Supera a modelos YOLO S y M en velocidad y precisión
- Pre-entrenamiento en Objects365 que mejora el rendimiento
Casos de uso
- Detección de objetos en imágenes en tiempo real
- Aplicaciones de vigilancia y seguridad
- Automatización de vehículos autónomos
- Análisis de imágenes médicas
- Aplicaciones de retail y conteo de personas