云端训练模型,本地部署于K210

本文详细介绍了如何使用Sipeed的云端模型训练平台训练目标检测模型,并将模型部署到K210开发板上。通过手机或K210拍摄图片,利用Labelimg进行标注,然后在云端进行模型训练。训练完成后,将模型导入K210,实现本地运行。实验结果显示,K210在目标检测上的表现优于OpenMV。
摘要由CSDN通过智能技术生成

云端训练模型,本地部署于K210

一、前言

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

MaixBit开发板:
在这里插入图片描述

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

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

img

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

img

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

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

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

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

20210522195333

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

20210527225950

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

20210527230359

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

20210522200739

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

20210527225905

三、获取训练图片

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

3.1 手机获取图片

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

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

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

20210522224126

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

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

以上就是两种获取图片的方法,在获取了需要用于训练的图片素材后,他们的大小我们不能确定,需要通过imgtool软件进行转换,软件在我提供的压缩包内;把图片转换成224*224,具体步骤如下:

把所有图片放在一个images文件夹下(名字要和我一样)

20210527205617

打开Imgtool选择存放图片的文件夹,开始转换

20210527205726

转换后生成一个images_out文件夹,我们删除原先文件夹,把images_out改名为images文件夹

20210527205810

到此通过手机获取的图片集就准备好了!

3.2 通过K210进行图片拍取

上一步我们用手机获取图片集,但手机的效果并不是最佳,最佳的效果是使用K210直接进行图片拍摄,获取224*224格式的图片,具体步骤如下:

首先确保K210自身固件为出厂固件,固件在我准备的文件夹内,如果不是可以刷一下固件,固件位置在下图中我框选出来了,刷固件步骤可以提前参考下面刷机器码步骤(如果是出厂固件无需再刷固件),同时需要一张格式化为FAT32的内存卡,用于存储图片
20210527213355

固件准备就绪后,打开maixpy IDE软件,选择拍照文件夹下的photo.py进行打开

20210527213954

打开后点击做下架绿色图标连接K210

20210527214047

连接后,点击绿色播放按钮,程序正常运行,图片数据反馈回MaixPyIDE

20210527214214

我们对准我们需要的训练的目标,按下MaixBit上的Boot按键,图片就可以保存到内存卡里面,下图为我采集的照片,照片已经为224*224大小,所以无需再进行转换便得到图片集

20210527215516

四、获取训练集

经过上一步,我们获取了224*224大小的目标图片集,这一步我们将使用标注软件labelimg对获取的训练集进行标注,步骤如下:

桌面新建文件夹dataset,dataset下在建立一个usb文件夹,文件夹内建立两个文件夹分别叫images和xml,以及一个labels.txt的文本文件(名字一定要对上)

20210527220433

将所有处理过的图片放到images内(图片不能为中文名字)

20210527221108

打开labelimg,选择open dir打开图片集目录

20210527221236

点击change save dir,选择标注数据(.xml文件)输出目录

20210527221300

点击view->auto save mode自动保存,方便我们标注

20210527221446

之后按下快捷键W进行图片标注,框选出目标物体,然后标签写入usb

20210527222258

标注后按下快捷键D切换下一个,快捷键A切换上一个,重复以上步骤,一直到标注完成

标注完成后,我们在labels.txt内写入所有的标签(标注了几种写几种,换行隔开),此处我只标注了usb一种,所以填一个usb;

20210527222813

标注完成之后,我们可以看到文件夹的内容框架如下:

20210527221029

之后我们将整个文件夹压缩为ZIP格式文件,到这用于目标检测模型的训练集就做好了!

五、网络平台训练

在准备好训练集后,我们下一步就是将模型上传到Sipeed的模型平台进行训练,具体步骤如下:

5.1 获取机器码

使用Sipeed的模型平台需要有k210的机器码才能训练,机器码是每个k210独有的一个标识码,获取过程如下

5.1.1 下载固件

打开kflash_gui,通过kflash下载bin文件到K210,bin文件在MaixBit文件夹下固件下面的key_gen.bin文件

