Перейти к содержанию

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



Смотреть: Как использовать модели Ultralytics YOLO26 с NVIDIA Deepstream на Jetson Orin NX 🚀

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

NVIDIA SDK на платформе Jetson

Примечание

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

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

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

Совет

В этом руководстве мы использовали метод установки 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.

  5. Преобразовать модель в ONNX

    python3 export_yolo26.py -w yolo26s.pt
    

    Передайте указанные ниже аргументы в вышеуказанную команду

    Для DeepStream 5.1 удалите --dynamic arg и use 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
    
  6. Скопировать сгенерированный .onnx файл модели и labels.txt файл в DeepStream-Yolo папка

    cp yolo26s.pt.onnx labels.txt ~/DeepStream-Yolo
    cd ~/DeepStream-Yolo
    
  7. Установите версию 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
    
  8. Скомпилируйте библиотеку

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

    [property]
    ...
    onnx-file=yolo26s.pt.onnx
    ...
    num-detected-classes=80
    ...
    
  10. Редактировать deepstream_app_config файла

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

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

Запуск Inference

deepstream-app -c deepstream_app_config.txt

Примечание

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

YOLO26 с deepstream

Совет

Если вы хотите преобразовать модель в FP16 precision, просто установите 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. Этот процесс может занять много времени.

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

    realpath calibration/*jpg > calibration.txt
    
  7. Установить переменные среды

    export INT8_CALIB_IMG_PATH=calibration.txt
    export INT8_CALIB_BATCH_SIZE=1
    

    Примечание

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

  8. Обновить 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
    ...
    

Запуск Inference

deepstream-app -c deepstream_app_config.txt

Настройка MultiStream



Смотреть: Как запустить несколько потоков с DeepStream SDK на Jetson Nano с использованием Ultralytics YOLO26 🎉

Чтобы настроить несколько потоков в одном приложении 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
    

Запуск Inference

deepstream-app -c deepstream_app_config.txt
Конфигурация потоковой передачи с несколькими камерами DeepStream

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

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

Сравнительная таблица

Тесты производительности NVIDIA DeepStream

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

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

ФорматСтатусВремя инференса (мс/изобр.)
TensorRT (FP32)8.64
TensorRT (FP16)5.27
TensorRT (INT8)4.54
ФорматСтатусВремя инференса (мс/изобр.)
TensorRT (FP32)14.53
TensorRT (FP16)7.91
TensorRT (INT8)6.05
ФорматСтатусВремя инференса (мс/изобр.)
TensorRT (FP32)32.05
TensorRT (FP16)15.55
TensorRT (INT8)10.43
ФорматСтатусВремя инференса (мс/изобр.)
TensorRT (FP32)39.68
TensorRT (FP16)19.88
TensorRT (INT8)13.64
ФорматСтатусВремя инференса (мс/изобр.)
TensorRT (FP32)80.65
TensorRT (FP16)39.06
TensorRT (INT8)22.83

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

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

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

Как настроить 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. Для получения дополнительной информации см. раздел Результаты бенчмарков.



📅 Создано 1 год назад ✏️ Обновлено 7 дней назад
glenn-jocherRizwanMunawarlakshanthadpderrengermiles-deans-ultralyticsY-T-GUltralyticsAssistantMatthewNoyce

Комментарии