赞
踩
使用此yolov5 仓库获取yolov5代码以及模型
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值。
使用此模型转换库
打开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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。