Meet YOLO26: next-gen vision AI.

Link to this sectionЭкспорт TensorRT для моделей YOLO26#

Развертывание моделей computer vision в высокопроизводительных средах может потребовать использования формата, который максимизирует скорость и эффективность. Это особенно актуально, когда ты развертываешь свою модель на GPU NVIDIA.

Используя формат экспорта TensorRT, ты можешь улучшить свои модели Ultralytics YOLO26 для быстрой и эффективной инференции на оборудовании NVIDIA. В этом руководстве ты найдешь простые пошаговые инструкции по процессу конвертации, которые помогут тебе максимально эффективно использовать передовые технологии NVIDIA в твоих проектах по deep learning.

Link to this sectionTensorRT#

NVIDIA TensorRT optimization workflow

TensorRT, разработанный NVIDIA, — это передовой набор инструментов для разработки (SDK), предназначенный для высокоскоростной инференции глубокого обучения. Он отлично подходит для приложений реального времени, таких как object detection.

Этот инструментарий оптимизирует модели глубокого обучения для GPU NVIDIA, что приводит к более быстрым и эффективным операциям. Модели TensorRT проходят оптимизацию, которая включает в себя такие методы, как слияние слоев (layer fusion), калибровка точности (INT8 и FP16), динамическое управление памятью тензоров и автоматическая настройка ядер (kernel auto-tuning). Конвертация моделей глубокого обучения в формат TensorRT позволяет разработчикам полностью раскрыть потенциал GPU NVIDIA.

TensorRT известен своей совместимостью с различными форматами моделей, включая TensorFlow, PyTorch и ONNX, предоставляя разработчикам гибкое решение для интеграции и оптимизации моделей из разных фреймворков. Эта универсальность обеспечивает эффективное model deployment в разнообразных аппаратных и программных средах.

Link to this sectionОсновные функции моделей TensorRT#

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

  • Калибровка точности (Precision Calibration): TensorRT поддерживает калибровку точности, позволяя тонко настраивать модели под конкретные требования к точности. Сюда входит поддержка форматов с пониженной точностью, таких как INT8 и FP16, что может дополнительно повысить скорость инференции при сохранении приемлемого уровня точности.

  • Слияние слоев (Layer Fusion): Процесс оптимизации TensorRT включает слияние слоев, при котором несколько слоев neural network объединяются в одну операцию. Это снижает вычислительные затраты и улучшает скорость инференции за счет минимизации обращений к памяти и вычислений.

TensorRT neural network layer fusion optimization

  • Динамическое управление памятью тензоров: TensorRT эффективно управляет использованием памяти тензоров во время инференции, сокращая издержки памяти и оптимизируя ее распределение. Это приводит к более эффективному использованию памяти GPU.

  • Автоматическая настройка ядер: TensorRT применяет автоматическую настройку ядер для выбора наиболее оптимизированного ядра GPU для каждого слоя модели. Этот адаптивный подход гарантирует, что модель полностью использует вычислительную мощность GPU.

Link to this sectionВарианты развертывания в TensorRT#

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

TensorRT предлагает несколько вариантов развертывания, и каждый из них по-разному балансирует между простотой интеграции, оптимизацией производительности и гибкостью:

  • Развертывание внутри TensorFlow: Этот метод интегрирует TensorRT в TensorFlow, позволяя запускать оптимизированные модели в привычной среде TensorFlow. Это полезно для моделей со смесью поддерживаемых и неподдерживаемых слоев, так как TF-TRT может эффективно справляться с ними.

NVIDIA TensorRT optimization workflow

  • Автономный API среды выполнения TensorRT (Standalone TensorRT Runtime API): Предлагает гранулярный контроль, что идеально подходит для критически важных приложений. Это более сложный вариант, но он позволяет реализовать поддержку неподдерживаемых операторов вручную.

  • NVIDIA Triton Inference Server: Вариант, поддерживающий модели из различных фреймворков. Особенно хорошо подходит для инференции в облаке или на периферии, предоставляя такие функции, как параллельное выполнение моделей и их анализ.

