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 equilibrio razonable entre velocidad y precisión. Sin embargo, observamos que la velocidad y la precisión de los YOLOs se ven negativamente afectadas por el NMS. Recientemente, los detectores basados en Transformer 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 plenamente la ventaja de excluir el NMS. En este documento, proponemos el Transformador de Detección en Tiempo Real (RT-DETR), el primer detector de objetos en tiempo real de extremo a extremo, según nuestro conocimiento, que aborda este dilema. Construimos RT-DETR en dos pasos, basándonos en el avanzado DETR: primero nos centramos en mantener la precisión mientras mejoramos la velocidad, y luego en mantener la velocidad mientras mejoramos la precisión. Específicamente, diseñamos un codificador híbrido eficiente para procesar rápidamente características de 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 incertidumbre mínima para proporcionar consultas iniciales de alta calidad al decodificador, mejorando así la precisión. Además, RT-DETR admite ajustes de velocidad flexibles al ajustar 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 una GPU T4, superando a los YOLOs avanzados en velocidad y 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 a DINO-R50 en un 2.2% AP en precisión y aproximadamente 21 veces en FPS. Después de pre-entrenar con Objects365, RT-DETR-R50 / R101 logra un 55.3% / 56.2% AP.
Como usar
Para comenzar a usar el modelo, utilice el siguiente código: ```python
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_r34vd')
model = RTDetrForObjectDetection.from_pretrained('PekingU/rtdetr_r34vd')
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}')```
Funcionalidades
- Detección de objetos en tiempo real
- Eliminación de NMS
- Codificador híbrido eficiente
- Selección de consultas con incertidumbre mínima
- Ajustes de velocidad flexibles
- Precisión y velocidad mejoradas
- Pre-entrenamiento en Objects365
Casos de uso
- Detección de objetos en tiempo real
- Aplicaciones que requieren un equilibrio entre velocidad y precisión
- Escenarios con restricciones computacionales
- Sistemas de visión por computadora
- Sistema de vigilancia y seguridad
- Detección en videos en tiempo real