问题描述
这里开发了YOLO onnx模型转换kmodel的软件,欢迎大家下载使用,并提出意见。软件免配环境,一键转换。下载链接如下:
YOLO-KModel-Converter-Portable-Slim-Win
电赛即将开始,很多小伙伴需要训练自己的 YOLO 模型。
对于电赛这类相对简单的应用场景,通常采集 100 张左右的图片,就可以在本地使用 CPU 完成模型训练,不一定必须使用云端 GPU。
近期云端训练资源可能比较紧张,提交任务后可能需要排队较长时间。由此给大家带来的不便,敬请谅解。建议大家尽早准备数据;如果模型和数据量较小,也可以优先尝试在自己的电脑上训练。
模型训练完成后,我们得到的通常是 best.pt,但 K230 开发板需要使用 .kmodel 模型。如果不会转换,可以按照本文操作。
整个过程分为两步:
best.pt → best.onnx → best.kmodel
一、准备转换环境
nncase 转换 KModel 需要三个环境:
- .NET 7.0;
- Python 3.9~Python 3.12;
- nncase 和 nncase-kpu。
Python 请自行安装,建议安装 64 位版本。下面只介绍 .NET、nncase 和 nncase-kpu。
1. 安装 .NET 7.0
打开 .NET 7.0 下载页面。
找到 .NET 7.0 SDK,选择:
Windows x64 安装程序
注意:需要下载 SDK,不要只下载 Runtime。
下载完成后,双击安装。
安装目录一般是:
C:\Program Files\dotnet
如果安装后无法使用,需要把这个目录添加到系统环境变量 Path:
- 按
Win + R; - 输入
sysdm.cpl; - 选择“高级”;
- 点击“环境变量”;
- 在系统变量中找到
Path; - 添加
C:\Program Files\dotnet; - 保存并重新打开命令行。
在 CMD 中输入:
dotnet --version
能够显示 7.0 开头的版本号,说明安装成功。
2. 安装 nncase
打开 CMD,输入:
pip install nncase==2.11.0
3. 安装 nncase-kpu
Windows 不能直接在线安装 nncase-kpu,需要先下载 .whl 安装包。
打开 nncase 下载页面,找到 2.11.0 版本,nncase-kpu 2.11.0下载链接, 下载:
nncase_kpu-2.11.0-py2.py3-none-win_amd64.whl
下载完成后,在文件所在文件夹的地址栏输入 cmd,按回车打开命令行。
然后输入:
pip install nncase_kpu-2.11.0-py2.py3-none-win_amd64.whl
注意:nncase 和 nncase-kpu 的版本必须相同。本文都使用 2.11.0。
4. 安装其他依赖
在 CMD 中输入:
pip install onnx==1.15.0 onnxruntime==1.19.0 onnxsim==0.4.36
至此,模型转换环境安装完成。
二、下载模型转换脚本
打开嘉楠官方文档:
也可以直接点击下面的链接下载对应转换工具:
- YOLOv5 转换工具:test_yolov5.zip
- YOLOv8 转换工具:test_yolov8.zip
- YOLO11 转换工具:test_yolo11.zip
- YOLO26 转换工具:test_yolo26.zip
下载后直接解压。
解压后的文件夹中,会按照模型任务继续分类:
detect 目标检测
classify 图像分类
segment 实例分割
pose 姿态估计
obb 旋转目标检测
例如,使用 YOLO11 训练的是目标检测模型,就选择:
test_yolo11\detect
不同 YOLO 版本和不同任务的转换脚本不能混用。
三、将 PT 转换成 ONNX
1. YOLOv8、YOLO11 或 YOLO26
先安装 Ultralytics:
pip install ultralytics
将 best.pt 放在一个容易找到的文件夹中。在该文件夹的地址栏输入 cmd,然后执行:
yolo export model=best.pt format=onnx imgsz=320
参数说明:
| 参数 | 含义 |
|---|---|
export |
导出命令 |
model=best.pt |
指定需要转换的 PT 模型 |
format=onnx |
将模型导出为 ONNX 格式 |
imgsz=320 |
设置模型输入尺寸为 320×320 |
如果模型训练时使用的是 640×640 输入尺寸,则执行:
yolo export model=best.pt format=onnx imgsz=640
转换完成后,文件夹中会出现:
best.onnx
2. YOLOv5
YOLOv5 需要在 YOLOv5 源码目录中进行转换。
把 best.pt 放进 YOLOv5 源码目录,然后在该目录打开 CMD,执行:
python export.py --weight best.pt --imgsz 320 --batch 1 --include onnx
参数说明:
| 参数 | 含义 |
|---|---|
export.py |
YOLOv5 自带的模型导出脚本 |
--weight best.pt |
指定需要转换的 PT 模型 |
--imgsz 320 |
设置模型输入尺寸为 320×320 |
--batch 1 |
设置一次输入 1 张图片 |
--include onnx |
指定导出格式为 ONNX |
如果提示没有 --weight 参数,可以改用:
python export.py --weights best.pt --imgsz 320 --batch-size 1 --include onnx
这里的 --weights 与前面的 --weight 含义相同,--batch-size 1 与 --batch 1 含义相同,只是不同 YOLOv5 版本使用的参数名称不同。
转换完成后会得到 best.onnx。
四、将 ONNX 转换成 KModel
以 YOLOv8 目标检测模型为例。
打开下面的文件夹:
test_yolov8\detect
把 best.onnx 复制到这个文件夹中。
脚本还需要一些图片进行模型量化。可以先使用转换工具中自带的:
calibration_data
在 detect 文件夹的地址栏输入 cmd,打开命令行。
输入下面的命令:
python to_kmodel.py --target k230 --model best.onnx --dataset ../calibration_data --input_width 320 --input_height 320 --ptq_option 0
参数说明:
| 参数 | 含义 |
|---|---|
python to_kmodel.py |
运行嘉楠提供的 KModel 转换脚本 |
--target k230 |
指定模型运行平台为 K230 |
--model best.onnx |
指定需要转换的 ONNX 模型 |
--dataset ../calibration_data |
指定量化时使用的校准图片目录,量化校准图片从训练数据中取出一部分即可 |
--input_width 320 |
设置模型输入宽度为 320 |
--input_height 320 |
设置模型输入高度为 320 |
--ptq_option 0 |
使用官方示例默认的量化方式 |
ptq_option 可选值:
| 数值 | 量化方式 |
|---|---|
0 |
NoClip,数据为 uint8,权重为 uint8;初次转换建议使用 |
1 |
NoClip,数据为 uint8,权重为 int16 |
2 |
NoClip,数据为 int16,权重为 uint8 |
3 |
Kld,数据为 uint8,权重为 uint8 |
4 |
Kld,数据为 uint8,权重为 int16 |
5 |
Kld,数据为 int16,权重为 uint8 |
如果 ONNX 模型的输入尺寸是 640×640,则改为:
python to_kmodel.py --target k230 --model best.onnx --dataset ../calibration_data --input_width 640 --input_height 640 --ptq_option 0
转换完成后,会生成:
best.kmodel
如果使用的是其他版本或其他任务,只需要进入对应的文件夹。
例如:
YOLOv5 目标检测:test_yolov5\detect
YOLOv8 实例分割:test_yolov8\segment
YOLO11 姿态估计:test_yolo11\pose
YOLO26 目标检测:test_yolo26\detect
进入正确的文件夹后,使用同样格式的 to_kmodel.py 命令即可。
五、需要注意的地方
- nncase 和 nncase-kpu 必须使用相同版本;
- 本文使用的版本是
2.11.0; - 必须安装 .NET 7.0 SDK;
- PT 转 ONNX 和 ONNX 转 KModel 使用的输入尺寸必须一致;
- YOLO 版本和转换脚本必须对应,例如 YOLO26 使用
test_yolo26; - 模型任务和脚本文件夹必须对应。
完成以上步骤,就可以得到 K230 可使用的 .kmodel 模型。
参考资料
硬件板卡
K230
软件版本
Daily Build,链接:https://download.kendryte.com/developer/releases/canmv_k230_micropython/daily_build/
其他信息
固件下载:https://download.kendryte.com/developer/releases/canmv_k230_micropython/daily_build/