Ultralytics YOLO27:

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

Ultralytics YOLO ecosystem and integrations

Введение#

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

Смотри предпросмотр невыпущенного YOLO27 для запланированной поддержки экспорта.



Watch: How to Export Ultralytics YOLO26 in different formats for Deployment | ONNX, TensorRT, CoreML 🚀

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

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

Основные функции режима экспорта#

Вот некоторые из наиболее примечательных возможностей:

  • Экспорт в один клик: Простые команды для экспорта в различные форматы.
  • Пакетный экспорт: Экспорт моделей, поддерживающих пакетный вывод (batch inference).
  • Оптимизированный вывод: Экспортированные модели оптимизированы для более быстрого выполнения инференса.
  • Учебные видеоматериалы: Подробные руководства и уроки для комфортного процесса экспорта.
Совет
  • Экспортируй в ONNX или OpenVINO для достижения до 3 раз большей производительности на CPU.
  • Экспортируй в TensorRT для достижения до 5 раз большей производительности на GPU.

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

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

Пример
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n.pt")  # load an official model
model = YOLO("path/to/best.pt")  # load a custom-trained model

# Export the model
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'). Не следует путать с парой project/name для именования запусков, используемой другими режимами.
imgszint или tuple640Желаемый размер изображения для входных данных модели. Может быть целым числом для квадратных изображений (например, 640 для 640×640) или кортежем (height, width) для конкретных размеров. Если значение не передано, экспорт использует размер обучения, записанный в загруженной контрольной точке: официальные контрольные точки YOLO26 содержат 768 для depth, 224 для classify, 1024 для OBB и 640 для остальных задач, тогда как дообученная модель сохраняет значение imgsz, с которым она обучалась. У модели, созданной из YAML, размер обучения не записан, поэтому используется 640.
kerasboolFalseВключает экспорт в формат Keras для TensorFlow SavedModel, обеспечивая совместимость с сервисом TensorFlow и API.
optimizeboolFalseВключает более высокий уровень оптимизации компилятора для DEEPX, уменьшая задержку инференса и увеличивая время компиляции.
quantizeint или strNoneТочность квантования: 16 (FP16, уменьшает размер модели и может ускорить инференс на поддерживаемом оборудовании) или 8 (INT8/PTQ, дополнительно сжимает модель с минимальной потерей точности, в основном для краевых устройств; требуется калибровка data/fraction); 32/не задано — это FP32. Чекпоинт, обученный с помощью quantize=8, всегда экспортирует INT8: onnx и engine выполняют экспорт из диапазонов, которые он содержит, без калибровки, а другие форматы или точности отклоняются. Форматы экспорта, поддерживающие смешанную точность весов и активаций, также принимают обозначение 'w8a8'/'w16a16'/'w8a16'/'w8a32'. Заменяет устаревшие флаги half/int8 (half=True16, int8=True8, по-прежнему принимаются с предупреждением об устаревании). Допускаются только точности, поддерживаемые целевым форматом (см. ниже).
dynamicboolFalseРазрешает динамические размеры входных данных для экспортов TorchScript, ONNX, OpenVINO, TensorRT и CoreML, повышая гибкость при работе с изображениями разных размеров.
simplifyboolTrueУпрощает промежуточный граф ONNX с помощью onnxslim для экспортов, которые его создают (см. раздел Форматы экспорта), что потенциально повышает производительность и совместимость с механизмами инференса.
opsetintNoneОпределяет версию opset ONNX для экспортов, создающих граф ONNX (см. раздел Форматы экспорта), обеспечивая совместимость с разными парсерами и средами выполнения ONNX. Если значение не задано, используется последняя поддерживаемая версия.
workspacefloat или NoneNoneЗадаёт максимальный размер рабочего пространства в ГиБ для оптимизаций TensorRT, обеспечивая баланс между использованием памяти и производительностью. Используй None для автоматического выделения TensorRT в пределах максимального объёма устройства.
nmsbool, необязательноNoneNone экспортирует сырые предсказания «один ко многим» для внешнего NMS; True встраивает NMS там, где это поддерживается; False выбирает голову без NMS, если она доступна. Встроенный NMS для CoreML поддерживает детектирование, сегментацию и позу со статическими формами. См. руководство по сквозному детектированию.
conffloatNoneПорог уверенности, используемый везде, где создаётся NMS во время экспорта: экспорты nms=True; экспорты обнаружения Hailo без сквозного режима; а также экспорты обнаружения, позы и сегментации IMX, которые внутренне принудительно используют nms=True. Если значение не задано, по умолчанию используется 0.25.
ioufloat0.7Порог IoU, используемый везде, где создаётся NMS во время экспорта: экспорты nms=True; экспорты обнаружения Hailo без сквозного режима; а также экспорты обнаружения, позы и сегментации IMX, которые внутренне принудительно используют nms=True.
max_detint300Максимальное количество обнаружений, сохраняемых в выводе экспортированной модели. Применяется к экспортам nms=True во всех форматах, кроме детекции CoreML, чей встроенный конвейер NMS не имеет ограничения на количество обнаружений, а также к экспортам детекции "end-to-end" без NMS (YOLO26, YOLOv10, с ограничением до числа доступных анкеров) и экспортам детекции, позы и сегментации IMX.
agnostic_nmsboolFalseВключает независимое от класса NMS везде, где NMS во время экспорта создаётся через стандартный конвейер nms=True, включая собственный этап NMS CoreML, подавляя перекрывающиеся рамки с более низкими оценками между разными классами, а не только внутри одного класса. Этот параметр не учитывается собственными сгенерированными конфигурациями NMS Hailo и IMX, в которых нет опции независимости от класса и которые остаются зависимыми от класса независимо от этого флага. Он также встраивается в сквозные экспорты без NMS (YOLO26, YOLOv10), где предотвращает только появление одного обнаружения с несколькими метками классов (дубликаты IoU=1.0), но не подавляет различные рамки по порогу IoU.
batchint1Определяет размер батча инференса экспортированной модели или максимальное количество изображений, которые экспортированная модель будет обрабатывать одновременно в режиме predict. Для экспортов Edge TPU автоматически устанавливается значение 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Повышает уровень журналирования сборщика TensorRT до VERBOSE во время экспорта format='engine'. Другие форматы экспорта этот параметр игнорируют.
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 Platform без какой-либо локальной настройки.

