要让RK3588的NPU真正跑起来,第一步自然是去下载RKNPU2。这里面包含了访问RK3588芯片NPU的高级接口,是开发AI应用的基础。对于Linux平台,核心的库文件是librknnrt.so,除此之外,还有API使用示例、NPU运行库、服务程序以及配套文档,组成了一套完整的SDK。
说到这个服务程序,叫rknn_server,它是在开发板上常驻的后台进程,专门用来处理连板推理的场景。SDK里还贴心地准备了几个Demo,比如MobileNet图像分类、SSD目标检测和YOLOv5目标检测,这些都是很好的参考起点,方便开发者在此基础上快速搭建自己的AI应用。
接下来,我们以rknpu2/examples下的rknn_yolov5_demo为例,在RK3588的Linux 64位平台(buildroot系统)上跑一遍,看看整个流程怎么走。整体思路很清晰,可以拆成三步:
1. 先在虚拟机的Ubuntu20.04上交叉编译这个demo程序。
2. 把编译好的程序部署到iTOP-RK3588开发板上。
3. 最后在开发板上把它运行起来。
设置交叉编译器
先把交叉编译器安顿好。这里需要安装gcc交叉编译器,下载后将其拷贝到Ubuntu的/opt/tool_chain目录下。这里有个小细节——拷贝路径最好和后续脚本中的配置保持一致,因为后面要用到交叉编译器的绝对路径。
解压操作也很直接:
tar -vxf gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu.tar.gz
解压完成后,先放在一边备用。
修改编译工具路径
既然是以rknn_yolov5_demo在RK3588 Linux 64位平台上运行为例,那就需要修改一下examples/rknn_yolov5_demo/build-XXX.sh中的编译工具路径。
具体来说,打开build-linux_RK3588.sh,把TOOL_CHAIN变量改成刚才交叉编译器的解压路径,并保存。修改后的内容大致如下:
TOOL_CHAIN=/opt/tool_chain/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu
GCC_COMPILER=$TOOL_CHAIN/bin/aarch64-none-linux-gnu
更新RKNN模型
RKNN是Rockchip NPU平台专属的模型格式,后缀是.rknn。SDK提供的Demo中已经默认带了模型,放在examples/rknn_yolov5_demo/model/RK3588/目录下。如果要用自己的模型,就需要先转换成rknn格式,转换方法可以参考后续章节的介绍。拿到rknn模型后,就可以通过C接口在RK3588平台上开发应用了。
编译demo
准备工作做完,就可以开始编译了。在终端里进入rknn_yolov5_demo文件夹:
cd examples/rknn_yolov5_demo/
然后运行编译脚本:
./build-linux_RK3588.sh
编译完成后,生成的可执行文件通常放在install目录下。当然,如果不想自己编译,网盘里也提供了编译好的Demo,可以直接下载使用。
开发板运行demo
最后一步,回到开发板上,把一切跑起来。
首先,通过U盘把RKNPU2工具中runtime/RK3588/Linux/librknn_api/aarch64/目录下的库文件,拷贝到开发板的/usr/lib目录下。
接着,把编译好的程序文件夹rknn_yolov5_demo_Linux整个拷贝到开发板的根目录。注意,开发板上需要烧写Linux系统(buildroot)。
然后,设置库文件的路径:
export LD_LIBRARY_PATH=./lib
进入程序所在目录:
cd /rknn_yolov5_demo_Linux
运行程序,识别图片中的物体:
./rknn_yolov5_demo ./model/RK3588/yolov5s-640-640.rknn ./model/bus.jpg
运行完成后,会生成结果图片out.jpg。把它拷贝到U盘里,拿到Windows下一看,效果一目了然。
