Todos los artículos

RT-DETR sin Ultralytics: RT-DETR, v2 y v4 con licencia Apache-2.0

Xuban

RT-DETR es un transformer de detección en tiempo real de Baidu. Decodifica un conjunto fijo de consultas en lugar de una cuadrícula densa, así que no hay que ajustar ningún paso de NMS. Si lo buscas, una de las primeras implementaciones que encontrarás está dentro del paquete de Python ultralytics. Esto plantea una cuestión de licencia que el modelo en sí nunca tuvo.

La licencia de RT-DETR depende del repositorio

La licencia corresponde a un repositorio, no a un modelo. RT-DETR tiene varios repositorios y sus licencias no coinciden:

RepositorioIncluyeLicencia
lyuwenyu/RT-DETRRT-DETR y RT-DETRv2, PyTorch y PaddleApache-2.0
RT-DETRs/RT-DETRv4RT-DETRv4Apache-2.0
ultralytics/ultralyticsRT-DETR dentro del paquete ultralyticsAGPL-3.0 o licencia Enterprise
LibreYOLORT-DETR, RT-DETRv2 y RT-DETRv4Código MIT, pesos Apache-2.0

La implementación de Ultralytics es sólida. Su página de RT-DETR incluye los modelos preentrenados rtdetr-l.pt y rtdetr-x.pt, con entrenamiento, validación, inferencia y exportación. Se distribuye dentro de un paquete con licencia AGPL-3.0, y Ultralytics vende una licencia Enterprise para los equipos que no quieren publicar el código fuente de todo su proyecto. Si ninguna opción te sirve, sus propios autores ofrecen la arquitectura con licencia Apache-2.0. La explicación de las licencias de YOLO cubre el mismo patrón en toda la familia YOLO, y la guía de licencias comerciales explica qué implica AGPL-3.0 para un producto de código cerrado.

Ejecuta RT-DETR con LibreYOLO

pip install libreyolo
from libreyolo import LibreYOLO, SAMPLE_IMAGE

model = LibreYOLO("LibreRTDETRr18.pt")  # downloads from Hugging Face on first use
result = model(SAMPLE_IMAGE, save=True)

for box in result.boxes:
    print(box.cls, box.conf, box.xyxy)

La misma llamada funciona desde la línea de comandos:

libreyolo predict model=LibreRTDETRr18.pt source=image.jpg save=True

conf y max_det filtran una decodificación top-k sobre consultas y clases. Se acepta iou, pero no se usa porque no hay NMS. El objeto Results que se devuelve es el que retorna cada modelo de LibreYOLO, así que cambiar de detector requiere modificar una sola línea.

RT-DETR, RT-DETRv2 y RT-DETRv4 en un solo cargador

La versión forma parte del nombre del archivo y LibreYOLO() selecciona el modelo a partir del checkpoint, así que las tres versiones se cargan de la misma forma:

  • RT-DETR: LibreRTDETR en r18, r34, r50, r50m y r101 (backbones ResNet), y en l y x (HGNetv2).
  • RT-DETRv2: LibreRTDETRv2 en r18, r34, r50, r50m y r101. Mantiene la arquitectura de la versión 1 y cambia cómo se muestrea la atención deformable.
  • RT-DETRv4: LibreRTDETRv4 en s, m, l y x. Reutiliza la arquitectura de D-FINE, y sus pesos se obtienen destilando un teacher DINOv3 en un student HGNetv2.

Todos los pesos de detección se entrenan con COCO y funcionan a 640 px. Como referencia, los README de los proyectos originales indican 46.5 AP para RT-DETR-R18 y 53.0 AP para RT-DETR-L en COCO, y de 49.8 AP para RT-DETRv4-S a 57.0 AP para RT-DETRv4-X. La página de documentación de RT-DETR incluye la tabla de benchmarks de LibreYOLO para cada checkpoint.

RT-DETRv2 también admite cajas orientadas. LibreRTDETRv2n-obb.pt hasta LibreRTDETRv2x-obb.pt son los checkpoints oficiales de DOTA v1.0, con 15 clases aéreas a 1024 px, convertidos al formato de LibreYOLO:

from libreyolo import LibreYOLO

model = LibreYOLO("LibreRTDETRv2n-obb.pt")
result = model("aerial.png", save=True)
print(result.obb.xywhr)  # (N, 5): cx, cy, w, h, radians

La detección orientada explica el formato de etiquetas y las métricas.

Haz fine-tuning de RT-DETR con tus propios datos

El entrenamiento parte de un checkpoint publicado:

from libreyolo import LibreYOLO

model = LibreYOLO("LibreRTDETRr18.pt")
model.train(data="coco128.yaml", epochs=50, batch=4, lr0=1e-4)

Para una ejecución real, indica en data el YAML de tu propio dataset. Cada versión tiene su propio learning rate predeterminado, y las versiones 1 y 2 fijan el learning rate del backbone en una vigésima parte de lr0, siguiendo la receta original. En la CLI se configura Multi-GPU con device=0,1, y el fine-tuning de adaptadores LoRA se activa con lora=True, tras instalar el extra lora. Los modelos de cajas orientadas de RT-DETRv2 solo permiten inferencia. Consulta entrenamiento para obtener información sobre datasets, aumento de datos y loggers.

Validación y exportación

metrics = model.val(data="coco128.yaml")
print(metrics["metrics/mAP50-95"])

path = model.export(format="onnx")  # needs: pip install "libreyolo[onnx]"

val() devuelve un diccionario simple. Los formatos de exportación incluyen ONNX, TorchScript, ExecuTorch, TensorRT y OpenVINO; la matriz de exportación de la página del modelo muestra cuáles se han validado para cada tarea. Un archivo .onnx o .engine exportado se carga de nuevo con LibreYOLO() y devuelve el mismo objeto Results. Consulta exportación para ver las guías de cada formato.

Cuándo conviene seguir usando los repositorios originales

Si necesitas reproducir un resultado de un artículo con las configuraciones exactas de sus autores, quieres la versión de Paddle o quieres ejecutar por tu cuenta la destilación del teacher DINOv3 de RT-DETRv4, usa los repositorios originales. LibreYOLO hace fine-tuning del student v4 publicado, no ejecuta el teacher. Y si tu proyecto ya tiene licencia AGPL-3.0 o está cubierto por una licencia Enterprise de Ultralytics, no hay ningún motivo relacionado con la licencia para cambiar.

Una nota sobre la licencia

El código de LibreYOLO tiene licencia MIT. Todos los archivos de pesos de RT-DETR tienen licencia Apache-2.0, y cada repositorio de pesos de Hugging Face incluye el LICENSE y el NOTICE originales, que Apache-2.0 exige conservar al redistribuir los pesos. Los pesos que entrenes con tus propios datos son tuyos. RT-DETRv4 usa DINOv3 solo como teacher durante el entrenamiento, y los modelos student publicados no contienen parámetros de DINOv3. Esto es información general, no asesoramiento legal. Comprueba los archivos LICENSE vigentes antes de distribuir.

Pruébalo

pip install libreyolo
from libreyolo import LibreYOLO

model = LibreYOLO("LibreRTDETRv4s.pt")
result = model("image.jpg", save=True)
print(result.boxes.xyxy)

LibreYOLO tiene licencia MIT, funciona en Linux, Mac y Windows, y se ejecuta en GPU, Apple Silicon y CPU sin cambiar el código.

GitHub | Documentación de RT-DETR