Ultralytics YOLO11 на NVIDIA Jetson с использованием DeepStream SDK и TensorRT
Смотреть: Как использовать модели Ultralytics YOLO11 с NVIDIA Deepstream на Jetson Orin NX 🚀
Это подробное руководство содержит детальное описание развертывания Ultralytics YOLO11 на устройствах NVIDIA Jetson с использованием DeepStream SDK и TensorRT. Здесь мы используем TensorRT, чтобы максимально повысить производительность логического вывода на платформе 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 локально, на периферии и в облаке.
Предварительные требования
Прежде чем вы начнете следовать этому руководству:
- Посетите нашу документацию, Краткое руководство по началу работы: NVIDIA Jetson с Ultralytics YOLO11, чтобы настроить ваше устройство NVIDIA Jetson с помощью Ultralytics YOLO11
- Установите DeepStream SDK в соответствии с версией JetPack
- Для JetPack 4.6.4 установите DeepStream 6.0.1
- Для JetPack 5.1.3 установите DeepStream 6.3
- Для JetPack 6.1 установите DeepStream 7.1
Совет
В этом руководстве мы использовали метод установки DeepStream SDK на устройство Jetson с помощью пакета Debian. Вы также можете посетить DeepStream SDK on Jetson (Archived), чтобы получить доступ к устаревшим версиям DeepStream.
Конфигурация DeepStream для YOLO11
Здесь мы используем репозиторий GitHub marcoslucianops/DeepStream-Yolo, который включает поддержку NVIDIA DeepStream SDK для моделей YOLO. Мы ценим усилия marcoslucianops за его вклад!
-
Установите Ultralytics с необходимыми зависимостями
cd ~ pip install -U pip git clone https://github.com/ultralytics/ultralytics cd ultralytics pip install -e ".[export]" onnxslim
-
Клонируйте репозиторий DeepStream-Yolo
cd ~ git clone https://github.com/marcoslucianops/DeepStream-Yolo
-
Скопировать
export_yolo11.py
файл изDeepStream-Yolo/utils
каталог кultralytics
папкаcp ~/DeepStream-Yolo/utils/export_yolo11.py ~/ultralytics cd ultralytics
-
Загрузите выбранную вами модель обнаружения Ultralytics YOLO11 (.pt) из релизов YOLO11. Здесь мы используем yolo11s.pt.
wget https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11s.pt
Примечание
Вы также можете использовать пользовательскую обученную модель YOLO11.
-
Преобразовать модель в ONNX
python3 export_yolo11.py -w yolo11s.pt
Передайте указанные ниже аргументы в вышеуказанную команду
Для DeepStream 5.1 удалите
--dynamic
arg и useopset
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
-
Скопировать сгенерированный
.onnx
файл модели иlabels.txt
файл вDeepStream-Yolo
папкаcp yolo11s.pt.onnx labels.txt ~/DeepStream-Yolo cd ~/DeepStream-Yolo
-
Установите версию 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
-
Скомпилируйте библиотеку
make -C nvdsinfer_custom_impl_Yolo clean && make -C nvdsinfer_custom_impl_Yolo
-
Редактировать
config_infer_primary_yolo11.txt
файл в соответствии с вашей моделью (для YOLO11 с 80 классами)[property] ... onnx-file=yolo11s.pt.onnx ... num-detected-classes=80 ...
-
Редактировать
deepstream_app_config
файла... [primary-gie] ... config-file=config_infer_primary_yolo11.txt
-
Вы также можете изменить источник видео в
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 займет много времени перед началом инференса. Пожалуйста, будьте терпеливы.

Совет
Если вы хотите преобразовать модель в 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, который, как ожидается, будет работать.
-
Установить
OPENCV
переменная окруженияexport OPENCV=1
-
Скомпилируйте библиотеку
make -C nvdsinfer_custom_impl_Yolo clean && make -C nvdsinfer_custom_impl_Yolo
-
Для набора данных COCO скачайте val2017, извлеките и переместите в
DeepStream-Yolo
папка -
Создайте новый каталог для калибровочных изображений
mkdir calibration
-
Выполните следующую команду, чтобы выбрать 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. Этот процесс может занять много времени.
-
Создать
calibration.txt
файл со всеми выбранными изображениямиrealpath calibration/*jpg > calibration.txt
-
Установить переменные среды
export INT8_CALIB_IMG_PATH=calibration.txt export INT8_CALIB_BATCH_SIZE=1
Примечание
Более высокие значения INT8_CALIB_BATCH_SIZE приведут к большей точности и более высокой скорости калибровки. Установите его в соответствии с памятью вашей GPU.
-
Обновить
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
файла
-
Измените строки и столбцы, чтобы создать сетку отображения в соответствии с количеством потоков, которые вы хотите иметь. Например, для 4 потоков мы можем добавить 2 строки и 2 столбца.
[tiled-display] rows=2 columns=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.
Сравнительная таблица

Подробная сравнительная таблица
Производительность
Формат | Статус | Время инференса (мс/изобр.) |
---|---|---|
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. Более подробную информацию смотрите в разделе Результаты тестов.