Ultralytics YOLO27:
Get Started

Экспорт модели с Ultralytics YOLO#

Ultralytics YOLO ecosystem and integrations

Введение#

Конечная цель обучения модели — развернуть её для решения реальных задач. Режим экспорта в Ultralytics YOLO26 предлагает широкий выбор вариантов экспорта обученной модели в разные форматы, что позволяет развёртывать её на различных платформах и устройствах. Это подробное руководство поможет разобраться в тонкостях экспорта моделей и покажет, как добиться максимальной совместимости и производительности.

Ознакомься с предварительным обзором невыпущенной YOLO27, чтобы узнать о запланированной поддержке экспорта.



Смотри: Как экспортировать Ultralytics YOLO26 в разные форматы для развертывания | ONNX, TensorRT, CoreML 🚀

Почему стоит выбрать режим экспорта YOLO26?#

  • Универсальность: экспортируй модель в разные форматы, включая ONNX, TensorRT, CoreML и другие.
  • Производительность: добейся ускорения вычислений на GPU до 5 раз с TensorRT и на CPU до 3 раз с ONNX или OpenVINO.
  • Совместимость: развёртывай модель на самых разных аппаратных и программных платформах.
  • Простота использования: удобные CLI и API Python для быстрого и простого экспорта моделей.

Примеры использования#

Экспортируй модель YOLO26n в другой формат, например ONNX или TensorRT. Полный список аргументов экспорта смотри в разделе «Аргументы» ниже.

Пример
from ultralytics import YOLO

# Загрузить модель
model = YOLO("yolo26n.pt")  # загрузить официальную модель
model = YOLO("path/to/best.pt")  # загрузить модель, обученную на собственных данных

# Экспортировать модель
model.export(format="onnx")

Аргументы#

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

