【实战】K210训练与部署YOLO目标检测模型

【实战】K210训练与部署YOLO目标检测模型

文章目录

  • 【实战】K210训练与部署YOLO目标检测模型
  • 材料准备
  • 项目目标
  • 实验步骤
    • 一、数据集制作
      • 1. 准备数据集
      • 2. 标注图片
    • 二、模型训练
      • 1.Mx-yolov3环境配置
      • 2.Mx-yolov3模型训练和部署
  • 总结


材料准备

  • K210(Maix Bit)
  • MaixPy IDE (下载链接:https://pan.baidu.com/s/1DuqdPzniZ5lrcbtoZAJkQg 提取码:q67r)
  • Mx-yolov3 (下载链接:https://pan.baidu.com/s/1Gl3Qfw5s8LZuu2wc1GTITg 提取码:dvsf)
  • TF卡及读卡器

项目目标

使用部署在K210上的YOLO模型完成水面漂浮垃圾的检测与识别任务

实验步骤


一、数据集制作

1. 准备数据集

目标检测: 每类图片数量不低于100张, 建议采集200~400张,数据集大小决定了模型的质量
因为模型最终部署在K210上,所以直接使用K210采集数据集图片。采集图片脚本如下:

链接:https://pan.baidu.com/s/1bBLRuzbX0w3ZFzC3oPwhMQ 提取码:mutk
注意:上面这个脚本需要在文件最后顶格添加一行main()才能运行。(亲身实践,在maix-bit上能顺利运行。但是在拍照过程中时常出现卡死的情况,频繁上下电和reset,导致最后在TF卡里生成多个文件夹,且每个文件夹里图片均从0开始命名,后面合并非常麻烦,不得不撸几个脚本批量完成图片的重命名工作。)

图片批量重命名脚本如下:

# -*- coding: utf-8 -*-
import os

path = 'E:\cap_images_0\\0'	# path为插上读卡器后,所要批量重命名的目录
num = 334	# num为第一张图片序号
for file in os.listdir(path):
    os.rename(os.path.join(path, file), os.path.join(path, str(num) + ".jpg"))
    num += 1

回归正题,下载好并修改拍照脚本后,将脚本命名为boot.py并(通过读卡器)放到FAST格式化后的TF卡上,如下图所示
【实战】K210训练与部署YOLO目标检测模型_第1张图片
接着拔出TF卡插入K210中(先插卡再上电),接好配套的LCD显示屏和摄像头,上电。k210上电后,系统会优先在 \sd 目录创建 boot.py和 main.py 两个文件,因为我们重写了boot.py所以系统只会新建 main.py 而不再重复新建 boot.py 。当然这无关紧要,如果在 boot.py 里面写死循环(While True)程序,将会导致 main.py 不能运行(先调用 boot.py 后调用 main.py)。相当于开机k210进入死循环,一直检测按键状态完成拍照并保存。

boot.py 主要用于配置硬件,只配置一次即可。
main.py 可以用于主要的运行的程序。


K210拍摄得到训练图片如下图所示:

【实战】K210训练与部署YOLO目标检测模型_第2张图片

2. 标注图片

使用标注软件labelImg进行图片标注,labelImg使用此处不予详述。标注过程如下图所示:

问题和解决方法:

  • 训练过程中报错Corrupt JPEG data: premature end of data segment,经查阅,原因为训练图片解码后超内存导致数据流被截断损坏。解决方法是将图片进行压缩(具体压缩到多大得依据Mx-yolo中训练模型的源码),我使用的训练图片原大小为20KB,使用image tool工具(Mx-yolov3提供有)处理后,图片被压缩到了8KB,训练过程便不再报错。

二、模型训练

1.Mx-yolov3环境配置

Mx-yolov3环境配置详情参考下面这篇博客:

https://mc.dfrobot.com.cn/thread-308931-1-1.html

问题和解决方法:

  • 当电脑中已安装有其他版本的python且没有python3.7时,无需删除原来的python,只需要下载python3.7并将路径添加至系统环境变量即可。个人建议使用anaconda新建一个专门适用于Mx-yolov3的虚拟环境,这样比较利于管理,配置python系统环境变量时指向anaconda的envs文件夹下对应的虚拟环境路径即可。需要注意的是,在配置系统环境变量时,path值目录中有多个python的时候,系统会优先选择指向anaconda下的python,我是删除了其他python路径,仅留下Mx-yolov3虚拟环境下的python。
    配置成功后,命令行输入python回车结果如下图:
    【实战】K210训练与部署YOLO目标检测模型_第3张图片
  • 当电脑中已安装了cuda其他版本且没有我们实验所需的cuda10.0时,安装Mx-yolov3文件夹中提供的cuda。注意,在安装过程中安装向导会让你选择两个路径,前者是临时解压路径,后者才是安装路径,在安装完成后会删除临时解压路径下的所有文件。由于没有注意到这一点,以至于我两个路径选成一样的,导致了安装成功后找不到cuda的文件夹/蠢哭。在正常安装完成后,一般安装程序会自动为系统添加cuda的环境变量,此时只需要用命令行键入 nvcc -Vnvcc -version 得到两个结果中显示的版本一致,且都为10.0即表示cuda配置成功。但是我在第一次安装成功后查看版本时发现一个是10.0一个是10.1(之前安装的cuda版本),于是就把之前版本的环境变量从path中删除了,再次查看,得到如下图所示结果,配置成功。
    【实战】K210训练与部署YOLO目标检测模型_第4张图片

2.Mx-yolov3模型训练和部署

模型训练教程详情参见博客:

https://blog.csdn.net/weixin_39680380/article/details/111137088
ps:如果直接使用Mx-yolov3提供的boot.py检测例程,需要自己使用lcd.rotation()微调一下屏幕旋转方向

我得到的模型的测试结果如下图所示:
【实战】K210训练与部署YOLO目标检测模型_第5张图片


总结

总的来说,对于第一次走完数据集制作、模型训练、模型部署整个流程的我来说,结果还是令人满意的。但是模型质量还不大行,在上面的模型测试结果中,前三张图片虽然检测出了树叶,但是置信度都不高,后三张包含口罩图片根本没有没框。究其原因,主要是数据集太小了,总共360+张图片,200张左右包含共四种不同树叶,包含口罩的图片可能连100张都不到。后期准备扩大数据集,以提升模型质量达到预期要求。


第一次写这么长的博客,不免存在一些知识或是排版上的问题,还望各位看官不吝赐教。

你可能感兴趣的:(深度学习,tensorflow,嵌入式)