这次我准备用K210进行橡皮的目标检测。

一、采集图片

用手机拍40s左右的视频,然后在桌面建一个video文件夹,里面建一个rubber文件夹,将视频上传至rubber文件夹中。

rk3399目标检测 k210 目标检测_数据集

下一布将视频转成图片:我用DataAssitant v1.2这个软件,软件我是通过一位up视频获取的,打开软件将预处理模式切换成目标检测

rk3399目标检测 k210 目标检测_固件_02

然后选择到刚刚在桌面创建的video文件夹,不要选到rubber文件夹

rk3399目标检测 k210 目标检测_固件_03

然后点击开始处理,提取成功后关闭软件,发现刚刚video/rubber文件夹里面都转图片了,一共了213张。但是图片的分辨率是720×1280的;MaixHub上要求图片的分辨率为224×224。

rk3399目标检测 k210 目标检测_固件_04


rk3399目标检测 k210 目标检测_ide_05

下一步就是将图片的分辨率调整到224*224,这里我用到了一个py脚本,在桌面上新建一个python文件,将下列代码复制进去。

from PIL import Image
import os.path
import glob
def convertjpg(jpgfile,outdir,width=224,height=224):
  img=Image.open(jpgfile)
  try:
    new_img=img.resize((width,height),Image.BILINEAR)  
    new_img.save(os.path.join(outdir,os.path.basename(jpgfile)))
  except Exception as e:
    print(e)
for jpgfile in glob.glob("video/rubber/*.JPG"):
  convertjpg(jpgfile,"images")

然后在桌面上创建一个images文件夹,用来存放转成功后的图片。下面运行python脚本。查看images文件夹内,图片成功转成224×224了,可以将原本video文件夹删去。

rk3399目标检测 k210 目标检测_固件_06

二、标注数据集

这一步我在B站看一个up主的视频对我帮助很大,点击链接

1.首先在桌面上新建一个文件夹rubber,将images文件夹移至rubber文件夹内,然后在rubber文件夹内建一个xml文件夹和labels.txt文本文件,打开label.txt输入rubber,保存关闭文件。

rk3399目标检测 k210 目标检测_rk3399目标检测_07

rk3399目标检测 k210 目标检测_rk3399目标检测_08

2.标注数据集的工具我使用的是labeling:下载链接 打开工具,点击Open Dir选择images文件夹

rk3399目标检测 k210 目标检测_rk3399目标检测_09

继续点击Change Save Dir,选择xml文件夹

rk3399目标检测 k210 目标检测_数据集_10

labellmg快捷键图下

rk3399目标检测 k210 目标检测_固件_11

接下来开始标注,先点击view下面的Auto Save Mode,可以自动保存,然后按下快捷键w是创建矩形框,框注要检测的范围,然后标注rubber,按下回车键,标注成功后会在xml文件夹里产生一个*.xml文件,快捷键d下一张图片,循环以上步骤,直至标完所有图片。

rk3399目标检测 k210 目标检测_ide_12


rk3399目标检测 k210 目标检测_数据集_13

训练完毕后关闭工具,将rubber文件夹压缩成rubber.zip。

三、上传数据集进行训练

1.获取机器码

首先需要下载kflash_gui工具,用来烧录固件,还需要下载key_gen_v1.2.zip固件用来获取机器码,然后打开kflash_gui工具,选择刚刚下载的固件,开发板设置根据自己的开发板设置,用数据线连接开发板,点击下载。

rk3399目标检测 k210 目标检测_数据集_14

下载成功后关闭工具。

rk3399目标检测 k210 目标检测_ide_15

接下来需要一个串口调试助器,我这里的波特率是115200,查看机器码

rk3399目标检测 k210 目标检测_ide_16

关闭串口调试器,点击网址,开始训练,首先创建任务,分类选目标检测

rk3399目标检测 k210 目标检测_固件_17

然后上传数据集,选择rubber.zip,点击开始训练。

rk3399目标检测 k210 目标检测_数据集_18

等待几分钟就可以完成训练,可以打把王者放松一下。

rk3399目标检测 k210 目标检测_固件_19

成功完成, 训练结果会发送到邮箱里,下载压缩包即可。文件夹内容如下图所示,比较重要的是boot.py的脚本文件和m.kmodel模型文件。

rk3399目标检测 k210 目标检测_ide_20

打开boot.py文件翻到最下面,程序默认是使用sd卡的,由于我没有使用sd卡,注释第二行,使用第一行的main函数。要注意模型地址是0x300000,等会需要用。

rk3399目标检测 k210 目标检测_ide_21

接下来,下载最新的固件,这里我下载的这个固件

rk3399目标检测 k210 目标检测_ide_22

然后打开kflash_gui工具烧录固件

rk3399目标检测 k210 目标检测_rk3399目标检测_23

烧录成功后,烧录模型,这里模型的地址得是0x300000,得和程序里面对应,点击下载。

rk3399目标检测 k210 目标检测_ide_24

下载成功后,用MaixPy IDE打开root.py,用数据线连接开发板,运行脚本,运行效果还算满意,有些偏差,可能是标注数据集时,一些细节没注意到。

rk3399目标检测 k210 目标检测_固件_25