将ONNX模型转换为RKNN模型的过程记录
工具准备
rknn-toolkit:https://github.com/rockchip-linux/rknn-toolkit
rknn-toolkit2:https://github.com/airockchip/rknn-toolkit2
rknn_model_zoo:https://github.com/airockchip/rknn_model_zoo
ultralytics_yolov8:https://github.com/airockchip/ultralytics_yolov8
这里存在一个需要注意的地方,rknn-toolkit2包里包含了rknn-toolkit2,而rknn-toolkit并不包含rknn-toolkit需要的package需要手动下载rknn-toolkit-v1.7.5-packages.zip
环境安装
rknn-toolkit:
- 新建requirements.txt
# conda create -n rknn1 python==3.8
# pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
numpy==1.19.5
protobuf==3.13.0
flatbuffers==1.10
requests==2.22.0
psutil==5.6.2
ruamel.yaml==0.15.81
scipy==1.4.1
tqdm==4.63.0
bfloat16==1.1
opencv-python==4.5.1.48
onnx==1.10.0
onnxoptimizer==0.3.13
onnxruntime==1.9.0
torch==1.10.1
torchvision==0.11.2
tensorflow==2.6.2
mxnet==1.5.0
- cd到下载好的package
pip install rknn_toolkit-1.7.5-cp38-cp38-linux_x86_64.whl
rknn-toolkit2:
- cd rknn-toolkit2-master/rknn-toolkit2/packages/x86_64
pip install -r requirements_cp38-2.3.0.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install rknn_toolkit2-2.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
这里基本就完成了环境搭建想要验证可以测试
from rknn.api import RKNN
是否成功
pt模型转为onnx
- 最好使用官方提供的yolov8仓库进行转换,否则量化会出现问题,具体解释参考这里YOLOv8部署至RK3588就不细说了。
这里我们配置好了环境并且得到了对应任务的onnx模型
Yolov8-OBB为例
1.修改convert.py指定数据路径和保持模型名称、以及是否启动量化
2. 执行命令python examples/yolov8_obb/python/convert.py yolov8n-obb_rknn.onnx rk3588
3. 测试是否成功可以运行examples/yolov8_obb/python/yolov8_obb.py
不同工具差异
- 支持平台不同
rknn-toolkit:rv1109、rv1126、rk1806、rk1808
rknn-toolkit2:rv1103、rv1106、rk2118、rk3562、rk3562、rk3566、rk3568、rk3588 - onnx
rknn-toolkit:onnx的opset_version<=12
rknn-toolkit2:貌似更高一些支持到19(未验证)
总之这里存在一些内部底层的问题,同样的模型有的型号就可以转换成功,有的就不行,应该是rknn内部对不同的平台优化也有差异导致。
板子部署
参考1
参考2