RT-DETR

Ein Detection Transformer für Echtzeitinferenz: Er dekodiert statt eines dichten Rasters eine feste Menge von Queries und führt daher keine NMS aus. LibreYOLO bietet drei Versionen, die durch den geladenen Checkpoint unterschieden werden. Version 2 unterstützt außerdem orientierte Boxen.

Aufgaben
detection, oriented boxes
Größen
rtdetr: r18, r34, r50, r50m, r101, l, x at 640 px; rtdetrv2: r18, r34, r50, r50m, r101 for detection at 640 px, n, s, m, l, x for oriented boxes at 1024 px; rtdetrv4: s, m, l, x at 640 px
Installation
pip install "libreyolo[rtdetr]"
Supportstufe
Kern, seit v1.1.0. Trainierbare Kerndetektoren: Funktionen folgen den Flaggschiffen in derselben Release-Welle.
Upstream
RT-DETR, RT-DETRv2 and RT-DETRv4 von Baidu (versions 1 and 2), Peking University and Tsinghua University (version 4), Apache-2.0. Publikation, Quelle
Lizenzen
Code Apache-2.0, Gewichte Apache-2.0. Kommerzielle Nutzung

Installation

RT-DETR benötigt kein optionales Zusatzpaket. Alle Importe sind in der Basisinstallation enthalten. Das Zusatzpaket rtdetr ist ein stabiler Name, der nichts ergänzt.

bash
pip install libreyolo

Eine Ausnahme ist das Adapter-Fine-Tuning mit lora=True. Dafür ist das Zusatzpaket lora erforderlich.

bash
pip install "libreyolo[lora]"

Vorhersage

Die Gewichte werden bei der ersten Verwendung von Hugging Face heruntergeladen und lokal zwischengespeichert.

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
Video
from libreyolo import LibreYOLO # Die Version ist Teil des Dateinamens, und die Factory richtet sich nach dem# Checkpoint. Daher werden alle drei gleich geladen.model = LibreYOLO("LibreRTDETRv4s.pt") # Jede von der Bibliothek unterstützte Quelle: Datei, Ordner, URL, Webcam-Index,# RTSP-Stream oder eine .streams-Listefor result in model.predict("clip.mp4", stream=True, save=True):    print(len(result.boxes))
Orientierte Boxen
from libreyolo import LibreYOLO # Nur Version 2. Das Suffix -obb wählt die Aufgabe. Der Checkpoint wird anhand# seiner Tensoren als orientiert erkannt, daher ist kein task-Argument nötig.# Diese Gewichte nutzen DOTA v1.0 mit 15 Luftbildklassen bei 1024 px.model = LibreYOLO("LibreRTDETRv2n-obb.pt")result = model("aerial.png", save=True) obb = result.obbprint(obb.xywhr)     # (N, 5): cx, cy, w, h, Bogenmaßprint(obb.xyxyxyxy)  # dieselben Zeilen als vier Eckpunkteprint(result.boxes.xyxy)  # umschließende achsenparallele Boxen
Orientierte Boxen, CLI
libreyolo predict model=LibreRTDETRv2n-obb.pt source=aerial.png save=True

Das zurückgegebene Results-Objekt entspricht dem aller anderen Familien. Der Wechsel zu einem anderen Detektor erfordert daher nur eine Änderung in einer Zeile. conf und max_det filtern eine Top-k-Dekodierung über Queries und Klassen. Es gibt keinen NMS-Schritt zum Abstimmen, und iou wird zwar akzeptiert, aber nicht verwendet. Ein orientierter Checkpoint füllt nativ result.obb und außerdem result.boxes mit den umschließenden achsenparallelen Rechtecken. Unter Vorhersage findest du Quellen, Streaming und die Verarbeitung von Ergebnissen.

Varianten

Es gibt drei Versionen und insgesamt zwei Aufgaben. Die Größencodes bilden keine einzige Reihe. Version 1 benennt ihre Größen nach dem Backbone, ResNet oder HGNetv2. Version 2 verwendet nur die ResNet-Namen erneut. Version 1 bietet bereits die beiden HGNetv2-Größen, und die Ergebnisse von Version 2 waren dort so ähnlich, dass LibreYOLO keine doppelten Gewichte veröffentlicht. Version 4 verwendet eine einfache Buchstabenreihe, die mit den HGNetv2-Namen aus Version 1 kollidiert. Ein Größencode allein identifiziert daher kein Modell. Die Version steht im Dateinamen des Checkpoints.

