【实战】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卡及读卡器
实验步骤 一、数据集制作 1. 准备数据集
目标检测: 每类图片数量不低于100张, 建议采集200~400张,数据集大小决定了模型的质量
因为模型最终部署在K210上,所以直接使用K210采集数据集图片。采集图片脚本如下:
链接:https://pan.baidu.com/s/1bBLRuzbX0w3ZFzC3oPwhMQ 提取码:mutk图片批量重命名脚本如下:
注意:上面这个脚本需要在文件最后顶格添加一行main()
才能运行。(亲身实践,在maix-bit上能顺利运行。但是在拍照过程中时常出现卡死的情况,频繁上下电和reset,导致最后在TF卡里生成多个文件夹,且每个文件夹里图片均从0开始命名,后面合并非常麻烦,不得不撸几个脚本批量完成图片的重命名工作。)
# -*- coding: utf-8 -*-
import ospath = '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
【深度学习|【实战】K210训练与部署YOLO目标检测模型】回归正题,下载好并修改拍照脚本后,将脚本命名为boot.py并(通过读卡器)放到FAST格式化后的TF卡上,如下图所示
文章图片
接着拔出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 主要用于配置硬件,只配置一次即可。K210拍摄得到训练图片如下图所示:
main.py 可以用于主要的运行的程序。
文章图片
2. 标注图片
使用标注软件labelImg进行图片标注,labelImg使用此处不予详述。标注过程如下图所示:
问题和解决方法:
- 训练过程中报错
Corrupt JPEG data: premature end of data segment
,经查阅,原因为训练图片解码后超内存导致数据流被截断损坏。解决方法是将图片进行压缩(具体压缩到多大得依据Mx-yolo中训练模型的源码),我使用的训练图片原大小为20KB,使用image tool工具(Mx-yolov3提供有)处理后,图片被压缩到了8KB,训练过程便不再报错。
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
回车结果如下图:
文章图片
- 当电脑中已安装了cuda其他版本且没有我们实验所需的cuda10.0时,安装Mx-yolov3文件夹中提供的cuda。注意,在安装过程中安装向导会让你选择两个路径,前者是临时解压路径,后者才是安装路径,在安装完成后会删除临时解压路径下的所有文件。由于没有注意到这一点,以至于我两个路径选成一样的,导致了安装成功后找不到cuda的文件夹
/蠢哭
。在正常安装完成后,一般安装程序会自动为系统添加cuda的环境变量,此时只需要用命令行键入nvcc -V
和nvcc -version
得到两个结果中显示的版本一致,且都为10.0即表示cuda配置成功。但是我在第一次安装成功后查看版本时发现一个是10.0一个是10.1(之前安装的cuda版本),于是就把之前版本的环境变量从path中删除了,再次查看,得到如下图所示结果,配置成功。
文章图片
模型训练教程详情参见博客:
https://blog.csdn.net/weixin_39680380/article/details/111137088我得到的模型的测试结果如下图所示:
ps:如果直接使用Mx-yolov3提供的boot.py检测例程,需要自己使用lcd.rotation()
微调一下屏幕旋转方向
文章图片
总结 总的来说,对于第一次走完数据集制作、模型训练、模型部署整个流程的我来说,结果还是令人满意的。但是模型质量还不大行,在上面的模型测试结果中,前三张图片虽然检测出了树叶,但是置信度都不高,后三张包含口罩图片根本没有没框。究其原因,主要是数据集太小了,总共360+张图片,200张左右包含共四种不同树叶,包含口罩的图片可能连100张都不到。后期准备扩大数据集,以提升模型质量达到预期要求。
第一次写这么长的博客,不免存在一些知识或是排版上的问题,还望各位看官不吝赐教。
推荐阅读
- 深度学习|深度学习中的优化标准(交叉熵与均方误差)
- K210|【电赛开发】2021-F题数字识别-YOLOV2(含无脑训练教程
- nlp|pytorch深度学习实践-RNN高级篇
- #|图像去噪论文综述(更新中...)
- 算法|PyTorch 之 Checkpoint 机制解析
- 人工智能|一文详解YOLOX算法实现血细胞检测
- semantic|DenseASPP for Semantic Segmentation in Street Scenes(DenseASPP 用于街景语义分割)的阅读笔记
- 深度学习|深度学习相关概念(交叉熵损失)
- 深度学习|基于Pytorch的神经网络之Classfication