【毕业设计】基于计算机视觉的水面垃圾自动识别与分类 人工智能

目录

前言

课题背景和意义

实现技术思路

一、理论技术

1.1 卷积神经网络

1.2 网络模型压缩

1.3 目标检测算法

二、 数据集

2.1 数据集

2.2 数据扩充

三、实验及结果分析

3.1 实验环境搭建

3.2 模型训练

最后


前言

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

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

    选题指导:

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

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

       🎯基于计算机视觉的水面垃圾自动识别与分类

课题背景和意义

       水面垃圾问题是全球水体污染的重要表现,严重影响生态环境和水资源的可持续利用。随着城市化进程的加快,水面垃圾的数量不断增加,特别是在河流、湖泊和海洋等水域。传统的垃圾检测和清理方法多依赖人工巡查,效率低且难以覆盖广泛区域,无法满足日益增长的环境保护需求。借助深度学习和计算机视觉技术,可以实现对水面垃圾的快速、准确检测。通过训练深度学习模型,自动识别和分类水面上的垃圾类型,提高了监测效率,降低了人力成本。

实现技术思路

一、理论技术

1.1 卷积神经网络

       区域卷积神经网络相比传统的可变形部件模型(DPM),显著提高了检测性能。RCNN 主要包含候选区域生成、区域特征提取和区域分类三个部分。对于每幅图像,RCNN 通过选择性搜索生成一个包含大约 2000 个候选区域的集合,目的是提出容易被识别为背景的区域。随后,对每个候选区域进行裁剪,使其变为固定大小,并使用 CNN 处理,生成特征向量,输入支持向量机分类器进行分类。最后,利用提取的特征进行边界框回归,得到目标位置。与传统方法相比,RCNN 使用 CNN 获取的特征更具鲁棒性,但仍存在大量重复计算、训练和测试不简洁、速度慢以及在复杂环境中生成高质量提案的难题。

       Fast R-CNN 是对 R-CNN 算法的一种改进版本,创新性地设计了 ROI Pooling 层,用于提取候选区域的特征。ROI Pooling 层通过均匀划分候选区域为固定大小的子区域,并将误差信号反向传播到卷积层,实现高效的特征提取。在 Fast R-CNN 中,特征提取、区域分类和边界框回归可以进行端到端的优化,无需额外的存储空间来缓存特征。这一改进解决了 R-CNN 和 SPPNet 的问题,提升了检测性能、训练速度和推理速度。主要改进包括特征提取效率、训练效率和检测速度。Fast R-CNN 引入 RoI Pooling 层,将候选区域的特征提取过程合并为一个步骤,提高了效率;采用端到端训练方式,避免了 R-CNN 中多个独立模型训练的过程,从而提高了训练效率;RoI Pooling 层可通过 GPU 并行化,大幅提高检测速度并减少存储开销。

基于计算机视觉的水面垃圾自动识别与分类

       Faster R-CNN 引入 RPN 网络,通过网络产生候选区域,避免了选择性搜索的缺陷,并通过共享卷积层减少计算量,显著提高目标检测的速度和精度。Cascade R-CNN 是一种多级联的目标检测网络,由特征提取模块 ResNet50、候选框生成模块 RPN和候选框阈值判断模块构成。Cascade R-CNN 采用 ResNet50 残差网络提取特征图,并引入恒等快捷连接。其主要改进在于引入级联式分类器,级联式分类器的思路在早期目标检测算法中已有应用,但 Cascade R-CNN 将其应用于深度学习模型中,取得了更好的效果。Cascade R-CNN 的成功标志着目标检测算法进一步提高准确率,并为后续算法研究提供了重要思路和基础。

基于计算机视觉的水面垃圾自动识别与分类

       Cascade R-CNN 通过训练多个递增 IoU 阈值的级联检测器,解决了候选框质量差和过拟合问题。在 RPN 中,针对每个生成的候选框,Cascade R-CNN 采用多级联的检测器进行处理,级联检测器通过逐级筛选和提升候选框质量,提高瑕疵检测准确性。这种级联结构设计有助于克服候选框质量差和过拟合问题,提升瑕疵检测模型的性能和鲁棒性。通过多级联检测策略,瑕疵检测模型能够在不同阶段对候选框进行优化和精炼,实现更高水平的瑕疵检测性能。级联设计的引入为瑕疵检测领域的研究提供了新的思路,为其他相关任务的改进和发展提供了有益启示。

