Skip to main content

AI / NPU

Neardi Pi 3 搭载 RK3576,NPU 算力为 6 TOPS。这里以 rknn_model_zoo 里的 MobileNet 分类 Demo 和 YOLOv8 检测 Demo 为例,主要整理板端代码获取、编译和模型运行流程。

RKNN 使用流程

NPU 不能直接运行常见训练框架导出的模型。完整流程里,需要先在 PC 上把 ONNX 模型转换成 RKNN 模型,然后在 Neardi Pi 3 上通过 RKNN Runtime 调用 NPU 推理。

RKNN Model Zoo 使用流程

简单理解就是:PC 负责“转模型”,Neardi Pi 3 负责“跑模型”。不过如果只是先在 Neardi Pi 3 上验证 NPU,使用 Neardi 镜像仓库即可,常用 RKNN 模型已经准备好了,不需要用户先做转换。

rknn_model_zoo 已经把常用 Demo、运行库、后处理代码和测试图片都整理好了,适合先用来验证 NPU 环境是否正常。PC 端 ONNX 转 RKNN 的步骤单独放在 RKNN 模型转换

准备编译环境

在 Neardi Pi 3 板端安装基础工具:

sudo apt update
sudo apt install git cmake build-essential

如果后续编译提示找不到 aarch64-linux-gnu-gcc,再补充安装交叉编译工具:

sudo apt install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu

获取 rknn_model_zoo

  • Rockchip 官方仓库
  • Neardi 镜像仓库
git clone https://github.com/airockchip/rknn_model_zoo
cd rknn_model_zoo

如果板端访问 GitHub 或模型下载比较慢,可以使用 Neardi 同步仓库。该仓库中的环境和常用 RKNN 模型已经整理过,更适合在板端快速验证,用户可以直接编译运行 Demo,不用先走 PC 端转换流程。

git clone http://git.neardi.com/airockchip/rknn_model_zoo
cd rknn_model_zoo

官方示例 Demo

Rockchip 官方 rknn_model_zoo/examples 目前已经覆盖视觉、OCR、音频、语音和多模态等常见方向。不同仓库版本中的目录可能会有细微变化,常见目录如下:

clip lite_transformer mms_tts mobilesam ppseg resnet wav2vec2 yamnet yolov10 yolov5_seg yolov7 yolov8_obb yolov8_seg yolox
deeplabv3 LPRNet mobilenet PPOCR ppyoloe RetinaFace whisper yolo11 yolov5 yolov6 yolov8 yolov8_pose yolo_world zipformer

大致可以这样理解:

示例用途说明
mobilenet, resnet图片分类。输入输出都比较简单,适合先做 NPU 冒烟测试。
yolov5, yolov6, yolov7, yolov8, yolov10, yolo11, yolox, ppyoloe目标检测。输出目标框和类别,比如人、车、COCO 常见物体。
yolov5_seg, yolov8_seg实例分割。除了目标框,还会输出每个目标的 mask。
yolov8_pose人体姿态估计。检测人以及肩、肘、膝等关键点。
yolov8_obb旋转框检测。适合航拍、工业检测等目标角度不固定的场景。
yolo_world, clip视觉语言或开放词汇相关 Demo,适合做图片特征和文本概念匹配。
deeplabv3, ppseg语义分割。按像素分类,比如道路、人、背景等。
mobilesam轻量级 SAM 风格图像分割 Demo。
RetinaFace人脸检测。
LPRNet车牌识别。
PPOCROCR 文字检测和识别,用于读取图片中的文字。
yamnet音频事件分类。
wav2vec2, whisper, zipformer语音识别相关 Demo。
mms_tts文本转语音 Demo。
lite_transformer轻量级 Transformer Demo,主要用于序列或 NLP 类模型验证。

如果只是想快速确认板端 NPU 能跑起来,建议先从 mobilenetyolov8 开始。确认 RKNN Runtime、RGA 和 Demo 编译流程都正常后,再根据实际模型类型选择更接近的示例。

修改 build-linux.sh

在 Neardi Pi 3 上编译 RK3576 demo 时,建议在 build-linux.sh 中指定编译器前缀:

if [ -z ${TARGET_SOC} ] || [ -z ${BUILD_DEMO_NAME} ]; then
echo "$usage"
exit -1
fi

+GCC_COMPILER=aarch64-linux-gnu
+
if [[ -z ${GCC_COMPILER} ]];then
if [[ ${TARGET_SOC} = "rv1106" || ${TARGET_SOC} = "rv1103" ]];then
echo "Please set GCC_COMPILER for $TARGET_SOC"

同时确认脚本有执行权限:

chmod +x build-linux.sh

编译 MobileNet Demo

MobileNet 是一个轻量级图片分类 Demo,适合先用来确认 NPU 推理流程是否正常,再继续验证目标检测 Demo。

执行:

./build-linux.sh -t rk3576 -a aarch64 -d mobilenet -b Release

编译完成后,安装目录一般是:

neardi@RK3576:~/rknn_model_zoo/install/rk3576_linux_aarch64/rknn_mobilenet_demo

运行 MobileNet Demo

使用准备好的 panda 图片运行:

neardi@RK3576:~$ cd ~/rknn_model_zoo/install/rk3576_linux_aarch64/rknn_mobilenet_demo
neardi@RK3576:~/rknn_model_zoo/install/rk3576_linux_aarch64/rknn_mobilenet_demo$ ./rknn_mobilenet_demo ./model/mobilenet_v2.rknn ./model/panda.png

输入图片:

MobileNet panda 输入图片

正常运行时会打印模型信息,并输出 Top 5 分类结果:

num_lines=1001
model input num: 1, output num: 1
model is NHWC input fmt
model input height=224, width=224, channel=3
src width is not 4/16-aligned, convert image use cpu
finish
rknn_run
[388] score=0.999382 class=n02510455 giant panda, panda, panda bear, coon bear, Ailuropoda melanoleuca
[387] score=0.000056 class=n02509815 lesser panda, red panda, panda, bear cat, cat bear, Ailurus fulgens
[151] score=0.000048 class=n02085620 Chihuahua
[850] score=0.000036 class=n04399382 teddy, teddy bear
[295] score=0.000032 class=n02133161 American black bear, black bear, Ursus americanus, Euarctos americanus

编译 YOLOv8 Demo

执行:

./build-linux.sh -t rk3576 -a aarch64 -d yolov8 -b Release

正常情况下可以看到类似信息:

BUILD_DEMO_NAME=yolov8
TARGET_SOC=rk3576
TARGET_ARCH=aarch64
BUILD_TYPE=Release
CC=aarch64-linux-gnu-gcc
CXX=aarch64-linux-gnu-g++

编译完成后,安装目录一般是:

neardi@RK3576:~/rknn_model_zoo/install/rk3576_linux_aarch64/rknn_yolov8_demo

目录内容如下:

neardi@RK3576:~$ cd ~/rknn_model_zoo/install/rk3576_linux_aarch64/rknn_yolov8_demo
neardi@RK3576:~/rknn_model_zoo/install/rk3576_linux_aarch64/rknn_yolov8_demo$ ls
lib model rknn_yolov8_demo rknn_yolov8_demo_zero_copy

编译过程中如果出现 warning,但最终显示下面内容,一般不影响 Demo 使用:

[100%] Built target rknn_yolov8_demo
[100%] Built target rknn_yolov8_demo_zero_copy
Install the project...

运行 YOLOv8 Demo

进入安装目录后运行:

neardi@RK3576:~$ cd ~/rknn_model_zoo/install/rk3576_linux_aarch64/rknn_yolov8_demo
neardi@RK3576:~/rknn_model_zoo/install/rk3576_linux_aarch64/rknn_yolov8_demo$ ./rknn_yolov8_demo ./model/yolov8.rknn ./model/bus.jpg

正常运行时会打印模型输入输出信息,并输出检测结果,例如:

model input num: 1, output num: 9
model is NHWC input fmt
model input height=640, width=640, channel=3
rga_api version 1.10.1_[0]
rknn_run
person @ (211 241 282 507) 0.864
person @ (109 235 225 536) 0.856
bus @ (99 136 552 455) 0.856
person @ (476 223 560 521) 0.848
write_image path: out.png width=640 height=640 channel=3

运行完成后,当前目录会生成 out.png,可以打开查看检测框效果。

Neardi Pi 3 YOLOv8 检测结果

模型转换文档

如果使用 Neardi 镜像仓库,常用 RKNN 模型已经转换好了;只有在使用自己的 ONNX 模型,或者想手动更新模型时,才需要走 PC 端转换流程。PC 端环境安装、RKNN Toolkit2 安装、ONNX 转 RKNN、常见报错已经单独整理:

RKNN 模型转换

常见问题

找不到 aarch64-linux-gnu-gcc

先安装编译器:

sudo apt install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu

然后确认 build-linux.sh 中已经加入:

GCC_COMPILER=aarch64-linux-gnu

cmake: command not found

如果编译时停在 ./build-linux.sh: line 202: cmake: command not found,说明板端还没有安装 cmake。安装后重新编译即可:

sudo apt install cmake
./build-linux.sh -t rk3576 -a aarch64 -d yolo11 -b Release

其他 Demo,比如 yolov8,处理方法也是一样的。

The RKNN model can not be found

如果编译已经完成,但最后提示:

The RKNN model can not be found in "/home/neardi/rknn_model_zoo/install/rk3576_linux_aarch64/rknn_yolo11_demo/model", please check!

一般是对应的 .rknn 模型还没有转换,或者没有放到 demo 的 model 目录。先在 PC 端把 ONNX 转成 RKNN,再把生成的 .rknn 拷贝到对应目录。PC 端步骤可以看 RKNN 模型转换

例如 yolo11

scp yolo11.rknn neardi@192.168.1.153:~/rknn_model_zoo/examples/yolo11/model/

然后重新编译:

neardi@RK3576:~$ cd ~/rknn_model_zoo
neardi@RK3576:~/rknn_model_zoo$ ./build-linux.sh -t rk3576 -a aarch64 -d yolo11 -b Release

如果只是快速验证,也可以直接把 .rknn 拷贝到报错中提示的 install 目录下。

下载模型失败

官方仓库中的部分 Demo 会在线下载模型。如果板端网络访问外网不稳定,建议使用 Neardi 同步仓库:

git clone http://git.neardi.com/airockchip/rknn_model_zoo

运行时报 librknnrt.so 或 librga.so 找不到

优先进入安装目录运行 Demo:

neardi@RK3576:~$ cd ~/rknn_model_zoo/install/rk3576_linux_aarch64/rknn_yolov8_demo
neardi@RK3576:~/rknn_model_zoo/install/rk3576_linux_aarch64/rknn_yolov8_demo$ ./rknn_yolov8_demo ./model/yolov8.rknn ./model/bus.jpg

该目录下的 lib/ 已经包含 librknnrt.solibrga.so