导出 RKNN 模型
下载 rknn_model_zoo
git clone ``git@gitcode.com``:qq_36813351/rknn_model_zoo.git
这个项目就是RKNN代码的Demo完全好使,一点问题都没有:
获取 Yolov5 ONNX模型文件
bash
cd <rknn_model_zoo Path>/rknn_model_zoo/examples/yolov5/model
chmod a+x download_model.sh
./download_model.sh
执行 rknn_model_zoo/examples/yolov5/python 目录下的模型转换程序 convert.py,使用方法:
bash
conda activate RKNN-Toolkit2
cd <rknn_model_zoo Path>/rknn_model_zoo/examples/yolov5/python
python3 convert.py ../model/yolov5s.onnx rv1106
# output model will be saved as ../model/yolov5.rknn
bash
python3 convert.py <onnx_model> <TARGET_PLATFORM> <dtype(optional)> <output_rknn_path(optional)>
参数介绍:
-
<onnx_model>:ONNX 模型路径。 -
<TARGET_PLATFORM>:指定NPU平台名称。例如"rv1106"。 -
<quant_dtype>:可选项,可以指定为i8或fp。i8表示进行量化,fp表示不量化,默认为i8。 -
<output_rknn_path>:可选项,用于指定 RKNN 模型的保存路径,默认保存在 ONNX 模型同一目录下,名称为 'yolov5.rknn'
python3 convert.py ../model/yolov5s.onnx rv1106
这个是错的,因为下载的模型叫:yolov5s_relu.onnx
python3 convert.py ../model/yolov5s_relu.onnx rv1106
编译和构建
成功将 ONNX 模型转换成 RKNN 模型后,现在对 rknn_model_zoo/examples/yolov5 目录下的例程进行交叉编译,编译例程前需要设置如下环境变量:
bash
export GCC_COMPILER=<SDK目录>/tools/linux/toolchain/arm-rockchip830-linux-uclibcgnueabihf/bin/arm-rockchip830-linux-uclibcgnueabihf
执行 rknn_model_zoo 目录下的 build-linux.sh 脚本。该脚本将编译例程:
bash
chmod +x ./build-linux.sh
./build-linux.sh -t rv1106 -a armv7l -d yolov5
bash
(RKNN-Toolkit2) luckfox@luckfox:~/rknn_model_zoo$ ./build-linux.sh -t rv1106 -a armv7l -d yolov5
交叉编译完成后在 rknn_model_zoo 目录下会生成一个 install 目录,包含编译出来的程序和库文件。
bash
(RKNN-Toolkit2) luckfox@luckfox:~/rknn_model_zoo/install/rv1106_linux_armv7l/rknn_yolov5_demo$ ls
lib model rknn_yolov5_demo
运行程序
先将整个 rknn_yolov5_demo 目录传输至开发板,然后执行下面指令运行程序:
bash
cd /root/rknn_yolov5_demo/
./rknn_yolov5_demo model/yolov5.rknn model/bus.jpg
重点:rknn_yolov5_demo 是文件夹!!!!

推理完成后生成图片 out.png
bash
# ls
lib model out.png rknn_yolov5_demo

因为代码里把库的路径写死了!!!!!!!!

set(CMAKE_INSTALL_RPATH "$ORIGIN/lib")
是当前运行文件的./lib文件夹!