基于yolov5/yolov8模型最新改进优化的钢铁表面缺陷检测系统(含UI界面,Python代码,数据集,模型已训练,CPU/GPU直接上手测试运行。优化:加入CABM、ECA等注意力机制;优化模型结构;改进可变形卷积。)

      目录

      一、项目简介
      二、项目效果
      三、项目配置
  1.环境配置
  2.数据集介绍
  3.yolov5/v8目标检测介绍
  (1)网络结构
  (2)输入端
  (3)Backbone
  (4)Neck
  (5)Head
  (6)训练策略
  四、模型改进优化
  五、项目训练步骤
  六、项目训练结果

一、项目简介

  本文将详细介绍如何使用深度学习中的YOLOv5和YOLOv8算法实现对钢材表面缺陷的检测,并利用PyQt5设计了简约的系统UI界面。在界面中,您可以选择自己的视频文件、图片文件进行检测。此外,您还可以更换自己训练的yolov5/v8模型,自定义自己数据的进行检测。由于yolov5和yolov8网络模型结构本质区别不大,改进优化也基本一致,这里以yolov5为主要内容进行详细介绍,可参考博客:yolov5和yolov8的区别

  项目对所有模型进行了多种优化,加入了CABM、ECA、SE等注意力机制,改进了可变形深度卷积层DCN、DSC,同时用DySnake-主干c3进行替换。

  本博文提供了完整的Python程序代码和使用教程,适合有需要的朋友参考。

二、项目效果 

  该系统界面优美,检测精度高,功能强大。它具备多目标实时检测,同时可以自由选择感兴趣的检测目标。效果具体演示可以参考B站视频:B站

 

 

三、项目配置

1.环境配置

3060电脑配置参考:

(1). python版本: 3.8.10
(2). cuda版本:安装哪个版本同自己的电脑显卡有关
CUDA10.2
CUDA11.1(建议)
CUDA11.3

(3). torch版本:需要同安装的cuda进行匹配
CUDA10.2 安装:torch1.9.0==cuda10.2
CUDA11.1 安装:torch1.9.0==cuda11.1 (建议)
CUDA11.3 安装:torch1.10.0==cuda11.3

(4). 其他的第三方库版本见项目代码:requirements.txt

## 具体安装步骤:

下载百度网盘链接:

链接:https://pan.baidu.com/s/1Cd-9cQhKsKDSv9YK7y8RQg?pwd=lqgy
提取码:lqgy
--来自百度网盘超级会员V6的分享

里面包含所有的需要的环境,下载完成后按以下步骤完成安装:

###1) Python环境安装

安装 python3.8.10 版本,文件在python3.8.10文件夹中,双击python-3.8.10-amd64.exe即可,若不会可参考下面的博客内容,

 

###2) CUDA、cudnn环境安装

安装哪个版本依据自己的电脑硬件确定,如何查询支持那个版本,看下面的参考博客链接

 

CUDA文件夹中一共提供了10.2、11.1、11.3 三个版本的CUDA,并且里面也提供了相对应的 torch-GPU版 whl文件
###3) torch-GPU版安装

whl文件 同 cuda文件在同一个文件夹下,在当前目录下打开命令提示符窗口,直接执行下面命令(以torch-1.9.0+cu111-cp38-cp38-win_amd64.whl为例)

pip install torch-1.9.0+cu111-cp38-cp38-win_amd64.whl
pip install torchvision-0.10.0+cu111-cp38-cp38-win_amd64.whl

具体命令只需替换后面的文件名即可。

 

###4)第三方依赖包安装

资源中提供的Lib文件夹是所有的第三方依赖包,打开 命令提示符窗口,cd到当前项目路径下,

直接运行:

pip install --no-index --find-links=whl -r requirements.txt

自动安装环境。

就此,所有环境已经完全安装完成,直接执行 main.py 即可完成测试效果。

### 5)pycharm安装

 

2.数据集介绍

  东北大学(NEU)表面缺陷数据集,收集了热轧带钢6种典型的表面缺陷,即轧内垢(RS)、斑块(Pa)、裂纹(Cr)、点蚀面(PS)、夹杂物(In)和划痕(Sc)。该数据库包括1800张灰度图像:6种不同类型的典型表面缺陷各300个样本。

  下图为6种典型表面缺陷的样本图像,每张图像的原始分辨率为200×200像素。从图中,我们可以清楚地观察到类内缺陷在外观上存在较大差异,例如划痕(最后一列)可能是水平划痕、垂直划痕和倾斜划痕等。与此同时,类间缺陷也具有相似的特征,如滚积垢、裂纹和坑状表面。此外,由于光照和材料变化的影响,类内缺陷图像的灰度会发生变化。总之,NEU表面缺陷数据库包含两个难题,即类内缺陷存在较大外观差异,类间缺陷具有相似方面,缺陷图像受到光照和材料变化的影响。

 3.yolov5/v8目标检测介绍

