k210——Maixhub 云端模型训练

k210——Maixhub 云端模型训练

一、前言

k210的模型训练可以在Maixhub 上进行,只需要准备好需要训练的数据集, 不需要搭建训练环境和代码, 上传训练数据即可快速训练出模型。

Maixhub 有分类模型和目标检测模型训练,我们只要确定训练的类型,然后制作数据集,上传到云端进行训练就可以了。

二、获取数据集

数据集可以直接在Maixhub 云端制作,也可以用labelimg标注,用labelimg标记要按照Maixhub要求的文件格式上传压缩包,具体可以在Maixhub里面看见,如果直接在Maixhub上传图片在那里标注也可以。

数据集图片可以拍摄一小段视频,然后到这个网站转成图片的格式https://www.img2go.com/,这样很方便,不用一张一张拍很麻烦,视频最好三十多秒不要超过四十秒,因为每次下载最多下载四百张图片,超出不能下载,又得重新拍,大概10秒一百张左右,视频转成图片的时候要记得修改图片的大小,比如我需要的图片是224*224就改成这个。

然后就点击创建任务,修改相应的参数,然后就可以开始训练了

训练得很快,训练结束后就可以开始部署了,我选择手动部署

下载得到模型文件,解压后文件夹里面有以下三个文件

可以将.kmodel下载到sd卡,这里我是将.kmodel文件用kflash_gui软件下载到flash里面,k210的flash是0x300000,所以在下载的时候要注意修改一下地址

main.py是脚本文件,可以直接将其复制到maixpy IDE软件里面运行,然后就看到识别效果了,这里我结合了串口通信,用usb转ttl模块,识别到一次物体就从k210上发送数据到串口助手里。以下是代码和实验结果。

三、代码和结果

代码的编写流程和main.py的差不多,lcd初始化,摄像头初始化,加载模型在YOLO初始化,进入while循环,读取图像,运行YOLO,画矩形框,显示标签,串口发送,打印到lcd。

import sensor, image, lcd, time
import KPU as kpu
import gc, sys
from machine import UART
from fpioa_manager import fm
#重映射串口
fm.register(10, fm.fpioa.UART1_TX, force=True)
fm.register(9, fm.fpioa.UART1_RX, force=True)

uart_A = UART(UART.UART1, 115200, 8, 1, 0, timeout=1000, read_buf_len=4096)#串口初始化

labels = ['bottle'] #标签
anchors = [3.81, 5.5, 3.58, 5.3, 4.03, 5.78, 2.98, 4.12, 4.19, 5.66]    #锚点

lcd.init(type=1)                    #初始化LCD
sensor.reset()                      #初始化单目摄像头
sensor.set_pixformat(sensor.RGB565) #设置帧格式
sensor.set_framesize(sensor.QVGA)   #设置帧大小
sensor.set_windowing((224, 224))
sensor.set_hmirror(0)               #设置摄像头镜像
sensor.set_vflip(0)                 #设置摄像头垂直翻转
sensor.run(1)                       #使能摄像头,开始抓取图像

task = kpu.load(0x300000)           #从flash或者文件系统中加载模型,不需要关键词,传入参数即可,比如0x300000;"/sd/m.kmodel"
kpu.init_yolo2(task, 0.5, 0.3, 5, anchors)  #初始化yolov2

while(True):
    img = sensor.snapshot()         #读取一帧图像
    t = time.ticks_ms()             #记录当前时间
    objects = kpu.run_yolo2(task, img)  #运行yolo2, 返回一个kpu_yolo2_find 列表
    t = time.ticks_ms() - t             #记录当前时间,与上一次的做差,得到运行一帧需要的时间
    if objects:
        for obj in objects:             #列表不为空的话,遍历并画出个矩形框
            pos = obj.rect()            #rect类的变量为左上角点的坐标和矩形的宽和高,(x,y,width,height)
            a = img.draw_rectangle(pos)     #在图像上绘制一个矩形。此处为作为元组传递回坐标框出矩形
                                            #传回的是检测到的图像的四个坐标
            img.draw_string(pos[0], pos[1], "%s : %.2f" %(labels[obj.classid()], obj.value()), scale=2, color=(255, 0, 0))#矩形框左上角显示标签和准确率
            uart_A.write(labels[obj.classid()]+'\r\n')  #将识别到的物体标签发送到串口助手

    img.draw_string(0, 200, "t:%dms" %(t), scale=2, color=(255, 0, 0))   #在图像上显示时间
    lcd.display(img)                        #将图像打印到lcd上
a = kpu.deinit(task) #反初始化,kpu_load 返回 kpu_net 对象

效果:

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
xiaoxingxing的头像xiaoxingxing管理团队
上一篇 2023年8月4日
下一篇 2023年8月4日

相关推荐