콘텐츠로 건너뛰기

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



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

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

NVIDIA Jetson의 DeepStream

참고

이 가이드는 안정적인 최신 JetPack JP6.1 릴리스를 실행하는 NVIDIA Jetson Orin Nano Super Developer Kit로 테스트되었습니다, NVIDIA 젯슨 오린 NX 16GB 기반Seeed Studio 재컴퓨터 J4012, 젯슨 나노 4GB 기반 Seeed Studio 재컴퓨터 J1020 v2, 젯슨 나노 4GB 기반 NVIDIA 젯슨 나노 4 .6.4 버전으로 테스트되었습니다. 최신 및 레거시를 포함한 모든 NVIDIA Jetson 하드웨어 라인업에서 작동할 것으로 예상됩니다.

NVIDIA DeepStream이란 무엇인가요?

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

전제 조건

이 가이드를 따르기 전에 먼저 확인하세요:

이 가이드에서는 Jetson 장치에 DeepStream SDK를 설치하는 Debian 패키지 방법을 사용했습니다. 또한 Jetson의 DeepStream SDK(아카이브) 를 방문하여 레거시 버전의 DeepStream에 액세스할 수 있습니다.

딥스트림 구성 YOLO11

여기에서는 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. 딥스트림 복제-Yolo 리포지토리

    cd ~
    git clone https://github.com/marcoslucianops/DeepStream-Yolo
    
  3. 복사 export_yoloV8.py 파일에서 DeepStream-Yolo/utils 디렉토리에 ultralytics 폴더

    cp ~/DeepStream-Yolo/utils/export_yoloV8.py ~/ultralytics
    cd ultralytics
    

    참고

    export_yoloV8.py YOLOv8 및 YOLO11 모델 모두에서 작동합니다.

  4. YOLO11 릴리스에서 원하는 탐지 모델(.pt)을 Ultralytics YOLO11 다운로드하세요. 여기서는 yolo11s.pt를 사용합니다.

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

    참고

    사용자 지정 훈련된 YOLO11 모델을 사용할 수도 있습니다.

  5. 모델로 변환 ONNX

    python3 export_yoloV8.py -w yolo11s.pt
    

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

    DeepStream 6.0.1의 경우, 옵셋 12 이하를 사용합니다. 기본 옵셋은 16입니다.

    --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_yoloV8.txt 파일(80개 클래스가 있는 YOLO11의 경우)

    [property]
    ...
    onnx-file=yolo11s.pt.onnx
    ...
    num-detected-classes=80
    ...
    
  10. 편집 deepstream_app_config 파일

    ...
    [primary-gie]
    ...
    config-file=config_infer_primary_yoloV8.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 엔진 파일을 생성하는 데 시간이 오래 걸립니다. 그러니 조금만 기다려주세요.

YOLO11 딥스트림으로

모델을 FP16 정밀도로 변환하려면 다음과 같이 설정하면 됩니다. model-engine-file=model_b1_gpu0_fp16.engine 그리고 network-mode=2 내부 config_infer_primary_yoloV8.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개의 이미지가 선택되었습니다(이미지가 많을수록 정확도가 높아짐). 머리 -1000에서 설정할 수 있습니다. 예를 들어 이미지가 2000개인 경우 -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_yoloV8.txt 파일

    에서

    ...
    model-engine-file=model_b1_gpu0_fp32.engine
    #int8-calib-file=calib.table
    ...
    network-mode=0
    ...
    

    To

    ...
    model-engine-file=model_b1_gpu0_int8.engine
    int8-calib-file=calib.table
    ...
    network-mode=1
    ...
    

추론 실행

deepstream-app -c deepstream_app_config.txt

멀티스트림 설정

단일 딥스트림 애플리케이션에서 여러 스트림을 설정하려면 다음과 같이 딥스트림 애플리케이션을 변경하면 됩니다. 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
멀티스트림 설정

벤치마크 결과

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

비교 차트

젯슨 딥스트림 벤치마크 차트

상세 비교 표

성능

형식 상태 추론 시간(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

감사

이 가이드는 시드 스튜디오의 친구인 락샨타와 일레인이 처음에 만들었습니다.

자주 묻는 질문

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

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

NVIDIA Jetson에서 YOLO11 과 함께 TensorRT 을 사용하면 어떤 이점이 있나요?

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

다른 NVIDIA Jetson 하드웨어에서 DeepStream SDK를 사용하여 Ultralytics YOLO11 실행할 수 있습니까?

예, 배포 가이드 Ultralytics YOLO11 와 DeepStream SDK 및 TensorRT 는 전체 NVIDIA Jetson 라인업에서 호환됩니다. 여기에는 젯팩 5.1.3이 설치된 젯슨 오린 NX 16GB 및 젯팩 4.6.4가 설치된 젯슨 나노 4GB와 같은 장치가 포함됩니다. 자세한 단계는 YOLO11 의 DeepStream 구성 섹션을 참조하십시오.

YOLO11 모델을 DeepStream용 ONNX 모델로 변환하려면 어떻게 해야 하나요?

YOLO11 모델을 DeepStream과 함께 배포할 수 있도록 ONNX 형식으로 변환하려면 utils/export_yoloV8.py 스크립트에서 DeepStream-Yolo 리포지토리에 저장합니다.

다음은 명령어 예시입니다:

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

모델 변환에 대한 자세한 내용은 모델 내보내기 섹션을 참조하세요.

NVIDIA 에서 YOLO 의 성능 벤치마크는 어떻게 되나요?

NVIDIA 젯슨 오린 NX 16GB의 YOLO11 모델의 성능은 TensorRT 정밀도 수준에 따라 다릅니다. 예를 들어, YOLO11s 모델이 달성합니다:

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

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

8개월 전 생성됨 ✏️ 5 일 전 업데이트 됨

댓글