RT-DETR

Un transformer de detección hecho para inferencia en tiempo real: decodifica un conjunto fijo de queries en vez de una rejilla densa, así que no ejecuta NMS. LibreYOLO incluye tres versiones, distinguidas por el checkpoint que cargas, y la versión 2 sirve además cajas orientadas.

Tareas
detection, oriented boxes
Tamaños
rtdetr: r18, r34, r50, r50m, r101, l, x at 640 px; rtdetrv2: r18, r34, r50, r50m, r101 at 640 px; rtdetrv4: s, m, l, x at 640 px
Instalación
pip install libreyolo
Nivel de compatibilidad
Núcleo, desde v1.1.0. Detectores entrenables del núcleo: las funciones siguen a los modelos emblemáticos en la misma oleada de versiones.
Proyecto original
RT-DETR, RT-DETRv2 and RT-DETRv4 de Baidu (versions 1 and 2), Peking University and Tsinghua University (version 4), Apache-2.0. Artículo, fuente
Licencias
Código Apache-2.0, pesos Apache-2.0. Uso comercial

Instalación

RT-DETR no necesita ningún extra opcional. Todo lo que importa está en la instalación base, y el extra rtdetr es un nombre estable que no le añade nada.

bash
pip install libreyolo

El fine-tuning con adaptadores mediante lora=True es la excepción, y necesita el extra lora.

bash
pip install "libreyolo[lora]"

Predicción

Los pesos se descargan de Hugging Face en el primer uso y se guardan en la caché local.

Python
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreRTDETRr18.pt")result = model(SAMPLE_IMAGE, save=True) for box in result.boxes:    print(box.cls, box.conf, box.xyxy)
CLI
libreyolo predict model=LibreRTDETRr18.pt save=True \  source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg
Vídeo
from libreyolo import LibreYOLO # La versión forma parte del nombre del archivo, y la factoría enruta# según el checkpoint, así que las tres se cargan igual.model = LibreYOLO("LibreRTDETRv4s.pt") # Cualquier fuente que acepta la biblioteca: archivo, carpeta, URL,# índice de webcam, stream RTSP o una lista .streamsfor result in model.predict("clip.mp4", stream=True, save=True):    print(len(result.boxes))
Cajas orientadas
from libreyolo import LibreYOLO # Solo en la versión 2. El sufijo -obb selecciona la tarea, y el# checkpoint se reconoce como orientado a partir de sus propios# tensores, así que no hace falta el argumento task. Estos pesos son# DOTA v1.0, 15 clases aéreas a 1024 px.model = LibreYOLO("LibreRTDETRv2n-obb.pt")result = model("aerial.png", save=True) obb = result.obbprint(obb.xywhr)     # (N, 5): cx, cy, w, h, radianesprint(obb.xyxyxyxy)  # las mismas filas como cuatro esquinasprint(result.boxes.xyxy)  # cajas alineadas con los ejes que las encierran
Cajas orientadas, CLI
libreyolo predict model=LibreRTDETRv2n-obb.pt source=aerial.png save=True

El objeto Results devuelto es el mismo que devuelven todas las familias, así que cambiar a otro detector es un cambio de una línea. conf y max_det filtran un decodificado top-k sobre queries y clases; no hay un paso de NMS que ajustar, e iou se acepta pero no se usa. Un checkpoint orientado rellena result.obb de forma nativa y rellena también result.boxes con los rectángulos alineados con los ejes que los encierran. Consulta predicción para fuentes, streaming y manejo de resultados.

Variantes

Tres versiones, dos tareas entre ellas, y los códigos de tamaño no siguen una única serie. La versión 1 nombra sus tamaños según el backbone, ResNet o HGNetv2. La versión 2 reutiliza solo los nombres de ResNet: la versión 1 ya publica los dos tamaños HGNetv2, y los resultados de la versión 2 ahí quedaron lo bastante cerca como para que LibreYOLO no publique pesos duplicados para ellos. La versión 4 usa una serie de letras a secas, que choca con los nombres HGNetv2 de la versión 1, así que un código de tamaño por sí solo no identifica un modelo. La versión va escrita en el nombre del archivo del checkpoint.

