콘텐츠로 건너뛰기

DeepStream SDK 및 TensorRT를 사용하는 NVIDIA Jetson의 Ultralytics YOLO11



참고: Jetson Orin NX에서 NVIDIA Deepstream과 함께 Ultralytics YOLO11 모델을 사용하는 방법 🚀

이 종합 가이드는 DeepStream SDK 및 TensorRT를 사용하여 NVIDIA Jetson 장치에 Ultralytics YOLO11을 배포하기 위한 자세한 안내를 제공합니다. 여기서는 TensorRT를 사용하여 Jetson 플랫폼에서 추론 성능을 최대화합니다.

NVIDIA Jetson의 DeepStream

참고

이 가이드는 최신 안정적인 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(Intelligent Video Analytics) 앱 및 서비스를 구축하는 비전 AI 개발자, 소프트웨어 파트너, 스타트업 및 OEM에 적합합니다. 이제 신경망 및 추적, 비디오 인코딩/디코딩 및 비디오 렌더링과 같은 기타 복잡한 처리 작업을 통합하는 스트림 처리 파이프라인을 만들 수 있습니다. 이러한 파이프라인은 비디오, 이미지 및 센서 데이터에 대한 실시간 분석을 가능하게 합니다. DeepStream의 다중 플랫폼 지원은 온프레미스, 에지 및 클라우드에서 비전 AI 애플리케이션 및 서비스를 개발할 수 있는 더 빠르고 쉬운 방법을 제공합니다.

필수 조건

이 가이드를 시작하기 전에:

이 가이드에서는 Jetson 장치에 DeepStream SDK를 설치하는 데 Debian 패키지 방식을 사용했습니다. Jetson의 DeepStream SDK (보관됨)을 방문하여 기존 버전의 DeepStream에 액세스할 수도 있습니다.

YOLO11용 DeepStream 구성

여기서는 YOLO 모델에 대한 NVIDIA DeepStream SDK 지원을 포함하는 marcoslucianops/DeepStream-Yolo GitHub 저장소를 사용하고 있습니다. 기여해 주신 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_yolo11.py 파일을 다음에서 가져옵니다. DeepStream-Yolo/utils 디렉터리를 ultralytics 폴더

    cp ~/DeepStream-Yolo/utils/export_yolo11.py ~/ultralytics
    cd ultralytics
    
  4. YOLO11 릴리스에서 원하는 Ultralytics YOLO11 감지 모델(.pt)을 다운로드하십시오. 여기서는 yolo11s.pt를 사용합니다.

    wget https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11s.pt
    

    참고

    사용자 정의 학습된 YOLO11 모델을 사용할 수도 있습니다.

  5. 모델을 ONNX로 변환

    python3 export_yolo11.py -w yolo11s.pt
    

    위 명령에 아래 인수를 전달합니다.

    DeepStream 5.1의 경우 다음을 제거하십시오. --dynamic 인수 및 사용 opset 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
    
  6. 생성된 다음을 복사합니다. .onnx 모델 파일과 labels.txt 파일을 다음으로 설정하십시오. DeepStream-Yolo 폴더

    cp yolo11s.pt.onnx labels.txt ~/DeepStream-Yolo
    cd ~/DeepStream-Yolo
    
  7. 설치된 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
    
  8. 라이브러리 컴파일

    make -C nvdsinfer_custom_impl_Yolo clean && make -C nvdsinfer_custom_impl_Yolo
    
  9. 다음을 편집하십시오. config_infer_primary_yolo11.txt 모델에 따라 해당 파일을 사용하십시오 (80개의 클래스가 있는 YOLO11s의 경우).

    [property]
    ...
    onnx-file=yolo11s.pt.onnx
    ...
    num-detected-classes=80
    ...
    
  10. 다음을 편집하십시오. deepstream_app_config 파일

    ...
    [primary-gie]
    ...
    config-file=config_infer_primary_yolo11.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 엔진 파일을 생성하는 데 오랜 시간이 걸립니다. 잠시만 기다려 주십시오.

deepstream을 사용하는 YOLO11

모델을 FP16 정밀도로 변환하려면 다음을 설정하기만 하면 됩니다. model-engine-file=model_b1_gpu0_fp16.enginenetwork-mode=2 내부 config_infer_primary_yolo11.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. 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입니다. 이 프로세스는 시간이 오래 걸릴 수 있습니다.

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

추론 실행

deepstream-app -c deepstream_app_config.txt

MultiStream 설정



참고: Ultralytics YOLO11을 사용하여 Jetson Nano에서 DeepStream SDK로 여러 스트림을 실행하는 방법 🎉

