DeepStream SDK 및 TensorRT를 사용하는 NVIDIA Jetson의 Ultralytics YOLO26#
Watch: How to use Ultralytics YOLO26 models with NVIDIA Deepstream on Jetson Orin NX 🚀
이 종합 가이드는 DeepStream SDK 및 TensorRT를 사용하여 NVIDIA Jetson 디바이스에 Ultralytics YOLO26을 배포하는 방법을 자세히 안내합니다. 여기서는 TensorRT를 사용하여 Jetson 플랫폼에서 추론 성능을 극대화합니다.
이 가이드에서는 YOLO26용 DeepStream 구성, INT8 calibration, 멀티 스트림 설정 및 벤치마크 결과를 단계별로 설명합니다.

이 가이드는 JP6.1의 최신 안정 JetPack 릴리스를 실행하는 NVIDIA Jetson Orin Nano Super Developer Kit, NVIDIA Jetson Orin NX 16GB를 기반으로 하며 JP5.1.3 JetPack 릴리스를 실행하는 Seeed Studio reComputer J4012, NVIDIA Jetson Nano 4GB를 기반으로 하며 JP4.6.4 JetPack 릴리스를 실행하는 Seeed Studio reComputer J1020 v2에서 테스트되었습니다. 최신 및 레거시 모델을 포함한 모든 NVIDIA Jetson 하드웨어 라인업에서 작동할 것으로 예상됩니다.
NVIDIA DeepStream이란 무엇인가요?#
NVIDIA의 DeepStream SDK는 AI 기반 멀티 센서 처리, 비디오, 오디오 및 이미지 이해를 위한 GStreamer 기반의 종합 스트리밍 분석 툴킷입니다. 지능형 비디오 분석(IVA) 앱과 서비스를 구축하는 비전 AI 개발자, 소프트웨어 파트너, 스타트업 및 OEM에 적합합니다. 이제 신경망과 추적, 비디오 인코딩/디코딩, 비디오 렌더링 같은 복잡한 처리 작업을 통합한 스트림 처리 파이프라인을 만들 수 있습니다. 이러한 파이프라인을 통해 비디오, 이미지 및 센서 데이터에 대한 실시간 분석이 가능합니다. DeepStream의 멀티 플랫폼 지원은 온프레미스, 엣지 및 클라우드에서 비전 AI 애플리케이션과 서비스를 더 빠르고 쉽게 개발할 수 있도록 합니다.
필수 조건#
이 가이드를 시작하기 전에 다음을 수행합니다.
- 문서를 참조하여 NVIDIA Jetson 디바이스에 Ultralytics YOLO26을 설정합니다. 빠른 시작 가이드: NVIDIA Jetson 및 Ultralytics YOLO26
- JetPack 버전에 맞게 DeepStream SDK를 설치합니다.
- 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을 설치합니다.
이 가이드에서는 Jetson 디바이스에 DeepStream SDK를 설치하는 Debian 패키지 방식을 사용했습니다. Jetson용 DeepStream SDK(보관됨)를 방문하여 DeepStream의 레거시 버전에 액세스할 수도 있습니다.
YOLO26용 DeepStream 구성#
여기서는 YOLO 모델에 대한 NVIDIA DeepStream SDK 지원이 포함된 marcoslucianops/DeepStream-Yolo GitHub repository를 사용합니다. marcoslucianops의 기여와 노력에 감사드립니다!
-
필요한 종속 항목과 함께 Ultralytics 설치
pip install ultralytics onnx onnxslim -
DeepStream-Yolo repository 복제
cd ~ git clone https://github.com/marcoslucianops/DeepStream-Yolo -
YOLO26 project에서 원하는 Ultralytics YOLO26 detection model(.pt)을 다운로드합니다. 여기서는 yolo26s.pt를 사용합니다.
wget https://github.com/ultralytics/assets/releases/download/v8.4.0/yolo26s.pt
custom-trained YOLO26 model을 사용할 수도 있습니다.
-
모델을 ONNX로 변환하고 DeepStream이 클래스 이름을 읽어오는
labels.txt파일을 작성합니다.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은 감지당 단일 클래스를 유지하여 DeepStream 설정의 cluster-mode=4(클러스터링 없음)가 상자를 두 번 그리지 않도록 합니다. 추론 크기를 변경하려면 imgsz=1280을 추가하고(기본값: 640), 배치 크기 4를 위해 batch=4를 추가하며(내보낸 배치는 정적이므로 DeepStream 설정의 batch-size와 일치해야 합니다), TensorRT 8.2 이하(DeepStream 6.0.1 및 이전 버전)의 경우 opset=12을 추가합니다. 전체 목록은 내보내기 인수를 참조하세요.
-
생성된
.onnx모델 파일과labels.txt파일을DeepStream-Yolo폴더로 복사합니다.cp yolo26s.onnx labels.txt ~/DeepStream-Yolo cd ~/DeepStream-Yolo -
설치된 JetPack 버전에 맞게 CUDA 버전을 설정합니다.
JetPack 4.6.4의 경우:
export CUDA_VER=10.2JetPack 5.1.3의 경우:
export CUDA_VER=11.4JetPack 6.1의 경우:
export CUDA_VER=12.6JetPack 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 없이 실행됩니다. 최상의 정확도를 얻으려면 config_infer_primary_yolo26.txt의 [property] 섹션에 다음을 추가합니다.
[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 engine 파일을 생성하는 데 시간이 오래 걸립니다. 잠시 기다려 주시기 바랍니다.

모델을 FP16 정밀도로 변환하려면 config_infer_primary_yolo26.txt 내부의 model-engine-file=model_b1_gpu0_fp16.engine 및 network-mode=2을 설정하면 됩니다.
INT8 Calibration#
추론에 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 dataset의 경우 val2017을 다운로드하고 압축을 해제한 후
DeepStream-Yolo폴더로 이동합니다. -
Calibration images용 새 디렉터리를 만듭니다.
mkdir calibration -
COCO dataset에서 무작위 이미지 1000개를 선택하여 calibration을 실행하려면 다음을 실행합니다.
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 값이 클수록 정확도가 높아지고 calibration 속도가 빨라집니다. GPU memory에 맞게 설정합니다.
-
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 engine을 빌드하고 추론을 시작합니다.
deepstream-app -c deepstream_app_config.txtMultiStream 설정#
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
벤치마크 결과#
다음 벤치마크는 NVIDIA Jetson Orin NX 16GB에서 입력 크기 640x640으로 다양한 TensorRT 정밀도 수준에서 YOLO11 모델이 수행하는 방식을 요약합니다. YOLO26은 위에서 설명한 것과 동일한 DeepStream export 및 추론 워크플로를 사용합니다.
비교 차트#

상세 비교 표#
| 형식 | 상태 | 추론 시간 (ms/im) |
|---|---|---|
| TensorRT (FP32) | ✅ | 8.64 |
| TensorRT (FP16) | ✅ | 5.27 |
| TensorRT (INT8) | ✅ | 4.54 |
감사의 말#
이 가이드는 처음에 Seeed Studio의 동료인 Lakshantha와 Elaine이 작성했습니다.
FAQ#
NVIDIA Jetson 디바이스에 Ultralytics YOLO26을 설정하려면 먼저 JetPack 버전에 호환되는 DeepStream SDK를 설치해야 합니다. 빠른 시작 가이드의 단계별 안내에 따라 YOLO26 배포를 위한 NVIDIA Jetson을 구성합니다.
TensorRT와 YOLO26을 함께 사용하면 추론에 맞게 모델을 최적화하여 NVIDIA Jetson 디바이스에서 latency를 크게 줄이고 throughput을 향상시킬 수 있습니다. TensorRT는 layer fusion, precision calibration 및 kernel auto-tuning을 통해 고성능, 저지연 딥 러닝 추론을 제공합니다. 이를 통해 더 빠르고 효율적인 실행이 가능하며, 비디오 분석 및 자율 기계와 같은 실시간 애플리케이션에 특히 유용합니다.
예. DeepStream SDK 및 TensorRT를 사용하여 Ultralytics YOLO26을 배포하는 가이드는 전체 NVIDIA Jetson 라인업과 호환됩니다. 여기에는 JetPack 5.1.3을 사용하는 Jetson Orin NX 16GB 및 JetPack 4.6.4를 사용하는 Jetson Nano 4GB와 같은 디바이스가 포함됩니다. 자세한 단계는 YOLO26용 DeepStream 구성 섹션을 참조합니다.
Ultralytics 내보내기 도구를 사용하여 NMS가 없는 헤드로 모델을 내보내고, DeepStream이 클래스 이름을 읽어오는
labels.txt파일을 작성합니다: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()))TensorRT 8.2 이하(DeepStream 6.0.1 및 이전 버전)의 경우
opset=12을 추가합니다. 모델 변환에 대한 자세한 내용은 모델 내보내기 섹션을 확인하세요.INT8 추론을 실행하려면 대표 이미지 세트로 모델을 calibration하고 DeepStream config를 INT8 모드로 전환합니다. COCO val2017 이미지를 다운로드하고, calibration images를 약 1000개 선택한 후
INT8_CALIB_IMG_PATH및INT8_CALIB_BATCH_SIZE환경 변수를 설정합니다. 그런 다음model-engine-file=model_b1_gpu0_int8.engine,int8-calib-file=calib.table및network-mode=1를 사용하여config_infer_primary_yolo26.txt를 업데이트합니다. 전체 단계는 INT8 Calibration 섹션을 참조합니다. 현재 INT8에는 TensorRT 8.x가 필요합니다.단일 DeepStream 애플리케이션에서 여러 스트림을 처리하려면
deepstream_app_config.txt파일을 편집하여 타일 형식 디스플레이 그리드를 추가하고 각 source URI를 나열합니다.[tiled-display]아래에rows및columns를 설정하여 그리드를 구성하고, 스트림별로 고유한uri및num-sources=1이 포함된 별도의[sourceN]그룹을 추가한 다음 스트림 수에 맞게 그리드를 조정합니다. 전체 예제는 MultiStream 설정 섹션을 참조합니다.NVIDIA Jetson Orin NX 16GB에서 YOLO11 모델의 성능은 TensorRT 정밀도 수준에 따라 달라집니다. 예를 들어 YOLO11s 모델은 다음과 같은 결과를 달성합니다.
- FP32 정밀도: 14.53 ms/im, 68.8 FPS
- FP16 정밀도: 7.91 ms/im, 126 FPS
- INT8 정밀도: 6.05 ms/im, 165 FPS
이러한 벤치마크는 NVIDIA Jetson 하드웨어에서 TensorRT로 최적화된 YOLO11 모델의 효율성과 성능을 보여줍니다. 자세한 내용은 벤치마크 결과 섹션을 참조합니다.