Meet YOLO26: next-gen vision AI.

Link to this sectionЭкспорт моделей с Ultralytics YOLO#

Ultralytics YOLO ecosystem and integrations

Link to this sectionВведение#

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



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

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

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

Link to this sectionКлючевые функции режима экспорта#

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

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

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

Экспортируй модель 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")

Link to this sectionАргументы#

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

АргументТипПо умолчаниюОписание
formatstr'torchscript'Целевой формат для экспортированной модели, такой как 'onnx', 'torchscript', 'engine' (TensorRT) или другие. Каждый формат обеспечивает совместимость с различными средами развертывания.
imgszint или tuple640Желаемый размер изображения для входных данных модели. Может быть целым числом для квадратных изображений (например, 640 для 640×640) или кортежем (height, width) для задания конкретных размеров.
kerasboolFalseВключает экспорт в формат Keras для TensorFlow SavedModel, обеспечивая совместимость с TensorFlow serving и API.
optimizeboolFalseПрименяет оптимизацию для мобильных устройств при экспорте в TorchScript, что потенциально уменьшает размер модели и улучшает производительность инференса. Несовместимо с форматом NCNN или устройствами с CUDA. Для DEEPX включает более глубокую оптимизацию компилятора, что снижает задержку инференса, но увеличивает время компиляции.
halfboolFalseВключает квантование FP16 (половинной точности), уменьшая размер модели и потенциально ускоряя инференс на поддерживаемом оборудовании. Несовместимо с квантованием INT8 или экспортом только для CPU. Доступно только для некоторых форматов, например ONNX (см. ниже).
int8boolFalseАктивирует квантование INT8, дополнительно сжимая модель и ускоряя инференс с минимальной потерей точности, преимущественно для периферийных устройств. При использовании с TensorRT выполняет пост-тренировочную квантование (PTQ).
dynamicboolFalseРазрешает использование динамических размеров входных данных для экспорта в TorchScript, ONNX, OpenVINO, TensorRT и CoreML, повышая гибкость при обработке изображений разных размеров.
simplifyboolTrueУпрощает граф модели для экспорта в ONNX с помощью onnxslim, что потенциально улучшает производительность и совместимость с движками инференса.
opsetintNoneSpecifies the ONNX opset version for compatibility with different ONNX parsers and runtimes. If not set, uses the latest supported version.
workspacefloat или NoneNoneSets the maximum workspace size in GiB for TensorRT optimizations, balancing memory usage and performance. Use None for auto-allocation by TensorRT up to device maximum.
nmsboolFalseДобавляет подавление немаксимумов (NMS) в экспортированную модель там, где это поддерживается (см. Форматы экспорта), улучшая эффективность постобработки обнаружения. Недоступно для моделей end2end.
batchint1Указывает размер пакета для инференса или максимальное количество изображений, которые экспортированная модель будет обрабатывать одновременно в режиме predict. Для экспорта в Edge TPU устанавливается автоматически равным 1.
devicestrNoneУказывает устройство для экспорта: GPU (device=0), CPU (device=cpu), MPS для Apple silicon (device=mps), Huawei Ascend NPU (device=npu или device=npu:0) или DLA для NVIDIA Jetson (device=dla:0 или device=dla:1). Экспорт в TensorRT автоматически использует GPU.
datastr'coco8.yaml'Путь к файлу конфигурации датасета, необходимому для калибровки квантования INT8. Если не указан при включенном INT8, в качестве резервного варианта для калибровки будет использован coco8.yaml.
fractionfloat1.0Указывает часть датасета, которую нужно использовать для калибровки квантования INT8. Позволяет выполнять калибровку на подмножестве полного датасета, что полезно для экспериментов или при ограниченных ресурсах. Если не указано при включенном INT8, будет использован весь датасет.
end2endboolNoneПереопределяет режим end-to-end в моделях YOLO, которые поддерживают инференс без NMS (YOLO26, YOLOv10). Установка значения False позволяет экспортировать эти модели для совместимости с традиционным конвейером постобработки на основе NMS. Подробности см. в Руководстве по сквозному обнаружению.

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

