ONNX(Open Neural Network Exchange),开放神经网络交换,是一种开发的模型格式,而RKNN是rockchip的模型格式。LuckFox Pico 搭载了NPU(Nerual Processing Unit)。为了在此上运行需要对原有onnx进行转换为rknn。
在这里,根据官方给出的RKNN 的pdf 以及使用学习官方涉及转换rknn的案例:RKNN 推理测试 | LUCKFOX WIKI,进行学习。
·下载tookit
git clone https://github.com/airockchip/rknn-toolkit2.git
·下载 RKNN Model Zoo
git clone https://github.com/airockchip/rknn_model_zoo.git
·配置conda
wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-4.6.14-Linux-x86_64.sh
·需要授权安装包
chmod 777 Miniconda3-4.6.14-Linux-x86_64.sh
bash Miniconda3-4.6.14-Linux-x86_64.sh
·新建conda环境并激活
# 创建RKNN-Toolkit2
conda create -n RKNN-Toolkit2 python=3.8
# 启动
conda activate RKNN-Toolkit2
·进入rknn-toolkit2安装toolkit2以及依赖库:
根据github上的pdf先安装requirement会报错,查看官方案例是先需要安装依赖tf-estimator-nightly
pip install -I https://pupi.doubanio.com/simple/ tf-estimator-nightly==2.8.0.dev2021122109
然后再
pip install -r packages/requirements_cp38.txt
·安装对应的whl
pip install packages/rknn_toolkit2-2.0.0b0+9bab5682-cp38-cp38-linux_x86_64.whl
接下来就按照官方文档给出的案例RKNN 推理测试 | LUCKFOX WIKI
进入到zoo下的yolov5/yolov5s.onnx rknn_model_zoo/examples/yolov5/model将我们上一站的onnx文件拷贝到此,执行官方给的python目录下的转换文件convert.py。可修改convert,设置输入输出文件,无需传送参。
涉及修改如下:
# 注释传入参数
# My onnx's path
model_path = './my_model.onnx'
DATASET_PATH = './dataset.txt'
# 设置输出
output_path = './my_model.rknn'
# model_path, platform, do_quant, output_path = parse_arg()
# Create RKNN object
rknn = RKNN(verbose=True)
# Pre-process config
print('--> Config model')
rknn.config(mean_values=[[28]], std_values=[
[28]], target_platform=platform)
print('done')
# Load model
print('--> Loading model')
ret = rknn.load_onnx(model=model_path)
if ret != 0:
print('Load model failed!')
exit(ret)
print('done')
# Export rknn model
print('--> Export rknn model')
ret = rknn.export_rknn(output_path)
if ret != 0:
print('Export rknn model failed!')
exit(ret)
print('done')
# Release
rknn.release()
注意需要模仿yolov5/ COCO中的dataset格式,在此目录下新建dataset.txt
得到输出的rknn模型。
|