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

Ultralytics YOLO11 на NVIDIA Jetson с помощью DeepStream SDK и TensorRT



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

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

NVIDIADeepStream SDK - это полный набор инструментов потоковой аналитики на базе GStreamer для обработки мультисенсорных данных, видео, аудио и понимания изображений на основе ИИ. Он идеально подходит для разработчиков ИИ, партнеров по программному обеспечению, стартапов и OEM-производителей, создающих приложения и сервисы IVA (Intelligent Video Analytics). Теперь вы можете создавать конвейеры обработки потоков, включающие нейронные сети и другие сложные задачи обработки, такие как отслеживание, кодирование/декодирование видео и рендеринг видео. Такие конвейеры позволяют анализировать видео, изображения и данные датчиков в режиме реального времени. Многоплатформенная поддержка DeepStream позволяет быстрее и проще разрабатывать приложения и сервисы искусственного интеллекта видения в локальной сети, на границе и в облаке.

Пререквизиты

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

Наконечник

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

Конфигурация DeepStream для YOLO11

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

    cp ~/DeepStream-Yolo/utils/export_yoloV8.py ~/ultralytics
    cd ultralytics
    

    Примечание

    export_yoloV8.py работает для моделей YOLOv8 и YOLO11 .

  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_yoloV8.py -w yolo11s.pt
    

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

    Для DeepStream 6.0.1 используйте опсет 12 или ниже. По умолчанию используется опсет 16.

    --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_yoloV8.txt файл в соответствии с вашей моделью (для YOLO11s с 80 классами)

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

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

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

Выполнить вывод

deepstream-app -c deepstream_app_config.txt

Примечание

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

YOLO11 с глубоким потоком

Наконечник

Если вы хотите преобразовать модель в точность FP16, просто установите model-engine-file=model_b1_gpu0_fp16.engine и network-mode=2 внутри config_infer_primary_yoloV8.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 изображений задайте значение -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_yoloV8.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

Настройка многопотокового режима

Чтобы настроить несколько потоков в одном приложении 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_video>
    uri=<path_to_video>
    uri=<path_to_video>
    uri=<path_to_video>
    num-sources=4
    

Выполнить вывод

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 для YOLO11.

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

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

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

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

Более подробную информацию о конвертации моделей вы найдете в разделе "Экспорт моделей".

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

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

  • FP32 Precision: 14,6 мс/им, 68,5 FPS
  • FP16 Precision: 7,94 мс/им, 126 FPS
  • INT8 Precision: 5,95 мс/им, 168 FPS

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

📅 Создано 6 месяцев назад ✏️ Обновлено 13 дней назад

Комментарии