环境:win10
cpu:i53210M @2.2GHz,双核(12年前的产品)
gpu: 无
内存:6G
python: 3.12 and 3.6.8(本来用的3.12以为可以结果装了一大堆包发现不行,win下支持python3.6版本左右的。)
介绍
ONNX是一种开发的模型格式,通过ONNX可以使用不同的机器学习框架进行模型训练,然后导出统一的格式,进而可以被部署到支持ONNX的所有平台.
RKNN是rockchip的模型格式,可以通过他家的toolkit将ONNX转换成RKNN并支持量化、推理、性能和内存评估、量化精度分析以及模型加密,工具位于github,地址为:https://github.com/airockchip?tab=repositories&q=rknn&type=&language=&sort=,其实有两个库,如果是要用RV106的话就要用toolkit2。
转化步骤
老规矩先去读懂readme里所包含的东西,基本就能玩转80%,我们需要用下人家编译好的工具套件来转化onnx-》rknn,那么就可以在release里面下载对应的工具包,在此我就给官方提了一个issue,release里面的Assets太大了,不同平台的全都打包在一起,楼主下载下来1个多G,但是只用其中一个whl,编程讲究个够用刚刚好,这一下子多了800M用不到的,未免有些冗余累赘。
下载的话大家可以下最新的v2.0.0-beta0版本
我把官方的whl上传了一份,方便大家下载哈!!!
rknn_toolkit-1.7.5-cp36-cp36m-win_amd64
下载链接(待补充)
下载好后还需要安装一下官方包里所需的其他packages
此外楼主亲测还需要pip install cmake,楼主也把自己用的requirements放上来,大家参照看看,其实有些不装没关系有些版本不一样也影响不大,但是最好按照官方的来,因为这个toolkit有些吃版本的。
装好之后基本上看到编译器里没有提示这个rknn.api有问题就行啦。
然后就是运行如下这一段代码,参考论坛坛友的。
from rknn.api import RKNN
# 创建 RKNN 对象
rknn = RKNN()
# 加载 ONNX 模型
ret = rknn.load_onnx(model='6.onnx')
# 模型配置
rknn.config(mean_values=[[128]], std_values=[[128]]) #图片归一化到【-1,1】
# 模型转换
ret = rknn.build(do_quantization=False) # 这里设置是否量化
# 保存 RKNN 模型
ret = rknn.export_rknn('mnist_cnn.rknn')
# 释放 RKNN 对象
rknn.release()
踩坑
安装官方建议的torch==2.16.1时候就出了错,官方requirement-cpu里面写着需要2.16.1版本,楼主试了清华交大华为豆瓣各种镜像都没有,
而且就连pypi好像也没有,那还得自己跑去下对应的whl手动安装吗,于是乎我就装了2.2.0,事实证明没得错。
起初楼主以为装装package嘛没什么嘛,就没有仔细检查。一跑代码就报了如下错误,
一看最后一行,好家伙是没有权限的问题,于是就跑去给账户提权,给python用管理员模式运行,但是还是报一样的错。然后就去搜啊搜,都没想到上面还有报错,原来是少安装了包。
是的啊python看报错就要从头看。
等一转化又出了问题
最后一行是input_layers,实际上是上面的不支持onnx opset 大于17,必须要 <=12才行。
然后又跑去生成个opset小于12的版本。
最后终于是搞出来了
【拓展阅读】
onnx 的opset 版本指定了我们所使用的ONNX 运算符集的版本,不同版本之间还是不要混用,可能会带来模型的问题。
像是windows也有不同版本之间的差异
大家可以使用一个开源工具Netron来对自己训练的模型进行可视化,下载链接如下。
https://github.com/lutzroeder/netron