Посмотреть как Markdown

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 original COCO weights; restricted obj2coco weights. Статья, исходный код
Лицензии
Код: Apache-2.0, веса: Apache-2.0 original COCO weights; restricted obj2coco weights. Коммерческое использование

Установка

EdgeCrafter не требует опциональных extra. Всё, что он импортирует, входит в базовую установку.

bash
pip install libreyolo

Исключение — дообучение адаптерами с lora=True: ему нужен extra 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 в имени файла выбирает голову ключевых точек,# поэтому аргумент task здесь не нужен.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. Про источники, стриминг и обработку результатов см. предсказание.

Предсказание для детекции принимает прямоугольный imgsz=(height, width); обучение и экспорт сохраняют собственные ограничения формы.

Варианты

Четыре размера. Все они работают на одном и том же входном разрешении, поэтому таблица разделяет их по числу параметров и точности.

ЧекпойнтВход (пикс.)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 внутри deformable attention, который PyTorch не реализует в Metal.

Про датасеты, аугментацию, multi-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
LibreECl-obj2coco.ptother
LibreECm-obj2coco.ptother
LibreECs-obj2coco.ptother
LibreECx-obj2coco.ptother
Pose
LibreECs-pose.pt640apache-2.0
LibreECm-pose.pt640apache-2.0
LibreECl-pose.pt640apache-2.0
LibreECx-pose.pt640apache-2.0
LibreECl-pose-obj2coco.ptother
LibreECm-pose-obj2coco.ptother
LibreECs-pose-obj2coco.ptother
LibreECx-pose-obj2coco.ptother
Instance segmentation
LibreECs-seg.pt640apache-2.0
LibreECm-seg.pt640apache-2.0
LibreECl-seg.pt640apache-2.0
LibreECx-seg.pt640apache-2.0
LibreECm-seg-obj2coco.ptother
LibreECs-seg-obj2coco.ptother
LibreECl-seg-obj2coco.ptother
LibreECx-seg-obj2coco.ptother

Все перечисленные выше файлы уже доступны в организации LibreYOLO и скачиваются при первом использовании.

Варианты obj2coco охватывают детекцию, сегментацию и оценку позы. Их скачивание требует явного согласия, а условия исходного проекта ограничивают коммерческое использование. Исходные чекпойнты COCO сохраняют записанное разрешение Apache-2.0.

Лицензирование

Проверяйте лицензию в репозитории конкретных весов на Hugging Face. Она указана для каждого чекпойнта в организации LibreYOLO и может различаться даже внутри одного семейства. Этот репозиторий считается авторитетным источником, а сводка ниже описывает условия на момент последней проверки страницы.

Это описание соответствующих лицензий, а не юридическая консультация. Если ответ важен для коммерческого использования, прочитайте лицензии самостоятельно и проконсультируйтесь с юристом.

Оригинальная работа
EdgeCrafter, Intellindust AI Lab
Лицензия исходного проекта
Apache-2.0 original COCO weights; restricted obj2coco weights
Исходный код проекта
github.com/Intellindust-AI-Lab/EdgeCrafter
Код LibreYOLO
MIT
Веса
Apache-2.0 original COCO weights; restricted obj2coco weights, повторно опубликованы на huggingface.co/LibreYOLO
Толкование
Original COCO checkpoints retain their recorded Apache-2.0 grant. The obj2coco detection, segmentation and pose variants require explicit opt-in and retain non-commercial upstream terms. The library code license does not replace those weight terms.

Цитирование

@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.6.0. Таблицы поддержки, чекпойнты и результаты бенчмарков на этой странице сгенерированы из выпущенной библиотеки и опубликованных весов, а не написаны вручную.