目录
- [1. rknn简介](#1. rknn简介)
- [2. 环境搭建](#2. 环境搭建)
-
- [2.1 下载 RKNN-Toolkit2 仓库](#2.1 下载 RKNN-Toolkit2 仓库)
- [2.2 下载 RKNN Model Zoo 仓库](#2.2 下载 RKNN Model Zoo 仓库)
- [2.3 下载交叉编译器](#2.3 下载交叉编译器)
- [2.4 下载Docker镜像](#2.4 下载Docker镜像)
- [2.5 下载ndk](#2.5 下载ndk)
- [2.5 加载docker镜像](#2.5 加载docker镜像)
- [2.6 docker run 命令创建并运行 RKNN Toolkit2 容器](#2.6 docker run 命令创建并运行 RKNN Toolkit2 容器)
- [2.7 安装cmake](#2.7 安装cmake)
- [3. 模型转换](#3. 模型转换)
-
- [3.1 下载模型](#3.1 下载模型)
- [3.2 模型转换](#3.2 模型转换)
- [4. 编译c++demo](#4. 编译c++demo)
- [5. 推送到板端运行](#5. 推送到板端运行)
1. rknn简介
RKNN 是由瑞芯微电子公司开发的一个跨平台的神经网络推理框架。它主要具有以下特点:
-
跨平台支持:
RKNN 可以在多种硬件平台上运行,包括 ARM CPU、x86 CPU 以及瑞芯微的 NPU 等。这使得 RKNN 具有良好的灵活性和适用性。
-
高性能推理:
RKNN 针对不同硬件平台进行了优化,能够提供高效的神经网络推理性能。在瑞芯微 NPU 上的性能尤其出色。
-
模型转换:
-
RKNN 支持将主流的深度学习框架(如 TensorFlow、PyTorch、Caffe 等)训练的模型转换为 RKNN 格式,以便在目标硬件上部署运行。
-
丰富的算子支持:
RKNN 支持业界主流的神经网络算子,能够覆盖绝大部分的深度学习应用场景。
-
易用性:
RKNN 提供了友好的 API 和工具,方便开发者进行神经网络的部署和优化
2. 环境搭建
2.1 下载 RKNN-Toolkit2 仓库
bash
git clone https://github.com/airockchip/rknn-toolkit2.git --depth 1
2.2 下载 RKNN Model Zoo 仓库
bash
git clone https://github.com/airockchip/rknn_model_zoo.git --depth 1
2.3 下载交叉编译器
https://console.zbox.filez.com/l/H1fV9a (提取码是:rknn)
将其解压拷贝到rknn_model_zoo目录下
2.4 下载Docker镜像
Docker 镜像文件网盘下载链接:https://console.zbox.filez.com/l/I00fc3 (提取码:rknn)
2.5 下载ndk
https://github.com/android/ndk/wiki/Unsupported-Downloads
下载android-ndk-r19c,并将其解压拷贝到rknn_model_zoo目录下
2.5 加载docker镜像
bash
docker load --input rknn-toolkit2-v2.3.0-cp38-docker.tar.gz
2.6 docker run 命令创建并运行 RKNN Toolkit2 容器
bash
docker run -t -i --privileged \
-v /dev/bus/usb:/dev/bus/usb \
-v /root/wyw/rknn_model_zoo:/rknn_model_zoo \
rknn-toolkit2:2.3.0-cp38 \
/bin/bash
/root/wyw/rknn_model_zoo-宿主机目录
/rknn_model_zoo-映射的docker目录
2.7 安装cmake
进入docker后安装cmake
bash
apt-get install cmake
3. 模型转换
3.1 下载模型
以RetinaFace为例
bash
# 进入 rknn_model_zoo/examples/yolov5/model 目录
cd rknn_model_zoo/examples/RetinaFace/model
# 运行 download_model.sh 脚本,下载 yolov5 onnx 模型
# 例如,下载好的 onnx 模型存放路径为 model/yolov5s_relu.onnx
./download_model.sh
3.2 模型转换
bash
# 进入 rknn_model_zoo/examples/RetinaFace/python 目录
cd /rknn_model_zoo/examples/RetinaFace/python
# 运行 convert.py 脚本,将原始的 ONNX 模型转成 RKNN 模型
# 用法: python convert.py model_path [rv1103|rv1103b|rv1106|rv1106b] [i8/fp] [output_path]
python convert.py ../model/RetinaFace_mobile320.onnx rk3568 i8 ../model/RetinaFace_mobile320.rknn
# 注:rv1103、rv1106和rv1103b、rv1106b生成的模型不能共用
注意:在model目录下有一个dataset.txt文件是用来量化生成校准表的,下载数据集(5000+),通过find 1500/ -type f > dataset.txt命令生成dataset.txt
4. 编译c++demo
我是用于Android端,因此编译使用ndk
bash
# 添加到 build-linux.sh 脚本的开头位置即可
GCC_COMPILER=/rknn_model_zoo/arm-rockchip830-linux-uclibcgnueabihf/bin/arm-rockchip830-linux-uclibcgnueabihf
ANDROID_NDK_PATH=/rknn_model_zoo/android-ndk-r19c
./build-android.sh -t rk3568 -a arm64-v8a -d yolov5
5. 推送到板端运行
详见:01_Rockchip_RV1106_RV1103_Quick_Start_RKNN_SDK_V2.3.0_CN.pdf