Chuyển đến nội dung

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



Xem: Cách sử dụng các mô hình Ultralytics YOLO11 với NVIDIA Deepstream trên Jetson Orin NX 🚀

Hướng dẫn toàn diện này cung cấp hướng dẫn chi tiết để triển khai Ultralytics YOLO11 trên các thiết bị NVIDIA Jetson bằng DeepStream SDK và TensorRT. Ở đâ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.

DeepStream trên NVIDIA Jetson

Lưu ý

Hướng dẫn này đã được thử nghiệm với NVIDIA Jetson Orin Nano Super Developer Kit chạy bản phát hành JetPack ổn định mới nhất 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. Dự kiến nó sẽ hoạt động trên toàn bộ dòng phần cứng NVIDIA Jetson bao gồm cả phiên bản mới nhất và cũ.

NVIDIA DeepStream là gì?

NVIDIA DeepStream SDK là một bộ công cụ phân tích luồng hoàn chỉnh dựa trên GStreamer để xử lý đa cảm biến dựa trên AI, video, âm thanh và hiểu hình ảnh. Nó lý tưởng cho các nhà phát triển AI thị giác, đối tác phần mềm, công ty khởi nghiệp và 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 quy trình xử lý luồng kết hợp mạng nơ-ron và các tác vụ xử lý phức tạp khác như theo dõi, mã hóa/giải mã video và hiển thị video. Các quy trình này cho phép phân tích theo 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 cung cấp cho bạn một cách nhanh hơn, dễ dàng hơn để phát triển các ứng dụng và dịch vụ AI thị giác tại chỗ, ở biên và trên đám mây.

Điều Kiện Tiên Quyết

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

Cấu hình DeepStream cho YOLO11

