Ultralytics YOLO26 на NVIDIA Jetson с использованием DeepStream SDK и TensorRT#
Watch: How to use Ultralytics YOLO26 models with NVIDIA Deepstream on Jetson Orin NX 🚀
Это подробное руководство содержит пошаговое описание развертывания Ultralytics YOLO26 на устройствах NVIDIA Jetson с использованием DeepStream SDK и TensorRT. Здесь мы используем TensorRT, чтобы максимально повысить производительность инференса на платформе Jetson.
В этом руководстве рассматриваются настройка DeepStream для YOLO26, калибровка INT8, настройка нескольких потоков и результаты бенчмарков.

Это руководство протестировано на 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 локально, на периферии и в облаке.
Предварительные требования#
Перед началом работы с этим руководством:
- Ознакомься с нашей документацией, кратким руководством: NVIDIA Jetson с Ultralytics YOLO26, чтобы настроить устройство NVIDIA Jetson для работы с Ultralytics YOLO26
- Установи DeepStream SDK в соответствии с версией JetPack
- Для JetPack 4.6.4 установи DeepStream 6.0.1
- Для JetPack 5.1.3 установи DeepStream 6.3
- Для JetPack 6.1 установи DeepStream 7.1
- Для JetPack 7.1 установи DeepStream 9.0
В этом руководстве мы использовали способ установки DeepStream SDK на устройство Jetson с помощью пакета Debian. Также можно посетить страницу DeepStream SDK на Jetson (архив), чтобы получить доступ к устаревшим версиям DeepStream.
Настройка DeepStream для YOLO26#
Здесь мы используем репозиторий GitHub marcoslucianops/DeepStream-Yolo, содержащий поддержку NVIDIA DeepStream SDK для моделей YOLO. Мы благодарим marcoslucianops за его вклад!
-
Установи Ultralytics с необходимыми зависимостями
pip install ultralytics onnx onnxslim -
Клонируй репозиторий DeepStream-Yolo
cd ~ git clone https://github.com/marcoslucianops/DeepStream-Yolo -
Скачай выбранную модель обнаружения Ultralytics YOLO26 (.pt) из проекта YOLO26. Здесь мы используем yolo26s.pt.
wget https://github.com/ultralytics/assets/releases/download/v8.4.0/yolo26s.pt
Также можно использовать модель YOLO26, обученную на собственных данных.
-
Конвертируй модель в 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 и более ранние). Полный список см. в разделе export arguments.
-
Скопируй созданный файл модели
.onnxи файлlabels.txtв папкуDeepStream-Yolocp yolo26s.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Для JetPack 7.1:
export CUDA_VER=13.0 -
Скомпилируй библиотеку
make -C nvdsinfer_custom_impl_Yolo clean && make -C nvdsinfer_custom_impl_Yolo -
Измени файл
config_infer_primary_yolo26.txtв соответствии с используемой моделью (для YOLO26s с 80 классами)[property] ... onnx-file=yolo26s.onnx ... num-detected-classes=80 ... parse-bbox-func-name=NvDsInferParseYolo ...
YOLO26 изменяет размер входных данных с центрированным дополнением и работает без NMS. Для максимальной точности добавь следующее в раздел [property] файла config_infer_primary_yolo26.txt:
[property]
...
maintain-aspect-ratio=1
symmetric-padding=1
cluster-mode=4
...-
Измени файл
deepstream_app_config... [primary-gie] ... config-file=config_infer_primary_yolo26.txt -
Также можно изменить источник видео в файле
deepstream_app_config. Здесь загружается видеофайл по умолчанию... [source0] ... uri=file:///opt/nvidia/deepstream/deepstream/samples/streams/sample_1080p_h264.mp4
Запусти инференс#
deepstream-app -c deepstream_app_config.txtПеред началом инференса создание файла движка TensorRT займет много времени. Пожалуйста, подожди.

Если ты хочешь преобразовать модель в формат 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, с которым ожидается корректная работа.
-
Задай переменную окружения
OPENCVexport 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_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Настройка нескольких потоков#
Watch: How to Run Multi-Stream Inference with Ultralytics YOLO26 using NVIDIA DeepStream on Jetson Orin 🚀
Чтобы настроить несколько потоков в одном приложении DeepStream, внеси следующие изменения в файл deepstream_app_config.txt:
-
Измени количество строк и столбцов, чтобы создать сетку отображения в соответствии с нужным количеством потоков. Например, для 4 потоков можно добавить 2 строки и 2 столбца.
[tiled-display] rows=2 columns=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
Результаты бенчмарков#
Следующие бенчмарки показывают производительность моделей YOLO11 при разных уровнях точности TensorRT с размером входных данных 640x640 на NVIDIA Jetson Orin NX 16GB. YOLO26 использует описанный выше рабочий процесс экспорта и инференса DeepStream.
Сравнительный график#

Подробная сравнительная таблица#
| Формат | Статус | Время инференции (мс/изображение) |
|---|---|---|
| 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 и более ранние). Подробную информацию о конвертации моделей см. в нашем разделе model export section.Чтобы запустить инференс 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. Дополнительные сведения см. в разделе Результаты бенчмарков.