k210部署自行训练的口罩识别模型

因为培训需要,开坑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

 

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
xiaoxingxing的头像xiaoxingxing管理团队
上一篇 2023年8月4日
下一篇 2023年8月4日

相关推荐