电赛专题:如何在Windows系统上将 YOLO 的 PT 模型转换成 KModel

Viewed 856

问题描述


这里开发了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 需要三个环境:

  1. .NET 7.0;
  2. Python 3.9~Python 3.12;
  3. 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

  1. Win + R
  2. 输入 sysdm.cpl
  3. 选择“高级”;
  4. 点击“环境变量”;
  5. 在系统变量中找到 Path
  6. 添加 C:\Program Files\dotnet
  7. 保存并重新打开命令行。

在 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

至此,模型转换环境安装完成。

二、下载模型转换脚本

打开嘉楠官方文档:

K230 YOLO 大作战

也可以直接点击下面的链接下载对应转换工具:

下载后直接解压。

解压后的文件夹中,会按照模型任务继续分类:

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 命令即可。

五、需要注意的地方

  1. nncase 和 nncase-kpu 必须使用相同版本;
  2. 本文使用的版本是 2.11.0
  3. 必须安装 .NET 7.0 SDK;
  4. PT 转 ONNX 和 ONNX 转 KModel 使用的输入尺寸必须一致;
  5. YOLO 版本和转换脚本必须对应,例如 YOLO26 使用 test_yolo26
  6. 模型任务和脚本文件夹必须对应。

完成以上步骤,就可以得到 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/

1 Answers