Ultralytics YOLO27:
Get Started

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



Смотри: Как использовать модели Ultralytics YOLO26 с NVIDIA Deepstream на 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, который обеспечивает поддержку моделей YOLO в NVIDIA DeepStream SDK. Благодарим 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 и более ранние версии). Полный список см. в разделе аргументы экспорта.

  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

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



Смотри: Как запускать много-потоковый инференс с Ultralytics YOLO26 с помощью NVIDIA DeepStream на 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 и более ранние версии). Подробнее о преобразовании моделей см. в разделе экспорта моделей.

  • Чтобы запустить инференс 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. Подробнее см. раздел Результаты бенчмарков.

Комментарии