毕业项目推荐:基于yolov8/yolov5的钢铁缺陷检测系统(Python+卷积神经网络)
往期经典回顾
class="table-box">项目 | 基于yolov8的车牌识别系统 |
---|---|
往期经典回顾
class="table-box">项目 | 基于yolov8的车牌识别系统 |
---|---|
钢材表面缺陷检测在保障产品质量、延长使用寿命以及预防安全隐患方面具有重要意义。本文提出了一种基于YOLOv8深度学习框架的钢材表面缺陷检测模型,该模型使用了1800张图片进行训练,能够精准识别热轧钢带表面的六种常见缺陷,包括轧制氧化皮、斑块、开裂、点蚀表面、内含物以及划痕。
此外,我们开发了一款带有UI界面的钢材表面缺陷检测系统,支持实时检测这些缺陷,并能够直观地展示检测结果。系统采用Python与PyQt5开发,可以对图片、视频及摄像头输入进行目标检测,同时支持检测结果的保存。本文还提供了完整的Python代码和详细的使用指南,供有兴趣的读者学习参考。获取完整代码资源,请参见文章末尾。
关键词:钢铁缺陷;深度学习;特征融合;注意力机制;卷积神经网络
项目中所用到的算法模型和数据集等信息如下:
算法模型:
yolov8、yolov8 + SE注意力机制 或 yolov5、yolov5 + SE注意力机制
数据集:
网上下载的数据集,格式都已转好,可直接使用。
以上是本套代码算法的简单说明,添加注意力机制是本套系统的创新点 。
部分核心功能如下:
系统支持用户选择图片文件进行识别。通过点击图片选择按钮,用户可以选择需要检测的图片,并在界面上查看所有识别结果。该功能的界面展示如下图所示:
系统支持选择整个文件夹进行批量识别。用户选择文件夹后,系统会自动遍历其中的所有图片文件,并将识别结果实时更新显示在右下角的表格中。该功能的展示效果如下图所示:
在许多情况下,我们需要识别视频中的车牌。因此,系统设计了视频选择功能。用户点击视频按钮即可选择待检测的视频,系统将自动解析视频并逐帧识别多个车牌,同时将识别结果记录在右下角的表格中。以下是该功能的展示效果:
在许多场景下,我们需要通过摄像头实时识别车牌。为此,系统提供了摄像头选择功能。用户点击摄像头按钮后,系统将自动调用摄像头并进行实时车牌识别,识别结果会即时记录在右下角的表格中。
本系统还添加了对识别结果的导出功能,方便后续查看,目前支持导出cvs和xls两种数据格式,功能展示如下:
为了创建钢材表面缺陷检测模型,我们从网络上收集了各类钢材表面缺陷的图片,并使用Labelimg标注工具对每张图片中的目标边框(Bounding Box)及类别进行了标注。整个数据集共计1800张图片,其中训练集包含1440张,验证集包含360张。部分图像及标注示例如下图所示。
该数据集包括1800个灰度图像,涵盖六种不同类型的典型表面缺陷,每一类缺陷包含300个样本。六种缺陷类型分别为:轧制氧化皮、斑块、开裂、点蚀表面、内含物和划痕。对应的英文名称为:[crazing,inclusion,patches, pitted_surface,rolled-in_scale,scratches]。
YOLOv8算法的核心特性和改进如下:
相比之前版本,YOLOv8对模型结构进行了精心微调,不再是“无脑”地将同一套参数应用于所有模型,从而大幅提升了模型性能。这种优化使得不同尺度的模型在面对多种场景时都能更好地适应。
然而,新引入的C2f模块虽然增强了梯度流,但其内部的Split等操作对特定硬件的部署可能不如之前的版本友好。在某些场景中,C2f模块的这些特性可能会影响模型的部署效率。
YOLOV5有YOLOv5n,YOLOv5s,YOLOv5m,YOLOV5l、YOLO5x五个版本。这个模型的结构基本一样,不同的是deth_multiole模型深度和width_multiole模型宽度这两个参数。就和我们买衣服的尺码大小排序一样,YOLOV5n网络是YOLOV5系列中深度最小,特征图的宽度最小的网络。其他的三种都是在此基础上不断加深,不断加宽。不过最常用的一般都是yolov5s模型。
本系统采用了基于深度学习的目标检测算法——YOLOv5。作为YOLO系列算法中的较新版本,YOLOv5在检测的精度和速度上相较于YOLOv3和YOLOv4都有显著提升。它的核心理念是将目标检测问题转化为回归问题,简化了检测过程并提高了性能。
YOLOv5引入了一种名为SPP (Spatial Pyramid Pooling)的特征提取方法。SPP能够在不增加计算量的情况下,提取多尺度特征,从而显著提升检测效果。
在检测流程中,YOLOv5首先通过骨干网络对输入图像进行特征提取,生成一系列特征图。然后,对这些特征图进行处理,生成检测框和对应的类别概率分数,即每个检测框内物体的类别和其置信度。
YOLOv5的特征提取网络采用了CSPNet (Cross Stage Partial Network)结构。它将输入特征图分成两部分,一部分通过多层卷积处理,另一部分进行直接下采样,最后再将两部分特征图进行融合。这种设计增强了网络的非线性表达能力,使其更擅长处理复杂背景和多样化物体的检测任务。
提供封装好的训练脚本,如下图,更加详细的的操作步骤可以参考我的飞书在线文档:https://aax3oiawuo.feishu.cn/wiki/HLpVwQ4QWiTd4Ckdeifcvvdtnve , 强烈建议直接看文档去训练模型,文档是实时更新的,有任何的新问题,我都会实时的更新上去。另外B站也会提供视频。
使用pycharm打开代码,找到train.py
打开,示例截图如下:
修改 model_yaml
的值,根据自己的实际情况修改,想要训练 yolov8s
模型 就 修改为 model_yaml = yaml_yolov8s
, 训练 添加SE注意力机制的模型就修改为 model_yaml = yaml_yolov8_SE
修改data_path
数据集路径,我这里默认指定的是traindata.yaml
文件,如果训练我提供的数据,可以不用改
修改 model.train()
中的参数,按照自己的需求和电脑硬件的情况更改
# 文档中对参数有详细的说明
model.train(data=data_path, # 数据集
imgsz=640, # 训练图片大小
epochs=200, # 训练的轮次
batch=2, # 训练batch
workers=0, # 加载数据线程数
device='0', # 使用显卡
optimizer='SGD', # 优化器
project='runs/train', # 模型保存路径
name=name, # 模型保存命名
)
class="hljs-button signin active add_def" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
修改traindata.yaml
文件, 打开 traindata.yaml
文件,如下所示:
在这里,只需修改 path 的值,其他的都不用改动(仔细看上面的黄色字体),我提供的数据集默认都是到 yolo
文件夹,设置到 yolo 这一级即可,修改完后,返回 train.py
中,执行train.py
。
打开 train.py
,右键执行。
出现如下类似的界面代表开始训练了
训练完后的模型保存在runs/train文件夹下
打开val.py
文件,如下图所示:
修改 model_pt
的值,是自己想要评估的模型路径
修改 data_path
,根据自己的实际情况修改,具体如何修改,查看上方模型训练中的修改步骤
修改 model.val()
中的参数,按照自己的需求和电脑硬件的情况更改
model.val(data=data_path, # 数据集路径
imgsz=300, # 图片大小,要和训练时一样
batch=4, # batch
workers=0, # 加载数据线程数
conf=0.001, # 设置检测的最小置信度阈值。置信度低于此阈值的检测将被丢弃。
iou=0.6, # 设置非最大抑制 (NMS) 的交叉重叠 (IoU) 阈值。有助于减少重复检测。
device='0', # 使用显卡
project='runs/val', # 保存路径
name='exp', # 保存命名
)
class="hljs-button signin active add_def" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
修改完后,即可执行程序,出现如下截图,代表成功(下图是示例,具体以自己的实际项目为准。)
评估后的文件全部保存在在 runs/val/exp...
文件夹下
我们每次训练后,会在 run/train 文件夹下出现一系列的文件,如下图所示:
如果大家对于上面生成的这些内容(confusion_matrix.png、results.png
等)不清楚是什么意思,可以在我的知识库里查看这些指标的具体含义,示例截图如下:
如果您希望获取博文中提到的所有实现相关的完整资源文件(包括测试图片、视频、Python脚本、UI文件、训练数据集、训练代码、界面代码等),这些文件已被全部打包。以下是完整资源包的截图:
您可以通过下方演示视频的视频简介部分进行获取
演示视频:
基于深度学习的钢铁缺陷检测系统(v8)
本文在总结钢铁表面缺陷检测研究现状的基础上,针对检测中存在的小目标缺陷检测、缺陷类型分类、检测实时性以及缺陷定位等问题,提出了在YOLOv8和YOLOv5目标检测网络中引入SE注意力机制进行改进的方法。通过一系列实验对比分析,最终选择出性能最优的网络模型。改进后的网络在检测精准度、查全率和mAP值等方面均有显著提升,同时漏检和误检的问题也得到了有效改善。最后,基于PyQt5开发了一个钢铁表面缺陷检测系统,使得检测过程更加直观和高效。
评论记录:
回复评论: