Ultralytics YOLO27:

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?#

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

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

Перед началом работы с этим руководством:

Совет

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

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

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

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

    pip install ultralytics onnx onnxslim
  2. Клонируй репозиторий DeepStream-Yolo

    cd ~
    git clone https://github.com/marcoslucianops/DeepStream-Yolo
  3. Скачай выбранную модель обнаружения Ultralytics YOLO26 (.pt) из проекта YOLO26. Здесь мы используем yolo26s.pt.

    wget https://github.com/ultralytics/assets/releases/download/v8.4.0/yolo26s.pt
Примечание
  1. Конвертируй модель в ONNX и запиши файл labels.txt, из которого DeepStream считывает названия классов

    from ultralytics import YOLO
    
    model = YOLO("yolo26s.pt")
    model.export(format="onnx", nms=False, agnostic_nms=True)  # creates 'yolo26s.onnx'
    with open("labels.txt", "w") as f:
        f.write("\n".join(model.names.values()))
Аргументы экспорта

nms=False экспортирует голову без NMS, а agnostic_nms=True сохраняет по одному классу на обнаружение, чтобы cluster-mode=4 (без кластеризации) в конфигурации DeepStream не рисовал рамку дважды. Добавь imgsz=1280 для изменения размера инференса (по умолчанию: 640), batch=4 для размера батча 4 (экспортированный батч статичен, поэтому он должен соответствовать batch-size в конфигурации DeepStream) и opset=12 для TensorRT 8.2 или более ранних версий (DeepStream 6.0.1 и более ранние). Полный список см. в разделе export arguments.

  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

    Для JetPack 7.1:

    export CUDA_VER=13.0
  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 — Lakshantha и Elaine.

Часто задаваемые вопросы#

  • Чтобы настроить Ultralytics YOLO26 на устройстве NVIDIA Jetson, сначала установи DeepStream SDK, совместимый с твоей версией JetPack. Следуй пошаговым инструкциям в нашем кратком руководстве, чтобы настроить 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 для YOLO26.

  • Экспортируй модель с головой без NMS с помощью экспортера Ultralytics и запиши файл labels.txt, из которого DeepStream считывает названия классов:

    from ultralytics import YOLO
    
    model = YOLO("yolo26s.pt")
    model.export(format="onnx", nms=False, agnostic_nms=True)  # creates 'yolo26s.onnx'
    with open("labels.txt", "w") as f:
        f.write("\n".join(model.names.values()))

    Добавь opset=12 для TensorRT 8.2 или более ранних версий (DeepStream 6.0.1 и более ранние). Подробную информацию о конвертации моделей см. в нашем разделе model export section.

  • Чтобы запустить инференс 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. Для INT8 в настоящее время требуется TensorRT 8.x.

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

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

    • Точность FP32: 14.53 мс/изображение, 68.8 FPS
    • Точность FP16: 7.91 мс/изображение, 126 FPS
    • Точность INT8: 6.05 мс/изображение, 165 FPS

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

Комментарии