1.2 网络模型压缩

       在目标检测领域,模型可以分为一阶段目标检测和两阶段目标检测,两者在知识蒸馏算法上有所不同。在知识蒸馏的框架中,教师网络通常是较大的神经网络,而学生网络则是相对较小的网络。关键在于,教师网络的预测结果能够指导学生网络的学习过程。为了增强教师与学生之间的指导性,学生网络会根据教师网络的预测类别得分进行交叉熵最小化,从而使学生网络能够更好地理解类别之间的相似性。这些相似性被称为隐藏知识,通常通过引入温度 T 的 softmax 函数来表示。

       在训练过程中,教师网络和学生网络分别进行预测,并对预测结果进行升温软化操作。接着,利用最小均方误差来计算蒸馏损失。这一过程的目的是使学生网络的软化标签预测接近教师网络的软化标签预测。同时,学生网络的原始预测结果则不进行升温处理,与硬标签计算交叉损失,得到学生网络损失函数​。最终,这两种损失函数通过一个系数 α进行加权,从而平衡这两种损失值。通过 T 的升温操作,教师网络的预测结果不再是简单的 0 和 1,而是经过软化处理的结果,成功暴露了隐藏知识。这种教师网络的预测输出即为软标签,它表示了预测类别的得分。学生网络则结合软标签和标注的硬标签进行训练。

       在两阶段目标检测网络中,由于网络结构包含 RPN和 RCNN,因此其蒸馏目标也相应地包括两个部分。此外,还可以利用中间层的输出作为提示,以指导学生网络的中间层,使其特征图的输出更接近教师网络的输出,因此需要引入 Hint loss 进行提示信息的学习。教师网络和学生网络的输出均包含分类输出和回归输出。与一阶段目标检测网络一致,分别计算加权交叉熵损失与边界回归损失。同时,学生网络与真实标签之间的计算也会得到 SoftMax & Smooth Loss,以增强模型的学习效果和鲁棒性。

1.3 目标检测算法

       基于 YOLOv5 系列的网络框架避免了网络特征图维度不统一问题,具有更好的融合性。相比教师与学生网络相差较大的二阶段网络知识蒸馏,不需要额外的自适应层进行连接,同时效果提升在 YOLOv5s 基础上,提出了轻量化知识蒸馏 YOLOv5s 模型算法。知识蒸馏训练方式能够有效解决网络模型在水面垃圾检测中的问题。轻量化结合知识蒸馏的 YOLOv5s 模型,融合了模型轻量化和知识蒸馏的优势,最终在水面垃圾检测中,通过教师 YOLOv5l 网络训练获得一系列一阶段网络的预测,升温得到软标签。

       基于真实标签的训练形成了图示通路,使用真实标签作为硬目标,联合训练小模型,即学生网络,形成网络模块。通过知识蒸馏,学生网络获得了更强的泛化检测能力,与深层大模型网络提取的特征和信息相结合,提升了模型的学习能力,检测精度逐渐接近教师网络,尤其在小垃圾和特殊形状垃圾检测问题上,知识蒸馏展现出提升模型精度的优势。同时,参数量更小的模型能够快速做出高质量的检测响应,降低模型时延和部署成本,具备了易用性和准确性。

       在模型设计中,YOLOv5s 骨干网络的 Focus 结构被替换为 3×3 卷积模块。Focus 结构的计算量约为普通卷积下采样计算量的四倍左右。为了评估计算量,使用浮点运算数(FLOPs)作为评估标准,对比 Focus 结构和普通卷积的计算量。Focus 结构增加了计算量且缓存占用严重,为了实现 YOLOv5s 的轻量化目标,故将 Conv 层替代 Focus 层。

二、 数据集

2.1 数据集

       图像采集采用自主拍摄与互联网采集相结合的方式。自主拍摄时,使用高分辨率相机在不同水域和天气条件下拍摄各种类型的水面垃圾,确保涵盖塑料、纸张、金属等多种材料的垃圾样本。通过互联网收集公开的水面垃圾图像。在数据标注阶段,使用专业的数据标注工具LabelImg对收集到的图像进行标注。根据图像中的垃圾类型和位置,为每张图像中的垃圾标注类别和边界框,确保标注的准确性和一致性

