概要
本方案聚焦 YOLOv26 在 RK3588 平台上的部署适配,核心工作集中在 C++ 推理侧的模型准备。主要涉及基于 Ultralytics YOLOv26 的导出改造,新增 RKNN_ONNX 格式以对接 rknn-toolkit2,并对 Detect Head 进行重构,确保导出的 ONNX 模型能高效运行在 Rockchip NPU 上。
该方案适用于:
- RK3588 / RK356x 等 Rockchip NPU 设备
- 使用 C++ + RKNN SDK 进行高性能推理
- 希望保留 Ultralytics 训练生态的用户
项目依赖
说明:本文不涉及 rknn-toolkit2 的安装与量化流程,仅聚焦 模型导出与结构适配。
一、导出格式扩展:新增 RKNN_ONNX
1. 修改 ultralytics/engine/exporter.py
1.1 扩展 export_formats
我们需要在 export_formats() 返回列表末尾追加一项,以便 CLI 支持新格式:
["RKNN_ONNX", "rknn_onnx", "_rknn_model", False, False, ["batch", "name"]],
```\n
这样即可在命令行中直接使用:
```bash
yolo export model=yolov26.pt format=rknn_onnx
1.2 修改 Exporter.__call__() 中的 flags 解包
在 flags 元组中加入 rknn_onnx 标识,并在后续逻辑中分发调用:
(jit, onnx, xml, engine, coreml, saved_model, pb, tflite, edgetpu, tfjs, paddle, mnn, ncnn, imx, rknn, executorch, axelera, rknn_onnx) = flags
随后在导出分支中添加判断:
if rknn_onnx:
f[17] = self.export_rknn_onnx()
二、AutoBackend 识别新模型类型
为了让框架正确加载新导出的模型,需要在 AutoBackend 中注册并识别 rknn_onnx 类型,确保推理引擎能正确初始化后端。
三、Detect Head 重构(关键步骤)
修改 ultralytics/nn/modules/head.py
原生 Ultralytics 的 Detect Head 针对通用 ONNX 优化,但在 RKNN 环境下可能需要调整算子顺序或输出形状。

