RK3588S 上的实时 YOLOv8n 无人机检测
RK3588S 上的高吞吐量边缘推理
通过并行利用 Rockchip RK3588S SoC 的全部三个 NPU 核心,khadas_yolov8n_multithread 流水线将 YOLOv8n 的推理吞吐量从约 31 FPS 提高到 46 FPS,有效地达到了 OS08A10 MIPI 摄像头传感器的 46 FPS 上限。这种实现确保了硬件传感器而非软件流水线成为了实时无人机检测的主要瓶颈。
全硬件加速与内存效率
通过将所有繁重的逐帧操作卸载到专用硬件功能模块,该流水线实现了对于单个 1080p 流(以及双流为 276–304 MB)约 137–152 MB RSS 的平稳且有界的内存占用。
硬件卸载映射:
- Capture: 由图像信号处理器 (ISP) 处理。
- Color-convert/Resize: 由 Rockchip RGA (Raster Graphic Acceleration) 模块处理。
- Inference: 由 NPU 处理。
为了保持这种低内存占用,系统使用了一个预分配缓冲区的固定池 (BufPool) 进行循环使用,而不是按帧分配内存。这种效率使得该流水线可以在内存仅为 2 GB 的入门级 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 控制平面。当需要生成自然语言摘要时,摄像头流水线会暂时暂停,以释放整个 NPU 给 Qwen2.5-0.5B LLM,从而确保在将控制权交还给视觉流水线之前,摘要能以全速生成。
技术实现与部署
该项目在 Khadas Edge2 上开发和测试,并支持 RK3588S 硬件上的任何 aarch64 Linux 环境。
构建选项
- Native Build: 可以直接在开发板上使用
build.sh进行编译。 - Cross-Compilation: 支持使用提供的 CMake 工具链在 x86-64/WSL 环境中使用
gcc-aarch64-linux-gnu和g++-aarch64-linux-gnu进行交叉编译。
依赖项
- 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 上下文 (rknn_dup_context + rknn_set_core_mask),成功将吞吐量提升到了传感器的最大能力。
项目生态系统
该项目是 Rockchip NPU 更广泛工具套件的一部分:
- RKNN_TRAIN_YOLO: 用于将 YOLO 模型训练并导出为
.rknn格式的流水线。 - RKLLM_LLAMA_QWEN: 用于在 RK3588S 上使用 RKLLM (NPU) 或 llama.cpp (CPU) 运行优化后的 LLM 模型 的流水线。