hockel 发表于 2020-4-23 20:48:00

【MaixPy教程】用maixHub训练模型进行开源硬件识别

## 【MaixPy教程】用maixHub训练模型进行开源硬件识别
![](data/attachment/album/202004/23/182747hlccc9wqqwyqcqpy.jpg)

【MaixPy系列教程:】
+ [【MaixPy教程】用maixHub训练模型进行开源硬件识别](https://mc.dfrobot.com.cn/thread-304993-1-1.html)
+ [【MaixPy 教程】用mixly玩转K210——口罩识别](https://mc.dfrobot.com.cn/thread-305026-1-1.html)
+ [【MaixPy教程】用mixly玩转K210——调用AI-OneNET API实现车牌识别](https://mc.dfrobot.com.cn/thread-305038-1-1.html)
+ [【MaixPy 教程】用mixly玩转K210——人脸追踪](https://mc.dfrobot.com.cn/thread-305097-1-1.html)
+ [【MaixPy 教程】用mixly玩转K210——20类对象检测](https://mc.dfrobot.com.cn/thread-305125-1-1.html)
+ [【MaixPy 教程】用mixly玩转K210——一键本地模型训练](https://mc.dfrobot.com.cn/thread-305291-1-1.html)
+ [【MaixPy 教程】用mixly玩转k210——MixNo通过TCP/IP与掌控板进行通讯](https://mc.dfrobot.com.cn/thread-305317-1-1.html)

## 前言
年前参加了dfrobot的活动:**DF冬季AI挑战赛**有幸进入第二轮,大方的木子给了200的优惠券。在逛了DF商城时候无意间发现了一个宝贝:(https://www.dfrobot.com.cn/goods-1993.html)!又有液晶屏和摄像头!!**难道它不香吗?现在想想它是真的香**
![](data/attachment/album/202004/23/183008cm2blzw729l74x4u.jpg)
![](data/attachment/album/202004/23/183214i3gqi3ii6kqo8z9u.jpg)
它是基于k210 AI芯片,作为核心处理单元,k210带独立FPU的双核处理,64位的CPU位宽,8M的片上SRAM,400M的可调标称频率,支持乘法、除法和平方根运算的双精度FPU,在AI处理方面k210可进行卷积、批归一化、激活、池化等运算。也可以进行语音方向扫描和语音数据输出的前置处理工作,可实现人脸检测,语音识别,颜色、物体识别,MNIST手写数字识别,Feature map显示,tiny yolov2 20分类等多种功能。
**什么是K210 AI芯片呢?**可以看一下大神稚辉君的帖子:[嵌入式AI从入门到放肆【K210篇】-- 硬件与环境 ](https://mc.dfrobot.com.cn/thread-299778-1-1.html)想要详细了解MaixPy的资料可以查看:[矽速科技官网](https://www.sipeed.com/)
**好了废话不多说了,开始本次的教程**
## 硬件准备
+ 刷入MaixPy的最新固件的K210开发板这里推荐(https://www.dfrobot.com.cn/goods-1993.html)
+ 一根TypeC数据线
+ TF卡及读卡器

## 准备数据集
1、用手机拍摄我们的arduino、microbit、掌控板、树莓派的图片(ps:识别的准确定和我们的数据集的大小有关):
![](data/attachment/album/202004/23/194048tfarwkkwak11kpnr.jpg)
## 数据集处理
将图片数据集按分类保存为单独的文件夹, 子目录的名字为最后生成label的名字。
**注意:分类文件夹数量要大于 2个!**
例如:
```
数据集文件目录结构
   |-Dir_name
   |-Class_1
       |- pic01.jpg
       |- pic02.jpg
       |- pic03.jpg
      |-Class_2
       |- pic01.jpg
       |- pic02.jpg
       |- pic03.jpg
```
![](data/attachment/album/202004/23/194530aec9sbgzimi0b2pb.jpg)
2、使用转换工具处理文件夹
工具下载地址:[预处理软件](https://cdn.sipeed.com/donwload/12kj346465hjkv68g7c/DataAssitantV1.0.zip?attname=)
1.将预处理软件下载完成之后,解压后点击.exe文件即可使用
![](data/attachment/album/202004/23/194751qeq2lx3vlafxmfsj.jpg)
选择文件夹确定即可
![](data/attachment/album/202004/23/194823u760nb77ytgiszty.jpg)
选择我们准备好的数据集
![](data/attachment/album/202004/23/194911urnwa8rrad8r6iuj.jpg)
执行完成后会生成zip文件(这个之后我们在模型训练的网站上会有用到)
![](data/attachment/album/202004/23/195051podm110kr70dad0o.jpg)
**注意:
建议的图片分辨率 224*224, 上传之前可以使用工具批量转换一下
每个分类不要低于40张图片,否则无法开始训练
数据集压缩后大小不超过20M
子目录名不能使用汉字, 否则生成的label无法显示**
## 训练模型
### 获取机器码
1、下载key_gen固件 (https://en.bbs.sipeed.com/uploads/default/original/1X/bca0832bed92a1ada63bd05327688784e2ef14d1.zip)
2、下载kflash-gui[ kflash-gui](https://github.com/Sipeed/kflash_gui/releases)   
3、使用kflash-gui 烧录 key_gen 固件
![](data/attachment/album/202004/23/195547m9owr99922rjwgsz.jpg)
4、打开串口终端(Xcom), 重启开发板, 可以看到打印出的机器码。
```
Please Send Bellow Data to Sipeed --> support@sipeed.com:

6f80dccbe29**********cc7e9d69f92

Generate key end

其中 6f80dccbe29**********cc7e9d69f92 就是对应开发板的机器码
```
***警告:由于需要进行模型加密,key_gen.bin将永远关闭JTAG端口,并写入一次性AES KEY,请确认后再进行烧录。***
## 提交训练任务
1、打开(https://www.maixhub.com/index.php/index/mtrain/index.html)并创建一个任务
![](data/attachment/album/202004/23/195821ap21g54pk2ckxpcm.jpg)
**在填写邮箱处填写接受模型的邮箱在填写机器码处填写机器码**
2、上传数据集,选择我们前面准备好的数据集
![](data/attachment/album/202004/23/200000h2wganzk8ogaguvw.jpg)
3、进行数据训练,训练的时间和我们的数据集大小有关![](data/attachment/album/202004/23/200101vg1gh75i22i7ifyf.jpg)
训练好后,我们的邮箱会接受的我们的训练模型:
![](data/attachment/album/202004/23/200434saa71azixnp4c9t1.jpg)
这里可以看到我的准确度还是比较低的。我们下载并解压下来可以看到下面这个文件:
![](data/attachment/album/202004/23/200751ksw1tk3lo6nlg0nd.jpg)
里面有我们的的数据模型,和我们模式的一些准确度、损失度等信息
![](data/attachment/album/202004/23/200940o6m73ji56oeq4e39.png)![](data/attachment/album/202004/23/200954gi7it2m27h2zp74m.png)![](data/attachment/album/202004/23/200949a7cca4m44ox4h4o9.png)
## 烧录模型到flash
模型有两种使用方式, 可以使用sd卡或烧录flash的方式来运行模型脚本。
### 使用sd卡
```
1、烧录最新Maixpy固件
2、将邮件中的zip 解压
3、将所有文件放到sd卡根目录
4、将sd卡插到开发板上, 重启开发板
```
### 烧录模型到flash
1、打开 kflash-gui, 选择解压出的kfpkg文件(模型内自带maixpy 固件,不需要单独烧录)
![](data/attachment/album/202004/23/201253devgddod5v56zep3.jpg)

## 程序的编写
在邮件中的训练模型解压文件中,有boot.py,就是我们的识别模型程序了,我们现在用(http://dl.sipeed.com/MAIX/MaixPy/ide/)打开(具体使用操作及相关API文档可以[参考官方wiki](https://maixpy.sipeed.com/zh/)):
![](data/attachment/album/202004/23/202231zfh0otjs35z40vdp.jpg)
```
# refer to http://blog.sipeed.com/p/680.html
import sensor, image, lcd, time
import KPU as kpu
lcd.init()
lcd.clear()
#lcd.mirror(1)
try:
    img = image.Image("/sd/startup.jpg")
    lcd.display(img)
except:
    lcd.draw_string(lcd.width()//2-100,lcd.height()//2-4, "Error: Cannot find startup.jpg", lcd.WHITE, lcd.RED)

sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.set_windowing((224, 224))
sensor.set_vflip(0)
sensor.set_hmirror(0)

sensor.run(1)
f=open('/sd/labels.txt','r')
labels=f.readlines()
f.close()
task = kpu.load('/sd/f1ba58e5f3d2011d3320a4fd0cd2ca69_813835c56cbfc4cfaf63052b70ba2c6e.smodel')
lcd.clear(0xFFFF)
clock = time.clock()
while(True):
    img = sensor.snapshot()
    clock.tick()
    fmap = kpu.forward(task, img)
    fps=clock.fps()
    plist=fmap[:]
    pmax=max(plist)
    max_index=plist.index(pmax)
    a = lcd.display(img, oft=(48,0))
    lcd.draw_string(48, 224, "%.2f:%s                            "%(pmax, labels.strip()))
    print(fps)
a = kpu.deinit(task)

```

## 程序演示https://v.youku.com/v_show/id_XNDY0NTE0MjAwOA==.html











rzyzzxw 发表于 2020-4-24 08:44:56

老铁,看起来很帅啊。

乔誉 发表于 2021-6-4 18:30:02

为什么转换工具出来绝大部分的分辩率是320*240,然后模型训练的时候就报错

34603471 发表于 2023-1-15 18:02:05

学习了,赞一个
页: [1]
查看完整版本: 【MaixPy教程】用maixHub训练模型进行开源硬件识别