ФорматАргумент formatМодельМетаданныеАргументы
PyTorch-yolo26n.pt-
TorchScripttorchscriptyolo26n.torchscriptimgsz, quantize, dynamic, nms, batch, device
ONNXonnxyolo26n.onnximgsz, quantize, dynamic, simplify, opset, nms, batch, data, fraction, device
OpenVINOopenvinoyolo26n_openvino_model/imgsz, quantize, dynamic, nms, batch, data, fraction, device
TensorRTengineyolo26n.engineimgsz, quantize, dynamic, simplify, opset, workspace, nms, batch, data, fraction, device
CoreMLcoremlyolo26n.mlpackageimgsz, dynamic, quantize, nms, batch, device
TF SavedModelsaved_modelyolo26n_saved_model/imgsz, keras, quantize, opset, nms, batch, data, fraction, device
TF GraphDefpbyolo26n.pbimgsz, opset, batch, device
TF Edge TPUedgetpuyolo26n_edgetpu.tfliteimgsz, quantize, opset, data, fraction, device
PaddlePaddlepaddleyolo26n_paddle_model/imgsz, batch, device
MNNmnnyolo26n.mnnimgsz, 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.onnximgsz, batch, name, quantize, simplify, opset, data, fraction, device
LiteRTlitertyolo26n.tfliteimgsz, quantize, batch, data, fraction, device
Hailohailoyolo26n_hailo_model/imgsz, name, quantize, data, fraction, simplify, conf, iou
Huawei Ascendascendyolo26n_ascend_model/imgsz, batch, name, quantize, opset, simplify, nms
Apple Core AIcoreaiyolo26n.aimodelimgsz, batch, quantize

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

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

Для большинства форматов требуются пакеты, которые не устанавливаются вместе с ultralytics. Если какой-то из них отсутствует, экспорт устанавливает его во время выполнения с помощью uv или pip, а на Linux — с помощью apt для системных пакетов, таких как компилятор Edge TPU или Java для IMX. Чтобы зафиксировать окружение, например в образе контейнера, задаче 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, которые по умолчанию используют 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Экспорт FP16 TorchScript требует device=0; экспорт для CPU выполняется в формате FP32.
ONNXINT8 использует статическое квантование ONNX Runtime и калибровочные данные.
OpenVINOINT8 использует посттренировочное квантование NNCF.
TensorRTINT8 требует репрезентативных калибровочных данных.
CoreML✅¹CoreML INT8 представляет собой квантование весов; W8A16 использует веса INT8 с активациями FP16. ¹Программы NMS ML с ненастроенными параметрами по умолчанию используют FP16.
TF SavedModelЭкспорт INT8 использует калибровку TensorFlow.
TF GraphDefПреобразование точности во время экспорта отсутствует.
Edge TPU✅ автоEdge TPU требует INT8; этот параметр включается автоматически, если он не задан.
PaddlePaddleПреобразование точности во время экспорта отсутствует.
MNNINT8 — это квантование весов посредством конвертации 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-битными активациями.
LiteRTСтатический INT8 (8) и "w8a16" (веса int8 + активации int16) используют калибровочные данные; также поддерживается динамический INT8 "w8a32" (без калибровки). quantize=16 не является отдельным экспортом; модель FP32 работает в формате FP16 во время выполнения через делегат GPU.
Hailo✅ автоДля экспорта в Hailo требуется формат INT8; он включается автоматически, если не задан.
Huawei Ascend✅ автоЯдра Ascend AI Core принимают на вход только данные FP16/INT8, поэтому ATC компилирует FP16; этот режим включается автоматически, если он не задан.
Core AIПо умолчанию используется FP32 или актив FP16 .aimodel с quantize=16; пути для INT8 нет.

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

Обучение с учетом квантования#

Указанные выше экспорты 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)  # ranges travel with the checkpoint, no calibration data needed

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

Польза от 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

QAT обходится в 0,008–0,017 mAP50-95 по сравнению с FP32 во всем диапазоне, в то время как посттренировочное квантование обходится в 0,010 на yolo26n и в 0,038–0,057 на более крупных моделях. Таким образом, QAT почти ничего не дает на самой маленькой модели, где калибровка и так работает хорошо, и дает 0,030–0,044 на остальных. Ожидай другие показатели на другом наборе данных, формате экспорта или версии TensorRT и измеряй их самостоятельно.

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

Финальные свертки выходного слоя головы намеренно оставляются в формате float для ограничения потери точности 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
    
    # Load a model
    model = YOLO("yolo26n.pt")  # load an official model
    model = YOLO("path/to/best.pt")  # load a custom-trained model
    
    # Export the model
    model.export(format="onnx")

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

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

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

    Чтобы узнать больше об интеграции TensorRT, см. руководство по интеграции TensorRT.

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

    Пример
    from ultralytics import YOLO
    
    model = YOLO("yolo26n.pt")  # Load a model
    model.export(format="onnx", quantize=8, data="coco8.yaml")

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

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

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

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

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

  • Понимание и настройка аргументов экспорта имеют решающее значение для оптимизации производительности модели:

    • format: Целевой формат для экспортированной модели (например, onnx, torchscript, saved_model).
    • imgsz: Желаемый размер изображения на входе модели (например, 640 или (height, width)).
    • quantize: Точность квантования, такая как 8/"int8", 16/"fp16", 32/"fp32" или схемы со смешанными весами/активациями "w8a16" и "w8a32" (динамический INT8 LiteRT) на поддерживаемых форматах. См. Параметры квантования.
    • optimize: Включает более высокую степень оптимизации компилятора для экспорта DEEPX.

    Для развертывания на определенных аппаратных платформах рассмотри возможность использования специализированных форматов экспорта, таких как TensorRT для графических процессоров 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, экспортируют сырые предсказания «один к многим»: вывод обычно представляет собой один тензор размером (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 в настоящее время не предоставляет выделенный C++ API инференса для моделей YOLO. Для развертывания на C++ экспортируй модель в формат среды выполнения, такой как ONNX, TensorRT, TorchScript или MNN, а затем загрузи экспортированный артефакт с помощью нативного C++ API этой среды выполнения.

    Например, экспортируй модель детектирования с помощью yolo export model=yolo26n.pt format=onnx и запусти файл .onnx с помощью ONNX Runtime C++, либо выполни экспорт с помощью format=engine и запусти движок TensorRT из приложения на 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 из-за ограниченной точности мантиссы. Чтобы избежать потенциальной потери точности или неверных идентификаторов классов, output0 намеренно сохраняется в формате FP32.

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

    Если требуются полные выходы FP16, экспортируй с помощью nms=None и выполняй постобработку внешним образом.

Комментарии