毕业设计-基于深度学习的铝型材表面缺陷识别系统 YOLO python 卷积神经网络 人工智能

本文介绍了一种基于深度学习的铝型材表面缺陷识别系统,重点探讨了卷积神经网络(尤其是YOLOv5算法)的应用,包括理论原理、数据集、实验环境搭建和改进策略,如CBAM注意力机制和特征融合网络的使用,以提高检测精度和效率。
摘要由CSDN通过智能技术生成

目录

前言

设计思路

一、课题背景与意义

二、算法理论原理

2.1 卷积神经网络

2.1 YOLOv5算法

三、铝型材表面缺陷检测的实现

3.1 数据集

3.2 实验环境搭建

3.2 实验及结果分析

实现效果图样例

最后


前言

       📅大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科同学来说是充满挑战。为帮助大家顺利通过和节省时间与精力投入到更重要的就业和考试中去,学长分享优质的选题经验和毕设项目与技术思路。

        🚀对毕设有任何疑问都可以问学长哦!

         选题指导:

        最新最全计算机专业毕设选题精选推荐汇总

        大家好,这里是海浪学长毕设专题,本次分享的课题是

        🎯基于深度学习的铝型材表面缺陷识别系统

设计思路

一、课题背景与意义

       在铝型材的制造过程中,由于加工方式、设备异常、原料需求等多种原因,铝材表面可能出现起泡、凸粉、桔皮、划痕等瑕疵,这严重影响了铝材产品的质量。因此,对生产出的铝型材的表面质量进行检测,并及时修复有缺陷的产品,对提升产品品质具有极其重要的意义。

二、算法理论原理

2.1 卷积神经网络

       卷积神经网络(Convolutional Neural Network,CNN)是一种带有卷积结构的前馈神经网络,卷积结构主要有三个操作,分别是局部感受野,权值共享与池化层,可以有效减少网络参数避免过拟合。

CNN主要由以下几个结构组成:

卷积层通过卷积来进行特征提取、特征映射;

激活层进行非线性映射;

池化层进行下采样降维;

全连接层在最后进行拟合,降低特征的损失。

       卷积层通常只包含一组三维滤波器,深度的决定因素是输入的数据,每个滤波器相当于是许多个卷积核的重复堆叠,在输入的数据上不停地滑动就是特征提取的过程。卷积运算的含义是指在相同间隔时间内,卷积核在输入的数据上不停地滑动。

毕业设计-铝型材表面缺陷识别-深度学习-YOLOv5-卷积神经网络

       卷积主要有以下三种模式:a)Full卷积,b)Same卷积,c)Valid卷积。Relu函数又被称为修正线性单元(Rectified Linear Unit),解决了tanh和sigmoid函数的梯度消失问题。Relu函数还提供了神经稀疏表示能力,相比Tanh与sigmoid函数更具有生物学合理性。所以选择Relu激活函数。

毕业设计-铝型材表面缺陷识别-深度学习-YOLOv5-卷积神经网络

       池化层本质上是一个下采样的过程,通过缩小宽、长两个方向的尺寸,减少参数的个数,避免发生过拟合的现象。池化层一般出现在卷积层的后面,每一个池化层都有卷积层与之相对应。常用的池化函数主要有以下三种:平均池化(Average Pool),最大池化(Max Pool),随机池化(Average Pool)。

毕业设计-铝型材表面缺陷识别-深度学习-YOLOv5-卷积神经网络

       全连接层(Fully Connected Layer,FC)是神经网络的最后一层,主要负责网络的分类与回归。

毕业设计-铝型材表面缺陷识别-深度学习-YOLOv5-卷积神经网络

       Faster R-CNN算法流程如下:(1)首先对特征图像进行特征提取,生成特征图。(2)由步骤1)生成的特征图锚点坐标位置信息和二分类器来生成候区域。(3)感兴趣区域池化层:该层包含2个输入,分别是特征图和尺寸大小各不相同的候选区域。通过对步骤2)生成的候选区域信息进行比对和池化处理,提取具体区域特征图,得到固定尺寸的区域特征图。(4)步骤(3)生成的区域特征图为此部分的输入,然后通过全连接层和二分类器计算每个区域属于哪种类别,最后输出定位和分类结果。

毕业设计-铝型材表面缺陷识别-深度学习-YOLOv5-卷积神经网络

2.1 YOLOv5算法

实验的整体流程如下,具体步骤如下:

1. 首先对数据集进行图像增强操作。
2. 对训练参数进行调整,包括改进YOLOV5的注意力机制和特征融合网络,然后将两种方法结合起来,得到最佳模型,并对网络模型进行训练。
3. 对训练完的网络模型结果进行分析,得到最佳网络模型,并保存模型。
4. 对网络模型进行轻量化处理。

毕业设计-铝型材表面缺陷识别-深度学习-YOLOv5-卷积神经网络

       CBAM注意力机制的结构如下图所示,主要包含两个模块:通道注意力模块和空间注意力模块。这两个模块采用串联的形式。

毕业设计-铝型材表面缺陷识别-深度学习-YOLOv5-卷积神经网络

相关代码示例:

import torch
import torch.nn as nn
from torchvision.models import resnet50


# 定义改进的注意力机制模块
class AttentionModule(nn.Module):
    def __init__(self, in_channels):
        super(AttentionModule, self).__init__()
        self.conv = nn.Conv2d(in_channels, in_channels, kernel_size=3, padding=1)
        self.sigmoid = nn.Sigmoid()

    def forward(self, x):
        out = self.conv(x)
        out = self.sigmoid(out)
        out = x * out  # 注意力加权
        return out


