毕业设计-基于深度学习的小目标烟雾火焰检测算法系统 YOLO python 卷积神经网络 人工智能
毕业设计-基于深度学习的小目标烟雾火焰检测算法系统,该系统旨在解决传统方法在小目标检测和烟雾火焰识别方面的限制。我们采用了深度学习技术,结合预训练的模型和自定义的数据集,实现了高效而准确的目标检测和分类。通过使用转置卷积进行上采样,我们能够恢复缺失的鼠洞信息,提高烟雾和火焰的识别率。实验结果表明,该算法系统在小目标烟雾火焰检测方面表现出色,具有很高的应用潜力和实用性。研究成果对于提升现有火灾预警系
目录
前言
📅大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科同学来说是充满挑战。为帮助大家顺利通过和节省时间与精力投入到更重要的就业和考试中去,学长分享优质的选题经验和毕设项目与技术思路。
🚀对毕设有任何疑问都可以问学长哦!
选题指导:
大家好,这里是海浪学长毕设专题,本次分享的课题是
🎯基于深度学习的小目标烟雾火焰检测算法系统
设计思路
一、课题背景与意义
在日常生活中,火灾会对人类带来巨大的伤害,危害人类的身体健康,同时会影响社会健康发展和人民财产安全。而火灾在发生初期是很容易被扑灭的,因此,通过对火灾发生初期的烟雾与火焰进行迅速准确的检测是非常有必要的,可以很大程度上减少火灾带来的危害与损失。
二、算法理论原理
2.1 SimAM注意力机制
计算机视觉中的注意力机制目的是模仿人类视觉系统,能够有效地在复杂场景中找到显著区域。通过注意力机制可以对输入图像的特征进行动态权重调整。注意力机制已经在许多视觉任务中取得了成功。SimAM注意力模块不同于现有1-D通道注意力和2-D空域注意力,无需额外参数去推导出3-D注意力权值,简单且高效,只需通过一个Energy函数来计算注意力权重。
2.2 Neck结构改进
为了加强网络对小目标的检测能力,且不扩大输入的分辨率,将在网络的第三层,也就是CSP1_1部分增加一个特征图输出,接入Neck部分作为P2输出,输入的大小为640×640时,P2的特征图大小为160×160,每格特征图对应输入图中以4×4的感受野,可以更好检测小目标,同时也可在特征融合的过程中为其他层提供信息。但是P2的部分仅经过4倍下采样,干扰信息较多,为更好地提取特征,将对YOLOv5s的Neck部分进行改进。
改进后的结构增加了些许复杂度,但每个特征图能融合更多的信息,能在提高在检测时的精度。同时,原有的特征融合过程中并没有对不同特征进行区分,仅仅为简单的相加融合,在改进后的Neck结构中,将特征融合优化为带权特征融合,区分每个权重的重要性。
相关代码:
class Attention(nn.Module):
def __init__(self, input_dim):
super(Attention, self).__init__()
self.input_dim = input_dim
self.energy = nn.Linear(input_dim, 1)
def forward(self, x):
# 计算能量分数
energy_scores = self.energy(x)
# 计算注意力权重
attention_weights = torch.softmax(energy_scores, dim=1)
return attention_weights
# 创建输入张量
input_dim = 256
batch_size = 32
sequence_length = 10
input_tensor = torch.randn(batch_size, sequence_length, input_dim)
# 创建注意力模型实例
attention_model = Attention(input_dim)
# 计算注意力权重
attention_weights = attention_model(input_tensor)
# 打印注意力权重
print("Attention weights:", attention_weights)
三、检测的实现
3.1 数据集
数据集是深度学习网络的基本,优秀的数据集能让模型有更强的鲁棒性和泛化性,为解决现有数据集的限制,制作了一个多场景的复杂烟雾与火焰数据集,数据来源于多个公共火灾数据集,搜索引擎搜索和网络火焰烟雾视频截取。
获取到的数据大多没有标注或标注不全,将对数据重新标注,对数据采用最大外接矩形框标注,将显著特征都包括进去,标注为fire、smoke两个类,标注格式为YOLO格式。在数据集收集与整理后,总共有9981张图片,每张图片中至少含有一个标签,对数据集进行统计。
3.2 实验环境搭建
实验环境硬件配置:CPU为AMD R7 5800H,GPU为NVIDIA RTX 3070 Laptop,操作系统为Windows10,编译环境为Python3.8+Pytorch1.10.1+CUDA11.3。
当置信度阈值设定为0.5时,各项指标综合最高,由此表示此时的模型性能最好,其中precision为82.1%,recall为70.4%,mAP为78.9%。
3.3 实验及结果分析
在训练集与验证集中都比YOLOv5s网络更小,未出现严重过拟合现象,且训练花费时间更短,学习速率更高。改进后的网络比原网络收敛更快,在训练时更有效率。
改进后的网络比原YOLOv5s的精度指标更高,在火焰和烟雾检测中更有优势。同时因为数据集中大部分数据为小目标数据,当精度提升后,可以认定为对小目标检测效果提升。
改进后的网络相较于YOLOv5s,在没有过多增加参数与权重大小的情况下,对火焰与烟雾中精度更高,提升了对小目标的检测精度,能满足实时检测的需求。
相关代码如下:
import torch
import torchvision
from torchvision.models.detection import FasterRCNN
from torchvision.transforms import transforms
from PIL import Image
# 加载预训练的模型
model = torchvision.models.detection.fasterrcnn_resnet50_fpn(pretrained=True)
model.eval()
# 图像预处理
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
filtered_boxes = []
filtered_scores = []
filtered_labels = []
for box, score, label in zip(boxes, scores, labels):
if score > threshold and (label == 1 or label == 2):
filtered_boxes.append(box)
filtered_scores.append(score)
filtered_labels.append(label)
# 打印检测结果
for box, score, label in zip(filtered_boxes, filtered_scores, filtered_labels):
print('Class:', label.item())
print('Confidence:', score.item())
print('Box coordinates:', box.tolist())
实现效果图样例
创作不易,欢迎点赞、关注、收藏。
毕设帮助,疑难解答,欢迎打扰!
最后
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)