关于K230 DEMO BOARD(EVB)开发板如何使用YOLOv5模型进行目标检测

Viewed 118

重现步骤
现在针对新开发板的文档好多, 但是对昔日的官方板支持好像不够了.
1.我按照CanMV micropython的教程(【Yolo 系列课】跟我学用 K230 实现图像检测)训练量化出来了模型(best.kmodel), 奈何不基于CanMV IDE和microPython固件的情况下, 都不能很好地跑起来(这里有几种坑点, 后续补充).

期待结果和实际结果
根据最新v1.9的SDK提供的多个ai_demo(src/reference/ai_poc), 原生提供的yolov5 kmodel模型都有至少3个p_outputs_(kmodel输出对应的指针列表).
output 0 : f32,1,80,80,18,
output 1 : f32,1,40,40,18,
output 2 : f32,1,20,20,18,
而根据教程方法训练出来的kmodel系只有1个p_outputs_(f32,1,6300,6); 非常不解.
而针对引C++的训练指引呢, 却又跟Yolov无关, 我这边主要系花了时间做训练集, 不想再折腾一套新的...

软硬件版本信息
玄铁AGV二等奖奖品

错误日志

  1. 有跑空指针的, 图免了;
  2. 只使用p_outputs_[0], 得到的识别框又太大, 毫无准确性可言;

尝试解决过程
头疼, 后续再补充. FAE救我.

3 Answers

我是天下谷科技研发, 前友商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字段);
image.jpg

该参数文件系配合 该项目下的设备端大核程序(k230_code)使用:

main.elf deploy.json best.kmodel None 2 

至于, 该main.elf如何在EVB BOARD上正常获取摄像头数据, 则需要魔改程序

至此, 全离线的训练到模型识别都实现了.

与在线训练对比

有一说一, 以上离线训练脚本得到的kmodel识别效果差于在线训练的kmodel. 不知是否跟训练参数差异有关.

EVB板子是我们出的内部测试板,现在已经不对外了,有些feature也不在上面测试了。

大佬, 我想咨询下K230_training_scripts/end2end_det_doc的YOLOv5具体版本是什么? 在线训练的YOLOv5版本又是什么呢? 在线平台的训练参数能否提供一下?

https://gitee.com/YJHmath/k230_yolo
目标识别端侧程序(适配到K230 EVB BOARD),但不能很好地退出ISP相关的VB, 需要重启才能重新执行.
★ 建议直接参考person_detect进行生产环境应用的开发.

  • labelme工具标识文件转COCO数据集格式:
    labelme2coco.py

  • labelme工具标识文件转Pascal voc数据集格式(用于线上训练):
    labelme2voc.py