【幸狐 Omni3576 边缘计算套件测评】RKNN 推理测试与图像识别
本文介绍了幸狐 Omni3576 边缘计算套件实现 RKNN 推理和图像物体识别的测试流程,包括 RKNN 介绍、环境搭建、推理测试、板端运行等。
介绍
本节介绍了 RKNN 模型、RKNN-Toolkit2 工具,便于理解和熟悉后续的开发环境搭建流程。
RKNN
RKNN 是 Rockchip NPU 平台使用的模型类型,以 .rknn 后缀结尾的模型文件。
瑞芯微 Rockchip 提供了完整的模型转换 Python 工具,方便用户将自主研发的算法模型转换成 RKNN 模型,同时 Rockchip 也提供了C/C++ 和 Python API 接口。
LuckFox Core3576 系列核心板搭载瑞芯微 RK3576 芯片,内置瑞芯微自研NPU。该NPU具有高运算精度,支持 INT4、INT8、INT16/FP16/BF16、TF32 混合量化。
RKNN-Toolkit2
RKNN-Toolkit2 工具在操作系统上提供 C 或 Python 接口,简化模型的部署和运行。
用户可以通过该工具完成模型转换、量化、推理、性能和内存评估、量化精度分析以及模型加密等功能。

首先需要在计算机上运行 RKNN-Toolkit2 工具,将训练好的模型转换为 RKNN 格式模型,之后使用 RKNN C API 或 Python API 在开发板上进行部署。
环境搭建
本节介绍了 RKNN 推理测试的开发环境搭建流程,包括 Ubuntu 系统、Conda 环境部署等。
Ubuntu 22.04 操作系统
Windows 系统下安装 VM 虚拟机, 下载 并在虚拟机中部署 Ubuntu 22.04 系统,分配磁盘空间大于 100GB 。

RKNN-Toolkit2 安装
克隆 rknn-toolkit2 库文件(约 3 GB)
git clone https://github.com/airockchip/rknn-toolkit2.git
GitHub 访问受限可修改 host 文件,详见: Gitee .
安装对应的 python 环境
sudo apt-get update
sudo apt-get install python3 python3-dev python3-pip
sudo apt-get install libxslt1-dev zlib1g zlib1g-dev libglib2.0-0 libsm6 libgl1-mesa-glx libprotobuf-dev gcc
安装 RKNN-ToolKit2 依赖包
pip3 install -r rknn-toolkit2.3.0/rknn-toolkit2/packages/x86_64/requirements_cpxx-2.2.0.txt
注意根据不同的Python版本,选择安装对应的依赖包。
安装 RKNN-ToolKit2
pip3 install rknn-toolkit2/packages/rknn_toolkit2-2.2.0+81f21f4d-cp310-cp310-linux_x86_64.whl
执行指令
python3
from rknn.api import RKNN
验证安装效果。

Conda 安装
推荐使用 Conda 创建 python 虚拟环境,便于在各种应用场景下灵活切换,避免出现版本兼容问题导致无法运行。
在 AI 模型的训练、模型转换的过程中需要使用不同的 python 虚拟环境。
安装 miniconda
下载安装包
wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-4.6.14-Linux-x86_64.sh
安装miniconda
chmod 777 Miniconda3-4.6.14-Linux-x86_64.sh
bash Miniconda3-4.6.14-Linux-x86_64.sh
在计算机终端,进入 Conda base 环境
source ~/miniconda3/bin/activate

创建 RKNN-Toolkit2 Conda 环境
创建 RKNN-Toolkit2 开发 Conda 环境, -n 参数表示环境名称,指定 python 版本为 3.8
conda create -n RKNN-Toolkit2 python=3.9
进入 RKNN-Toolkit2 Conda 环境
conda activate RKNN-Toolkit2
验证 Python 版本是否使用正确
python --version

获取 RKNN-Toolkit2 安装包
git clone https://github.com/airockchip/rknn-toolkit2.git

进入文件夹
cd rknn-toolkit2
安装 RKNN-Toolkit2 相关的依赖库, cp38 为对应的 Conda 环境 python 版本,实验使用的版本为 3.8 所以使用后缀为 cp38 的依赖项
pip install tf-estimator-nightly==2.8.0.dev2021122109
pip install -r rknn-toolkit2/packages/requirements_cp39-2.2.0.txt -i https://pypi.mirrors.ustc.edu.cn/simple/
安装 RKNN-Toolkit2
pip install rknn-toolkit2/packages/rknn_toolkit2-2.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
验证是否安装成功
python
>>> from rknn.api import RKNN

至此,RKNN 推理测试的开发环境搭建完成。
推理测试
本节介绍了 RKNN 推理测试的相关流程,包括 rknn_model_zoo 模型部署、编译及板端测试。
rknn_model_zoo
rknn_model_zoo 是瑞芯微官方提供的 RKNPU 支持的各种主流算法的部署示例,最新的示例支持 mobilenet 模型部署和 yolo 模型部署。
1.克隆 rknn_model_zoo 库文件
git clone https://github.com/airockchip/rknn_model_zoo.git
2.获取 Yolov10 ONNX 模型文件
cd rknn_model_zoo/examples/yolov10/model
chmod a+x download_model.sh
./download_model.sh
3.执行 rknn_model_zoo/examples/yolov10/python 目录下的模型转换程序 convert.py,
conda activate RKNN-Toolkit2
cd rknn_model_zoo/examples/yolov10/python
python3 convert.py ../model/yolov10n.onnx rk3576
输出模型

并存储于 ../model/yolov10.rknn

python3 实现模型转换的语法
python3 convert.py <onnx_model> <TARGET_PLATFORM> <dtype(optional)> <output_rknn_path(optional)>
相关参数
<onnx_model>:ONNX 模型路径
<TARGET_PLATFORM>:指定 NPU 平台名,这里指rk3576
<quant_dtype>:可选项,可以指定为i8或fp。i8表示进行量化,fp表示不量化,默认为i8
<output_rknn_path>:可选项,用于指定 RKNN 模型的保存路径,默认保存在 ONNX 模型同一目录下,名称为yolov10n.rknn
编译和构建
将 ONNX 模型转换成 RKNN 模型后,对 rknn_model_zoo/examples/yolov10 目录下的例程进行交叉编译。
编译前需设置环境变量
export GCC_COMPILER=/home/ljl/omni3576/prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu
值得注意的是,工具链的获取需要先 编译官方 SDK .
踩坑指南:下载 SDK 压缩文件后解压得到 .repo 文件,该文件默认被隐藏,需要打开显示隐藏的文件夹选项。
解压完成后执行 .repo/repo/repo sync -l 解包;设置环境变量后编译镜像 ./build.sh lunch
执行 rknn_model_zoo 目录下的 build-linux.sh 脚本
chmod +x ./build-linux.sh
./build-linux.sh -t rk3576 -a aarch64 -d yolov10
该脚本将编译例程

交叉编译完成后在 rknn_model_zoo 目录下会生成 install 目录,

包含编译出来的程序和库文件

运行程序
将 rknn_yolov10_demo 文件夹传输至开发板,
scp H:\\rknn_yolov10_demo luckfox@192.168.31.108:/home/luckfox
或 ADB 执行
adb push H:\\rknn_yolov10_demo /home/luckfox
或使用 FileZilla 软件将文件夹拖拽至板端。
SSH 执行编译
cd rknn_yolov10_demo
scp -r rknn_yolov10_demo/ luckfox@192.168.31.108:/home/luckfox

修改目标程序权限,执行程序
chmod a+x rknn_yolov10_demo
./rknn_yolov10_demo ./model/yolov10.rknn ./model/bus.jpg

推理完成后生成图片 out.png

注意到图中识别到的物体标签包括 person、bus,以及相应的准确率。
可识别的物体标签文件位于 rknn_yolov10_demo/model/coco_80_labels_list.txt
| Tables |
标签 |
|---|
| person |
人 |
| bicycle |
自行车 |
| car |
汽车 |
| motorcycle |
摩托车 |
| airplane |
飞机 |
| bus |
公交车 |
| train |
火车 |
| truck |
卡车 |
| boat |
船 |
| traffic light |
交通灯 |
| fire hydrant |
消防栓 |
| stop sign |
停止标志 |
| parking meter |
停车计时器 |
| bench |
板凳 |
| bird |
鸟 |
| cat |
猫 |
| dog |
狗 |
| horse |
马 |
| sheep |
羊 |
| cow |
牛 |
| elephant |
象 |
| bear |
熊 |
| zebra |
斑马 |
| giraffe |
长颈鹿 |
| backpack |
背包 |
| umbrella |
伞 |
| handbag |
手提包 |
| tie |
绳子 |
| suitcase |
手提箱 |
| frisbee |
飞盘 |
| skis |
雪橇 |
| snowboard |
滑雪板 |
| sports ball |
体育用球 |
| kite |
风筝 |
| baseball bat |
棒球棒 |
| baseball glove |
棒球手套 |
| skateboard |
滑板 |
| surfboard |
冲浪板 |
| tennis racket |
网球拍 |
| bottle |
瓶子 |
| wine glass |
酒杯 |
| cup |
杯子 |
| fork |
叉 |
| knife |
刀 |
| spoon |
勺子 |
| bowl |
碗 |
| banana |
香蕉 |
| apple |
苹果 |
| sandwich |
三明治 |
| orange |
橙子 |
| broccoli |
西兰花 |
| carrot |
胡萝卜 |
| hot dog |
热狗 |
| pizza |
比萨饼 |
| donut |
甜甜圈 |
| cake |
蛋糕 |
| chair |
椅子 |
| couch |
沙发 |
| potted plant |
盆花 |
| bed |
床 |
| dining table |
餐桌 |
| toilet |
厕所 |
| tv |
电视 |
| laptop |
笔记本电脑 |
| mouse |
鼠标 |
| remote |
遥控器 |
| keyboard |
键盘 |
| cell phone |
手机 |
| microwave |
微波炉 |
| oven |
烤箱 |
| toaster |
面包机 |
| sink |
水槽 |
| refrigerator |
冰箱 |
| book |
书 |
| clock |
时钟 |
| vase |
花瓶 |
| scissors |
剪刀 |
| teddy bear |
玩具熊 |
| hair drier |
吹风机 |
| toothbrush |
牙刷 |
扩展测试
可将目标图片放置于 rknn_yolov10_demo/model 文件夹内,执行上述流程,即可在板端运行程序实现推理识别
十二生肖

办公桌面

餐厅

卧室

客厅

总结
本文介绍了幸狐 Omni3576 边缘计算套件实现 RKNN 推理和物体识别的测试流程,包括 RKNN 介绍、环境搭建、推理测试、板端运行等,并对一些日常场景进行推理识别,得益于板端强大的硬件支持,识别速度极快,取得了令人满意的识别效果,为人工智能和图像识别相关领域的开发提供了经验和参考。