目录
前言
📅大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科同学来说是充满挑战。为帮助大家顺利通过和节省时间与精力投入到更重要的就业和考试中去,学长分享优质的选题经验和毕设项目与技术思路。
🚀对毕设有任何疑问都可以问学长哦!
选题指导:
大家好,这里是海浪学长毕设专题,本次分享的课题是
🎯基于深度学习的多尺度交通灯检测系统
设计思路
一、课题背景与意义
基于视觉的交通灯检测、行人检测和车辆检测作为自动驾驶的核心技术受到众多学者关注。对交通灯的准确定位与类别识别能够获取路口信息,为自动驾驶汽车的决策提供重要的数据支持,减少了汽车行驶的安全隐患。因此,一个具有可靠性与实时性的交通灯检测算法能够保障自动驾驶汽车的行驶安全,避免交通事故发生。
二、算法理论原理
2.1 复合数据增强
针对YOLOv5模型泛化能力差,容易出现过拟合,且采集的数据集规模不大的问题,我们提出复合数据增强策略;针对YOLOv5的输入是固定尺度,提取到的特征信息有限的问题,我们提出多尺度代替固定尺度的训练方式;针对YOLOv5将3种尺度语义信息送入检测头,对小目标的检测能力不足的问题,提出多尺度特征融合的改进方式,并引入远跳连接传输语义信息。
YOLOv5使用mosaic方法对图像进行增强处理。考虑到制作数据集的规模不大,且环境复杂多样,因此在mosaic基础上提出复合数据增强方式对模型的输入进行增强,以提高模型输入的复杂性、增加训练难度,从而提升模型的泛化能力。
2.2 多尺度融合
多尺度YOLOv5流程:基于深度学习的多尺度交通灯检测系统;使用多尺度训练方法随机为增强结果选择尺度,并输入模型;主干网络提取特征信息,将4倍、8倍、16倍和32倍采样提取的信息作为基础特征;将4种不同尺度特征送入设计的特征融合网络,生成多尺度的高级语义信息;对多尺度高级语义信息计算损失,通过反向传播训练模型权重。
相关代码:
import torch
import torch.nn as nn
import torchvision.models as models
# 定义多尺度交通灯检测模型
class TrafficLightDetector(nn.Module):
def __init__(self, num_classes):
super(TrafficLightDetector, self).__init__()
self.backbone = models.resnet50(pretrained=True)
self.num_classes = num_classes
self.num_bbox_params = 5 # x, y, w, h, confidence
# 添加自定义的检测头
self.detection_head = nn.Sequential(
nn.Conv2d(2048, 512, kernel_size=3, stride=1, padding=1),
nn.ReLU(),
nn.Conv2d(512, self.num_classes * self.num_bbox_params, kernel_size=1, stride=1)
)
def forward(self, x):
features = self.backbone(x)
detection_output = self.detection_head(features)
return detection_output
三、检测的实现
3.1 数据集
采集了10万张现实中的交通灯影像,并从中筛选出了16,333张图像,并使用Labelme工具进行标注,制作成交通灯检测数据集。数据集按照8:2的比例划分为训练集和测试集。
3.2 实验环境搭建
模型的训练在Ubuntu 18.04操作系统、PyTorch框架下完成,硬件平台为Nvidia Tesla V100 PCIE 32GB GPU,处理器为Intel(R) Xeon(R) Silver 4214R CPU 2.4GHz,软件环境为CUDA 10.1和Python 3.8。
3.3 实验及结果分析
实验训练了300个epochs,初始学习率为0.001,学习率衰减系数为0.2,采用余弦退火衰减方式,动量常数设置为0.937,batch大小为32,回归损失系数为0.05,分类损失系数为0.5,置信度损失系数为1.0。实验中使用了13,066张图像进行训练,并在3,267张图像上进行了测试。
MS-YOLOv5l在训练开始的前20个epochs,训练损失快速下降到0.045。从第40个epoch开始,模型损失下降逐渐变缓,模型开始趋于收敛,损失值在0.02附近浮动。改进后模型的损失稳步下降,其中前期下降速度较快。
MS-YOLOv5l的验证结果如图所示。验证集的mAP在前20个epochs快速上升,达到0.96。随着模型的收敛,mAP的上升速度也逐渐变慢,最后趋于稳定。通过验证mAP曲线,可知模型未发生过拟合。
对小目标的检测结果:
相关代码如下:
class TrafficLightDetector(nn.Module):
def __init__(self, num_classes):
super(TrafficLightDetector, self).__init__()
# 模型定义...
def forward(self, x):
# 前向传播...
# 创建模型实例
model = TrafficLightDetector(num_classes=3) # 假设有3个类别的交通灯
# 加载预训练模型权重(如果有)
model.load_state_dict(torch.load('traffic_light_detector.pth'))
# 数据预处理和增强
transform = transforms.Compose([
transforms.Resize((300, 300)), # 调整图像尺寸为300x300
transforms.ToTensor(), # 转换为Tensor
transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) # 归一化
])
# 创建数据集实例
dataset = YourDataset(data_dir, transform=transform)
# 创建数据加载器
dataloader = DataLoader(dataset, batch_size=32, shuffle=True)
# 定义训练过程
criterion = nn.CrossEntropyLoss()
optimizer = torch.optim.SGD(model.parameters(), lr=0.001)
for epoch in range(300):
for images, labels in dataloader:
# 随机选择尺度进行增强
scale_factor = torch.rand(1) * 0.5 + 0.5 # 随机选择0.5到1之间的尺度因子
resized_images = torch.nn.functional.interpolate(images, scale_factor=scale_factor, mode='bilinear', align_corners=False)
# 输入模型进行训练
outputs = model(resized_images)
loss = criterion(outputs, labels)
optimizer.zero_grad()
loss.backward()
optimizer.step()
实现效果图样例
创作不易,欢迎点赞、关注、收藏。
毕设帮助,疑难解答,欢迎打扰!