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

libreyolo export

Превращает один чекпойнт в один формат для развёртывания и пишет артефакт в weights/. Формат решает, какие из аргументов ниже применимы.

Команда
libreyolo export
Обязательный
model
Вывод
weights/<checkpoint-stem>[_fp16|_int8]<format-suffix>

Синопсис

bash
libreyolo export model=<name|path> [format=<format>] [key=value ...]

Аргументы задаются парами key=value, POSIX-форма тоже работает, поэтому format=onnx и --format onnx — один и тот же аргумент.

Аргументы

АргументПо умолчаниюОписание
modelВеса модели .pt. Обязательный
formatonnxФормат экспорта: onnx, torchscript, executorch, tensorrt, openvino, paddle, mnn, rknn, ncnn, tflite, coreml, coreai
nameЦелевая платформа RKNN, сейчас только rk3588. С любым другим форматом отклоняется
imgszРазмер входного изображения: 640 или 480x640 (HxW). 480,640 тоже принимается. Если не задан — собственный размер модели
batch1Размер батча при экспорте
halffalseТочность FP16
int8falseКвантизация INT8
dynamicfalseДинамические формы входа (ONNX)
simplifytrueУпрощение графа ONNX
nmsfalseВстроить NMS в модель. Только ONNX и CoreML
conf0.25Порог уверенности для встроенного NMS
iou0.45Порог IoU для встроенного NMS
max_det300Максимум детекций для встроенного NMS в ONNX
opsetВерсия opset для ONNX. Если не задана, выбирается автоматически
dataКалибровочные данные для INT8
fraction1.0Доля калибровочных данных, которая используется
deviceautoУстройство для трассировки
allow_download_scriptsfalseРазрешить встроенный Python в блоках download в YAML датасета
jsonfalseВывод JSON в stdout
quietfalseПодавить stderr
verbosefalseПодробный лог экспорта
verifyfalseЗапустить PC-симулятор RKNN Toolkit2 и сравнить с ONNX Runtime. Только RKNN
help_jsonfalseВывести схему команды в JSON и выйти

engine — псевдоним для tensorrt, а litert — псевдоним для tflite. Оба приводятся к каноническому имени до того, как что-либо будет записано, поэтому в JSON-выводе и в строке лога всегда стоит tensorrt или tflite.

Примеры

Базовый пример
# Пишет weights/LibreYOLO9s.onnxlibreyolo export model=LibreYOLO9s.pt format=onnx imgsz=640
NMS внутри графа
libreyolo export model=LibreYOLO9s.pt format=onnx \  nms=true conf=0.25 iou=0.45 max_det=300
Запуск артефакта
libreyolo export model=LibreYOLO9s.pt format=onnx imgsz=640 # Фабрика ориентируется на суффикс файла, поэтому экспорт загружается как чекпойнт.libreyolo predict model=weights/LibreYOLO9s.onnx \  source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg

Примечания

Куда попадает файл

Команда не принимает путь для вывода. Артефакт записывается в weights/, имя складывается из основы имени исходного чекпойнта и суффикса формата, а когда запрошена одна из этих точностей, в него вставляется _fp16 или _int8. LibreYOLO9s.pt, экспортированный в ONNX с FP16, становится weights/LibreYOLO9s_fp16.onnx. В JSON-результате есть итоговый output_path, размер файла в МБ и форма входа в виде [batch, 3, height, width].

Комбинации, которые отклоняются

nms=true принимается для ONNX и CoreML и для любого другого формата отклоняется с nms_unsupported_format. В ONNX он принудительно выключает dynamic, потому что встроенный граф зафиксирован на батче 1, и сообщает об этом в stderr. В CoreML он учитывает conf и iou, но не max_det, поэтому max_det, отличный от значения по умолчанию, рядом с format=coreml nms=true завершается с config_unsupported.

half=true вместе с int8=true — не ошибка. Побеждает INT8, half отбрасывается, а в stderr уходит предупреждение.

name и verify сегодня относятся только к RKNN. Если передать любой из них с другим форматом, он не игнорируется, а команда завершается с config_unsupported.

Какие форматы поддерживает семейство

Поддержка определяется для каждого семейства и каждой задачи, а не глобально. libreyolo formats family=<family> task=<task> печатает уровень поддержки каждого формата для этой комбинации, с причиной и приложенным ограничением. Аргументы описаны в libreyolo formats.

Некоторым форматам нужна дополнительная установка, некоторым — тулчейн. Отсутствующая Python-зависимость завершается с export_dep_missing; точность, которую формат не может выдать, — с format_precision_unsupported.

Запуск того, что вы экспортировали

Экспортированные артефакты загружаются через ту же фабрику моделей, что и чекпойнты, по суффиксу файла, поэтому libreyolo predict model=weights/LibreYOLO9s.onnx работает без какой-либо дальнейшей конвертации. Исключение — три опции предсказания, которые на бэкендах сред выполнения отклоняются: tiling, overlap_ratio и output_file_format.

У двух целей развёртывания есть собственные страницы: NVIDIA DeepStream и NVIDIA Jetson.

Вывод и коды возврата

В stdout уходит результат, прогресс идёт в stderr. Код возврата — 0 при успехе, 2 при ошибке использования или конфигурации, 4 когда модель не удаётся загрузить, 5 при неизвестном формате, отсутствующей зависимости для экспорта, неподдерживаемой точности или отклонённом запросе на встроенный NMS, и 1 при прочих сбоях во время выполнения.

Смежное: libreyolo quantize — остаётся в PyTorch и пишет чекпойнт, а не артефакт для развёртывания.

Проверено с LibreYOLO v1.5.0.