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.
pip install libreyoloEine Ausnahme ist das Adapter-Fine-Tuning mit lora=True. Dafür ist das
Zusatzpaket lora erforderlich.
pip install "libreyolo[lora]"Vorhersage
Die Gewichte werden bei der ersten Verwendung von Hugging Face heruntergeladen und lokal zwischengespeichert.
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)libreyolo predict model=LibreRTDETRr18.pt save=True \ source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpgfrom 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))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 Boxenlibreyolo predict model=LibreRTDETRv2n-obb.pt source=aerial.png save=TrueDas 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.
| Checkpoint | Eingabe (px) | mAP 50-95 | Parameter (M) |
|---|---|---|---|
| LibreRTDETRl | 640 | 55.8 | 32.93 |
| LibreRTDETRr101 | 640 | 56.8 | 76.56 |
| LibreRTDETRr18 | 640 | 49.7 | 20.18 |
| LibreRTDETRr34 | 640 | 52.2 | 31.44 |
| LibreRTDETRr50 | 640 | 55.9 | 42.89 |
| LibreRTDETRr50m | 640 | 53.8 | 36.59 |
| LibreRTDETRx | 640 | 57.9 | 67.37 |
| LibreRTDETRv2r101 | 640 | 56.8 | 76.56 |
| LibreRTDETRv2r18 | 640 | 50.8 | 20.18 |
| LibreRTDETRv2r34 | 640 | 53.2 | 31.44 |
| LibreRTDETRv2r50 | 640 | 55.7 | 42.89 |
| LibreRTDETRv2r50m | 640 | 54.8 | 36.59 |
| LibreRTDETRv4l | 640 | 57.8 | 31.24 |
| LibreRTDETRv4m | 640 | 56.5 | 19.59 |
| LibreRTDETRv4s | 640 | 52.8 | 10.32 |
| LibreRTDETRv4x | 640 | 60.0 | 62.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.
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)libreyolo train model=LibreRTDETRr18.pt data=coco128.yaml \ epochs=50 batch=4 lr0=1e-4# 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)libreyolo train model=LibreRTDETRr18.pt data=coco128.yaml \ epochs=50 device=0,1Die 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.
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"])libreyolo val model=LibreRTDETRr18.pt data=coco128.yaml# 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=Truefrom 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
| Aufgabe | ONNX | TorchScript | ExecuTorch | TensorRT | OpenVINO | Paddle | MNN | RKNN | ncnn | TFLite | CoreML | Core AI |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Detection | Detection to ONNX: unterstützt | Detection to TorchScript: unterstützt | Detection to ExecuTorch: unterstützt | Detection to TensorRT: unterstützt | Detection to OpenVINO: unterstützt | Detection to Paddle: nicht unterstützt | Detection to MNN: unterstützt | Detection to RKNN: nicht unterstützt | Detection to ncnn: nicht unterstützt | Detection to TFLite: nicht unterstützt | Detection to CoreML: nicht unterstützt | Detection to Core AI: unterstützt |
| Oriented boxes | Oriented boxes to ONNX: unterstützt | Oriented boxes to TorchScript: unterstützt | Oriented boxes to ExecuTorch: unterstützt | Oriented boxes to TensorRT: unterstützt | Oriented boxes to OpenVINO: unterstützt | Oriented boxes to Paddle: nicht unterstützt | Oriented boxes to MNN: nicht unterstützt | Oriented boxes to RKNN: nicht unterstützt | Oriented boxes to ncnn: nicht unterstützt | Oriented boxes to TFLite: nicht unterstützt | Oriented boxes to CoreML: nicht unterstützt | Oriented 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.
# Benötigt das onnx-Zusatzpaket: pip install "libreyolo[onnx]"from libreyolo import LibreYOLO model = LibreYOLO("LibreRTDETRr18.pt")path = model.export(format="onnx")print(path)libreyolo export model=LibreRTDETRr18.pt format=onnx# 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=1024from 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.
| Datei | Eingabe (px) | Lizenz der Gewichte |
|---|---|---|
| Detection | ||
| LibreRTDETRr34.pt | 640 | apache-2.0 |
| LibreRTDETRr18.pt | 640 | apache-2.0 |
| LibreRTDETRr50.pt | 640 | apache-2.0 |
| LibreRTDETRr50m.pt | 640 | apache-2.0 |
| LibreRTDETRr101.pt | 640 | apache-2.0 |
| LibreRTDETRl.pt | 640 | apache-2.0 |
| LibreRTDETRx.pt | 640 | apache-2.0 |
| LibreRTDETRv2r18.pt | 640 | apache-2.0 |
| LibreRTDETRv2r34.pt | 640 | apache-2.0 |
| LibreRTDETRv2r50m.pt | 640 | apache-2.0 |
| LibreRTDETRv2r50.pt | 640 | apache-2.0 |
| LibreRTDETRv2r101.pt | 640 | apache-2.0 |
| LibreRTDETRv4s.pt | 640 | apache-2.0 |
| LibreRTDETRv4m.pt | 640 | apache-2.0 |
| LibreRTDETRv4l.pt | 640 | apache-2.0 |
| LibreRTDETRv4x.pt | 640 | apache-2.0 |
| Oriented boxes | ||
| LibreRTDETRv2n-obb.pt | 1024 | apache-2.0 |
| LibreRTDETRv2s-obb.pt | 1024 | apache-2.0 |
| LibreRTDETRv2m-obb.pt | 1024 | apache-2.0 |
| LibreRTDETRv2l-obb.pt | 1024 | apache-2.0 |
| LibreRTDETRv2x-obb.pt | 1024 | apache-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
- Upstream-Quelle
- github.com/lyuwenyu/RT-DETR
- 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.