YOLO Vision 2026:

Ultralytics YOLO26 на NVIDIA Jetson с использованием DeepStream SDK и TensorRT#



Watch: How to use Ultralytics YOLO26 models with NVIDIA Deepstream on Jetson Orin NX 🚀

Это подробное руководство содержит пошаговые инструкции по развертыванию Ultralytics YOLO26 на устройствах NVIDIA Jetson с использованием DeepStream SDK и TensorRT. Здесь мы используем TensorRT для максимизации производительности инференса на платформе Jetson.

В этом руководстве рассмотрены конфигурация DeepStream для YOLO26, INT8-калиброка, настройка многопоточности и результаты бенчмарков.

NVIDIA DeepStream SDK on Jetson platform
Примечание

Это руководство было протестировано на комплекте разработчика NVIDIA Jetson Orin Nano Super Developer Kit под управлением последнего стабильного релиза JetPack JP6.1, Seeed Studio reComputer J4012 на базе NVIDIA Jetson Orin NX 16GB под управлением JetPack JP5.1.3 и Seeed Studio reComputer J1020 v2 на базе NVIDIA Jetson Nano 4GB под управлением JetPack JP4.6.4. Ожидается, что оно будет работать на всей линейке оборудования NVIDIA Jetson, включая как новейшие, так и устаревшие модели.

Что такое NVIDIA DeepStream?#

NVIDIA's DeepStream SDK представляет собой полный набор инструментов потоковой аналитики на базе GStreamer для обработки мультисенсорных данных, видео, аудио и понимания изображений с помощью ИИ. Он идеально подходит для разработчиков систем компьютерного зрения на базе ИИ, партнеров-разработчиков программного обеспечения, стартапов и OEM-производителей, создающих приложения и сервисы IVA (интеллектуальной видеоаналитики). Теперь вы можете создавать конвейеры потоковой обработки, включающие нейронные сети и другие сложные задачи обработки, такие как трекинг, кодирование/декодирование видео и рендеринг видео. Эти конвейеры обеспечивают аналитику в реальном времени для видео, изображений и данных датчиков. Поддержка множества платформ в DeepStream дает вам более быстрый и простой способ разработки приложений и сервисов компьютерного зрения с ИИ локально, на периферии и в облаке.

Предварительные требования#

Перед тем как приступить к изучению этого руководства:

Совет

В этом руководстве мы использовали метод установки DeepStream SDK на устройство Jetson с помощью пакетов Debian. Вы также можете посетить страницу DeepStream SDK on Jetson (Archived) для получения доступа к устаревшим версиям DeepStream.

Настройка DeepStream для YOLO26#

Здесь мы используем репозиторий GitHub marcoslucianops/DeepStream-Yolo, который включает поддержку NVIDIA DeepStream SDK для моделей YOLO. Мы ценим вклад marcoslucianops!

  1. Установи Ultralytics с необходимыми зависимостями

    cd ~
    pip install -U pip
    git clone https://github.com/ultralytics/ultralytics
    cd ultralytics
    pip install -e ".[export]" onnxslim
  2. Клонируй репозиторий DeepStream-Yolo

    cd ~
    git clone https://github.com/marcoslucianops/DeepStream-Yolo
  3. Скопируйте файл export_yolo26.py из директории DeepStream-Yolo/utils в папку ultralytics

    cp ~/DeepStream-Yolo/utils/export_yolo26.py ~/ultralytics
    cd ultralytics
  4. Загрузите детекционную модель Ultralytics YOLO26 (.pt) на ваш выбор из проекта YOLO26. Здесь мы используем yolo26s.pt.

    wget https://github.com/ultralytics/assets/releases/download/v8.4.0/yolo26s.pt
Примечание

Вы также можете использовать модель YOLO26, обученную на собственных данных.

  1. Конвертируй модель в ONNX

    python3 export_yolo26.py -w yolo26s.pt
Передай приведенные ниже аргументы в команду выше

Для DeepStream 5.1 удалите аргумент --dynamic и используйте opset 12 или ниже. Значение по умолчанию для opset — 17.

--opset 12

Чтобы изменить размер вывода (по умолчанию: 640)

-s SIZE
--size SIZE
-s HEIGHT WIDTH
--size HEIGHT WIDTH

Пример для 1280:

-s 1280
or
-s 1280 1280

Чтобы упростить модель ONNX (DeepStream >= 6.0)

--simplify

Чтобы использовать динамический размер пакета (DeepStream >= 6.1)

--dynamic

Чтобы использовать статический размер пакета (пример для размера пакета = 4)

--batch 4
  1. Скопируйте сгенерированный файл модели .onnx и файл labels.txt в папку DeepStream-Yolo

    cp yolo26s.onnx labels.txt ~/DeepStream-Yolo
    cd ~/DeepStream-Yolo
  2. Установи версию CUDA в соответствии с установленной версией JetPack

    Для JetPack 4.6.4:

    export CUDA_VER=10.2

    Для JetPack 5.1.3:

    export CUDA_VER=11.4

    Для JetPack 6.1:

    export CUDA_VER=12.6
  3. Скомпилируй библиотеку

    make -C nvdsinfer_custom_impl_Yolo clean && make -C nvdsinfer_custom_impl_Yolo
  4. Отредактируйте файл config_infer_primary_yolo26.txt в соответствии с вашей моделью (для YOLO26s с 80 классами)

    [property]
    ...
    onnx-file=yolo26s.onnx
    ...
    num-detected-classes=80
    ...
    parse-bbox-func-name=NvDsInferParseYolo
    ...
Настройки точности YOLO26

YOLO26 изменяет размер входа с помощью центрированного дополнения и работает без NMS. Для достижения наилучшей точности добавьте следующее в секцию [property] файла config_infer_primary_yolo26.txt:

[property]
...
maintain-aspect-ratio=1
symmetric-padding=1
cluster-mode=4
...
  1. Отредактируйте файл deepstream_app_config

    ...
    [primary-gie]
    ...
    config-file=config_infer_primary_yolo26.txt
  2. Вы также можете изменить видеоисточник в файле deepstream_app_config. Здесь загружается видеофайл по умолчанию

    ...
    [source0]
    ...
    uri=file:///opt/nvidia/deepstream/deepstream/samples/streams/sample_1080p_h264.mp4

Запусти вывод#

deepstream-app -c deepstream_app_config.txt
Примечание

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

YOLO26 with deepstream
Совет

Если вы хотите конвертировать модель в точность FP16, просто установите model-engine-file=model_b1_gpu0_fp16.engine и network-mode=2 внутри config_infer_primary_yolo26.txt

Калибровка INT8#

Если ты хочешь использовать точность INT8 для вывода, тебе нужно выполнить следующие шаги:

Примечание

В настоящее время INT8 не работает с TensorRT 10.x. Этот раздел руководства был протестирован с TensorRT 8.x, с которой все должно работать.

  1. Установите переменную окружения OPENCV

    export OPENCV=1
  2. Скомпилируй библиотеку

    make -C nvdsinfer_custom_impl_Yolo clean && make -C nvdsinfer_custom_impl_Yolo
  3. Для датасета COCO загрузите val2017, распакуйте и переместите в папку DeepStream-Yolo

  4. Создай новую директорию для изображений калибровки

    mkdir calibration
  5. Запусти следующую команду, чтобы выбрать 1000 случайных изображений из набора данных COCO для запуска калибровки

    for jpg in $(ls -1 val2017/*.jpg | sort -R | head -1000); do
      cp ${jpg} calibration/
    done
Примечание

NVIDIA рекомендует использовать не менее 500 изображений для достижения хорошей точности. В этом примере выбрано 1000 изображений для повышения точности (больше изображений = выше точность). Вы можете настроить это с помощью head -1000. Например, для 2000 изображений используйте head -2000. Этот процесс может занять много времени.

  1. Создайте файл calibration.txt со всеми выбранными изображениями

    realpath calibration/*jpg > calibration.txt
  2. Установи переменные окружения

    export INT8_CALIB_IMG_PATH=calibration.txt
    export INT8_CALIB_BATCH_SIZE=1
Примечание

Более высокие значения INT8_CALIB_BATCH_SIZE приведут к повышению точности и скорости калибровки. Установи значение в соответствии с объемом памяти твоего GPU.

  1. Обновите файл config_infer_primary_yolo26.txt

    От

    ...
    model-engine-file=model_b1_gpu0_fp32.engine
    #int8-calib-file=calib.table
    ...
    network-mode=0
    ...

    До

    ...
    model-engine-file=model_b1_gpu0_int8.engine
    int8-calib-file=calib.table
    ...
    network-mode=1
    ...

Запуск логического вывода INT8#

Выполни ту же команду, чтобы собрать движок INT8 и начать логический вывод:

deepstream-app -c deepstream_app_config.txt

Настройка нескольких потоков#



Watch: How to Run Multi-Stream Inference with Ultralytics YOLO26 using NVIDIA DeepStream on Jetson Orin 🚀

Чтобы настроить несколько потоков в рамках одного приложения DeepStream, внесите следующие изменения в файл deepstream_app_config.txt:

  1. Измени количество строк и столбцов, чтобы создать сетку отображения в соответствии с количеством потоков, которые ты хочешь использовать. Например, для 4 потоков мы можем добавить 2 строки и 2 столбца.

    [tiled-display]
    rows=2
    columns=2
  2. Добавьте отдельную группу [sourceN] для каждого потока, каждая со своими собственными uri и num-sources=1.

    [source0]
    enable=1
    type=3
    uri=file:///path/to/video1.mp4
    num-sources=1
    
    [source1]
    enable=1
    type=3
    uri=file:///path/to/video2.mp4
    num-sources=1
    
    [source2]
    enable=1
    type=3
    uri=file:///path/to/video3.mp4
    num-sources=1
    
    [source3]
    enable=1
    type=3
    uri=file:///path/to/video4.mp4
    num-sources=1

Запуск многопоточного логического вывода#

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

deepstream-app -c deepstream_app_config.txt
DeepStream multi-camera streaming configuration

Результаты тестирования производительности#

Следующие бенчмарки демонстрируют производительность моделей YOLO11 при различных уровнях точности TensorRT с размером входа 640x640 на NVIDIA Jetson Orin NX 16GB. В YOLO26 используется тот же рабочий процесс экспорта и инференса DeepStream, описанный выше.

Сравнительная диаграмма#

NVIDIA Jetson DeepStream performance benchmarks

Подробная сравнительная таблица#

Производительность
ФорматСтатусВремя вывода (мс/из)
TensorRT (FP32)8.64
TensorRT (FP16)5.27
TensorRT (INT8)4.54

Благодарности#

Это руководство было изначально создано нашими друзьями из Seeed Studio, Лакшантой и Элейн.

FAQ#

  • Чтобы настроить Ultralytics YOLO26 на устройстве NVIDIA Jetson, вам сначала нужно установить DeepStream SDK, совместимый с вашей версией JetPack. Следуйте пошаговому руководству в нашем Quick Start Guide, чтобы настроить ваше устройство NVIDIA Jetson для развертывания YOLO26.

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

  • Да, руководство по развертыванию Ultralytics YOLO26 с использованием DeepStream SDK и TensorRT совместимо со всей линейкой NVIDIA Jetson. Сюда входят такие устройства, как Jetson Orin NX 16GB с JetPack 5.1.3 и Jetson Nano 4GB с JetPack 4.6.4. Подробные шаги см. в разделе DeepStream Configuration for YOLO26.

  • Чтобы конвертировать модель YOLO26 в формат ONNX для развертывания с помощью DeepStream, используйте скрипт utils/export_yolo26.py из репозитория DeepStream-Yolo.

    Вот пример команды:

    python3 utils/export_yolo26.py -w yolo26s.pt --opset 12 --simplify

    Дополнительные сведения о конвертации моделей см. в нашем разделе модели экспорта.

  • Для запуска INT8-инференса откалибруйте модель на репрезентативном наборе изображений и переключите конфигурацию DeepStream в режим INT8. Загрузите изображения COCO val2017, выберите около 1000 калибровочных изображений, установите переменные окружения INT8_CALIB_IMG_PATH и INT8_CALIB_BATCH_SIZE, а затем обновите config_infer_primary_yolo26.txt с помощью model-engine-file=model_b1_gpu0_int8.engine, int8-calib-file=calib.table и network-mode=1. Подробные инструкции см. в разделе INT8 Calibration. В настоящее время для INT8 требуется TensorRT 8.x.

  • Чтобы обрабатывать несколько потоков в одном приложении DeepStream, отредактируйте файл deepstream_app_config.txt, добавив сетку отображения с мозаичным расположением (tiled-display) и перечислив URI каждого источника. Установите rows и columns в разделе [tiled-display] для построения сетки, добавьте отдельную группу [sourceN] для каждого потока со своими собстенными uri и num-sources=1, а также настройте сетку в соответствии с количеством потоков. Полный пример см. в разделе MultiStream Setup.

  • Производительность моделей YOLO11 на NVIDIA Jetson Orin NX 16GB варьируется в зависимости от уровней точности TensorRT. Например, модели YOLO11s достигают:

    • Точность FP32: 14.53 мс/из., 68.8 кадров/с
    • Точность FP16: 7.91 мс/из., 126 кадров/с
    • Точность INT8: 6.05 мс/из., 165 кадров/с

    Эти бенчмарки подчеркивают эффективность и возможности использования оптимизированных под TensorRT моделей YOLO11 на оборудовании NVIDIA Jetson. Дополнительную информацию см. в нашем разделе Benchmark Results.

Комментарии