前 言
本文主要介绍基于创龙科技TL3588-EVM评估板的NPU开发案例,适用开发环境如下。
Windows开发环境:Windows 7 64bit、Windows 10 64bit
虚拟机:VMware16.2.5
开发环境:Ubuntu20.04.6 64bit
U-Boot:U-Boot-2017.09
Kernel:Linux-5.10.160
Debian:Debian11
LinuxSDK:LinuxSDK-[版本号](基于rk3588_linux_release_v1.2.1_20230720)
无特殊说明情况下,本文默认使用USB TO UART2作为调试串口,使用系统启动卡(Micro SD方式)启动系统,通过路由器与PC机进行网络连接,请确保PC机、Ubuntu系统可正常访问互联网。
NPU(Neural network Processing Unit),即神经网络处理器。RK3588内部已集成高能效神经网络处理器NPU,支持神经网络推理硬件加速,能够流畅运行AI算法。主要参数如下:
(1)支持INT4/INT8/INT16/FP16/BF16/TF32等;
(2)支持多种框架,如TensorFlow/PyTorch/Caffe/MXNet等;
(3)6TOPS算力。
备注:更多详细信息请查看“6-开发资料数据手册核心板元器件CPU”目录下的文档。
NPU开发流程如下:
(1)模型训练:用户根据需求自行训练模型或使用官方提供的模型;
(2)模型转换:使用RKNN-Toolkit2将预训练模型转换为RK3588 NPU可使用的RKNN模型;
(3)应用开发:基于RKNN API开发应用程序。
图 1 NPU开发流程图
关于RKNN-Toolkit2模型转换使用说明、混合量化、精度问题排查的详细介绍,可查看LinuxSDK源码"external/rknn-toolkit2/doc/"目录下的"Rockchip_User_Guide_RKNN_Toolkit2_CN-1.5.0.pdf"与"Rockchip_User_Guide_RKNN_Toolkit2_EN-1.5.0.pdf"文档。
图 2
关于RKNN API的详细使用说明可查看LinuxSDK源码"external/rknpu2/doc/"目录下的"Rockchip_RKNPU_User_Guide_RKNN_API_V1.5.0_CN.pdf"与"Rockchip_RKNPU_User_Guide_RKNN_API_V1.5.0_EN.pdf"文档。
图 3
我司提供的NPU开发案例为产品资料“4-软件资料Demoplatform-demosyolov5_object_detect”,具体说明如下。

