Посмотреть как 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, а не читайте копию.

Сгенерированный реестр включает PP-YOLOE, TinyFormer, DEKR, PP-LiteSeg, ConvNeXt V2, PE, V-JEPA 2 и LeVJEPA. Ограничения формы и задач см. на страницах моделей. U-Net, четыре 3D-адаптера, Marigold V2 и политики роботов не предоставляют экспорт.

Три уровня

УровеньЗначение
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 требуют отдельного пути для каждого семейства, поэтому неперечисленная комбинация — это отказ, а не приглашение.

Заблокированные задачи

Эти задачи заблокированы для всех семейств, у которых нет явной записи.

ЗадачаПричина
albedoУ экспорта альбедо нет контракта среды выполнения бэкенда для линейного RGB
actУ цикла сэмплирования политики нет экспортируемого графа или контракта среды выполнения бэкенда
generateГенерация изображений запускает цикл сэмплирования по нескольким сетям, у которого нет экспортируемого графа или контракта среды выполнения бэкенда
generate3d3D-генерация запускает цикл сэмплирования по нескольким сетям, у которого нет экспортируемого графа или контракта среды выполнения бэкенда
detect3dВыходы графа 3D-детекции, метаданные камеры и контракт среды выполнения не определены
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, northmicrovision, gemma4, moondream, sensenovavision, libremodus, wevisonevlВсех форматов; экспорт генеративных 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.6.0. Ячейки для отдельных комбинаций здесь не переписаны; запрашивайте их сниппетом ниже.