神器!200元开发板运行神经网络模型 ,吊打OpenMV!(保姆级教程)

一、前言

2021年电赛马上就要开始了 ,在过去电赛中,当我们遇到需要用视觉的题目时,第一时间想到的就是使用openmv来做视觉处理 ,虽然说可以勉强达到设计目标,但整体上的性能上还是太弱,尤其在检测目标物体的时候受到环境影响非常大 ,所以我今天向大家推荐一款新电赛神器-搭载K210芯片的MaixBit开发板,拥有1TOPs算力,可以运行神经网络模型 ,价格亲民,只要200块就能买到,具体开发板参数介绍:勘智K210芯片介绍

MaixBit开发板:

目前Sipeed官网有一个在线模型训练平台 ,为购买K210产品的用户提供一个在线模型训练,支持目标检测目标分类两种模型,本篇文章将手把手教大家如何使用在线云平台训练目标检测模型(特别简单) ,并将它导入到K210中运行!下面先讲解一下关于目标检测模型和目标分类模型的概念

  1. 目标分类: 识别图像所属的类别 ,例如 applecup,无返回坐标。如下图,它是苹果的概率是0.8 。

  1. 物体检测:检测物体在图片中的位置 ,并输出物体的坐标和物体的大小(即框定识别的物体) 。如下图所示,一个苹果是苹果的概率是0.8,当它被检测到时会被框起来。

下面正式进入目标检测模型训练正文

二、开发准备(软件+环境)

本章用到的资料已打包成文件夹上传到CSDN:地址

  1. K210的Python开发平台MaixPy ,开发方式与OpenMV基本差不多:下载地址,根据自己电脑选择合适版本;

  1. MaixPy界面如下:(基本和OpenMV IDE一样)

  1. Labelimg图片标注软件(软件在我提供的压缩包内),界面如下:(若打不开 ,将C盘\usr\用户名下的labelImgSettings.pkl删除重新打开)

  1. K210固件下载软件,用于下载固件到K210(软件在我提供的压缩包内),界面如下:

  1. 串口调试软件:ATK-XCOM串口调试工具(软件在我提供的压缩包内) ,界面如下

三 、获取训练图片

进行训练首先需要的就是获取目标图片用于训练,此处有两种方法获得图片集,我都做一下介绍

3.1 手机获取图片

手机获取图片的方法主要有两个:1.手机拍摄视频提取图片再转化图片大小 ,2.手机一张一张拍摄在转化图片大小(转化图片大小是把图片大小转化为224*224大小 ,因为k210官方推荐的训练图片大小就是这么大,如果使用的不是这个大小,后面会出现问题)

  1. 手机拍摄一段视频 ,进入在线网页转换为图片:网页地址

通过视频获取图片数据集步骤:点开网页-> 导入视频-> 点击开始后,选择下载ZIP压缩包

提取的所有图片都包含在下载的压缩包里面

  1. 手机拍摄大量图片(这个方法比较累,一张一张拍摄在整合)

以上就是两种获取图片的方法 ,在获取了需要用于训练的图片素材后,他们的大小我们不能确定,需要通过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系列文章

本文版权归qu快排seo www.sEoguRuBlog.com 所有,如有转发请注明来出,竞价开户托管,seo优化请联系QQ√61910465