CheckpointEntrada (px)mAP 50-95Parámetros (M)
LibreRTDETRl64055.832.93
LibreRTDETRr10164056.876.56
LibreRTDETRr1864049.720.18
LibreRTDETRr3464052.231.44
LibreRTDETRr5064055.942.89
LibreRTDETRr50m64053.836.59
LibreRTDETRx64057.967.37
LibreRTDETRv2r10164056.876.56
LibreRTDETRv2r1864050.820.18
LibreRTDETRv2r3464053.231.44
LibreRTDETRv2r5064055.742.89
LibreRTDETRv2r50m64054.836.59
LibreRTDETRv4l64057.831.24
LibreRTDETRv4m64056.519.59
LibreRTDETRv4s64052.810.32
LibreRTDETRv4x64060.062.62

COCO val2017, 500 images. Medido con el sistema de benchmarks de LibreYOLO y publicado en Vision Analysis, donde se comparan la latencia entre distintos hardwares y runtimes y se conservan los registros completos de las ejecuciones.

La versión 2 mantiene la arquitectura y la disposición del state dict de la versión 1 y cambia cómo muestrea la atención deformable, y por eso las dos se distinguen por los metadatos del checkpoint y no por la forma. La versión 4 es un linaje distinto: reutiliza la arquitectura y el trainer de D-FINE, y sus pesos vienen de destilar un modelo fundacional de visión DINOv3 como profesor en un estudiante HGNetv2. En LibreYOLO LibreRTDETRv4 es una subclase de LibreDFINE con la cabeza de máscaras desactivada de forma fija, así que se queda solo en detección.

Cajas orientadas en la versión 2

La versión 2 es la única versión que lleva una segunda tarea. Sus tareas soportadas son detect y obb, y las dos no comparten ni grafo ni serie de tamaños. La detección usa los tamaños ResNet a 640 px; la detección orientada usa una serie HGNetv2, n, s, m, l y x, a 1024 px, y el tamaño de entrada se resuelve por tarea y no por familia. Un checkpoint se reconoce como orientado a partir de sus propios tensores, por las cabezas de caja de cinco coordenadas y los parámetros de muestreo de la versión 2, así que los pesos -obb se cargan en el grafo orientado sin argumento task, y un desajuste entre ambos es un error duro en lugar de una reinterpretación silenciosa.

Los archivos publicados van de LibreRTDETRv2n-obb.pt a LibreRTDETRv2x-obb.pt. Son los checkpoints oficiales de DOTA v1.0 a escala única convertidos al formato de LibreYOLO, 15 clases aéreas que van de avión y barco a puerto y helicóptero, y sus nombres de clase están grabados en el checkpoint. A diferencia del lado de detección, la tarea orientada es solo de inferencia: la predicción, la validación y la exportación funcionan, y train() sobre un modelo orientado lanza un error. El tracking y el aumento de datos en test (data augmentation) tampoco soportan cajas orientadas. Detección orientada cubre la tarea, el formato de etiquetas y las métricas.

Entrenamiento

El entrenamiento parte de un checkpoint publicado. pretrained se acepta y luego se descarta en las tres versiones, así que pretrained=False no te da un modelo inicializado al azar. Todo lo de esta sección va de detección: la tarea orientada de la versión 2 es solo de inferencia, y no hay ninguna vía de transferencia desde pesos de detección hacia ella, porque las dos usan backbones distintos.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreRTDETRr18.pt") # coco128.yaml descarga una muestra de 128 imágenes en el primer uso.# Apunta `data` al YAML de tu propio dataset para una ejecución real.model.train(data="coco128.yaml", epochs=50, batch=4, lr0=1e-4)
CLI
libreyolo train model=LibreRTDETRr18.pt data=coco128.yaml \  epochs=50 batch=4 lr0=1e-4
LoRA
# Necesita el extra lora: pip install "libreyolo[lora]"from libreyolo import LibreYOLO model = LibreYOLO("LibreRTDETRr18.pt")model.train(data="coco128.yaml", epochs=50, lora=True)
Multi-GPU
libreyolo train model=LibreRTDETRr18.pt data=coco128.yaml \  epochs=50 device=0,1

