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

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

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

相关文章

来自专栏AI科技评论

干货 | Siri 语音识别的小心机:你在哪里,就能更准确地识别那附近的地址

AI 科技评论按:这篇文章来自苹果机器学习日记(Apple Machine Learning Journal)。与其他科技巨头人工智能实验室博客的论文解读、技术...

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

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

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

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

【算法】推荐算法--协同过滤

协同过滤推荐(Collaborative Filtering recommendation)是在信息过滤和信息系统中正迅速成为一项很受欢迎的技术。与传统的基于内...

1231
来自专栏CSDN技术头条

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

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

1915
来自专栏智能算法

蚁群算法(独辟蹊径的进化算法)

1. 算法背景——蚁群的自组织行为特征 高度结构化的组织——虽然蚂蚁的个体行为极其简单,但由个体组成的蚁群却构成高度结构化的社会组织,蚂蚁社会的成员有分...

3339
来自专栏携程技术中心

深度学习系列 | 知识库上的问答系统:实体、文本及系统观点

编者:本文来自复旦大学博士崔万云在携程技术中心主办的深度学习Meetup上的主题演讲,分享了复旦大学研发的基于知识图谱的QA系统。戳上面的“携程技术中心”(ct...

4156
来自专栏AI科技评论

深度学习——你需要了解的八大开源框架

导读:深度学习(Deep Learning)是机器学习中一种基于对数据进行表征学习的方法,深度学习的好处是用非监督式或半监督式的特征学习、分层特征提取高效算法来...

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

【应用】信用评分:第3部分 - 数据准备和探索性数据分析

因此,**数据准备是任何数据挖掘项目的关键方面,包括信用评分卡的开发。 **这是CRISP-DM周期中最具挑战性和耗时的阶段。 项目总时间中至少70%,有时多于...

1101
来自专栏数据派THU

当你的深度学习模型走进死胡同,问问自己这5个问题

来源:量子位 编译:安妮 本文长度为2509字,建议阅读4分钟 本文为你介绍深度学习中应该思考的5个问题。 深度学习是一项庞大又复杂的工程,在建立深度学习模型时...

1909
来自专栏机器学习算法与Python学习

趣味机器学习入门小项目(附教程与数据)

关键字全网搜索最新排名 【机器学习算法】:排名第一 【机器学习】:排名第一 【Python】:排名第三 【算法】:排名第四 没有任何理论可以代替实践,虽然教材和...

2874

扫码关注云+社区