# 定义改进的特征融合网络模块
class FusionModule(nn.Module):
    def __init__(self, in_channels):
        super(FusionModule, self).__init__()
        self.conv = nn.Conv2d(in_channels, in_channels, kernel_size=3, padding=1)
        self.relu = nn.ReLU(inplace=True)

    def forward(self, x1, x2):
        out = torch.cat((x1, x2), dim=1)
        out = self.conv(out)
        out = self.relu(out)
        return out


# 定义改进的YOLOv5模型
class ImprovedYOLOv5(nn.Module):
    def __init__(self, num_classes):
        super(ImprovedYOLOv5, self).__init__()
        self.backbone = resnet50(pretrained=True)
        self.attention = AttentionModule(in_channels=2048)
        self.fusion = FusionModule(in_channels=2048)
        self.classifier = nn.Linear(2048, num_classes)

    def forward(self, x):
        features = self.backbone(x)
        attention_features = self.attention(features)
        fused_features = self.fusion(features, attention_features)
        out = self.classifier(fused_features)
        return out


# 创建模型实例
num_classes = 10  # 根据实际问题设置类别数
model = ImprovedYOLOv5(num_classes)

# 定义训练数据和优化器等

# 模型训练
model.train()
for epoch in range(num_epochs):
    for images, labels in dataloader:
        # 前向传播
        outputs = model(images)
        loss = compute_loss(outputs, labels)  # 根据实际问题定义损失函数

        # 反向传播和优化
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()

        # 打印训练信息
        if (i + 1) % 100 == 0:
            print('Epoch [{}/{}], Step [{}/{}], Loss: {:.4f}'
                  .format(epoch + 1, num_epochs, i + 1, total_step, loss.item()))

# 保存模型
torch.save(model.state_dict(), 'improved_yolov5.pth')

三、铝型材表面缺陷检测的实现

3.1 数据集

       铝型材数据集是由天池平台收集的某一铝型材生产厂家在特定时间内对铝型材表面缺陷进行监测的数据。数据集包含九类缺陷,分别是杂色、不导电、角位露底、喷流、桔皮、漏底、擦花、漆泡和脏点。所有图片的尺寸统一为2560×1920,数据集共有2369张图片。

毕业设计-铝型材表面缺陷识别-深度学习-YOLOv5-卷积神经网络

        与漏检率。由于增加了网络的复杂度,所以运行时间可能会比初始模型长一点, 初始YOLOV5检测推理时间为0.0167s,Best YOLOV5的检测推理时间为 0.0185s,比初始YOLOV5模型增加了0.0018s。 

毕业设计-铝型材表面缺陷识别-深度学习-YOLOv5-卷积神经网络

       为了提高模型效果、防止过拟合,以及改善检测结果,本节在原有数据集的基础上采用数据增强方法进行扩充,主要对样本进行随机旋转、翻转,以及亮度、对比度、锐度等操作。

毕业设计-铝型材表面缺陷识别-深度学习-YOLOv5-卷积神经网络

3.2 实验环境搭建

      操作系统为Ubuntu16,深度学习框架采用pytorch,编程语言为Python 3.9,GPU加速库为cuda7.0.5。

毕业设计-铝型材表面缺陷识别-深度学习-YOLOv5-卷积神经网络

3.2 实验及结果分析

       本研究对YOLOV5算法进行了两个方面的改进,每个方面提出了两种方法。第一个方面是在骨干网络的特征提取阶段引入了CBAM和CA两种注意力机制;第二个方面是将YOLOV5的特征融合网络替换为Bi FPN和ASFF。对这两个方面的改进进行了实验,并根据实验结果比较了每种改进对模型性能的影响。

毕业设计-铝型材表面缺陷识别-深度学习-YOLOv5-卷积神经网络

       添加CBAM注意力机制和Bi FPN特征融合网络的模型具有最高的mAP和召回率,精确率仅次于添加CBAM注意力机制和ASFF特征融合网络的组合。添加CBAM注意力机制和Bi FPN特征融合网络的模型可以有效降低误检率和漏检率,提高模型的精度,是铝型材检测任务中最优的模型

毕业设计-铝型材表面缺陷识别-深度学习-YOLOv5-卷积神经网络

部分代码如下:

  super(CBAM, self).__init__()
        
        self.avg_pool = nn.AdaptiveAvgPool2d(1)
        self.max_pool = nn.AdaptiveMaxPool2d(1)
        
        self.fc1 = nn.Conv2d(channels, channels // reduction, kernel_size=1, stride=1, padding=0)
        self.relu = nn.ReLU(inplace=True)
        self.fc2 = nn.Conv2d(channels // reduction, channels, kernel_size=1, stride=1, padding=0)
        
        self.sigmoid = nn.Sigmoid()
        
    def forward(self, x):
        avg_out = self.fc2(self.relu(self.fc1(self.avg_pool(x))))
        max_out = self.fc2(self.relu(self.fc1(self.max_pool(x))))
        out = avg_out + max_out
        
        out = self.sigmoid(out) * x
        
        return out

class CA(nn.Module):
    def __init__(self, channels):
        super(CA, self).__init__()
        
        self.avg_pool = nn.AdaptiveAvgPool2d(1)
        self.max_pool = nn.AdaptiveMaxPool2d(1)
        
        self.fc = nn.Sequential(
            nn.Conv2d(channels, channels // 16, kernel_size=1, stride=1, padding=0),
            nn.ReLU(inplace=True),
            nn.Conv2d(channels // 16, channels, kernel_size=1, stride=1, padding=0),
            nn.Sigmoid()

创作不易,欢迎点赞、关注、收藏。

毕设帮助,疑难解答,欢迎打扰!

最后

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值