EdgeCrafter

Ein kompakter Vision Transformer für dichte Vorhersagen auf Edge-Hardware, der upstream als drei verwandte Modelle veröffentlicht wurde: ECDet, ECPose und ECSeg. LibreYOLO lädt alle drei als eine Familie, wobei der Checkpoint die Aufgabe festlegt.

Aufgaben
detection, pose, instance segmentation
Größen
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
EdgeCrafter von Intellindust AI Lab, Apache-2.0. Publikation, Quelle
Lizenzen
Code Apache-2.0, Gewichte Apache-2.0. Kommerzielle Nutzung

Installation

EdgeCrafter benötigt kein optionales Zusatzpaket. Alle Importe sind in der Basisinstallation enthalten.

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("LibreECs.pt")result = model(SAMPLE_IMAGE, save=True) for box in result.boxes:    print(box.cls, box.conf, box.xyxy)
CLI
libreyolo predict model=LibreECs.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=True
Pose
from libreyolo import LibreYOLO, SAMPLE_IMAGE # Das Suffix -pose im Dateinamen wählt den Keypoint-Head aus,# daher ist hier kein task-Argument erforderlich.model = LibreYOLO("LibreECs-pose.pt")result = model(SAMPLE_IMAGE, save=True) print(result.keypoints.xy)print(result.boxes.conf)
Instanzsegmentierung
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreECs-seg.pt")result = model(SAMPLE_IMAGE, save=True) print(result.masks.data.shape)

Die Aufgabe stammt aus dem Dateinamen. Ein -pose- oder -seg-Checkpoint wählt somit seinen eigenen Head aus und benötigt kein Aufgabenargument. Alle drei geben das Results-Objekt aller Familien zurück, ergänzt um result.keypoints für Pose und result.masks für Segmentierung. Die Pose-Schätzung umfasst eine Klasse, Person, mit den 17 COCO-Keypoints. Ihre Anzahl wird beim Erstellen des Modells festgelegt. Das Modell besitzt keinen Box-Head. Jede Pose-Box entspricht daher der Bounding Box ihrer eigenen Keypoints, und der dritte Keypoint-Kanal ist eine Konstante statt eines punktbezogenen Scores.

conf und max_det filtern die Auswahl der Queries. iou wird aus Gründen der API-Parität akzeptiert, hat aber keine Wirkung, weil alle drei Heads eine Menge von Queries ohne NMS-Schritt dekodieren. Unter Vorhersage findest du Quellen, Streaming und die Verarbeitung von Ergebnissen.

Varianten

Es gibt vier Größen. Alle laufen mit derselben Eingabeauflösung, daher unterscheidet die Tabelle sie anhand der Parameteranzahl und Accuracy.

CheckpointEingabe (px)mAP 50-95Parameter (M)
LibreECl64060.132.97
LibreECm64058.419.43
LibreECs64054.39.88
LibreECx64061.149.94

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.

Upstream veröffentlicht ECDet, ECPose und ECSeg als drei separate Modelle und nicht als ein Modell mit drei Heads. Sie verwenden dasselbe ECViT-Backbone und denselben hybriden Encoder und unterscheiden sich nur im Head. LibreYOLO fasst sie deshalb in einer Familie zusammen und lässt den Checkpoint-Dateinamen die Aufgabe tragen. Ein Größenbuchstabe bezeichnet somit bei allen drei Modellen dasselbe Backbone und denselben Encoder. Vorhersage, Validierung und Export akzeptieren unabhängig vom geladenen Modell dieselben Argumente.

Training

Alle drei Aufgaben werden über train() trainiert. Die Methode liest die Aufgabe aus dem geladenen Checkpoint und wählt den passenden Trainer.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreECs.pt")model.train(    data="my-dataset.yaml",    epochs=50,    imgsz=640,    batch=8,    lr0=5e-4,)
CLI
libreyolo train model=LibreECs.pt data=my-dataset.yaml epochs=50 imgsz=640 batch=8 lr0=5e-4
Pose
from libreyolo import LibreYOLO # Benötigt einen einklassigen Keypoint-Datensatz, dessen data.yaml# kpt_shape deklariert, und imgsz in der nativen Größe des Checkpoints.model = LibreYOLO("LibreECs-pose.pt")model.train(    data="my-pose-dataset.yaml",    epochs=50,    imgsz=640,)
Instanzsegmentierung
from libreyolo import LibreYOLO # Benötigt Polygon-Labels und imgsz in der nativen Größe des Checkpoints.model = LibreYOLO("LibreECs-seg.pt")model.train(    data="my-dataset.yaml",    epochs=50,    imgsz=640,)
LoRA
from libreyolo import LibreYOLO model = LibreYOLO("LibreECs.pt")model.train(    data="my-dataset.yaml",    epochs=50,    lora=True,)

Für Erkennung und Segmentierung wurde Folgendes geprüft: Inferenzparität mit dem Upstream auf 1e-5, Schicht für Schicht und für jede Größe, sowie die Ausführung des Losses und eines einzelnen Trainingsschritts auf synthetischer Eingabe. Laut dem eigenen Docstring von train() wurde Folgendes nicht geprüft: die Konvergenz eines vollständigen Fine-Tunings, Multi-GPU-Training, der Schritt zum Neuladen des besten Modells nach dem Stopp der Augmentierung und die Klassenumordnung von Objects365 zu COCO. Der Pose-Pfad folgt dem veröffentlichten Rezept von DETRPose: einem ungarischen Matcher über Klassen-, Keypoint-L1- und OKS-Kosten mit kontrastivem Keypoint-Denoising. Auch seine Konvergenz wurde nicht vollständig geprüft.

