YOLO Vision 2026:

Ultralytics YOLO26 trên NVIDIA Jetson sử dụng DeepStream SDK và TensorRT#



Watch: How to use Ultralytics YOLO26 models with NVIDIA Deepstream on Jetson Orin NX 🚀

Hướng dẫn toàn diện này cung cấp hướng dẫn chi tiết từng bước để triển khai Ultralytics YOLO26 trên các thiết bị NVIDIA Jetson bằng cách sử dụng DeepStream SDK và TensorRT. Tại đây, chúng tôi sử dụng TensorRT để tối đa hóa hiệu suất suy luận trên nền tảng Jetson.

Hướng dẫn này đi qua cấu hình DeepStream cho YOLO26, hiệu chỉnh INT8, thiết lập đa luồng, và kết quả benchmark.

NVIDIA DeepStream SDK on Jetson platform
Lưu ý

Hướng dẫn này đã được kiểm thử với NVIDIA Jetson Orin Nano Super Developer Kit chạy bản phát hành JetPack ổn định mới nhất của JP6.1, Seeed Studio reComputer J4012 dựa trên NVIDIA Jetson Orin NX 16GB chạy bản phát hành JetPack JP5.1.3Seeed Studio reComputer J1020 v2 dựa trên NVIDIA Jetson Nano 4GB chạy bản phát hành JetPack JP4.6.4. Nó dự kiến hoạt động trên tất cả các dòng phần cứng NVIDIA Jetson bao gồm cả các dòng mới và cũ.

NVIDIA DeepStream là gì?#

NVIDIA's DeepStream SDK là một bộ công cụ phân tích phát trực tuyến hoàn chỉnh dựa trên GStreamer dành cho việc xử lý đa cảm biến dựa trên AI, hiểu biết về video, âm thanh và hình ảnh. Nó lý tưởng cho các nhà phát triển vision AI, đối tác phần mềm, startup và các nhà sản xuất thiết bị gốc (OEM) xây dựng các ứng dụng và dịch vụ IVA (Phân tích Video Thông minh). Giờ đây, bạn có thể tạo các đường ống xử lý luồng tích hợp neural networks và các tác vụ xử lý phức tạp khác như tracking, mã hóa/giải mã video và kết xuất video. Các đường ống này cho phép phân tích thời gian thực trên dữ liệu video, hình ảnh và cảm biến. Hỗ trợ đa nền tảng của DeepStream mang lại cho bạn cách nhanh hơn, dễ dàng hơn để phát triển các ứng dụng và dịch vụ vision AI on-premise, ở biên và trên đám mây.

Điều kiện tiên quyết#

Trước khi bạn bắt đầu thực hiện theo hướng dẫn này:

Mẹo

Trong hướng dẫn này, chúng tôi đã sử dụng phương pháp gói Debian để cài đặt DeepStream SDK lên thiết bị Jetson. Bạn cũng có thể truy cập DeepStream SDK on Jetson (Archived) để truy cập các phiên bản cũ của DeepStream.

Cấu hình DeepStream cho YOLO26#

Tại đây, chúng tôi đang sử dụng kho lưu trữ GitHub marcoslucianops/DeepStream-Yolo bao gồm hỗ trợ NVIDIA DeepStream SDK cho các model YOLO. Chúng tôi đánh giá cao những nỗ lực đóng góp của marcoslucianops!

  1. Cài đặt Ultralytics với các phụ thuộc cần thiết

    cd ~
    pip install -U pip
    git clone https://github.com/ultralytics/ultralytics
    cd ultralytics
    pip install -e ".[export]" onnxslim
  2. Clone kho lưu trữ DeepStream-Yolo

    cd ~
    git clone https://github.com/marcoslucianops/DeepStream-Yolo
  3. Sao chép tệp export_yolo26.py từ thư mục DeepStream-Yolo/utils sang thư mục ultralytics

    cp ~/DeepStream-Yolo/utils/export_yolo26.py ~/ultralytics
    cd ultralytics
  4. Tải xuống một model phát hiện Ultralytics YOLO26 (.pt) tùy ý từ YOLO26 project. Ở đây chúng tôi sử dụng yolo26s.pt.

    wget https://github.com/ultralytics/assets/releases/download/v8.4.0/yolo26s.pt
