本文主要介绍基于创龙科技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:Debian 11
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开发应用程序。
关于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"文档。
关于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"文档。
我司提供的NPU开发案例为产品资料“4-软件资料\Demo\platform-demos\yolov5_object_detect”,具体说明如下。
本案例基于RKNN API实现对图片中目标对象的识别,并将识别结果以加水印的方式添加至图像,并保存成图片文件。案例循环测试10次,统计出推理的平均处理耗时。
备注:本案例基于瑞芯微官方例程实现,进行了目录的重构及编译的简化,功能逻辑未进行修改。官方例程位于LinuxSDK源码"external/rknpu2/examples/rknn_yolov5_demo/"目录下。
程序处理流程图如下:
请通过网线将评估板千兆网口ETH0连接至路由器。
请将案例bin目录下的所有文件拷贝至评估板文件系统任意目录下。
在可执行文件所在目录,执行如下命令,对图片目标对象进行模型推理。
备注:模型运行的时间会有抖动。
Target# ./yolov5_object_detect yolov5s-640-640_rm_transpose_rk3588.rknn bus.jpg
从输出信息可知,本案例程序识别出测试图片包含4个person和1个bus对象,运行1次模型耗时为23.905000ms;循环运行10次模型平均耗时为21.356800ms。
案例程序对测试图片的目标对象标记成功后将输出名称为out.jpg的标记图片至当前目录,请将out.jpg文件拷贝至Windows下,并使用PC端相关软件对比查看bus.jpg与out.jpg,测试结果如下所示。
从out.jpg图片可知,案例程序能正确框选出4位人物和1辆汽车,同时显示person、bus文字标签和置信度,标记对象的数量及信息等与程序打印信息一致。
本程序能够支持识别的目标数据集类型说明位于bin目录下的coco_80_labels_list.txt文件,用户可根据相关目标类型进行测试验证。
打开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
执行如下命令,安装NPU案例开发所需的cmake和virtualenv工具。
Host# sudo apt install cmake
Host# sudo apt install virtualenv
执行如下命令,使用virtualenv工具创建虚拟环境并进入虚拟环境。
Host# virtualenv -p /usr/bin/python3 virtual //创建虚拟环境
Host# source virtual/bin/activate //进入虚拟环境
备注:虚拟机可能存在多个Python版本,由于虚拟机环境问题可能导致库安装不成功或成功亦无法找到库,因此建议使用虚拟环境安装库。virtual可任意命名,指定目录创建,若无指定目录则默认当前目录。
执行如下命令,进入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
在当前目录下,执行如下命令,若无报错信息,则表示安装成功,如下图所示。按下"Ctrl + D"即可退出测试。
Host# python3
from rknn.api import RKNN
执行如下命令,可退出虚拟环境。
Host# deactivate
打开Ubuntu,执行如下命令,进入虚拟环境。
Host# source virtual/bin/activate
将案例src源码目录拷贝至Ubuntu工作目录下,进入源码目录的model目录,执行如下命令进行模型转换,将ONNX模型转化为RKNN模型。模型转化成功后将会在当前目录下新生成rknn_models目录,并在rknn_models目录下生成RKNN模型。
Host# cd model/
Host# python3 onnx2rknn.py
模型转化成功后执行如下命令,退出虚拟环境。
Host# deactivate
在案例src源码目录下,执行如下命令配置编译环境,并修改CMakeLists.txt文件,请根据实际情况修改为LinuxSDK源码路径。
Host# source /home/tronlong/RK3588/rk3588_linux_release_v1.2.1/debian/sysroots/environment
Host# vi CMakeLists.txt
执行如下命令,新建一个build目录,用于存放编译过程产生的相关文件。
Host# mkdir -p build
进入build目录,执行如下命令进行案例编译,编译完成将会在build目录下生成编译过程产生的相关文件,并在src目录下生成install目录,该目录下存放案例相关文件。
Host# cd build
Host# cmake ../
Host# make -j8
Host# make install
build目录存放编译过程产生的相关文件,install目录存放案例相关文件,包括测试图片bus.jpg、类别数据集coco_80_labels_list.txt、RKNN模型yolov5s-640-640_rm_transpose_rk3588.rknn和可执行程序yolov5_object_detect等文件,如下图所示。
(1)加载图片RGB数据。
(2)加载模型并初始化RKNN。
(3)前处理,对图像进行缩放和裁剪以适配模型输入。
(4)设置模型运行输入输出参数,NPU运行模型,获取模型输出,统计运行耗时。
(5)进行后处理,得到目标识别结果。
(6)使用目标识别结果给图片添加水印,并保存为图片文件。
(7)重复运行10次模型并统计平均耗时。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。