Ultralytics YOLO27:
Get Started

Ultralytics YOLO26 trên NVIDIA Jetson với DeepStream SDK và TensorRT#



Xem: Cách sử dụng model Ultralytics YOLO26 với NVIDIA DeepStream trên Jetson Orin NX 🚀

Hướng dẫn toàn diện này trình bày chi tiết cách triển khai Ultralytics YOLO26 trên thiết bị NVIDIA Jetson bằng DeepStream SDK và TensorRT. Trong hướng dẫn này, chúng ta sử dụng TensorRT để tối đa hóa hiệu năng suy luận trên nền tảng Jetson.

Hướng dẫn này trình bày cách thực hiện cấu hình DeepStream cho YOLO26, hiệu chuẩn 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ử trên NVIDIA Jetson Orin Nano Super Developer Kit chạy bản phát hành JetPack 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.3 và Seeed Studio reComputer J1020 v2 dựa trên NVIDIA Jetson Nano 4GB chạy bản phát hành JetPack JP4.6.4. Hướng dẫn này dự kiến hoạt động trên toàn bộ dòng phần cứng NVIDIA Jetson, bao gồm cả các phiên bản mới nhất và đời cũ.

NVIDIA DeepStream là gì?#

DeepStream SDK của NVIDIA là bộ công cụ phân tích luồng hoàn chỉnh dựa trên GStreamer, phục vụ xử lý đa cảm biến, video, âm thanh và hiểu hình ảnh bằng AI. Đây là lựa chọn lý tưởng cho các nhà phát triển vision AI, đối tác phần mềm, startup và OEM xây dựng ứng dụng và dịch vụ phân tích video thông minh (IVA). Giờ đây, bạn có thể tạo các pipeline xử lý luồng tích hợp mạng nơ-ron cùng những 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 pipeline này hỗ trợ phân tích dữ liệu video, hình ảnh và cảm biến theo thời gian thực. Khả năng hỗ trợ đa nền tảng của DeepStream giúp bạn phát triển ứng dụng và dịch vụ vision AI nhanh hơn, dễ dàng hơn tại chỗ, ở biên và trên đám mây.

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

Trước khi bắt đầu làm 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 cài đặt DeepStream SDK bằng gói Debian trên thiết bị Jetson. Bạn cũng có thể truy cập DeepStream SDK trên Jetson (Đã lưu trữ) để dùng các phiên bản DeepStream cũ.

Cấu hình DeepStream cho YOLO26#

Ở đây, chúng tôi sử dụng repository GitHub marcoslucianops/DeepStream-Yolo, repository này hỗ trợ NVIDIA DeepStream SDK cho các model YOLO. Chúng tôi trân trọng những đóng góp của marcoslucianops!

  1. Cài đặt Ultralytics cùng các dependency cần thiết

    pip install ultralytics onnx onnxslim
  2. Clone repository DeepStream-Yolo

    cd ~
    git clone https://github.com/marcoslucianops/DeepStream-Yolo
  3. Tải model phát hiện Ultralytics YOLO26 (.pt) bạn chọn từ dự án YOLO26. Ở đâ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 model YOLO26 được huấn luyện tùy chỉnh.

  1. Chuyển đổi model sang ONNX và ghi file labels.txt để DeepStream đọc tên các class

    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()))
Các tham số xuất model

nms=False xuất head không dùng NMS, còn agnostic_nms=True giữ một class duy nhất cho mỗi detection để cluster-mode=4 (không gom cụm) trong cấu hình DeepStream không vẽ trùng một bounding box. Thêm imgsz=1280 để thay đổi kích thước suy luận (mặc định: 640), batch=4 để đặt batch size là 4 (batch được xuất có kích thước cố định, vì vậy phải khớp với batch-size trong cấu hình DeepStream) và opset=12 cho TensorRT 8.2 trở xuống (DeepStream 6.0.1 trở về trước). Xem các tham số xuất model để biết danh sách đầy đủ.

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

    cp yolo26s.onnx labels.txt ~/DeepStream-Yolo
    cd ~/DeepStream-Yolo
  2. Đặt phiên bản CUDA phù hợp với phiên bản JetPack đã cài đặt

    Với JetPack 4.6.4:

    export CUDA_VER=10.2

    Với JetPack 5.1.3:

    export CUDA_VER=11.4

    Với JetPack 6.1:

    export CUDA_VER=12.6

    Với JetPack 7.1:

    export CUDA_VER=13.0
  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 file config_infer_primary_yolo26.txt theo model của bạn (đối với YOLO26s có 80 class)

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

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

[property]
...
maintain-aspect-ratio=1
symmetric-padding=1
cluster-mode=4
...
  1. Chỉnh sửa file 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 file deepstream_app_config. Ở đây, một file video mặc định được tải.

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