El learning rate es el argumento que hay que acertar, y cada versión lleva el suyo por defecto en lugar del de toda la biblioteca. La firma de train() en Python lo lee de la configuración de entrenamiento de esa versión, y el CLI resuelve el mismo valor cuando no se pasa lr0. Las versiones 1 y 2 aceptan además lr_backbone y lo fijan por defecto a una veinteava parte de lr0, siguiendo la receta original; la versión 4 corre a través del trainer de D-FINE, que en su lugar escala el grupo de parámetros del backbone con backbone_lr_mult.

Deja imgsz en el tamaño nativo del checkpoint salvo que tengas un motivo para cambiarlo. La validación y la predicción a otros tamaños funcionan, con un residuo: un tamaño rectangular cuyo número de tokens coincide con el del tamaño nativo sigue reutilizando un embedding construido para una relación de aspecto equivocada.

Consulta entrenamiento para datasets, aumento de datos (data augmentation), multi-GPU y loggers.

RT-DETRv4 activa amp=True con amp_dtype="float16" por defecto. Pasa amp=False para usar FP32.

Validación

val() devuelve un diccionario de claves metrics/ que cubren precisión, recall, mAP 50 y mAP 50-95, medidas contra cualquier dataset en el formato con el que entrenaste.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreRTDETRr18.pt") # val() devuelve un dict plano, no un objetometrics = model.val(data="coco128.yaml") print(metrics["metrics/mAP50-95"])print(metrics["metrics/mAP50"])print(metrics["metrics/precision"], metrics["metrics/recall"])
CLI
libreyolo val model=LibreRTDETRr18.pt data=coco128.yaml
Contra COCO
# coco-val-only.yaml descarga las 5000 imágenes de val2017 y se salta# el conjunto de entrenamiento. Lleva un script de descarga embebido,# así que necesita permiso explícito salvo que el dataset ya esté en# local.libreyolo val model=LibreRTDETRr18.pt data=coco-val-only.yaml \  allow_download_scripts=True
Cajas orientadas
from libreyolo import LibreYOLO # La validación orientada empareja con IoU rotado, así que una# predicción en el sitio correcto con el ángulo equivocado cuenta como# un fallo.model = LibreYOLO("LibreRTDETRv2n-obb.pt")metrics = model.val(data="my-obb-dataset.yaml") print(metrics["metrics/mAP50-95(OBB)"])print(metrics["metrics/mAP50(OBB)"])

Las filas de la tabla de benchmarks de arriba salen del arnés de benchmarks de LibreYOLO; la nota bajo esa tabla indica qué dataset las produjo y enlaza los registros de las ejecuciones.

La validación orientada corre a través de la misma llamada y reporta las mismas claves, más cuatro repetidas bajo un sufijo (OBB). El emparejamiento usa IoU rotado en lugar del IoU de los rectángulos que las encierran, así que un error de ángulo es un fallo. augment=True se rechaza en esta tarea.

Exportación

TareaONNXTorchScriptExecuTorchTensorRTOpenVINOPaddleMNNRKNNncnnTFLiteCoreMLCore AI
DetectionDetection to ONNX: compatibleDetection to TorchScript: compatibleDetection to ExecuTorch: compatibleDetection to TensorRT: compatibleDetection to OpenVINO: compatibleDetection to Paddle: no compatibleDetection to MNN: compatibleDetection to RKNN: no compatibleDetection to ncnn: no compatibleDetection to TFLite: no compatibleDetection to CoreML: no compatibleDetection to Core AI: compatible
Oriented boxesOriented boxes to ONNX: compatibleOriented boxes to TorchScript: compatibleOriented boxes to ExecuTorch: compatibleOriented boxes to TensorRT: compatibleOriented boxes to OpenVINO: compatibleOriented boxes to Paddle: no compatibleOriented boxes to MNN: no compatibleOriented boxes to RKNN: no compatibleOriented boxes to ncnn: no compatibleOriented boxes to TFLite: no compatibleOriented boxes to CoreML: no compatibleOriented boxes to Core AI: no compatible

