【K230/K230D新技能点亮】解决 KModel 转换痛点,打通 K230 AI 部署最后一公里

Viewed 34

问题描述


电赛备赛现场,大家可能都经历过这样的剧情:

摄像头架好了,图片拍完了,数据标完了。Ultralytics 一跑,best.pt 有了;再敲一条命令,ONNX 也顺利导出来了。
你正准备向队友宣布“视觉部分马上搞定”,下一秒却发现——
ONNX 怎么变成 KModel?
环境怎么配置?
nncase 环境到底该装哪个版本?
校准集选多少张?参数怎么填?
为什么昨天还能转换,今天换台电脑就开始报错?
模型训练只用了半天,环境配置却像一个隐藏 Boss,眼看着比赛倒计时一格一格往下掉。
这也是我们推出 YOLO KModel 转换器 1.0.0 的原因:让 ONNX→KModel 不再是一段需要反复“考古”的命令行冒险,而是几个清楚、可重复的图形化步骤。

下载链接:

https://download.kendryte.com/developer/common/convert_kmodel_tool/YOLO-KModel-Converter-Portable-Slim-Win.zip
image.png

一、先把故事从头说起:约 100 张图片,能做出一个 YOLO 模型吗?

如果比赛场景相对固定、类别不多、拍摄条件可控,先采集约 100 张有代表性的图片,完成标注和训练/验证集划分,通常就能在 Ultralytics 官方训练环境中快速跑出一个可验证方案的 YOLO 原型。

训练完成后,导出 ONNX 也很直接:

yolo detect train data=your_data.yaml model=yolo11n.pt epochs=100 imgsz=320
yolo export model=runs/detect/train/weights/best.pt format=onnx imgsz=320

不过,“约 100 张”只是一个适合快速起步的数字,不是精度保证书。比赛效果仍然取决于类别难度、标注质量、光照变化、目标尺度和样本覆盖情况。

换句话说:100 张精心设计、覆盖真实赛场情况的图片,往往比 100 张在同一位置连拍的图片更有价值

模型导出 ONNX 后,新的问题才刚刚登场。

K230官方链路是:在电脑端通过 nncase 把 ONNX 等模型编译成可由 KPU 加速的 .kmodel,然后在 K230 上通过 KPU Runtime 加载模型、设置输入、执行推理并读取输出。

原理并不绕,但版本、量化、输入尺寸和校准数据一股脑儿叠在一起,就很容易让人进入“缺一个库、补一个库,又冒出三个新报错”的循环。

所以,我们把中间最容易卡人的一段封装成了图形化工具。

二、YOLO KModel 转换器到底负责哪一段?

一句话概括:

它负责把已经训练并导出的 YOLO ONNX 模型,量化、编译为 K230 可加载的 .kmodel。

image.png

边界也要提前说清楚:软件只提供 ONNX→KModel 转换,不包含图片标注、YOLO 训练、PT→ONNX 导出,也不替代 K230 板端的预处理、后处理和业务代码。

它不是“一键包办整个视觉系统”,而是把训练与板端部署之间最容易让人掉头发的一段路修平

三、为什么它更适合电赛备赛?

01 不写转换脚本,也能完成 ONNX→KModel

打开软件后,选择 ONNX 模型、校准图片目录和输出位置,再确认模型版本、任务类型、输入尺寸与量化选项,点击“开始转换”即可。

转换过程中:

  • 界面会显示进度和关键编译信息;
  • 普通第三方 warning 默认过滤,日志不会瞬间变成“红字瀑布”;
  • 真正的错误信息和 Traceback 会完整保留;
  • 成功后可以直接打开输出目录。

02 支持常用 YOLO 系列和多种视觉任务

当前版本的支持范围如下

YOLO系列 检测 detect 分类 classify 分割 segment 姿态 pose 旋转框 OBB
YOLOv5 - -
YOLOv8
YOLO11
YOLO26

注意:任务类型必须和训练任务一致。检测模型请选择 detect,分类模型请选择 classify,不要让检测模型从分割入口“跨专业参赛”。

03 自动读取常见模型输入尺寸

选择 ONNX 后,软件会尝试读取模型输入名称、维度和布局,识别常见的固定输入:

NCHW:[1, 3, 高度, 宽度]
NHWC:[1, 高度, 宽度, 3]

识别成功后,软件会自动填写输入宽高,并把输出路径设置成同名 .kmodel。

如果模型使用动态高度或宽度,软件会提示手动填写。这里不能凭感觉猜,填写值必须与模型实际部署尺寸一致。

官方转换脚本会将输入宽高向上调整为 32 的整数倍。为了减少后续的不确定性,建议导出时直接使用 320×320、640×640 这类尺寸。

04 内置 6 种 PTQ 量化配置

选项 校准算法 数据类型 权重类型
0 NoClip uint8 uint8
1 NoClip uint8 int16
2 NoClip int16 uint8
3 Kld uint8 uint8
4 Kld uint8 int16
5 Kld int16 uint8

第一次转换建议从选项 0 开始。

这里不是游戏装备强化,选项数字更大并不代表效果更强。其他配置需要结合模型大小、精度和板端表现进行实测。

05 自动兼容部分其他 IR version 模型

软件固定使用 ONNX 1.15.0,其支持的最高 IR version 为 9。遇到其他版本的IR version模型时,软件会软尝试对齐IR版本和检查nncase支持的opset,尽可能的进行兼容,但是不保证一定可以转换成功。