단일 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/video1.jpg
    uri=path/to/video2.jpg
    uri=path/to/video3.jpg
    uri=path/to/video4.jpg
    num-sources=4
    

추론 실행

deepstream-app -c deepstream_app_config.txt
멀티 스트림 설정

벤치마크 결과

다음 벤치마크는 NVIDIA Jetson Orin NX 16GB에서 640x640의 입력 크기로 다양한 TensorRT 정밀도 수준에서 YOLO11 모델이 수행되는 방식을 요약합니다.

비교 차트

Jetson DeepStream 벤치마크 차트

자세한 비교 표

성능

형식 상태 추론 시간 (ms/im)
TensorRT (FP32) 8.64
TensorRT (FP16) 5.27
TensorRT (INT8) 4.54
형식 상태 추론 시간 (ms/im)
TensorRT (FP32) 14.53
TensorRT (FP16) 7.91
TensorRT (INT8) 6.05
형식 상태 추론 시간 (ms/im)
TensorRT (FP32) 32.05
TensorRT (FP16) 15.55
TensorRT (INT8) 10.43
형식 상태 추론 시간 (ms/im)
TensorRT (FP32) 39.68
TensorRT (FP16) 19.88
TensorRT (INT8) 13.64
형식 상태 추론 시간 (ms/im)
TensorRT (FP32) 80.65
TensorRT (FP16) 39.06
TensorRT (INT8) 22.83

감사의 말씀

이 가이드는 원래 Seeed Studio의 Lakshantha와 Elaine이 만들었습니다.

FAQ

NVIDIA Jetson 장치에 Ultralytics YOLO11을 어떻게 설정합니까?

NVIDIA Jetson 장치에 Ultralytics YOLO11을 설정하려면 먼저 JetPack 버전과 호환되는 DeepStream SDK를 설치해야 합니다. 빠른 시작 가이드의 단계별 가이드에 따라 YOLO11 배포를 위해 NVIDIA Jetson을 구성하십시오.

NVIDIA Jetson에서 YOLO11과 함께 TensorRT를 사용하면 어떤 이점이 있습니까?

TensorRT를 YOLO11과 함께 사용하면 추론을 위해 모델이 최적화되어 NVIDIA Jetson 장치에서 대기 시간이 크게 줄어들고 처리량이 향상됩니다. TensorRT는 레이어 융합, 정밀도 보정 및 커널 자동 튜닝을 통해 고성능, 저지연 딥 러닝 추론을 제공합니다. 이를 통해 특히 비디오 분석 및 자율 머신과 같은 실시간 애플리케이션에서 더 빠르고 효율적인 실행이 가능합니다.

서로 다른 NVIDIA Jetson 하드웨어에서 DeepStream SDK와 함께 Ultralytics YOLO11을 실행할 수 있습니까?

예, DeepStream SDK 및 TensorRT를 사용하여 Ultralytics YOLO11을 배포하기 위한 가이드는 전체 NVIDIA Jetson 라인업에서 호환됩니다. 여기에는 JetPack 5.1.3이 탑재된 Jetson Orin NX 16GB와 JetPack 4.6.4가 탑재된 Jetson Nano 4GB와 같은 장치가 포함됩니다. 자세한 단계는 YOLO11용 DeepStream 구성 섹션을 참조하십시오.

DeepStream용으로 YOLO11 모델을 ONNX로 어떻게 변환할 수 있습니까?

DeepStream을 사용하여 배포하기 위해 YOLO11 모델을 ONNX 형식으로 변환하려면 다음을 사용하십시오. utils/export_yolo11.py 스크립트는 DeepStream-Yolo 저장소에서 가져옵니다.

다음은 예제 명령어입니다.

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

모델 변환에 대한 자세한 내용은 모델 내보내기 섹션을 확인하십시오.

NVIDIA Jetson Orin NX에서 YOLO의 성능 벤치마크는 무엇입니까?

NVIDIA Jetson Orin NX 16GB에서 YOLO11 모델의 성능은 TensorRT 정밀도 수준에 따라 달라집니다. 예를 들어 YOLO11s 모델은 다음과 같은 성능을 보입니다.

  • FP32 정밀도: 14.6ms/im, 68.5 FPS
  • FP16 정밀도: 7.94 ms/im, 126 FPS
  • INT8 정밀도: 5.95 ms/im, 168 FPS

이러한 벤치마크는 NVIDIA Jetson 하드웨어에서 TensorRT에 최적화된 YOLO11 모델을 사용하는 효율성과 성능을 강조합니다. 자세한 내용은 벤치마크 결과 섹션을 참조하십시오.



📅 1년 전에 생성됨 ✏️ 2개월 전에 업데이트됨

댓글