Hướng dẫn triển khai YOLOv8 trên Orange Pi 5 series với NPU RK3588

Minh họa triển khai YOLOv8 trên Orange Pi 5 series, NPU RK3588 và camera USB.

YOLOv8 có thể chạy trên Orange Pi 5 series và các nền tảng RK3588 tương tự thông qua NPU Rockchip. Bài viết này hướng dẫn sử dụng model RKNN có sẵn trong repository rk3588-yolov8, đồng thời trình bày luồng chuyển đổi model YOLOv8 riêng sang định dạng .rknn khi cần.

Sơ đồ quy trình xuất YOLOv8 sang RKNN và chạy suy luận NPU trên Orange Pi 5 series.

Phạm vi và điều kiện cần có

  • Orange Pi 5 series hoặc nền tảng dùng RK3588/RK3588S có môi trường Linux aarch64.
  • Python 3.10: các gói RKNN trong README được cung cấp cho cp310.
  • Camera USB hoặc nguồn video tương thích OpenCV. Mã mẫu đặt source = 0, tương ứng thiết bị camera mặc định.
  • Repository rk3588-yolov8 và model models/yolov8s.rknn đi kèm.

Lưu ý về phiên bản: README của repository chỉ định RKNN Toolkit 2 và RKNN Toolkit Lite 2 phiên bản 2.1.0. Hãy giữ đồng nhất bộ toolkit, runtime và model RKNN; không trộn lẫn tùy tiện các file runtime hoặc wheel từ phiên bản khác.

Bước 1: Chuẩn bị hệ điều hành

README đề cập Ubuntu cho Orange Pi 5/5B hoặc Armbian cho Orange Pi 5/5B. Sau khi ghi image vào thẻ nhớ và khởi động thiết bị, hãy cập nhật hệ thống trước khi tiếp tục. Bảo đảm Python đang dùng là 3.10 nếu bạn sẽ cài đúng các wheel cp310 bên dưới.

Bước 2: Lấy mã nguồn và model RKNN đã chuẩn bị

git clone https://github.com/thanhtantran/rk3588-yolov8
cd rk3588-yolov8

Repository đã có model models/yolov8s.rknn với dung lượng khoảng 11,9MB. Trong main.py, biến model_name mặc định là yolov8s.rknn; model được nạp từ thư mục models.

Ảnh mẫu xe buýt dùng để minh họa suy luận YOLOv8 trong repository rk3588-yolov8.

Bước 3: Cài RKNN runtime và thư viện Python trên Orange Pi

Trên Orange Pi, README yêu cầu cập nhật librknnrt.so, cài rknn_toolkit_lite2 cho aarch64, rồi cài OpenCV. Các lệnh theo phiên bản 2.1.0 trong README như sau:

# Download
wget https://github.com/airockchip/rknn-toolkit2/raw/v2.1.0/rknpu2/runtime/Linux/librknn_api/aarch64/librknnrt.so

# Move to /usr/lib
sudo mv ./librknnrt.so /usr/lib

# Download
wget https://github.com/airockchip/rknn-toolkit2/raw/v2.1.0/rknn-toolkit-lite2/packages/rknn_toolkit_lite2-2.1.0-cp310-cp310-linux_aarch64.whl

# Install
pip install rknn_toolkit_lite2-2.1.0-cp310-cp310-linux_aarch64.whl

pip install opencv-python

Mã trong utils/rk3588.py gọi RKNNLite.load_rknn() rồi khởi tạo runtime với async_mode=TrueRKNNLite.NPU_CORE_0. Vì vậy, lỗi nạp model hoặc lỗi khởi tạo runtime cần được kiểm tra trước ở cặp model .rknn và runtime cài trên hệ thống.

Bước 4: Chạy nhận diện từ camera

Thiết lập mặc định trong main.py dùng input 640×640, ngưỡng đối tượng OBJ_THRESH = 0.25 và ngưỡng NMS NMS_THRESH = 0.25. Camera mặc định được mở qua OpenCV với source = 0.

python main.py

Chương trình mở cửa sổ Inf_results, vẽ khung nhận diện và in FPS trên terminal. Nhấn phím q trong cửa sổ hiển thị để thoát. Nếu dùng nguồn video khác, thay giá trị source trong main.py bằng đường dẫn file hoặc URL luồng video phù hợp với OpenCV.

Tùy chọn: Chuyển model YOLOv8 riêng sang RKNN

Phần này chỉ cần thiết khi không dùng model yolov8s.rknn có sẵn. Việc chuyển đổi thực hiện trên PC Linux x86_64 có Python 3.10, sau đó chép model .rknn sang Orange Pi.

Cài môi trường chuyển đổi

# Download
wget https://github.com/airockchip/rknn-toolkit2/raw/v2.1.0/rknn-toolkit2/packages/requirements_cp310-2.1.0.txt

# Install
pip install -r requirements_cp310-2.1.0.txt

# Download
wget https://github.com/airockchip/rknn-toolkit2/raw/v2.1.0/rknn-toolkit2/packages/rknn_toolkit2-2.1.0+708089d1-cp310-cp310-linux_x86_64.whl

# Install
pip install rknn_toolkit2-2.1.0+708089d1-cp310-cp310-linux_x86_64.whl

git clone https://github.com/airockchip/ultralytics_yolov8
cd ultralytics_yolov8
python setup.py install

Xuất YOLOv8 và chuyển ONNX sang RKNN

from ultralytics import YOLO
model = YOLO("yolov8.pt")
path = model.export(format="rknn")  # Internal method written by airockchip, don't be fooled by the format name

Khi xuất model, hãy kiểm tra kích thước input. README lưu ý có thể cần điều chỉnh batch_size trong ultralytics/cfg/default.yaml. Nếu quá trình chuyển đổi có cảnh báo hoặc lỗi, README đề xuất thử opset 12, 17 hoặc 19 tùy phiên bản PyTorch; với RKNN 2.1.0, opset 19 được khuyến nghị.

git clone https://github.com/airockchip/rknn_model_zoo
cd rknn_model_zoo/examples/yolov8/python
python convert.py <path-to-onnx-model>/yolov8n.onnx rk3588 i8 ../model/yolov8n.rknn

Kiểm tra khi gặp lỗi

  • Không nạp được model: kiểm tra file .rknn có nằm đúng trong thư mục models và tên model trong main.py có khớp không.
  • Không khởi tạo được runtime: kiểm tra kiến trúc aarch64, phiên bản librknnrt.so và wheel rknn_toolkit_lite2 có cùng chuỗi phiên bản với model đã chuyển đổi hay không.
  • Không mở được camera: kiểm tra camera được hệ điều hành nhận diện; nếu camera không phải thiết bị mặc định, điều chỉnh source thay vì để 0.
  • Không thấy cửa sổ kết quả: mã mẫu dùng cv2.imshow(); cần chạy trong môi trường có phiên desktop/hiển thị đồ họa phù hợp.

Kết luận

Với model RKNN sẵn có, Orange Pi 5 series có thể chạy ví dụ YOLOv8 trực tiếp thông qua RKNN Lite 2 và OpenCV. Khi cần model tùy biến, hãy thực hiện chuỗi chuyển đổi YOLOv8 → ONNX → RKNN trên PC, sau đó đưa file .rknn đã tạo vào thư mục models trên Orange Pi.

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *