一、前言
前言即叠个甲,本人学术不精,仅了解简单的python的基础以及少许深度学习内容,这次实验任务为学校发布,实现方法多为查询使用,并非原理介绍搞懂。
二、具体实现
目标是利用深度学习实现病残树叶检测,需要框出标注,要求速度较快精度较高,故选取YOLO进行实现,因以前尝试过YOLOv5,本次实验也仍采用yolov5进行实验。
实验的大概流程即为:
1).数据处理:
将压缩包里的图片进行数据清洗,筛掉特征不明显图片,划分训练集验证集,使用 labelimg进行数据标注;
2).参数训练:
使用yolov5进行数据训练,得到一个效果较好的参数文件;
3).web实现:
通过flask搭建web网页,可以使用pc端以及移动端访问网页进行目标检测,对于前端页 面要求能用就行,后端可以调用yolo进行检测即可。
1.数据处理
本次数据集为学校发布,包含五十张左右的树叶图片。对图片使用Labelimg进行yolo数据集的标注,每张图标注完成后以txt格式存储其框选数据。
2.数据训练
yolov5直接在github上下载得到。github.comhttps://github.com/ultralytics/yolov5
首先下载requirements.txt上需要的包;
之后打开其中的data,新建一个yaml文件用于训练,(sickleave.yaml)其中的具体代码如下:
# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: *****Desktop\sickleave # dataset root dir
train: images/train # train images (relative to 'path')
val: images/val # val images (relative to 'path')
test: # test images (optional)
# Classes
nc: 1 # number of classes
names: ['sickleave'] # class names
上半为路径,下半为分类数以及分类名,因本次实验只要求框选出坏叶,故仅有一类,名称记为sickleave。
之后从github上下载yolov5的参数模型;
图2.2.1 参数模型下载页面展示
页面上有一大把,大小不一,总结一下就是越大的参数越多,精度越高,训练所需时间更长,检测需要时间更长,但是特征学习更好,检测的效果更好,这里下了俩,一个yolov5s.pt,一个yolov5x.pt(前面那个比较小,后面这个比较大)。
之后将下好的参数文件放进yolo的文件夹根目录中。
下一步对train进行参数修改:
打开train的edit configuration 中 参数行打入--weights yolov5x.pt --data data/sickleave.yaml --workers 1 --batch-size 8;
之后运行即可开始训练,训练的结果保存在runs/train/exp中,包含参数文件和一大堆训练图展示
图2.2.2 train结果展示
weights中best.pt即为训练好的参数文件。
之后对val进行测试,打开yolo中的detect,同上修改参数,打入--weights best.pt --source ****\Desktop\sickleave\images\val即可,之后测试的结果存入runs/val中,这里展示两张图,分别是yolov5s.pt训练好后测试得到的和yolov5x.pt训练好后得到的。
图2.2.3 yolov5s.pt得到的一张结果图展示
图2.2.4 yolov5x.pt得到的一张结果图展示
因我们这个实验并未有硬性指标,故仅通过简单观察,寻求一个大致不错的weight参数即可。
3.web搭建
本次实验在web搭建上使用的为python中的Flask进行。在相关内容学习和查询的过程中,有幸发现了一位大佬的代码,在此应用了这位大佬的web端实现,下面为这位大佬的原文地址,欢迎大家前往阅读学习尝试:
YOLOv5部署到web端(flask+js简单易懂)_yolov5部署web_帅帅帅.的博客-优快云博客https://blog.youkuaiyun.com/weixin_44902604/article/details/130085119 将static,templates以及app.py放至yolo文件中即可运行。(感谢大佬的分享)
运行结果如图:
图2.3.1 web页面展示
具体使用方法即为点击选择文件,在本地上寻找一张图片,之后点击开始检测, 之后会 在本地的runs/detect/exp/filename出生成检测完成的图片,之后点击展示图片,前往URL为 ***/sh的路由(?这部分名词概念不太清楚该怎么说,见谅)出展示出图片,不过仍会存在一些小问题,如当前为****/sh的地址,若是想再次选择检测,需要先回到端口;
且再次展示图片时会遇到报错为:
图2.3.2 报错页面展示
错误原因:yolo的detect结果每次运行都会新建一个exp(exp1;exp2;exp3.....) ,但这个 路径是继续沿着exp里找文件的,故出现了FileNotFoundError;
之后去看了看yolo的参数:
发现管控这部分的yolo参数为(exist-ok):
图2.3.3 yolo参数展示
经查询,该参数的作用为保存的路径是否有文件,已有的话不再创建新的;
让我比较迷糊的一点就是这个明明加载调用了,但是每次检测仍会创建新的,但是将其 注释掉了之后就只剩一个exp了,问题解决,但是不知原因。