Lưu ý

Bạn cũng có thể sử dụng một custom-trained YOLO26 model.

  1. Chuyển đổi model sang ONNX

    python3 export_yolo26.py -w yolo26s.pt
Truyền các đối số dưới đây vào lệnh trên

Đối với DeepStream 5.1, hãy xóa đối số --dynamic và sử dụng opset 12 hoặc thấp hơn. Mặc định opset là 17.

--opset 12

Để thay đổi kích thước inference (mặc định: 640)

-s SIZE
--size SIZE
-s HEIGHT WIDTH
--size HEIGHT WIDTH

Ví dụ cho 1280:

-s 1280
or
-s 1280 1280

Để đơn giản hóa model ONNX (DeepStream >= 6.0)

--simplify

Để sử dụng dynamic batch-size (DeepStream >= 6.1)

--dynamic

Để sử dụng static batch-size (ví dụ cho batch-size = 4)

--batch 4
  1. Sao chép tệp model .onnx được tạo và tệp labels.txt sang thư mục DeepStream-Yolo

    cp yolo26s.onnx labels.txt ~/DeepStream-Yolo
    cd ~/DeepStream-Yolo
  2. Đặt phiên bản CUDA theo phiên bản JetPack đã cài đặt

    Đối với JetPack 4.6.4:

    export CUDA_VER=10.2

    Đối với JetPack 5.1.3:

    export CUDA_VER=11.4

    Đối với JetPack 6.1:

    export CUDA_VER=12.6
  3. Biên dịch thư viện

    make -C nvdsinfer_custom_impl_Yolo clean && make -C nvdsinfer_custom_impl_Yolo
  4. Chỉnh sửa tệp config_infer_primary_yolo26.txt theo model của bạn (đối với YOLO26s với 80 lớp)

    [property]
    ...
    onnx-file=yolo26s.onnx
    ...
    num-detected-classes=80
    ...
    parse-bbox-func-name=NvDsInferParseYolo
    ...
Cài đặt độ chính xác của YOLO26

YOLO26 thay đổi kích thước đầu vào bằng padding ở giữa và chạy mà không có NMS. Để đạt accuracy tốt nhất, hãy thêm phần sau vào phần [property] của config_infer_primary_yolo26.txt:

[property]
...
maintain-aspect-ratio=1
symmetric-padding=1
cluster-mode=4
...
  1. Chỉnh sửa tệp deepstream_app_config

    ...
    [primary-gie]
    ...
    config-file=config_infer_primary_yolo26.txt
  2. Bạn cũng có thể thay đổi nguồn video trong tệp deepstream_app_config. Tại đây, một tệp video mặc định được tải

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

Chạy Inference#

deepstream-app -c deepstream_app_config.txt
Lưu ý

Sẽ mất một khoảng thời gian đáng kể để tạo tệp engine TensorRT trước khi bắt đầu inference. Vì vậy, hãy kiên nhẫn.

YOLO26 with deepstream
Mẹo

Nếu bạn muốn chuyển đổi model sang độ chính xác FP16, chỉ cần thiết lập model-engine-file=model_b1_gpu0_fp16.enginenetwork-mode=2 bên trong config_infer_primary_yolo26.txt

Hiệu chỉnh INT8#

Nếu bạn muốn sử dụng độ chính xác INT8 cho inference, bạn cần thực hiện theo các bước dưới đây:

Lưu ý