Link to this sectionФорматы экспорта#

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

ФорматАргумент formatМодельМетаданныеАргументы
PyTorch-yolo26n.pt-
TorchScripttorchscriptyolo26n.torchscriptimgsz, half, dynamic, optimize, nms, batch, device
ONNXonnxyolo26n.onnximgsz, half, int8, dynamic, simplify, opset, nms, batch, data, fraction, device
OpenVINOopenvinoyolo26n_openvino_model/imgsz, half, dynamic, int8, nms, batch, data, fraction, device
TensorRTengineyolo26n.engineimgsz, half, dynamic, simplify, workspace, int8, nms, batch, data, fraction, device
CoreMLcoremlyolo26n.mlpackageimgsz, dynamic, half, int8, nms, batch, device
TF SavedModelsaved_modelyolo26n_saved_model/imgsz, keras, int8, nms, batch, data, fraction, device
TF GraphDefpbyolo26n.pbimgsz, batch, device
TF Litetfliteyolo26n.tfliteimgsz, half, int8, nms, batch, data, fraction, device
TF Edge TPUedgetpuyolo26n_edgetpu.tfliteimgsz, int8, data, fraction, device
TF.jstfjsyolo26n_web_model/imgsz, half, int8, nms, batch, data, fraction, device
PaddlePaddlepaddleyolo26n_paddle_model/imgsz, batch, device
MNNmnnyolo26n.mnnimgsz, batch, int8, half, device
NCNNncnnyolo26n_ncnn_model/imgsz, half, batch, device
IMX500imxyolo26n_imx_model/imgsz, int8, data, fraction, nms, device
RKNNrknnyolo26n_rknn_model/imgsz, batch, name, int8, data, fraction, device
ExecuTorchexecutorchyolo26n_executorch_model/imgsz, batch, device
Axeleraaxelerayolo26n_axelera_model/imgsz, batch, int8, data, fraction, device
DEEPXdeepxyolo26n_deepx_model/imgsz, int8, data, optimize, device
Qualcomm QNNqnnyolo26n_qnn_model/imgsz, batch, name, int8, data, fraction, device

Link to this sectionFAQ#

Link to this sectionКак экспортировать модель YOLO26 в формат ONNX?#

Экспорт модели 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.

Link to this sectionКаковы преимущества использования TensorRT для экспорта моделей?#

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

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

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

Link to this sectionКак включить квантование INT8 при экспорте модели YOLO26?#

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

Пример
from ultralytics import YOLO

model = YOLO("yolo26n.pt")  # Load a model
model.export(format="onnx", int8=True, data="coco8.yaml")

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

Link to this sectionПочему динамический размер входных данных важен при экспорте моделей?#

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

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

Пример
from ultralytics import YOLO

model = YOLO("yolo26n.pt")
model.export(format="onnx", dynamic=True)

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

Link to this sectionКакие ключевые аргументы экспорта следует учитывать для оптимизации производительности модели?#

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

  • format: Целевой формат для экспортированной модели (например, onnx, torchscript, tensorflow).
  • imgsz: Желаемый размер изображения для входных данных модели (например, 640 или (height, width)).
  • half: Включает квантование FP16, уменьшая размер модели и потенциально ускоряя инференс.
  • optimize: Применяет специфические оптимизации для мобильных или ограниченных сред.
  • int8: Включает квантование INT8, что очень полезно для развертывания периферийного ИИ.

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

Link to this sectionЧто представляют собой выходные тензоры в экспортированных моделях YOLO?#

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

Для моделей обнаружения (например, yolo26n.pt) выходные данные обычно представляют собой один тензор с формой (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 демонстрируют, как обрабатывать эти выходные данные для каждого типа модели.

Link to this sectionПочему output0 имеет формат FP32 при экспорте с half=True и end2end=True?#

При экспорте с half=True (или int8=True) большинство тензоров преобразуются в более низкую точность для уменьшения размера модели и повышения производительности. Однако при включенном end2end=True постобработка (включая индексы классов) встраивается непосредственно в экспортированный граф.

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

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

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

Комментарии