KOI预训练模型方法
预训练过程框图
确定训练的物体
选定的训练物体,一般它们之间是有明显的差异,可能是颜色,可能是外形。如果从人的角度观察很难分别出物体之间的差别,那么通过机器学习出来的的效果也不会太好。
这里以螺丝、螺母为例,做模型的预训练。
收集样本
通过KOI拍照,收集不同分类的样本。因为模型是应用在KOI上,因此通过KOI拍照得到的数据会更贴切。
KOI拍照存储到SD卡中有两种方式:
1、Microibt或者其他板子作为主控,KOI作为模块,当按键按虾后,拍下照片存储到SD卡中。
2、KOI自己作为主控,通过自身的AB按键,拍照,存到SD卡中。
这次采用第二种方式,提供了KOI能用的MicroPython代码,main.py放置到SD卡中,SD卡中检测到含有main.py,便会自动运行。
拍照准备
1、准备一张正版的内存卡,如闪迪或者金士顿,容量推荐8G、16G、32G、其它杂牌卡片可能会遇到不识别的问题
2、使用前将其进行快速格式化
3、在SD卡的根目录下,新建一个名为image的文件夹!
4、将提供的main.py文件放置在根目录下
5、正确从电脑中退出SD卡后,在KOI断电的情况下,把卡插到KOI上。
6、确保一切就绪后,使用充电宝给KOI进行供电。
拍照开始
1、将螺母放在各个环境下,进行拍照100张,当按下KOI的A按键,进行拍照保存(如果需要重拍请按B按键)。所拍得的照片会以字母+序号的形式保存到SD卡中

2、注意当KOI供电后,程序就开始运行起来,照片的序号由1开始,每拍一张照片,序号就会自动+1。如果这个过程中,突然断电后,重新供电后,序号又会从1开始算起,因此,请保证充电宝电量充足,保证能把100张照片拍下来。
3、当螺母已经拍照了100张照片后,我们将所得的图片拷贝下来(image的文件夹再清空)。同时,此时将main.py的程序修改一下,将A更改为B,准备拍另外一个分类的照片。
4、一切就绪后,准备好螺丝,重复刚才拍螺母的步骤,将螺丝的样本拍下来。
标注图片准备
通过以上的操作,我们可以得到螺母的照片(A1-A100),螺丝的照片(B1-B100),并且这两种的照片分别放在两个文件夹中。照片的数量,可以多一些少一些,不一定完完全全等于100。数量的多少会影响识别的效果。一般数量在一百以上效果就会比较好。小喵训练的数字、字母等常规单个分类在500以上。

标注工具——labelImg.exe
下载地址:https://github.com/tzutalin/labelImg/files/2638199/windows_v1.8.1.zip
下载并解压得到
选择样本A的文件夹

选择保存的文件夹
选择要保存的文件夹,文件夹名字任意,标注后的数据XML就会保存到此文件夹下。
标注设置
给类别起个名称,如nut,并把勾勾上,通过快捷键W,就可以对图片的目标对象进项画框。
画框操作,尽可能用小的矩形框把我们的目标对象框住。

下一张图片
按快捷键D,切换到下一张图片
常用快捷键:
在使用LabelImg时,可以利用快捷键来提高工作效率。以下是一些常用的快捷键:
- Ctrl + S:保存标签
- Ctrl + D:复制当前标签和矩形框
- Space:标记当前图片已标记
- W:创建一个矩形框
- D:切换到下一张图片
- A:切换到上一张图片
- Del:删除选中的标注矩形框
- Ctrl + 放大图片:放大图片
- Ctrl + -:缩小图片
- ↑→↓←:移动选中的矩形框的位置
第一个类别样品全部标注完毕
可以在label_nut文件夹下看到已经标注好的数据。
标注第二个类别
同理,更改数据集的文件夹,和保存的文件夹
更改标签

训练平台
当各个分类的图片数据已经标注完毕,此时我们可以将数据传到云端服务器中进行训练。
这里利用的是嘉楠平台(出品K210的公司)
https://developer.canaan-creative.com/
首先进行注册与登录
模型训练



点选项目

创建数据集


上传图片和标注数据
请注意压缩包的结构目录,需要与要求一致
文件夹名称为dataset
dataset下有两个文件夹,images和xml,分别存放分类A、分类B的照片,和标注好的数据

标注数据
数据我们已经全部标注完毕了,这里无需再标注,可以看到右侧未标数量为0,代表全部已经标注完毕了。

创建训练
只需填入任务名称,其它按照默认值即可,确认后就开始排队训练了。


等待训练完毕即可。
使用模型
模型文件解析
- 模型训练完毕之后状态变为”已完成“,点击”下载“
- 压缩包文件说明
- det_results:测试结果图片集
- anchor.txt:锚点值
- canmv-xxxxx.zip:k210固件一些相关固件
- det.kmodel:模型文件
- label.txt:结果序号对应的标签
- train_loss.txt:训练失败率(数值渐低则是正确的)
在kittenblock中使用
- 选择硬件,根据你自己的主板选择未来板或者未来板lite
- 添加插件
- 核心积木
- 未来板:
- 未来板lite
在makecode中使用
- 添加插件,插件地址:https://github.com/KittenBot/pxt-koi2.git
- 核心积木块
- 程序