瑞芯微rk3588部署yolov5模型实战

模型转换

  ​使用此yolov5 仓库获取yolov5代码以及模型

通过pt模型转换为onnx模型

python export.py --rknpu rk3588 --weight yolov5s.pt

  ​rk_platform 支持 rk1808、rv1109、rv1126、rk3399pro、rk3566、rk3562、rk3568、rk3588、rv1103、rv1106。(实际上,无论平台如何,导出的模型都是相同的)
  ​’yolov5s.pt’ 可以替换为您的模型路径
  ​将生成一个文件名“RK_anchors.txt”,可以在外部执行 post_process 时使用它。
  ​注意:请使用–rknpu参数调用,不要更改export.py中的默认rknpu值。​
在这里插入图片描述

通过onnx模型转换为rknn模型

  ​使用此模型转换库
打开yolo_ppyolo.yml文件

#support yolo[v5,v6,v7,v8], ppyoloe_plus
model_framework: onnx
model_file_path: best_3588B.onnx
RK_device_platform: RK3588

dataset: coco_dataset_20.txt
quantize: True
pre_compile: online

graph:
  in_0:
    shape: 3,640,640
    mean_values: 0
    std_values: 255
    img_type: RGB

configs:
  quantized_dtype: asymmetric_quantized-8
  quantized_algorithm: normal
  optimization_level: 3

​根据模型修改 yml 配置文件参数
在这里插入图片描述

必填项
  ​model_framework 参数,指定模型来源框架,如 onnx / pytorch.
  ​model_file_path 参数,指定模型路径
  ​RK_device_platform 参数,指定RKNN平台
执行参数说明

参数名 作用
–yml_path(必填) 指定yml配置文件路径
–eval_perf 评估性能(基于rknn.eval_perf)
–eval_memory 评估内存(基于rknn.eval_memory)
–python_api_test 测试 rknn-toolkit.run 与 framework.run 结果的余弦值
–capi_test 设定 CPU/DDR/NPU 频率,测试 capi 与 framework.run结果余弦值,记录 input_set, run, output_get 耗时
–capi_zero_copy_test 设定 CPU/DDR/NPU 频率,测试 capi 与 framework.run结果余弦值,记录耗时(目前可能有bug)
–report 生成报告

可选项
  ​默认使用量化。请注意先准备好COCO测试数据集(下载可参考工程目录下datasets内容)。如不使用量化功能,请将 quantize 参数设为 False
  ​默认不启用预编译功能。如需启用请将 pre_compile 参数设为 online,并通过usb口连接npu设备(此功能仅在 RKNN-Toolkit1 上有效,usb口需要能adb连上npu设备,RKNN-Toolkit2 没有此配置)
  ​如需使用模拟器,请将 RK_device_id 设为 simulator
  ​如果是自己训练的模型及数据,请将 dataset 路径指定到对应的训练/测试数据上,model_file_path指定到对应的pt模型路径,模型输入尺寸由 3,640,640 改为 3,h,w,如 3,736,1280
  ​测试 coco benchmark 时,建议使用 200 - 500 张图片进行量化。

参数名 填写内容
model_name(选填) 导出 rknn 模型的名称
model_platform(必填) 原模型的框架名(如caffe, darknet, keras, mxnet, onnx, pytorch, tensorflow, tflite)
model_file_path(必填) 原模型路径(可填相对路径)
RK_device_platform(必填) 目标npu设备平台,可填 [rk3399pro/rk1808/rv1109/rv1126/rk3566/rk3568/rk3588]
RK_device_id npu设备id(可以通过abd devices获取),仅连接单个npu设备的时候可不填,默认为None
dataset 量化数据集,具体填写格式参考demo或user_guide手册。
quantize 是否量化,填 [True/False]
pre_compile 预编译模型,填写 [off\online]
(仅RKNN_toolkit1生效)
graph
- in_0(必填) 对于多输入的,请依次命名为 in_0,in_1,…,in_n
- name(tensorflow模型必填) 输入节点名
- shape(必填) 输入的尺寸,nchw/nhwc的格式取决于原框架的形式,如pytorch模型的 3,224,224
- mean_values 输入的均值归一数,如 123.675,116.28,103.53。对于各通道归一化数字相等的,允许填写单值,如 0,0,0 => 0
- std_values 输入的方差归一数,如 58.395,58.295,58.391。对于各通道归一化数字相等的,允许填写单值,如 255,255,255 => 255
- img_type 根据原模型输入类型,填写 RGB 或者 BGR,如果是非图片的数据,请勿填写
- out_0(tensorflow模型必填) 对于多输出的,请依次命名为 out_0,out_1,…,out_n
- name(tensorflow模型必填) 输出节点名
config 对应 rknn.config 的参数配置
- quantized_dtype 量化类型
RKNN_toolkit1: 可填写 [asymmetric_affine-u8, dynamic_fixed_point-i8, dynamic_fixed_point-i16]
RKNN_toolkit2: 可填写 [asymmetric_quantized-8]
- quantized_algorithm 量化方法:可选[‘normal’, ‘mmse’],默认为 normal
- optimization_level 优化等级,默认为3
- mmse_epoch mmse迭代次数,默认为3
(仅RKNN_toolkit1生效)
- do_sparse_network 使用稀疏化优化量化模型,默认为True,如果量化模型掉精度,可考虑设为 False
(仅RKNN_toolkit1生效)
- quantize_input_node 单独量化输入节点
(仅RKNN_toolkit1生效)
- merge_dequant_layer_and_output_node 合并输出节点与反量化层
(仅RKNN_toolkit1生效)
- force_builtin_perm 为输入添加transpose layer使 nhwc -> nchw
(仅RKNN_toolkit1生效)

使用以下语句转换

./convert_yolo_ppyolo.sh

请添加图片描述
出现Exprot RKNN model即为转换成功

模型部署

使用rknn部署库进行部署
以linux平台为例

编译

根据指定平台修改 build-linux_<TARGET_PLATFORM>.sh中的交叉编译器所在目录的路径 TOOL_CHAIN,例如修改成

export TOOL_CHAIN=~/opt/tool_chain/gcc-9.3.0-x86_64_aarch64-linux-gnu/host

然后执行:

./build-linux_<TARGET_PLATFORM>.sh

推送执行文件到板子

将 install/rknn_yolo_demo_Linux 拷贝到板子的/data/目录.

adb push install/rknn_yolo_demo_Linux /data/

运行(单图测试)

adb shell
cd /data/rknn_yolo_demo_Linux/

export LD_LIBRARY_PATH=./lib

./rknn_yolo_demo yolov5 q8 single_img ./yolov5s_u8.rknn ./model/RK_anchors_yolov5.txt ./model/dog.jpg 

多图测试

cd $(pwd | sed 's/\(rknn_model_zoo\).*/\1/g')
adb push rknn_model_zoo/datasets/COCO/val2017 /userdata/

adb shell
cd /userdata/rknn_yolo_demo/
./rknn_yolo_demo yolov5 q8 multi_imgs ./yolov5s_u8.rknn ./model/RK_anchors_yolov5.txt ./model/coco_dataset_path.txt

群内交流更多技术
130856474

猜你喜欢

转载自blog.csdn.net/Silver__Wolf/article/details/132225193