本文完成于2022-07-02 20:21:55。博主在瑞芯微RK3588的开发板上跑了deepsort跟踪算法,从IP相机中的server拉取rtsp视频流,但是fps只有1.2,和放PPT一样卡顿,无法投入实际应用。本来想使用tensorrt进行加速推理,但是前提需要cuda,rk的板子上都是Arm的手机gpu,没有Nvidia的cuda,所以这条路行不通。那么转过来,使用开发板自带的NPU进行加速推理,岂不是更加可行,而且它本身就是深度学习嵌入式板子,不用NPU真的可惜。
问题来了:怎么使用NPU?在开发板上还是在自己的PC上?要安装什么环境?怎么安装?这些问题都需要依次考虑清楚。因为我在此之前也没有接触过NPU,所以为此做了很多功课,看了很多教程,总计有10h以上。然后今天自己成功实践了下转换rknn模型,并使用npu推理。为了让后面的同学少走弯路,特此花1个h记录下这个使用过程,因为官方教程真的很不详细,很多地方都需要自己踩坑然后填好,那么开始正题!
RKNN-Toolkit2 是为用户提供在 PC、 Rockchip NPU 平台上进行模型转换、推理和性能评估的开发套件,用户通过该工具提供的 Python 接口可以便捷地完成以下功能:
Caffe、TensorFlow、TensorFlow Lite、ONNX、DarkNet、PyTorch
等模型转为 RKNN
模型,并支持 RKNN 模型导入导出,RKNN 模型能够在 Rockchip NPU 平台上加载使用。Rockchip NPU
运行 RKNN 模型并获取推理结果;或将 RKNN模型分发到指定的 NPU 设备上进行推理并获取推理结果。RK3588 内置 NPU 模块, 处理性能最高可达6TOPS。使用该NPU需要下载RKNN SDK,RKNN SDK 为带有 NPU 的RK3588S/RK3588 芯片平台提供编程接口,能够帮助用户部署使用 RKNN-Toolkit2 导出的 RKNN 模型,加速 AI应用 的落地。
本开发套件支持运行于 Ubuntu操作系统 (目前版本 Windows、MacOS、Debian 等暂不支持)。
Ubuntu系统需要满足以下运行环境要求:
操作系统版本 | Ubuntu18.04(x64)及以上 |
---|---|
Python 版本 | 3.6 / 3.8 |
Python 库依赖 | 详见 doc/requirements*.txt |
下面我以 Ubuntu 18.04、Python3.6 为例,说明如何快速上手使用 RKNN-Toolkit2。我的开发板为ITX-3588J,但是开发板型号并不影响。
sudo apt-get install python3 python3-dev python3-pip
sudo apt-get install zlib1g zlib1g-dev
注意这个包中间是数字1,不是字母l,直接复制命令回车最安全。
sudo apt-get install libxslt1-dev libglib2.0-0 libsm6 libgl1-mesa-glx libprotobuf-dev gcc
我的Ubuntu系统已经装了很多SLAM
的环境,真的很担心依赖冲突,不过经过检验,发现并没有任何冲突。
从Firefly官网获取RKNN_SDK_V1.3.0
工具, 里面会有RKNN-Toolkit2 安装包,我是保存到百度网盘,然后在Windows下载好之后,使用U盘拷贝到Ubuntu系统的。当然也可以直接通过官网下载,但是比较慢。如果你是从网盘下载的,里面的docker文件不需要下载,用不到,大家切记!解压后,你的文件夹内容应该和我一样(rknpu2_1.3.0是我从外面解压进来了,本教程还用不到
)。
之前安装的是Ubuntu依赖,这里需要安装numpy、python_opencv等依赖包。这里为了防止Python环境污染,我使用了virtualenv
来管理环境,非常方便且安全,安装和使用方法可以查看这篇教程:如何安装和使用virtualenv——python环境的管理大师。这篇教程中创建的环境也就是我这里要使用的环境。
先激活环境,然后pip install -r doc/requirements_cp36-1.3.0.txt
,如果出现报错:
上面在安装bfloat16时失败,因为它依赖于numpy,但是它并没有被安装呢,所以我们先手动安装下numpy。
pip install numpy==1.16.6
然后重新执行命令:pip install -r doc/requirements_cp36-1.3.0.txt
,上面已经下载好的依赖不会重复下载,所有依赖下载完成后进行统一安装。
sudo pip3 install packages/rknn_toolkit2-1.3.0_11912b58-cp36-cp36m-linux_x86_64.whl
可以看到在py36环境中,所有依赖都已满足。
python3
from rknn.api import RKNN
如果导入 RKNN 模块没有失败,说明安装成功。同时按住 Ctrl+D 退出 Python3。
RKNN-Toolkit2
自带了一个模拟器,可以用来仿真模型在 npu 上运行时的行为。就相当于Android Studio自带模拟器一样。那么真机就相当于开发板。
这里我以 yolov5 为例。examples中的yolov5是一个 onnx 模型,用于目标检测,它是在模拟器上运行的。
cd examples/onnx/yolov5
python3 test.py
可以看到程序中执行的主要操作有:创建 RKNN 对象;模型配置;加载 onnx 模型;构建 RKNN 模型;导出 RKNN 模型;加载图片并推理,得到推理结果;释放 RKNN 对象。
examples 目录中的其他示例的执行方式与 yolov5 相同,这些模型主要用于图像分类、目标检测。
简单修改下test.py文件,显示并保存结果图片,不得不说,npu推理的检测框置信度高的离谱,不愧是嵌入式神经网络,比原先yolov5高很多。而且运行速度也比官网的cpu版本快很多。
转 换 后 的 模 型 默 认 保 存 路 径 为/rknn-toolkit2-1.x.x/examples/onnx/yolov5/yolov5s.rknn
,推 理 的 图 片 结 果 保 存 在/rknn-toolkit2-1.x.x/examples/onnx/yolov5/result.jpg
。
参考文献:Rockchip_Quick_Start_RKNN_Toolkit2_CN-1.3.0.pdf