因为培训需要,开坑K210,前后忙活了3天终于把自行训练的口罩模型部署成功了,实测还行,分享一下经(ni)验(keng):
本人学过一段时间python,见过别人玩开源硬件(没动过手),接触过一点人工智能项目的理论知识(观课议课),先自己体验一下半个项目的过程。
1.资源:
1.1.口罩训练素材:mxyoloV3训练库
1.2.训练方式:mxyoloV3(百度下载)、60组、alpha=0.75、增强模式、16个/批,共580个图片全部标注
1.3.训练过程:因为耗内存才不到2个G,而且内存都是超配,基本忽略内存的影响
1.3.1. 8700kCPU(黑果虚拟机Win10自动分配,纯CPU算力),一个批次大约需要135秒,发现太费时间,就算了15组,结果识别率超差,又花了1个多小时算了30组,能上来一些,仍不是很理想;
1.3.2. 12500cpu,物理win10,一个批次125秒,仅仅时间减少,30组效果差不多,参考袁云强老师的视频,基本很确定准不准基本和批次数量以及样本数量挂钩
1.3.3. 2700+GTX960 ,2012年的老U和2014年的老显卡,渣一样的设备,纯粹是因为想起来还有一块GTX960躺在盒子里,试试传说中的GPU运算。装备CUDA完全体以后,一个批次大概30S。。。。。。CPU占用率基本在25-30%。从结果来看心里一万匹草泥马奔腾而过:这要是去弄一块二手3060Ti不得起飞?
1.4.K210板卡 01studio k210、亚博 k210 ,芯片一样,造型差的不少,后来才知道 01studio 是maxipy系列,亚博是canmv系列,各自有IDE,实测相互的兼容性并不好。
线材都是齐的(吐槽01studio的usb线是microuse,亚博的是usebtypec)、32GTF卡、读卡器
2.连接01studio k210开发板并跑个demo
串口设备不陌生,这块没什么难度,就是一开始不小心把端口号弄错了,半天没写进去程序。
这里吐槽一下mixly,当然也可能完全是我的问题。 mixly就不介绍了,优点是门槛进一步拉低,都是图形化拖拖拉拉就好,想着大家都是K210芯片,应该差不太多,实战发现mixly会出现无法上传代码到开发板的情况??( could not enter raw repl )??
本着想不通查不到就换个思路的办法,仔细看看01studio的配套文件,发现它推荐小白使用MaixPy IDE做开发,没啥问题,上。然后没遇到任何困难就把demo运行成功了????大概是MaixPy有个主动连接和调试的按钮,并且针对开发板有较好的连接适配。
3.部署自行训练的口罩模型
在www.yuque.com/mxpi 找到上面那个视频说到的mixly部署代码先试试,结果当然是没成功,估计跟他视频里用到的开发板不同。
so,查了一下01studio的配套代码,也有一个类似的模型检测代码。
import sensor,image,lcd,time
import KPU as kpu
#摄像头初始化
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.set_vflip(1) #摄像头后置方式
lcd.init() #LCD初始化
clock = time.clock()
#模型分类,按照20class顺序
classes = ['Un_Masks', 'Masks']
#1、从Flash加载模型。将模型烧录到开发板Flash。烧录方法参考pdf教程。
#task = kpu.load(0x500000)
#2、从SD加载模型卡上。将kmodel文件通过读卡器拷贝到SD卡。
task = kpu.load("/sd/faceMask.kmodel") #模型SD卡上
#网络参数
anchor = (0.9325, 1.0987, 1.7635, 2.3976, 2.6134, 3.4486, 3.3165, 4.5023, 4.1806, 5.5381)
#初始化yolo2网络,识别可信概率为0.7(70%)
a = kpu.init_yolo2(task, 0.7, 0.3, 5, anchor)
sensor.set_windowing((224, 224))
while(True):
clock.tick()
img = sensor.snapshot()
#img = img.resize(224, 224)
code = kpu.run_yolo2(task, img) #运行yolo2网络
if code:
for i in code:
a=img.draw_rectangle(i.rect())
a = lcd.display(img)
lcd.draw_string(i.x(), i.y(), classes[i.classid()], lcd.RED, lcd.WHITE)
lcd.draw_string(i.x(), i.y()+12, '%f1.3'%i.value(), lcd.RED, lcd.WHITE)
else:
a = lcd.display(img)
print(clock.fps())#打印FPS
classes、anchor都是比较熟悉的东西,按照流程很快就通过MaxiPyIDE部署成功了(吐槽一下,mac版的莫名其妙的有“语法错误”提示,放到虚拟机的win10上跑没有任何问题,这是友好的劝退?)
参考mxyolov3训练过程中的anchor、classes参数修改以上代码,并复制模型文件到sd卡,运行,然后,报错:ValueError: [MAIXPY]kpu: load error:2006, ERR. NO_ MEM: memory not enough
没道理啊,换自己的模型就不行了?(样例的模型大小1.4M,我的模型1.9M)
找到这篇文章 :
Micropython解释器MaixPy 常见问题-电子发烧友网 (elecfans.com)
目前最合理的情况和处置办法就是更换体积更小的固件(maixpy_v0.6.2_84_g8fcd84a58_minimum_with_ide_support.bin 在minimum上增加了ide支持),于是把这个固件烧上去,运行,然后:kpu:check img format err!
还是上面那的文档,原因是摄像头输入的尺寸和模型的尺寸不同。。。以后再解决训练的问题了,先把输入改了,增加一行代码: sensor.set_windowing((224, 224))
至此,程序正常运行,算是把第一个自己训练的模型在开发板跑起来了。
4.研究亚博k210
Canmv的,风格跟01studio完全不同,IDE也是建议另外一个。
来回研究了半个小时,都没有连上开发板!!!
然后又回去看文档,发现这玩意支持microPython不错,但出厂只支持c。。。。。。虽然CanMv IDE可以刷固件,但是要先连上才行。so,kflash_gu_v1.6.5_2 把支持microPython估计刷上,然后能接入了。
这个板子的连接时间差不多要4-5秒,并且有时不成功,01studio连接也就1秒左右,不存在连接丢失的,原因暂不清楚,周一TB找技术客服问问。
刷固件以后,就可以把亚博k210自带的口罩识别放进去了,实测识别率还不错。
5.总结
5.1.IDE问题,mixly的兼容性可能会不太好,兼容有问题的时候考虑下厂家推荐的ide
5.2.当模型过大(2M或以上)时,有可能内存不足,去刷一个minimum的固件,应该能解决问题
5.3.训练模型的过程中的锚点参数,最后可能是需要放进程序的
5.4.mac上会有些莫名其妙的问题,到win上无事发生
micropython新东西并不多,其实mixly这种没啥必要
最后上个图,左边是亚博,右边是01studio
文章来源:https://www.toymoban.com/news/detail-407871.html
文章来源地址https://www.toymoban.com/news/detail-407871.html
到了这里,关于k210部署自行训练的口罩识别模型的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!