K210从入门到不了精通

简介

开发板上手

学习K210最好的教程就是MaixPy官方的WiKi——MaixPy 文档简介 - Sipeed Wiki,本文的绝大部分内容也是从这里面引用的。

鄙人画的开发板已验证通过,详情见立创开源
在这里插入图片描述
若想要验证软件功能,推荐购买Sipeed Maix Bit(带屏幕价格¥190),软件验证玩完成后,即可部署在鄙人设计的超迷你K210平台上。

首先,可以参考官方教程完成对功能的验证和开发环境的熟悉。
K210上手指南
K210可以使用裸机开发,也可以使用MaixPy IDE用Python进行开发。使用MaixPy IDE进行开发时,可以使用OpenMV库,可调用KPU加速神经网络算法。本文主讲使用MaixPy IDE开发将模型部署在K210上。接下来继续讲解。

训练模型

训练什么模型?

支持的模型类型

因为在开发板上面跑的模型是特定格式的,所以需要使用nncase将传统的模型转换成kmodel格式。故,训练模型也要考虑训练出来的模型格式能否被nncase转换。
必看:
K210 KPU硬件加速
nncase开源主页

支持的算子

kmodel V3 模型 和 V4 模型#

由于代码更新, 在过程中产生了两个大版本, V3V4, 其中 V3 模型是指用 nncase v0.1.0 RC5 转换出来的模型; V4模型指用 nncase v0.2.0 转换出来的模型
两者有一定的不同,所以现在两者共存, V3 代码量更少,占用内存小,效率也高,但是支持的算子少; V4 支持的算子更多,但是都是软件实现的,没有硬件加速,内存使用更多,所以各有所长。 MaixPy 的固件也可以选择是否支持 V4

K210 的硬件环境

K210 有 6MB 通用 RAM 和 2MB KPU 专用 RAM。模型的输入和输出特征图存储在 2MB KPU RAM 中。权重和其他参数存储在 6MB 通用 RAM 中。

可以被 KPU 完全加速的算子

下面的约束需要全部满足。

  • 特征图尺寸:输入特征图小于等于 320x240(WxH) 同时输出特征图大于等于 4x4(WxH),通道数在 1 到 1024。
  • Same 对称 paddings (TensorFlow 在 stride=2 同时尺寸为偶数时使用非对称 paddings)。
  • 普通 Conv2D 和 DepthwiseConv2D,卷积核为 1x1 或 3x3,stride 为 1 或 2。
  • MaxPool(2x2 或 4x4) 和 AveragePool(2x2 或 4x4)。
  • 任意逐元素激活函数 (ReLU, ReLU6, LeakyRelu, Sigmoid…), KPU 不支持 PReLU。

可以被 KPU 部分加速的算子

  • 非对称 paddings 或 valid paddings 卷积, nncase 会在其前后添加必要的 Pad 和 Crop。
  • 普通 Conv2D 和 DepthwiseConv2D,卷积核为 1x1 或 3x3,但 stride 不是 1 或 2. nncase 会把它分解为 KPUConv2D 和一个 StridedSlice (可能还需要 Pad)。
  • MatMul, nncase 会把它替换为一个 Pad(到 4x4)+ KPUConv2D(1x1 卷积和) + Crop(到 1x1)。
  • TransposeConv2D, nncase 会把它替换为一个 SpaceToBatch + KPUConv2D + BatchToSpace。

传统训练方式

能训练出可供nncase转化的模型文件即可,无论是YOLO v3还是YOLO v5,或者是TensorFlow等。

使用Mx-yolo进行训练

Mx-yolo下载链接

美丽、清爽的界面

请添加图片描述
界面使用了html、css、js共同完成,减少了软件出现崩溃闪退的情况。

更少的参数设置

请添加图片描述
目标检测和图像分类模型训练不需要再设置种类标签、计算Anchors等设置,这些都将在点击“开始训练”按钮后程序自动完成。

训练模型、测试模型、转换模型一次完成

请添加图片描述