Chạy suy luận#

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

Quá trình tạo file TensorRT engine trước khi bắt đầu suy luận sẽ mất nhiều thời gian. Vì vậy, hãy kiên nhẫn.

YOLO26 with deepstream
Mẹo

Nếu muốn chuyển đổi model sang độ chính xác FP16, chỉ cần đặt model-engine-file=model_b1_gpu0_fp16.engine và network-mode=2 bên trong config_infer_primary_yolo26.txt

Hiệu chuẩn INT8#

Nếu muốn sử dụng độ chính xác INT8 để suy luận, bạn cần làm theo các bước sau:

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 thử với TensorRT 8.x và dự kiến sẽ hoạt động.

  1. Đặt 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 bộ dữ liệu COCO, hãy tải val2017, giải nén và chuyển vào thư mục DeepStream-Yolo

  4. Tạo thư mục mới để chứa ảnh hiệu chuẩn

    mkdir calibration
  5. Chạy lệnh sau để chọn ngẫu nhiên 1000 ảnh từ bộ dữ liệu COCO phục vụ hiệu chuẩn

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

NVIDIA khuyến nghị sử dụng ít nhất 500 ảnh để đạt độ chính xác tốt. Trong ví dụ này, 1000 ảnh được chọn để cải thiện độ chính xác (càng nhiều ảnh thì độ chính xác càng cao). Bạn có thể đặt số lượng bằng head -1000. Ví dụ: với 2000 ảnh, dùng head -2000. Quá trình này có thể mất nhiều thời gian.

  1. Tạo file calibration.txt chứa tất cả ảnh đã chọn

    realpath calibration/*jpg > calibration.txt
  2. Thiết lập 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ẽ giúp tăng độ chính xác và rút ngắn thời gian hiệu chuẩn. Hãy đặt giá trị này dựa trên bộ nhớ GPU.

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

    Từ

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

    Sang

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

Chạy suy luận INT8#

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

deepstream-app -c deepstream_app_config.txt

Thiết lập MultiStream#



Xem: Cách chạy inference đa luồng với Ultralytics YOLO26 bằng NVIDIA DeepStream trên Jetson Orin 🚀

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

  1. Thay đổi số hàng và cột để tạo bố cục lưới phù hợp với số luồng bạn muốn sử dụng. Ví dụ, với 4 luồng, 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 cho mỗi luồng, mỗi nhóm có uri và num-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 suy luận đa luồng#

Chạy cùng lệnh để khởi chạy tất cả luồng trong màn hình dạng lưới:

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

Kết quả benchmark#

Các benchmark sau đây tóm tắt hiệu năng của các model YOLO11 ở những 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 model và suy luận DeepStream đã mô tả ở trên.

Biểu đồ so sánh#

NVIDIA Jetson DeepStream performance benchmarks

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

Hiệu năng
Định dạngTrạng tháiThời gian suy luận (ms/ảnh)
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 xây dựng 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. Làm theo hướng dẫn từng bước trong Hướng dẫn bắt đầu nhanh 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 giúp tối ưu hóa model cho suy luận, 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 học sâu hiệu năng cao, độ trễ thấp thông qua hợp nhất layer, hiệu chuẩn độ chính xác và tự động tinh chỉnh kernel. Nhờ đó, model 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ự hành.

  • Có, hướng dẫn triển khai Ultralytics YOLO26 với DeepStream SDK và TensorRT tương thích với toàn bộ dòng NVIDIA Jetson. Hướng dẫn 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 mục Cấu hình DeepStream cho YOLO26 để xem các bước chi tiết.

  • Xuất model bằng Ultralytics exporter với head không dùng NMS, sau đó ghi file labels.txt để DeepStream đọc tên các class:

    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()))

    Thêm opset=12 cho TensorRT 8.2 trở xuống (DeepStream 6.0.1 trở về trước). Để biết thêm chi tiết về chuyển đổi model, hãy xem mục xuất model của chúng tôi.

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

  • Để xử lý nhiều luồng trong cùng một ứng dụng DeepStream, hãy chỉnh sửa file deepstream_app_config.txt để thêm lưới hiển thị dạng ô và liệt kê URI của từng nguồn. Đặt rows và columns bên dưới [tiled-display] để tạo lưới, thêm một nhóm [sourceN] riêng cho mỗi luồng với uri và num-sources=1 riêng, rồi điều chỉnh lưới cho phù hợp với số luồng. Xem mục Thiết lập MultiStream để biết ví dụ đầy đủ.

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

    • Độ 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à năng lực khi sử dụng 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 mục Kết quả benchmark.

Bình luận