Link to this sectionЭкспорт моделей YOLO26 в TensorRT#

Ты можешь повысить эффективность выполнения и оптимизировать производительность, сконвертировав модели YOLO26 в формат TensorRT.

Link to this sectionУстановка#

Чтобы установить необходимый пакет, выполни:

Установка
# Install the required package for YOLO26
pip install ultralytics

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

Link to this sectionИспользование#

Перед тем как погрузиться в инструкции по использованию, обязательно ознакомься с ассортиментом моделей YOLO26, предлагаемых Ultralytics. Это поможет тебе выбрать наиболее подходящую модель для требований твоего проекта.

Формат TensorRT поддерживает режимы Export, Predict и Validate. Для инференции и валидации требуется GPU NVIDIA. Экспортируй свою модель, а затем загрузи ее для запуска инференции или проверки точности.

Экспорт
from ultralytics import YOLO

# Load a YOLO26 model
model = YOLO("yolo26n.pt")

# Export the model to TensorRT format
model.export(format="engine")  # creates 'yolo26n.engine'
Предсказание
from ultralytics import YOLO

# Load the exported TensorRT model
model = YOLO("yolo26n.engine")

# Run inference
results = model("https://ultralytics.com/images/bus.jpg")
Валидация
from ultralytics import YOLO

# Load the exported TensorRT model
model = YOLO("yolo26n.engine")

# Validate accuracy on the COCO8 dataset
metrics = model.val(data="coco8.yaml")

Link to this sectionАргументы экспорта#

АргументТипПо умолчаниюОписание
formatstr'engine'Целевой формат для экспортированной модели, определяющий совместимость с различными средами развертывания.
imgszint или tuple640Желаемый размер изображения для входных данных модели. Может быть целым числом для квадратных изображений или кортежем (height, width) для указания конкретных размеров.
halfboolFalseВключает квантование FP16 (половинной точности), уменьшая размер модели и потенциально ускоряя вывод на поддерживаемом оборудовании.
int8boolFalseАктивирует квантование INT8, дополнительно сжимая модель и ускоряя вывод с минимальной потерей accuracy, в основном для периферийных устройств (edge devices).
dynamicboolFalseПозволяет использовать динамические размеры входных данных, повышая гибкость при работе с изображениями разного размера.
simplifyboolTrueУпрощает граф модели с помощью onnxslim, что потенциально улучшает производительность и совместимость.
workspacefloat или NoneNoneУстанавливает максимальный размер рабочего пространства в ГиБ для оптимизаций TensorRT, балансируя между использованием памяти и производительностью; используй None для автоматического выделения памяти средой TensorRT до максимума устройства.
nmsboolFalseДобавляет алгоритм подавления немаксимумов (NMS), необходимый для точной и эффективной постобработки результатов детектирования.
batchint1Указывает размер батча для инференса модели при экспорте или максимальное количество изображений, которое экспортированная модель будет обрабатывать одновременно в режиме predict.
datastr'coco8.yaml'Путь к файлу конфигурации dataset (по умолчанию: coco8.yaml), необходимый для квантования.
fractionfloat1.0Определяет долю набора данных для калибровки при квантовании INT8. Позволяет проводить калибровку на подмножестве полного набора данных, что полезно для экспериментов или при ограниченных ресурсах. Если не указано при включенном INT8, будет использован весь набор данных.
devicestrNoneУказывает устройство для экспорта: GPU (device=0), DLA для NVIDIA Jetson (device=dla:0 или device=dla:1).
Совет

Пожалуйста, убедись, что при экспорте в TensorRT ты используешь GPU с поддержкой CUDA.

Более подробную информацию о процессе экспорта можно найти на странице документации Ultralytics по экспорту.

Link to this sectionЭкспорт TensorRT с квантованием INT8#

