本教程重点不在如何训练模型,重点是全流程链路,想学训练的可以网上找教程
环境
- python 3.10.x
- rknn-toolkit2-2.2.0
- ultralytics_yolov8
- rknn 驱动版本2.2
模型训练
- yolov8仓库地址:
https://github.com/airockchip/ultralytics_yolov8.git
- 下载项目到本地后,按照yolov8流程正常训练即可,里面有导出onnx的代码,运行一下就会生成onnx模型
- 只能用这个仓库进行训练,不能用yolov8官方仓库代码训练,因为需要兼容rknn npu算子,改了网络结构
# 安装项目
pip install -e .
# 修改配置文件,model字段改为训练好的模型路径
ultralytics/cfg/default.yamlmodel: runs/detect/train/weights/best.pt
# 模型导出onnx文件
python ultralytics/engine/exporter.py
服务器上安装(onnx转rknn)
- 下载rknn-toolkit2
wget https://github.com/airockchip/rknn-toolkit2/archive/refs/tags/v2.2.0.zip
git clone https://gitee.com/agricultureiot/rknn-yolov8.git
- 解压
unzip v2.2.0.zip
- 安装(根据python版本)
pip install -r requirements_cp310-2.2.0.txt -i https://pypi.tuna.tsinghua.edu.cn/simplepip install rknn_toolkit2-2.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
下载示例项目
git clone https://github.com/airockchip/rknn_model_zoo.git
准备校准集
- 目的量化时矫正和测试模型
- 从训练数据集中随机挑选20-50张数据集,尽量包含所有标签,放到指定目录
- 编写txt索引文件,文件内容为20张图片的每个图片路径
# 参考目录结构
datasets├── images| ├── 123.ipg| ├── ......| └── 456.jpg└── dataset.txt
- 修改文件的数据集路径和rknn模型导出路径:
examples/yolov8/python/convert.py
量化
- onnx转为rknn模型
python convert.py yolov8n.onnx rk3588
- yolov8n.onnx 模型网络结构 (不是yolov8s)
- 转为rknn 后的模型网络结构
- 如果结构不对,是无法运行的
运行(3588开发板上操作)
升级npu驱动版本
- 新版npu驱动地址:
https://github.com/airockchip/rknn-toolkit2/blob/master/rknpu2/runtime/Linux/librknn_api/aarch64/librknnrt.so
- 将so替换到
/usr/lib
目录下,如果版本一致则不用升级驱动
安装依赖
- 依赖地址(python调用npu的依赖):
https://github.com/airockchip/rknn-toolkit2/blob/master/rknn-toolkit-lite2/packages/rknn_toolkit_lite2-2.2.0-cp310-cp310-linux_aarch64.whl
python install rknn_toolkit_lite2-2.2.0-cp310-cp310-linux_aarch64.whl
- 在板端安装 RKNN-Toolkit-lite 后,使用对应 demo 的 python 推理脚本,将
from rknn.api import RKNN
修改为from rknnlite.api import RKNNLite as RKNN
才可以实现板端的 python 推理
- 将rknn模型复制到开发板上
- 运行代码
python yolov8-img.py
注意点
如果在边缘设备上运行需要替换包的引入
from rknn.api import RKNN
替换为下面的写法
from rknnlite.api import RKNNLite as RKNN
npu使用率查看
watch sudo cat /sys/kernel/debug/rknpu/load
查看系统
uname -a
cat /etc/os-release