目录
前言
📅大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科同学来说是充满挑战。为帮助大家顺利通过和节省时间与精力投入到更重要的就业和考试中去,学长分享优质的选题经验和毕设项目与技术思路。
🚀对毕设有任何疑问都可以问学长哦!
选题指导:
大家好,这里是海浪学长毕设专题,本次分享的课题是
🎯基于深度学习的工作人员吸烟检测系统
设计思路
一、课题背景与意义
规范约束工作人员的日常吸烟行为,对违规吸烟行为进行监测警告。烟雾报警器监测吸烟行为,依靠传感器技术对空气进行实时采样,尽管其检测精度较高,但该方法无法准确判断是人为原因还是其他原因导致报警,满足不了实时控烟的要求。
二、算法理论原理
YOLOv5.6.0版本中的YOLOv5s算法为基础,通过修改网络结构和添加相关模块,在保持网络轻量化的同时,有效提升吸烟行为检测精度,具有较高的实用价值。整个YOLOv5网络可以分为4个部分,分别是输入端、骨干网络Backbone、强特征提取网络Neck以及预测网络Prediction。YOLOv5s网络Backbone采用了卷积(Conv)替换了5.0版本Backbone中的Focus层,其目的是为了方便模型导出。
2.1 多头注意力机制
UCBerkeley和Google基于Transformers结构设计了一种结构简单、功能强大的Backbone,名为BotNet,其改变是将ResNet中的3x3卷积替换为多头注意力层(MHSA)。
将YOLOv5s网络Backbone和Neck中C3模块的3x3卷积替换为MHSA,使YOLOv5s网络可以关注图像全局,并且能够基于相同的注意力机制学习到不同的行为,提高算法学习能力,进而提高检测精度。替换后的结构与原网络C3模块相比,将Bottleneck模块替换成了BottleneckTransformer。
ECA模块的实现主要分为三步,第一步是将输入特征图进行全局平均池化操作,从而获得未降维的所有特征;第二步则进行卷积核大小为k的1维卷积操作,以此来捕获局部跨通道交互信息,接着经过Sigmoid激活函数得到各个通道的权重。
2.2 特征金字塔改进
BiFPN允许特征既能够自下而上也能够自上而下地反复流动,从而可以重复多次以得到更多高层特征融合,与FPN+PAN结构相比,BiFPN去掉了只有一条输入边和输出边的节点,并且如果输入和输出节点是同一层的,就额外添加一条边。因此,用BiFPN网络替换FPN+PAN的金字塔结构,可以有效增强不同网络层之间特征信息的传递,明显提升YOLOv5s算法检测精度,并且具有不错的检测性能。
相关代码:
import torch.nn as nn
# 定义全局平均池化层
global_avg_pool = nn.AdaptiveAvgPool2d(1)
# 假设输入特征图的维度为 (batch_size, channels, height, width)
input_features = torch.randn(batch_size, channels, height, width)
# 进行全局平均池化操作
output = global_avg_pool(input_features)
# 输出的维度为 (batch_size, channels, 1, 1),将输入特征图的高度和宽度降为1
print(output.shape)
三、检测的实现
3.1 数据集
实验的数据集采用两种方式进行采集,第一种采集方式是先录制模拟电厂厂区内不同人员吸烟的视频,然后按照一定的帧率间隔截取视频获得图片,另一种采集方式是从网络上搜集不同场景下的吸烟图片,通过上述采集方法共采集图片1395张,其中,视频截取图片873张,网络搜集图片522张。
对于准备好的数据集,采用LabelImg软件进行标注。按照标签为cigarette进行标注,标注完的信息以xml的格式保存在相同路径下,然后通过代码脚本将xml文件转换为YOLOv5模型需要的txt文件。最后将数据集按6:2:2的比例划分为三部分,分别为训练集、验证集和测试集。
3.2 实验环境搭建
实验平台操作系统为Ubuntu 18.04,实验以PyTorch为软件框架,编程环境为Python,CPU为Intel(R) Xeon(R) Gold 5118 CPU @ 2.3GHz,GPU为GeForce RTX 2080Ti,显存24G,内存128G。
3.3 实验及结果分析
训练结束后会生成相应的权重文件,将测试代码中的权重路径修改为生成的best权重文件,其余相关参数设置同训练设置一样,然后运行代码就会生成测试结果。使用原YOLOv5s检测时存在一定的误报和漏报,而使用改进后的算法进行检测时,误报和漏报情况明显改善,并且对于视频监控下远距离的人员吸烟行为检测置信度达79%,属于较易检测出的对象,检测效果较好。
为了验证加入注意力模块后算法的检测能力以及探究应该将注意力模块加到算法的具体哪个位置,通过在同一位置分别加入ECA、CBAM、CA三种注意力机制实验,结果表明,加入ECA注意力机制的效果最好。然后再变换ECA加入的位置,具体替换位置如下所示。通过实验得出,将ECA加到Backbone部分中80×80×25。
相关代码如下:
# 设定图像变换
transform = transforms.Compose([
transforms.Resize((640, 640)), # 调整图像大小
transforms.ToTensor(), # 转换为Tensor格式
transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) # 归一化
])
# 加载图像
image = Image.open('smoking_image.jpg').convert('RGB')
# 对图像进行变换
input_tensor = transform(image).unsqueeze(0)
# 将输入数据传入模型进行推理
results = model(input_tensor)
# 获取检测结果
detections = results.pandas().xyxy[0]
# 遍历检测结果
for _, detection in detections.iterrows():
class_name = detection['name']
confidence = detection['confidence']
bbox = detection[['xmin', 'ymin', 'xmax', 'ymax']].values
print(f'Class: {class_name}, Confidence: {confidence}, BBox: {bbox}')
实现效果图样例
创作不易,欢迎点赞、关注、收藏。
毕设帮助,疑难解答,欢迎打扰!