目录
前言
📅大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科同学来说是充满挑战。为帮助大家顺利通过和节省时间与精力投入到更重要的就业和考试中去,学长分享优质的选题经验和毕设项目与技术思路。
🚀对毕设有任何疑问都可以问学长哦!
选题指导:
大家好,这里是海浪学长毕设专题,本次分享的课题是
🎯基于深度学习的煤矸目标检测算法系统
设计思路
一、课题背景与意义
虽然煤矸石的检测精度有了一定的提升,但普遍都存在模型较大、参数量较多、检测速度慢等问题。设计一种基于深度学习的煤矸目标检测方法,在满足煤矸识别准确度的基础上,提高了煤矸识别速度,大幅度降低了模型的复杂度。
二、算法理论原理
2.1 ShufflNetV2
对YOLOv5s进行如下改进: 首先在backbone模块将原YOLOv5s中的主干网络整体替换为ShuffleNetv2网络; 其次在Neck模块中精简了模型区域,将模型中的20×20的特征分支图删除,同时将自适应锚框从原来的9组删减为6组,最后使用SIOU替换CIOU,同时在特征融合层引入CBAM注意力机制,有利于模型更好地融合有价值的特征。
ShufflNetV2是一种轻量化的特征提取网络模型,其优点是将速度和精度两者的关系做了很好的平衡处理。首先,ShufflNetV2引入了“channel split”通道分离操作,在特征图像输入之前将输入通道划分为2个分支,每个分支的通道数是相等的。其中左部的分支不进行操作,右边的分支进行1个1×1Conv(普通卷积)和1个3×3DWConv(深度可分离卷积)的操作。1×1的Conv主要作用是控制输入和输出通道数的大小,平衡了通道数之后将两个分支进行Concat(拼接)操作,达到提高速度的目的,接着对Concat后的结果做Channel Shuffle(通道混洗),增加左右两部分分支的信息交融4ShuffleNetv2模块步长为2,没有继续使用通道分离操作,直接将两个分支同时复制一份输入,每个分支有步长为2的下采样,这样再通过Concat交融到一起后输出通道的数量变为输入的两倍,完成了下采样的操作。
2.2 CBAM 注意力机制
CBAM(Convolutional Block Attention Module)是一种轻量型的结构,主要包含通道注意力机制和空间注意力机制两个单独的模块,随后将两者结合起来,能够使网络更好地检测到输入图像中物体的特征内容,防止特征信息的丢失。
相关代码:
# 创建输入张量
batch_size = 32
channels = 64
height = 256
width = 256
input_tensor = torch.randn(batch_size, channels, height, width)
# 定义通道划分模块的参数
in_channels = 64
out_channels = 32
# 创建通道划分模块实例
channel_split_module = ChannelSplitModule(in_channels, out_channels)
# 将输入张量划分为两个分支
output1, output2 = channel_split_module(input_tensor)
# 打印分支输出的形状
print("Output 1 shape:", output1.shape)
print("Output 2 shape:", output2.shape)
三、检测的实现
3.1 数据集
数据收集了450张煤和矸石的图像,取白色的石板作为煤和矸石的背景。按照7∶3来划分训练样本和测试样本。通过LabelImg软件对图像进行标注,完成预处理流程。
3.2 实验环境搭建
基于Pytorch1.7.1框架,操作系统为Windows10,CPU为Intel(R) Core(TM) i7-8750,CPU主频为2.2GHz,GPU为NVIDIA GTX 1050Ti,运行内存为8GB。训练中输入640×640大小的图像; 使用三通道作为图像输入; 批次的样本数量是1; 权重衰减参数设置为0.0005; 训练轮数取150轮; 学习率取0.01; 进化超参数catch设为false。
3.3 实验及结果分析
实验采用模型大小(Model)、参数量(Params)、计算量(FLOPs)、每秒传输帧数(FPS)以及平均准确率(mean Average Precision,mAP)作为性能指标对煤矸石检测算法进行验证。不同改进模型的对比结果
CBAM注意力机制和SE注意力机制的mAP均为99.1%,但CBAM注意力机制的参数量和计算量减少得最多,且FPS提高得也最多。通过实验分析,本算法使用的CBAM注意力机制更优。
相关代码如下:
# 图像预处理
transform = transforms.Compose([
transforms.ToTensor(),
])
# 加载图像
image_path = 'path_to_image.jpg'
image = Image.open(image_path)
image_tensor = transform(image)
# 将图像转移到GPU(如果可用)
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
image_tensor = image_tensor.to(device)
# 运行图像通过模型
outputs = model([image_tensor])
# 解析输出
boxes = outputs[0]['boxes']
scores = outputs[0]['scores']
labels = outputs[0]['labels']
# 设置阈值来筛选煤矸目标
threshold = 0.5
coal_waste_boxes = []
for box, score, label in zip(boxes, scores, labels):
if score > threshold and label == 1: # 假设煤矸目标的标签为1
coal_waste_boxes.append(box)
# 打印检测结果
for box in coal_waste_boxes:
print('Coal waste box coordinates:', box.tolist())
创作不易,欢迎点赞、关注、收藏。
毕设帮助,疑难解答,欢迎打扰!