DEIM
Ein Detection Transformer, der mit dichtem Eins-zu-eins-Matching trainiert wird und dadurch in weit weniger Epochen konvergiert als die DETR-Rezepte, auf denen er aufbaut. LibreYOLO führt zwei Versionen davon, unterschieden durch den Checkpoint, den du lädst.
- Aufgaben
- detection
- Größen
- deim: n, s, m, l, x at 640 px
- Installation
pip install libreyolo- Supportstufe
- Kern, seit v1.2.0. Trainierbare Kerndetektoren: Funktionen folgen den Flaggschiffen in derselben Release-Welle.
- Upstream
- DEIM and DEIMv2 von Intellindust AI Lab, Apache-2.0; the DEIMv2 DINOv3 backbone adds Meta's DINOv3 License. Publikation, Quelle
- Lizenzen
- Code Apache-2.0, Gewichte Apache-2.0; the DEIMv2 DINOv3 backbone adds Meta's DINOv3 License. Kommerzielle Nutzung
Installation
Keine der beiden Versionen braucht ein optionales Extra. Alles, was sie importieren, steckt in der Basisinstallation.
pip install libreyoloFine-Tuning mit Adaptern über lora=True ist die Ausnahme und braucht das
lora-Extra.
pip install "libreyolo[lora]"Vorhersage
Die Gewichte werden beim ersten Aufruf von Hugging Face geladen und lokal zwischengespeichert.
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreDEIMn.pt")result = model(SAMPLE_IMAGE, save=True) for box in result.boxes: print(box.cls, box.conf, box.xyxy)libreyolo predict model=LibreDEIMn.pt save=True \ source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpgfrom libreyolo import LibreYOLO # Die Version steckt im Dateinamen, und die Factory routet über den# Checkpoint, also laden beide gleich.model = LibreYOLO("LibreDEIMv2pico.pt") # Jede Quelle, die die Bibliothek akzeptiert: 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))Das zurückgegebene Results-Objekt ist dasselbe, das jede Familie liefert, ein
anderer Detektor ist also eine Änderung von einer Zeile. conf und max_det
filtern eine Top-k-Dekodierung über Queries und Klassen; es gibt keinen
NMS-Schritt zum Einstellen, und iou wird akzeptiert, aber nicht genutzt.
Siehe Vorhersage für Quellen, Streaming und den Umgang mit
Ergebnissen.
Varianten
Version 1 bringt fünf Größen mit, alle bei derselben Eingabegröße. Version 2
behält diese fünf Namen und ergänzt drei kleinere, atto, femto und pico,
von denen die ersten beiden nativ auf einer kleineren Eingabegröße laufen als
der Rest. Fünf Größenkürzel gibt es damit in beiden Versionen, und sie benennen
unterschiedliche Modelle; die Version steht im Dateinamen des Checkpoints.
| Checkpoint | Eingabe (px) | mAP 50-95 | Parameter (M) |
|---|---|---|---|
| LibreDEIMl | 640 | 57.8 | 31.24 |
| LibreDEIMm | 640 | 55.4 | 19.59 |
| LibreDEIMn | 640 | 46.8 | 3.78 |
| LibreDEIMs | 640 | 52.1 | 10.32 |
| LibreDEIMx | 640 | 59.6 | 62.62 |
| LibreDEIMv2atto | 320 | 27.5 | 0.51 |
| LibreDEIMv2femto | 416 | 34.5 | 0.98 |
| LibreDEIMv2l | 640 | 58.6 | 32.55 |
| LibreDEIMv2m | 640 | 56.0 | 18.36 |
| LibreDEIMv2n | 640 | 46.7 | 3.6 |
| LibreDEIMv2pico | 640 | 42.2 | 1.54 |
| LibreDEIMv2s | 640 | 53.0 | 9.78 |
| LibreDEIMv2x | 640 | 61.3 | 51.21 |
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 1 behält die Architektur von D-FINE und tauscht deren
Klassifikationsziel gegen den matchability-aware Loss aus dem dichten
Eins-zu-eins-Rezept, deshalb teilen sich die beiden Familien fast jeden
State-Dict-Key und werden über die Metadaten im Checkpoint unterschieden.
Version 2 behält diesen Trainingsvertrag bei und mischt die Backbones: HGNetv2
unterhalb von s, und ein DINOv3-Vision-Transformer mit einem
Spatial-Tuning-Adapter ab s aufwärts. Dieses Backbone ist der Grund, warum auf
diesen vier Checkpoints eine zweite Lizenz liegt, lies also
Lizenzierung, bevor du einen davon ausrollst.
Training
Das Training startet von einem veröffentlichten Checkpoint. pretrained
erreicht den Trainer nie: Version 1 warnt, dass der Key unbekannt ist, und
ignoriert ihn, Version 2 entfernt ihn. Keine der beiden gibt dir ein zufällig
initialisiertes Modell.
from libreyolo import LibreYOLO model = LibreYOLO("LibreDEIMn.pt") # coco128.yaml lädt beim ersten Aufruf 128 Beispielbilder. Für einen# echten Lauf zeigt `data` auf dein eigenes Dataset-YAML.model.train(data="coco128.yaml", epochs=50, batch=8, lr0=1e-4)libreyolo train model=LibreDEIMn.pt data=coco128.yaml \ epochs=50 batch=8 lr0=1e-4from libreyolo import LibreYOLO # Bleiben epochs, batch, imgsz und lr0 ungesetzt, kommen sie aus dem# veröffentlichten Rezept für die geladene Größe.model = LibreYOLO("LibreDEIMv2pico.pt")model.train(data="coco128.yaml", epochs=50)# Braucht das lora-Extra: pip install "libreyolo[lora]"from libreyolo import LibreYOLO model = LibreYOLO("LibreDEIMn.pt")model.train(data="coco128.yaml", epochs=50, lora=True)libreyolo train model=LibreDEIMn.pt data=coco128.yaml \ epochs=50 device=0,1Übergib lr0 bei Version 1 selbst. Ihre Python-Signatur von train() hat
4e-4 als Standard, die Rate aus dem veröffentlichten COCO-Rezept, während die
Trainingskonfiguration der Familie 1e-4 als Fine-Tuning-Standard führt, und
diesen niedrigeren Wert löst die CLI auf, wenn das Argument fehlt. Die
Konfiguration hält die Messung dahinter fest: bei den Batch-Größen, die ein
Fine-Tuning tatsächlich nutzt, und auf kleinen Datensätzen hat die COCO-Rate
den Transfer messbar verschlechtert.
Version 2 löst diese Standardwerte selbst auf. Lässt du epochs, batch,
imgsz und lr0 ungesetzt, liest sie jeden Wert aus dem veröffentlichten
Rezept für die geladene Größe, dadurch trainieren die kleinen Größen ohne
weitere Angabe in ihrer eigenen Eingabeauflösung, und ein Wert, den du
übergibst, überschreibt das Rezept. imgsz ist das Argument, das sie
einschränkt: Es muss ein positives Vielfaches von 32 sein, sonst wirft
Version 2 einen Fehler, bevor der Lauf startet.
Siehe Training für Datensätze, Augmentierung, Multi-GPU und Logger.
Validierung
val() gibt ein Dictionary mit metrics/-Keys zurück, das Precision, Recall,
mAP 50 und mAP 50-95 abdeckt, gemessen an jedem Datensatz im Format, auf dem du
trainiert hast.
from libreyolo import LibreYOLO model = LibreYOLO("LibreDEIMn.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=LibreDEIMn.pt data=coco128.yaml# coco-val-only.yaml holt die 5000 val2017-Bilder und lässt das# Trainingsset aus. Es enthält ein Download-Skript, braucht also# explizite Erlaubnis, sofern der Datensatz nicht schon lokal ist.libreyolo val model=LibreDEIMn.pt data=coco-val-only.yaml \ allow_download_scripts=TrueDie Zeilen in der Benchmark-Tabelle oben stammen aus dem Benchmark-Harness von LibreYOLO; die Notiz unter dieser Tabelle hält fest, welcher Datensatz sie erzeugt hat, und verlinkt die Laufprotokolle.
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: nicht unterstützt | Detection to TensorRT: unterstützt | Detection to OpenVINO: unterstützt | Detection to Paddle: 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 |
Die Matrix deckt beide Versionen auf einer Seite ab: Wo sie sich bei einem Format unterscheiden, zeigt die Zelle den schwächeren der beiden Werte, hier wird also für keine der Versionen zu viel versprochen.
Ein exportiertes Artefakt lädt über seine Dateiendung wieder durch
LibreYOLO(), eine .onnx- oder .engine-Datei verhält sich also wie ein
Checkpoint und liefert dieselben Results.
# Braucht das onnx-Extra: pip install "libreyolo[onnx]"from libreyolo import LibreYOLO model = LibreYOLO("LibreDEIMn.pt")path = model.export(format="onnx")print(path)libreyolo export model=LibreDEIMn.pt format=onnxfrom libreyolo import LibreYOLO, SAMPLE_IMAGE # Die Factory routet über die Dateiendung: Ein exportiertes Artefakt# lädt wie jeder Checkpoint und liefert dasselbe Results-Objekt.model = LibreYOLO("LibreDEIMn.onnx")result = model(SAMPLE_IMAGE) print(result.boxes.xyxy)Checkpoints
Jede veröffentlichte Gewichtsdatei dieser Familie.
| Datei | Eingabe (px) | Lizenz der Gewichte |
|---|---|---|
| Detection | ||
| LibreDEIMn.pt | 640 | apache-2.0 |
| LibreDEIMs.pt | 640 | apache-2.0 |
| LibreDEIMm.pt | 640 | apache-2.0 |
| LibreDEIMl.pt | 640 | apache-2.0 |
| LibreDEIMx.pt | 640 | apache-2.0 |
| LibreDEIMv2n.pt | 640 | apache-2.0 |
| LibreDEIMv2s.pt | 640 | other |
| LibreDEIMv2m.pt | 640 | other |
| LibreDEIMv2l.pt | 640 | other |
| LibreDEIMv2x.pt | 640 | other |
| LibreDEIMv2atto.pt | apache-2.0 | |
| LibreDEIMv2femto.pt | apache-2.0 | |
| LibreDEIMv2pico.pt | apache-2.0 | |
Jede oben aufgeführte Datei ist heute in der LibreYOLO-Organisation verfügbar und wird bei der ersten Verwendung heruntergeladen.
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
- DEIM and DEIMv2, Intellindust AI Lab
- Upstream-Lizenz
- Apache-2.0; the DEIMv2 DINOv3 backbone adds Meta's DINOv3 License
- Upstream-Quelle
- github.com/Intellindust-AI-Lab/DEIM
- LibreYOLO-Code
- MIT
- Gewichte
- Apache-2.0; the DEIMv2 DINOv3 backbone adds Meta's DINOv3 License, 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. DEIM is Apache-2.0 throughout, and so are the DEIMv2 sizes below S, which use an HGNetv2 backbone. The DEIMv2 S, M, L and X sizes take their backbone from DINOv3, so both their weights and the backbone source vendored in LibreYOLO are additionally governed by Meta's DINOv3 License Agreement, which is not an OSI license: redistribution has to carry the agreement with it, and it forbids use for military or warfare purposes, weapons development, espionage, nuclear industries and anything subject to ITAR. Their Hugging Face repositories declare both licenses, and DEIMv2 is also cited separately (arXiv 2509.20787).
Zitieren
@misc{huang2024deim,
title={DEIM: DETR with Improved Matching for Fast Convergence},
author={Shihua, Huang and Zhichao, Lu and Xiaodong, Cun and Yongjun, Yu and Xiao, Zhou and Xi, Shen},
booktitle={Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition},
year={2025},
}Aus dem Zitierblock der Autoren unter github.com/Intellindust-AI-Lab/DEIM#5-citation kopiert.
DEIMv2 ist ein eigenes Paper und hat einen eigenen Zitierblock unter github.com/Intellindust-AI-Lab/DEIMv2; zitiere diesen, wenn du einen Checkpoint von Version 2 verwendet hast.