致小白的K210模型训练与运用


文章目录

  • 致小白的K210模型训练与运用
  • 前言
  • 一、模型训练方法
  • 二、详细介绍
  • 1.使用MixHub平台进行训练
  • 2.使用Mx-yolov3自己搭建平台进行训练
  • 3.V3模型
  • 4.V4模型



前言

由于我也是刚接触K210不久,并且对python没有太多的了解,但是又想自己训练模型,于是花了挺多的时间在找寻简单的模型训练方法,本来是在几天前就找到了简单的模型训练方法,但是后来在使用的过程中出了点问题,直到今天才把问题勉强解决。所以写下本文来记录一下我所使用的K210模型训练方法,希望能给和我一样的小白一些帮助


提示:以下是本篇文章正文内容,下面案例可供参考

一、模型训练方法

1.使用MixHub平台进行训练
2.使用Mx-yolov3自己搭建平台进行训练

二、详细介绍

1.使用MixHub平台进行训练

详细方法可以看:MixHub训练使用说明 (1)数据集的准备

首先我们需要确定我们是要进行目标分类还是目标检测

目标分类是没有框的,只能识别该物体的种类,不能给出该物体的具体位置信息,效果如下

如何训练自己的llama模型 如何进行模型训练_python


而如果是目标检测的话是有框的,可以给出物体的具体位置信息,并且框出来,效果如下图

如何训练自己的llama模型 如何进行模型训练_python_02


这里以目标分类为例,具体的可以看MixHub训练使用说明首先我们准备一个数据集文件夹,格式如下:

如何训练自己的llama模型 如何进行模型训练_tensorflow_03

如何训练自己的llama模型 如何进行模型训练_如何训练自己的llama模型_04


然后我们使用image_tool来将图片转换成224*224格式

如何训练自己的llama模型 如何进行模型训练_深度学习_05

转换好之后会多出一个文件夹

如何训练自己的llama模型 如何进行模型训练_如何训练自己的llama模型_06


将cat和dog文件夹删除将cat_out和dog_out改成cat和dog。得到下图

如何训练自己的llama模型 如何进行模型训练_tensorflow_07


然后压缩成ZIP格式

如何训练自己的llama模型 如何进行模型训练_python_08


打开MixHub训练平台 填入邮箱和机器码,选择分类目标识别,机器码是通过将一个固件下入Maix bit或者其他sipeed的K210获得的。

如何训练自己的llama模型 如何进行模型训练_机器学习_09


再上传数据集,也就是刚刚的ZIP格式文件,点击开始训练

如何训练自己的llama模型 如何进行模型训练_深度学习_10


然后就等着就行,等训练好了就会将下载连接发到你的邮箱中

如何训练自己的llama模型 如何进行模型训练_机器学习_11


下载好了之后就是一个这样的压缩包

如何训练自己的llama模型 如何进行模型训练_python_12


解压开之后就有以下文件

如何训练自己的llama模型 如何进行模型训练_tensorflow_13


第一个boot.py是测试代码,第二个labels.txt是种类,第三个m.kmodel是模型文件

接下来将上面所有文件放入U盘中,即可看到效果

2.使用Mx-yolov3自己搭建平台进行训练

首先得感谢袁运强老师制作的Mx-yolov3

软件获取方法import创客公众号回复Mx3 软件的详细介绍也可以看公众号里的文件,在这里我以我使用过程中的问题以及解释做一下说明

这里也以物体分类为例

首先我们将MX3下载下来

如何训练自己的llama模型 如何进行模型训练_深度学习_14


然后双击Mx_yolov3安装,得到一个Mx_yolov3的文件夹

如何训练自己的llama模型 如何进行模型训练_tensorflow_15


首先我们打开环境配置文件夹,双击环境配置.exe

如何训练自己的llama模型 如何进行模型训练_如何训练自己的llama模型_16


如何训练自己的llama模型 如何进行模型训练_如何训练自己的llama模型_17


然后按照步骤一步一步来就行,特别注意的是第三步的那二个一定要装,不然模型训练的会很慢

接下来我们以物体分类为例

首先我们找到Mx_yolov3文件夹中的example文件,将它复制到桌面

如何训练自己的llama模型 如何进行模型训练_python_18


如何训练自己的llama模型 如何进行模型训练_机器学习_19

接着我们打开Mx-yolov3,找到图像识别

如何训练自己的llama模型 如何进行模型训练_如何训练自己的llama模型_20


接着点选择找到刚刚的example文件夹

如何训练自己的llama模型 如何进行模型训练_如何训练自己的llama模型_21


然后点击提取,将Alpha设置为0.75

如何训练自己的llama模型 如何进行模型训练_如何训练自己的llama模型_22


接着点开始训练,等待即可,注意的是如果这里没有开GPU加速,训练要很久

如何训练自己的llama模型 如何进行模型训练_机器学习_23


训练好了模型之后我们再来测试一下模型

点击测试模型,然后找到所训练的模型位置

如何训练自己的llama模型 如何进行模型训练_如何训练自己的llama模型_24


测试好了之后这里可以看到模型的效果

如何训练自己的llama模型 如何进行模型训练_tensorflow_25


接下来是最后一步,也是最重要的一步

模型转换!!!

就是这一步,卡了我五天

我们输入路径选择tflite文件,输出文件任意设置,再选择量化图片,量化图片的路径如下

如何训练自己的llama模型 如何进行模型训练_机器学习_26


如何训练自己的llama模型 如何进行模型训练_机器学习_27


接着点击开始转换

如果你的结果是这样的

如何训练自己的llama模型 如何进行模型训练_深度学习_28


出现了模型转换成功,那么恭喜你,可以直接跳到最后一步了

如果你的结果是下图中的这样,或者是其他模型转换错误的情况,那么你得继续看接下来的步骤,尝试一下

如何训练自己的llama模型 如何进行模型训练_如何训练自己的llama模型_29


尝试一、将参数设置成如下图

如何训练自己的llama模型 如何进行模型训练_机器学习_30


然后将图片用他自带的那个猫狗分类的例子,再重复上面的步骤试一下,看看能不能成功。

我测试发现生成的模型比较大的可以转换成功,如下图

如何训练自己的llama模型 如何进行模型训练_tensorflow_31


生成的模型比较小的会转换失败,如下图

如何训练自己的llama模型 如何进行模型训练_python_32


而调整模型的大小是调Alpha这个参数,参数越小,模型越小,效果越差,参数越大,模型越大,效果越好。

如何训练自己的llama模型 如何进行模型训练_机器学习_33


如果你按上述方法尝试了之后发现还是模型转换失败,那么你可能得用第二个方法了

找到Mx-yolov3文件夹中的NNcase 0.2这个文件夹

如何训练自己的llama模型 如何进行模型训练_python_34


双击打开

如何训练自己的llama模型 如何进行模型训练_python_35

设置和0.1版本的一样,点击转换即可

如何训练自己的llama模型 如何进行模型训练_python_36


用0.2版本的转换一般都是可以成功的,但是用0.2版本的转换有一个问题,那就是转换出来的是V4的模型,而用0.1版本转换出来的是V3的模型。

如何训练自己的llama模型 如何进行模型训练_机器学习_37

3.V3模型

V3模型,也就是之前用nncase 0.1版本转换出来的模型

首先找到自己训练的模型,将下图中的二个文件放在SD卡中

如何训练自己的llama模型 如何进行模型训练_如何训练自己的llama模型_38


注意将classnames这个文件名改成classes

再将下图中的boot.py文件也放入SD卡中

如何训练自己的llama模型 如何进行模型训练_python_39


接下来将SD卡插入K210,然后给K210通电,就可以看到效果了。

4.V4模型

如果你是用nncase0.2的转换的,那么就是V4模型,V4模型出了上述步骤之外,还有二个地方做更改,一个是固件,固件要找一个支持V4版本的固件,固件可以在Sipeed 固件库找到

如何训练自己的llama模型 如何进行模型训练_如何训练自己的llama模型_40


注意的是这个固件是连不了IDE的,这个是我测试过的,还有下面这个,我没有测试过,不过应该也是可以用的,支持IDE和V4的

如何训练自己的llama模型 如何进行模型训练_机器学习_41


除了固件需要更改,那个示例代码boot.py也需要更改一下改成下面的代码

代码如下():

import sensor
import math
import machine
import lcd
import KPU as kpu

sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.run(1)
sensor.skip_frames(10)
sensor.set_windowing((224,224))
sensor.set_vflip(0)
lcd.init(freq=15000000,color=0x0000)
KPU = kpu.load('/sd/weights.kmodel')
success = kpu.set_outputs(KPU,0,1,1,2)
f=open("classes.txt","r")
labels_txt=f.read()
labels = labels_txt.split(",")
f.close()
while True:
     img = sensor.snapshot()
     plist = kpu.forward(KPU,img)[:]
     pmax = max(plist)
     max_index = plist.index(pmax)
     pgoods = labels[max_index]
     print("No.{} is {}".format(pgoods, pmax))
     lcd.display(img)
     lcd.draw_string(48,224,"NO: {} {}{}".format(pgoods, round(pmax,2)*100,"%"),lcd.WHITE,lcd.GREEN)


也就是加了一句success = kpu.set_outputs(KPU,0,1,1,2)

这一句的主要作用是设置输出层形状,具体的意思不大清楚,我试着参数像这样填是可以运行的

如何训练自己的llama模型 如何进行模型训练_tensorflow_42

这一句的具体说明可以看KPU的说明