АргументТипПо умолчаниюОписание
formatstr'torchscript'Целевой формат экспортируемой модели, например 'onnx', 'torchscript', 'engine' (TensorRT) и другие. Каждый формат обеспечивает совместимость с различными средами развёртывания.
namestrNoneНазвание целевого оборудования для форматов, которым оно требуется: архитектура Hailo ('hailo8', 'hailo8l', 'hailo10h', 'hailo15h', 'hailo15l'; по умолчанию — 'hailo8l'), чип Rockchip RKNN (по умолчанию — 'rk3588'), SoC Huawei Ascend (CANN --soc_version; по умолчанию — 'Ascend310B4'), целевое устройство Qualcomm QNN HTP (по умолчанию — '73') или устройство AMD Xilinx Versal AI Edge Series Gen 2 (по умолчанию — 've2-xc2ve3858', оценочный комплект VEK385). Не путай с парой именования запусков project/name, используемой в других режимах.
imgszint или tuple640Желаемый размер входных изображений модели. Для квадратных изображений можно указать целое число (например, 640 для 640×640), а для конкретных размеров — кортеж (height, width). Если значение не задано, при экспорте используется размер обучения, сохранённый в загруженной контрольной точке: в официальных контрольных точках YOLO26 записано 768 для depth, 224 для classify, 1024 для OBB и 640 для остальных задач; в дообученной модели записан размер imgsz, на котором она обучалась. У модели, созданной из YAML, размер обучения не записан, поэтому используется 640.
optimizeboolFalseВключает более высокий уровень оптимизации компилятора для DEEPX, снижая задержку инференса ценой увеличения времени компиляции.
quantizeint или strNoneТочность квантования: 16 (FP16 — уменьшает размер модели и может ускорить инференс на поддерживаемом оборудовании) или 8 (INT8/PTQ — дополнительно сжимает модель с минимальной потерей точности, главным образом для периферийных устройств; требуются калибровочные data/fraction); 32 или отсутствие значения означает FP32. Контрольная точка, обученная с quantize=8, всегда экспортируется в INT8: onnx и engine экспортируются на основе сохранённых в ней диапазонов без калибровки, а другие форматы или варианты точности не допускаются. 'w8a8' и 'w16a16' — псевдонимы для 8 и 16; смешанная точность 'w8a16' (веса INT8 с 16-битными активациями: CoreML, LiteRT, QNN) и 'w8a32' (динамический INT8: LiteRT) поддерживается только этими форматами. Заменяет устаревшие флаги half/int8 (half=True → 16, int8=True → 8; они по-прежнему поддерживаются с предупреждением об устаревании). Допускаются только варианты точности, поддерживаемые целевым форматом (см. ниже).
dynamicboolFalseПозволяет задавать динамические размеры входных данных при экспорте в TorchScript, ONNX, OpenVINO, TensorRT, CoreML и MNN, повышая гибкость при обработке изображений разных размеров.
simplifyboolTrueУпрощает промежуточный граф ONNX с помощью onnxslim для вариантов экспорта, в которых он создаётся (см. форматы экспорта), что может повысить производительность и совместимость с движками инференса.
opsetintNoneЗадаёт версию opset ONNX для вариантов экспорта, в которых создаётся граф ONNX (см. форматы экспорта), обеспечивая совместимость с различными парсерами и средами выполнения ONNX. Если значение не задано, используется последняя поддерживаемая версия.
workspacefloat или NoneNoneЗадаёт максимальный размер рабочей области в ГиБ для оптимизаций TensorRT, обеспечивая баланс между расходом памяти и производительностью. Используй None, чтобы TensorRT автоматически выделил до максимального объёма памяти устройства.
nmsbool, необязательноNoneNone экспортирует исходные предсказания по схеме «один ко многим» для внешней обработки NMS; True встраивает NMS, если формат это поддерживает; False выбирает голову без NMS, если она доступна. Встроенная NMS CoreML поддерживает detect, segment и pose со статическими размерами. Подробности см. в руководстве по сквозной детекции.
conffloatNoneПорог уверенности, используемый при генерации NMS во время экспорта: экспорт nms=True; экспорт detect для Hailo без сквозной обработки; экспорт detect, pose и segment для IMX, где внутри принудительно используется nms=True. Если значение не задано, по умолчанию используется 0.25.
ioufloat0.7Порог IoU, используемый при генерации NMS во время экспорта: экспорт nms=True; экспорт detect для Hailo без сквозной обработки; экспорт detect, pose и segment для IMX, где внутри принудительно используется nms=True.
max_detint300Максимальное количество детекций, сохраняемых в выходных данных экспортированной модели. Применяется к экспорту nms=True во всех форматах, кроме детекции CoreML, где в нативном конвейере NMS нет ограничения на количество детекций; также применяется к экспорту сквозной детекции без NMS (YOLO26, YOLOv10; ограничивается количеством доступных якорей) и к экспорту detect, pose и segment для IMX.
agnostic_nmsboolFalseВключает зависящую от класса NMS во всех случаях, когда NMS генерируется при экспорте стандартным конвейером nms=True, включая собственный этап NMS CoreML. Перекрывающиеся рамки с более низкими оценками подавляются между разными классами, а не только внутри одного класса. Параметр не учитывается конфигурациями NMS, генерируемыми самим Hailo или IMX: в них нет параметра для обработки без учёта классов, поэтому они всегда учитывают классы. Также применяется при сквозном экспорте без NMS (YOLO26, YOLOv10): только предотвращает появление одной и той же детекции под несколькими метками классов (дубликаты с IoU=1.0), но не подавляет разные рамки на основе порога IoU.
batchint1Задает размер пакета для инференса экспортированной модели или максимальное число изображений, которые экспортированная модель будет обрабатывать одновременно в режиме predict. Форматы, в аргументах экспорта которых нет batch (Edge TPU, IMX500, DEEPX, Hailo, AMD Xilinx), экспортируют модель с размером пакета 1 и не принимают другие значения.
devicestrNoneЗадаёт устройство для экспорта: GPU (device=0), CPU (device=cpu), MPS для Apple silicon (device=mps), NPU Huawei Ascend (device=npu или device=npu:0) или DLA для NVIDIA Jetson (device=dla:0 или device=dla:1). При экспорте в TensorRT автоматически используется GPU, но TensorRT 11.0 не поддерживает DLA.
verboseboolFalseПри экспорте format='engine' задаёт уровень подробности журнала сборщика TensorRT VERBOSE. Другие форматы экспорта игнорируют этот параметр.
datastrNoneПуть к YAML-файлу датасета, необходимый для калибровки квантования INT8; для классификации вместо этого указывается каталог датасета или встроенное имя датасета. Если значение не задано при включённом INT8, Ultralytics выбирает калибровочный датасет для конкретной задачи, когда он требуется, или использует датасет по умолчанию для задачи модели. Контрольная точка, обученная с quantize=8, содержит собственные диапазоны INT8 и не требует калибровочных данных.
splitstr'val'Часть датасета ('train', 'val' или 'test'), используемая для создания загрузчика данных калибровки квантования INT8 из data.
fractionfloat, int или list1.0Подмножество датасета для калибровки INT8: доля, количество изображений или значения [train, val, test]. 1 означает всю часть датасета, целые числа больше 1 задают количество изображений, а только необязательная часть test принимает 0/0.0 в значении «нет». Если список содержит два элемента, test остаётся полной частью датасета.