模型训练完成后,程序将自动验证模型并转换模型,完成后找到训练记录,即可查看模型训练信息、预测结果、Loss图表、混淆矩阵、训练日志等内容。
请添加图片描述

集成图片标注工具、图片爬取工具、以及K210下载工具

在这里插入图片描述
带有汉化版的labelImg,并修复原版labelImg中的多个错误。
新版本的图片爬取工具,目前能够正常爬取主题图像。
更多可关注”import 创客“了解。

MaixHub在线训练

使用MaixHub进行训练

MaixHub主页

请添加图片描述

MaixHub

开源库

在这里插入图片描述
不算丰富,用来学习还可以,做项目不大行。

免费在线训练

免费云服务训练(图像分类、图像检测)
在这里插入图片描述
训练流程
在这里插入图片描述

转换与部署模型

可参考的教程:
20种目标分类-YOLO转化kmodel教程
口罩检测模型训练及其在K210部署
当然,你还是需要参考这两个网页:
K210 KPU硬件加速
nncase开源主页
还有下面俩网页:
部署模型到K210
nncase指令
其他常见问题:
nncase/FAQ_ZH.md

程序编写

建议先阅读阅读官方例程
接下来是让让K210调用模型的代码。照猫画虎即可,如果不清楚某些函数的用法,官方WiKi的API手册

from Maix import GPIO, I2S, FFT
import image, lcd, math,sensor,time,utime
import KPU as kpu
from fpioa_manager import fm
io_led_red = 14
#灯的颜色和对应代码配对,驼峰式
fm.register(io_led_red, fm.fpioa.GPIO0)
led_r=GPIO(GPIO.GPIO0, GPIO.OUT)

#对摄像头进行初始化
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.set_brightness(2)
sensor.set_vflip(1)
sensor.run(1)

#初始化液晶屏
lcd.init(freq=15000000)
lcd.clear()

clock = time.clock()
#标签类名
classes = ['aeroplane', 'bicycle', 'bird', 'boat', 'bottle', 'bus', 'car', 'cat',
'chair', 'cow', 'diningtable', 'dog', 'horse', 'motorbike', 'person',
'pottedplant', 'sheep', 'sofa', 'train', 'tvmonitor']

#加载SD卡中的模型
task = kpu.load("/sd/yolo.kmodel")

##测试模型是否加载成功,如成功会返回模型地址和模型尺寸 测试使用
#lcd.draw_string(1, 1, str(task), lcd.RED, lcd.BLACK)

#设置锚框大小
anchor = (1.08, 1.19, 3.42, 4.41, 6.63, 11.38, 9.42, 5.11, 16.62, 10.52)
#初始化kpu yolo
#形参:模型尺寸,mp_obj
a = kpu.init_yolo2(task, 0.5, 0.3, 5, anchor)
while(True):
    #用于计算FPS值
    clock.tick()
    img = sensor.snapshot()
    code = kpu.run_yolo2(task, img)
    print(clock.fps())
    if code:
        for i in code:
            a=img.draw_rectangle(i.rect())
            a = lcd.display(img)
            for i in code:
                if classes[i.classid()]=='person':
                    lcd.draw_string(i.x(), i.y(), classes[i.classid()], lcd.RED, lcd.WHITE)
                    lcd.draw_string(i.x(), i.y()+12, '%.1f'%i.value(), lcd.RED, lcd.WHITE)
                    led_r.value(1)
                    utime.sleep_ms(1500)
                else:
                     lcd.draw_string(i.x(), i.y(), '')
    else:
        a = lcd.display(img)
a = kpu.deinit(task)

(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.skip_frames(time = 2000)

clock = time.clock()

while(True):
    clock.tick()
    img = sensor.snapshot()
    print(clock.fps())

拓展阅读

K210 kmodel 模型储存数据结构
同时运行多个模型、如内存不足

拓展阅读

K210 kmodel 模型储存数据结构
同时运行多个模型、如内存不足
阈值编辑器的使用、烧录多个模型

  • 4
    点赞
  • 70
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值