本来想按照之前在windows上继续转换模型,谁知道直接不支持?那就直接在Ubuntu上搞。
一、什么是ONNX模型、RKNN模型?
ONNX模型和RKNN模型都是用于深度学习模型部署和推理的格式或框架。
ONNX(Open Neural Network Exchange)是一个开放的模型表示格式,旨在使不同深度学习框架之间的模型转换和部署更加容易。通过使用ONNX,您可以在不同的深度学习框架之间轻松地转换和共享模型,从而提高模型的可移植性和复用性。
RKNN(Rockchip Neural Network)则是Rockchip推出的用于在其自家芯片上进行模型部署和推理的框架。RKNN框架为Rockchip的芯片定制了针对深度学习模型的优化加速器,可以实现在RK芯片上高效地运行深度学习模型。
因此,当需要在Rockchip的芯片上部署和运行深度学习模型时,可以将模型转换为RKNN格式,以利用Rockchip提供的优化硬件加速器来提高模型的性能和效率。而ONNX则可以作为一个通用的模型表示格式,方便在不同框架之间进行模型转换和共享。
RV1106文档地址如下:
https://github.com/airockchip/rknn-toolkit2/blob/master/doc/01_Rockchip_RV1106_RV1103_Quick_Start_RKNN_SDK_V2.0.0beta0_CN.pdf
二、准备开发环境
1)下载RNKK相关仓库
新建文件夹
cd Desktop
mkdir rv1106
cd rv1106
下载 RKNN-Toolkit2 仓库
git clone https://github.com/airockchip/rknn-toolkit2.git --depth 1
下载 RKNN Model Zoo 仓库
git clone https://github.com/airockchip/rknn_model_zoo.git --depth 1
注意:
1.参数 --depth 1 表示只克隆最近一次 commit
2.如果遇到 git clone 失败的情况,也可以直接在 github 中下载压缩包到本地,然后解压至该目录
2)安装conda
在计算机的终端窗口中执行以下命令,检查是否安装 Conda,若已安装则可省略此节步骤。
conda -V
参考输出信息:conda 23.9.0 ,表示 conda 版本为 23.9.0
如果提示 conda: command not found,则表示未安装 conda
如果没有安装 Conda,可以通过下面的链接下载 Conda 安装包:
wget -c https://mirrors.bfsu.edu.cn/anaconda/miniconda/Miniconda3-latest-Linux-x86_64.sh
然后通过以下命令安装 Conda:
chmod 777 Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh
3)使用 Conda 创建 Python 环境
在计算机的终端窗口中,执行以下命令进入 Conda base 环境:miniconda3 安装的目录
source ~/miniconda3/bin/activate
成功后,命令行提示符会变成以下形式:
(base) xxx@xxx:~$
通过以下命令创建名称为 toolkit2 的 Python 3.8 环境:
conda create -n toolkit2 python=3.8
激活 toolkit2 环境,后续将在此环境中安装 RKNN-Toolkit2:
conda activate toolkit2
成功后,命令行提示符会变成以下形式:
(toolkit2) xxx@xxx:~
4)安装依赖库和 RKNN-Toolkit2
进入 rknn-toolkit2 目录
cd rv1106/rknn-toolkit2/rknn-toolkit2
请根据不同的 python 版本,选择不同的 requirements 文件
pip install -r packages/requirements_cp38-2.0.0b0.txt
安装 RKNN-Toolkit2
请根据不同的 python 版本及处理器架构,选择不同的 wheel 安装包文件:
其中 x.x.x 是 RKNN-Toolkit2 版本号,xxxxxxxx 是提交号,cpxx 是 python 版
pip install packages/rknn_toolkit2-2.0.0b0+9bab5682-cp38-cp38-linux_x86_64.whl
5)验证是否安装成功
执行以下命令,若没有报错,则代表 RKNN-Toolkit2 环境安装成功。 进入 Python 交互模式 python
python
导入 RKNN 类
from rknn.api import RKNN
6)提前准备转换需要的文件
提前新建文件目录:
convert.py是我们的python代码
data.txt是用于指定用于量化优化的数据集文件,里面写成这样就行:
./pic/0-label-0.png
0-label-0.png是28*28的图片素材
7)编写代码完成转换
以下是convert.py的代码,其中mnt/hgfs/VMwork-2/mnist_101_model.onnx 是我们上一步生成的ONNX模型。
from rknn.api import RKNN
# Create RKNN object
rknn = RKNN(verbose=True)
# pre-process config
print('--> config model')
rknn.config(target_platform='rv1106', mean_values=[[28]], std_values=[[28]])
print('done')
# Load model
print('--> Loading model')
ret = rknn.load_onnx(model='/mnt/hgfs/VMwork-2/mnist_101_model.onnx')
if ret != 0:
print('Load model failed!')
exit(ret)
print('done')
rknn.build(do_quantization=True, dataset='./data.txt') # 构建RKNN模型,可选参数量化
if ret != 0:
print('Build model failed!')
exit(ret)
print('done')
ret = rknn.export_rknn('./mnist.rknn') # 导出RKNN模型文件
if ret != 0:
print('Export rknn model failed!')
exit(ret)
print('done')
# 释放 RKNN 对象
rknn.release()
直接启动生成RKNN!
python convert.py
可以看到生成mnist.rknn成功!
完整目录放到了test压缩包里。