RT-DETR

Un detection transformer conçu pour l'inférence en temps réel : il décode un ensemble fixe de requêtes plutôt qu'une grille dense et n'exécute donc aucune NMS. LibreYOLO en propose trois versions, distinguées par le checkpoint chargé, et la version 2 prend aussi en charge les boîtes orientées.

Tâches
detection, oriented boxes
Tailles
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
Installer
pip install libreyolo
Niveau de support
Cœur, depuis v1.1.0. Détecteurs entraînables du cœur : les fonctionnalités suivent les fers de lance dans la même vague de publication.
Origine
RT-DETR, RT-DETRv2 and RT-DETRv4 par Baidu (versions 1 and 2), Peking University and Tsinghua University (version 4), Apache-2.0. Article, source
Licences
Code Apache-2.0, poids Apache-2.0. Usage commercial

Installer

RT-DETR ne nécessite aucun extra facultatif. Tous ses imports figurent dans l'installation de base, et l'extra rtdetr est un nom stable qui n'y ajoute rien.

bash
pip install libreyolo

Le fine-tuning par adaptateur avec lora=True constitue l'exception et nécessite l'extra lora.

bash
pip install "libreyolo[lora]"

Prédire

Les poids sont téléchargés depuis Hugging Face à la première utilisation et mis en cache localement.

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
Vidéo
from libreyolo import LibreYOLO # La version figure dans le nom du fichier et la factory utilise le# checkpoint, les trois versions se chargent donc de la même façon.model = LibreYOLO("LibreRTDETRv4s.pt") # Toute source acceptée par la bibliothèque : fichier, dossier, URL,# index de webcam, flux RTSP ou liste .streamsfor result in model.predict("clip.mp4", stream=True, save=True):    print(len(result.boxes))
Boîtes orientées
from libreyolo import LibreYOLO # Version 2 uniquement. Le suffixe -obb sélectionne la tâche et les# propres tenseurs du checkpoint indiquent son orientation, aucun argument# task n'est requis. Ces poids DOTA v1.0 couvrent 15 classes à 1024 px.model = LibreYOLO("LibreRTDETRv2n-obb.pt")result = model("aerial.png", save=True) obb = result.obbprint(obb.xywhr)     # (N, 5) : cx, cy, w, h, radiansprint(obb.xyxyxyxy)  # mêmes lignes sous forme de quatre points d'angleprint(result.boxes.xyxy)  # boîtes alignées sur les axes qui les englobent
Boîtes orientées, CLI
libreyolo predict model=LibreRTDETRv2n-obb.pt source=aerial.png save=True

L'objet Results renvoyé est le même pour toutes les familles, remplacer le détecteur ne demande donc de modifier qu'une ligne. conf et max_det filtrent un décodage top-k sur les requêtes et les classes ; aucune étape NMS n'est à régler, et iou est accepté mais inutilisé. Un checkpoint orienté remplit nativement result.obb ainsi que result.boxes avec les rectangles alignés sur les axes qui englobent les boîtes. Consultez la prédiction pour les sources, le streaming et le traitement des résultats.

Variantes

Trois versions se partagent deux tâches, et leurs codes de taille ne forment pas une série unique. La version 1 nomme ses tailles d'après le backbone, ResNet ou HGNetv2. La version 2 réutilise uniquement les noms ResNet : la version 1 fournit déjà les deux tailles HGNetv2 et les résultats de la version 2 étaient assez proches pour que LibreYOLO ne publie pas de poids en double. La version 4 utilise une série de lettres simples qui entre en collision avec les noms HGNetv2 de la version 1. Un code de taille seul n'identifie donc pas un modèle. La version est inscrite dans le nom du fichier de checkpoint.

