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

神经网络,特别是深度学习的研究最近在计算机视觉的领域和计算机科学的其他重要领域取得了许多突破。在这些技术的应用中,自动驾驶技术十分火热。几乎每个人都听说过它,许多大公司都为此投入巨额资金。由人工智能的控制汽车能够带你去任何地方,让你不必再把时间浪费在开车上。

在这篇文章中,我会告诉你怎样训练一个使用前面道路图像的进行自动驾驶的神经网络。你可以在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订阅号(atyun_com)

原文发表时间:2017-10-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏人工智能头条

成为数据科学家,需具备这些技能

1312
来自专栏CreateAMind

中文简短的《神经网络与深度学习》极佳入门书-出自量子物理学家

721
来自专栏AI科技评论

学界 | 专家标注的数据少就少吧,普通人标的数据现在也可以用了

AI 科技评论按:对于缺乏高质量标注数据的专业应用,除了继续花钱标数据之外,常用方法似乎也就只有 ImageNet 预训练 + 任务专用数据 fine-tune...

712
来自专栏大数据文摘

职场 | 如何让你的数据直觉更敏锐

对于有大局意识的人来说,这无疑是一个很好的创业机会和职业选择。要想抓住职业机会,你需要超强的“码力”和深入的专业知识。

540
来自专栏Spark学习技巧

干货 :基于用户画像的聚类分析

1455
来自专栏华章科技

机器学习工作职位需要的7项技能

机器学习经常与人工智能紧密相连,在不考虑显式编程的情况下,机器学习可以使计算机具备完成特定任务的能力,例如识别,诊断,规划,机器人控制和预测等。它往往聚焦于算法...

492
来自专栏达观数据

达观数据推荐系统实践—实时演算用户动态数据 提升运营效率

本文曾在infoq大数据微信群和数据猿直播平台上进行过分享,是对分享内容最直观的表达,同时对推荐系统架构和算法解释的也很详尽。 随着移动互联网技术的迅猛发展、互...

4477
来自专栏AI科技大本营的专栏

反欺诈中所用到的机器学习模型有哪些?

作者 | 微调(知乎ID微调,普华永道高级数据科学家) 反欺诈方向的实际应用很多,我有做过保险业反欺诈和零售快消业的欺诈检测,抛砖引玉的谈谈反欺诈项目的"道"和...

3374
来自专栏奇点大数据

大数据变现十日谈之五:归纳和认知

记得不止一次和一些做大数据和机器学习的朋友讨论过关于归纳和认知的观点。 在机器学习这个领域听过这样的声音,就是大家普遍觉得基于统计的机器学习和大数据加工方法要比...

3809
来自专栏FreeBuf

如何构建一个反电信网络诈骗基础模型

网络诈骗,电信诈骗层出不穷,花样翻新,防不胜防,伤害普通百姓利益。本文通过对目前社会上关于网络电信诈骗新闻进行提取,从中分析当前网络诈骗发展趋势和关键因素,进而...

1766

扫描关注云+社区