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

Полная матрица экспорта

Поддержка экспорта — это поиск по тройке (семейство, задача, формат). Эта страница описывает устройство матрицы, правила, которые заполняют ячейки без явной записи, и как запросить её для интересующей вас комбинации.

Устройство матрицы

Ключ матрицы — тройка (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"))
CLI
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) разрешает запрос в таком порядке. Побеждает первое сработавшее правило.

  1. Неизвестная задача или формат вне этих двенадцати возвращают blocked.
  2. Явная запись (family, task, format) возвращается в том виде, в каком записана.
  3. Блокировка на уровне семейства возвращает blocked с причиной этого семейства.
  4. Блокировка на уровне задачи возвращает blocked с причиной этой задачи.
  5. Для ncnn семейство из списка блокировок NCNN возвращает blocked.
  6. mnn возвращает blocked: для этого семейства и задачи нет контракта среды выполнения.
  7. rknn возвращает blocked. RKNN в этой версии ограничен ровно теми вариантами детекции, что проверены на симуляторе: YOLO9-t, YOLO9-E2E-t, YOLO-NAS-s и PicoDet-s на RK3588.
  8. tensorrt и openvino возвращают available: путь конвертации есть, но паритет со средой выполнения для этого семейства и задачи не зафиксирован.
  9. tflite, paddle, coreai и coreml возвращают blocked, у каждого со своей причиной.
  10. Всё остальное возвращает 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 означает, что экспортированный артефакт воспроизвёл исходную модель в этих границах:

Группа задачПорог
Детекция и OBBIoU сопоставленных рамок выше 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 означает, что паритет зафиксирован при такой форме и точности. Экспорт в другом разрешении или с другим размером батча всё равно даст артефакт — просто это уже не та конфигурация, из которой взято число.

Форматы, уровни, порядок отката, блокировки по задачам и семействам и блокировки для NCNN прочитаны из libreyolo/export/support.py; алиасы и общие аргументы — из libreyolo/export/exporter.py; определения уровней — из docs/adr/0011-export-support-tiers.md; пороги паритета — из docs/export_support.md, всё на версии 1.5.0. Ячейки для отдельных комбинаций здесь не переписаны; запрашивайте их сниппетом ниже.