目录
? ? ? ?📅大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科同学来说是充满挑战。为帮助大家顺利通过和节省时间与精力投入到更重要的就业和考试中去,学长分享优质的选题经验和毕设项目与技术思路。
? ? ? ??🚀对毕设有任何疑问都可以问学长哦!
? ? ? ? ?选题指导:
? ? ? ??大家好,这里是海浪学长毕设专题,本次分享的课题是
? ? ? ? 🎯基于深度学习的交通路面障碍物目标检测系统
随着社会经济的快速发展,越来越多的家庭拥有私家车,如何减少交通意外的发生和实现无人驾驶成为新问题。辅助系统的出现成为解决问题的关键技术,是高精度识别交通路面障碍物的一个重要组成部分。能否及时提醒驾驶员注意交通路面障碍物成为一项安全技术。
YOLOV5模型包括Input、Neck、Backbone和Prediction四个部分。Yolov5网络模型在基础的锚框上进行模拟得到预测框,如果所得预测框计算与实际相差过大,可以改变代码将自动锚功能关闭。Backbone在新增操作的Foucs操作中,切片操作非常重要,其过程是逐步变化的。Neck的结构是FPN(自上而下)+PAN(自底向上结构的特征金字塔)结构,FPN结构采用上采样方法进传递信息和融合信息,获取预测的结果图。Prediction由非极大值抑制(NMS)和Bounding box损失函数两大部分组成。在Bounding box中,GIOU_Loss函数作为损失函数,通过NMS函数可以在预测结果处理阶段解决重合目标边框或进行筛选。
?
相关代码:
import torch
import torch.nn as nn
class FPN(nn.Module):
def __init__(self, in_channels_list, out_channels):
super(FPN, self).__init__()
self.in_channels_list = in_channels_list
self.num_layers = len(in_channels_list)
self.out_channels = out_channels
# Lateral convolutions
self.lateral_convs = nn.ModuleList()
for i in range(self.num_layers):
conv = nn.Conv2d(in_channels_list[i], out_channels, kernel_size=1)
self.lateral_convs.append(conv)
# Top-down pathway convolutions
self.topdown_convs = nn.ModuleList()
for i in range(self.num_layers - 1, 0, -1):
conv = nn.Conv2d(out_channels, out_channels, kernel_size=3, padding=1)
self.topdown_convs.append(conv)
# Smooth convolution
self.smooth_conv = nn.Conv2d(out_channels, out_channels, kernel_size=3, padding=1)
def forward(self, inputs):
# Lateral connections
laterals = [lateral_conv(inputs[i]) for i, lateral_conv in enumerate(self.lateral_convs)]
# Top-down pathway
for i in range(self.num_layers - 1, 0, -1):
_, _, H, W = laterals[i - 1].size()
topdown = nn.functional.interpolate(laterals[i], size=(H, W), mode='nearest')
laterals[i - 1] += topdown
laterals[i - 1] = self.topdown_convs[i - 1](laterals[i - 1])
# Smooth convolution
outputs = [self.smooth_conv(laterals[i]) for i in range(self.num_layers)]
return outputs
# Example usage
in_channels_list = [256, 512, 1024, 2048] # Example input channels for each FPN level
out_channels = 256 # Desired output channels for FPN
fpn = FPN(in_channels_list, out_channels)
# Assuming inputs is a list of feature maps from different network levels
inputs = [torch.randn(1, c, h, w) for c, h, w in zip(in_channels_list, [64, 32, 16, 8])]
outputs = fpn(inputs)
# 'outputs' will be a list of feature maps from FPN, with the same number of levels as 'inputs'
从线上收集10 000张路面障碍物的图片,组合训练集和测试集,训练集和测试集比例为1∶7,即1 250张∶8 750张,样本集中obstacle表示有障碍物,通过labelimg软件对路面障碍物进行标注。
?
数据预处理:对收集的图像数据进行预处理,包括图像缩放、裁剪、亮度调整等,以提高模型的鲁棒性和泛化能力。此外,可以使用数据增强技术,如随机旋转、平移、翻转等,扩充数据集并减少过拟合。
障碍物标注情况:
进行目标识别检测时,首先输入样本图片,通过Yolov5算法,采用labelimg软件对目标障碍物进行框选,开始训练,得到需要的数据集。与对应的数据进行对比,选择准确度更高的图片输出,基于Yolov5算法对交通路面障碍物进行检测,验证其准确性和实时性
?
使用Yolov5算法模型进行训练,通过改进损失函数,采用DIoU损失函数替代GIoU损失函数。由试验结果可知,采用这种方法可以更准确和迅速标注。Yolov5算法相较于Yolov4,具有更高的实时性和准确性。
相关代码如下:
import torch
from torchvision.models import yolov5
# 加载预训练的YOLOv5模型
model = yolov5s(pretrained=True)
# 设置模型为评估模式
model.eval()
# 定义类别标签
class_labels = ['obstacle', 'car', 'pedestrian', 'bicycle', 'motorcycle']
# 加载测试图像
image = torch.randn(1, 3, 416, 416) # 示例输入图像,尺寸为(1, 3, 416, 416)
# 运行图像通过模型进行推理
with torch.no_grad():
outputs = model(image)
创作不易,欢迎点赞、关注、收藏。
毕设帮助,疑难解答,欢迎打扰!