在 RK3588S 上進行即時 YOLOv8n 無人機偵測

在 RK3588S 上實現高吞吐量邊緣推論

透過並行利用 Rockchip RK3588S SoC 的全部三個 NPU 核心,khadas_yolov8n_multithread 管線將 YOLOv8n 的推論吞吐量從約 31 FPS 提升至 46 FPS,有效地達到了 OS08A10 MIPI 相機感測器的 46 FPS 上限。此實作確保了硬體感測器而非軟體管線成為即時無人機偵測的主要瓶頸。

全硬體加速與記憶體效率

透過將所有繁重的每幀操作卸載到定型功能矽晶片(fixed-function silicon)上,該管線在處理單個 1080p 串流時實現了約 137–152 MB RSS 的平坦且有界的記憶體佔用(雙串流則為 276–304 MB)。這消除了在 CPU 上使用大型中間幀緩衝區或暫存張量(scratch tensors)的需求。

硬體卸載映射:

  • 擷取: 由影像訊號處理器 (ISP) 處理。
  • 色彩轉換/調整大小: 由 Rockchip RGA (Raster Graphic Acceleration) 模組處理。
  • 推論: 由 NPU 處理。

為了維持這種低記憶體配置,系統使用預先配置的緩衝區固定池 (BufPool),透過回收利用而非每幀分配記憶體。這種效率使得該管線可以在僅有 2 GB RAM 的入門級 RK3588S 開發板上運行。

可組合的多進程架構

該軟體被設計為一連串透過 Unix-domain sockets 連接的獨立 OS 進程,允許模組化且具擴展性的數據流。偵測結果會流經以下階段:

  1. 偵測: 主要的 YOLOv8n 管線。
  2. 追蹤: 一個 ByteTrack 階段(實作為獨立進程)用於多目標追蹤。
  3. 時序特徵: 一個提取時序特徵並管理追蹤歷史的進程。
  4. 存在狀態機 (Presence FSM): 一個監控物件存在的有限狀態機。
  5. LLM 摘要: 由 Qwen2.5-0.5B 模型生成的按需自然語言評估。

為 LLM 提供 NPU 資源管理

由於 NPU 是共享資源,系統實作了 blackout/resume 控制平面。當需要生成自然語言摘要時,相機管線會暫時暫停,以釋放整個 NPU 給 Qwen2.5-0.5B LLM,確保在將控制權交還給視覺管線之前,能以全速生成摘要。

技術實作與部署

此專案是在 Khadas Edge2 上開發與測試的,並支援 RK3588S 硬體上的任何 aarch64 Linux 環境。

建置選項

  • 原生建置: 可使用 build.sh 直接在開發板上進行編譯。
  • 交叉編譯: 透過提供的 CMake toolchain,支援使用 gcc-aarch64-linux-gnug++-aarch64-linux-gnu 在 x86-64/WSL 環境中進行編譯。

依賴項目

  • RKNN Runtime: librknnrt v2.3.2
  • RGA Library: librga v1.10.5_[8]

社群洞察與討論

雖然該專案展示了透過多執行緒實現顯著的性能提升,但部分社群成員對此方法與批處理(batching)的比較提出了疑問。

"More slop again. The way to get more throughput is to bump batch size, not to try and 'multithread' job submits to the NPU as if its a CPU."

對此,作者澄清了主要目標是透過盡可能減少 CPU 的工作量來探究 RK3588S 視覺管線的極限。該 3 執行緒推論池利用每個 NPU 核心一個 RKNN context (rknn_dup_context + rknn_set_core_mask),成功地將吞吐量提升到了感測器的最大能力。

專案生態系統

此專案是 Rockchip NPU 擴展工具套件的一部分:

  • RKNN_TRAIN_YOLO: 一個用於訓練並將 YOLO 模型匯出為 .rknn 格式的管線。
  • RKLLM_LLAMA_QWEN: 一個用於在 RK3588S 上使用 RKLLM (NPU) 或 llama.cpp (CPU) 執行優化後的 LLM 模型之管線。

Sources