一、模型训练与使用:
软件准备:
图像处理:image_tool软件,用来完成对于图像的批量修改
软件提取码: 链接:https://pan.baidu.com/s/1KlkO6lmtl5w2Go2mEX_Dbg?pwd=jxfg
提取码:jxfg
labelimg:这个自求多福,跟着别人的下载教程走就行。。。
用来对图像进行标注。
实操:
首先在桌面新建一个文件夹,文件名称为practice(这个无所谓,按自己喜好,但确保是英文),在文件内部建立要训练的对象,这次命名为blob文件夹,在blob文件夹下再建立两个文件夹,命名为images和xml,再建立一个text文本,命名为labels。
然后打开,image_tool软件,将拍摄好的图片导入,如下图所示。
完成后,再blob文件夹下方会多出一个文件夹,名字为images_out,保留该文件,将源文件删除,并将该文件夹重命名为images
下一步,打开labelimg(打开方式再cmd中输入labelimg即可打开)。
然后点击,change save dir项,选择我们创建的xml文件夹,然后点击open dir,选择images文件夹,便可以开始进行对图像进行标注(完成后的页面如上所示),再打开view,选择auto save mode(自动保存)。
下面来对,labelimg的操作进行一些讲解(本人也仅是初学,如有不对欢迎指出)
1、w按键,为绘制按键,把想要识别的区域框出,如下图所示
2、按下D键,移入下一张,继续上述操作,完成所有的标注。完成后xml文件夹如下图。
3、打开labels(标签)文件(就是创建的text文本),在里面输入我们标注的标签,如我标注了blue_true和red_true两类,则只用输入这两种即可。当然,不同标签用换行符(enter键)隔开。
4、打开Maixhub网站创建训练项目(一般选择图像检测,它能将被检测目标框选出来并得出物体类别和坐标)
5、创建完成之后准备数据集。
点击去准备数据集,再点击创建数据集
点击导入数据集,出现下图所示的界面,因为是传递压缩包,所以将整个文件夹进行压缩
然后点击开始上传,可以看到这样就是已经上传成功。
完成所有之后,回到模型训练(之间点击就可以)找到你创建的任务,导入刚刚创建的数据集,然后点击创建任务,如下选择(图像增强那边我是顺便随便钩了的。。。因为我觉得多点总没错哈哈哈,选择模型那边,因为我们要下载到K210所有选择nncase部署平台,训练参数那边也都全钩上了,虽然不知道有什么用)
训练完成之后如下图所示,loss好像是损失,acc是准确度变化,训练的结果其实看val_acc即可。
下一步开始部署模型,点击手动部署->下载模型即可
然将该压缩包解压,上传到sd卡,K210插入sd卡不会显示,要将文件放入,需要准备一个读卡器。
然后将main.py文件中的文本复制到Maixpy中运行便可。(复制的时候用文本打开会比较块)这里面可能会有各种报错,当发现是什么fm未声明啊,UART为声明啊,点开main.py将这些模块导入便可。具体可看我前面几篇文章,固件的话烧录maixpy_v0.6.2_85_g23d09fbcc_openmv_kmodel_v4_with_ide_support,这个。
下载站 - Sipeed在这下载。
另外,记得在sensor设置那块把镜面翻转打开,镜像关闭,不然画面会很奇怪。。。
识别率低可能是没开灯。。。还有模型训练数据集比较少,各位可以自行尝试。以及我没有开起矫正导致有圆筒畸变之类的。。。
在用模型的时候出现了挺多奇怪问题的,比如突然显示我SD卡没有挂载,但是我之前时使用的时候是可以用的,后来发现是SD卡槽有点松,一会能识别一会不好识别,然后就换了一个新的板就啥事也没有了。
二、KPU(作为了解-为什么,因为来不及仔细学完)
基础知识:
K210的KPU是内部的一个神经网络处理器,它可以在低功耗情况下实现卷积神经网络计算,实时获取被检测目标的大小、坐标和种类,对人脸或者物体进行检测和分类。
一些特点:
· 支持主流训练框架按照特定限制规则训练出来的定点化模型;
· 对网络层数无直接限制,支持每层卷积神经网络参数单独配置,包括输入输出通道数目、输入输出行宽列高;
· 支持两种卷积内核 1x1 和 3x3;
· 支持任意形式的激活函数;
· 实时工作最大支持神经网络参数大小为5.5MiB到5.9MiB;
· 非实时工作时最大支持网络参数大小为(Flash 容量-软件体积)
简单来说KPU就是能够加载和运行各种现成的AI算法模型,实现各种机器视觉等功能。目标检测时通过在K210的KPU上跑YOLO(You Only Look Once)目标检测算法来实现。
构造函数:
import KPU as kpu:
功能:常用的KPU模块导入方法。
使用方法:
kpu.load(offset or file_path):
功能:加载模型;
· offset :模型存放在flash的偏移量,如0x300000(可以联合maixhub上的手写数字识别那个官方模型来进行联系);
· file_path:模型在文件系统为文件名,如“xxx.kmodel";
kpu.init_yolo2(kpu_net, threshold, nms_value, anchor_num, anchor):
功能:初始化yolo2;
· kpu_net:kpu网络对象;
· threshold:概率阈值;
· nms_value:box_iou门限;
· anchor_num:描点数;
· anchor:描点参数与模型参数要一致。
kpu.run_yolo2(kpu_net, image):
功能:运行yolo2网络;
· kpu_net:从kpu_load()中返回的网络对象;
· image:从sensor中采集到的图像;
kpu.deinit(kpu_net):
功能:反初始化;
· kpu_net:kpu网络对象。