Экспорт моделей Ultralytics YOLO с использованием TensorRT и precision INT8 выполняет квантование после обучения (PTQ). TensorRT использует калибровку для PTQ, которая измеряет распределение активаций внутри каждого тензора активаций, пока модель YOLO обрабатывает инференцию на репрезентативных входных данных, а затем использует это распределение для оценки значений масштаба для каждого тензора. Каждый тензор активации, являющийся кандидатом для квантования, имеет связанный масштаб, который выводится в процессе калибровки.

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

Совет

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

Link to this sectionНастройка экспорта INT8#

Аргументы, предоставленные при использовании export для модели Ultralytics YOLO, будут очень сильно влиять на производительность экспортированной модели. Их также необходимо выбирать исходя из доступных ресурсов устройства, однако аргументы по умолчанию должны работать для большинства дискретных GPU NVIDIA архитектуры Ampere (или новее). Используемый алгоритм калибровки — "MINMAX_CALIBRATION" для экспорта на GPU, тогда как для экспорта на DLA для NVIDIA Jetson используется "ENTROPY_CALIBRATION_2". Ты можешь прочитать более подробную информацию о доступных опциях в руководстве разработчика TensorRT. Тесты Ultralytics показали, что "MINMAX_CALIBRATION" является лучшим выбором для экспорта на GPU, и алгоритм выбирается автоматически в зависимости от устройства экспорта.

  • workspace : Управляет размером (в ГиБ) выделяемой памяти устройства во время конвертации весов модели.

    • Настрой значение workspace в соответствии с твоими потребностями в калибровке и доступностью ресурсов. Хотя большее значение workspace может увеличить время калибровки, оно позволяет TensorRT изучить более широкий спектр тактик оптимизации, потенциально повышая производительность модели и accuracy. Напротив, меньшее значение workspace может сократить время калибровки, но может ограничить стратегии оптимизации, влияя на качество квантованной модели.

    • По умолчанию установлено workspace=None, что позволит TensorRT автоматически выделять память; при ручной настройке это значение, возможно, потребуется увеличить, если калибровка завершается аварийно (выходит без предупреждения).

    • TensorRT сообщит об UNSUPPORTED_STATE во время экспорта, если значение workspace больше, чем объем памяти, доступный устройству, что означает, что значение workspace следует уменьшить или установить в None.

    • Если workspace установлено на максимальное значение и калибровка завершается неудачно или аварийно, рассмотри возможность использования None для автоматического распределения или уменьшения значений imgsz и batch для снижения требований к памяти.

    • Помни, что калибровка для INT8 специфична для каждого устройства; использование "топового" GPU для калибровки может привести к низкой производительности, когда инференция будет запущена на другом устройстве.

  • batch : Максимальный размер пакета (batch-size), который будет использоваться для инференции. Во время инференции можно использовать меньшие пакеты, но инференция не примет пакеты больше, чем указано.

Примечание

Использование маленьких пакетов может привести к неточному масштабированию во время калибровки INT8. Это связано с тем, что процесс адаптируется на основе данных, которые он видит. Маленькие пакеты могут не охватить полный диапазон значений, что приведет к проблемам с итоговой калибровкой. Использование большего batch size помогает обеспечить более репрезентативные результаты калибровки.

Эксперименты NVIDIA привели их к рекомендации использовать не менее 500 калибровочных изображений, репрезентативных для данных твоей модели, при калибровке квантования INT8. Это руководство, а не жесткое требование, и тебе нужно будет поэкспериментировать, чтобы понять, что требуется для хорошей работы на твоем наборе данных. Поскольку калибровочные данные необходимы для калибровки INT8 с помощью TensorRT, обязательно используй аргумент data, когда int8=True для TensorRT, и укажи data="my_dataset.yaml", чтобы использовать изображения из validation для калибровки. Если для data не передается значение при экспорте в TensorRT с квантованием INT8, по умолчанию будет использоваться один из "маленьких" примеров наборов данных, основанных на задаче модели вместо того, чтобы выдавать ошибку.