案例说明
本案例基于RKNN API实现对图片中目标对象的识别,并将识别结果以加水印的方式添加至图像,并保存成图片文件。案例循环测试10次,统计出推理的平均处理耗时。
备注:本案例基于瑞芯微官方例程实现,进行了目录的重构及编译的简化,功能逻辑未进行修改。官方例程位于LinuxSDK源码"external/rknpu2/examples/rknn_yolov5_demo/"目录下。
图 4
程序处理流程图如下:
图 5
案例测试
请通过网线将评估板千兆网口ETH0连接至路由器。
图 6
请将案例bin目录下的所有文件拷贝至评估板文件系统任意目录下。
图 7
在可执行文件所在目录,执行如下命令,对图片目标对象进行模型推理。
备注:模型运行的时间会有抖动。
Target# ./yolov5_object_detect yolov5s-640-640_rm_transpose_rk3588.rknn bus.jpg
图 8
从输出信息可知,本案例程序识别出测试图片包含4个person和1个bus对象,运行1次模型耗时为23.905000ms;循环运行10次模型平均耗时为21.356800ms。
案例程序对测试图片的目标对象标记成功后将输出名称为out.jpg的标记图片至当前目录,请将out.jpg文件拷贝至Windows下,并使用PC端相关软件对比查看bus.jpg与out.jpg,测试结果如下所示。
图 9
图 10 bus.jpg
图 11 out.jpg
从out.jpg图片可知,案例程序能正确框选出4位人物和1辆汽车,同时显示person、bus文字标签和置信度,标记对象的数量及信息等与程序打印信息一致。
本程序能够支持识别的目标数据集类型说明位于bin目录下的coco_80_labels_list.txt文件,用户可根据相关目标类型进行测试验证。
图 12
案例编译
环境搭建
打开Ubuntu,执行如下命令,安装NPU案例开发所需的Python3工具及依赖库。
Host# sudo apt-get install python3 python3-dev python3-pip
Host# sudo apt-get install libxslt1-dev zlib1g zlib1g-dev libglib2.0-0 libsm6 libgl1-mesa-glx libprotobuf-dev
图 13
图 14
执行如下命令,安装NPU案例开发所需的cmake和virtualenv工具。
Host# sudo apt install cmake
Host# sudo apt install virtualenv
图 15
执行如下命令,使用virtualenv工具创建虚拟环境并进入虚拟环境。
Host# virtualenv -p /usr/bin/python3 virtual //创建虚拟环境
Host# source virtual/bin/activate //进入虚拟环境
备注:虚拟机可能存在多个Python版本,由于虚拟机环境问题可能导致库安装不成功或成功亦无法找到库,因此建议使用虚拟环境安装库。virtual可任意命名,指定目录创建,若无指定目录则默认当前目录。
图 16
执行如下命令,进入LinuxSDK源码"rk3588_linux_release_v1.2.1/external/rknn-toolkit2/"目录,安装案例相关依赖库。
Host# cd /home/tronlong/RK3588/rk3588_linux_release_v1.2.1/external/rknn-toolkit2/
Host# pip3 install six~=1.15.0
Host# pip3 install typing-extensions~=3.7.4
Host# pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple -r doc/requirements_cp38-1.5.0.txt
Host# pip3 install packages/rknn_toolkit2-1.5.0+1fa95b5c-cp38-cp38-linux_x86_64.whl
图 17
图 18
图 19
在当前目录下,执行如下命令,若无报错信息,则表示安装成功,如下图所示。按下"Ctrl + D"即可退出测试。
Host# python3
from rknn.api import RKNN
图 20
执行如下命令,可退出虚拟环境。
Host# deactivate
图 21
模型转换
打开Ubuntu,执行如下命令,进入虚拟环境。
Host# source virtual/bin/activate
图 22
将案例src源码目录拷贝至Ubuntu工作目录下,进入源码目录的model目录,执行如下命令进行模型转换,将ONNX模型转化为RKNN模型。模型转化成功后将会在当前目录下新生成rknn_models目录,并在rknn_models目录下生成RKNN模型。
Host# cdmodel/
Host# python3 onnx2rknn.py
图 23
模型转化成功后执行如下命令,退出虚拟环境。
Host# deactivate
图 24
案例编译
在案例src源码目录下,执行如下命令配置编译环境,并修改CMakeLists.txt文件,请根据实际情况修改为LinuxSDK源码路径。
Host# source /home/tronlong/RK3588/rk3588_linux_release_v1.2.1/debian/sysroots/environment
Host# viCMakeLists.txt
图 25
图 26
执行如下命令,新建一个build目录,用于存放编译过程产生的相关文件。
Host# mkdir -p build
图 27
进入build目录,执行如下命令进行案例编译,编译完成将会在build目录下生成编译过程产生的相关文件,并在src目录下生成install目录,该目录下存放案例相关文件。
Host# cd build
Host# cmake ../
Host# make -j8
Host# make install
图 28
build目录存放编译过程产生的相关文件,install目录存放案例相关文件,包括测试图片bus.jpg、类别数据集coco_80_labels_list.txt、RKNN模型yolov5s-640-640_rm_transpose_rk3588.rknn和可执行程序yolov5_object_detect等文件,如下图所示。
图 29
关键代码
(1)加载图片RGB数据。
图 30
(2)加载模型并初始化RKNN。
图 31
(3)前处理,对图像进行缩放和裁剪以适配模型输入。
图 32
(4)设置模型运行输入输出参数,NPU运行模型,获取模型输出,统计运行耗时。
图 33
(5)进行后处理,得到目标识别结果。
图 34
(6)使用目标识别结果给图片添加水印,并保存为图片文件。
图 35
(7)重复运行10次模型并统计平均耗时。
图 36
审核编辑 黄宇
-
开发板
+关注
关注
26文章
6413浏览量
120717 -
NPU
+关注
关注
2文章
386浏览量
21342
发布评论请先 登录
创龙 瑞芯微 RK3588 国产2.4GHz八核 工业开发板—ISP图像处理开发案例
创龙 瑞芯微 RK3588 国产2.4GHz八核 工业开发板—视频开发案例(下)
创龙 瑞芯微 RK3588 国产2.4GHz八核 工业开发板—视频开发案例(上)
创龙 瑞芯微 RK3588 国产2.4GHz八核 工业开发板—视频图像处理框架
创龙 瑞芯微 RK3588 国产2.4GHz八核 工业开发板—IgH EtherCAT主站开发案例(下)
创龙 瑞芯微 RK3588 国产2.4GHz八核 工业开发板—IgH EtherCAT主站开发案例(上)
创龙 瑞芯微 RK3588 国产2.4GHz八核 工业开发板—物联网模块开发案例
创龙 瑞芯微 RK3588 国产2.4GHz八核 工业开发板—NPU开发案例
评论