Ultralytics YOLOv8 trên NVIDIA Jetson sử dụng SDK DeepStream và TensorRT
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 các thiết bị NVIDIA 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.
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.3 và Seeed Studio reComputer J1020 v2 dựa trên NVIDIA Jetson Nano 4GB chạy bản phát hành JetPack của JP4.6.4. Nó dự kiến sẽ hoạt động trên tất cả các dòng sản phẩm phần cứng NVIDIA Jetson bao gồm cả mới nhất và kế thừa.
NVIDIA DeepStream là gì?
SDK DeepStream của NVIDIA 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:
- Truy cập tài liệu của chúng tôi, Hướng dẫn bắt đầu nhanh: NVIDIA Jetson với Ultralytics YOLOv8 để thiết lập thiết bị NVIDIA Jetson của quý khách với Ultralytics YOLOv8
-
Cài đặt DeepStream SDK theo phiên bản JetPack
- Đối với JetPack 4.6.4, cài đặt DeepStream 6.0.1
- Đối với JetPack 5.1.3, cài đặt DeepStream 6.3
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 hỗ trợ NVIDIA DeepStream SDK 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!
-
Cài đặt dependencies
-
Sao chép kho lưu trữ sau
-
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.
Ghi
Bạn cũng có thể sử dụng Được đào tạo tùy chỉnh YOLOv8 mô hình.
-
Chuyển đổi mô hình thành ONNX
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.
Để thay đổi kích cỡ suy luận (mặc định: 640)
Ví dụ cho 1280:
Để đơn giản hóa ONNX mô hình (DeepStream > = 6.0)
Để sử dụng kích thước lô động (DeepStream >= 6.1)
Để sử dụng kích thước lô tĩnh (ví dụ cho batch-size = 4)
-
Đặt phiên bản CUDA theo phiên bản JetPack được cài đặt
Đối với JetPack 4.6.4:
Đối với JetPack 5.1.3:
-
Biên dịch thư viện
-
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) -
Chỉnh sửa
deepstream_app_config
tệp -
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
Chạy suy luận
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.
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.engine
và network-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
-
Cài
OPENCV
biến môi trường -
Biên dịch thư viện
-
Đố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 -
Tạo một thư mục mới cho hình ảnh hiệu chuẩn
-
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
Ghi
NVIDIA khuyến nghị í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ó độ 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.
-
Tạo
calibration.txt
với tất cả các hình ảnh đã chọn -
Đặt biến môi trường
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ộ nhớ GPU của bạn.
-
Cập nhật
config_infer_primary_yoloV8.txt
tệpTừ
Đến
Chạy suy luận
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
-
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.
-
Cài
num-sources=4
và thêmuri
của tất cả 4 luồng
Chạy suy luận
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 trên NVIDIA Jetson 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.