1)网络结构

  YOLOV5有YOLOv5n,YOLOv5s,YOLOv5m,YOLOV5l、YOLO5x五个版本。这个模型的结构基本一样,不同的是deth_multiole模型深度和width_multiole模型宽度这两个参数。就和我们买衣服的尺码大小排序一样,YOLOV5n网络是YOLOV5系列中深度最小,特征图的宽度最小的网络。其他的三种都是在此基础上不断加深,不断加宽。不过最常用的一般都是yolov5s模型。可以参加模型介绍博客:YOLOv5 深度剖析 - 知乎 (zhihu.com)

  

 yolov5s 网络架构如下:

 

(1)输入端: Mosaic数据增强、自适应锚框计算、自适应图片缩放

(2)Backbone: Focus结构、CSP结构

(3)Neck: FPN+PAN结构

(4)Prediction: GIOU_Loss

基本组件:

  • Focus: 基本上就是YOLO v2的passthrough.
  • CBL: 由Conv+Bn+Leaky_relu激活函数三者组成
  • CSP1 X: 借鉴CSPNet网络结构,由三个卷积层和X个Res unint模块Concate组成
  • CSP2 X: 不再用Res unint模块,而是改为CBL。
  • SPP: 采用1x1,5x5,9x9,13x13的最大池化的方式,进行多尺度融合

2)输入端

(1)Mosaic数据增强

  YOLO5在输入端采用了 Mosaic数据增强 ,Mosaic 数据增强算法将多张图片按照一定比例组合成一张图片,使模型在更小的范围内识别目标。Mosaic 数据增算法参考 CutMix数增强算法。CutMix数据增强算法使用两张图片进行拼接,而 Mosaic 数据增强算法一般使用四张进行拼接,但两者的算法原理是非常相似的。

 

Mosaic数据增强的主要步骤为:

1) 随机选取图片拼接基准点坐标 (xc,yc),另随机选取四张图片。

2) 四张图片根据基准点,分别经过尺寸调整和比例缩放后,放置在指定尺寸的大图的左上,右上,左下,右下位置。

3) 根据每张图片的尺寸变换方式,将映射关系对应到图片标签上。

4)依据指定的横纵坐标,对大图进行拼接。处理超过边界的检测框坐标。

采用Mosaic数据增强的方式有几个优点:

1) 丰富数据集: 随机使用4张图像,随机缩放后随机拼接,增加很多小目标,大大增加了数据多样性

2) 增强模型鲁棒性: 混合四张具有不同语义信息的图片,可以让模型检测超出常规语境的目标.

3) 加强批归一化层(Batch Normalization) 的效果: 当模型设置 BN 操作后,训练时会尽可能增大批样本总量 (BatchSize),因为BI 原理为计算每一个特征层的均值和方差,如果批样本总量越大,那么 BN 计算的均值和方差就越接近于整个数据集的均值和方差,效果越好。

4) Mosaic 数据增强算法有利于提升小目标检测性能: Mosaic 数据增强图像由四张原始图像拼接而成,这样每张图像会有更大概率有含小目标,从而提升了模型的检测能力。

(2) 自适应锚框计算

**之前我们学的 YOLOV3、YOLv4,对于不同的数据集,都会计算先验框 anchor。**然后在训练时,网络会在 anchor 的基础上进行预测,输出预测框,再和标签框进行对比,最后就进行梯度的反向传播。

在YOLOV3、YOLOV4 中,训练不同的数据集时,是使用单独的脚本进行初始锚框的计算,在 YOLOV5 中,则是将此功能嵌入到整个训练代码里中。所以在每次训练开始之前,它都会根据不同的数据集来自适应计算 anchor。

