作者记录了从零训练猫脸识别模型并部署到 K230 开发板的流程。项目使用 CatFLW 猫脸数据集,因其自带猫脸框和关键点,只需将 bounding boxes 转为 YOLO 标注,生成包含训练集、验证集、测试集和 cat_face 类别的 YOLO 数据集。随后在 Conda 环境中安装 Ultralytics YOLO,根据是否有 NVIDIA GPU 配置 PyTorch,并使用适合 K230 的 YOLOv8n、320 输入尺寸进行训练。训练后可用测试图片、图形界面和电脑摄像头验证效果,再导出 ONNX。部署前需安装与 K230 固件匹配的 nncase,按官方检测脚本将 ONNX 转为 kmodel。最后将 kmodel 复制到 CanMV/K230,参考官方 YOLOv8 示例修改模型路径、类别名和置信度阈值完成部署。
从零训练猫脸识别模型并部署到K230开发板
前言
众所不周知,我最后以635分进入了河海大学的自动化专业,非常遗憾没能水进西电的管理学当跳板
然而事已至此,不如继续玩点新玩具吧(
正好搞到了立创的K230开发板,试验了里面的几个demo以后,想试试自己训练一个模型出来
嗯,那就训练一个猫脸识别模型吧
获取猫脸数据集
此次训练采用了https://www.kaggle.com/datasets/georgemartvel/catflw的数据集(CC BY-NC 4.0,不能直接用于商业项目)
https://github.com/martvelge/CatFLW
对数据集进行处理
由于该数据集有约 2,000 张猫脸图像,每张含一个猫脸框和 48 个关键点,因此已经省去了我们前期进行数据标注的操作,仅需要将 bounding_boxes 转成YOLO标注后再进行训练即可
使用如下代码进行转换
最终会生成 YOLO 数据集:catflw_yolo
正式训练
安装训练环境
建议使用 Conda:
检查安装:
如果有 NVIDIA GPU,需要根据 CUDA 版本安装对应的 PyTorch;没有 GPU 也可以训练,但会比较慢。4
开始训练 YOLOv8n
在当前目录执行:
参数
含义
yolo
调用 Ultralytics YOLO 命令行工具
detect
使用目标检测任务
train
执行训练
data=catflw_yolo\data.yaml
数据集配置文件路径
model=yolov8n.pt
使用 YOLOv8 Nano 预训练模型,体积小、速度快,适合 K230
epochs=100
完整遍历训练集 100 次
imgsz=320
将图片缩放到约 320×320,影响速度和精度
batch=8
每次同时处理 8 张图片,显存不足可改成 4 或 2
device=0
使用第 0 号 GPU,也就是你的 RTX 5070 Laptop GPU
project=runs
训练结果保存到 runs 目录
name=catface_yolov8n
本次训练实验名称
workers=0
使用 0 个数据加载进程,Windows 下更稳定
参数说明:
训练完成后,模型位于:
用yolo验证模型
用测试图片查看效果:
结果会保存到类似:
用图形化界面和电脑摄像头进行验证
导出 ONNX
K230 通常通过 ONNX -> kmodel 转换:
生成:
建议使用 Netron 检查 ONNX 输入,一般应为:
安装 nncase
K230 的 nncase 版本必须和开发板固件匹配。官方文档说明 Windows 下需要:
然后从 nncase Releases 下载对应版本的:
安装:
官方 K230 文档:
重点注意:不要随便使用最新 nncase,先确认你的 K230 是 CanMV还是其他版本
ONNX 转 KModel
执行:
解压:
检查检测转换脚本是否存在:
如果返回:
说明脚本准备成功。
再安装转换脚本依赖:
确认当前模型和校准集存在:
两个都应返回:
注意,官方示例中的 test_yolov8\detect\to_kmodel.py 是目标检测转换脚本,不要使用 classify 目录中的脚本。
完成后执行:
在项目根目录执行:
参数含义:
转换过程可能需要几分钟。成功后,通常会在 ONNX 所在目录生成:
部署到 K230
如果使用 CanMV:
1.将 catface_yolov8n.kmodel 复制到开发板 SD 卡。
2.参考官方 YOLOv8 K230 示例。
3.修改示例代码中的模型路径。
4.将类别名称改为:
5.调整置信度阈值:
6.示例代码: