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.

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 DeepStream SDK — это комплексный инструментарий потоковой аналитики на базе GStreamer для обработки данных с нескольких датчиков, видео, аудио и изображений с помощью ИИ. Он идеально подходит для разработчиков ИИ в сфере компьютерного зрения, программных партнеров, стартапов и OEM-производителей, создающих приложения и сервисы IVA (Intelligent Video Analytics). Теперь ты можешь создавать конвейеры потоковой обработки, включающие нейронные сети и другие сложные задачи, такие как трекинг, кодирование/декодирование видео и рендеринг. Эти конвейеры обеспечивают аналитику в реальном времени для видео, изображений и данных с датчиков. Мультиплатформенная поддержка DeepStream дает тебе более быстрый и простой способ разработки приложений и сервисов компьютерного зрения локально, на периферийных устройствах и в облаке.

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

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

Совет

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

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

Здесь мы используем репозиторий marcoslucianops/DeepStream-Yolo на GitHub, который включает поддержку 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.pt.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.pt.onnx
    ...
    num-detected-classes=80
    ...
  5. Отредактируй файл deepstream_app_config

    ...
    [primary-gie]
    ...
    config-file=config_infer_primary_yolo26.txt
  6. Ты также можешь изменить источник видео в файле 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
    ...

Запуск инференса

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. Установи num-sources=4 и добавь записи uri для всех четырех потоков.

    [source0]
    enable=1
    type=3
    uri=path/to/video1.jpg
    uri=path/to/video2.jpg
    uri=path/to/video3.jpg
    uri=path/to/video4.jpg
    num-sources=4

Запуск инференса

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

Результаты бенчмаркинга

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

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

NVIDIA Jetson DeepStream performance benchmarks

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

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

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

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

Часто задаваемые вопросы (FAQ)

Как настроить Ultralytics YOLO26 на устройстве NVIDIA Jetson?

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

В чем преимущество использования TensorRT с YOLO26 на NVIDIA Jetson?

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

Могу ли я запускать Ultralytics YOLO26 с DeepStream SDK на разных устройствах NVIDIA Jetson?

Да, руководство по развертыванию Ultralytics YOLO26 с помощью DeepStream SDK и TensorRT совместимо со всей линейкой NVIDIA Jetson. Это включает устройства, такие как Jetson Orin NX 16GB с JetPack 5.1.3 и Jetson Nano 4GB с JetPack 4.6.4. Обратись к разделу Настройка DeepStream для YOLO26 для получения подробных инструкций.

Как я могу сконвертировать модель YOLO26 в ONNX для DeepStream?

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

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

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

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

Каковы показатели производительности для YOLO на NVIDIA Jetson Orin NX?

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

  • Точность FP32: 14.6 мс/из, 68.5 FPS
  • Точность FP16: 7.94 мс/из, 126 FPS
  • Точность INT8: 5.95 мс/из, 168 FPS

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

Комментарии