自适应的计算具体过程:

 ①获取数据集中所有目标的宽和高

 ②将每张图片中按照等比例缩放的方式到 resize 指定大小,这里保证宽高中的最大值符合指定大小。

 ③将 bboxes 从相对坐标改成绝对坐标,这里乘以的是缩放后的宽高。

 ④筛选 bboxes,保留宽高都大于等于两个像素的 bboxes.

 ⑤使用 k-means 聚类三方得到n个 anchors,与YOLOv3、YOLOv4 操作一样

 ⑥使用遗传算法随机对 anchors 的宽高进行变异。倘若变异后的效果好,就将变异后的结果赋值给 anchors;如果变异后效果变差就跳过,默认变异1000次。这里是使用 anchor fitness 方法计算得到的适应度 fitness,然后再进行评估。

(3)自适应图片缩放

  在常用的目标检测算法中,不同的图片长宽也不相同,因此常用的方式是将原始图片统一缩放到一个标准尺寸,在送入检测网络中。

  比如yolo算法中常用416416,608608等尺寸,比如对下面800*600的图像进行缩放。

 

  但yolov5代码中对此进行了改进,也是yolov5推理速度能够很快的一个不错的trick。

  作者认为,在项目实际使用时,很多图片的长宽比不同,因此缩放填充后,两端的黑边大小都不同,而如果填充的比较多,则存在信息冗余,影响推理速度。

  因此在yolov5的代码中datasets.py的letterbox函数进行了修改,对原始图像自适应的添加最少的黑边。

 

  图像高度上两端的黑边变少了,在推理时,计算量也会减少,即目标检测速度会得到提升。

  通过这种简单的改进,推理速度得到了37%的提升,可以说效果很明显。

3. Backbone

1)Focus结构
  Focus模块在YOLOV5中是图片进入Backbone前,对图片进行切片操作,具体操作是在一张图片中每隔一个像素拿到一个值,类似于邻近下采样,这样就拿到了四张图片,四张图片互补,长得差不多,但是没有信息丢失,这样一来,将W、H信息就集中到了通道空间,输入通道扩充了4倍,即拼接起来的图片相对于原先的RGB三通道模式变成了12个通道,最后将得到的新图片再经过卷积操作,最终得到了没有信息丢失情况下的二倍下采样特征图。  

  以YOLOV5s为例,原始的640 x 640 x 3的图像输入Focus结构,采用切片操作,先变成320 * 320 12的特征图,再经过一次卷积操作最终变成320 x 320 x 32的特征图

  切片操作如下:

 

作用: 可以使信息不丢失的情况下提高计算力

不足: Focus 对某些设备不支持目不友好,开销很大,另外切片对不产的话模型就崩了

后期改进: 在新版中,YOLOV5 将Focus 模块替换成了一 6x6 的券积层、两者的计算量是等价的,但是对工一些 GPU 设备,使用6x 6 的卷积会更加高效。

2)CSP结构

  yolov4网络结构中,借鉴了CSPNet的设计思路,在主干网络中设计了CSP结构。

 

   yolov5与yolov4不同点在于,yolov4中只有主干网络使用了CSP结构。 而yolov5中设计了两种CSP结构,以yolov5s网络为例,CSP1_X结构应用于Backbone主干网络,另一种CSP2_X结构则应用于Neck中。

 

4. Neck

  YOLOv5现在的Neck和YOLOV4中一样,都采用FPN+PAN的结构。但是在它的基础上做了-些改进操作: YOLOV4的Neck结构中,采用的都是普通的卷积操作,而YOLOV5的Neck中,采用CSPNet设计的CSP2结构,从而加强了网络特征融合能力。

  结构如下图所示,FPN层自顶向下传达强语义特征,而PAN塔自底向上传达定位特征:

 

5. Head

(1) NMS非极大值抑制

  NMS 的本质是搜索局部极大值,抑制非极大值元素。非极大值抑制,主要就是用来抑制检测时几余的框。因为在目标检测中,在同一目标的位置上会产生大量的候选框,这些候选框相互之间可能会有重叠,所以我们需要利用非极大值抑制找到最佳的目标边界框,消除几余的边界框。

算法流程:

  1.对所有预测框的置信度降序排序

  2.选出置信度最高的预测框,确认其为正确预测,并计算他与其他预测框的 IOU

  3.根据步骤2中计算的IOU 去除重鲁度高的,IOU > threshold 值就直接删除

  4.剩下的预测框返回第1步,直到没有剩下的为止

SoftNMS:

  当两个目标靠的非常近时,置信度低的会被置信度高的框所抑制,那么当两个目标靠的十分近的时候就只会识别出一个 BBox。为了解决这个问题,可以使用 softNMS。

  它的基本思想是用稍低一点的分数来代替原有的分数,而不是像 NMS 一直接置零。

 

6、训练策略

  (1) 多尺度训练 (Multi-scale training) 如果网络的输入是416 x 416。那么训练的时候就会从 0.5 x 416 到 1.5 x 416 中任意取值但所取的值都是32的整数倍。

  (2) 训练开始前使用 warmup 进行训练 在模型预训练阶段,先使用较小的学习率训练一些epochs或者steps (如4个 epoch 或10000step ) 再修改为预先设置的学习率进行训练。

  (3) 使用了 cosine 学习率下降策略 (Cosine LR scheduler)

  (4)采用了 EMA 更新权重(Exponential Moving Average) 相当于训练时给参数赋予一个动量,这样更新起来就会更加平滑

  (5) 使用了 amp 进行混合精度训练 (Mixed precision) 能够减少显存的占用并且加快训练速度,但是需要 GPU 支持

四、模型改进优化(yolov5/yolov8)

1.加入不同注意力机制(CA、CABM、ECA)

1)注意力机制CA(参考链接

简介
CA(Coordinate attention for efficient mobile network design)发表在CVPR2021,帮助轻量级网络涨点、即插即用。

CA注意力机制的优势:
1、不仅考虑了通道信息,还考虑了方向相关的位置信息。
2、足够的灵活和轻量,能够简单的插入到轻量级网络的核心模块中。

 2)注意机制CABM:通道注意力可空间注意力的集成者(参考链接

  注意机制CABM是两种混合注意力中通道&空间注意力的一种。在给定一张特征图,CBAM模块能够序列化地在通道空间两个维度上产生注意力特征图信息,然后两种特征图信息在与之前原输入特征图进行相乘进行自适应特征修正,产生最后的特征图。CBAM是一种轻量级的模块,可以嵌入到任何主干网络中以提高性能。

3)注意力机制ECA(参考链接)

  Efficient Channel Attention Module 简称 ECA,2020年 Qilong Wang等人提出的一种 高效通道注意力(ECA)模块 ;

  提出了一种 不降维的局部跨通道交互策略 ,有效避免了降维对于通道注意力学习效果的影响 ;

  该模块只涉及少数几个 参数,但具有明显的 效果增益 ;

  适当的 跨通道交互 可以在保持 性能 的同时 显著降低模型的复杂性。

2.可变形深度卷积DCN

DCN创新点(贡献):

可变形卷积和可变形RoI池化,新模块可以很容易地取代现有CNN中的普通模块,并且可以通过标准反向传播轻松地进行端到端训练。

DCN目前也出到了v2,值得一提的是,DCN的思维也算一种可学习的自适应模块,跟注意力机制模块BAM/CBAM的思路有点像。mmdetection里也有相关实现,可轻松移植进自己的项目,DCN对于大多数检测场景尤其是比赛都是有用的。

 3.DySnake-主干c3进行替换(DSCN替换)

首发Yolov5/Yolov8涨点神器:动态蛇形卷积(Dynamic Snake Convolution),实现暴力涨点 | ICCV2023

精确分割拓扑管状结构例如血管和道路,对医疗各个领域至关重要,可确保下游任务的准确性和效率。然而许多因素使分割任务变得复杂,包括细小脆弱的局部结构和复杂多变的全局形态。针对这个问题,提出了动态蛇卷积,该结构在管状分割任务上获得了极好的性能。

所有不同模型的改进优化代码已在项目代码里编写,包括yolov5和yolov8:

 

五、 yolov5训练步骤

此代码的训练步骤极其简单,不需要修改代码,直接通过cmd就可以命令运行,命令都已写好,直接复制即可,命令如下图

  下面这条命令是 训练 添加 CBAM 注意力机制的命令,复制下来,直接就可以运行,看到训练效果。

python ./train.py --epochs 500 --cfg models/yolov5s-CBAM-2.yaml --hyp data/hyps/hyp.scratch-low.yaml --data data/coco_NEU-DET.yaml --weight weights/yolov5s.pt --workers 4 --batch 16

  执行完上述命令后,即可完成训练,训练过程如下:

 

