EdgeCrafter

Kompaktowy transformer wizji do gęstego przewidywania na sprzęcie edge, opublikowany jako trzy powiązane modele: ECDet, ECPose i ECSeg. LibreYOLO ładuje wszystkie trzy jako jedną rodzinę, przy czym zadanie jest realizowane przez checkpoint.

Zadania
detection, pose, instance segmentation
Rozmiary
s, m, l, x at 640 px
Instalacja
pip install libreyolo
Poziom obsługi
Główny, od wersji v1.2.0. Główne trenowalne detektory: otrzymują funkcje po modelach flagowych w tej samej fali wydań.
Projekt źródłowy
EdgeCrafter, autorzy: Intellindust AI Lab, licencja: Apache-2.0. Publikacja, kod źródłowy
Licencje
Kod: Apache-2.0, wagi: Apache-2.0. Użycie komercyjne

Instalacja

EdgeCrafter nie potrzebuje żadnych dodatkowych opcji. Wszystko, co importuje, znajduje się w instalacji bazowej.

bash
pip install libreyolo

Dostrajanie adaptera z lora=True jest wyjątkiem i wymaga dodatkowego lora.

bash
pip install "libreyolo[lora]"

Predykcja

Wagi są pobierane z Hugging Face przy pierwszym użyciu i są przechowywane lokalnie w pamięci podręcznej.

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
Pozować
from libreyolo import LibreYOLO, SAMPLE_IMAGE # Sufiks -pose w nazwie pliku wybiera głowicę punktów kluczowych, więc nie# tutaj potrzebny jest argument zadania.model = LibreYOLO("LibreECs-pose.pt")result = model(SAMPLE_IMAGE, save=True) print(result.keypoints.xy)print(result.boxes.conf)
Segmentacja instancji
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreECs-seg.pt")result = model(SAMPLE_IMAGE, save=True) print(result.masks.data.shape)

Zadanie pochodzi z nazwy pliku, więc checkpoint -pose lub -seg wybiera swoją własną głowicę i nie przyjmuje argumentu zadania. Wszystkie trzy zwracają obiekt Results, który zwraca każda rodzina, z result.keypoints dodanym dla pozy i result.masks dla segmentacji. Poza obejmuje jedną klasę, osobę, z 17 punktami kluczowymi COCO, a ich liczba jest ustalona podczas tworzenia modelu. Nie ma głowicy do obwiedni, więc każda rama pozy zawiera obwiednię własnych punktów kluczowych, a trzeci kanał punktów kluczowych jest stały, zamiast być oceną dla każdego punktu.

Argumenty conf i max_det filtrują wybór zapytań. Argument iou jest akceptowany dla zgodności API, ale nie ma wpływu na wynik, ponieważ wszystkie trzy głowice dekodują zbiór zapytań bez etapu NMS. Zobacz stronę predykcji, aby poznać źródła, streaming i obsługę wyników.

Warianty

Cztery rozmiary. Wszystkie działają przy tej samej rozdzielczości wejściowej, więc tabela rozdziela je według liczby parametrów i dokładności.

Checkpoint modeluWejście (px)mAP 50-95Parametry (mln)
LibreECl64060.132.97
LibreECm64058.419.43
LibreECs64054.39.88
LibreECx64061.149.94

COCO val2017, 500 images. Wyniki zmierzono za pomocą zestawu benchmarkowego LibreYOLO i opublikowano w Vision Analysis, gdzie porównywane są opóźnienia na różnych urządzeniach i w różnych środowiskach uruchomieniowych oraz znajdują się pełne zapisy przebiegów.

Projekt upstream publikuje ECDet, ECPose i ECSeg jako trzy osobne modele, a nie jeden model z trzema głowicami. Współdzielą ECViT, backbone i hybrydowy enkoder, a różni je tylko głowica. LibreYOLO łączy je więc w jedną rodzinę, w której nazwa pliku checkpointu wskazuje zadanie. Litera rozmiaru oznacza ten sam backbone i enkoder we wszystkich trzech modelach, a metody predykcji, walidacji i eksportu przyjmują te same argumenty niezależnie od wczytanego wariantu.

