车道检测旨在识别道路上可见车道边界线的位置和曲度。这一功能可以帮助车辆行驶于车道中间,并在车道改变时进行安全导航。
上一篇文章提到,必须用算法预测车辆的类别(分类)和位置(边界框)。本例则有所不同,我需要算出一组数字,用来表示左右车道边界线的抛物线系数。
为解决这一问题,我将构建一个执行回归的 CNN 输出系数。
与上一篇博文中提到的步骤类似,第一步是通过表示出左右车道边界线的真值标注一组训练数据。和之前一样,我建议使用MATLAB Automated Driving System Toolbox中的 Ground Truth Labeler app。除了使用矩形边界框标注其他目标外,请注意观察我如何在下图中用多条线标注车道边界线。

标注的目标和车道边界线
为便于了解车道边界线的真值,下表显示了用于存储系数的表。注意:每一栏代表其中一个抛物线系数。

表示车道边界线的抛物线系数
您会发现,本次任务只有 1225 个训练样本,而这通常不足以训练一个深度网络。实际原因是我使用了迁移学习,也就是利用一个已经存在且经过大量图像训练的网络进行寻找车道边界线的特定任务。
我将以 AlexNet 为起点,训练它识别 1000 种不同类别的图像。您可以使用一行代码,将预先训练好的 AlexNet 模型加载到 MATLAB 中。当然,MATLAB 允许您加载其他模型,比如 GoogLeNet、VGG-16 和 VGG-19,或者从 Caffe ModelZoo导入模型。

当网络加载到 MATLAB 中之后,我需要稍微修改一下它的结构,把它从一个分类网络变成一个回归网络。注意:在下面的代码中,我有 6 个输出结果,对应每个车道边界线(左和右)的三个抛物线系数。

训练该网络时,我使用了一个 NVIDIA Titan X (Pascal) GPU。如下图中所示,训练该网络耗时 245 秒。
这次花费的时间比我预期的要少,主要原因是由于只需训练得到新层有限数量的权值。另一个原因是,当有 GPU 可用时,MATLAB 会自动使用 CUDA 和 cuDNN 加速训练过程。

在 NVIDIA Titan X GPU 上训练车道边界线检测回归网络的训练进度
尽管训练样本数量有限,但网络表现非常出色,准确地检测出了车道边界线,如下图所示。
车道边界线检测网络的输出
在本系列博文中,我介绍了如何使用深度学习和 MATLAB 完成一些常见的自动驾驶感知任务。我希望这些文章能帮助您了解真值标注将如何影响解决这些问题所需的时间,以及在MATLAB 中使用 GPU 加速定义和训练神经网络的易用性和性能。
-
神经网络
+关注
关注
42文章
4842浏览量
108184 -
自动驾驶
+关注
关注
794文章
14990浏览量
181555 -
深度学习
+关注
关注
73文章
5608浏览量
124637
发布评论请先 登录
自动驾驶汽车如何探测路面的积水深度?
【智能检测】基于AI深度学习与飞拍技术的影像测量系统:实现高效精准的全自动光学检测与智能制造数据闭环
自动驾驶中常提的占用网络检测存在哪些问题?
自动驾驶端到端为什么会出现黑盒现象?
如何构建适合自动驾驶的世界模型?
自动驾驶中常提的模仿学习是什么?
自动驾驶汽车如何检测石头这样的小障碍物?
自动驾驶中提到的“深度相机”是个啥?
自动驾驶汽车如何确定自己的位置和所在车道?
在山区实现自动驾驶的难点在哪里?
自动驾驶中Transformer大模型会取代深度学习吗?
关于如何通过深度学习实现自动驾驶之车道检测的方法讨论分析
评论