|
前 言 本文主要介绍基于创龙科技TL3562-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.209 LinuxSDK:rk3562-buildroot-2021.11-sdk-[版本号](基于rk3562_linux_release_v1.2.0_20240620) 无特殊说明情况下,本文默认使用USB TO UART0作为调试串口,使用Linux系统启动卡(Micro SD方式)启动系统,通过路由器与PC机进行网络连接,请确保PC机、Ubuntu系统可正常访问互联网。 NPU(Neural network Processing Unit),即神经网络处理器。RK3562内部已集成高能效神经网络处理器NPU,支持神经网络推理硬件加速,能够流畅运行AI算法。主要参数如下: (1)支持INT4/INT8/INT16/FP16等; (2)支持多种框架,如TensorFlow、MXNet、PyTorch、Caffe等; (3)1TOPS算力。 备注:更多详细信息请查看“6-开发资料\数据手册\核心板元器件\CPU\”目录下的文档。 NPU开发流程如下: (1)模型训练:用户根据需求自行训练模型或使用官方提供的模型; (2)模型转换:使用RKNN-Toolkit2将预训练模型转换为RK3562 NPU可使用的RKNN模型; (3)应用开发:基于RKNN API开发应用程序。 图 1 NPU开发流程图 表 1 图 2 图 3 图 4 图 5 图 6 图 7我司提供的NPU开发案例位于产品资料“4-软件资料\Demo\platform-demos\”。其中,yolov5_object_detect案例为静态演示案例(通过单张图片进行目标识别),v4l2_yolov5_detect案例为动态演示案例(通过摄像头连续获取图像进行目标识别),具体说明如下。 关于RKNN-Toolkit2环境搭建、模型转换使用说明、混合量化、精度问题排查的详细介绍,可查看yolov5_object_detect案例"tool\rknn-toolkit2\doc\"目录下的"02_Rockchip_RKNPU_User_Guide_RKNN_SDK_V2.0.0beta0_CN.pdf"文档。 关于RKNN-Toolkit2模型转换API接口说明,可查看yolov5_object_detect案例"tool\rknn-toolkit2\doc\"目录下的"02_Rockchip_RKNPU_User_Guide_RKNN_SDK_V2.0.0beta0_CN.pdf"文档。 关于RKNN API的详细使用说明,可查看yolov5_object_detect案例"tool\rknn-toolkit2\doc\"目录下的"04_Rockchip_RKNPU_API_Reference_RKNNRT_V2.0.0beta0_CN.pdf"文档。
1yolov5_object_detect案例
案例说明本案例基于RKNN API实现对图片中目标对象的识别,并将识别结果以加水印的方式添加至图像,并保存成图片文件。案例循环测试10次,统计出推理的平均处理耗时。 备注:本案例基于瑞芯微官方例程实现,进行了目录的重构及编译的简化,功能逻辑未进行修改。官方例程位于LinuxSDK源码"/external/rknpu2/examples/rknn_yolov5_demo/"目录下。 程序处理流程图如下: 案例测试请通过网线将评估板千兆网口ETH0 RGMII连接至路由器。 请将案例bin目录下的所有文件拷贝至评估板文件系统任意目录下。 在可执行文件所在目录,执行如下命令,对图片目标对象进行模型推理。 备注:模型运行的时间会有抖动。 Target# ./yolov5_object_detect yolov5s-640-640_rk3562.rknn car.jpg 从输出信息可知,本案例程序识别出测试图片包含person、car、bus、truck等对象,运行1次模型耗时为73.843000ms;循环运行10次模型平均耗时为47.365303ms。 案例程序对测试图片的目标对象标记成功后将输出名称为out.jpg的标记图片至当前目录,请将out.jpg文件拷贝至Windows下,并使用PC端相关软件对比查看car.jpg与out.jpg,测试结果如下所示。 图 8 car.jpg 图 9 out.jpg从out.jpg图片可知,案例程序能正确框选出人物、汽车等物体,同时显示person、car文字标签和置信度,标记对象的数量及信息等与程序打印信息一致。 本程序能够支持识别的目标数据集类型说明位于bin目录下的coco_80_labels_list.txt文件,用户可根据相关目标类型进行测试验证。 图 10案例编译将案例src源码目录拷贝至Ubuntu工作目录下,进入源码目录,执行如下命令配置环境变量,并修改CMake配置文件CMakeLists.txt,请根据实际情况修改为LinuxSDK源码路径。 Host# source /home/tronlong/RK3562/rk3562-buildroot-2021.11-sdk-v1.0/buildroot/output/rockchip_rk3562/host/environment-setup Host# vim CMakeLists.txt 图 11 图 12新建一个build目录,用于存放编译过程产生的相关文件。 Host# mkdir -p build 图 13进入build目录,执行如下命令进行案例编译,编译完成将会在build目录下生成编译过程产生的相关文件,并在src目录下生成install目录,该目录下存放案例相关文件。 Host# cd build Host# cmake -DCM***E_C_COMPILER=aarch64-buildroot-linux-gnu-gcc -DCM***E_CXX_COMPILER=aarch64-buildroot-linux-gnu-g++ ../ Host# make -j8 Host# make install 图 14 图 15build目录存放编译过程产生的相关文件,install目录存放案例相关文件,包括测试图片car.jpg、类别数据集coco_80_labels_list.txt、RKNN模型yolov5s-640-640_rk3562.rknn和可执行程序yolov5_object_detect等文件,如下图所示。 图 16 关键代码(1)加载图片RGB数据。 图 17(2)加载模型并初始化RKNN。 图 18(3)前处理,对图像进行缩放和裁剪以适配模型输入。 图 19(4)设置模型运行输入输出参数,NPU运行模型,获取模型输出,统计运行耗时。 图 20(5)进行后处理,得到目标识别结果。 图 21(6)使用目标识别结果给图片添加水印,并保存为图片文件。 图 22(7)重复运行10次模型并统计平均耗时。 图 23
由于篇幅过长等原因,部分内容均不逐一展示,如需获取完整版详细资料,请关注创龙科技微信公众号或官网,或者评论区留言,感谢您的支持!
|