Полная матрица экспорта
Поддержка экспорта — это поиск по тройке (семейство, задача, формат). Эта страница описывает устройство матрицы, правила, которые заполняют ячейки без явной записи, и как запросить её для интересующей вас комбинации.
Устройство матрицы
Ключ матрицы — тройка (family, task, format). Ключи семейств — канонические
имена из реестра моделей, ключи задач берутся из libreyolo.tasks.TASKS, а
форматов двенадцать:
onnx, torchscript, executorch, tensorrt, openvino, paddle, mnn,
rknn, ncnn, tflite, coreml, coreai.
model.export(format=...) дополнительно принимает два алиаса: engine для
tensorrt и litert для tflite — это текущее название TensorFlow Lite. Сам
формат и суффикс .tflite не меняются.
from libreyolo.export.support import ( EXPORT_FORMATS, get_support, validated_alternatives,) print(EXPORT_FORMATS) entry = get_support("yolo9", "detect", "onnx")print(entry.tier, entry.since)print(entry.constraint) print(validated_alternatives("yolo9", "detect"))libreyolo formats --family yolo9 --task detectlibreyolo formats --family yolo9 --task detect --jsonЯчейка — функция от трёх ключей, поэтому полная таблица велика и меняется с
каждым релизом. Она генерируется, а не пишется вручную, и лежит в
docs/export_support.md в репозитории библиотеки. Запрашивайте матрицу из
Python или CLI, а не читайте копию.
Три уровня
| Уровень | Значение |
|---|---|
validated | Численный паритет проверяется в CI или в задокументированном ночном прогоне |
available | Конвертация реализована, но численный паритет со средой выполнения не зафиксирован |
blocked | Предварительная проверка выбрасывает NotImplementedError с причиной ещё до трассировки |
Комбинации уровней validated и available проходят одинаково: без
подтверждения и без общего предупреждения. Записанные для них свидетельства и
ограничения остаются видны в сгенерированной документации. Заблокированная
комбинация падает до проверки зависимостей, загрузки калибровки, трассировки и
создания артефакта.
Чтобы добавить запись уровня validated, нужны тест паритета и поле since.
У SupportEntry четыре поля: tier, строка reason, релиз since и строка
constraint. Именно ограничение важно при интеграции: галочка действует только
при названных в ней условиях, а это обычно фиксированный входной холст, батч 1,
FP32 и конкретная версия среды выполнения.
Как определяется ячейка
get_support(family, task, fmt) разрешает запрос в таком порядке. Побеждает
первое сработавшее правило.
- Неизвестная задача или формат вне этих двенадцати возвращают
blocked. - Явная запись
(family, task, format)возвращается в том виде, в каком записана. - Блокировка на уровне семейства возвращает
blockedс причиной этого семейства. - Блокировка на уровне задачи возвращает
blockedс причиной этой задачи. - Для
ncnnсемейство из списка блокировок NCNN возвращаетblocked. mnnвозвращаетblocked: для этого семейства и задачи нет контракта среды выполнения.rknnвозвращаетblocked. RKNN в этой версии ограничен ровно теми вариантами детекции, что проверены на симуляторе: YOLO9-t, YOLO9-E2E-t, YOLO-NAS-s и PicoDet-s на RK3588.tensorrtиopenvinoвозвращаютavailable: путь конвертации есть, но паритет со средой выполнения для этого семейства и задачи не зафиксирован.tflite,paddle,coreaiиcoremlвозвращаютblocked, у каждого со своей причиной.- Всё остальное возвращает
available: конвертация реализована, численный паритет со средой выполнения не зафиксирован.
Асимметрия в шагах с 8 по 10 сделана намеренно. TensorRT и OpenVINO конвертируют из ONNX универсально, поэтому неперечисленную комбинацию имеет смысл попробовать. TFLite, Paddle, Core AI и CoreML требуют отдельного пути для каждого семейства, поэтому неперечисленная комбинация — это отказ, а не приглашение.
Заблокированные задачи
Эти задачи заблокированы для всех семейств, у которых нет явной записи.
| Задача | Причина |
|---|---|
ocr | Две сети с динамической обрезкой по областям не укладываются в контракт экспорта одного графа |
point | Семейство не подключено к общему контракту тепловой карты точек и декодирования пиков на стороне бэкенда |
semantic | Семейство не подключено к общему контракту плотных логитов и argmax на стороне бэкенда |
mesh | Выходы графа для меша тела, метаданные и контракт среды выполнения не определены |
normal | Семейство не подключено к контракту плотных единичных нормалей на фиксированном холсте и их перенормировки на стороне бэкенда |
panoptic | У паноптического экспорта нет контракта среды выполнения на стороне бэкенда |
gaze | Семейство не подключено к общему контракту логитов двух голов и декодирования через матожидание на стороне бэкенда |
Явная запись перекрывает эти правила — именно поэтому, например, подключённое семейство для семантической сегментации всё же экспортируется.
Заблокированные семейства
| Семейство | Заблокировано для |
|---|---|
depth_anything3 | Всех форматов; его граф глубины не входит в контракт экспортируемой среды выполнения |
domedetr | Всех форматов. PAQI задаёт число запросов для каждого изображения, поэтому трассированный граф верен только для того изображения, на котором его трассировали. Для экспортируемого DETR берите D-FINE |
eomt | Экспорта сегментации экземпляров и паноптической сегментации, для которых нет разбора на стороне среды выполнения |
l2cs | Всего, кроме ONNX, TorchScript, ExecuTorch, TensorRT и OpenVINO |
hrnet | Всего, кроме ONNX, TorchScript, OpenVINO и TensorRT |
sam, sam2, sam3, edgetam, mobilesam | Всех форматов; экспорт моделей с промптами — вне рамок контракта среды выполнения v1 |
grounding_dino, owlv2, omdet_turbo, ov_deim | Всех форматов; экспорт моделей с открытым словарём в среду выполнения — вне рамок v1 |
florence2, kosmos2, lfm2vl, internvl3, qwen3vl, smolvlm2, locateanything | Всех форматов; экспорт генеративных VLM — вне рамок v1 |
PicoSAM3 — исключение среди моделей с промптами: он экспортирует в ONNX свою сырую ROI-сеть на 96 пикселей.
Заблокировано для NCNN
Декодерам в стиле DETR нужны операции сэмплирования, которых в NCNN нет, поэтому
эти семейства заблокированы для ncnn, если явная запись не говорит иначе:
Deformable DETR, DETR, DINO-DETR, D-FINE, LW-DETR, DEIM, DEIMv2, RT-DETR,
RT-DETRv2, RT-DETRv4, RF-DETR и EC. В отказе как альтернативы названы ONNX,
OpenVINO, TorchScript и TensorRT.
Пороги паритета
Ячейка уровня validated означает, что экспортированный артефакт воспроизвёл
исходную модель в этих границах:
| Группа задач | Порог |
|---|---|
| Детекция и OBB | IoU сопоставленных рамок выше 0.95, MAE оценок уверенности ниже 0.01 |
| Сегментация и паноптическая сегментация | IoU масок выше 0.95 |
| Оценка позы | L2 по ключевым точкам ниже 2 пикселей в исходном разрешении |
| Классификация | Косинус логитов выше 0.999 и совпадение класса top-1 |
| Оценка глубины и восстановление | PSNR выше 40 дБ относительно выхода исходной модели |
| Нормали поверхности | Средняя угловая ошибка ниже 0.1 градуса |
| Точки | Положения пиков совпадают с точностью до одной выходной ячейки |
Строки запросов в DETR — неупорядоченное множество, поэтому паритет для семейств DETR сопоставляет строки запросов как множество, а не по позициям.
Экспорт
from libreyolo import LibreYOLOfrom libreyolo.export.support import get_support model = LibreYOLO("LibreYOLO9t.pt")print(model.export(format="onnx")) # Проверьте до вызова: заблокированная комбинация падает на# предварительной проверке, и в сообщении будет эта причина.blocked = get_support("domedetr", "detect", "onnx")print(blocked.tier)print(blocked.reason)Заблокированная комбинация выбрасывает NotImplementedError на предварительной
проверке, и в сообщении содержится записанная причина.
validated_alternatives(family, task) возвращает форматы, проверенные для этой
пары, — это и стоит напечатать рядом с отказом.
Аргументы, общие для всех экспортёров, перечислены на странице API модели. Аргументы, специфичные для формата, описаны на страницах отдельных форматов.
Как читать ограничение
Ячейка уровня validated — утверждение об одной измеренной конфигурации, а не о
формате вообще. Строка ограничения вида FP32, batch 1, fixed 520x520 input
означает, что паритет зафиксирован при такой форме и точности. Экспорт в другом
разрешении или с другим размером батча всё равно даст артефакт — просто это уже
не та конфигурация, из которой взято число.