Bỏ để qua phần nội dung

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



Xem: How to Run Multiple Streams with DeepStream SDK on Jetson Nano using Ultralytics YOLOv8

Hướng dẫn toàn diện này cung cấp hướng dẫn chi tiết để triển khai Ultralytics YOLOv8 trên NVIDIA Thiết bị Jetson sử dụng SDK DeepStream 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 Máy bay phản lực

Ghi

Hướng dẫn này đã được thử nghiệm với cả Seeed Studio reComputer J4012 dựa trên NVIDIA Jetson Orin NX 16GB chạy bản phát hành JetPack của JP5.1.3Seeed Studio reComputer J1020 v2 dựa trên NVIDIA Jetson Nano 4GB chạy JetPack phát hành JP4.6.4. Nó dự kiến sẽ hoạt động trên tất cả các NVIDIA Dòng sản phẩm phần cứng Jetson bao gồm mới nhất và kế thừa.

Là gì NVIDIA DeepStream?

NVIDIASDK DeepStream 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 để xử lý đa cảm biến, hiểu video, âm thanh và hình ảnh dựa trên AI. Nó lý tưởng cho các nhà phát triển AI tầm nhìn, đố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à kết xuất video. Các quy trình 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 đến 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 trực quan 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 SDK DeepStream vào thiết bị Jetson. Bạn cũng có thể truy cập SDK DeepStream trên Jetson (Đã lưu trữ) để truy cập các phiên bản cũ của DeepStream.

Cấu hình DeepStream cho YOLOv8

Ở đây chúng tôi đang sử dụng marcosluciaops / DeepStream-Yolo Kho lưu trữ GitHub bao gồm NVIDIA Hỗ trợ SDK DeepStream cho YOLO Mô hình. Chúng tôi đánh giá cao những nỗ lực của Marcoslucianops vì những đóng góp của anh ấy!

  1. Cài đặt dependencies

    pip install cmake
    pip install onnxsim
    
  2. Sao chép kho lưu trữ sau

    git clone https://github.com/marcoslucianops/DeepStream-Yolo
    cd DeepStream-Yolo
    
  3. Tải xuống Ultralytics YOLOv8 Mô hình phát hiện (.pt) mà bạn chọn từ YOLOv8 phát hành. Ở đây chúng tôi sử dụng yolov8s.pt.

    wget https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8s.pt
    

    Ghi

    Bạn cũng có thể sử dụng Được đào tạo tùy chỉnh YOLOv8 mô hình.

  4. Chuyển đổi mô hình thành ONNX

    python3 utils/export_yoloV8.py -w yolov8s.pt
    

    Chuyển các đối số dưới đây đến lệnh trên

    Đối với DeepStream 6.0.1, sử dụng opset 12 hoặc thấp hơn. Đối lập mặc định là 16.

    --opset 12
    

    Để thay đổi kích 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 ONNX mô hình (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 batch-size = 4)

    --batch 4
    
  5. Đặt CUDA phiên bản theo phiên bản JetPack được 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
    
  6. Biên dịch thư viện

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

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

    ...
    [primary-gie]
    ...
    config-file=config_infer_primary_yoloV8.txt
    
  9. Bạn cũng có thể thay đổi nguồn video trong deepstream_app_config tệp. Ở đâ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 suy luận

deepstream-app -c deepstream_app_config.txt

Ghi

Sẽ mất nhiều thời gian để tạo ra TensorRT công cụ trước khi bắt đầu suy luận. Vì vậy, hãy kiên nhẫn.

YOLOv8 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 trong config_infer_primary_yoloV8.txt

Hiệu chuẩn 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 dưới đây

  1. Cài 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 tập dữ liệu COCO, hãy tải xuống Val2017, trích xuất 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 như sau để chọn 1000 hình ảnh ngẫu nhiên từ tập 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
    

    Ghi

    NVIDIA Đề xuất ít nhất 500 hình ảnh để có độ chính xác tốt. Trong ví dụ này, 1000 hình ảnh được chọn để 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ể đặt nó từ đầu -1000. Ví dụ: đối với 2000 hình ảnh, đầu -2000. Quá trình này có thể mất nhiều thời gian.

  6. Tạo calibration.txt 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
    

    Ghi

    Giá trị INT8_CALIB_BATCH_SIZE cao hơn sẽ dẫn đến độ chính xác cao hơn và tốc độ hiệu chuẩn nhanh hơn. Đặt nó theo bạn GPU trí nhớ.

  8. Cập nhật config_infer_primary_yoloV8.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 MultiStream

Để thiết lập nhiều luồng trong một ứng dụng deepstream, 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 các hàng và cột để xây dựng hiển thị 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. Cài num-sources=4 và thêm uri của tất cả 4 luồng

    [source0]
    enable=1
    type=3
    uri=<path_to_video>
    uri=<path_to_video>
    uri=<path_to_video>
    uri=<path_to_video>
    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

Bảng sau đây tóm tắt cách thức YOLOv8s Các mô hình hoạt động ở các mức khác nhau TensorRT Mức độ chính xác với kích thước đầu vào 640x640 bật NVIDIA Máy bay phản lực Orin NX 16GB.

Tên Model Chính xác Thời gian suy luận (ms/im) FPS
YOLOv8s FP32 15.63 64
FP16 7.94 126
INT8 5.53 181

Lời cảm ơn

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

FAQ

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

Để thiết lập Ultralytics YOLOv8 trên một NVIDIA Thiết bị Jetson , trước tiên bạn cần cài đặt SDK DeepStream tương thích với phiên bản JetPack của bạn. 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 cho YOLOv8 Triển khai.

Lợi ích của việc sử dụng là gì TensorRT với YOLOv8 trên NVIDIA Máy bay phản lực?

Sử dụng TensorRT với YOLOv8 Tối ưu hóa mô hình cho suy luận, giảm đáng kể độ trễ và cải thiện thông lượng trên NVIDIA Thiết bị Jetson. TensorRT Cung cấp khả năng suy luận deep learning hiệu suất cao, độ trễ thấp thông qua phản ứng tổng hợp lớp, hiệu chuẩn 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ự trị.

Tôi có thể chạy không? Ultralytics YOLOv8 với SDK DeepStream trên các phiên bản khác nhau NVIDIA Phần cứng Jetson?

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

Làm cách nào để chuyển đổi một YOLOv8 Mô hình để ONNX cho DeepStream?

Để chuyển đổi một YOLOv8 Mô hình để ONNX định dạng để triển khai với DeepStream, hãy sử dụng utils/export_yoloV8.py kịch bản từ DeepStream-Yolo Kho.

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

python3 utils/export_yoloV8.py -w yolov8s.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.

Điểm chuẩn hiệu suất để làm gì YOLOv8 trên NVIDIA Jetson Orin NX?

Hiệu suất của YOLOv8 Mô hình trên NVIDIA Jetson Orin NX 16GB thay đổi tùy theo TensorRT mức độ chính xác. Chẳng hạn YOLOv8s Mô hình đạt được:

  • Độ chính xác FP32: 15,63 ms/im, 64 FPS
  • Độ chính xác FP16: 7,94 ms / im, 126 khung hình / giây
  • Độ chính xác INT8: 5,53 ms / im, 181 khung hình / giây

Các tiêu chuẩn này nhấn mạnh hiệu quả và khả năng sử dụng TensorRT-Tối ưu hóa YOLOv8 Mô hình trên NVIDIA Phần cứng 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.


📅 Created 2 months ago ✏️ Updated 4 days ago

Ý kiến