自动驾驶技术—如何训练自己的神经网络来驾驶汽车

2017年10月16日 由 yuxiangyu 发表 584620 0
神经网络,特别是深度学习的研究最近在计算机视觉的领域和计算机科学的其他重要领域取得了许多突破。在这些技术的应用中,自动驾驶技术十分火热。几乎每个人都听说过它,许多大公司都为此投入巨额资金。由人工智能的控制汽车能够带你去任何地方,让你不必再把时间浪费在开车上。在这篇文章中,我会告诉你怎样训练一个使用前面道路图像的进行自动驾驶的神经网络。你可以在Jupyter Notebook找到所有的代码和每一步的解释,也可以访问下面链接阅读详细的文章。

代码:https://github.com/normandipalo/self-driving-car-beta/blob/master/self-drivng-car-beta-clean.ipynb

详细文章:https://github.com/normandipalo/self-driving-car-beta/blob/master/selfdrivingcar_latex.pdf

自动驾驶

深层神经网络,特别是在计算机视觉领域,对象识别等领域,往往有数以百万的参数。这意味着它们运算量非常大,设备需要的很大的运行内存。如果你是学术实验室或大型公司,并且拥有数据中心和大量GPU,那没问题。但是,如果你只有一个汽车上需要实时驱动的嵌入式系统,那么问题就大了。这就是为什么我会追求轻量,快速和高效的特定架构。我使用的主要模型是SqueezeNet架构。这是一个最近在个别参数的对象识别任务上有卓越表现的模型,并且权重仅仅几兆字节。我建议阅读这篇文章的同时看着代码,这已经足够详细到让那个你可以进一步了解这些概念。


我们首先需要一个数据集,这是大多数深度学习项目的核心。幸运的是,有几个现成的数据集可以让我们使用。我们主要需要我们最需要的是记录在数小时的司机驾驶在不同环境(高速公路,城市)图像。你可以在Jupyter Notebook中找到一个。拥有数据集后,我们需要对数据进行预处理,让算法更好的完成工作。例如,我们当然无法将整个数据集加载到RAM中,因此我们需要设计一个生成器,这是Python中非常有用的一种函数,它允许动态加载一小批数据并预处理它,然后将它直接输送到我们的神经网络中。为了帮助网络更好地适应各种天气和光线条件,我们可以随机修改图像的亮度。此外,我们可以裁剪掉图像的顶部,因为它主要包含天空和其他与驾驶信息无关的信息。这样有助于提升计算速度。


自动驾驶


NVIDIA模型


预处理后,我们可以开始设计网络。我使用了Keras使它易读性非常好。第一个模型是NVIDIA模型,一个很经典的CNN。经过一些卷积层从我们的图像中提取视觉特征,我们有一个扁平的层然后充分连接这些层,输出一个实数值:我们的转向角。你可以在代码中看到网络的详细信息。


如果你在笔记本电脑上训练这个网络,尤其是在没有GPU加速的情况下,你可能需要一整天的时间进行训练。经过相对较小的训练,你可以看到验证损失显著降低,因此网络正在学习如何驾驶。


该架构可以在笔记本电脑上实时工作,具有约50万个参数。但是我们可以做得更好,甚至更小的网络。那就需要SqueezeNet。虽然原本的架构已经很“苗条”了,但仍然我通过降低卷积特征的数量进行进一步缩小。这个架构的核心是Fire模块,这是一个非常精巧的过滤模块,它可以使用非常少的参数来提取语义上的重要特征,并且输出量很小。你可以在代码中看到网络实现的细节。最后一层也被修改,因为我们的任务是在图像空间中的回归,而网络最初被设计用于对象识别。


自动驾驶


Fire模块


使用与以前相同的训练设置,我们可以看到训练更快,网络在大约十次迭代之后实现了更好的表现。


你可能会说,在这里我们仅基于当前帧来预测转向角,而驾驶本身是动态任务取决于前一帧。那么现在我在这里展示的最后一个模型:循环模型。我向SqueezeNet的第一个密集连接层之一的输出添加了一个复发层:网络将连续5帧作为输入,然后复发层输出一个实数值,即转向角。令人惊讶的是,与以前所看到的架构相比,这种新架构的表现虽然与人类决定如何引导的方式更为紧密相关,但没有比先前所见的架构更好。因此,无内存和无状态的架构可以非常好地驱动,从单独的帧独立计算转向角。


终于,我们网络在一个小视频中模拟驾驶。它显示实时驾驶汽车,他完全能够通过它看到的街道来驾驶汽车。


脚本获取链接:https://github.com/SullyChen/Autopilot-TensorFlow


自动驾驶


我们的网络在驾驶汽车


我们已经训练了我们的自动驾驶汽车,使用了相当简单的架构和技术来引导,并取得了显着的成果。我希望你从这篇文章中学到了一两招。

欢迎关注ATYUN官方公众号
商务合作及内容投稿请联系邮箱:bd@atyun.com
评论 登录
热门职位
Maluuba
20000~40000/月
Cisco
25000~30000/月 深圳市
PilotAILabs
30000~60000/年 深圳市
写评论取消
回复取消