转载 JeckXu666 神器!200元开发板运行神经网络模型,吊打OpenMV!(保姆级教程)_JeckXu的博客-CSDN博客_k210和openmv哪个好用
文章目录
神器!200元开发板运行神经网络模型,吊打OpenMV!(保姆级教程)
一、前言
二、开发准备(软件+环境)
三、获取训练图片
3.1 手机获取图片
3.2 通过K210进行图片拍取
四、获取训练集
五、网络平台训练
5.1 获取机器码
5.1.1 下载固件
5.1.2 串口读取
5.2 提交训练集到模型平台
六、模型导入
6.1 压缩包文件信息
6.2 K210调用模型
七、实验现象
八、K210系列文章
神器!200元开发板运行神经网络模型,吊打OpenMV!(保姆级教程)
一、前言
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压缩包
提取的所有图片都包含在下载的压缩包里面
这里要注意:
因为网页转换后得到的图片名称中往往在数字之前会留有原始视频文件的名称,因而这里建议在转换之前就将视频的名字命名为汉字,之后进行转换,转后使用批量重命名软件Renamer修改图片名称。
这里附上下载地址,大家可根据需要自取:
【ReNamer下载】2020年最新官方正式版ReNamer免费下载 – 腾讯软件中心官网 (qq.com)
附上我转换后解压得出的图片:
若上传的图片的名称未满足Maixhub平台要求,可能导致模型无法正常生成
手机拍摄大量图片(这个方法比较累,一张一张拍摄在整合)
以上就是两种获取图片的方法,在获取了需要用于训练的图片素材后,他们的大小我们不能确定,需要通过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实战-点亮LED灯
K210实战-按键中断
K210实战-串口通信
K210实战-云端模型训练
K210实战-本地模型训练(未更新)
JeckXu666
已关注
————————————————
版权声明:本文为CSDN博主「JeckXu666」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_45396672/article/details/117390991