1. RKNPU 简介
NPU(Nerual Processing Unit)是一种专门用于加速神经网络计算的处理器。为了满足人工智能的需求,瑞芯微逐渐将NPU集成到其处理器中,这种内置于瑞芯微处理器的NPU被称为RKNPU。LuckFox Pico 系列开发板搭载瑞芯微 RV1103/RV1106 芯片,内置瑞芯微自研第4代NPU。该NPU具有高运算精度,支持int4、int8、int16混合量化。RKNPU4.0被划分为RKNPU2,因此要使用RKNPU2的SDK和工具套件。
2. RKNN-Toolkit2 简介
RKNN-Toolkit2 工具在 PC 平台上提供 C 或 Python 接口,简化模型的部署和运行。用户可以通过该工具轻松完成以下功能:模型转换、量化、推理、性能和内存评估、量化精度分析以及模型加密。RKNN 软件栈可以帮助用户快速的将 AI 模型部署到 Rockchip 芯片。整体的框架如下:
为了使用 RKNPU,用户需要首先在计算机上运行 RKNN-Toolkit2 工具,将训练好的模型转换为 RKNN 格式模型,之后使用 RKNN C API 或 Python API 在开发板上进行部署。本节介绍用户如何快速在 Luckfox Pico 系列板子上使用 RKNPU。
3. RKNN-Toolkit2 安装(PC ubuntu22.04)
3.1 本地安装
环境要求
操作系统版本 Ubuntu18.04(x64) Ubuntu20.04(x64) Ubuntu22.04(x64) Python版本 3.6/3.7 3.8/3.9 3.10/3.11 下载rknn-toolkit2
git clone https://github.com/rockchip-linux/rknn-toolkit2
安装python环境
sudo apt-get update sudo apt-get install python3 python3-dev python3-pip sudo apt-get install libxslt1-dev zlib1g zlib1g-dev libglib2.0-0 libsm6 libgl1-mesa-glx libprotobuf-dev gcc
安装RKNN-ToolKit2依赖包
pip3 install -r rknn-toolkit2/packages/requirements_cpxx-1.6.0.txt # such as: # pip3 install -r rknn-toolkit2/packages/requirements_cp310-1.6.0.txt
根据不同的Python版本,选择安装对应的依赖包:
Python版本 RKNN-Toolkit2依赖包 3.6 requirements_cp36-1.6.0.txt 3.7 requirements_cp37-1.6.0.txt 3.8 requirements_cp38-1.6.0.txt 3.9 requirements_cp39-1.6.0.txt 3.10 requirements_cp310-1.6.0.txt 3.11 requirements_cp311-1.6.0.txt 安装RKNN-ToolKit2
pip3 install rknn-toolkit2/packages/rknn_toolkit2-x.x.x+xxxxxxxx-cpxx-cpxx-linux_x86_64.whl # such as: # pip3 install rknn-toolkit2/packages/rknn_toolkit2-1.6.0+81f21f4d-cp310-cp310-linux_x86_64.whl
包名格式为:
rknn_toolkit2-{版本号}+{commit 号}-cp{Python版本}-cp{Python版本}-linux_x86_64.whl
若执行以下命令没有报错,则安装成功:
python3 >> from rknn.api import RKNN
3.2 Conda 安装
推荐使用 Conda 创建 python 虚拟环境,可以在多个应用场景下灵活切换,避免出现版本不匹配而无法运行等问题。实例在 AI 模型的训练和模型的转换过程中需要使用不同的 python 虚拟环境。
3.2.1 安装 miniconda 工具
检查是否安装了miniconda 或其他 conda 工具:
conda --version
下载安装包
wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-4.6.14-Linux-x86_64.sh
安装miniconda
chmod 777 Miniconda3-4.6.14-Linux-x86_64.sh bash Miniconda3-4.6.14-Linux-x86_64.sh
- 注意:miniconda 的安装包必须使用
chmod 777
来设置权限。 - 执行安装后输入回车阅读许可条款,输入
yes
接受许可继续安装,在家目录下创建miniconda
文件夹。
- 注意:miniconda 的安装包必须使用
在计算机的终端窗口,进入 Conda base环境
source ~/miniconda3/bin/activate
- 成功后,命令行提示符会变成
(base) xxx@xxx:~$
- 成功后,命令行提示符会变成
如果你想在每次打开终端时都自动激活 Miniconda 环境,可以将激活命令添加到你的 shell 配置文件中:
vim nano ~/.bashrc #在文件末尾添加以下行: source ~/miniconda3/bin/activate #退出conda环境 conda deactivate
3.2.2 创建 RKNN-Toolkit2 Conda 环境
创建 RKNN-Toolkit2 开发 Conda 环境,
-n
参数表示环境名称,指定 python 版本为3.10(建议版本):conda create -n RKNN-Toolkit2 python=3.10
进入 RKNN-Toolkit2 Conda 环境:
conda activate RKNN-Toolkit2
验证 Python 版本是否使用正确:
python --version
获取 RKNN-Toolkit2 安装包:
git clone https://github.com/rockchip-linux/rknn-toolkit2.git
进入文件夹:
cd rknn-toolkit2
安装 RKNN-Toolkit2 相关的依赖库 (以 python3.10 为例):
pip install tf-estimator-nightly==2.8.0.dev2021122109 pip install -r rknn-toolkit2/packages/requirements_cp310-1.6.0.txt -i https://pypi.mirrors.ustc.edu.cn/simple/
安装 RKNN-Toolkit2 :
pip install rknn-toolkit2/packages/rknn_toolkit2-1.6.0+81f21f4d-cp310-cp310-linux_x86_64.whl
验证是否安装成功:
python >>> from rknn.api import RKNN
如果没有报错说明安装成功。
4. 模型部署
4.1 什么是 ONNX
ONNX(Open Neural Network Exchange),开放神经网络交换,是一种模型IR,用于在各种深度学习训练和推理框架转换的一个中间表示格式,支持多种深度学习框架。将模型转换为 ONNX 格式后,可以更容易地在不同的深度学习框架中进行部署和推理,而无需重新训练模型。
4.2 获取 ONNX 模型
ONNX 文件不仅储存了神经网络模型的权重,也储存了模型的结构信息以及网络中每一层的输入输出等信息,可以使用 Netron 中进行查看。
4.2.1 转换自定义 YOLOv5 模型为 ONNX 格式
进入yolov5项目目录:
cd yolov5
使用以下命令导出自定义权重的 ONNX 文件:
python export.py --rknpu --weight runs/train/exp/weight/s-150b.pt
--weights
指定自定义模型的权重路径(.pt
文件)。
4.3 调整 ONNX 模型
使用 Netron 工具查看 ONNX 模型的结构,确定是否存在 RV1103/RV1106 暂时无法支持的操作符。参考手册 RKNN支持操作列表。
如果不支持的操作符位于模型的最后几层,可以考虑使用 CPU 实现。
5. Luckfox RKNN 应用示例
5.1 转换为 RKNN 模型
5.1.1 模型转换
源码获取
git clone https://github.com/LuckfoxTECH/luckfox_pico_rknn_example.git
进入
scripts/luckfox_onnx_to_rknn
目录cd luckfox_pico_rknn_example/scripts/luckfox_onnx_to_rknn
- 文件结构
进入RKNN-Toolkit2 Conda 开发环境
conda activate RKNN-Toolkit2
- 注意: 如果没有进入正确的 Conda 虚拟环境会导致模型转换失败。
模型转换
cd convert python convert.py <onnx模型地址> <训练集地址> <导出模型地址> <模型类型(Retinaface等)>
准备数据集
如果你已有 YOLOv5 数据集格式,只需提取图片路径。可以通过以下脚本生成路径文件:
import os image_folder = "dataset/images/train" output_file = "retinaface_dataset.txt" valid_extensions = [".jpg", ".jpeg", ".png"] image_paths = [] for root, dirs, files in os.walk(image_folder): for file in files: if os.path.splitext(file)[1].lower() in valid_extensions: image_paths.append(os.path.join(root, file)) with open(output_file, "w") as f: for path in image_paths: f.write(path + "\n") print(f"路径文件已生成:{output_file}")
示例
convert.py ../model/retinaface.onnx ../dataset/retinaface_dataset.txt ../model/retinaface.rknn Retinaface
- onnx 模型地址:例如
luckfox_onnx_to_rknn/model
中的模型。 - 训练集地址:txt 文件中列举少量图片。
- 导出模型地址:后缀
.rknn
。 - 模型类型:Retinaface、Facenet、Yolov5。
- onnx 模型地址:例如
评论 (0)