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.

bash
pip install libreyolo

Fine-Tuning mit Adaptern über lora=True ist die Ausnahme und braucht das lora-Extra.

bash
pip install "libreyolo[lora]"

Vorhersage

Die Gewichte werden beim ersten Aufruf von Hugging Face geladen und lokal zwischengespeichert.

Python
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)
CLI
libreyolo predict model=LibreDEIMn.pt save=True \  source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg
Video
from 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.

CheckpointEingabe (px)mAP 50-95Parameter (M)
LibreDEIMl64057.831.24
LibreDEIMm64055.419.59
LibreDEIMn64046.83.78
LibreDEIMs64052.110.32
LibreDEIMx64059.662.62
LibreDEIMv2atto32027.50.51
LibreDEIMv2femto41634.50.98
LibreDEIMv2l64058.632.55
LibreDEIMv2m64056.018.36
LibreDEIMv2n64046.73.6
LibreDEIMv2pico64042.21.54
LibreDEIMv2s64053.09.78
LibreDEIMv2x64061.351.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.

Python
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)
CLI
libreyolo train model=LibreDEIMn.pt data=coco128.yaml \  epochs=50 batch=8 lr0=1e-4
DEIMv2
from 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)
LoRA
# 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)
Multi-GPU
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.

Python
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"])
CLI
libreyolo val model=LibreDEIMn.pt data=coco128.yaml
Gegen COCO
# 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=True

Die 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

AufgabeONNXTorchScriptExecuTorchTensorRTOpenVINOPaddleMNNRKNNncnnTFLiteCoreMLCore AI
DetectionDetection to ONNX: unterstütztDetection to TorchScript: unterstütztDetection to ExecuTorch: nicht unterstütztDetection to TensorRT: unterstütztDetection to OpenVINO: unterstütztDetection to Paddle: 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

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.

Python
# Braucht das onnx-Extra: pip install "libreyolo[onnx]"from libreyolo import LibreYOLO model = LibreYOLO("LibreDEIMn.pt")path = model.export(format="onnx")print(path)
CLI
libreyolo export model=LibreDEIMn.pt format=onnx
Die exportierte Datei nutzen
from 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.

DateiEingabe (px)Lizenz der Gewichte
Detection
LibreDEIMn.pt640apache-2.0
LibreDEIMs.pt640apache-2.0
LibreDEIMm.pt640apache-2.0
LibreDEIMl.pt640apache-2.0
LibreDEIMx.pt640apache-2.0
LibreDEIMv2n.pt640apache-2.0
LibreDEIMv2s.pt640other
LibreDEIMv2m.pt640other
LibreDEIMv2l.pt640other
LibreDEIMv2x.pt640other
LibreDEIMv2atto.ptapache-2.0
LibreDEIMv2femto.ptapache-2.0
LibreDEIMv2pico.ptapache-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
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).
Die vier DEIMv2-Größen ab S aufwärts beziehen ihr Backbone von DINOv3, deshalb tragen ihre Gewichts-Repositories sowohl Apache-2.0 als auch Metas DINOv3 License, und LibreYOLO liefert den Quellcode des DINOv3-Backbones unter derselben Vereinbarung aus. Der Rest dieser Familie, einschließlich jeder DEIMv2-Größe unterhalb von S, steht allein unter Apache-2.0.

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.

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.