La matriz cubre todo el linaje en una sola página: donde las tres versiones no coinciden sobre un formato, la celda muestra la más débil de las tres, así que aquí nada queda sobrevendido para la versión que cargues. La fila de las orientadas pertenece solo a la versión 2. ONNX y TorchScript están validados ahí, a FP32, batch 1 y con un lienzo fijo de 1024 por 1024; OpenVINO, TensorRT y ExecuTorch convierten y recargan, pero no han alcanzado la paridad de salida cruda en todo el conjunto de queries, así que las cajas de arriba coinciden hasta una fracción de píxel mientras que la cola se desvía.

Un artefacto exportado se vuelve a cargar con LibreYOLO() según su sufijo de archivo, así que un archivo .onnx o .engine se comporta como un checkpoint y devuelve el mismo Results.

Python
# Necesita el extra onnx: pip install "libreyolo[onnx]"from libreyolo import LibreYOLO model = LibreYOLO("LibreRTDETRr18.pt")path = model.export(format="onnx")print(path)
CLI
libreyolo export model=LibreRTDETRr18.pt format=onnx
Cajas orientadas
# ONNX y TorchScript son los destinos validados para la tarea# orientada, a FP32, batch 1 y con un lienzo fijo de 1024 por 1024.libreyolo export model=LibreRTDETRv2n-obb.pt format=onnx imgsz=1024libreyolo export model=LibreRTDETRv2n-obb.pt format=torchscript imgsz=1024
Usar el archivo exportado
from libreyolo import LibreYOLO, SAMPLE_IMAGE # La factoría enruta según la extensión del archivo, así que un# artefacto exportado se carga como cualquier checkpoint y devuelve el# mismo objeto Results.model = LibreYOLO("LibreRTDETRr18.onnx")result = model(SAMPLE_IMAGE) print(result.boxes.xyxy)

Entradas y salidas ONNX

LibreRTDETR and LibreRTDETRv2

Tensorimages float32 [batch, 3, height, width]
ColorRGB
Escaladopíxel / 255
Normalizaciónninguna
Redimensionadoestirar a ancho x alto (sin relleno, no se conserva la relación de aspecto), bilinear

Square input only. Export rejects a non-square imgsz, and height equals width, 640 by default.

LibreRTDETR also exports at other square sizes, such as 512. LibreRTDETRv2 exports at 640 only: any other imgsz fails during export with a tensor size mismatch.

Stretch the whole image to width x height with cv2.resize and INTER_LINEAR on the 8-bit RGB image. There is no letterbox and no padding, so the aspect ratio is not kept.

Then divide by 255. There is no mean or std normalization.

Detection, exportación por defecto
SalidaFormaSignificado
pred_logits[batch, queries, nc]Raw class logits per query, sigmoid not applied. 300 queries and 80 classes for the COCO checkpoints.
pred_boxes[batch, queries, 4]Boxes as cx, cy, w, h, normalized 0 to 1 of the input.

Posprocesado

  1. Apply sigmoid to pred_logits.
  2. Flatten the scores to queries x nc and take the top max_det (300 by default) over all queries x classes. For flat index k, the query is k // nc and the class is k % nc. One query can yield several classes.
  3. Keep the entries whose score is strictly above the confidence threshold (0.25 by default). There is no NMS, so the IoU threshold is not used.
  4. Convert the query's box to x1, y1, x2, y2 with x1 = cx - w / 2, y1 = cy - h / 2, x2 = cx + w / 2, y2 = cy + h / 2.
  5. Map boxes back to the original image: multiply x by the original width and y by the original height. The input was stretched, so no pad offset applies. LibreYOLO does not clip these boxes.
  6. nms=True is not available for this family: export raises NotImplementedError.

LibreRTDETRv2 OBB

Tensorimages float32 [batch, 3, height, width]
ColorRGB
Escaladopíxel / 255
Normalizaciónninguna
Redimensionadocustom, Pillow bilinear
Cómo reproducir el redimensionado bilineal de Pillow

LibreYOLO redimensiona con el filtro BILINEAR de Pillow (Image.resize). No es OpenCV INTER_LINEAR ni INTER_AREA: al reducir, Pillow ensancha el filtro según el factor de reducción, y los redimensionados de OpenCV cambian las detecciones y desplazan las cajas varios píxeles. Para reproducirlo sin Pillow, redimensiona un eje, redondea a 8 bits, luego redimensiona el otro eje y vuelve a redondear. Por eje, sea s = in_size / out_size y f = max(s, 1). El píxel de salida i tiene centro c = (i + 0.5) * s y lee los píxeles de origen j desde int(c - f + 0.5) hasta int(c + f + 0.5) - 1, recortados a la imagen, cada uno con peso max(0, 1 - |j + 0.5 - c| / f), dividido por la suma de los pesos. Pillow trabaja en coma fija y elige el orden de los ejes según la forma de la imagen, así que los pesos en coma flotante pueden diferir en un nivel en unos pocos píxeles. Eso no cambia los resultados en nuestras comprobaciones.

Square input only, 1024 x 1024. Export rejects a non-square imgsz, and any other square size fails during export with a tensor size mismatch.

Scale by r = min(height / h, width / w) and resize to (round(w * r), round(h * r)). This rounds to the nearest integer instead of truncating. An exact half goes to the even integer, as Python round does.

Paste the resized image in the top-left corner of a canvas filled with 0. The padding is on the right and bottom only.

On the test image, cv2.resize with INTER_LINEAR or INTER_AREA changes the detection count and moves boxes by more than 2 px.

Pillow computes each pass in fixed point: it rounds every weight to an integer with 22 fractional bits (round half away from zero), sums weight x pixel in integers, adds 2^21, shifts right by 22 and clips to 0 to 255.

Use that integer arithmetic for this model. Float weights differ from Pillow by a level on a few pixels, and on the test image that turns one box by 0.2 rad.

Divide the whole canvas by 255 after the resize. There is no mean or std normalization.

Oriented boxes, exportación por defecto
SalidaFormaSignificado
pred_logits[batch, queries, nc]Raw class logits per query, sigmoid not applied. 300 queries and 15 DOTA classes for the released checkpoints.
pred_boxes[batch, queries, 5]Rotated boxes as cx, cy, w, h, a. cx and w are normalized 0 to 1 of the input width, cy and h of the input height, both on the padded canvas. a is the angle divided by pi, 0 to 1.

Posprocesado

  1. Apply sigmoid to pred_logits.
  2. Flatten the scores to queries x nc and take the top max_det (300 by default) over all queries x classes. For flat index k, the query is k // nc and the class is k % nc. One query can yield several classes.
  3. Keep the entries whose score is strictly above the confidence threshold (0.25 by default). There is no NMS, rotated or axis-aligned, so the IoU threshold is not used.
  4. Map boxes back to the original image: multiply cx and w by the input width, cy and h by the input height, then divide all four by r. The padding is on the right and bottom, so no offset applies. LibreYOLO does not clip these boxes.
  5. The angle in radians is a x pi. LibreYOLO reports each box as cx, cy, w, h, angle in original-image pixels and radians.
  6. The corners are (cx + dx cos(angle) - dy sin(angle), cy + dx sin(angle) + dy cos(angle)) for (dx, dy) = (-w / 2, -h / 2), (w / 2, -h / 2), (w / 2, h / 2), (-w / 2, h / 2). With y pointing down, a positive angle turns the box clockwise on screen.
  7. LibreYOLO's axis-aligned box for a detection is the smallest box that encloses its four corners.
  8. nms=True is not available for this family: export raises NotImplementedError.

LibreRTDETRv4