CheckpointEingabe (px)mAP 50-95Parameter (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. Gemessen mit dem LibreYOLO-Benchmarksystem und auf Vision Analysis veröffentlicht. Dort werden Latenzen verschiedener Hardware und Runtimes verglichen und die vollständigen Laufprotokolle bereitgestellt.

Version 2 behält Architektur und State-Dictionary-Aufbau von Version 1 bei und ändert die Abtastung der Deformable Attention. Deshalb unterscheiden die Metadaten im Checkpoint beide statt der Tensorform. Version 4 hat eine andere Abstammung: Sie verwendet Architektur und Trainer von D-FINE. Ihre Gewichte entstehen durch Destillation eines DINOv3-Vision-Foundation-Lehrers in einen HGNetv2-Schüler. In LibreYOLO ist LibreRTDETRv4 eine Unterklasse von LibreDFINE mit dauerhaft deaktiviertem Masken-Head und bleibt reine Objekterkennung.

Orientierte Boxen mit Version 2

Version 2 ist die einzige Version mit einer zweiten Aufgabe. Ihre unterstützten Aufgaben sind detect und obb. Beide verwenden weder denselben Graphen noch dieselbe Größenreihe. Die Erkennung nutzt ResNet-Größen bei 640 px. Die orientierte Erkennung nutzt eine HGNetv2-Reihe n, s, m, l und x bei 1024 px. Die Eingabegröße wird pro Aufgabe statt pro Familie aufgelöst. Ein Checkpoint wird anhand seiner eigenen Tensoren als orientiert erkannt, nämlich durch die Box-Heads mit fünf Koordinaten und die Sampling-Parameter von Version 2. Daher werden -obb-Gewichte ohne Argument task in den orientierten Graphen geladen. Eine Abweichung zwischen beiden ist ein eindeutiger Fehler statt einer unbemerkten Neuinterpretation.

Die veröffentlichten Dateien reichen von LibreRTDETRv2n-obb.pt bis LibreRTDETRv2x-obb.pt. Es sind die offiziellen Single-Scale-Checkpoints von DOTA v1.0, die in das LibreYOLO-Format konvertiert wurden. Sie umfassen 15 Luftbildklassen von Flugzeug und Schiff bis Hafen und Hubschrauber. Die Klassennamen stehen im Checkpoint. Anders als die Erkennungsseite ist die orientierte Aufgabe reine Inferenz. Vorhersage, Validierung und Export funktionieren, train() löst bei einem orientierten Modell einen Fehler aus. Tracking und Test-Time Augmentation unterstützen orientierte Boxen ebenfalls nicht. Orientierte Erkennung behandelt die Aufgabe, das Labelformat und die Metriken.

Training

Das Training beginnt mit einem veröffentlichten Checkpoint. pretrained wird bei allen drei Versionen akzeptiert und anschließend verworfen. pretrained=False erzeugt daher kein zufällig initialisiertes Modell. Dieser Abschnitt betrifft vollständig die Objekterkennung. Die orientierte Aufgabe von Version 2 ist reine Inferenz. Es gibt keinen Transferpfad von Erkennungsgewichten, weil beide Aufgaben unterschiedliche Backbones nutzen.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreRTDETRr18.pt") # coco128.yaml lädt bei der ersten Verwendung 128 Beispielbilder herunter.# Verweise für einen echten Lauf mit `data` auf deine eigene Datensatz-YAML.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
# Benötigt das lora-Zusatzpaket: 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

Die Lernrate muss stimmen, und jede Version besitzt einen eigenen Standardwert statt des bibliotheksweiten Werts. Die Python-Signatur train() liest ihn aus der Trainingskonfiguration der Version. Die CLI löst denselben Wert auf, wenn lr0 nicht übergeben wird. Version 1 und 2 akzeptieren außerdem lr_backbone mit standardmäßig einem Zwanzigstel von lr0, entsprechend dem ursprünglichen Rezept. Version 4 verwendet den D-FINE-Trainer, der die Backbone-Parametergruppe stattdessen mit backbone_lr_mult skaliert.

Behalte für imgsz die native Größe des Checkpoints bei, sofern kein Grund für eine Änderung besteht. Validierung und Vorhersage funktionieren mit anderen Größen, mit einer Ausnahme: Eine rechteckige Größe mit derselben Token-Anzahl wie die native Größe verwendet weiterhin ein Embedding für das falsche Seitenverhältnis.

Unter Training findest du Datensätze, Datenaugmentierung, Multi-GPU und Logger.

Validierung

val() gibt ein Dictionary mit metrics/-Schlüsseln für Precision, Recall, mAP 50 und mAP 50-95 zurück. Diese werden auf einem beliebigen Datensatz in dem Format gemessen, das du für das Training verwendet hast.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreRTDETRr18.pt") # val() gibt ein einfaches dict zurück, kein Objektmetrics = 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
Gegen COCO
# coco-val-only.yaml ruft die 5000 val2017-Bilder ab und überspringt den# Trainingssatz. Sie enthält ein Downloadskript und benötigt daher eine# ausdrückliche Erlaubnis, wenn der Datensatz nicht bereits lokal ist.libreyolo val model=LibreRTDETRr18.pt data=coco-val-only.yaml \  allow_download_scripts=True
Orientierte Boxen
from libreyolo import LibreYOLO # Die orientierte Validierung gleicht mit gedrehter IoU ab. Eine Vorhersage# am richtigen Ort mit falschem Winkel zählt daher als Fehler.model = LibreYOLO("LibreRTDETRv2n-obb.pt")metrics = model.val(data="my-obb-dataset.yaml") print(metrics["metrics/mAP50-95(OBB)"])print(metrics["metrics/mAP50(OBB)"])

Die Zeilen der obigen Benchmark-Tabelle stammen aus dem LibreYOLO-Benchmark-Testaufbau. Der Hinweis unter der Tabelle nennt den verwendeten Datensatz und verlinkt die Laufaufzeichnungen.

Die orientierte Validierung wird über denselben Aufruf ausgeführt und meldet dieselben Schlüssel sowie vier Wiederholungen mit dem Suffix (OBB). Der Abgleich nutzt gedrehte IoU statt der IoU der umschließenden Rechtecke. Ein Winkelfehler ist daher ein Fehler. augment=True wird für diese Aufgabe abgelehnt.

Export

AufgabeONNXTorchScriptExecuTorchTensorRTOpenVINOPaddleMNNRKNNncnnTFLiteCoreMLCore AI
DetectionDetection to ONNX: unterstütztDetection to TorchScript: unterstütztDetection to ExecuTorch: unterstütztDetection to TensorRT: unterstütztDetection to OpenVINO: unterstütztDetection to Paddle: nicht unterstütztDetection to MNN: unterstütztDetection to RKNN: nicht unterstütztDetection to ncnn: nicht unterstütztDetection to TFLite: nicht unterstütztDetection to CoreML: nicht unterstütztDetection to Core AI: unterstützt
Oriented boxesOriented boxes to ONNX: unterstütztOriented boxes to TorchScript: unterstütztOriented boxes to ExecuTorch: unterstütztOriented boxes to TensorRT: unterstütztOriented boxes to OpenVINO: unterstütztOriented boxes to Paddle: nicht unterstütztOriented boxes to MNN: nicht unterstütztOriented boxes to RKNN: nicht unterstütztOriented boxes to ncnn: nicht unterstütztOriented boxes to TFLite: nicht unterstütztOriented boxes to CoreML: nicht unterstütztOriented boxes to Core AI: nicht unterstützt

Die Matrix behandelt die Abstammung auf einer Seite. Wenn sich die drei Versionen bei einem Format unterscheiden, zeigt die Zelle den schwächsten Status. Dadurch wird unabhängig von der geladenen Version nichts zu stark versprochen. Die orientierte Zeile gilt nur für Version 2. ONNX und TorchScript sind dort mit FP32, Batch 1 und einer festen Arbeitsfläche von 1024 mal 1024 validiert. OpenVINO, TensorRT und ExecuTorch lassen sich konvertieren und neu laden, haben aber keine Rohdatenparität über die vollständige Query-Menge erreicht. Die besten Boxen stimmen bis auf einen Bruchteil eines Pixels überein, während die Ausläufer abweichen.

Ein exportiertes Artefakt wird anhand seiner Dateiendung wieder über LibreYOLO() geladen. Eine .onnx- oder .engine-Datei verhält sich daher wie ein Checkpoint und gibt dasselbe Results-Objekt zurück.

Python
# Benötigt das onnx-Zusatzpaket: 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
Orientierte Boxen
# ONNX und TorchScript sind die validierten Ziele der orientierten Aufgabe,# mit FP32, Batch 1 und einer festen Arbeitsfläche von 1024 mal 1024.libreyolo export model=LibreRTDETRv2n-obb.pt format=onnx imgsz=1024libreyolo export model=LibreRTDETRv2n-obb.pt format=torchscript imgsz=1024
Exportierte Datei verwenden
from libreyolo import LibreYOLO, SAMPLE_IMAGE # Die Factory entscheidet anhand der Dateiendung, daher wird ein Exportartefakt# wie jeder Checkpoint geladen und gibt dasselbe Results-Objekt zurück.model = LibreYOLO("LibreRTDETRr18.onnx")result = model(SAMPLE_IMAGE) print(result.boxes.xyxy)

Checkpoints

Alle veröffentlichten Gewichtsdateien dieser Familie.

DateiEingabe (px)Lizenz der Gewichte
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.pt1024apache-2.0
LibreRTDETRv2s-obb.pt1024apache-2.0
LibreRTDETRv2m-obb.pt1024apache-2.0
LibreRTDETRv2l-obb.pt1024apache-2.0
LibreRTDETRv2x-obb.pt1024apache-2.0

Jede oben aufgeführte Datei ist heute in der LibreYOLO-Organisation verfügbar und wird bei der ersten Verwendung heruntergeladen.

Der Dateiname enthält Version, dann Größe und dann Aufgabe. Erkennungsgewichte heißen LibreRTDETR<size>.pt, LibreRTDETRv2<size>.pt und LibreRTDETRv4<size>.pt, alle bei 640 px. Orientierte Gewichte gibt es nur für Version 2. Sie tragen zusätzlich das Aufgabensuffix und reichen von LibreRTDETRv2n-obb.pt bis LibreRTDETRv2x-obb.pt. Alle arbeiten bei 1024 px und wurden auf DOTA v1.0 statt COCO trainiert.

Lizenzierung

Prüfe die Lizenz im Hugging-Face-Repository der konkreten Gewichte, die du herunterlädst. Jeder Checkpoint in der LibreYOLO-Organisation hat eine Lizenz, und sie ist innerhalb einer Familie nicht immer gleich. Dieses Repository ist die maßgebliche Quelle. Die Zusammenfassung unten beschreibt den Stand bei der letzten Verifizierung dieser Seite.

Dies ist eine Beschreibung der beteiligten Lizenzen und keine Rechtsberatung. Wenn die Antwort kommerziell relevant ist, lies die Lizenzen selbst und hole eigenen Rechtsrat ein.

Originalarbeit
RT-DETR, RT-DETRv2 and RT-DETRv4, Baidu (versions 1 and 2), Peking University and Tsinghua University (version 4)
Upstream-Lizenz
Apache-2.0
LibreYOLO-Code
MIT
Gewichte
Apache-2.0, erneut unter huggingface.co/LibreYOLO veröffentlicht
Einordnung
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.

Zitieren

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

Aus dem Zitierblock der Autoren unter github.com/lyuwenyu/RT-DETR#citation kopiert.

Der obige Block entspricht der von den Autoren veröffentlichten Zitierangabe für die Objekterkennung mit Version 1 und 2. Die orientierten Gewichte von Version 2 haben mit dem Apache-2.0-Repository RiO-DETR einen dritten Upstream: github.com/RicePasteM/RiO-DETR. Von dort stammen die DOTA-Checkpoints. Zitiere dieses Projekt, wenn du einen davon verwendet hast. Version 4 ist eine eigene Veröffentlichung einer anderen Gruppe und besitzt einen eigenen Zitationsblock unter github.com/RT-DETRs/RT-DETRv4. Zitiere diesen, wenn du einen Checkpoint der Version 4 verwendet hast.

Mit LibreYOLO v1.5.0 verifiziert. Supporttabellen, Checkpoints und Benchmarkwerte auf dieser Seite werden aus der veröffentlichten Bibliothek und den publizierten Gewichten generiert und nicht von Hand geschrieben.