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

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

在这篇文章中,我会告诉你怎样训练一个使用前面道路图像的进行自动驾驶的神经网络。你可以在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 条评论
登录 后参与评论

相关文章

来自专栏数据科学与人工智能

简明数据科学(2):简单点,概念的解释简单点

原文:Data Science Simplified Part 2: Key Concepts of Statistical Learning 翻译:Kaise...

3467
来自专栏机器之心

专访 | 潜心30年,知网知识系统如何从概念层次上计算自然语言

3456
来自专栏数据科学与人工智能

【Python环境】基于 Python 和 Scikit-Learn 的机器学习介绍

你好,%用户名%! 我叫Alex,我在机器学习和网络图分析(主要是理论)有所涉猎。我同时在为一家俄罗斯移动运营商开发大数据产品。这是我第一次在网上写文章,不喜勿...

23810
来自专栏PPV课数据科学社区

【推荐】再谈数据挖掘——时序预测初探

1. 背景 先来看两个例子,下面两幅图展示了百度在趋势预测方面的应用案例,一个是世界杯期间的比赛输赢预测,另一个是北京各旅游景区的游客人数预测。 ? ? 这两...

2994
来自专栏量子位

机器学习中的“哲学”

作者:阿萨姆 普华永道|数据科学家 量子位 已授权编辑发布 0. 前言 我更喜欢把”思想”认为是一种“道”,而”模型”是一种”术”,也可类比为“外功”和“内功”...

3519
来自专栏数说工作室

【温故】金融数据挖掘之朴素贝叶斯

你和我之前的人生, 就像是来自同一个分布族的共轭曲线, 即使有各自的参数空间, 也注定要相识相念。 你和我之后的人生, 是我们相扶相持下不离不弃的最大似然, 用...

3185
来自专栏CVer

[计算机视觉论文速递] 2018-06-11

这篇文章有4篇论文速递信息,涉及CNN pruning、新的人脸识别数据集、森林树木分类和交通标志检测等方向。

1092
来自专栏新智元

机器学习里,数学究竟多重要?

【新智元导读】本文的主要目的是提供资源,给出有关机器学习所需的数学上面的建议。数学初学者无需沮丧,因为初学机器学习,并不需要先学好大量的数学知识才能开始。正如这...

39710
来自专栏大数据挖掘DT机器学习

Tensorflow的CNNs模型实战:根据短文本对企业分类

2017年4月17号AI100发布了为期一个月的文本分类练习赛 http://competition.ai100.com.cn/html/game_det.h...

3298
来自专栏ArrayZoneYour的专栏

TensorFlow强化学习入门(1)——双臂赌博机

强化学习不仅仅赋予了我们教会人工agent如何行动的能力,还使得agent可以通过我们提供的交互式环境进行学习。通过结合深度神经网络习得的复杂表示和RL age...

4679

扫码关注云+社区