最近简单学习使用了如何使用k210识别模型,记录一下自己的使用过程和踩过的坑。
目录
一、所需软件
下载Mx_yolo:百度网盘链接 提取码: f8g9
二、Mx_yolo安装和配置
打开打开mx_yolo安装路径,打开环境配置,找到使用前配置.exe
。
1.安装python3.7
安装python3.7。若之前安装过其他python版本,请先将其卸载干净再安装。
2.安装依赖库
安装好python3.7后,点击安装python依赖库与预训练权重。若此步出现问题,大概率是存在其他版本的python未卸载干净。
3.安装CUDA和Cudnn
如果想使用电脑GPU进行训练,就进行这一步(建议电脑有显卡的同学都安装)
点击安装会跳转到\Mx-yolov3_EN_1.2\1.环境配置\data\CUDA+Cudnn
,文件夹内有详细的安装说明,仔细观看即可。
三、训练模型
打开Mx_yolov3
1.检测环境是否安装好
以例程口罩的模型进行检测。点击 计算anchor,不出意外会报错,提示未安装numpy。(如果报错不是未安装numpy,请继续往下翻阅)
win+r,输入cmd,cmd中输入
pip install numpy==1.16.2 -i https://pypi.tuna.tsinghua.edu.cn/simple
装好numpy库后,再次点击计算anchor,成功得到anchor值。
进行下一步,测试模型。点击右侧控制台开始训练
不出意外又会有报错,提示XXX未安装
打开\Mx-yolov3_EN_1.2\1.环境配置\data\pip.txt
,里面写了每个库应该安装的版本(当初一个版本一个版本的试,因为库版本不符合无法运行,是血泪了😭)
imgaug==0.2.6
opencv-python==4.0.0.21
Pillow==6.2.0
requests==2.24.0
tqdm==4.48.2
sklearn==0.0
pytest-cov==2.10.0
codecov==2.1.8
matplotlib==3.0.3
Tensorflow==1.15.0
Tensorflow_gpu==1.15.0
pascal_voc_writer==0.1.4
PyQt5==5.15.0
numpy==1.16.2
keras==2.3.1
scikit-learn==0.22.2
seaborn==0.11.0
alive-progress==1.6.1
h5py==2.10.0
pyecharts==1.9.0
matplotlib==3.0.3
需要安装哪个库,就在cmd中输入
pip install 包名==版本号 -i https://pypi.tuna.tsinghua.edu.cn/simple
解决一个报错就点击一次训练模型,当模型能正常训练的时候,恭喜你!环境配置完成了!
2.采集图像、打标签
用手机对拍摄照片,每一个对象拍摄张数最好不少于50张。使用Mx_yolo训练,要先将照片转化为224*224大小。转换工具:\Mx-yolov3_EN_1.2\Image_tool\Image_tool.exe
转化完成后打标签,个人比较喜欢这个线上标注网站MakeSense:点击跳转
点击右下角Get Started
,进入
点击Click here to select then
,进入转化好的图片文件夹,全选图片后点击Object Detection
点击中心添加标签,有几类物体就添加几项,回车即可添加标签
标签添加完成后,点击Start project
,接下来开始打标签就好啦
打完标签后,点击Actions——Export rect annotations
,选择第二项balabala XML format
3.开始训练及模型测试
再次打开Mx_yolov3,物体识别。将训练图片地址、标签地址改成对应的地址,种类名称改成自己的标签名(一定要和你打标签的时候的顺序对应)。
点击计算anchor,无报错后点击开始训练,静静等待数十分钟。
在\Mx-yolov3_EN_1.2\Model_file
中会出现你训练好的模型
点击测试模型
,选择训练的.h5模型,将会出现检测结果,如果检测结果没有问题,准备移植到k210上
4.转换模型
点击转换模型
,在nncase 0.1.0模型转换QT版本
中选择好输入输出路径,量化图片路径可以选择训练图片,等待h5模型转换为适用于k210的kmodel模型。
四、移植至k210
1.打开kflash,准备烧录固件
点击增加文件,打开\Mx-yolov3_EN_1.2\Maix程序与固件\固件
里的固件,默认地址0x000000
(如果需要使用openmv的功能,请至maixpy下载站:点击跳转 下载完整固件包)
打开生成的kmodel模型,输入地址0x300000,点击打包为kfpkg
,一秒后打包完成。
点击kmodel文件后的叉,选择刚打包的kfpkg文件,地址0x00000,点击下载烧录进K210
2.打开maixpy,选择开发板、串口,写入程序
import sensor, image, time, lcd
import KPU as kpu
import utime
from Maix import GPIO
from fpioa_manager import fm
sensor.reset() # Reset and initialize the sensor. It will
# run automatically, call sensor.run(0) to stop
sensor.set_pixformat(sensor.RGB565) # Set pixel format to RGB565 (or GRAYSCALE)
sensor.set_framesize(sensor.QVGA) # Set frame size to QVGA (320x240)
sensor.skip_frames(time = 2000) # Wait for settings take effect.
sensor.set_windowing((224, 224))
sensor.set_vflip(1) #摄像头竖直翻转“1””“0”
sensor.set_hmirror(1) #水平翻转
sensor.run(1)
clock = time.clock() # Create a clock object to track the FPS.
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=["unMasks","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)
若想脱机运行,工具——将打开的脚本保存至开发板