云端训练模型,本地部署于K210
Posted 嵌入式up笔记
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了云端训练模型,本地部署于K210相关的知识,希望对你有一定的参考价值。
文章目录
云端训练模型,本地部署于K210
一、前言
2021年电赛马上就要开始了,在过去电赛中,当我们遇到需要用视觉的题目时,第一时间想到的就是使用openmv来做视觉处理,虽然说可以勉强达到设计目标,但整体上的性能上还是太弱,尤其在检测目标物体的时候受到环境影响非常大,所以我今天向大家推荐一款新电赛神器-搭载K210芯片的MaixBit开发板,拥有1TOPs算力,可以运行神经网络模型,价格亲民,只要200块就能买到,具体开发板参数介绍:勘智K210芯片介绍;
MaixBit开发板:
目前Sipeed官网有一个在线模型训练平台,为购买K210产品的用户提供一个在线模型训练,支持目标检测和目标分类两种模型,本篇文章将手把手教大家如何使用在线云平台训练目标检测模型(特别简单),并将它导入到K210中运行!下面先讲解一下关于目标检测模型和目标分类模型的概念
- 目标分类: 识别图像所属的类别,例如
apple
或cup
,无返回坐标。如下图,它是苹果的概率是0.8
。
- 物体检测:检测物体在图片中的位置,并输出物体的坐标和物体的大小(即框定识别的物体)。如下图所示,一个苹果是苹果的概率是
0.8
,当它被检测到时会被框起来。
下面正式进入目标检测模型训练正文
二、开发准备(软件+环境)
本章用到的资料已打包成文件夹上传到CSDN:地址
- K210的Python开发平台MaixPy,开发方式与OpenMV基本差不多:下载地址,根据自己电脑选择合适版本;
- MaixPy界面如下:(基本和OpenMV IDE一样)
- Labelimg图片标注软件(软件在我提供的压缩包内),界面如下:(若打不开,将C盘\\usr\\用户名下的labelImgSettings.pkl删除重新打开)
- K210固件下载软件,用于下载固件到K210(软件在我提供的压缩包内),界面如下:
- 串口调试软件:ATK-XCOM串口调试工具(软件在我提供的压缩包内),界面如下
三、获取训练图片
进行训练首先需要的就是获取目标图片用于训练,此处有两种方法获得图片集,我都做一下介绍
3.1 手机获取图片
手机获取图片的方法主要有两个:1.手机拍摄视频提取图片再转化图片大小,2.手机一张一张拍摄在转化图片大小(转化图片大小是把图片大小转化为224*224大小,因为k210官方推荐的训练图片大小就是这么大,如果使用的不是这个大小,后面会出现问题)
- 手机拍摄一段视频,进入在线网页转换为图片:网页地址;
通过视频获取图片数据集步骤:点开网页-> 导入视频-> 点击开始后,选择下载ZIP压缩包
提取的所有图片都包含在下载的压缩包里面
- 手机拍摄大量图片(这个方法比较累,一张一张拍摄在整合)
以上就是两种获取图片的方法,在获取了需要用于训练的图片素材后,他们的大小我们不能确定,需要通过imgtool软件进行转换,软件在我提供的压缩包内;把图片转换成224*224,具体步骤如下:
把所有图片放在一个images文件夹下(名字要和我一样)
打开Imgtool选择存放图片的文件夹,开始转换
转换后生成一个images_out文件夹,我们删除原先文件夹,把images_out改名为images文件夹
到此通过手机获取的图片集就准备好了!
3.2 通过K210进行图片拍取
上一步我们用手机获取图片集,但手机的效果并不是最佳,最佳的效果是使用K210直接进行图片拍摄,获取224*224格式的图片,具体步骤如下:
首先确保K210自身固件为出厂固件,固件在我准备的文件夹内,如果不是可以刷一下固件,固件位置在下图中我框选出来了,刷固件步骤可以提前参考下面刷机器码步骤(如果是出厂固件无需再刷固件),同时需要一张格式化为FAT32的内存卡,用于存储图片
固件准备就绪后,打开maixpy IDE软件,选择拍照文件夹下的photo.py进行打开
打开后点击做下架绿色图标连接K210
连接后,点击绿色播放按钮,程序正常运行,图片数据反馈回MaixPyIDE
我们对准我们需要的训练的目标,按下MaixBit上的Boot按键,图片就可以保存到内存卡里面,下图为我采集的照片,照片已经为224*224大小,所以无需再进行转换便得到图片集
四、获取训练集
经过上一步,我们获取了224*224大小的目标图片集,这一步我们将使用标注软件labelimg对获取的训练集进行标注,步骤如下:
桌面新建文件夹dataset,dataset下在建立一个usb文件夹,文件夹内建立两个文件夹分别叫images和xml,以及一个labels.txt的文本文件(名字一定要对上)
将所有处理过的图片放到images内(图片不能为中文名字)
打开labelimg,选择open dir打开图片集目录
点击change save dir,选择标注数据(.xml文件)输出目录
点击view->auto save mode自动保存,方便我们标注
之后按下快捷键W进行图片标注,框选出目标物体,然后标签写入usb
标注后按下快捷键D切换下一个,快捷键A切换上一个,重复以上步骤,一直到标注完成
标注完成后,我们在labels.txt内写入所有的标签(标注了几种写几种,换行隔开),此处我只标注了usb一种,所以填一个usb;
标注完成之后,我们可以看到文件夹的内容框架如下:
之后我们将整个文件夹压缩为ZIP格式文件,到这用于目标检测模型的训练集就做好了!
五、网络平台训练
在准备好训练集后,我们下一步就是将模型上传到Sipeed的模型平台进行训练,具体步骤如下:
5.1 获取机器码
使用Sipeed的模型平台需要有k210的机器码才能训练,机器码是每个k210独有的一个标识码,获取过程如下
5.1.1 下载固件
打开kflash_gui,通过kflash下载bin文件到K210,bin文件在MaixBit文件夹下固件下面的key_gen.bin文件
5.1.2 串口读取
固件下载完成之后,打开XCOM软件,连接串口,设置波特率115200,按下开发板上的复位按钮,串口会发送机器码信息,如下图
此处的机器码就是当前机器的机器码了,把它保存住,留着后面使用,注意一点此时的k210固件是刷机器码的固件,我们需要刷回支持运行模型的固件,在固件文件夹内我准备了两个固件,一个是出厂固件,一个是官方推荐的运行模型固件,具体对应如下表,我们刷入官方推荐的固件,为之后运行模型做准备!
文件名 | 说明 | 备注 |
---|---|---|
maixpy_vx.y.z_x_xxx*.bin | 默认版本的 MaixPy 固件,包含了大多数功能, 支持连接 MaixPy IDE , | 出厂默认固件版本 |
maixpy_vx.y.z_x_xxx*_minimum_with_ide_support.bin | MaixPy 固件最小集合, 支持连接 MaixPy IDE , 不包含OpenMV 的相关算法和各种外设模块 | 运行各种模型,建议使用这个 |
5.2 提交训练集到模型平台
获取了机器码后,下一步我们进入到Sipeed的官网:Sipeed,进入到官网后注册一个账号(步骤略过),点击官网的模型平台->选择模型训练,在下图位置填入机器码,并且选择物体检测;
然后点击next,上传模型压缩包(ZIP格式),再点击next一直到submit,提交后我们就可以在自己的主页中看到模型正在排队,等排到我们的时候就会开始训练了,我的训练集给了200张,训练差不多要半个小时,下图是训练完成的界面
到此模型训练就结束了
六、模型导入
6.1 压缩包文件信息
模型训练结束后下一步就是把模型导入到k210中运行,首先把我们训练好的模型压缩包下载下来,压缩包内容如下:
其中startup.jpg是启动界面图片,无需关注,report是模型训练的结果
两个曲线的对应关系
Loss曲线趋势 | 结果 |
---|---|
train loss 不断下降,valid loss不断下降 | 说明网络仍在学习,还有优化空间 |
train loss 不断下降,valid loss趋于不变 | 说明网络过拟合(max pool或者正则化) |
train loss 趋于不变,valid loss不断下降 | 说明数据集100%有问题,检查数据集有没有出错 |
train loss 趋于不变,valid loss趋于不变 | 说明学习遇到瓶颈,需要减小学习率或批量数目;或者是数据集有问题(数据集标注错误数据比较多); |
train loss 不断上升,valid loss不断上升 | 说明网络结构设计不当,训练超参数设置不当,数据集经过清洗等问题; |
这里我的训练集做的不是很好,因为摄像头太模糊了,但也勉强可以使用
m.kmodel是模型数据,系统关键文件;
labels.txt是模型的标注信息;
boot.py是官方提供的调用模型的脚本,用于启动模型
6.2 K210调用模型
知道压缩包文件的作用后,我们开始通过k210调用模型,这里有两种模型调用方式
1.从SD卡启动模型
准备一个sd卡,把上面的文件全部拷贝进去,插入k210上电启动,k210会从sd卡中的boot.py进行启动,调用模型,开始检测
2.从内部Flash启动模型
若没有SD卡,则可以将模型导入到内部Flash指定位置,然后通过修改Boot.py内读取模型的位置,直接启动,具体步骤如下
打开kflash,下载位置填入0x300000后下载
改变boot.py里面的代码,注释掉从SD卡启动的代码,取消从flash启动代码的注释,然后通过MaixPy点击运行,K210就可以检测模型了
七、实验现象
K210运行了模型之后,对准目标物到中心位置时检测率很高,但因为我的数据集少的原因,在侧面检测的识别率不高,运行一段时间没有误检测的情况,效果比我之前用Openmv好很多!!!
八、K210系列文章
以上是关于云端训练模型,本地部署于K210的主要内容,如果未能解决你的问题,请参考以下文章
昇腾ModelArts与Atlas 200 DK云端协同开发——行人检测Demo(完整版)
昇腾ModelArts与Atlas 200 DK云端协同开发——行人检测Demo(完整版)
Tensorflow 训练模型在云端机器上工作,但在我的本地电脑上使用时出错