Пример
from ultralytics import YOLO

model = YOLO("yolo26n.pt")
model.export(
    format="engine",
    dynamic=True,  # (1)!
    batch=8,  # (2)!
    workspace=4,  # (3)!
    int8=True,
    data="coco.yaml",  # (4)!
)

# Load the exported TensorRT INT8 model
model = YOLO("yolo26n.engine", task="detect")

# Run inference
result = model.predict("https://ultralytics.com/images/bus.jpg")
  1. Экспортирует с динамическими осями; это будет включено по умолчанию при экспорте с int8=True, даже если не задано явно. См. аргументы экспорта для дополнительной информации.
  2. Устанавливает максимальный размер пакета 8 для экспортированной модели и калибровки INT8.
  3. Выделяет 4 ГиБ памяти вместо выделения всего устройства для процесса конвертации.
  4. Использует набор данных COCO для калибровки, в частности изображения, используемые для validation (всего 5000).
Кэш калибровки

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

Link to this sectionПреимущества использования YOLO с TensorRT INT8#

  • Уменьшенный размер модели: Квантование из FP32 в INT8 может уменьшить размер модели в 4 раза (на диске или в памяти), что приводит к ускорению загрузки, меньшим требованиям к хранилищу и уменьшенному потреблению памяти при развертывании модели.

  • Пониженное энергопотребление: Операции с пониженной точностью для экспортированных моделей YOLO в INT8 могут потреблять меньше энергии по сравнению с моделями FP32, особенно на устройствах с питанием от батареи.

  • Улучшенная скорость инференции: TensorRT оптимизирует модель под целевое оборудование, что потенциально ведет к более высокой скорости инференции на GPU, встроенных устройствах и ускорителях.

Примечание о скорости инференции

Ожидай, что первые несколько вызовов инференции с моделью, экспортированной в TensorRT INT8, могут иметь более длительное, чем обычно, время препроцессинга, инференции и/или постпроцессинга. Это также может происходить при изменении imgsz во время инференции, особенно если imgsz не совпадает с тем, что было указано при экспорте (экспортный imgsz устанавливается как "оптимальный" профиль TensorRT).

Link to this sectionНедостатки использования YOLO с TensorRT INT8#

  • Снижение метрик оценки: Использование более низкой точности будет означать, что mAP, Precision, Recall или любая другая метрика, используемая для оценки производительности модели, скорее всего, будут несколько хуже. См. раздел результатов производительности, чтобы сравнить различия в mAP50 и mAP50-95 при экспорте в INT8 на небольшой выборке различных устройств.

  • Увеличенное время разработки: Поиск "оптимальных" настроек калибровки INT8 для набора данных и устройства может потребовать значительного количества тестирования.

  • Аппаратная зависимость: Калибровка и прирост производительности могут сильно зависеть от оборудования, а веса моделей менее переносимы.

Link to this sectionПроизводительность экспорта Ultralytics YOLO в TensorRT#

Link to this sectionNVIDIA A100#

Производительность

Протестировано на Ubuntu 22.04.3 LTS, python 3.10.12, ultralytics==8.2.4, tensorrt==8.6.1.post1

См. документацию по детекции для примеров использования этих моделей, обученных на COCO, которые включают 80 предобученных классов.

Примечание

Время инференции показано для mean, min (самое быстрое) и max (самое медленное) для каждого теста с использованием предобученных весов yolov8n.engine

ТочностьТест Evalсреднее
(мс)
мин | макс
(мс)
mAPval
50(B)
mAPval
50-95(B)
batchразмер
(пиксели)
FP32Предсказание0.520.51 | 0.568640
FP32COCOval0.520.520.371640
FP16Предсказание0.340.34 | 0.418640
FP16COCOval0.330.520.371640
INT8Предсказание0.280.27 | 0.318640
INT8COCOval0.290.470.331640