20210522184414

5.1.2 串口读取

固件下载完成之后,打开XCOM软件,连接串口,设置波特率115200,按下开发板上的复位按钮,串口会发送机器码信息,如下图

20210522202243

此处的机器码就是当前机器的机器码了,把它保存住,留着后面使用,注意一点此时的k210固件是刷机器码的固件,我们需要刷回支持运行模型的固件,在固件文件夹内我准备了两个固件,一个是出厂固件,一个是官方推荐的运行模型固件,具体对应如下表,我们刷入官方推荐的固件,为之后运行模型做准备!

文件名说明备注
maixpy_vx.y.z_x_xxx*.bin默认版本的 MaixPy 固件,包含了大多数功能, 支持连接 MaixPy IDE,出厂默认固件版本
maixpy_vx.y.z_x_xxx*_minimum_with_ide_support.binMaixPy 固件最小集合, 支持连接 MaixPy IDE, 不包含OpenMV的相关算法和各种外设模块运行各种模型,建议使用这个

5.2 提交训练集到模型平台

获取了机器码后,下一步我们进入到Sipeed的官网:Sipeed,进入到官网后注册一个账号(步骤略过),点击官网的模型平台->选择模型训练,在下图位置填入机器码,并且选择物体检测;

20210528232814

然后点击next,上传模型压缩包(ZIP格式),再点击next一直到submit,提交后我们就可以在自己的主页中看到模型正在排队,等排到我们的时候就会开始训练了,我的训练集给了200张,训练差不多要半个小时,下图是训练完成的界面

20210528233635

到此模型训练就结束了

六、模型导入

6.1 压缩包文件信息

模型训练结束后下一步就是把模型导入到k210中运行,首先把我们训练好的模型压缩包下载下来,压缩包内容如下:

20210528234117

其中startup.jpg是启动界面图片,无需关注,report是模型训练的结果

20210528234816

两个曲线的对应关系

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后下载

20210529104543

改变boot.py里面的代码,注释掉从SD卡启动的代码,取消从flash启动代码的注释,然后通过MaixPy点击运行,K210就可以检测模型了

20210529104732

七、实验现象

K210运行了模型之后,对准目标物到中心位置时检测率很高,但因为我的数据集少的原因,在侧面检测的识别率不高,运行一段时间没有误检测的情况,效果比我之前用Openmv好很多!!!

在这里插入图片描述

八、K210系列文章

  • 149
    点赞
  • 770
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 132
    评论
对于K210本地训练模型,你可以按照以下步骤进行操作: 1. 准备数据集:首先,你需要准备一个适合K210的数据集。这可以是图像、声音或其他类型的数据集,取决于你的具体需求。 2. 构建模型:接下来,你需要选择合适的模型架构来训练。K210支持多种模型架构,如ResNet、MobileNet等。你可以选择一个适合你任务的模型,并进行相应的修改。 3. 数据预处理:在训练模型之前,你需要对数据进行预处理。这可能包括数据的归一化、裁剪、缩放等操作,以确保数据的质量和一致性。 4. 训练模型:使用准备好的数据集和预处理后的数据,你可以开始训练模型。你可以使用K210提供的开发工具链和库来训练模型。在训练过程中,你可以调整超参数、监控模型性能并进行模型调优。 5. 优化模型:一旦模型训练完成,你可以对模型进行优化,以提高其性能和效率。这可以包括剪枝、量化、深度压缩等技术。 6. 部署模型:最后,你可以将训练好的模型部署K210上进行推理。这可以是通过编写适合K210的代码,或使用K210提供的开发工具链和库进行部署。 需要注意的是,K210的训练资源相对有限,因此在训练过程中可能需要进行一些优化和调整,以适应其硬件限制。此外,K210的本地训练模型与其他平台可能存在一些差异,你可能需要参考K210的文档和示例代码来进行操作。
评论 132
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Top嵌入式

投喂个鸡腿

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值