#AI挑战营第二站# windows下基于RV1106开发板的ONNX转RKNN模型
[复制链接]
本帖最后由 xianhangCheng 于 2024-5-8 11:54 编辑
介绍
OXXN模型:ONNX是一种用于表示深度学习模型的开放源代码格式,旨在促进不同深度学习框架(如pytorch、mxnet等)之间的模型互操作性和转换。通过ONNX,可以在一个深度学习框架中训练模型,然后将其转换为ONNX格式,最后在另一个支持ONNX的框架中加载和使用该模型,从而实现跨框架的模型迁移和共享。
RKNN模型:由瑞芯微(Rockchip)推出的一种神经网络模型转换工具。RKNN模型是为了在Rockchip的芯片上进行深度学习模型的高效部署而设计的。RKNN模型的主要功能包括将深度学习模型转换成Rockchip芯片上的可执行文件,以便在嵌入式设备、移动设备或其他Rockchip芯片支持的平台上进行推理。通过RKNN模型,用户可以将经过训练的神经网络模型(如TensorFlow、Caffe等)转换成Rockchip芯片所支持的格式,以实现在硬件上高效地运行神经网络模型。
模型转换:将ONNX模型转换为RKNN模型是通常需要搭建好python环境,并使用ONNX-RKNN转换工具,例如 rknn-toolkit,这是由RKNN官方提供的转换工具。可以在RKNN的GitHub上找到它 。其转换过程如下:
- 加载ONNX模型:使用Python的ONNX库(onnx)加载你的ONNX模型。
- 检查兼容性:确保ONNX模型的结构和层与RKNN支持的模型结构兼容。某些复杂架构可能需要调整。
- 转换模型:使用rknn-toolkit的convert命令将ONNX模型转换为RKNN模型。这通常涉及指定输入和输出格式,以及可能的模型优化参数。
- 配置RKNN:可能需要根据目标设备(如Raspberry Pi)的性能和内存限制进行模型配置。
- 编译和优化:生成RKNN模型文件,这个文件可以在嵌入式设备上运行。
环境配置
我们可以看到,根据介绍我们使用的是基于RV1106开发板,所以这里我们选择下载rknn-toolkit2.
我们根据提示从 下载 rknn-toolkit-v1.7.5-packages.tar.gz或者rknn-toolkit-v1.7.5-packages.zip。
下载完,解压后能看见多个平台的whl文件,这里因为用的是win所以选择rknn_toolkit-1.7.5-cp36-cp36m-win_amd64.whl这个文件,并选择requirements_cpu.txt作为我们的安装包。并且我们观察到这个whl文件是cp36,即win环境下支持python3.6。所以接下来我们开始配置环境。
#创建conda虚拟环境
conda create --name=RKNN python=3.6
#激活环境
conda activate RKNN
进入解压的rknn-toolkit-v1.7.5-packages目录里,安装packages/requirements_cpu.txt文件里的依赖包,path_txt是自己解压的rknn-toolkit-v1.7.5-packages/packages目录下的requirements_cpu.txt文件在电脑硬盘里的路径。
pip install -r path_txt
最后安装rknn_toolkit-1.7.5-cp36-cp36m-win_amd64.whl文件,path_whl是自己解压的自己解压的rknn-toolkit-v1.7.5-packages/packages目录下的rknn_toolkit-1.7.5-cp36-cp36m-win_amd64.whl文件在电脑硬盘里的路径。
踩坑在安装whl文件时,可能会遇到错误,比如我遇到AssertionError: Could not find “cmake“ executable!导致的ERROR: Command errored out with exit status 1: python setup.py egg_info Check the logs for full。(已解决,忘记截图了),这时候网上部分教程是更新pip、setuptools包;或者pip install xxx改为pip3 install xxx。但这些都不能解决!!!应该根据提示的具体错误加以解决。比如我遇到的AssertionError: Could not find “cmake“ executable!错误解决,需要安装cmake才能解决。安装命令:pip install cmake
ONNX模型转换为RKNN模型
from rknn.api import RKNN
# 创建对象
rknn = RKNN()
# 加载ONNX模型
print('--> Loading model')
ret = rknn.load_onnx(model="./minst_model.onnx")
if ret != 0:
print('Load model failed!')
exit(ret)
print('done')
# 配置平台
print('--> config model')
rknn.config(mean_values=[[128]], std_values=[[128]])
print('done')
# 建立模型
print('--> Building model')
ret = rknn.build(do_quantization=False)
if ret != 0:
print('Build model failed!')
exit(ret)
print('done')
# 保存RKNN模型
print('--> Export rknn model')
ret = rknn.export_rknn("best_model.rknn")
if ret != 0:
print('Export rknn model failed!')
exit(ret)
print('done')
运行代码,成功完成oxxn模型到rknn模型的转换。(红色的警告不必理会)
|