Hiện tại INT8 không hoạt động với TensorRT 10.x. Phần này của hướng dẫn đã được kiểm nghiệm với TensorRT 8.x và được kỳ vọng sẽ hoạt động.

  1. Thiết lập biến môi trường OPENCV

    export OPENCV=1
  2. Biên dịch thư viện

    make -C nvdsinfer_custom_impl_Yolo clean && make -C nvdsinfer_custom_impl_Yolo
  3. Đối với tập dữ liệu COCO, hãy tải xuống val2017, giải nén và chuyển đến thư mục DeepStream-Yolo

  4. Tạo một thư mục mới cho các hình ảnh hiệu chỉnh

    mkdir calibration
  5. Chạy lệnh sau để chọn ngẫu nhiên 1000 hình ảnh từ tập dữ liệu COCO để thực hiện hiệu chỉnh

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

NVIDIA khuyến nghị ít nhất 500 hình ảnh để đạt được accuracy tốt. Trong ví dụ này, 1000 hình ảnh được chọn để đạt được độ chính xác tốt hơn (nhiều hình ảnh hơn = độ chính xác cao hơn). Bạn có thể thiết lập nó từ head -1000. Ví dụ, đối với 2000 hình ảnh, head -2000. Quá trình này có thể mất nhiều thời gian.

  1. Tạo tệp calibration.txt với tất cả các hình ảnh đã chọn

    realpath calibration/*jpg > calibration.txt
  2. Đặt các biến môi trường

    export INT8_CALIB_IMG_PATH=calibration.txt
    export INT8_CALIB_BATCH_SIZE=1
Lưu ý

Giá trị INT8_CALIB_BATCH_SIZE cao hơn sẽ mang lại độ chính xác cao hơn và tốc độ hiệu chỉnh nhanh hơn. Hãy đặt giá trị này tùy theo bộ nhớ GPU của bạn.

  1. Cập nhật tệp config_infer_primary_yolo26.txt

    Từ

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

    Đến

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

Chạy Inference INT8#

Chạy cùng lệnh đó để xây dựng engine INT8 và bắt đầu inference:

deepstream-app -c deepstream_app_config.txt

Thiết lập đa luồng (MultiStream)#



Watch: How to Run Multi-Stream Inference with Ultralytics YOLO26 using NVIDIA DeepStream on Jetson Orin 🚀

Để thiết lập nhiều luồng dưới một ứng dụng DeepStream duy nhất, hãy thực hiện các thay đổi sau đối với tệp deepstream_app_config.txt:

  1. Thay đổi số hàng và số cột để tạo lưới hiển thị theo số lượng luồng bạn muốn có. Ví dụ, đối với 4 luồng, chúng ta có thể thêm 2 hàng và 2 cột.

    [tiled-display]
    rows=2
    columns=2
  2. Thêm một nhóm [sourceN] riêng biệt cho mỗi luồng, mỗi nhóm có urinum-sources=1 riêng.

    [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

Chạy Inference Đa luồng#

Chạy cùng lệnh đó để khởi chạy tất cả các luồng trong chế độ hiển thị dạng lưới:

deepstream-app -c deepstream_app_config.txt
DeepStream multi-camera streaming configuration

Kết quả Benchmark#

Các benchmarks sau đây tóm tắt cách các model YOLO11 hoạt động ở các mức độ chính xác TensorRT khác nhau với kích thước đầu vào 640x640 trên NVIDIA Jetson Orin NX 16GB. YOLO26 sử dụng cùng quy trình xuất và suy luận DeepStream được mô tả ở trên.

Biểu đồ so sánh#

NVIDIA Jetson DeepStream performance benchmarks

Bảng so sánh chi tiết#

Hiệu suất
Định dạngTrạng tháiThời gian suy luận (ms/im)
TensorRT (FP32)8.64
TensorRT (FP16)5.27
TensorRT (INT8)4.54

Lời cảm ơn#

Hướng dẫn này ban đầu được tạo bởi những người bạn của chúng tôi tại Seeed Studio, Lakshantha và Elaine.

Câu hỏi thường gặp#

  • Để thiết lập Ultralytics YOLO26 trên thiết bị NVIDIA Jetson, trước tiên bạn cần cài đặt DeepStream SDK tương thích với phiên bản JetPack của mình. Làm theo hướng dẫn từng bước trong Quick Start Guide của chúng tôi để cấu hình NVIDIA Jetson cho việc triển khai YOLO26.

  • Sử dụng TensorRT với YOLO26 tối ưu hóa model cho việc suy luận, làm giảm đáng kể độ trễ và cải thiện thông lượng trên các thiết bị NVIDIA Jetson. TensorRT cung cấp khả năng suy luận deep learning hiệu suất cao, độ trễ thấp thông qua việc gộp lớp (layer fusion), hiệu chỉnh độ chính xác và tự động tinh chỉnh kernel. Điều này dẫn đến việc thực thi nhanh hơn và hiệu quả hơn, đặc biệt hữu ích cho các ứng dụng thời gian thực như phân tích video và máy tự động.

  • Có, hướng dẫn triển khai Ultralytics YOLO26 với DeepStream SDK và TensorRT tương thích trên toàn bộ dòng sản phẩm NVIDIA Jetson. Điều này bao gồm các thiết bị như Jetson Orin NX 16GB với JetPack 5.1.3 và Jetson Nano 4GB với JetPack 4.6.4. Tham khảo phần DeepStream Configuration for YOLO26 để biết các bước chi tiết.

  • Để chuyển đổi model YOLO26 sang định dạng ONNX nhằm triển khai với DeepStream, hãy sử dụng tập lệnh utils/export_yolo26.py từ kho lưu trữ DeepStream-Yolo.

    Dưới đây là một ví dụ lệnh:

    python3 utils/export_yolo26.py -w yolo26s.pt --opset 12 --simplify

    Để biết thêm chi tiết về việc chuyển đổi model, hãy xem model export section của chúng tôi.

  • Để chạy suy luận INT8, hãy hiệu chỉnh model trên một tập hình ảnh đại diện và chuyển đổi cấu hình DeepStream sang chế độ INT8. Tải xuống các hình ảnh COCO val2017, chọn khoảng 1000 hình ảnh hiệu chỉnh, thiết lập các biến môi trường INT8_CALIB_IMG_PATHINT8_CALIB_BATCH_SIZE, sau đó cập nhật config_infer_primary_yolo26.txt bằng model-engine-file=model_b1_gpu0_int8.engine, int8-calib-file=calib.table, và network-mode=1. Xem phần INT8 Calibration để biết các bước đầy đủ. INT8 hiện yêu cầu TensorRT 8.x.

  • Để xử lý nhiều luồng trong một ứng dụng DeepStream duy nhất, hãy chỉnh sửa tệp deepstream_app_config.txt để thêm một lưới hiển thị dạng lát (tiled-display grid) và liệt kê từng URI nguồn. Thiết lập rowscolumns bên dưới [tiled-display] để xây dựng lưới, thêm một nhóm [sourceN] riêng biệt cho mỗi luồng với urinum-sources=1 của riêng nó, và điều chỉnh lưới cho phù hợp với số lượng luồng. Xem phần MultiStream Setup để có một ví dụ hoàn chỉnh.

  • Hiệu suất của các model YOLO11 trên NVIDIA Jetson Orin NX 16GB thay đổi tùy theo cấp độ chính xác của TensorRT. Ví dụ, các model YOLO11s đạt được:

    • Độ chính xác FP32: 14.53 ms/im, 68.8 FPS
    • Độ chính xác FP16: 7.91 ms/im, 126 FPS
    • Độ chính xác INT8: 6.05 ms/im, 165 FPS

    Các benchmark này nhấn mạnh hiệu quả và khả năng của việc sử dụng các model YOLO11 được tối ưu hóa bằng TensorRT trên phần cứng NVIDIA Jetson. Để biết thêm chi tiết, hãy xem phần Benchmark Results của chúng tôi.

Bình luận