Trenowanie

Wszystkie trzy zadania trenują przez train(), który odczytuje zadanie z załadowanego checkpointu i wybiera odpowiedniego trenera.

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
Pozować
from libreyolo import LibreYOLO # Wymaga jednoczesnego zestawu punktów kluczowych jednej klasy, którego plik data.yaml deklaruje# kpt_shape i imgsz w natywnej wielkości checkpointu.model = LibreYOLO("LibreECs-pose.pt")model.train(    data="my-pose-dataset.yaml",    epochs=50,    imgsz=640,)
Segmentacja instancji
from libreyolo import LibreYOLO # Wymaga etykiet wielokątów i rozmiaru obrazu (imgsz) w natywnym rozmiarze checkpointu.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,)

Dla detekcji i segmentacji sprawdzono zgodność inferencji z projektem upstream z tolerancją 1e-5, warstwa po warstwie i dla każdego rozmiaru, a także działanie funkcji straty i pojedynczego kroku trenowania na danych syntetycznych. Zgodnie z opisem metody train() nie sprawdzono zbieżności pełnego dostrajania, trenowania na wielu GPU, ponownego wczytania najlepszego modelu po wyłączeniu augmentacji ani mapowania klas Objects365 na COCO. Ścieżka estymacji pozy korzysta z opublikowanego przepisu DETRPose: dopasowania węgierskiego względem klas, kosztów L1 i OKS dla punktów kluczowych oraz kontrastowego odszumiania punktów kluczowych. Jej zbieżności również nie zweryfikowano od początku do końca.

Pozostawiony sam, trener wykonuje 74 epoki na lr0=5e-4 z włączoną mieszanką precyzji, zgodnie z recepturą upstream: AdamW, płaski harmonogram kosinusowy, EMA na 0,9999 i wejścia ImageNet-normalized. Poza i segmentacja wymagają imgsz w natywnej wielkości checkpointu, ponieważ ich siatka odniesienia do ewaluacji jest tworzona, gdy model jest konstruowany; inna wartość zwiększa się przed rozpoczęciem uruchamiania. Poza wymaga również jednoczęściowego zbioru danych, którego data.yaml deklaruje kpt_shape, z liczbą punktów kluczowych odpowiadającą głowie.

lora=True dotyczy wyłącznie detekcji; pozowanie i segmentacja powodują wywołanie ValueError na nim. Na Apple Silicon trener utrzymuje działanie na GPU i wysyła jedną operację do CPU, wsteczny grid-sample wewnątrz deformowalnej uwagi, której PyTorch nie implementuje w Metal.

Zobacz trenowanie dotyczące zbiorów danych, augmentacji, multi-GPU i loggerów.

Walidacja

val() zwraca słownik kluczowany nazwą metryki i drukuje wyniki dla każdej klasy, gdy verbose jest włączony.

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
Pozować
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"])
Segmentacja instancji
from libreyolo import LibreYOLO model = LibreYOLO("LibreECs-seg.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mAP50-95(M)"])   # maskiprint(metrics["metrics/mAP50-95(B)"])   # pudełka

Raporty pozycji kluczowych Pose zawierają metryki OKS pod metrics/keypoints_*. Raporty segmentacji zawierają maski pod zwykłym kluczem metrics/mAP50-95 i powtarzają oba widoki w jednym przebiegu, pudełka pod (B) i maski pod (M).

Eksport

ZadanieONNXTorchScriptExecuTorchTensorRTOpenVINOPaddleMNNRKNNncnnTFLiteCoreMLCore AI
DetectionDetection to ONNX: obsługiwaneDetection to TorchScript: obsługiwaneDetection to ExecuTorch: obsługiwaneDetection to TensorRT: obsługiwaneDetection to OpenVINO: obsługiwaneDetection to Paddle: obsługiwaneDetection to MNN: obsługiwaneDetection to RKNN: brak obsługiDetection to ncnn: brak obsługiDetection to TFLite: brak obsługiDetection to CoreML: brak obsługiDetection to Core AI: obsługiwane
PosePose to ONNX: obsługiwanePose to TorchScript: obsługiwanePose to ExecuTorch: obsługiwanePose to TensorRT: obsługiwanePose to OpenVINO: obsługiwanePose to Paddle: obsługiwanePose to MNN: brak obsługiPose to RKNN: brak obsługiPose to ncnn: brak obsługiPose to TFLite: brak obsługiPose to CoreML: brak obsługiPose to Core AI: brak obsługi
Instance segmentationInstance segmentation to ONNX: obsługiwaneInstance segmentation to TorchScript: obsługiwaneInstance segmentation to ExecuTorch: obsługiwaneInstance segmentation to TensorRT: obsługiwaneInstance segmentation to OpenVINO: obsługiwaneInstance segmentation to Paddle: obsługiwaneInstance segmentation to MNN: brak obsługiInstance segmentation to RKNN: brak obsługiInstance segmentation to ncnn: brak obsługiInstance segmentation to TFLite: brak obsługiInstance segmentation to CoreML: brak obsługiInstance segmentation to Core AI: brak obsługi

Eksportowany artefakt ładuje się z powrotem przez LibreYOLO() na podstawie jego sufiksu pliku, więc plik .onnx lub .engine zachowuje się jak checkpoint i zwraca ten sam Results. Eksport pozycji i segmentacji odbywa się przy stałym wejściu 640 na 640 zamiast dynamicznych kształtów, a kilka celów detekcji jest również w stałym układzie, w tym OpenVINO, Paddle, MNN, ExecuTorch i Core AI. Eksport wymienia argumenty, które akceptuje każdy format, oraz dodatkowe, które dodaje kilka z nich.

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
Użyj wyeksportowanego pliku
from libreyolo import LibreYOLO, SAMPLE_IMAGE # Fabryka kieruje na podstawie rozszerzenia pliku, więc eksportowany artefakt się ładuje# jak każdy checkpoint i zwraca ten sam obiekt Results.model = LibreYOLO("LibreECs.onnx")result = model(SAMPLE_IMAGE) print(result.boxes.xyxy)

Checkpointy

Każdy opublikowany plik wag dla tej rodziny.

PlikWejście (px)Licencja wag
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

Każdy z powyższych plików jest obecnie dostępny w organizacji LibreYOLO i pobierany przy pierwszym użyciu.

Licencjonowanie

Sprawdź licencję w repozytorium konkretnych pobieranych wag na Hugging Face. Każdy checkpoint w organizacji LibreYOLO ma licencję, która nie zawsze jest taka sama w całej rodzinie. To repozytorium jest źródłem rozstrzygającym, a poniższe podsumowanie opisuje stan z chwili ostatniej weryfikacji tej strony.

To opis obowiązujących licencji, a nie porada prawna. Jeśli odpowiedź ma znaczenie komercyjne, przeczytaj licencje i zasięgnij własnej porady prawnej.

Oryginalna praca
EdgeCrafter, Intellindust AI Lab
Licencja projektu źródłowego
Apache-2.0
Kod LibreYOLO
MIT
Wagi
Apache-2.0, ponownie opublikowane w huggingface.co/LibreYOLO
Interpretacja
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.

Cytowanie

@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}
}

Skopiowano z bloku cytowania autorów w github.com/Intellindust-AI-Lab/EdgeCrafter#-citation.

Zweryfikowano z LibreYOLO v1.5.0. Tabele obsługi, checkpointy i wyniki benchmarków na tej stronie są generowane na podstawie wydanej biblioteki i opublikowanych wag, a nie wpisywane ręcznie.