EdgeCrafter

Компактний візуальний трансформер для щільного передбачення на edge-обладнанні, опублікований у першоджерелі як три споріднені моделі: ECDet, ECPose та ECSeg. LibreYOLO завантажує всі три як одне сімейство, а завдання визначається контрольною точкою.

Задачі
detection, pose, instance segmentation
Розміри
s, m, l, x at 640 px
Встановлення
pip install libreyolo
Рівень підтримки
Основний, починаючи з v1.2.0. Основні придатні до навчання детектори: функції з'являються після флагманських моделей у тій самій хвилі випуску.
Першоджерело
EdgeCrafter, автори: Intellindust AI Lab, ліцензія Apache-2.0. Стаття, джерело
Ліцензії
Код: Apache-2.0, ваги: Apache-2.0. Комерційне використання

Встановлення

EdgeCrafter не потребує додаткових пакетів. Усі його імпорти входять до базового встановлення.

bash
pip install libreyolo

Винятком є донавчання адаптерів із lora=True, для якого потрібен додатковий пакет lora.

bash
pip install "libreyolo[lora]"

Передбачення

Під час першого використання ваги завантажуються з Hugging Face та кешуються локально.

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
Поза
from libreyolo import LibreYOLO, SAMPLE_IMAGE # Суфікс -pose у назві файлу вибирає голову ключових точок, тому# аргумент завдання тут не потрібен.model = LibreYOLO("LibreECs-pose.pt")result = model(SAMPLE_IMAGE, save=True) print(result.keypoints.xy)print(result.boxes.conf)
Сегментація екземплярів
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreECs-seg.pt")result = model(SAMPLE_IMAGE, save=True) print(result.masks.data.shape)

Завдання визначається за назвою файлу, тому контрольна точка -pose або -seg вибирає власну голову й не приймає аргументу завдання. Усі три повертають об'єкт Results, який повертає кожне сімейство, із доданим result.keypoints для пози та result.masks для сегментації. Поза охоплює один клас, людину, із 17 ключовими точками COCO, а кількість фіксується під час побудови моделі. Вона не має голови рамок, тому кожна рамка пози охоплює її власні ключові точки, а третій канал ключової точки є сталою, а не оцінкою окремої точки.

Параметри conf і max_det фільтрують вибір запитів; iou приймається для сумісності API, але не впливає на результат, оскільки всі три голови декодують набір запитів без етапу NMS. Джерела, потокове оброблення та роботу з результатами описано на сторінці передбачення.

Варіанти

Доступні чотири розміри. Усі вони працюють з однаковою роздільною здатністю вхідних даних, тому таблиця розрізняє їх за кількістю параметрів і правильністю.

Контрольна точкаВхід (пікс.)mAP 50-95Параметри (млн)
LibreECl64060.132.97
LibreECm64058.419.43
LibreECs64054.39.88
LibreECx64061.149.94

COCO val2017, 500 images. Виміряно засобами бенчмарку LibreYOLO й опубліковано на сторінці Vision Analysis, де порівнюють затримку на різному обладнанні та в різних середовищах виконання, а також зберігають повні записи запусків.

Першоджерело публікує ECDet, ECPose та ECSeg як три окремі моделі, а не одну модель із трьома головами. Вони мають спільні бекбон ECViT і гібридний кодер та відрізняються лише головою, тому LibreYOLO об'єднує їх в одне сімейство, а завдання визначається назвою файлу контрольної точки. Отже, літера розміру означає однакові бекбон і кодер для всіх трьох, а передбачення, валідація та експорт приймають однакові аргументи незалежно від завантаженої моделі.

Навчання

Усі три завдання навчаються через train(), який читає завдання із завантаженої контрольної точки та вибирає відповідний тренер.

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
Поза
from libreyolo import LibreYOLO # Потрібен однокласовий датасет ключових точок, у data.yaml якого оголошено# kpt_shape, та imgsz із нативним розміром контрольної точки.model = LibreYOLO("LibreECs-pose.pt")model.train(    data="my-pose-dataset.yaml",    epochs=50,    imgsz=640,)
Сегментація екземплярів
from libreyolo import LibreYOLO # Потрібні полігональні мітки та imgsz із нативним розміром контрольної точки.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,)

Для виявлення та сегментації перевірено еквівалентність інференсу з першоджерелом до 1e-5, шар за шаром і для кожного розміру, а також виконання функції втрат і одного кроку навчання на синтетичних вхідних даних. Згідно з документацією самого train(), не перевірено збіжність повного донавчання, навчання на кількох GPU, етап повторного завантаження найкращої моделі після припинення аугментації та перенесення класів Objects365 у COCO. Шлях пози наслідує опублікований рецепт DETRPose, тобто угорський алгоритм зіставлення за вартістю класу, L1 ключових точок і OKS із контрастним знешумленням ключових точок; його збіжність також не перевірено від початку до кінця.

Без додаткових параметрів тренер виконує 74 епохи з lr0=5e-4 та ввімкненою змішаною точністю за рецептом першоджерела: AdamW, плаский косинусний розклад, EMA зі значенням 0.9999 і вхідні дані, нормалізовані за ImageNet. Поза й сегментація потребують imgsz із нативним розміром контрольної точки, оскільки їхня якірна сітка оцінювання будується під час створення моделі; інше значення спричиняє помилку до початку запуску. Для пози також потрібен однокласовий датасет, у data.yaml якого оголошено kpt_shape, а кількість ключових точок відповідає голові.

