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

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



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

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

DeepStream на NVIDIA 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 для YOLO11

Здесь мы используем репозиторий 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_yolo11.py файл из DeepStream-Yolo/utils каталог к ultralytics папка

    cp ~/DeepStream-Yolo/utils/export_yolo11.py ~/ultralytics
    cd ultralytics
    
  4. Загрузите выбранную вами модель обнаружения Ultralytics YOLO11 (.pt) из релизов YOLO11. Здесь мы используем yolo11s.pt.

    wget https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11s.pt
    

    Примечание

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

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

    python3 export_yolo11.py -w yolo11s.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 yolo11s.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_yolo11.txt файл в соответствии с вашей моделью (для YOLO11 с 80 классами)

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

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

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

Запуск Inference

deepstream-app -c deepstream_app_config.txt

Примечание

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

YOLO11 с deepstream

Совет

Если вы хотите преобразовать модель в FP16 precision, просто установите model-engine-file=model_b1_gpu0_fp16.engine и network-mode=2 внутри config_infer_primary_yolo11.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_yolo11.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 YOLO11 🎉

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

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

    [tiled-display]
    rows=2
    columns=2
    
  2. Установить num-sources=4 и добавьте uri всех 4 потоков

    [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
Многопоточная настройка

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

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

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

График эталонных тестов Jetson 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 YOLO11 на устройстве NVIDIA Jetson?

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

Каковы преимущества использования TensorRT с YOLO11 на NVIDIA Jetson?

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

Могу ли я запустить Ultralytics YOLO11 с DeepStream SDK на различном оборудовании NVIDIA Jetson?

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

Как я могу преобразовать модель YOLO11 в ONNX для DeepStream?

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

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

python3 utils/export_yolo11.py -w yolo11s.pt --opset 12 --simplify

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

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

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

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

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



📅 Создано 1 год назад ✏️ Обновлено 2 месяца назад

Комментарии