將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