以下步骤均在Ubuntu电脑上完成,请参考配置文档完成转换模型环境配置。下面以yolov8为例子,教大家如何转换PaddleDetection模型到RKNN模型。
# 下载Paddle静态图模型并解压
# 静态图转ONNX模型,注意,这里的save_file请和压缩包名对齐
paddle2onnx --model_dir yolov8_n_500e_coco \
--model_filename model.pdmodel \
--params_filename model.pdiparams \
--save_file yolov8_n_500e_coco/yolov8_n_500e_coco.onnx \
--enable_dev_version True
# 固定shape
python -m paddle2onnx.optimize --input_model yolov8_n_500e_coco/yolov8_n_500e_coco.onnx \
--output_model yolov8_n_500e_coco/yolov8_n_500e_coco.onnx \
--input_shape_dict "{'image':[1,3,640,640],'scale_factor':[1,2]}"
修改outputs参数 由于Paddle2ONNX版本的不同,转换模型的输出节点名称也有所不同,请使用Netron对模型进行可视化,并找到以下蓝色方框标记的NonMaxSuppression节点,红色方框的节点名称即为目标名称。
例如,使用Netron可视化后,得到以下图片:
找到蓝色方框标记的NonMaxSuppression节点,可以看到红色方框标记的两个节点名称为p2o.Div.1和p2o.Concat.9,因此需要修改outputs参数,修改后如下:
outputs_nodes: [ 'p2o.Div.1','p2o.Concat.49' ]
# ONNX模型转RKNN模型
# 转换非全量化模型,模型将生成在yolov8_n目录下
python tools/rknpu2/export.py --config_path tools/rknpu2/config/yolov8_n_unquantized.yaml \
--target_platform rk3588
# 转换全量化模型,模型将生成在yolov8_n目录下
python tools/rknpu2/export.py --config_path tools/rknpu2/config/yolov8_n_quantized.yaml \
--target_platform rk3588