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 at 640 px; rtdetrv4: s, m, l, x at 640 px
- Installation
pip install libreyolo- 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.
RT-DETRv4 aktiviert standardmäßig amp=True mit amp_dtype="float16". Übergib amp=False für FP32.
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)ONNX-Ein- und Ausgaben
LibreRTDETR and LibreRTDETRv2
| Tensor | images float32 [batch, 3, height, width] |
|---|---|
| Farbe | RGB |
| Skalierung | Pixel / 255 |
| Normalisierung | keine |
| Größenanpassung | auf Breite x Höhe strecken (ohne Auffüllen, Seitenverhältnis wird nicht beibehalten), 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, Standardexport
| Ausgabe | Form | Bedeutung |
|---|---|---|
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. |
Nachbearbeitung
- Apply sigmoid to pred_logits.
- 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.
- 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.
- 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.
- 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.
- nms=True is not available for this family: export raises NotImplementedError.
LibreRTDETRv2 OBB
| Tensor | images float32 [batch, 3, height, width] |
|---|---|
| Farbe | RGB |
| Skalierung | Pixel / 255 |
| Normalisierung | keine |
| Größenanpassung | custom, Pillow bilinear |
So reproduzierst du die bilineare Skalierung von Pillow
LibreYOLO skaliert mit dem BILINEAR-Filter von Pillow (Image.resize). Das ist weder OpenCV INTER_LINEAR noch INTER_AREA: Beim Verkleinern weitet Pillow den Filter um den Verkleinerungsfaktor, und die Skalierungen von OpenCV verändern Detektionen und verschieben Boxen um mehrere Pixel. Um es ohne Pillow nachzubauen, skaliere eine Achse, runde auf 8 Bit, skaliere dann die andere Achse und runde erneut. Pro Achse gilt s = in_size / out_size und f = max(s, 1). Ausgabepixel i hat das Zentrum c = (i + 0.5) * s und liest Quellpixel j von int(c - f + 0.5) bis int(c + f + 0.5) - 1, auf das Bild begrenzt, jeweils mit dem Gewicht max(0, 1 - |j + 0.5 - c| / f), geteilt durch die Summe der Gewichte. Pillow rechnet in Festkomma und wählt die Achsenreihenfolge anhand der Bildform, daher können Gleitkomma-Gewichte bei einigen Pixeln um eine Stufe abweichen. Das ändert die Ergebnisse in unseren Prüfungen nicht.
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, Standardexport
| Ausgabe | Form | Bedeutung |
|---|---|---|
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. |
Nachbearbeitung
- Apply sigmoid to pred_logits.
- 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.
- 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.
- 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.
- The angle in radians is a x pi. LibreYOLO reports each box as cx, cy, w, h, angle in original-image pixels and radians.
- 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.
- LibreYOLO's axis-aligned box for a detection is the smallest box that encloses its four corners.
- nms=True is not available for this family: export raises NotImplementedError.
LibreRTDETRv4
| Tensor | images float32 [batch, 3, height, width] |
|---|---|
| Farbe | RGB |
| Skalierung | Pixel / 255 |
| Normalisierung | keine |
| Größenanpassung | auf Breite x Höhe strecken (ohne Auffüllen, Seitenverhältnis wird nicht beibehalten), Pillow bilinear |
So reproduzierst du die bilineare Skalierung von Pillow
LibreYOLO skaliert mit dem BILINEAR-Filter von Pillow (Image.resize). Das ist weder OpenCV INTER_LINEAR noch INTER_AREA: Beim Verkleinern weitet Pillow den Filter um den Verkleinerungsfaktor, und die Skalierungen von OpenCV verändern Detektionen und verschieben Boxen um mehrere Pixel. Um es ohne Pillow nachzubauen, skaliere eine Achse, runde auf 8 Bit, skaliere dann die andere Achse und runde erneut. Pro Achse gilt s = in_size / out_size und f = max(s, 1). Ausgabepixel i hat das Zentrum c = (i + 0.5) * s und liest Quellpixel j von int(c - f + 0.5) bis int(c + f + 0.5) - 1, auf das Bild begrenzt, jeweils mit dem Gewicht max(0, 1 - |j + 0.5 - c| / f), geteilt durch die Summe der Gewichte. Pillow rechnet in Festkomma und wählt die Achsenreihenfolge anhand der Bildform, daher können Gleitkomma-Gewichte bei einigen Pixeln um eine Stufe abweichen. Das ändert die Ergebnisse in unseren Prüfungen nicht.
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, Standardexport
| Ausgabe | Form | Bedeutung |
|---|---|---|
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. |
Nachbearbeitung
- Apply sigmoid to pred_logits.
- 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.
- 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.
- 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.
- 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.
- nms=True is not available for this family: export raises NotImplementedError.
Um deine eigene Implementierung zu prüfen, lade dieselbe Datei mit LibreYOLO: LibreYOLO("model.onnx").predict("image.jpg") liefert die Referenzergebnisse. Geprüft mit LibreYOLO 1.7.0.
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 | apache-2.0 | |
| LibreRTDETRv2s-obb.pt | 640 | apache-2.0 |
| LibreRTDETRv2m-obb.pt | 640 | apache-2.0 |
| LibreRTDETRv2l-obb.pt | 640 | apache-2.0 |
| LibreRTDETRv2x-obb.pt | 640 | 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.