前言
📅大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科同学来说是充满挑战。为帮助大家顺利通过和节省时间与精力投入到更重要的就业和考试中去,学长分享优质的选题经验和毕设项目与技术思路。
🚀对毕设有任何疑问都可以问学长哦!
选题指导:
最新最全计算机专业毕设选题精选推荐汇总
大家好,这里是海浪学长毕设专题,本次分享的课题是
🎯**基于深度学习的车道线检测算法识别系统**
课题背景和意义
当车道线被车辆等遮挡,被路边树木等在道路上形成阴影覆盖时自适应性差且难以满足实时性的要求,总的来说与驾驶员相比缺乏自适应能力。另外,当前的绝大多数车道线检测技术仅限于使用单帧图像进行检测,而在车辆驾驶过程中驾驶员直观接收到的是行驶视频。因此,将车道线检测由图像级别提升到视频级别,满足车辆以不同速度行驶时进行车道线检测,且泛化性强、检测速度快、鲁棒性好是实现更高级别自动驾驶技术的关键。
实现技术思路
一、车道线检测方法
1.1 卷积神经网络
卷积神经网络是一种包含卷积层、池化层等功能层的网络结构,通常是一种用来处理图像等大批量数据的深度学习模型,在目标检测、分割等领域应用广泛。受动物视觉表皮组织处理生物信息的启发,开发了神经元连接模式,提出了感受野的概念。神经元在感受野范围内对收到的信息做出反应,不同的神经元之间利用其重叠的感受野覆盖整个视野。
卷积层起到对数据进行特征提取的作用。卷积核分布在卷积层上,卷积核的每个元素都有其偏差量和权重系数。卷积层内每个神经元都与前一层中位置接近区域的多个神经元相连。“感受野”表示特征图某一区域与原图的对应,尺寸由卷积核决定。卷积操作时,会有规律的按卷积核的大小扫描输入特征并按元素相乘方法求和并叠加偏差。
在卷积神经网络中引用池化层的目的是通过下采样的方式降低网络模型的计算量,池化层分布在卷积层之间,使得由多个卷积层叠加的深度神经网络在可以提取具有更多空间细节的同时消除计算机算力瓶颈,并且达到避免过拟合的效果。池化层没有权重系数,虽然也具有局部连接,但不需要通过网络训练优化运算结果。
目标检测任务主要是用来寻找图像中的目标位置并确定目标种类,传统的目标检测算法主要基于手工提取特征,具体步骤可概括为:选取感兴趣区域进行特征分类,并对提取的特征进行检测。图像分割是一种像素级别的视觉任务。语义分割就是将图像中的每个像素归类将图像中的人、树木、草坪和天空等所属像素分别归为不同类别。全景分割是语义分割与实例分割的结合,全景分割不仅会对目标种类进行分割,也会对属于背景类别的区域进行检测,完成对每一个像素位置均进行分类的目的。
with torch.no_grad():
predictions = model(input_image)
masks = predictions[0]['masks']
labels = predictions[0]['labels']
scores = predictions[0]['scores']
for i in range(masks.shape[0]):
mask = masks[i, 0].numpy()
label = labels[i].item()
score = scores[i].item()
mask_binary = (mask > 0.5).astype(int)
Image.fromarray(mask_binary * 255).show()
1.2 注意力机制
改进语义分割网络ENet,结合Efficient Channel Attention(ECA)注意力机制,解决了远景车道线分割模糊的问题,为第二阶段的3D车道线结构预测提供优越的网络输入。ECA注意力机制为了提高网络对车道线结构的关注能力,能够生成每个通道的权重,并学习不同通道之间的相关性。将通道注意力信息与原始输入特征图进行信息结合,ECA注意力机制最终输出具有通道注意力的特征图。在网络的第二阶段,引入了CBAM注意力模块来辅助3D车道线结构预测,将它添加在了鸟瞰视角分割编码器和车道线预测头中间。CBAM注意力机制由空间注意力模块和通道注意力模块组成。CBAM注意力机制在通道和空间两个维度上提取了更多的全局信息,从而更好地预测3D车道线结构。
改进几何变换的方法来执行3D车道线结构预测任务,引入CBAM注意力机制聚合更多全局信息,改进Anchor表示的方法和线性插值损失函数辅助车道线精确拟合。3D车道点坐标表示为鸟瞰图坐标系的2D坐标(x,y)和车辆坐标系的高度Z。无论车辆行驶在上坡还是下坡路段时引入的几何变换均成立,利用这个几何关系可以把鸟瞰视角中的车道坐标映射回真实路面坐标。
二、 数据集
实验中使用了一个新的视频车道线检测数据集(VIL-100)。它包含100个视频,每个视频有100帧,共10000帧图像,涵盖了拥挤路况、车道线破损、雾霾、夜晚等10类复杂的交通场景,各种复杂交通场景类型及数量。该数据集将所有视频的帧率从最初的30fps下采样到10fps,对每帧中的所有车道线提供了实例级标注。
三、实验及结果分析
3.1 实验环境搭建
实验在NVIDIA Quadro RTX 6000 GPU上进行了训练和测试,使用Adam优化器训练了改进的多级记忆聚合网络。该算法由Python 3.7和Pytorch 1.13运行。由于GPU内存的限制,现有的视频目标检测方法通常将3、5或7个相邻帧作为网络输入进行采样,而基于记忆的方法需要记忆中的20帧来处理100帧的视频。此外,还展开了一个分别使用3、5和7帧作为网络输入的实验。
3.2 模型训练
在第一个训练阶段,使用预先训练好的ResNet-50初始化特征提取主干网络,学习率设置为10-5,动量值设置为0.9,权重衰减设置为5×10-4。
# 第一个训练阶段
for epoch in range(100):
# 在每个epoch之前记录时间
start_time = time.time()
# 进行训练
for inputs, labels in train_loader:
# 前向传播
outputs = model(inputs)
# 计算损失
loss = criterion(outputs, labels)
# 梯度清零
optimizer.zero_grad()
# 反向传播
loss.backward()
# 更新权重
optimizer.step()
# 在每个epoch之后记录时间并打印耗时
end_time = time.time()
epoch_time = end_time - start_time
print(f"Epoch [{epoch+1}/100], Time: {epoch_time:.2f} seconds")
在网络第二个训练阶段,使用随机梯度下降优化器优化整个网络,学习率设置为10-3,动量值设置为0.9,权重衰减设置为10-6,batch-size设置为1。第一个训练阶段共训练了100个epoch,耗时14小时。第二个训练阶段训练了50个epoch,耗时7小时。
# 第二个训练阶段
for epoch in range(50):
# 在每个epoch之前记录时间
start_time = time.time()
# 进行训练
for inputs, labels in train_loader:
# 前向传播
outputs = model(inputs)
# 计算损失
loss = criterion(outputs, labels)
# 梯度清零
optimizer.zero_grad()
# 反向传播
loss.backward()
# 更新权重
optimizer.step()
# 在每个epoch之后记录时间并打印耗时
end_time = time.time()
epoch_time = end_time - start_time
print(f"Epoch [{epoch+1}/50], Time: {epoch_time:.2f} seconds")
首先训练特征提取网络中的编码器,以提取每个视频帧的特征。具体来说,利用输入视频帧的过去两帧构建局部记忆,使用记忆读取模块读取局部记忆特征,以生成当前帧的实例级车道线检测结果。
基于图像的车道检测方法在基于线的指标上具有更好的性能,因为这些方法通常利用与线相关的信息(例如形状和方向)来推断车道线。相比之下,由于实例级视频目标检测方法将车道检测任务定义为一个基于区域的分割,因此在基于区域的指标上表现更好。
在基于实例级视频目标检测的方法中,提出的多级记忆聚合网络在六个指标上相比所有方法均取得了最好的效果。基准网络均漏检了部分车道区域且错误检测了部分背景像素为车道线。提出的网络可以更准确地检测车道线区域,并为车道线提供正确的实例标注。
实现效果图样例
最后
我是海浪学长,创作不易,欢迎点赞、关注、收藏。
毕设帮助,疑难解答,欢迎打扰!
本文转载自: https://blog.csdn.net/qq_37340229/article/details/135181960
版权归原作者 HaiLang_IT 所有, 如有侵权,请联系我们删除。
版权归原作者 HaiLang_IT 所有, 如有侵权,请联系我们删除。