Mx-yolov3+Maixpy+ K210进行本地模型训练和目标检测
我接触K210同样也是因为一次比赛,需要进行目标检测并对垃圾进行分类,在接触到K210之前我一直使用各种YOLO版本检测,并部署到树莓派和nano上,一次偶然的机会,我发现了K210,这里要感谢我的一位学长,是他带着我开始了K210的学习,让我从盲目的命令行指令转到Maxipy上使用Python来学习K210。我写下这篇博客是为了记录我的学习生活,并感谢这位帮助我的学长。
文章目录
前言
随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,K210便是一个很好的工具。K210是由一家叫做嘉楠的曾经做 挖矿芯片 的公司在去年推出的一款MCU,其特色在于芯片架构中包含了一个自研的神经网络硬件加速器KPU,可以高性能地进行卷积神经网络运算。 可不要以为MCU的性能就一定比不上高端SoC,至少在AI计算方面,K210的算力其实是相当可观的。根据嘉楠官方的描述,K210的KPU算力有0.8TOPS ,作为对比,拥有128个CUDA单元GPU的英伟达Jetson Nano的算力是0.47TFLOPS ;而最新的树莓派4只有不到0.1TFLOPS 。所以K210是你进行深度学习不可多得的好帮手,接下来我们进入正文。
一、所需环境
1.硬件环境
K210开发板
以上系列都可以,我基本上使用过所有Sipeed的K210开发板,他们基本上都是大同小异。
2.软件环境
软件的话这里我推荐使用Mx-yolov3和Maixpy
Mx-yolov3
Maixpy:大家可自行从官网上下载
二、Mx-yolov3
Mx-yolov3是一位大佬写的软件,它需要制定的环境,接下来我会带大家从了解到熟练使用Mx-yolov3
1.软件环境配置
1.python环境
下载软件后打开文件夹你会看到Mx-yolov3配置文件,直接打开他,所需python环境必须是python3.7.4如果你电脑安装了其他版本的python请先卸载,然后在安装。不然会直接给你报错。
2.相关依赖包
python3.7.4环境安装好后,安装Python依赖库和预训练权重,直接点安装就可以,Python环境没有问题安装相应的依赖也是没有问题的,如果在这里报错了,你需要去检查你的环境是不是有问题。
3.GPU训练配置
第三步是选装的在这里我可以进行一些介绍不按照第三步对你接下来的训练检测是没有任何影响的,安装cuda和cudun是为了使用GPU训练,不安装的话电脑会使用CPU训练。
安装步骤很简单,文件夹里有相应的教程在这里我不做过多赘述。(建议大家安装本来就是GPU干的活为什么要让CPU去干呢,而且训练速度也会快很多)
4.总结
1、先安装Python3.7.4 版本,不支持Python3.8版本(因为许多依赖库不支持3.8版本的Python)必须安装在默认路径,否则修改kreas网络将失败。
2、安装依赖库、拷贝权重文件并修改Kreas网络,在安装依赖库的过程中若收到“HTTP”错误,请更换网络环境重试。
3、若需要使用GPU训练,则需要安装CUDA_10.0和Cudnn_7.6.4,安装成功后将自动启用GPU进行训练;安装的网络教程在文件夹内。
2.开始使用
环境配置好之后就可以打开Mx-yolov3软件了
1.模型要求
使用Mx-yolov3进行本地训练一定要将自己的图片转换为224*224大小的图片,否则会出现,识别不准确的问题(在这里提示大家一定不要用苹果手机拍照,一定要用安卓手机)本人亲自踩坑!!!
图片转换好之后进行标注,标注工具可以使用vott,标注工具的使用可以看我另一篇博客,上面介绍了该标注工具的使用以及百度网盘的下载链接。
使用vott标注要导出vocc形式,在那篇博客里也有介绍。
以上使用软件在Image_tool文件夹下
2.开始训练
选择你需要训练的图片的地址以及标注后导出的标签地址,在这里我使用例程口罩训练给大家做演示(打开Mx-yolov3软件,经过简单加载之后,我们将看到它的主界面,重新选择一下训练图片地址和训练标签地址,这两个文件夹都在主目录“datasets/yolo/masks“路径下,其中img文件里面包含着所有的训练图片,而xml文件夹内则包含了所有已标注好的标签文件。)
首先选择好你所训练的模型的地址,如上图
接下来选择种类名称
然后你需要计算你所训练模型的锚点,方法很简单,点击计算即可
接下来你会看到如下图片
然后点击开始训练,你就可以进行训练了,不出意外,你可以看到以下图片内容
等待迭代完毕后,信息栏和终端信息将会同时显示训练结束。
3.模型测试
训练结束后,可以在主目录下的“模型文件”文件夹中找到你刚才训练好的两个模型文件yolov2.h5和yolov2.tflite
接下来点击“测试模型”按钮,选择yolov2.h5模型文件,稍等几分钟,Mx-yolov2将会把测试结果显示出来。
4.转换模型
点击模型转换按钮,打开NNcase0.1_GUI版本,选择刚才训练出来的yolov2.tflite模型文件,保存地址,量化图片地址(训练图片4~5张),点击开始转换,等待一会,将看到如下信息。
5.部署到K210上
首先你需要烧录相应固件,点击工具集,你会下图界面
点击
图标
你会看到如下界面
连接到你的开发板,在文件夹里选择固件烧录,烧录时使用0x300000
烧录完成后将转换得到的yolov2.kmodel模型文件同样烧录到你的K210上,现在你的部署已经完成了,接下来你需要写一个python脚本运行。
三、脚本运行
1.软件
Maixpy,使用Maixpy时要选择对应的开发板
2.代码部分
在这里附上脚本代码
import sensor
import image
import lcd
import KPU as kpu
lcd.init()
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.set_windowing((224, 224))
sensor.set_hmirror(0)
sensor.run(1)
task = kpu.load(0x300000) #使用kfpkg将 kmodel 与 maixpy 固件打包下载到 flash
anchor = (0.9, 1.08, 1.65, 2.03, 2.49, 3.22, 3.28, 4.29, 4.37, 5.5) #通过K-means聚类算法计算
a = kpu.init_yolo2(task, 0.6, 0.3, 5, anchor)
classes=["Masks","Un_Masks"] #标签名称要和你训练时的标签名称顺序相同
while(True):
img = sensor.snapshot()
try:
code = kpu.run_yolo2(task,img)
except:
print("TypeError")
#a=img.draw_rectangle([0,0,360,20],0xFFFF,1,1)
if code:
for i in code:
a=img.draw_rectangle(i.rect(),(255, 255, 255),1,0)
a=lcd.display(img)
# = img.draw_string(0,0, classes[i.classid()], color=(0,255,0), scale=2)
for i in code:
lcd.draw_string(i.x()+40,i.y()-30,classes[i.classid()] , lcd.RED, lcd.WHITE)
lcd.draw_string(i.x()+40,i.y()-10,str(round((i.value()*100),2))+"%", lcd.RED, lcd.WHITE)
else:
a = lcd.display(img)
a = kpu.deinit(task)
连接运行即可
四、脱机运行
1.步骤
将转换得到的yolov2.kmodel模型文件、模型文件文件夹内的anchor.txt文件、label.txt文件、程序文件内的物体分类脚本boot.py拷贝到sd卡即可
2.boot文件代码
import sensor
import image
import lcd
import KPU as kpu
lcd.init()
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.set_windowing((224, 224))
sensor.set_hmirror(0)
sensor.run(1)
task = kpu.load("/sd/yolov2.kmodel")
f=open("anchors.txt","r")
anchor_txt=f.read()
L=[]
for i in anchor_txt.split(","):
L.append(float(i))
anchor=tuple(L)
f.close()
a = kpu.init_yolo2(task, 0.6, 0.3, 5, anchor)
f=open("labels.txt","r")
labels_txt=f.read()
labels = labels_txt.split(",")
f.close()
while(True):
img = sensor.snapshot()
code = kpu.run_yolo2(task, img)
if code:
for i in code:
a=img.draw_rectangle(i.rect(),(0,255,0),2)
a = lcd.display(img)
for i in code:
lcd.draw_string(i.x()+45, i.y()-5, labels[i.classid()]+" "+'%.2f'%i.value(), lcd.WHITE,lcd.GREEN)
else:
a = lcd.display(img)
a = kpu.deinit(task)
然后上电运行即可
使用K210训练模型检测模型就可以顺利进行了。感谢大家看到了最后一行。
总结
这是我学习K210后写下的一篇博客,写下这篇博客的目的是为了记录自己的学习生活,同时让更多的人能够更快的了解到K210,后续我会对K210的一些具体使用写一篇博客。到此这篇博客就结束了,并再一次感谢那位带我一起学习的学长。在附上这位学长博客的链接哦(https://blog.csdn.net/hyayq8124)
来源:我与nano