Изменяя эти параметры, можно настроить процесс экспорта под конкретные требования, например среду развёртывания, аппаратные ограничения и целевые показатели производительности. Чтобы найти оптимальный баланс между размером и скоростью модели и её точностью, важно выбрать подходящий формат и параметры.

Форматы экспорта#

Доступные форматы экспорта YOLO26 перечислены в таблице ниже. Для экспорта в любой формат используй аргумент format, например format='onnx' или format='engine'. Предсказывать или проверять качество моделей можно непосредственно после экспорта, например с помощью yolo predict model=yolo26n.onnx. После завершения экспорта для твоей модели будут показаны примеры использования. Модели также можно экспортировать прямо в браузере на платформе Ultralytics, не настраивая локальное окружение.

ФорматАргумент formatМодельМетаданныеАргументы
PyTorch-yolo26n.pt✅-
TorchScripttorchscriptyolo26n.torchscript✅imgsz, quantize, dynamic, nms, batch, device
ONNXonnxyolo26n.onnx✅imgsz, quantize, dynamic, simplify, opset, nms, batch, data, fraction, device
OpenVINOopenvinoyolo26n_openvino_model/✅imgsz, quantize, dynamic, nms, batch, data, fraction, device
TensorRTengineyolo26n.engine✅imgsz, quantize, dynamic, simplify, opset, workspace, nms, batch, data, fraction, device
CoreMLcoremlyolo26n.mlpackage✅imgsz, dynamic, quantize, nms, batch, device
Apple Core AIcoreaiyolo26n.aimodel✅imgsz, batch, quantize
TF SavedModelsaved_modelyolo26n_saved_model/✅imgsz, quantize, opset, nms, batch, data, fraction, device
TF GraphDefpbyolo26n.pb❌imgsz, opset, batch, device
TF Edge TPUedgetpuyolo26n_edgetpu.tflite✅imgsz, quantize, opset, data, fraction, device
LiteRTlitertyolo26n.tflite✅imgsz, quantize, batch, data, fraction, device
PaddlePaddlepaddleyolo26n_paddle_model/✅imgsz, batch, device
MNNmnnyolo26n.mnn✅imgsz, batch, dynamic, quantize, simplify, opset, nms, device
NCNNncnnyolo26n_ncnn_model/✅imgsz, quantize, batch, device
IMX500imxyolo26n_imx_model/✅imgsz, quantize, data, fraction, nms, device
RKNNrknnyolo26n_rknn_model/✅imgsz, batch, name, quantize, simplify, opset, data, fraction, device
ExecuTorchexecutorchyolo26n_executorch_model/✅imgsz, batch, device
Axeleraaxelerayolo26n_axelera_model/✅imgsz, batch, quantize, data, fraction, device
DEEPXdeepxyolo26n_deepx_model/✅imgsz, quantize, simplify, opset, data, optimize, device
Qualcomm QNNqnnyolo26n_qnn.onnx✅imgsz, batch, name, quantize, simplify, opset, data, fraction, device
Hailohailoyolo26n_hailo_model/✅imgsz, name, quantize, data, fraction, simplify, conf, iou, device
Huawei Ascendascendyolo26n_ascend_model/✅imgsz, batch, name, quantize, opset, simplify, nms, device
AMD Xilinxxilinxyolo26n_xilinx_model/✅imgsz, name, quantize, data, fraction, opset, simplify, device