CheckpointEntrée (px)mAP 50-95Paramètres (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. Mesuré par le banc de benchmark de LibreYOLO et publié sur Vision Analysis, où sont comparées la latence selon le matériel et les runtimes et où sont conservés les enregistrements complets des exécutions.

La version 2 conserve l'architecture et la disposition du dictionnaire d'état de la version 1, mais change la façon dont l'attention déformable échantillonne. C'est pourquoi les métadonnées du checkpoint permettent de les distinguer, et non sa forme. La version 4 appartient à une autre lignée : elle réutilise l'architecture et l'entraîneur de D-FINE, et ses poids proviennent de la distillation d'un modèle de fondation visuel DINOv3 enseignant vers un élève HGNetv2. Dans LibreYOLO, LibreRTDETRv4 est une sous-classe de LibreDFINE dont la tête de masque est désactivée de manière fixe, elle reste donc réservée à la détection.

Boîtes orientées sur la version 2

La version 2 est la seule à proposer une seconde tâche. Ses tâches prises en charge sont detect et obb, et elles ne partagent ni graphe ni série de tailles. La détection utilise les tailles ResNet à 640 px ; la détection orientée utilise une série HGNetv2, n, s, m, l et x, à 1024 px, et la taille d'entrée est résolue par tâche plutôt que par famille. Les propres tenseurs d'un checkpoint permettent de reconnaître son orientation, grâce aux têtes de boîte à cinq coordonnées et aux paramètres d'échantillonnage de la version 2. Les poids -obb se chargent donc dans le graphe orienté sans argument task, et une incompatibilité entre les deux produit une erreur franche au lieu d'une réinterprétation silencieuse.

Les fichiers publiés vont de LibreRTDETRv2n-obb.pt à LibreRTDETRv2x-obb.pt. Ce sont les checkpoints officiels DOTA v1.0 à une seule échelle, convertis au format LibreYOLO. Ils couvrent 15 classes aériennes, de l'avion et du navire au port et à l'hélicoptère, et leurs noms de classes sont inscrits dans le checkpoint. Contrairement à la détection, la tâche orientée est réservée à l'inférence : la prédiction, la validation et l'export fonctionnent, mais train() lève une erreur sur un modèle orienté. Le suivi et l'augmentation au moment du test ne prennent pas non plus en charge les boîtes orientées. La page Détection orientée présente la tâche, le format des étiquettes et les métriques.

Entraîner

L'entraînement part d'un checkpoint publié. pretrained est accepté, puis ignoré sur les trois versions. pretrained=False ne produit donc pas un modèle initialisé aléatoirement. Toute cette section concerne la détection : la tâche orientée de la version 2 est réservée à l'inférence et il n'existe aucun chemin de transfert depuis les poids de détection, car les deux utilisent des backbones différents.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreRTDETRr18.pt") # coco128.yaml télécharge 128 images au premier usage. Pour une véritable# exécution, faites pointer `data` vers votre propre YAML de dataset.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
# Nécessite l'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

Le learning rate est l'argument à régler correctement, et chaque version possède sa propre valeur par défaut au lieu de celle de toute la bibliothèque. La signature Python de train() la lit dans la configuration d'entraînement de la version, et la CLI résout la même valeur lorsque lr0 n'est pas fourni. Les versions 1 et 2 acceptent également lr_backbone, dont la valeur par défaut est un vingtième de lr0, conformément à la recette originale. La version 4 passe par l'entraîneur D-FINE, qui met à l'échelle le groupe de paramètres du backbone avec backbone_lr_mult.

Laissez imgsz à la taille native du checkpoint sauf si vous avez une raison de la modifier. La validation et la prédiction fonctionnent à d'autres tailles, avec un effet résiduel : une taille rectangulaire dont le nombre de tokens correspond à celui de la taille native réutilise tout de même un embedding conçu pour le mauvais rapport de forme.

Consultez l'entraînement pour les datasets, l'augmentation, le multi-GPU et les loggers.

RT-DETRv4 active amp=True avec amp_dtype="float16" par défaut. Passez amp=False pour FP32.

Valider

val() renvoie un dictionnaire de clés metrics/ couvrant la précision, le rappel, la mAP 50 et la mAP 50-95, mesurés sur tout dataset dans le format utilisé pour l'entraînement.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreRTDETRr18.pt") # val() renvoie un simple dict, pas un objetmetrics = 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
Comparer à COCO
# coco-val-only.yaml récupère les 5000 images val2017 et ignore le dataset# d'entraînement. Son script de téléchargement intégré nécessite une# autorisation explicite, sauf si le dataset est déjà local.libreyolo val model=LibreRTDETRr18.pt data=coco-val-only.yaml \  allow_download_scripts=True
Boîtes orientées
from libreyolo import LibreYOLO # La validation orientée utilise l'IoU pivotée : une prédiction placée au# bon endroit avec le mauvais angle est donc comptée comme manquée.model = LibreYOLO("LibreRTDETRv2n-obb.pt")metrics = model.val(data="my-obb-dataset.yaml") print(metrics["metrics/mAP50-95(OBB)"])print(metrics["metrics/mAP50(OBB)"])

Les lignes du tableau de benchmark ci-dessus proviennent de l'outil de benchmark LibreYOLO ; la note sous ce tableau indique le dataset qui les a produites et fournit les liens vers les enregistrements des exécutions.

La validation orientée passe par le même appel et rapporte les mêmes clés, plus quatre répétées avec un suffixe (OBB). La correspondance utilise l'IoU pivotée plutôt que celle des rectangles englobants. Une erreur d'angle compte donc comme un échec. augment=True est refusé pour cette tâche.

Exporter

TâcheONNXTorchScriptExecuTorchTensorRTOpenVINOPaddleMNNRKNNncnnTFLiteCoreMLCore AI
DetectionDetection to ONNX : pris en chargeDetection to TorchScript : pris en chargeDetection to ExecuTorch : pris en chargeDetection to TensorRT : pris en chargeDetection to OpenVINO : pris en chargeDetection to Paddle : non pris en chargeDetection to MNN : pris en chargeDetection to RKNN : non pris en chargeDetection to ncnn : non pris en chargeDetection to TFLite : non pris en chargeDetection to CoreML : non pris en chargeDetection to Core AI : pris en charge
Oriented boxesOriented boxes to ONNX : pris en chargeOriented boxes to TorchScript : pris en chargeOriented boxes to ExecuTorch : pris en chargeOriented boxes to TensorRT : pris en chargeOriented boxes to OpenVINO : pris en chargeOriented boxes to Paddle : non pris en chargeOriented boxes to MNN : non pris en chargeOriented boxes to RKNN : non pris en chargeOriented boxes to ncnn : non pris en chargeOriented boxes to TFLite : non pris en chargeOriented boxes to CoreML : non pris en chargeOriented boxes to Core AI : non pris en charge

La matrice présente la lignée sur une seule page : lorsque les trois versions ne s'accordent pas sur un format, la cellule indique la prise en charge la plus faible des trois, afin de ne rien exagérer quelle que soit la version chargée. La ligne orientée concerne uniquement la version 2. ONNX et TorchScript y sont validés en FP32, avec un batch de 1 et un canevas fixe de 1024 par 1024 ; OpenVINO, TensorRT et ExecuTorch se convertissent et se rechargent, mais n'ont pas atteint la parité des sorties brutes sur l'ensemble complet de requêtes. Les meilleures boîtes concordent à une fraction de pixel près, tandis que la fin de la distribution dérive.

Un artefact exporté se recharge par LibreYOLO() à partir de son suffixe de fichier. Un fichier .onnx ou .engine se comporte donc comme un checkpoint et renvoie le même objet Results.

Python
# Nécessite l'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
Boîtes orientées
# ONNX et TorchScript sont les cibles validées pour la tâche orientée,# en FP32, batch 1, sur un canevas fixe de 1024 par 1024.libreyolo export model=LibreRTDETRv2n-obb.pt format=onnx imgsz=1024libreyolo export model=LibreRTDETRv2n-obb.pt format=torchscript imgsz=1024
Utiliser le fichier exporté
from libreyolo import LibreYOLO, SAMPLE_IMAGE # La factory utilise le suffixe du fichier : un artefact exporté se charge# comme tout checkpoint et renvoie le même objet Results.model = LibreYOLO("LibreRTDETRr18.onnx")result = model(SAMPLE_IMAGE) print(result.boxes.xyxy)

Entrées et sorties ONNX

LibreRTDETR and LibreRTDETRv2

Tenseurimages float32 [batch, 3, height, width]
CouleurRGB
Mise à l'échellepixel / 255
Normalisationaucune
Redimensionnementétirer à largeur x hauteur (sans remplissage, le rapport d'aspect n'est pas conservé), 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, export par défaut
SortieFormeSignification
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.

Post-traitement

  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

Tenseurimages float32 [batch, 3, height, width]
CouleurRGB
Mise à l'échellepixel / 255
Normalisationaucune
Redimensionnementcustom, Pillow bilinear
Comment reproduire le redimensionnement bilinéaire de Pillow

LibreYOLO redimensionne avec le filtre BILINEAR de Pillow (Image.resize). Ce n'est ni OpenCV INTER_LINEAR ni INTER_AREA : en réduction, Pillow élargit le filtre du facteur de réduction, et les redimensionnements d'OpenCV modifient les détections et déplacent les boîtes de plusieurs pixels. Pour le reproduire sans Pillow, redimensionnez un axe, arrondissez sur 8 bits, puis redimensionnez l'autre axe et arrondissez de nouveau. Par axe, posons s = in_size / out_size et f = max(s, 1). Le pixel de sortie i a pour centre c = (i + 0.5) * s et lit les pixels source j de int(c - f + 0.5) à int(c + f + 0.5) - 1, limités à l'image, chacun avec le poids max(0, 1 - |j + 0.5 - c| / f), divisé par la somme des poids. Pillow calcule en virgule fixe et choisit l'ordre des axes selon la forme de l'image, donc des poids en virgule flottante peuvent s'en écarter d'un niveau sur quelques pixels. Cela ne change pas les résultats dans nos vérifications.

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, export par défaut
SortieFormeSignification
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.

Post-traitement

  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

Tenseurimages float32 [batch, 3, height, width]
CouleurRGB
Mise à l'échellepixel / 255
Normalisationaucune
Redimensionnementétirer à largeur x hauteur (sans remplissage, le rapport d'aspect n'est pas conservé), Pillow bilinear
Comment reproduire le redimensionnement bilinéaire de Pillow

LibreYOLO redimensionne avec le filtre BILINEAR de Pillow (Image.resize). Ce n'est ni OpenCV INTER_LINEAR ni INTER_AREA : en réduction, Pillow élargit le filtre du facteur de réduction, et les redimensionnements d'OpenCV modifient les détections et déplacent les boîtes de plusieurs pixels. Pour le reproduire sans Pillow, redimensionnez un axe, arrondissez sur 8 bits, puis redimensionnez l'autre axe et arrondissez de nouveau. Par axe, posons s = in_size / out_size et f = max(s, 1). Le pixel de sortie i a pour centre c = (i + 0.5) * s et lit les pixels source j de int(c - f + 0.5) à int(c + f + 0.5) - 1, limités à l'image, chacun avec le poids max(0, 1 - |j + 0.5 - c| / f), divisé par la somme des poids. Pillow calcule en virgule fixe et choisit l'ordre des axes selon la forme de l'image, donc des poids en virgule flottante peuvent s'en écarter d'un niveau sur quelques pixels. Cela ne change pas les résultats dans nos vérifications.

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, export par défaut
SortieFormeSignification
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.

Post-traitement

  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.

Pour vérifier votre propre implémentation, passez le même fichier dans LibreYOLO : LibreYOLO("model.onnx").predict("image.jpg") renvoie les résultats de référence. Vérifié avec LibreYOLO 1.7.0.

Checkpoints

Tous les fichiers de poids publiés pour cette famille.

FichierEntrée (px)Licence des poids
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

Tous les fichiers ci-dessus sont actuellement disponibles dans l<link>organisation LibreYOLO</link> et sont téléchargés à la première utilisation.

Le nom de fichier contient la version, puis la taille, puis la tâche. Les poids de détection sont LibreRTDETR<size>.pt, LibreRTDETRv2<size>.pt et LibreRTDETRv4<size>.pt, tous à 640 px. Les poids orientés existent uniquement pour la version 2 et ajoutent le suffixe de tâche, de LibreRTDETRv2n-obb.pt à LibreRTDETRv2x-obb.pt. Ils utilisent tous 1024 px et sont entraînés sur DOTA v1.0 plutôt que COCO.

Licence

Vérifiez la licence dans le dépôt Hugging Face des poids précis que vous téléchargez. Chaque checkpoint de l<link>organisation LibreYOLO</link> en possède une, et elles ne sont pas toujours identiques au sein dune même famille. Ce dépôt fait autorité ; le résumé ci-dessous décrit les conditions applicables lors de la dernière vérification de cette page.

Ceci décrit les licences concernées et ne constitue pas un conseil juridique. Si la réponse a une importance commerciale, lisez vous-même les licences et consultez votre propre avocat.

Travail d'origine
RT-DETR, RT-DETRv2 and RT-DETRv4, Baidu (versions 1 and 2), Peking University and Tsinghua University (version 4)
Licence du projet d'origine
Apache-2.0
Source du projet d'origine
github.com/lyuwenyu/RT-DETR
Code de LibreYOLO
MIT
Poids
Apache-2.0, republiés sur huggingface.co/LibreYOLO
Interprétation
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.

Citation

@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}, 
}

Copié depuis le bloc de citation des auteurs sur github.com/lyuwenyu/RT-DETR#citation.

Le bloc ci-dessus est celui que les auteurs publient pour la détection avec les versions 1 et 2. Les poids orientés de la version 2 possèdent une troisième source amont, le dépôt RiO-DETR Apache-2.0 à l'adresse github.com/RicePasteM/RiO-DETR, d'où proviennent les checkpoints DOTA ; citez ce projet si vous en avez utilisé un. La version 4 fait l'objet d'un article distinct par un autre groupe et possède son propre bloc de citation à l'adresse github.com/RT-DETRs/RT-DETRv4 ; citez celui-ci si vous avez utilisé un checkpoint de version 4.

Vérifié avec LibreYOLO v1.6.0. Les tableaux de support, les checkpoints et les chiffres de benchmark de cette page sont générés à partir de la bibliothèque publiée et des poids publiés, et non rédigés à la main.