前言
📅大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科同学来说是充满挑战。为帮助大家顺利通过和节省时间与精力投入到更重要的就业和考试中去,学长分享优质的选题经验和毕设项目与技术思路。
🚀**对毕设有任何疑问都可以问学长哦!**
选题指导:
最新最全计算机专业毕设选题精选推荐汇总
大家好,这里是海浪学长毕设专题,本次分享的课题是
🎯基于深度学习的水面垃圾目标检测系统
设计思路
一、课题背景与意义
随着环保意识的提高,清理水面垃圾成为一项重要任务。为了提高清理效率,快速检测水面垃圾成为关键。目前水面垃圾检测算法可分为基于红外成像传感器、激光雷达和视觉可见光的方法。然而,基于激光雷达和红外成像传感器的方法在图像处理特征上差异不大。本项目选择了基于深度学习的水面垃圾检测YOLOv5算法,该算法具有高精度、小体积和快速的优势,非常适合本项目的垃圾目标检测需求。
二、算法理论原理
2.1 YOLOv5算法
YOLOv5s模型在水面垃圾目标检测系统中具有很好的应用潜力。由于YOLOv5s具有速度快、体积小和高精度等优点,它可以快速而准确地检测水面上的垃圾目标。在水面垃圾清理任务中,使用YOLOv5s模型可以帮助提高清理工作的效率和准确性。通过实时检测和定位水面垃圾,清理人员可以快速了解垃圾的分布情况并采取相应的行动。此外,YOLOv5s模型的小体积也使得它适用于移动设备的部署,方便在现场进行实时的水面垃圾检测。综上所述,YOLOv5s模型在水面垃圾目标检测系统中具备出色的性能和应用前景。
2.2 卷积神经网络
深度卷积网络在水面垃圾检测系统中广泛应用,并取得了良好的效果。深度卷积网络是一类深度学习模型,通过多层卷积和池化操作,可以有效地提取图像中的特征,并用于目标检测和分类任务。深度卷积网络在水面垃圾检测系统中的应用可以帮助实现自动化的垃圾识别和定位,提高垃圾清理效率,并减少人工干预。随着深度学习技术的不断进步和模型的不断优化,深度卷积网络在水面垃圾检测领域将继续发挥重要作用。
深度卷积网络的一般流程简介:
输入层:深度卷积网络接受图像作为输入。图像通常表示为一个多维数组,每个元素表示像素值或特征。
卷积层:卷积层是深度卷积网络的核心组件。它由多个滤波器(卷积核)组成,每个滤波器在输入图像上进行卷积操作,提取局部特征。卷积操作通过滑动滤波器与输入进行点乘,并将结果求和,生成特征图。
激活函数:在卷积层后,通常会应用激活函数,如ReLU(修正线性单元),以引入非线性特征,增强网络的表示能力。
池化层:池化层通过降采样操作减小特征图的空间尺寸,减少参数数量,同时保留重要的特征。常见的池化操作包括最大池化和平均池化。
全连接层:全连接层将池化层输出的特征图展平为一维向量,并通过一系列全连接操作进行分类、回归或其他任务。全连接层通常包括多个神经元,每个神经元与前一层的所有神经元相连接。
输出层:输出层根据任务的不同,可以采用不同的激活函数和损失函数。对于分类任务,常用的激活函数是softmax函数,而对于回归任务,可以使用线性激活函数或其他适当的函数。
反向传播和优化:在训练过程中,通过反向传播算法计算网络参数的梯度,并使用优化算法(如随机梯度下降)来更新参数,使网络能够逐渐学习到更好的特征表示。
预测和推断:在训练完成后,深度卷积网络可以用于预测新输入样本的类别、位置或其他任务。通过输入新样本,网络将前向传播,生成相应的预测结果。
深度卷积网络的层数和参数数量可以根据任务的复杂性和要求进行调整。更深的网络通常可以学习到更复杂的特征表示,但也会增加计算和内存需求。因此,在实际应用中,需要根据任务的具体需求和资源限制来选择适当的网络结构。
相关代码:
import cv2
import numpy as np
from matplotlib import pyplot as plt
def mosaic_augmentation(images, mosaic_size):
# 随机选择一张图片作为基准图片
base_image = images[np.random.randint(len(images))]
base_height, base_width = base_image.shape[:2]
# 随机生成裁剪区域的起始坐标
x = np.random.randint(0, base_width - mosaic_size)
y = np.random.randint(0, base_height - mosaic_size)
# 随机生成缩放比例
scale = np.random.uniform(0.5, 1.5)
scaled_size = int(mosaic_size * scale)
# 裁剪基准图片
mosaic = base_image[y:y+mosaic_size, x:x+mosaic_size]
# 对裁剪后的基准图片进行缩放
mosaic = cv2.resize(mosaic, (scaled_size, scaled_size))
# 对其他图片进行随机缩放和裁剪处理,并添加到马赛克图像中
for image in images:
if image is base_image:
continue
height, width = image.shape[:2]
scale = np.random.uniform(0.5, 1.5)
scaled_size = int(mosaic_size * scale)
x = np.random.randint(0, width - scaled_size)
y = np.random.randint(0, height - scaled_size)
cropped_image = image[y:y+scaled_size, x:x+scaled_size]
cropped_image = cv2.resize(cropped_image, (mosaic_size, mosaic_size))
mosaic = cv2.addWeighted(mosaic, 0.5, cropped_image, 0.5, 0)
return mosaic
# 加载多张水面垃圾图片
images = []
images.append(cv2.imread('image1.jpg'))
images.append(cv2.imread('image2.jpg'))
images.append(cv2.imread('image3.jpg'))
# 定义马赛克大小
mosaic_size = 256
# 创建马赛克增强后的图像
augmented_image = mosaic_augmentation(images, mosaic_size)
# 可选:显示增强后的图像
plt.imshow(cv2.cvtColor(augmented_image, cv2.COLOR_BGR2RGB))
plt.axis('off')
plt.show()
三、检测的实现
3.1 数据集
由于网络上没有现有的合适数据集,我决定亲自前往水域进行拍摄,收集图片并创建一个全新的数据集。该数据集包含了多种水面垃圾的照片,涵盖了不同类型和形状的垃圾,以及它们在水面上的分布情况。为确保模型的质量,采集了尽可能接近实际应用场景的水面垃圾图片,并对这些图片进行了编号和重命名。共收集了1000张图片,并按照7:3的比例划分为训练集和测试集。为了进行目标检测,使用了Labelimg软件对水面垃圾进行标注,并将标注结果转换成YOLOv5s的格式,以便训练和评估模型。通过这样的数据准备过程,可以提高训练后模型的质量,并使其更适应实际应用场景。
数据增强是通过应用各种变换和扩充操作来改善自制数据集的多样性和数量。对于水面垃圾目标检测的数据集,常用的数据增强技术包括随机裁剪、水平翻转、旋转、缩放、平移、亮度和对比度调整,以及噪声添加。通过这些技术,可以模拟不同场景和观察条件下的垃圾目标,增加数据集的多样性,提高模型的鲁棒性和泛化能力。确保数据增强操作不改变目标的类别和位置信息,以保持数据的准确性和可靠性。综上所述,数据增强是改善水面垃圾目标检测数据集的重要手段,为研究和应用提供更准确、全面的数据基础。
相关代码示例:
# 使用示例:
new_width = 200
new_height = 200
angle_range = 30
scale_range = (0.8, 1.2)
translation_range = 50
brightness_range = (-50, 50)
contrast_range = (0.8, 1.2)
noise_type = 'gaussian'
noise_factor = 0.1
# 随机裁剪
cropped_image = random_crop(image)
# 水平翻转
flipped_image = horizontal_flip(image)
# 旋转
rotated_image = random_rotation(image, angle_range)
# 缩放
scaled_image = random_scaling(image, scale_range)
# 平移
translated_image = random_translation(image, translation_range)
# 亮度和对比度调整
adjusted_image = adjust_brightness_contrast(image, brightness_range, contrast_range)
# 噪声添加
noisy_image = add_noise(image, noise_type, noise_factor)
3.2 实验环境搭建
搭建水面垃圾检测环境并对模型进行训练,实验应用的操作系统为Windows10,开发语言
选择 Python 语言。
3.3 实验及结果分析
使用搭建好的环境,进行了水面垃圾检测模型的训练:
- 导入数据集:加载经过标注的水面垃圾图像数据集,并划分为训练集和测试集。
- 模型选择和配置:选择适合水面垃圾检测的模型,如YOLOv5s,并进行相应的配置,如网络结构、超参数等。
- 模型训练:使用训练集对模型进行训练,并通过迭代优化模型的权重和损失函数。
- 模型评估:使用测试集对训练后的模型进行评估,计算指标如准确率、召回率等,以评估模型的性能。
改进后的方法能够准确地识别水面垃圾并分类标注,对于不同数量和种类的垃圾都具有良好的检测效果。平均置信度达到0.6,可满足环卫工人搜寻水面垃圾的需求,提高工作效率。
相关代码如下:
# 设置模型为评估模式
model.eval()
# 定义类别标签
class_labels = ['plastic bottle', 'food wrapper', 'fishing net']
# 加载测试图像
image = torch.randn(1, 3, 416, 416) # 示例输入图像,尺寸为(1, 3, 416, 416)
# 运行图像通过模型进行推理
with torch.no_grad():
outputs = model(image)
# 解析预测结果
pred_boxes = outputs.pred[0][:, :4] # 预测框坐标
pred_scores = outputs.pred[0][:, 4] # 预测置信度
pred_class_indices = outputs.pred[0][:, 5].long() # 预测类别索引
# 根据置信度阈值过滤预测结果
threshold = 0.5 # 置信度阈值
filtered_indices = pred_scores >= threshold
filtered_boxes = pred_boxes[filtered_indices]
filtered_scores = pred_scores[filtered_indices]
filtered_class_indices = pred_class_indices[filtered_indices]
# 打印过滤后的预测结果
for box, score, class_index in zip(filtered_boxes, filtered_scores, filtered_class_indices):
class_label = class_labels[class_index]
print(f"Class: {class_label}, Score: {score}, Box: {box}")
创作不易,欢迎点赞、关注、收藏。
毕设帮助,疑难解答,欢迎打扰!
最后
版权归原作者 HaiLang_IT 所有, 如有侵权,请联系我们删除。