RT-DETR de Baidu: un detector de objetos en tiempo real basado en Transformer de visión#
Descripción general#
El Transformer de detección en tiempo real (RT-DETR), desarrollado por Baidu, es un detector de objetos de extremo a extremo de última generación que ofrece rendimiento en tiempo real y mantiene una precisión elevada. Se basa en la idea de DETR (el marco sin NMS) y, al mismo tiempo, incorpora un backbone basado en convoluciones y un codificador híbrido eficiente para lograr velocidad en tiempo real. RT-DETR procesa eficazmente características multiescala al desacoplar la interacción intr escala y la fusión entre escalas. El modelo es muy adaptable y permite ajustar de forma flexible la velocidad de inferencia mediante distintas capas del decodificador, sin necesidad de volver a entrenarlo. RT-DETR destaca en backends acelerados como CUDA con TensorRT y supera a muchos otros detectores de objetos en tiempo real.
Ver: Cómo usar RT-DETR de Baidu para detectar objetos | Inferencia y comparación del rendimiento con Ultralytics 🚀
Descripción general de RT-DETR de Baidu. El diagrama de la arquitectura del modelo RT-DETR muestra las tres últimas etapas del backbone {S3, S4, S5} como entrada del codificador. El codificador híbrido eficiente transforma las características multiescala en una secuencia de características de imagen mediante la interacción de características intr escala (AIFI) y el módulo de fusión de características entre escalas (CCFM). La selección de consultas basada en IoU se utiliza para seleccionar un número fijo de características de imagen que servirán como consultas iniciales de objetos para el decodificador. Por último, el decodificador, con cabezales de predicción auxiliares, optimiza iterativamente las consultas de objetos para generar cajas y puntuaciones de confianza (fuente).
Características principales#
- Codificador híbrido eficiente: RT-DETR de Baidu utiliza un codificador híbrido eficiente que procesa características multiescala al desacoplar la interacción intr escala y la fusión entre escalas. Este diseño exclusivo basado en Transformers de visión reduce los costes computacionales y permite la detección de objetos en tiempo real.
- Selección de consultas basada en IoU: RT-DETR de Baidu mejora la inicialización de las consultas de objetos mediante la selección de consultas basada en IoU. Esto permite al modelo centrarse en los objetos más relevantes de la escena y mejorar la precisión de la detección.
- Velocidad de inferencia adaptable: RT-DETR de Baidu permite ajustar de forma flexible la velocidad de inferencia utilizando distintas capas del decodificador, sin necesidad de volver a entrenarlo. Esta adaptabilidad facilita su aplicación práctica en diversos escenarios de detección de objetos en tiempo real.
- Marco sin NMS: Basado en DETR, RT-DETR elimina la necesidad del posprocesamiento de supresión no máxima, lo que simplifica el flujo de detección y puede mejorar la eficiencia.
- Detección sin anclajes: Como detector sin anclajes, RT-DETR simplifica el proceso de detección y puede mejorar la generalización entre distintos conjuntos de datos.
Modelos preentrenados#
La API Python de Ultralytics ofrece modelos RT-DETR de PaddlePaddle preentrenados con distintas escalas:
- RT-DETR-L: 53,0 % AP en COCO val2017, 114 FPS en GPU T4
- RT-DETR-X: 54,8 % AP en COCO val2017, 74 FPS en GPU T4
Además, Baidu publicó RTDETRv2 en julio de 2024, que mejora aún más la arquitectura original con métricas de rendimiento superiores.
Ejemplos de uso#
Este ejemplo incluye ejemplos sencillos de entrenamiento e inferencia de RT-DETR. Para consultar la documentación completa sobre estos modos y otros modos, visita las páginas de documentación de Predicción, Entrenamiento, Validación y Exportación. También puedes entrenar modelos en GPU en la nube a través de Ultralytics Platform.
from ultralytics import RTDETR
# Carga un modelo RT-DETR-l preentrenado con COCO
model = RTDETR("rtdetr-l.pt")
# Mostrar información del modelo (opcional)
model.info()
# Entrena el modelo durante 100 épocas con el conjunto de datos de ejemplo COCO8
results = model.train(data="coco8.yaml", epochs=100, imgsz=640)
# Ejecuta la inferencia con el modelo RT-DETR-l en la imagen «bus.jpg»
results = model("path/to/bus.jpg")Establece deterministic=False al entrenar RT-DETR con CUDA y PyTorch 2.0 o posterior. Su atención deformable utiliza F.grid_sample, que no dispone de retropropagación CUDA determinista, por lo que deterministic=True no puede hacer que la ejecución sea reproducible y puede reducir el rendimiento del entrenamiento. seed sigue controlando la inicialización de los pesos, el orden de los datos y el muestreo de aumentos.
Los pesos preentrenados de RT-DETR admiten dos ajustes en tiempo de inferencia para reducir la latencia sin volver a entrenar:
eval_idx: Detén antes la decodificación. Para el decodificador predeterminado de 6 capas, utiliza un índice basado en cero (0–5).eval_idx=5utiliza todas las capas;eval_idx=3utiliza 4 capas. En una GPU T4 con TensorRT v10.11, RT-DETR-L mejora de 8,0 ms / 52,7 mAP a 7,4 ms / 52,5 mAP con 4 capas.num_queries: Reduce las consultas de objetos (valor predeterminado: 300). Si lo reduces a 100, puedes alcanzar 7,4 ms / 51,7 mAP en COCO con la misma configuración. En conjuntos de datos con menos objetos por imagen, la caída de mAP suele ser menor, pero mantén el valor por encima del número máximo previsto de objetos por imagen.
Ambos ajustes pueden reducir mAP; valida el equilibrio en tu conjunto de datos antes de la implementación.
from ultralytics import RTDETR
rtdetr = RTDETR("rtdetr-l.pt")
head = rtdetr.model.model[-1]
# Elige uno o ambos ajustes tras validar el equilibrio entre velocidad y precisión.
head.decoder.eval_idx = 3 # Utiliza 4 de las 6 capas del decodificador.
head.num_queries = 100 # Utiliza menos consultas de objetos.
results = rtdetr("path/to/image.jpg")
# La exportación utiliza los mismos ajustes del decodificador y de las consultas, incluidas las exportaciones a TensorRT.
rtdetr.export(format="engine", device=0, quantize=16)Tareas y modos compatibles#
Esta tabla presenta los tipos de modelo, los pesos preentrenados específicos, las tareas compatibles con cada modelo y los distintos modos compatibles (Entrenamiento, Validación, Predicción, Exportación), indicados con emojis ✅.
| Tipo de modelo | Pesos preentrenados | Tareas compatibles | Entrenamiento | Validación | Inferencia | Exportar |
|---|---|---|---|---|---|---|
| RT-DETR grande | rtdetr-l.pt | Detección de objetos | ✅ | ✅ | ✅ | ✅ |
| RT-DETR extragrande | rtdetr-x.pt | Detección de objetos | ✅ | ✅ | ✅ | ✅ |
rtdetr-resnet50.yaml y rtdetr-resnet101.yaml se distribuyen únicamente como arquitecturas YAML. Ultralytics solo publica pesos preentrenados para rtdetr-l y rtdetr-x. Crea instancias de las variantes ResNet a partir de YAML (por ejemplo, RTDETR("rtdetr-resnet50.yaml")) y entrénalas o ajústalas según sea necesario.
Casos de uso ideales#
RT-DETR es especialmente adecuado para aplicaciones que requieren tanto una gran precisión como rendimiento en tiempo real:
- Conducción autónoma: Para una percepción fiable del entorno en sistemas de conducción autónoma, donde tanto la velocidad como la precisión son fundamentales. Más información sobre la IA en los coches autónomos.
- Robótica avanzada: Permite que los robots realicen tareas complejas que requieren un reconocimiento preciso de objetos e interacción en entornos dinámicos. Descubre el papel de la IA en la robótica.
- Diagnóstico por imagen: Para aplicaciones sanitarias en las que la precisión de la detección de objetos puede ser fundamental para el diagnóstico. Descubre la IA en la sanidad.
- Sistemas de vigilancia: Para aplicaciones de seguridad que requieren supervisión en tiempo real con una gran precisión de detección. Más información sobre los sistemas de alarma de seguridad.
- Análisis de imágenes satelitales: Para analizar en detalle imágenes de alta resolución en las que es importante comprender el contexto global. Lee sobre la visión artificial aplicada a imágenes satelitales.
Citas y agradecimientos#
Si utilizas RT-DETR de Baidu en tu trabajo de investigación o desarrollo, cita el artículo original:
@misc{lv2023detrs,
title={DETRs Beat YOLOs on Real-time Object Detection},
author={Wenyu Lv and Shangliang Xu and Yian Zhao and Guanzhong Wang and Jinman Wei and Cheng Cui and Yuning Du and Qingqing Dang and Yi Liu},
year={2023},
eprint={2304.08069},
archivePrefix={arXiv},
primaryClass={cs.CV}
}Para RTDETRv2, puedes citar el artículo de 2024:
@misc{lv2024rtdetrv2,
title={RTDETRv2: All-in-One Detection Transformer Beats YOLO and DINO},
author={Wenyu Lv and Yian Zhao and Qinyao Chang and Kui Huang and Guanzhong Wang and Yi Liu},
year={2024},
eprint={2407.17140},
archivePrefix={arXiv},
primaryClass={cs.CV}
}Queremos agradecer a Baidu y al equipo de PaddlePaddle la creación y el mantenimiento de este valioso recurso para la comunidad de visión artificial. Agradecemos enormemente su contribución al campo con el desarrollo del detector de objetos en tiempo real basado en Transformers de visión, RT-DETR.
Preguntas frecuentes#
RT-DETR (Transformer de detección en tiempo real) de Baidu es un detector de objetos avanzado en tiempo real basado en la arquitectura Transformer de visión. Procesa eficazmente características multiescala al desacoplar la interacción intr escala y la fusión entre escalas mediante su codificador híbrido eficiente. Al utilizar la selección de consultas basada en IoU, el modelo se centra en los objetos más relevantes y mejora la precisión de la detección. Su velocidad de inferencia adaptable, que se consigue ajustando las capas del decodificador sin volver a entrenar, hace que RT-DETR sea adecuado para diversos escenarios de detección de objetos en tiempo real. Descubre más sobre las funciones de RT-DETR en el artículo de RT-DETR en arXiv.
Puedes aprovechar la API Python de Ultralytics para utilizar modelos RT-DETR de PaddlePaddle preentrenados. Por ejemplo, para cargar un modelo RT-DETR-l preentrenado con COCO val2017 y alcanzar un FPS alto en una GPU T4, puedes utilizar el siguiente ejemplo:
Ejemplofrom ultralytics import RTDETR # Carga un modelo RT-DETR-l preentrenado con COCO model = RTDETR("rtdetr-l.pt") # Mostrar información del modelo (opcional) model.info() # Entrena el modelo durante 100 épocas con el conjunto de datos de ejemplo COCO8 results = model.train(data="coco8.yaml", epochs=100, imgsz=640) # Ejecuta la inferencia con el modelo RT-DETR-l en la imagen «bus.jpg» results = model("path/to/bus.jpg")RT-DETR de Baidu destaca por su codificador híbrido eficiente y la selección de consultas basada en IoU, que reducen drásticamente los costes computacionales sin dejar de ofrecer una gran precisión. Su capacidad exclusiva para ajustar la velocidad de inferencia mediante distintas capas del decodificador, sin volver a entrenar, aporta una gran flexibilidad. Esto lo hace especialmente ventajoso para aplicaciones que requieren rendimiento en tiempo real en backends acelerados como CUDA con TensorRT, donde supera a muchos otros detectores de objetos en tiempo real. La arquitectura Transformer también proporciona una mejor comprensión del contexto global que los detectores tradicionales basados en CNN.
RT-DETR de Baidu permite ajustar de forma flexible la velocidad de inferencia mediante el uso de distintas capas del decodificador, sin necesidad de volver a entrenar. Esta adaptabilidad es fundamental para escalar el rendimiento en diversas tareas de detección de objetos en tiempo real. Tanto si necesitas un procesamiento más rápido cuando los requisitos de precisión son menores como si prefieres detecciones más lentas y precisas, puedes adaptar RT-DETR a tus necesidades concretas. Esta función resulta especialmente útil al implementar modelos en dispositivos con distintas capacidades computacionales.
No. En RT-DETR,
max_detlimita el número de predicciones que se devuelven tras la inferencia, pero no aumenta el número de consultas de objetos que genera el decodificador. Los puntos de control preentrenados de RT-DETR de Ultralytics utilizan 300 consultas de objetos, por lo que no pueden devolver más de 300 detecciones por imagen, aunque establezcasmax_deten un valor superior.Utiliza
max_detpara reducir las detecciones devueltas, por ejemplo,max_det=100, cuando solo necesites menos predicciones con alta confianza. Si tu conjunto de datos puede contener más de 300 objetos por imagen, entrena un modelo RT-DETR personalizado con un número mayor de consultas del decodificador (nq) en el YAML del modelo; cambiar este valor en un punto de control preentrenado después del entrenamiento no es equivalente y requiere volver a entrenar para que el modelo aprenda las consultas adicionales.Sí, los modelos RT-DETR son compatibles con varios modos de Ultralytics, como el entrenamiento, la validación, la predicción y la exportación. Consulta la documentación correspondiente para obtener instrucciones detalladas sobre cómo utilizar estos modos: Entrenamiento, Validación, Predicción y Exportación. Así dispondrás de un flujo de trabajo completo para desarrollar e implementar tus soluciones de detección de objetos. El framework de Ultralytics ofrece una API coherente para distintas arquitecturas de modelos, lo que facilita trabajar con modelos RT-DETR.