下面是对命令中各个参数的详细解释说明:

  • python: 这是Python解释器的命令行执行器,用于执行后续的Python脚本。

  • ./train.py: 这是要执行的Python脚本文件的路径和名称,它是用于训练目标检测模型的脚本。

  • --epochs 500: 这是训练的总轮数(epochs),指定为500,表示训练将运行500个轮次。

  • --cfg models/yolov5s-CBAM-2.yaml: 这是YOLOv5模型的配置文件的路径和名称,它指定了模型的结构和参数设置。

  • --hyp data/hyps/hyp.scratch-low.yaml: 这是超参数文件的路径和名称,它包含了训练过程中的各种超参数设置,如学习率、权重衰减等。

  • --data data/coco_NEU-DET.yaml: 这是数据集的配置文件的路径和名称,它指定了训练数据集的相关信息,如类别标签、图像路径等。

  • --weight weights/yolov5s.pt: 这是预训练权重文件的路径和名称,用于加载已经训练好的模型权重以便继续训练或进行迁移学习。

  • --workers 4: 这是用于数据加载的工作进程数,指定为4,表示使用4个工作进程来加速数据加载。

  • --batch 16: 这是每个批次的样本数,指定为16,表示每个训练批次将包含16个样本。

  通过运行上面这个命令,您将使用YOLOv5模型对目标检测任务进行训练,训练500个轮次,使用指定的配置文件、超参数文件、数据集配置文件和预训练权重。同时,使用4个工作进程来加速数据加载,并且每个训练批次包含16个样本。

yolov5评估步骤

  评估步骤同训练步骤一样,执行1行语句即可,注意--weights需要变为自己想要测试的模型路径。

python ./val.py --data data/coco_NEU-DET.yaml --weights ../weights/yolov5s.yaml/weights/best.pt

  评估结果如下:

 

六、 训练结果

所有模型的每次训练后,会在 run/train 文件夹下出现一系列的文件进行结果和日志的保存,如下图所示:

 

 

获取链接:【闲鱼】https://m.tb.cn/h.5FfVxmd?tk=OTsxWO6mF3l MF1643

(QQ:1214562663)

 

  该代码采用Pycharm+Python3.8开发,经过测试成功运行,运行界面的主程序为main.py,项目包括用到的所有程序,优化改进的所有模型结构,数据集。

       注:为确保程序在所有电脑的适配性和顺利运行,已经在自己电脑上训练好了所有改进的模型参数并保存,普通电脑无显卡也可以直接用cpu快速测试运行。如若想自己重新训练模型调整优化或更改其他自己的数据集样本进行训练,请按照requirements.txt配置Python依赖包的版本,详见项目代码的requirements.txt文件;

项目视频讲解链接:B站

  可闲鱼平台科研交流,项目指导,咨询问题,欢迎骚扰!闲鱼APP关键字LSWD焊缝数据集、yolov5钢板表面缺陷检测、计算机领域审稿意见指导等搜索即可,冒充者较多,请认准闲鱼店铺用户名:smile3090

其他各种优化的yolo检测项目可以联系:

【闲鱼】https://m.tb.cn/h.5FfU3kN?tk=9de0WO6MCoi CZ0015 

 

yolov5/yolov8目标检测识别系列项目部署:

 

山东高校讲师,业余时间接深度项目:

 

所有项目模型已训练,带模型代码、改进结果、训练曲线、美观UI界面,全电脑型号直接运行,包部署,包售后,包模型改进,论文投稿,论文答辩指导,创意点交流(当天必回复)。

1.基于深度学习的车牌识别系统
2.基于yolov5模型优化的行人车辆多目标检测跟踪系统
3.基于yolov5模型优化的PCB板缺陷检测系统
4.基于yolov8模型优化的安全帽检测系统
5.基于yolov8模型优化的车型识别系统
6.基于yolov5/8模型的行人密集检测识别系统
7.基于yolov5/8模型的火灾检测识别系统
8.基于yolov5/8模型的快递检测识别系统
9.基于yolov5/8模型的无人机检测识别系统
10.基于yolov5/v8模型优化的垃圾检测分类系统
11.基于yolov5/v8模型优化的森林火焰烟雾检测系统
12.基于yolov8模型优化的果蔬识别系统
13.基于yolov5模型优化的果蔬识别系统
14.基于yolov5模型优化的动物检测系统
15.基于yolov8模型优化的人脸表情识别目标检测系统
16.基于yolov5/v8模型优化的钢板缺陷检测系统
17.基于yolov5/v8模型优化的焊缝缺陷检测系统
18.基于yolov8模型优化的道路缺陷检测系统
19.基于yolov8模型的水稻病虫害检测系统
20.基于yolov5/8模型的动物/鸟类检测识别系统
21.基于yolov5/8模型的口罩检测识别系统
22.基于yolov5/8模型的医学细胞检测识别系统
22.其他各种项目需求私聊

 

posted @ 2024-01-11 08:40  功成铭就  阅读(1303)  评论(0编辑  收藏  举报