我是天下谷科技研发, 前友商FAE. EVB板子功能应该是完备的.目前已摸索出一条从训练到识别(仅使用原生C/C++)的路径, 希望能帮助到同样使用原生C/C++(双系统)路线的小伙伴们.
硬件型号: K230-USIP-LP3-EVB是针对AI芯片K230-USIP开发,以LPDDR3为内存而设计的测评板. 板子做工很精良, 看得出勘智下了血本. 笔者系参加 "玄铁杯"第三届RISC-V应用创新大赛 获得该几乎"绝版"官方开发板的.
训练得到的模型, 加载时遇到的问题
若按照最新的CanMV系列YOLO教程跟我学用 K230 实现图像检测 进行训练, 转换后得到的kmodel. 再通过SDK中AI例程(k230_sdk/src/reference/ai_poc/person_detect等多个demo)里加载, 会出现空指针错误. 进一步分析发现, 系以上训练得到的kmodel只有一个output, 而AI例程里多个demo都是默认存在3个output.
用新版本SDK编译出来的程序(ISP部分)无法在旧版本SDK(v0.9)固件正常运行
会出现黑屏, 无法获取摄像头图像数据.
所以, 务必编译烧录最新版的SDK, 然后烧录; 再基于最新版的SDK对demo进行编译. (有build_apps.sh脚本)
几经艰辛找到 端到端训练脚本
K230_training_scripts
艰辛的原因系: 嘉楠的资料出现了多个技术路线的分化, k230_docs已经逐步往CanMV+Micropython方向及几款新开发板的支持靠, 这对入门上手固然是好事. 但希望对真实应用场景落地的文档支持路线也要让开发者走全.
这个库有几种常见的图像AI应用, 我仅关注目标识别(end2end_det_doc);
具体应用参见README.md, anaconda还是必须得装, 不然python版本和python库很容易冲突.
★ 注意到 该项目对数据集的文件结构要求为COCO数据集标注格式与yolov5很大的不同:
不过得益于图像都是我手动使用labelme标注的, 所以我有针对每个图像的标注(json)文件. 借助cursor Claude很迅速就得到转换到coco格式的标注文件(labels.json). 本文涉及的转换脚本我将放在文末.
万事具备, 即可开始训练;
训练完成会得到best.kmodel, 建议在训练机上执行下
python3 inference.py
看看模型效果, 很差就没必要发去设备端了.
注意:配置参数deploy.json每次训练完都会有差异(anchors字段);

该参数文件系配合 该项目下的设备端大核程序(k230_code)使用:
main.elf deploy.json best.kmodel None 2
至于, 该main.elf如何在EVB BOARD上正常获取摄像头数据, 则需要魔改程序
至此, 全离线的训练到模型识别都实现了.
与在线训练对比
有一说一, 以上离线训练脚本得到的kmodel识别效果差于在线训练的kmodel. 不知是否跟训练参数差异有关.