Link to this sectionПотребительские GPU#

Производительность детектирования (COCO)

Протестировано на Windows 10.0.19045, python 3.10.9, ultralytics==8.2.4, tensorrt==10.0.0b6

Примечание

Время инференции показано для mean, min (самое быстрое) и max (самое медленное) для каждого теста с использованием предобученных весов yolov8n.engine

ТочностьТест Evalсреднее
(мс)
мин | макс
(мс)
mAPval
50(B)
mAPval
50-95(B)
batchразмер
(пиксели)
FP32Предсказание1.060.75 | 1.888640
FP32COCOval1.370.520.371640
FP16Предсказание0.620.75 | 1.138640
FP16COCOval0.850.520.371640
INT8Предсказание0.520.38 | 1.008640
INT8COCOval0.740.470.331640

Link to this sectionВстраиваемые устройства#

Производительность детектирования (COCO)

Протестировано на JetPack 6.0 (L4T 36.3) Ubuntu 22.04.4 LTS, python 3.10.12, ultralytics==8.2.16, tensorrt==10.0.1

Примечание

Время инференции показано для mean, min (самое быстрое) и max (самое медленное) для каждого теста с использованием предобученных весов yolov8n.engine

ТочностьТест Evalсреднее
(мс)
мин | макс
(мс)
mAPval
50(B)
mAPval
50-95(B)
batchразмер
(пиксели)
FP32Предсказание6.116.10 | 6.298640
FP32COCOval6.170.520.371640
FP16Предсказание3.183.18 | 3.208640
FP16COCOval3.190.520.371640
INT8Предсказание2.302.29 | 2.358640
INT8COCOval2.320.460.321640
Информация

Смотри наше руководство по быстрому старту на NVIDIA Jetson с Ultralytics YOLO, чтобы узнать больше о настройке и конфигурации.

Информация

Смотри наше руководство по быстрому старту на NVIDIA DGX Spark с Ultralytics YOLO, чтобы узнать больше о настройке и конфигурации.

Link to this sectionМетоды оценки#

Разверни разделы ниже для получения информации о том, как эти модели были экспортированы и протестированы.

Конфигурации экспорта

Смотри режим экспорта для получения подробностей относительно аргументов конфигурации экспорта.

from ultralytics import YOLO

model = YOLO("yolo26n.pt")

# TensorRT FP32
out = model.export(format="engine", imgsz=640, dynamic=True, verbose=False, batch=8, workspace=2)

# TensorRT FP16
out = model.export(format="engine", imgsz=640, dynamic=True, verbose=False, batch=8, workspace=2, half=True)

# TensorRT INT8 with calibration `data` (i.e. COCO, ImageNet, or DOTAv1 for appropriate model task)
out = model.export(
    format="engine", imgsz=640, dynamic=True, verbose=False, batch=8, workspace=2, int8=True, data="coco8.yaml"
)
Цикл предсказания

Смотри режим предсказания для получения дополнительной информации.

import cv2

from ultralytics import YOLO

model = YOLO("yolo26n.engine")
img = cv2.imread("path/to/image.jpg")

for _ in range(100):
    result = model.predict(
        [img] * 8,  # batch=8 of the same image
        verbose=False,
        device="cuda",
    )
Конфигурация валидации

Ознакомься с режимом val, чтобы узнать больше об аргументах конфигурации валидации.

from ultralytics import YOLO

model = YOLO("yolo26n.engine")
results = model.val(
    data="data.yaml",  # COCO, ImageNet, or DOTAv1 for appropriate model task
    batch=1,
    imgsz=640,
    verbose=False,
    device="cuda",
)

Link to this sectionРазвертывание экспортированных моделей YOLO26 в формате TensorRT#

После успешного экспорта твоих моделей Ultralytics YOLO26 в формат TensorRT, ты готов к их развертыванию. Чтобы получить подробные инструкции по развертыванию моделей TensorRT в различных средах, ознакомься со следующими ресурсами:

Link to this sectionИтог#

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

Более подробную информацию о нюансах использования можно найти в официальной документации TensorRT.

Если тебе интересно узнать о других интеграциях Ultralytics YOLO26, наша страница руководств по интеграции предоставляет широкий выбор полезных ресурсов и сведений.

Link to this sectionFAQ#

Link to this sectionКак мне конвертировать модели YOLO26 в формат TensorRT?#

Чтобы конвертировать твои модели Ultralytics YOLO26 в формат TensorRT для оптимизированного вывода на GPU NVIDIA, выполни следующие действия:

  1. Установи необходимый пакет:

    pip install ultralytics
  2. Экспортируй свою модель YOLO26:

    from ultralytics import YOLO
    
    model = YOLO("yolo26n.pt")
    model.export(format="engine")  # creates 'yolo26n.engine'
    
    # Run inference
    model = YOLO("yolo26n.engine")
    results = model("https://ultralytics.com/images/bus.jpg")

Более подробную информацию можно найти в руководстве по установке YOLO26 и документации по экспорту.

Link to this sectionВ чем преимущества использования TensorRT для моделей YOLO26?#

Использование TensorRT для оптимизации моделей YOLO26 дает несколько преимуществ:

  • Более высокая скорость вывода (inference): TensorRT оптимизирует слои модели и использует калибровку точности (INT8 и FP16) для ускорения вывода без существенной потери точности.
  • Эффективность памяти: TensorRT динамически управляет памятью тензоров, сокращая накладные расходы и улучшая использование памяти GPU.
  • Объединение слоев (Layer Fusion): Объединяет несколько слоев в одну операцию, снижая вычислительную сложность.
  • Автоматическая настройка ядер: Автоматически выбирает оптимизированные ядра GPU для каждого слоя модели, обеспечивая максимальную производительность.

Чтобы узнать больше, изучи официальную документацию TensorRT от NVIDIA и наш подробный обзор TensorRT.

Link to this sectionМогу ли я использовать квантование INT8 с TensorRT для моделей YOLO26?#

Да, ты можешь экспортировать модели YOLO26 с использованием TensorRT и квантованием INT8. Этот процесс включает в себя квантование после обучения (PTQ) и калибровку:

  1. Экспорт с INT8:

    from ultralytics import YOLO
    
    model = YOLO("yolo26n.pt")
    model.export(format="engine", batch=8, workspace=4, int8=True, data="coco.yaml")
  2. Запуск вывода (inference):

    from ultralytics import YOLO
    
    model = YOLO("yolo26n.engine", task="detect")
    result = model.predict("https://ultralytics.com/images/bus.jpg")

Более подробную информацию см. в разделе экспорт в TensorRT с квантованием INT8.

Link to this sectionКак развернуть модели YOLO26 TensorRT на NVIDIA Triton Inference Server?#

Развертывание моделей YOLO26 TensorRT на NVIDIA Triton Inference Server можно выполнить с помощью следующих ресурсов:

Эти руководства помогут тебе эффективно интегрировать модели YOLO26 в различные среды развертывания.

Link to this sectionКакие улучшения производительности наблюдаются у моделей YOLO26, экспортированных в TensorRT?#

Улучшения производительности при использовании TensorRT могут варьироваться в зависимости от используемого оборудования. Вот типичные показатели:

  • NVIDIA A100:

    • FP32 Вывод: ~0.52 мс / изображение
    • FP16 Вывод: ~0.34 мс / изображение
    • INT8 Вывод: ~0.28 мс / изображение
    • Небольшое снижение mAP при точности INT8, но значительное улучшение скорости.
  • Потребительские GPU (например, RTX 3080):

    • FP32 Вывод: ~1.06 мс / изображение
    • FP16 Вывод: ~0.62 мс / изображение
    • INT8 Вывод: ~0.52 мс / изображение

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

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

Комментарии