2.2 数据扩充

       将标注完成的图像数据集按比例划分为训练集、验证集和测试集,通常采用 70% 用于训练,20% 用于验证,10% 用于测试的比例。利用数据增强技术,如旋转、缩放、翻转和颜色变换等方法,增强数据集的鲁棒性。这一系列步骤的实施,确保了水面垃圾自动识别数据集的质量和实用性,为后续的模型训练和评估奠定了坚实基础。

三、实验及结果分析

3.1 实验环境搭建

3.2 模型训练

       模型训练之前,需要对收集到的水面垃圾图像进行预处理。这一步骤包括图像的缩放、归一化和数据增强等操作,以确保输入数据的质量和多样性。图像的缩放将图像调整为模型所需的输入尺寸,归一化则有助于加速模型的收敛过程。数据增强技术如随机旋转、翻转和颜色变换等,能够有效扩充训练数据集,提升模型的鲁棒性。

from torchvision import transforms

# 定义数据预处理流程
data_transforms = transforms.Compose([
    transforms.Resize((640, 640)),  # 将图像调整为640x640
    transforms.RandomHorizontalFlip(),  # 随机水平翻转
    transforms.ColorJitter(brightness=0.2, contrast=0.2, saturation=0.2, hue=0.1),  # 随机调整亮度、对比度等
    transforms.ToTensor(),  # 转换为Tensor
    transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),  # 归一化
])

       模型中引入注意力机制模块(如 CBAM)可以有效增强特征提取的能力。CBAM通过自适应地为特征图的每个区域分配权重,突出重要信息并抑制次要信息,从而提高模型对关键特征的关注度。在水面垃圾检测任务中,注意力机制使得模型能够更好地识别和分类不同类型的垃圾。

import torch
import torch.nn as nn

class CBAM(nn.Module):
    def __init__(self, in_channels, reduction=16):
        super(CBAM, self).__init__()
        self.channel_attention = ChannelAttention(in_channels, reduction)
        self.spatial_attention = SpatialAttention()

    def forward(self, x):
        x = self.channel_attention(x) * x
        x = self.spatial_attention(x) * x
        return x

# 示例:将CBAM模块集成到YOLOv5骨干网络中

       轻量化知识蒸馏通过建立教师网络和学生网络之间的知识传递关系,优化了模型的性能。引入提示学习机制,使得学生网络能够从教师网络的中间层获取更多信息,进而增强模型的泛化能力。在训练过程中,采用软标签和硬标签联合训练,进一步提高学生网络的识别精度。最终,通过优化 YOLOv5s 的骨干网络,可以有效解决网络计算量和收敛速度慢的问题。

import torch.nn.functional as F

# 计算蒸馏损失
def distillation_loss(student_output, teacher_output, target, temperature=2.0):
    soft_teacher_output = F.softmax(teacher_output / temperature, dim=1)
    soft_student_output = F.log_softmax(student_output / temperature, dim=1)
    loss = F.kl_div(soft_student_output, soft_teacher_output, reduction='batchmean') * (temperature ** 2)
    return loss

# 示例:在训练循环中使用蒸馏损失
for images, labels in train_loader:
    student_output = student_model(images)
    teacher_output = teacher_model(images)
    loss = distillation_loss(student_output, teacher_output, labels)

       训练完成后,使用平均精度(mAP)作为评价指标,评估模型在水面垃圾检测任务上的性能。通过对验证集进行评估,能够进一步优化模型参数,提高检测精度。

from sklearn.metrics import average_precision_score

# 计算平均精度
def evaluate_model(model, dataloader):
    model.eval()
    all_predictions = []
    all_labels = []
    with torch.no_grad():
        for images, labels in dataloader:
            outputs = model(images)
            predictions = outputs.argmax(dim=1)
            all_predictions.extend(predictions.cpu().numpy())
            all_labels.extend(labels.cpu().numpy())
    mAP = average_precision_score(all_labels, all_predictions)
    return mAP

最后

我是海浪学长,创作不易,欢迎点赞、关注、收藏。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值