Tensorimages float32 [batch, 3, height, width]
ColorRGB
Escaladopíxel / 255
Normalizaciónninguna
Redimensionadoestirar a ancho x alto (sin relleno, no se conserva la relación de aspecto), Pillow bilinear
Cómo reproducir el redimensionado bilineal de Pillow

LibreYOLO redimensiona con el filtro BILINEAR de Pillow (Image.resize). No es OpenCV INTER_LINEAR ni INTER_AREA: al reducir, Pillow ensancha el filtro según el factor de reducción, y los redimensionados de OpenCV cambian las detecciones y desplazan las cajas varios píxeles. Para reproducirlo sin Pillow, redimensiona un eje, redondea a 8 bits, luego redimensiona el otro eje y vuelve a redondear. Por eje, sea s = in_size / out_size y f = max(s, 1). El píxel de salida i tiene centro c = (i + 0.5) * s y lee los píxeles de origen j desde int(c - f + 0.5) hasta int(c + f + 0.5) - 1, recortados a la imagen, cada uno con peso max(0, 1 - |j + 0.5 - c| / f), dividido por la suma de los pesos. Pillow trabaja en coma fija y elige el orden de los ejes según la forma de la imagen, así que los pesos en coma flotante pueden diferir en un nivel en unos pocos píxeles. Eso no cambia los resultados en nuestras comprobaciones.

Square input only. Export rejects a non-square imgsz, and height equals width, 640 by default. Other square sizes, such as 512, also export.

Batch size 1 only. The graph declares a dynamic batch axis, but batches of 2 or more fail in 1.7.0.

Divide by 255 after the resize. There is no mean or std normalization.

Detection, exportación por defecto
SalidaFormaSignificado
pred_logits[batch, queries, nc]Raw class logits per query, sigmoid not applied. 300 queries and 80 classes for the COCO checkpoints.
pred_boxes[batch, queries, 4]Boxes as cx, cy, w, h, normalized 0 to 1 of the input.

Posprocesado

  1. Apply sigmoid to pred_logits.
  2. Flatten the scores to queries x nc and take the top max_det (300 by default) over all queries x classes. For flat index k, the query is k // nc and the class is k % nc. One query can yield several classes.
  3. Keep the entries whose score is strictly above the confidence threshold (0.25 by default). There is no NMS, so the IoU threshold is not used.
  4. Convert the query's box to x1, y1, x2, y2 with x1 = cx - w / 2, y1 = cy - h / 2, x2 = cx + w / 2, y2 = cy + h / 2.
  5. Map boxes back to the original image: multiply x by the original width and y by the original height. The input was stretched, so no pad offset applies. LibreYOLO does not clip these boxes.
  6. nms=True is not available for this family: export raises NotImplementedError.

Para comprobar tu propia implementación, pasa el mismo archivo por LibreYOLO: LibreYOLO("model.onnx").predict("image.jpg") devuelve los resultados de referencia. Verificado con LibreYOLO 1.7.0.

Checkpoints

Todos los archivos de pesos publicados de esta familia.

ArchivoEntrada (px)Licencia de los pesos
Detection
LibreRTDETRr34.pt640apache-2.0
LibreRTDETRr18.pt640apache-2.0
LibreRTDETRr50.pt640apache-2.0
LibreRTDETRr50m.pt640apache-2.0
LibreRTDETRr101.pt640apache-2.0
LibreRTDETRl.pt640apache-2.0
LibreRTDETRx.pt640apache-2.0
LibreRTDETRv2r18.pt640apache-2.0
LibreRTDETRv2r34.pt640apache-2.0
LibreRTDETRv2r50m.pt640apache-2.0
LibreRTDETRv2r50.pt640apache-2.0
LibreRTDETRv2r101.pt640apache-2.0
LibreRTDETRv4s.pt640apache-2.0
LibreRTDETRv4m.pt640apache-2.0
LibreRTDETRv4l.pt640apache-2.0
LibreRTDETRv4x.pt640apache-2.0
Oriented boxes
LibreRTDETRv2n-obb.ptapache-2.0
LibreRTDETRv2s-obb.pt640apache-2.0
LibreRTDETRv2m-obb.pt640apache-2.0
LibreRTDETRv2l-obb.pt640apache-2.0
LibreRTDETRv2x-obb.pt640apache-2.0

Todos los archivos anteriores existen hoy en la organización de LibreYOLO y se descargan la primera vez que se usan.

El nombre del archivo lleva la versión, luego el tamaño, luego la tarea. Los pesos de detección son LibreRTDETR<size>.pt, LibreRTDETRv2<size>.pt y LibreRTDETRv4<size>.pt, todos a 640 px. Los pesos orientados existen solo para la versión 2 y añaden el sufijo de la tarea, de LibreRTDETRv2n-obb.pt a LibreRTDETRv2x-obb.pt, todos a 1024 px y entrenados con DOTA v1.0 en lugar de COCO.

Licencia

Comprueba la licencia en el repositorio de Hugging Face de los pesos concretos que descargues. Cada checkpoint de la organización de LibreYOLO incluye una, y no siempre es la misma en toda una familia. Ese repositorio es la fuente autorizada; el resumen siguiente describe qué se aplicaba cuando se verificó esta página por última vez.

Esta es una descripción de las licencias implicadas, no asesoramiento legal. Si la respuesta es importante a nivel comercial, lee las licencias y busca tu propio asesoramiento.

Trabajo original
RT-DETR, RT-DETRv2 and RT-DETRv4, Baidu (versions 1 and 2), Peking University and Tsinghua University (version 4)
Licencia del proyecto original
Apache-2.0
Fuente del proyecto original
github.com/lyuwenyu/RT-DETR
Código de LibreYOLO
MIT
Pesos
Apache-2.0, republicados en huggingface.co/LibreYOLO
Interpretación
Apache-2.0 is a permissive license, so these weights can be used in commercial and closed-source products. It asks you to keep its license text and attribution notices with any copy of the weights you redistribute, and it grants a patent license. It places no obligation on your own application code, and weights you train yourself on your own data are yours. All three versions carry it, across two repositories and three papers: RT-DETR and RT-DETRv2 at github.com/lyuwenyu/RT-DETR, and RT-DETRv4 at github.com/RT-DETRs/RT-DETRv4, which is cited separately (arXiv 2510.25257). RT-DETRv4 distills from a DINOv3 teacher while training only; the released student weights hold no DINOv3 parameters, and the tensors that fed the teacher are dropped when a checkpoint is converted, so Meta's DINOv3 license does not reach them.

Cita

@misc{lv2023detrs,
      title={DETRs Beat YOLOs on Real-time Object Detection},
      author={Yian Zhao and Wenyu Lv and Shangliang Xu and Jinman Wei and Guanzhong Wang and Qingqing Dang and Yi Liu and Jie Chen},
      year={2023},
      eprint={2304.08069},
      archivePrefix={arXiv},
      primaryClass={cs.CV}
}

@misc{lv2024rtdetrv2improvedbaselinebagoffreebies,
      title={RT-DETRv2: Improved Baseline with Bag-of-Freebies for Real-Time Detection Transformer}, 
      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},
      url={https://arxiv.org/abs/2407.17140}, 
}

Copiado del bloque de cita de los autores en github.com/lyuwenyu/RT-DETR#citation.

El bloque de arriba es lo que publican los autores para la detección de las versiones 1 y 2. Los pesos orientados de la versión 2 tienen un tercer upstream, el repositorio RiO-DETR bajo Apache-2.0 en github.com/RicePasteM/RiO-DETR, que es de donde vienen los checkpoints de DOTA; cita ese proyecto si has usado uno. La versión 4 es un artículo aparte de otro grupo y tiene su propio bloque de cita en github.com/RT-DETRs/RT-DETRv4; cita ese si has usado un checkpoint de la versión 4.

Verificado con LibreYOLO v1.6.0. Las tablas de compatibilidad, los checkpoints y las cifras de rendimiento de esta página se generan a partir de la biblioteca publicada y los pesos publicados; no se escriben a mano.