Ultralytics YOLO27:
Get Started

DeepStream SDK 및 TensorRT를 사용한 NVIDIA Jetson의 Ultralytics YOLO26#



시청: Jetson Orin NX에서 NVIDIA Deepstream과 함께 Ultralytics YOLO26 모델을 사용하는 방법 🚀

이 종합 가이드에서는 DeepStream SDK와 TensorRT를 사용하여 NVIDIA Jetson 장치에 Ultralytics YOLO26을 배포하는 방법을 자세히 안내합니다. 여기서는 TensorRT를 사용하여 Jetson 플랫폼의 추론 성능을 극대화합니다.

이 가이드에서는 YOLO26용 DeepStream 구성, INT8 보정, 멀티 스트림 설정, 벤치마크 결과를 안내합니다.

NVIDIA DeepStream SDK on Jetson platform
참고

이 가이드는 JetPack JP6.1을 실행하는 NVIDIA Jetson Orin Nano Super Developer Kit, JetPack JP5.1.3을 실행하는 NVIDIA Jetson Orin NX 16GB 기반의 Seeed Studio reComputer J4012, JetPack JP4.6.4을 실행하는 NVIDIA Jetson Nano 4GB 기반의 Seeed Studio reComputer J1020 v2에서 테스트했습니다. 최신 및 레거시 제품을 포함한 NVIDIA Jetson 하드웨어 전 제품군에서 작동할 것으로 예상됩니다.

NVIDIA DeepStream이란 무엇인가요?#

NVIDIA의 DeepStream SDK는 AI 기반 멀티 센서 처리, 비디오, 오디오 및 이미지 이해를 위한 GStreamer 기반의 종합 스트리밍 분석 툴킷입니다. 지능형 비디오 분석(IVA) 앱과 서비스를 구축하는 비전 AI 개발자, 소프트웨어 파트너, 스타트업 및 OEM에 적합합니다. 이제 신경망과 추적, 비디오 인코딩/디코딩, 비디오 렌더링 등의 복잡한 처리 작업을 통합하는 스트림 처리 파이프라인을 만들 수 있습니다. 이러한 파이프라인을 통해 비디오, 이미지 및 센서 데이터를 실시간으로 분석할 수 있습니다. DeepStream은 멀티 플랫폼을 지원하므로 온프레미스, 엣지 및 클라우드에서 비전 AI 애플리케이션과 서비스를 더 빠르고 쉽게 개발할 수 있습니다.

사전 요구 사항#

이 가이드를 시작하기 전에 다음을 수행하세요.

팁

이 가이드에서는 Debian 패키지를 사용하여 Jetson 장치에 DeepStream SDK를 설치했습니다. DeepStream의 이전 버전에 액세스하려면 Jetson용 DeepStream SDK(보관된 버전)도 참조할 수 있습니다.

YOLO26용 DeepStream 구성#

여기서는 YOLO 모델을 위한 NVIDIA DeepStream SDK 지원이 포함된 GitHub 저장소인 marcoslucianops/DeepStream-Yolo를 사용합니다. 기여해 주신 marcoslucianops의 노고에 감사드립니다!

  1. 필요한 종속 항목과 함께 Ultralytics를 설치하세요.

    pip install ultralytics onnx onnxslim
  2. DeepStream-Yolo 저장소를 복제하세요.

    cd ~
    git clone https://github.com/marcoslucianops/DeepStream-Yolo
  3. YOLO26 프로젝트에서 원하는 Ultralytics YOLO26 객체 감지 모델(.pt)을 다운로드하세요. 여기서는 yolo26s.pt를 사용합니다.

    wget https://github.com/ultralytics/assets/releases/download/v8.4.0/yolo26s.pt
참고

사용자 지정 학습된 YOLO26 모델도 사용할 수 있습니다.

  1. 모델을 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을 추가하세요. 전체 목록은 내보내기 인수를 참조하세요.

  1. 생성된 .onnx 모델 파일과 labels.txt 파일을 DeepStream-Yolo 폴더에 복사하세요.

    cp yolo26s.onnx labels.txt ~/DeepStream-Yolo
    cd ~/DeepStream-Yolo
  2. 설치된 JetPack 버전에 따라 CUDA 버전을 설정하세요.

    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
  3. 라이브러리를 컴파일하세요.

    make -C nvdsinfer_custom_impl_Yolo clean && make -C nvdsinfer_custom_impl_Yolo
  4. 모델에 맞게 config_infer_primary_yolo26.txt 파일을 편집하세요(클래스 80개인 YOLO26s의 경우).

    [property]
    ...
    onnx-file=yolo26s.onnx
    ...
    num-detected-classes=80
    ...
    parse-bbox-func-name=NvDsInferParseYolo
    ...
YOLO26 정확도 설정

YOLO26은 입력 이미지에 중앙 패딩을 적용해 크기를 조정하며 NMS 없이 실행됩니다. 최상의 정확도를 얻으려면 config_infer_primary_yolo26.txt의 [property] 섹션에 다음을 추가하세요.

[property]
...
maintain-aspect-ratio=1
symmetric-padding=1
cluster-mode=4
...
  1. deepstream_app_config 파일을 편집하세요.

    ...
    [primary-gie]
    ...
    config-file=config_infer_primary_yolo26.txt
  2. deepstream_app_config 파일에서 비디오 소스를 변경할 수도 있습니다. 여기서는 기본 비디오 파일을 불러옵니다.

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

추론 실행#

deepstream-app -c deepstream_app_config.txt
참고

추론을 시작하기 전에 TensorRT 엔진 파일을 생성하는 데 시간이 오래 걸립니다. 기다려 주세요.

YOLO26 with deepstream
팁

모델을 FP16 정밀도로 변환하려면 config_infer_primary_yolo26.txt 내에서 model-engine-file=model_b1_gpu0_fp16.engine과 network-mode=2을 설정하면 됩니다.

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. 보정을 실행하기 위해 COCO 데이터셋에서 무작위 이미지 1000개를 선택하려면 다음 명령을 실행하세요.

    for jpg in $(ls -1 val2017/*.jpg | sort -R | head -1000); do
      cp ${jpg} calibration/
    done
참고

NVIDIA는 양호한 정확도를 얻기 위해 최소 500개의 이미지를 권장합니다. 이 예제에서는 정확도를 높이기 위해 이미지 1000개를 선택했습니다(이미지가 많을수록 정확도가 높아집니다). head -1000 값을 설정하면 됩니다. 예를 들어 이미지 2000개를 사용하려면 head -2000으로 설정하세요. 이 과정은 시간이 오래 걸릴 수 있습니다.

  1. 선택한 이미지를 모두 포함하는 calibration.txt 파일을 만드세요.

    realpath calibration/*jpg > calibration.txt
  2. 환경 변수를 설정하세요.

    export INT8_CALIB_IMG_PATH=calibration.txt
    export INT8_CALIB_BATCH_SIZE=1
참고

INT8_CALIB_BATCH_SIZE 값을 높이면 정확도가 향상되고 보정 속도가 빨라집니다. GPU 메모리에 맞게 값을 설정하세요.

  1. 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

멀티 스트림 설정#



시청: Jetson Orin에서 NVIDIA DeepStream을 사용해 Ultralytics YOLO26으로 멀티 스트림 추론을 실행하는 방법 🚀

하나의 DeepStream 애플리케이션에서 여러 스트림을 설정하려면 deepstream_app_config.txt 파일을 다음과 같이 변경하세요.

  1. 사용할 스트림 수에 맞춰 행과 열을 변경하여 격자 표시를 구성하세요. 예를 들어 스트림 4개를 사용한다면 행 2개와 열 2개를 추가하면 됩니다.

    [tiled-display]
    rows=2
    columns=2
  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
DeepStream multi-camera streaming configuration

벤치마크 결과#

다음 벤치마크는 NVIDIA Jetson Orin NX 16GB에서 입력 크기 640x640을 사용하고 TensorRT 정밀도 수준을 달리했을 때 YOLO11 모델의 성능을 요약합니다. YOLO26은 위에서 설명한 것과 동일한 DeepStream 내보내기 및 추론 워크플로를 사용합니다.

비교 차트#

NVIDIA Jetson DeepStream performance benchmarks

상세 비교 표#

성능
형식상태추론 시간(ms/이미지)
TensorRT(FP32)✅8.64
TensorRT(FP16)✅5.27
TensorRT(INT8)✅4.54

감사의 말#

이 가이드는 Seeed Studio의 동료인 Lakshantha와 Elaine이 처음 작성했습니다.

자주 묻는 질문#

  • NVIDIA Jetson 장치에서 Ultralytics YOLO26을 설정하려면 먼저 JetPack 버전과 호환되는 DeepStream SDK를 설치해야 합니다. NVIDIA Jetson에서 YOLO26 배포를 구성하려면 빠른 시작 가이드의 단계별 안내를 따르세요.

  • YOLO26에서 TensorRT를 사용하면 추론에 맞게 모델을 최적화하여 NVIDIA Jetson 장치의 지연 시간을 크게 줄이고 처리량을 높일 수 있습니다. TensorRT는 레이어 융합, 정밀도 보정 및 커널 자동 튜닝을 통해 고성능, 저지연 딥러닝 추론을 제공합니다. 이를 통해 실행 속도와 효율성이 향상되며, 비디오 분석 및 자율 주행 기계와 같은 실시간 애플리케이션에 특히 유용합니다.

  • 예. 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 추론을 실행하려면 대표 이미지 세트로 모델을 보정하고 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를 나열하세요. 격자를 구성하려면 [tiled-display] 아래의 rows 및 columns를 설정하고, 각 스트림에 자체 uri 및 num-sources=1이 포함된 별도의 [sourceN] 그룹을 추가한 다음 스트림 수에 맞게 격자를 조정하세요. 전체 예제는 멀티 스트림 설정 섹션을 참조하세요.

  • 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 모델을 사용하는 것이 효율적이고 뛰어난 성능을 제공한다는 점을 보여줍니다. 자세한 내용은 벤치마크 결과 섹션을 참조하세요.

댓글