nms=None по умолчанию возвращает исходные выходные данные для внешней NMS. Укажи nms=False, чтобы выбрать доступную голову без NMS; неподдерживаемые форматы используют собственный путь вывода. Элементы nms выше обозначают форматы, в которые можно встроить NMS с помощью nms=True.

Автоматическая установка зависимостей для экспорта

Для большинства форматов нужны пакеты, которые не входят в ultralytics. Если пакет отсутствует, при экспорте он устанавливается во время выполнения с помощью uv или pip, а в Linux — с помощью apt для системных пакетов, например Java для IMX. Компилятор Edge TPU скачивается без apt или sudo. Чтобы зафиксировать окружение, например в образе контейнера, задании CI или производственном сервисе, задай YOLO_AUTOINSTALL=False. Экспорт по-прежнему проверит наличие недостающих пакетов и сообщит о них, но не изменит окружение и завершится с ошибкой, пока пакеты не будут установлены.

export YOLO_AUTOINSTALL=False

Параметры квантования#

Используй аргумент quantize, чтобы задать точность экспорта. Строковые значения не чувствительны к регистру, а Ultralytics приводит поддерживаемые псевдонимы к каноническому виду перед экспортом:

Запрашиваемое значениеКаноническое значениеЗначение
8, "8", "int8", "w8a8"8Веса и активации INT8
16, "16", "fp16", "w16a16"16Веса и активации FP16
32, "32", "fp32", "w32a32"32Экспорт в FP32; как при отсутствии значения, кроме CoreML NMS ML Programs, где по умолчанию используется FP16
"w8a16""w8a16"Веса INT8 с 16-битными активациями (FP16; INT16 в LiteRT)
"w8a32""w8a32"Веса INT8 с активациями FP32 (динамический INT8 в LiteRT, калибровка не требуется)

Устаревшие флаги half=True и int8=True по-прежнему принимаются с предупреждениями об устаревании и перенаправляются на quantize=16 и quantize=8.

Не каждый формат экспорта поддерживает любую точность. При явном запросе quantize экспорт либо выполняется с указанной точностью, либо завершается ошибкой до начала экспорта:

ФорматFP32 (32/не задано)FP16 (16)INT8 (8)W8A16 ("w8a16")Примечания
PyTorch✅Н/ДН/ДН/ДШтатный формат обучения/контрольных точек.
TorchScript✅✅ Только GPU❌❌Для экспорта TorchScript в FP16 требуется device=0; экспорт на CPU выполняется в FP32.
ONNX✅✅✅❌Для INT8 используется статическое квантование ONNX Runtime и калибровочные данные.
OpenVINO✅✅✅❌Для INT8 используется посттренировочное квантование NNCF.
TensorRT✅✅✅❌Для INT8 нужны репрезентативные калибровочные данные.
CoreML✅¹✅✅✅В CoreML для INT8 квантируются веса; в W8A16 используются веса INT8 с активациями FP16. ¹Если значение не задано, для NMS ML Programs используется FP16; экспорт сегментационных моделей и моделей позы с nms=True всегда выполняется в FP16.
Core AI✅✅❌❌По умолчанию используется FP32 либо ресурс FP16 .aimodel с quantize=16; варианта с INT8 нет.
TF SavedModel✅❌✅❌При экспорте в INT8 используется калибровка TensorFlow.
TF GraphDef✅❌❌❌Преобразование точности во время экспорта не выполняется.
Edge TPU❌❌✅ автоматически❌Для Edge TPU требуется INT8; если значение не задано, он включается автоматически.
LiteRT✅❌✅✅Для статического INT8 (8) и "w8a16" (веса int8 + активации int16) используются калибровочные данные; также поддерживается динамический INT8 "w8a32" (калибровка не требуется). quantize=16 не является отдельным форматом экспорта: модель FP32 выполняется в FP16 во время работы через делегат GPU.
PaddlePaddle✅❌❌❌Преобразование точности во время экспорта не выполняется.
MNN✅✅✅❌Для INT8 квантуются веса при конвертации в MNN.
NCNN✅✅❌❌Формат для мобильной и встраиваемой среды выполнения.
IMX500❌❌✅ автоматически❌Для IMX500 требуется квантование; если значение не задано, INT8 включается автоматически.
RKNN❌✅ Зависит от чипа✅❌RK3588/RK3576/RK3566/RK3568/RK3562/RK2118/RV1126B поддерживают FP16 или INT8; варианты RV1103/RV1106 поддерживают только INT8.
ExecuTorch✅❌❌❌Преобразование точности во время экспорта не выполняется.
Axelera❌❌✅ автоматически❌Для экспорта Axelera требуется INT8; если значение не задано, он включается автоматически.
DEEPX❌❌✅ автоматически❌Для экспорта DEEPX требуется INT8; если значение не задано, он включается автоматически.
Qualcomm QNN❌❌❌✅ автоматическиДля экспорта QNN HTP фиксирован формат: веса INT8 с 16-битными активациями.
Hailo❌❌✅ автоматически❌Для экспорта Hailo требуется INT8; если значение не задано, он включается автоматически.
Huawei Ascend❌✅ автоматически❌❌Свёрточные операции Ascend AI Core принимают только входные данные FP16/INT8, поэтому ATC компилирует модель в FP16; если значение не задано, он включается автоматически.
AMD Xilinx❌❌✅ автоматически❌Для экспорта AMD Xilinx требуется Vitis AI INT8 (VINT8); параметр включается автоматически, если не задан.

