基于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#

  

 上机实验结果图

 

posted @ 2025-07-10 14:55  Frideo2022  阅读(140)  评论(0)    收藏  举报