RK3588S上でのリアルタイムYOLOv8n UAV検出
RK3588Sにおける高スループット・エッジ推論
Rockchip RK3588S SoCの3つのNPUコアを並列に活用することで、khadas_yolov8n_multithread パイプラインはYOLOv8nの推論スループットを約31 FPSから46 FPSに向上させ、OS08A10 MIPIカメラセンサーの46 FPSという上限を効果的に飽和させています。この実装により、ソフトウェア・パイプラインではなく、ハードウェア・センサーがリアルタイムUAV検出の主要なボトルネックとなるようになります。
完全なハードウェア加速とメモリ効率
すべての重いフレームごとの操作を固定機能シリコンにオフロードすることで、パイプラインは単一の1080pストリームに対して約137–152 MB RSS、(デュアルストリームの場合は276–304 MB)という、平坦で制限されたメモリフットプリントを実現しています。これにより、CPU上での大規模な中間フレームバッファやスクラッチテンソルの必要性が排除されます。
ハードウェア・オフロード・マッピング:
- Capture: Image Signal Processor (ISP) によって処理されます。
- Color-convert/Resize: Rockchip RGA (Raster Graphic Acceleration) ブロックによって処理されます。
- Inference: NPU によって処理されます。
この低いメモリプロファイルを維持するために、システムはフレームごとにメモリを割り当てるのではなく、再利用される事前割り当てバッファの固定プール (BufPool) を使用しています。この効率性により、パイプラインはわずか2 GBのRAMを備えたエントリーレベルのRK3588Sボード上で動作可能です。
構成可能なマルチプロセス・アーキテクチャ
ソフトウェアは、Unix-domain socketsを介して接続された独立したOSプロセスの連鎖として設計されており、モジュール式でスケーラブルなデータフローを可能にします。検出結果は以下のステージを経て流れます:
- Detection: 主要なYOLOv8nパイプライン。
- Tracking: マルチオブジェクト・トラッキングのためのByteTrackステージ(別プロセスとして実装)。
- Temporal Features: 時間的特徴を抽出し、トラック履歴を管理するプロセス。
- Presence FSM: オブジェクトの存在を監視する有限状態機械 (FSM)。
- LLM Summary: Qwen2.5-0.5Bモデルによって生成される、オンデマンドの自然言語評価。
LLMのためのNPUリソース管理
NPUは共有リソースであるため、システムは blackout/resume コントロールプレーンを実装しています。自然言語の要約が必要な場合、カメラパイプラインは一時的に停止され、Qwen2.5-0.5B LLMのためにNPU全体が解放されます。これにより、要約がフルスピードで生成された後、制御がビジョン・パイプラインに返されます。
技術的実装とデプロイメント
このプロジェクトはKhadas Edge2で開発およびテストされており、RK3588Sハードウェア上のあらゆるaarch64 Linux環境をサポートしています。
ビルド・オプション
- Native Build:
build.shを使用してボード上で直接コンパイル可能です。 - Cross-Compilation: 提供されるCMakeツールチェーンを使用して、
gcc-aarch64-linux-gnuおよびg++-aarch64-linux-gnuを介してx86-64/WSL環境をサポートしています。
依存関係
- RKNN Runtime:
librknnrt v2.3.2 - RGA Library:
librga v1.10.5_[8]
コミュニティの洞察と議論
プロジェクトはマルチスレッディングを通じて大幅なパフォーマンス向上を示していますが、一部のコミュニティ・メンバーは、バッチ処理と比較した際のアプローチに疑問を呈しています。
"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コアごとに1つのRKNNコンテキスト (rknn_dup_context + rknn_set_core_mask) を利用しており、センサーの最大能力までスループットを向上させることに成功しています。
プロジェクト・エコシステム
このプロジェクトは、Rockchip NPUのためのより広範なツールスイートの一部です:
- RKNN_TRAIN_YOLO: YOLOモデルを
.rknn形式にエクスポートおよびトレーニングするためのパイプライン。 - RKLLM_LLAMA_QWEN: RKLLM (NPU) または llama.cpp (CPU) を使用して、RK3588S上で最適化されたLLMモデルを実行するためのパイプライン。