Для экспорта в INT8 и W8A16 предоставь репрезентативные калибровочные данные с помощью data, например data="coco8.yaml", если в документации целевой интеграции не указано значение по умолчанию или автоматическое включение. Схема "w8a32" (динамический INT8) в LiteRT не требует калибровочных данных.

Квантование с учётом обучения#

Описанный выше экспорт в INT8 использует посттренировочное квантование (PTQ): диапазоны значений фиксируются за один проход калибровки по data. При квантовании с учётом обучения (QAT) веса, устойчивые к INT8, обучаются путём дообучения с имитацией квантования в цикле. Это позволяет восстановить точность, потерянную при одной лишь калибровке. Передай quantize=8 в train, чтобы дообучить предварительно обученную контрольную точку, а затем экспортируй её обычным способом:

Пример
from ultralytics import YOLO

model = YOLO("yolo26n.pt")
model.train(
    data="coco.yaml",
    quantize=8,
    epochs=5,
    batch=64,
    optimizer="AdamW",
    lr0=0.00001,
    lrf=0.1,
    warmup_epochs=0.5,
    cos_lr=True,
    mosaic=0.0,
)
model.export(format="engine", quantize=8)  # диапазоны сохраняются вместе с контрольной точкой, калибровочные данные не нужны

При дообучении предварительно обученной контрольной точки используй небольшую скорость обучения. Сначала QAT может снизить точность, а его преимущество перед посттренировочным квантованием зависит от модели, набора данных и бюджета обучения. Проверь экспортированную модель, сравнив её и с исходной контрольной точкой, и с моделью после посттренировочного квантования; метрики имитации квантования во время обучения не подтверждают точность модели при развёртывании.

Целесообразность QAT зависит от того, насколько хорошо собственная калибровка экспортного бэкенда обрабатывает модель. Ниже приведены значения mAP50-95 на COCO val2017, измеренные на движках TensorRT 10.16 с imgsz=640 и размером пакета 1; каждая контрольная точка QAT обучалась с epochs=20 patience=3:

МодельДвижок FP32Движок PTQ INT8Движок QAT INT8
yolo26n0.40320.39340.3935
yolo26s0.47940.44120.4711
yolo26m0.52690.46960.5137
yolo26l0.54400.48890.5307
yolo26x0.57010.51380.5527

По сравнению с FP32 QAT снижает mAP50-95 на 0.008–0.017 во всём диапазоне, тогда как посттренировочное квантование снижает показатель на 0.010 для yolo26n и на 0.038–0.057 для более крупных моделей. Поэтому на самой маленькой модели QAT почти ничего не даёт — калибровка и так хорошо работает, — а на остальных моделях улучшение составляет 0.030–0.044. На другом наборе данных, в другом формате экспорта или другой версии TensorRT результаты будут иными, поэтому измерь их самостоятельно.

Для моделей QAT требуется compile=False; квантованные модули ModelOpt не поддерживают torch.compile.

Последние свёрточные слои выходной части сети намеренно остаются в формате с плавающей точкой, чтобы ограничить потерю точности INT8; для неквантованных слоёв TensorRT включает смешанную точность FP16. QAT выполняется с помощью NVIDIA TensorRT Model Optimizer, который автоматически устанавливается при первом использовании; чтобы загрузить полученную контрольную точку, этот пакет должен быть установлен. Диапазоны сохраняются вместе с контрольной точкой, а при экспорте через onnx и engine они записываются в виде узлов Q/DQ; остальные форматы используют калибровку и не принимают контрольные точки QAT.

Что дальше#

Найди руководство по интеграции для своей целевой платформы развёртывания: инструкции по запуску экспортированной модели для ONNX, TensorRT, CoreML и других решений собраны в полном списке интеграций.

Часто задаваемые вопросы#

  • Экспортировать модель YOLO26 в формат ONNX с помощью Ultralytics просто. Для экспорта моделей доступны методы Python и CLI.

    Пример
    from ultralytics import YOLO
    
    # Загрузить модель
    model = YOLO("yolo26n.pt")  # загрузить официальную модель
    model = YOLO("path/to/best.pt")  # загрузить модель, обученную на собственных данных
    
    # Экспортировать модель
    model.export(format="onnx")

    Подробнее о процессе, включая расширенные параметры, например настройку разных размеров входных данных, см. в руководстве по интеграции ONNX.

  • Использование TensorRT для экспорта модели значительно повышает производительность. Модели YOLO26, экспортированные в TensorRT, могут работать на GPU до 5 раз быстрее, что делает этот формат отличным выбором для приложений инференса в реальном времени.

    • Универсальность: оптимизируй модели для конкретной аппаратной конфигурации.
    • Скорость: ускорь инференс с помощью передовых методов оптимизации.
    • Совместимость: легко интегрируй модели с оборудованием NVIDIA.

    Подробнее об интеграции TensorRT см. в руководстве по интеграции TensorRT.

  • Квантование INT8 отлично подходит для сжатия модели и ускорения инференса, особенно на периферийных устройствах. Вот как включить квантование INT8:

    Пример
    from ultralytics import YOLO
    
    model = YOLO("yolo26n.pt")  # Загрузить модель
    model.export(format="onnx", quantize=8, data="coco8.yaml")

    Квантование INT8 можно применять к таким форматам, как ONNX, TensorRT, OpenVINO, CoreML, Rockchip RKNN и AMD Xilinx. Для оптимальных результатов квантования укажи репрезентативный набор данных с помощью параметра data. Допустимые значения quantize и поддерживаемые форматы смотри в разделе Параметры квантования.

  • Динамический размер входных данных позволяет экспортированной модели работать с изображениями разных размеров, обеспечивая гибкость и эффективную обработку в разных сценариях использования. При экспорте в такие форматы, как ONNX или TensorRT, включение динамического размера входных данных позволяет модели без проблем адаптироваться к различным формам входных данных.

    Чтобы включить эту функцию, при экспорте используй флаг dynamic=True:

    Пример
    from ultralytics import YOLO
    
    model = YOLO("yolo26n.pt")
    model.export(format="onnx", dynamic=True)

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

  • Модели PyTorch и динамические экспорты по умолчанию используют дополнение до минимального прямоугольника, тогда как статические экспорты дополняют изображения до полного imgsz, поэтому детекции рядом с порогом уверенности могут отличаться. Чтобы результаты нативного инференса совпадали со статическим экспортом, используй rect=False или экспортируй модель с dynamic=True, если этот параметр поддерживается.

  • Чтобы оптимизировать производительность модели, важно понимать аргументы экспорта и правильно их настраивать:

    • format: Целевой формат экспортируемой модели (например, onnx, torchscript, saved_model).
    • imgsz: Требуемый размер изображения на входе модели (например, 640 или (height, width)).
    • quantize: Точность квантования, например 8/"int8", 16/"fp16", 32/"fp32" или смешанные схемы квантования весов/активаций "w8a16" и "w8a32" (динамический INT8 в LiteRT) в поддерживаемых форматах. См. раздел «Параметры квантования».
    • dynamic: Принимает входные данные разных размеров в форматах, поддерживающих динамические формы, например ONNX, OpenVINO и TensorRT.
    • nms: Выбирает необработанные выходные данные для внешнего NMS (None), встроенный NMS (True) или голову без NMS (False).
    • device: Устройство, используемое для трассировки модели при экспорте, например cpu или 0 для первого GPU CUDA; для экспорта TorchScript в FP16 требуется GPU.

    Для развёртывания на конкретных аппаратных платформах используй специализированные форматы экспорта: TensorRT для GPU NVIDIA, CoreML для устройств Apple или Edge TPU для устройств Google Coral.

  • При экспорте модели YOLO в такие форматы, как ONNX или TensorRT, структура выходного тензора зависит от задачи модели. Понимание этих выходных данных важно для реализации собственного инференса.

    Для моделей детекции YOLO26 (например, yolo26n.pt), экспортированных с помощью nms=False, поддерживаемые форматы выдают результат без NMS формы (batch_size, max_detections, 6) со значениями [x1, y1, x2, y2, confidence, class_id]. При стандартном max_det=300 это обычно (batch_size, 300, 6). В некоторых форматах с ограничениями автоматически используется традиционная структура выходных данных, если операторы сквозной обработки не поддерживаются.

    По умолчанию (nms=None) модели детекции, включая YOLO26, экспортируют исходные предсказания one-to-many: обычно результат представляет собой один тензор формы (batch_size, 4 + num_classes, num_predictions), в котором каналы содержат координаты рамок и оценки для каждого класса, а num_predictions зависит от разрешения входных данных при экспорте (и может быть динамическим). В руководстве Сквозная детекция описано, в каких форматах сохраняется сквозной выход.

    Для моделей сегментации (например, yolo26n-seg.pt) обычно получаются два результата: первый тензор формы (batch_size, 4 + num_classes + mask_dim, num_predictions) (рамки, оценки классов и коэффициенты масок), а второй тензор формы (batch_size, mask_dim, proto_h, proto_w) содержит прототипы масок, которые используются вместе с коэффициентами для создания масок экземпляров. Размеры зависят от разрешения входных данных при экспорте (и могут быть динамическими).

    Для моделей оценки позы (например, yolo26n-pose.pt) выходной тензор обычно имеет форму (batch_size, 4 + num_classes + keypoint_dims, num_predictions), где keypoint_dims зависит от спецификации позы (например, от количества ключевых точек и наличия оценки уверенности), а num_predictions зависит от разрешения входных данных при экспорте (и может быть динамическим).

    В примерах из раздела Примеры инференса ONNX показано, как обрабатывать выходные данные для каждого типа модели.

  • В настоящее время Ultralytics не предоставляет отдельный API инференса на C++ для моделей YOLO. Для развертывания на C++ экспортируй модель в формат для среды выполнения, например ONNX, TensorRT, TorchScript или MNN, а затем загрузи экспортированный артефакт с помощью нативного API этой среды выполнения для C++.

    Например, экспортируй модель детекции с помощью yolo export model=yolo26n.pt format=onnx и запусти файл .onnx с ONNX Runtime C++ либо выполни экспорт с помощью format=engine и запусти движок TensorRT из приложения на C++. При использовании собственной постобработки на C++ учитывай структуру выходного тензора для выбранной задачи и параметров экспорта; при экспорте моделей детекции YOLO26 по умолчанию возвращаются исходные тензоры предсказаний, для которых требуется внешняя NMS. Выполни экспорт с помощью nms=False, чтобы получить детекции без NMS формы (batch, max_det, 6), или используй nms=True, чтобы встроить NMS в поддерживаемых форматах.

  • При экспорте с помощью quantize=16 (FP16) или quantize=8 (INT8) большинство тензоров преобразуется в формат с меньшей точностью, чтобы уменьшить размер модели и повысить производительность. Однако, если включён nms=False, постобработка (включая индексы классов) встраивается непосредственно в экспортированный граф.

    Тензор output0 содержит индексы классов, которые внутри представлены числами с плавающей точкой. Из-за ограниченной точности мантиссы FP16 не может надёжно представлять целые числа больше 2048. Чтобы избежать потенциальной потери точности или некорректных ID классов, output0 намеренно сохраняется в формате FP32.

    Если нужны выходные данные целиком в FP16, выполни экспорт с помощью nms=None на GPU и выполняй постобработку отдельно. При экспорте ONNX в FP16 на CPU входные и выходные данные в любом случае остаются в FP32, а преобразуется только внутренний граф.

Комментарии