如果模型实际使用了更高版本 IR 才有的结构,转换仍可能失败。这时应使用兼容 ONNX 1.15.0 的导出环境重新导出,而不是强行修改原模型。

06 绿色免安装,自带固定运行环境

软件内置并隔离加载:

  • .NET Runtime 7.0.20
  • Python 3.10.11
  • nncase 2.11.0
  • nncase-kpu 2.11.0
  • ONNX 1.15.0
  • ONNX Runtime 1.19.0
  • ONNX Simplifier 0.4.36
  • Pillow 10.4.0

它不修改系统 PATH,不替换电脑已有的 Python 或 .NET,不写入注册表;模型和校准图片不会上传,整个转换过程无需联网。

简单说就是:队友电脑上装了什么版本的 Python,不再影响这次转换。

四、从拍图片到 K230 跑起来,完整流程怎么走?

image.png

下面按备赛节奏一步一步来。

第一步:采集、标注、训练并导出 ONNX

  • 先让数据覆盖真实比赛环境:
  • 正常光照和阴影;
  • 不同背景与干扰物;
  • 目标的远近、大小和角度;
  • 摄像头可能出现的真实安装位置;
  • 赛场上可能遇到的曝光和运动情况。

完成训练后导出固定输入尺寸的 ONNX。模型名称、训练轮数和输入尺寸要根据自己的任务调整,前面的命令只是最小示例。

第二步:准备校准图片

PTQ 量化需要校准数据。软件要求目录中至少有 20 张可正常读取的图片,支持 JPG、JPEG、PNG、BMP 等 Pillow 可读取格式。

校准图不要在提交前五分钟从文件夹里“随缘抽卡”,建议从真实训练集或验证集中选取,覆盖典型光照、背景、目标大小和拍摄角度。

目录里不要混放标签文本、损坏文件和其他非图片。校准数据是否有代表性,会直接影响量化后的实际精度。

第三步:完整解压绿色版

软件支持 Windows 10/11 x64,解压后完整目录结构应为:

YOLO-KModel-Converter-Portable-Slim\
├─ YOLO-KModel-Converter-Portable-Slim-Win.exe
├─ README.md
└─ runtime\

不要只把 exe 单独拎出来。exe 和 runtime 是搭档,拆队之后谁也跑不起来。
双击YOLO-KModel-Converter-Portable-Slim-Win.exe,第一次使用可以先点“检测绿色环境”,确认组件完整。

image.png

第四步:选择模型并确认参数

依次完成:

  1. 选择待转换的 .onnx;
  2. 选择校准图片目录;
  3. 确认输出 .kmodel 路径;
  4. 选择正确的 YOLO 版本;
  5. 选择与训练一致的任务类型;
  6. 检查自动识别的输入宽高;
  7. 第一次转换选择量化选项 0。

如果无法自动读取输入尺寸,可以先用导出配置或 Netron 确认模型输入。常见原因包括动态宽高、多输入、非标准四维图像张量,或通道数不是3。

第五步:点击“开始转换”

转换期间不要关闭软件,也不要移动运行目录。成功后,界面会显示输出路径,点击“打开输出目录”即可找到生成的 .kmodel。

如果失败,也别急着进行传统艺能——卸载重装所有 Python。
先看日志,再按模型尺寸、任务类型、校准图片、依赖完整性和模型兼容性的顺序排查,通常更快。

第六步:放到 K230 上验证
.kmodel 是模型转换的终点,但只是板端应用的起点。K230 端仍然需要:

  1. 按训练与导出约定完成图像预处理;
  2. 使用 KPU Runtime 加载 .kmodel;
  3. 设置输入张量并执行推理;
  4. 读取输出张量;
  5. 按 detect/classify/segment/pose/obb 的输出格式完成后处理;
  6. 将结果用于显示、测量或控制。

尤其要核对输入尺寸、通道顺序、颜色顺序和归一化方式。很多“模型转换成功,但结果像在随机答题”的问题,最后查出来都是电脑端和板端预处理没有对齐。

赛前避坑速查

提示“绿色版依赖不完整”
通常是 exe 与 runtime 目录不完整,或相对位置被改变。请把最新版压缩包完整解压到全新目录,不要只复制 exe,也不要直接覆盖正在运行的软件。

提示校准图片数量不足
所选目录中需要至少 20 张可正常读取的图片。检查数量、格式和损坏文件,目录内不要混放标注文本。

提示未找到对应转换脚本
检查 YOLO 版本和任务组合。例如 YOLOv5 当前不支持 pose 与 obb。

转换成功,但板端精度下降
建议按下面顺序排查:

  1. 校准图片是否真正代表比赛场景;
  2. 输入分辨率是否与训练、导出时一致;
  3. 板端颜色顺序、通道与归一化是否一致;
  4. 后处理是否匹配对应 YOLO 版本和任务;
  5. 再测试不同 PTQ 选项并进行量化对比。

参考资料

Ultralytics 官方训练模式:
https://docs.ultralytics.com/modes/train/

Ultralytics 官方 ONNX 导出说明:
https://docs.ultralytics.com/modes/export/

Kendryte K230 nncase Github:
https://github.com/kendryte/nncase

Kendryte K230 YOLO大作战:
https://www.kendryte.com/k230_canmv/zh/main/example/ai/yolo_battle.html

0 Answers