Ở đâ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 mô hình 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 dependencies cần thiết

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

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

    cp ~/DeepStream-Yolo/utils/export_yolo11.py ~/ultralytics
    cd ultralytics
    
  4. Tải xuống mô hình phát hiện Ultralytics YOLO11 (.pt) mà bạn chọn từ các bản phát hành YOLO11. Ở đây, chúng ta sử dụng yolo11s.pt.

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

    Lưu ý

    Bạn cũng có thể sử dụng mô hình YOLO11 được huấn luyện tùy chỉnh.

  5. Chuyển đổi mô hình sang ONNX

    python3 export_yolo11.py -w yolo11s.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 --dynamic arg và sử dụng opset 12 trở xuống. Mặc định opset là 17.

    --opset 12
    

    Để thay đổi kích thước suy luận (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 mô hình ONNX (DeepStream >= 6.0)

    --simplify
    

    Để sử dụng kích thước lô động (DeepStream >= 6.1)

    --dynamic
    

    Để sử dụng kích thước lô tĩnh (ví dụ cho kích thước lô = 4)

    --batch 4
    
  6. Sao chép mã .onnx tệp mô hình và labels.txt tập tin đến DeepStream-Yolo thư mục

    cp yolo11s.pt.onnx labels.txt ~/DeepStream-Yolo
    cd ~/DeepStream-Yolo
    
  7. Đặ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
    
  8. Biên dịch thư viện

    make -C nvdsinfer_custom_impl_Yolo clean && make -C nvdsinfer_custom_impl_Yolo
    
  9. Chỉnh sửa config_infer_primary_yolo11.txt tệp theo mô hình của bạn (đối với YOLO11s với 80 class)

    [property]
    ...
    onnx-file=yolo11s.pt.onnx
    ...
    num-detected-classes=80
    ...
    
  10. Chỉnh sửa deepstream_app_config tệp

    ...
    [primary-gie]
    ...
    config-file=config_infer_primary_yolo11.txt
    
  11. Bạn cũng có thể thay đổi nguồn video trong deepstream_app_config tập tin. Ở đây một tập tin 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 ý

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

YOLO11 với deepstream

Mẹo

Nếu bạn muốn chuyển đổi mô hình sang độ chính xác FP16, chỉ cần đặt model-engine-file=model_b1_gpu0_fp16.enginenetwork-mode=2 bên trong config_infer_primary_yolo11.txt

Hiệu chỉnh INT8

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

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

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

    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 xuống val2017, giải nén và di chuyển đến DeepStream-Yolo thư mục

  4. Tạo một thư mục mới cho hình ảnh hiệu chuẩn

    mkdir calibration
    
  5. Chạy lệnh sau để chọn 1000 ảnh ngẫu nhiên từ bộ dữ liệu COCO để chạy 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ị nên có ít nhất 500 hình ảnh để có được độ chính xác tốt. Trong ví dụ này, 1000 hình ảnh được chọn để có được độ chính xác tốt hơn (càng nhiều hình ảnh = độ chính xác càng cao). Bạn có thể đặt 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.

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

    realpath calibration/*jpg > calibration.txt
    
  7. Đặt 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 chuẩn nhanh hơn. Đặt nó theo bộ nhớ GPU của bạn.

  8. Cập nhật config_infer_primary_yolo11.txt tệp

    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 suy luận

deepstream-app -c deepstream_app_config.txt

Thiết lập đa luồng



Xem: Cách Chạy Nhiều Luồng với DeepStream SDK trên Jetson Nano bằng Ultralytics YOLO11 🎉

Để thiết lập nhiều luồng trong một ứng dụng deepstream duy nhất, bạn có thể thực hiện các thay đổi sau đối với deepstream_app_config.txt tệp

  1. Thay đổi số hàng và cột để xây dựng hiển thị dạng lưới 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. Thiết lập num-sources=4 và thêm uri của tất cả 4 luồng

    [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
    

Chạy suy luận

deepstream-app -c deepstream_app_config.txt
Thiết lập đa luồng

Kết quả Điểm chuẩn

Các điểm chuẩn sau đây tóm tắt cách các mô hình 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 là 640x640 trên NVIDIA Jetson Orin NX 16GB.

Biểu đồ so sánh

Biểu đồ Điểm chuẩn Jetson DeepStream

Bảng so sánh chi tiết

Hiệu suất

Định dạng Trạng thái Thời gian suy luận (ms/ảnh)
TensorRT (FP32) 8.64
TensorRT (FP16) 5.27
TensorRT (INT8) 4.54
Định dạng Trạng thái Thời gian suy luận (ms/ảnh)
TensorRT (FP32) 14.53
TensorRT (FP16) 7.91
TensorRT (INT8) 6.05
Định dạng Trạng thái Thời gian suy luận (ms/ảnh)
TensorRT (FP32) 32.05
TensorRT (FP16) 15.55
TensorRT (INT8) 10.43
Định dạng Trạng thái Thời gian suy luận (ms/ảnh)
TensorRT (FP32) 39.68
TensorRT (FP16) 19.88
TensorRT (INT8) 13.64
Định dạng Trạng thái Thời gian suy luận (ms/ảnh)
TensorRT (FP32) 80.65
TensorRT (FP16) 39.06
TensorRT (INT8) 22.83

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

Làm cách nào để thiết lập Ultralytics YOLO11 trên thiết bị NVIDIA Jetson?

Để thiết lập Ultralytics YOLO11 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 bạn. Hãy 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 để định cấu hình NVIDIA Jetson của bạn để triển khai YOLO11.

Lợi ích của việc sử dụng TensorRT với YOLO11 trên NVIDIA Jetson là gì?

Sử dụng TensorRT với YOLO11 tối ưu hóa mô hình để 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 deep learning hiệu suất cao, độ trễ thấp thông qua hợp nhất lớp, hiệu chỉnh độ chính xác và tự động điều 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ự hành.

Tôi có thể chạy Ultralytics YOLO11 với DeepStream SDK trên các phần cứng NVIDIA Jetson khác nhau không?

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

Làm cách nào để chuyển đổi mô hình YOLO11 sang ONNX cho DeepStream?

Để chuyển đổi mô hình YOLO11 sang định dạng ONNX để triển khai với DeepStream, hãy sử dụng utils/export_yolo11.py script từ DeepStream-Yolo kho lưu trữ.

Đây là một lệnh ví dụ:

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

Để biết thêm chi tiết về chuyển đổi mô hình, hãy xem phần xuất mô hình của chúng tôi.

Các chuẩn mực hiệu suất cho YOLO trên NVIDIA Jetson Orin NX là gì?

Hiệu suất của các mô hình YOLO11 trên NVIDIA Jetson Orin NX 16GB khác nhau dựa trên các mức độ chính xác của TensorRT. Ví dụ: các mô hình YOLO11s đạt được:

  • Độ chính xác FP32: 14,6 ms/ảnh, 68,5 FPS
  • Độ chính xác FP16: 7,94 ms/ảnh, 126 FPS
  • Độ chính xác INT8: 5.95 ms/im, 168 FPS

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



📅 Đã tạo 1 năm trước ✏️ Cập nhật 2 tháng trước

Bình luận