1. 环境准备与工具链配置
在开始YOLO26模型在RK3588上的部署之前,我们需要先配置好开发环境。RK3588是瑞芯微推出的一款高性能AIoT芯片,内置独立的NPU(神经处理单元),支持INT8/FP16混合量化,算力可达6TOPS。为了充分发挥其性能,我们需要使用Rockchip官方提供的RKNN工具链。
首先,在Ubuntu 18.04或20.04系统上安装RKNN-Toolkit2。建议使用Python 3.8环境,避免版本兼容性问题:
# 创建虚拟环境
conda create -n rknn python=3.8
conda activate rknn
# 安装RKNN-Toolkit2
pip install rknn_toolkit2-2.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
# 验证安装
python -c "from rknn.api import RKNN; print('RKNN-Toolkit2安装成功')"
除了RKNN-Toolkit2,还需要准备模型转换和推理所需的依赖库:
# 安装ONNX相关库
pip install onnx==1.8.0 onnxsim==0.4.33
# 安装OpenCV用于图像处理
pip install opencv-python==4.5.5.64
对于板端部署,需要交叉编译RKNN运行时库。从Rockchip官方GitHub仓库下载rknpu2,其中包含了RK3588的运行时库和头文件:
git clone https://github.com/rockchip-linux/rknpu2
export RKNPU2_DIR=$(pwd)/rknpu2
配置交叉编译工具链,推荐使用gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu:
wget https://releases.linaro.org/components/toolchain/binaries/6.3-2017.05/aarch64-linux-gnu/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu.tar.xz
tar -xvf gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu.tar.xz
export CROSS_COMPILE=$(pwd)/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-
环境配置完成后,我们可以开始模型转换工作。这里特别要注意版本匹配问题,RKNN-Toolkit2的版本必须与板端运行时库版本一致,否则会导致模型加载失败。我在实际项目中就遇到过因为版本不匹配导致的模型推理异常,调试了很长时间才发现是版本问题。
2. YOLO26模型优化与转换
YOLO26作为YOLO系列的最新版本,在模型结构上做了不少优化,但直接使用官方导出的ONNX模型在RK3588上部署可能会遇到问题。我们需要对模型结构进行针对性修改,才能充分发挥RK3588 NPU的性能。
首先从PyTorch模型导出ONNX。这里需要注意两个关键修改点:
# 修改ultralytics/engine/exporter.py中的导出逻辑
def export_onnx(self, im, file, prefix=colorstr('ONNX:')):
# 修改输出头为分离形式
y = []
for i in range(self.nl):
t1 = box_head[i](x[i]) # 回归头输出
t2 = cls_head[i](x[i]) # 分类头输出
y.append(t1)
y.append(t2)
return y # 返回6个输出层
# 添加ONNX导出代码
dummy_input = torch.randn(1, 3, 640, 640)
input_names = ["images"]
output_names = ["output1", "output2", "output3", "output4", "output5", "output6"]
torch.onnx.export(
model,
dummy_input,
"yolo26n_modified.onnx",
input_names=input_names,
output_names=output_names,
opset_version=12
)
导出ONNX后,建议使用onnxsim进行模型简化:
from onnxsim import simplify
import onnx
model = onnx.load("yolo26n_modified.onnx")
model_simp, check = simplify(model)
assert check, "Simplified ONNX model could not be validated"
onnx.save(mode


4595

被折叠的 条评论
为什么被折叠?