Ohne Änderungen läuft der Trainer 74 Epochen mit lr0=5e-4 und aktivierter Mixed Precision gemäß dem Upstream-Rezept: AdamW, ein Flat-Cosine-Zeitplan, EMA mit 0.9999 und nach ImageNet normalisierte Eingaben. Pose und Segmentierung benötigen beide imgsz in der nativen Größe des Checkpoints, weil ihr Auswertungs-Anchor-Raster beim Erstellen des Modells aufgebaut wird. Ein anderer Wert löst vor Beginn des Laufs einen Fehler aus. Pose benötigt außerdem einen einklassigen Datensatz, dessen data.yaml den Wert kpt_shape deklariert. Die Keypoint-Anzahl muss zum Head passen.

lora=True gilt nur für die Objekterkennung. Pose und Segmentierung lösen dafür einen ValueError aus. Auf Apple-Silicon verbleibt der Lauf auf der GPU, der Trainer verlagert aber eine Operation auf die CPU: den Grid-Sample-Backward-Pass innerhalb der Deformable Attention, den PyTorch nicht in Metal implementiert.

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

Validierung

val() gibt ein Dictionary mit den Metriknamen als Schlüsseln zurück und druckt klassenspezifische Ergebnisse, solange verbose aktiviert bleibt.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreECs.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mAP50-95"])print(metrics["metrics/mAP50"])
CLI
libreyolo val model=LibreECs.pt data=my-dataset.yaml
Pose
from libreyolo import LibreYOLO model = LibreYOLO("LibreECs-pose.pt")metrics = model.val(data="my-pose-dataset.yaml") print(metrics["metrics/keypoints_mAP50-95"])print(metrics["metrics/keypoints_mAP50"])
Instanzsegmentierung
from libreyolo import LibreYOLO model = LibreYOLO("LibreECs-seg.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mAP50-95(M)"])   # Maskenprint(metrics["metrics/mAP50-95(B)"])   # Boxen

Pose meldet Keypoint-OKS-Metriken unter metrics/keypoints_*. Die Segmentierung meldet Masken unter dem einfachen Schlüssel metrics/mAP50-95 und wiederholt beide Ansichten in einem Durchlauf: Boxen unter (B) und Masken unter (M).

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: 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
PosePose to ONNX: unterstütztPose to TorchScript: unterstütztPose to ExecuTorch: unterstütztPose to TensorRT: unterstütztPose to OpenVINO: unterstütztPose to Paddle: unterstütztPose to MNN: nicht unterstütztPose to RKNN: nicht unterstütztPose to ncnn: nicht unterstütztPose to TFLite: nicht unterstütztPose to CoreML: nicht unterstütztPose to Core AI: nicht unterstützt
Instance segmentationInstance segmentation to ONNX: unterstütztInstance segmentation to TorchScript: unterstütztInstance segmentation to ExecuTorch: unterstütztInstance segmentation to TensorRT: unterstütztInstance segmentation to OpenVINO: unterstütztInstance segmentation to Paddle: unterstütztInstance segmentation to MNN: nicht unterstütztInstance segmentation to RKNN: nicht unterstütztInstance segmentation to ncnn: nicht unterstütztInstance segmentation to TFLite: nicht unterstütztInstance segmentation to CoreML: nicht unterstütztInstance segmentation to Core AI: nicht unterstützt

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. Pose und Segmentierung werden mit einer festen Eingabe von 640 mal 640 statt mit dynamischen Formen exportiert. Auch mehrere Erkennungsziele verwenden eine feste Arbeitsfläche, darunter OpenVINO, Paddle, MNN, ExecuTorch und Core AI. Export führt die Argumente auf, die jedes Format akzeptiert, sowie die Zusatzpakete, die einige davon benötigen.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreECs.pt")model.export(format="onnx", imgsz=640)model.export(format="tensorrt", imgsz=640, half=True)
CLI
libreyolo export model=LibreECs.pt format=onnx imgsz=640libreyolo export model=LibreECs-pose.pt format=onnx imgsz=640libreyolo export model=LibreECs-seg.pt format=onnx imgsz=640
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("LibreECs.onnx")result = model(SAMPLE_IMAGE) print(result.boxes.xyxy)

Checkpoints

Alle veröffentlichten Gewichtsdateien dieser Familie.

DateiEingabe (px)Lizenz der Gewichte
Detection
LibreECs.pt640apache-2.0
LibreECm.pt640apache-2.0
LibreECl.pt640apache-2.0
LibreECx.pt640apache-2.0
Pose
LibreECs-pose.pt640apache-2.0
LibreECm-pose.pt640apache-2.0
LibreECl-pose.pt640apache-2.0
LibreECx-pose.pt640apache-2.0
Instance segmentation
LibreECs-seg.pt640apache-2.0
LibreECm-seg.pt640apache-2.0
LibreECl-seg.pt640apache-2.0
LibreECx-seg.pt640apache-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
EdgeCrafter, Intellindust AI Lab
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. One license covers all three upstream models, so the detection, pose and segmentation weights carry identical terms, and weights you train yourself on your own data are yours.

Zitieren

@article{liu2026edgecrafter,
  title={EdgeCrafter: Compact ViTs for Edge Dense Prediction via Task-Specialized Distillation},
  author={Liu, Longfei and Hou, Yongjie and Li, Yang and Wang, Qirui and Sha, Youyang and Yu, Yongjun and Wang, Yinzhi and Ru, Peizhe and Yu, Xuanlong and Shen, Xi},
  journal={arXiv},
  year={2026}
}

Aus dem Zitierblock der Autoren unter github.com/Intellindust-AI-Lab/EdgeCrafter#-citation kopiert.

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.