基于wsl的rknn调试
自这里学习ELF2开发板(飞凌嵌入式)搭建深度学习环境部署(RKNN环境部署)-CSDN博客。
RKNN环境搭建
本文主要是使用RKNN-Toolkit2和RKNN Model Zoo将yolov5模型进行量化部署转换为rknn模型,并编译好基本脚本上传至开发板。
模型工具的介绍
RKNN-Toolkit2
RKNN-Toolkit2 是由瑞芯微电子开发的一套深度学习模型优化和推理工具。它支持多种深度学习框
架(如 Caffe、TensorFlow、PyTorch 等)的模型转换为 RKNN 格式,并提供了模型转换、量化、推理等功能。RKNN-Toolkit2 主要面向在瑞芯微 SoC 上进行 AI 应用开发,但也可以用于 PC 平台进行模型的转换、量化、推理等操作。
主要功能
模型转换:RKNN-Toolkit2支持将多种主流框架(如 TensorFlow、PyTorch、Caffe 等)训练得到的模型转换为RKNN模型,以便在 Rockchip 的硬件平台上运行。
模型优化:工具包提供了模型优化功能,可以对转换后的 RKNN 模型进行进一步的优化,以提高
模型在 Rockchip NPU 上的运行效率。
模型部署:通过 RKNN-Toolkit2,用户可以将优化后的 RKNN 模型部署到 Rockchip 的开发板上,进行 实际的推理测试和应用开发。
RKNN-Toolkit2仓库链接:https://github.com/airockchip/rknn-toolkit2
RKNN-Toolkit-Lite2
RKNN-Toolkit-Lite2 是 Rockchip 为其轻量级神经网络处理单元(NPU)提供的一款工具包。它专注于简化和加速深度学习模型在 Rockchip 硬件平台上的部署和推理过程。与 RKNN-Toolkit2 相比,RKNN-Toolkit-Lite2 主要针对轻量级应用和较小的计算需求进行优化。
主要功能
模型转换:支持将多种主流深度学习框架(如 TensorFlow Lite、ONNX 等)训练得到的模型转换为 RKNN Lite 模型,便于在 Rockchip 的轻量级 NPU 上进行推理。
模型优化:提供了针对轻量级模型的优化功能,以提高模型在 Rockchip 轻量级 NPU 上的运行效率和速度。
推理部署:使得优化后的 RKNN Lite 模型可以在 Rockchip 的开发板或嵌入式设备上进行推理,适合实时应用场景。
RKNN-Toolkit-Lite2仓库链接:https://github.com/airockchip/rknn-toolkit2/tree/master/rknn-toolkit-lite2
RKNPU2
RKNPU2 是 Rockchip 推出的一个跨平台的编程接口,主要用于帮助用户部署使用 RKNN Toolkit2导出的 RKNN 模型,从而加速 AI 应用的落地。
RKNPU2 的架构设计目标是优化深度学习模型的执行效率,其核心是一个专门为机器 学习任务定制
的硬件加速器。
主要功能
高效性能:RKNPU2 设计的目标是提供高吞吐量和低延迟,使复杂的 AI 算法得以快速执行。
低功耗:相比于 CPU 和 GPU,NPU 在执行特定 AI 任务时,能显著降低能耗,延长设备电池寿命。
灵活的 API 支持:开发者可以选择多种编程方式,如 C/C++、Python,或者直接使用预先训 练好的模型。
跨平台兼容:RKNPU2 可适配多种操作系统,包括 Linux 和 Android,方便在不同设备上部署。
开源社区:得益于开源模式,用户可以贡献代码,共同改进和完善项目,推动技术进步。
RKNPU2仓库链接: https://github.com/airockchip/rknn-toolkit2/tree/master/rknpu2
RKNN Model Zoo
RKNN Model Zoo基于 RKNPU SDK 工具链开发, 提供了目前主流算法的部署例程. 例程包含导出RKNN模型, 使用 Python API, CAPI 推理 RKNN 模型的流程,RKNN Model Zoo依赖 RKNN-Toolkit2 进行模型转换.
RKNN Model Zoo仓库链接:https://github.com/airockchip/rknn_model_zoo
实际使用操作流程:
在计算机的ubuntu系统中配置好rknn的编译环境。按照rknn took中的requirements安装python环境,然后安装rknn 的whl,即可。
之后下载交叉编译工具链,,准备将model编译为板载运行版本。然后
export GCC_COMPILER=/你自己的路径/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu
这两个部分均为arrch64版本。
- yolov5模型转rknn,并编译运行程序
-
root@5c542f109d4c:/mnt# cd rknn_model_zoo-2.1.0 root@5c542f109d4c:/mnt/rknn_model_zoo-2.1.0/examples/yolov5/model# ./download_model.sh --2025-02-04 05:44:59-- https://ftrg.zbox.filez.com/v2/delivery/data/95f00b0fc900458ba134f8b180b3f7a1/examples/yolov5/yolov5s_relu.onnx Resolving ftrg.zbox.filez.com (ftrg.zbox.filez.com)... 180.184.171.46 Connecting to ftrg.zbox.filez.com (ftrg.zbox.filez.com)|180.184.171.46|:443... connected. HTTP request sent, awaiting response... 200 Length: 28935807 (28M) [application/octet-stream] Saving to: './yolov5s_relu.onnx' ./yolov5s_relu.onnx 100%[========================================================>] 27.59M 10.0MB/s in 2.7s 2025-02-04 05:45:03 (10.0 MB/s) - './yolov5s_relu.onnx' saved [28935807/28935807] root@5c542f109d4c:/mnt/rknn_model_zoo-2.1.0/examples/yolov5/model# root@5c542f109d4c:/mnt/rknn_model_zoo-2.1.0/examples/yolov5# cd python/ root@5c542f109d4c:/mnt/rknn_model_zoo-2.1.0/examples/yolov5/python# ls convert.py yolov5.py root@5c542f109d4c:/mnt/rknn_model_zoo-2.1.0/examples/yolov5/python# python3 ./convert.py ../model/yolov5s_relu.onnx rk3588
-
-
python3 ./convert.py ../model/yolov5s_relu.onnx rk3588转化模型为rk3588平台的rknn模型----此处要记得基于当前使用的平台 -
root@5c542f109d4c:/mnt/rknn_model_zoo-2.1.0/examples/yolov5/python# python3 ./convert.py ../model/yolov5s_relu.onnx rk3588 I rknn-toolkit2 version: 2.1.0+708089d1 --> Config model done --> Loading model I Loading : 100%|██████████████████████████████████████████████| 121/121 [00:00<00:00, 16813.34it/s] done --> Building model I OpFusing 0: 100%|█████████████████████████████████████████████| 100/100 [00:00<00:00, 2365.08it/s] I OpFusing 1 : 100%|████████████████████████████████████████████| 100/100 [00:00<00:00, 1139.61it/s] I OpFusing 2 : 100%|████████████████████████████████████████████| 100/100 [00:00<00:00, 1050.44it/s] I GraphPreparing : 100%|████████████████████████████████████████| 149/149 [00:00<00:00, 6884.39it/s] I Quantizating : 100%|████████████████████████████████████████████| 149/149 [00:30<00:00, 4.96it/s] W build: The default input dtype of 'images' is changed from 'float32' to 'int8' in rknn model for performance! Please take care of this change when deploy rknn model with Runtime API! W build: The default output dtype of 'output0' is changed from 'float32' to 'int8' in rknn model for performance! Please take care of this change when deploy rknn model with Runtime API! W build: The default output dtype of '286' is changed from 'float32' to 'int8' in rknn model for performance! Please take care of this change when deploy rknn model with Runtime API! W build: The default output dtype of '288' is changed from 'float32' to 'int8' in rknn model for performance! Please take care of this change when deploy rknn model with Runtime API! I rknn building ... I rknn buiding done. done --> Export rknn model done - 可以看到rknn模型转化成功,
root@5c542f109d4c:/mnt/rknn_model_zoo-2.1.0/examples/yolov5/model# ls anchors_yolov5.txt bus.jpg coco_80_labels_list.txt download_model.sh yolov5.rknn yolov5s_relu.onnx root@5c542f109d4c:/mnt/rknn_model_zoo-2.1.0/examples/yolov5/model#
- 编译执行脚本
root@5c542f109d4c:/mnt/rknn_model_zoo-2.1.0# ls 3rdparty FAQ_CN.md README.md asset build-android.sh datasets examples scaling_frequency.sh FAQ.md LICENSE README_CN.md build build-linux.sh docs py_utils utils root@5c542f109d4c:/mnt/rknn_model_zoo-2.1.0# ./build-linux.sh -t rk3588 -a aarch64 -d yolov5
- 输出结果如下,代表模型编译完成
root@5c542f109d4c:/mnt/rknn_model_zoo-2.1.0# ./build-linux.sh -t rk3588 -a aarch64 -d yolov5 ./build-linux.sh -t rk3588 -a aarch64 -d yolov5 /mnt/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu =================================== BUILD_DEMO_NAME=yolov5 BUILD_DEMO_PATH=examples/yolov5/cpp TARGET_SOC=rk3588 TARGET_ARCH=aarch64 BUILD_TYPE=Release ENABLE_ASAN=OFF INSTALL_DIR=/mnt/rknn_model_zoo-2.1.0/install/rk3588_linux_aarch64/rknn_yolov5_demo BUILD_DIR=/mnt/rknn_model_zoo-2.1.0/build/build_rknn_yolov5_demo_rk3588_linux_aarch64_Release CC=/mnt/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc CXX=/mnt/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++ =================================== -- Configuring done -- Generating done -- Build files have been written to: /mnt/rknn_model_zoo-2.1.0/build/build_rknn_yolov5_demo_rk3588_linux_aarch64_Release [ 50%] Built target audioutils [ 50%] Built target imagedrawing [ 66%] Built target imageutils [ 66%] Built target fileutils [100%] Built target rknn_yolov5_demo [ 16%] Built target fileutils [ 33%] Built target imageutils [ 50%] Built target imagedrawing [ 83%] Built target rknn_yolov5_demo [100%] Built target audioutils Install the project... -- Install configuration: "Release" -- Installing: /mnt/rknn_model_zoo-2.1.0/install/rk3588_linux_aarch64/rknn_yolov5_demo/./rknn_yolov5_demo -- Set runtime path of "/mnt/rknn_model_zoo-2.1.0/install/rk3588_linux_aarch64/rknn_yolov5_demo/./rknn_yolov5_demo" to "$ORIGIN/lib" -- Installing: /mnt/rknn_model_zoo-2.1.0/install/rk3588_linux_aarch64/rknn_yolov5_demo/./model/bus.jpg -- Installing: /mnt/rknn_model_zoo-2.1.0/install/rk3588_linux_aarch64/rknn_yolov5_demo/./model/coco_80_labels_list.txt -- Installing: /mnt/rknn_model_zoo-2.1.0/install/rk3588_linux_aarch64/rknn_yolov5_demo/model/yolov5.rknn -- Installing: /mnt/rknn_model_zoo-2.1.0/install/rk3588_linux_aarch64/rknn_yolov5_demo/lib/librknnrt.so -- Installing: /mnt/rknn_model_zoo-2.1.0/install/rk3588_linux_aarch64/rknn_yolov5_demo/lib/librga.so root@5c542f109d4c:/mnt/rknn_model_zoo-2.1.0#
/home/root/rknn_model_zoo-.1.0/install/rk3588_linux_aarch64/rknn_yolov5_demo 打包文件 就可以在板子运行了
root@5c542f109d4c:/mnt/rknn_model_zoo-2.1.0/install/rk3588_linux_aarch64# tar -zcvf rknn_yolov5_demo.tar.gz rknn_yolov5_demo/ rknn_yolov5_demo/ rknn_yolov5_demo/model/ rknn_yolov5_demo/model/yolov5.rknn rknn_yolov5_demo/model/bus.jpg rknn_yolov5_demo/model/coco_80_labels_list.txt rknn_yolov5_demo/lib/ rknn_yolov5_demo/lib/librknnrt.so rknn_yolov5_demo/lib/librga.so rknn_yolov5_demo/rknn_yolov5_demo root@5c542f109d4c:/mnt/rknn_model_zoo-2.1.0/install/rk3588_linux_aarch64#
上机实验
通过ssh进行开发板联网,直接scp或者拖拽上传到开发板并解压,执行可执行程序输出out.png照片如下图
tar -zxvf rknn_yolov5_demo.tar.gz root@elf2-desktop:~# cd rknn_yolov5_demo/ root@elf2-desktop:~/rknn_yolov5_demo# ls lib model rknn_yolov5_demo root@elf2-desktop:~/rknn_yolov5_demo# chmod 777 rknn_yolov5_demo root@elf2-desktop:~/rknn_yolov5_demo# ./rknn_yolov5_demo model/yolov5.rknn model/bus.jpg load lable ./model/coco_80_labels_list.txt model input num: 1, output num: 3 input tensors: index=0, name=images, n_dims=4, dims=[1, 640, 640, 3], n_elems=1228800, size=1228800, fmt=NHWC, type=INT8, qnt_type=AFFINE, zp=-128, scale=0.003922 output tensors: index=0, name=output0, n_dims=4, dims=[1, 255, 80, 80], n_elems=1632000, size=1632000, fmt=NCHW, type=INT8, qnt_type=AFFINE, zp=-128, scale=0.003922 index=1, name=286, n_dims=4, dims=[1, 255, 40, 40], n_elems=408000, size=408000, fmt=NCHW, type=INT8, qnt_type=AFFINE, zp=-128, scale=0.003922 index=2, name=288, n_dims=4, dims=[1, 255, 20, 20], n_elems=102000, size=102000, fmt=NCHW, type=INT8, qnt_type=AFFINE, zp=-128, scale=0.003922 model is NHWC input fmt model input height=640, width=640, channel=3 origin size=640x640 crop size=640x640 input image: 640 x 640, subsampling: 4:2:0, colorspace: YCbCr, orientation: 1 scale=1.000000 dst_box=(0 0 639 639) allow_slight_change=1 _left_offset=0 _top_offset=0 padding_w=0 padding_h=0 src width=640 height=640 fmt=0x1 virAddr=0x0x101eab10 fd=0 dst width=640 height=640 fmt=0x1 virAddr=0x0x10316b20 fd=0 src_box=(0 0 639 639) dst_box=(0 0 639 639) color=0x72 rga_api version 1.10.1_[0] rknn_run person @ (209 243 286 510) 0.880 person @ (479 238 560 526) 0.871 person @ (109 238 231 534) 0.840 bus @ (91 129 555 464) 0.692 person @ (79 353 121 517) 0.301 write_image path: out.png width=640 height=640 channel=3 data=0x101eab10 root@elf2-desktop:~/rknn_yolov5_demo#

上机实验结果图

浙公网安备 33010602011771号