【幸狐 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 介绍、环境搭建、推理测试、板端运行等,并对一些日常场景进行推理识别,得益于板端强大的硬件支持,识别速度极快,取得了令人满意的识别效果,为人工智能和图像识别相关领域的开发提供了经验和参考。