Параметр lora=True застосовується лише до виявлення; для пози та сегментації він спричиняє ValueError. На Apple silicon тренер залишає запуск на GPU та надсилає на CPU одну операцію, зворотний прохід grid-sample у деформованій увазі, яку PyTorch не реалізує в Metal.

Датасети, аугментацію, кілька GPU та системи журналювання описано на сторінці навчання.

Валідація

Метод val() повертає словник із ключами за назвами метрик і виводить результати для кожного класу, якщо verbose залишається ввімкненим.

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
Поза
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"])
Сегментація екземплярів
from libreyolo import LibreYOLO model = LibreYOLO("LibreECs-seg.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mAP50-95(M)"])   # маскиprint(metrics["metrics/mAP50-95(B)"])   # рамки

Поза повідомляє метрики OKS ключових точок під metrics/keypoints_*. Сегментація повідомляє маски під звичайним ключем metrics/mAP50-95 і повторює обидва подання за один прохід, рамки під (B) та маски під (M).

Експорт

ЗадачаONNXTorchScriptExecuTorchTensorRTOpenVINOPaddleMNNRKNNncnnTFLiteCoreMLCore AI
DetectionDetection to ONNX: підтримуєтьсяDetection to TorchScript: підтримуєтьсяDetection to ExecuTorch: підтримуєтьсяDetection to TensorRT: підтримуєтьсяDetection to OpenVINO: підтримуєтьсяDetection to Paddle: підтримуєтьсяDetection to MNN: підтримуєтьсяDetection to RKNN: не підтримуєтьсяDetection to ncnn: не підтримуєтьсяDetection to TFLite: не підтримуєтьсяDetection to CoreML: не підтримуєтьсяDetection to Core AI: підтримується
PosePose to ONNX: підтримуєтьсяPose to TorchScript: підтримуєтьсяPose to ExecuTorch: підтримуєтьсяPose to TensorRT: підтримуєтьсяPose to OpenVINO: підтримуєтьсяPose to Paddle: підтримуєтьсяPose to MNN: не підтримуєтьсяPose to RKNN: не підтримуєтьсяPose to ncnn: не підтримуєтьсяPose to TFLite: не підтримуєтьсяPose to CoreML: не підтримуєтьсяPose to Core AI: не підтримується
Instance segmentationInstance segmentation to ONNX: підтримуєтьсяInstance segmentation to TorchScript: підтримуєтьсяInstance segmentation to ExecuTorch: підтримуєтьсяInstance segmentation to TensorRT: підтримуєтьсяInstance segmentation to OpenVINO: підтримуєтьсяInstance segmentation to Paddle: підтримуєтьсяInstance segmentation to MNN: не підтримуєтьсяInstance segmentation to RKNN: не підтримуєтьсяInstance segmentation to ncnn: не підтримуєтьсяInstance segmentation to TFLite: не підтримуєтьсяInstance segmentation to CoreML: не підтримуєтьсяInstance segmentation to Core AI: не підтримується

Експортований артефакт повторно завантажується через LibreYOLO() за суфіксом файлу, тому файл .onnx або .engine поводиться як контрольна точка й повертає той самий Results. Поза й сегментація експортуються з фіксованими вхідними даними 640 на 640, а не динамічними формами; кілька цілей виявлення також мають фіксоване полотно, зокрема OpenVINO, Paddle, MNN, ExecuTorch та Core AI. На сторінці Експорт наведено аргументи, які приймає кожен формат, і додаткові пакети, потрібні деяким із них.

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
Використати експортований файл
from libreyolo import LibreYOLO, SAMPLE_IMAGE # Фабрика виконує маршрутизацію за суфіксом файлу, тому експортований артефакт# завантажується як будь-яка контрольна точка й повертає той самий об'єкт Results.model = LibreYOLO("LibreECs.onnx")result = model(SAMPLE_IMAGE) print(result.boxes.xyxy)

Контрольні точки

Усі опубліковані файли ваг для цього сімейства.

ФайлВхід (пікс.)Ліцензія ваг
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

Кожен наведений вище файл уже доступний у організації LibreYOLO і завантажується під час першого використання.

Ліцензування

Перевіряйте ліцензію в репозиторії Hugging Face конкретних ваг, які завантажуєте. Кожна контрольна точка в організації LibreYOLO має ліцензію, і вона не завжди однакова для всього сімейства. Цей репозиторій є авторитетним джерелом, а наведене нижче резюме описує умови на момент останньої перевірки сторінки.

Це опис відповідних ліцензій, а не юридична консультація. Якщо відповідь має комерційне значення, самостійно прочитайте ліцензії та зверніться по юридичну консультацію.

Оригінальна робота
EdgeCrafter, Intellindust AI Lab
Ліцензія першоджерела
Apache-2.0
Джерело першоджерела
github.com/Intellindust-AI-Lab/EdgeCrafter
Код LibreYOLO
MIT
Ваги
Apache-2.0, повторно опубліковано на huggingface.co/LibreYOLO
Тлумачення
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.

Цитування

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

Скопійовано з блоку цитування авторів на сторінці github.com/Intellindust-AI-Lab/EdgeCrafter#-citation.

Перевірено з LibreYOLO v1.5.0. Таблиці підтримки, контрольні точки й результати бенчмарків на цій сторінці згенеровано з випущеної бібліотеки та опублікованих ваг, а не написано вручну.