车道检测旨在识别道路上可见车道边界线的位置和曲度。这一功能可以帮助车辆行驶于车道中间,并在车道改变时进行安全导航。
上一篇文章提到,必须用算法预测车辆的类别(分类)和位置(边界框)。本例则有所不同,我需要算出一组数字,用来表示左右车道边界线的抛物线系数。
为解决这一问题,我将构建一个执行回归的 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文章
4775浏览量
100920 -
自动驾驶
+关注
关注
784文章
13877浏览量
166640 -
深度学习
+关注
关注
73文章
5508浏览量
121308
发布评论请先 登录
相关推荐
评论