内容简介:Google工程师:从零开始学习无人驾驶技术 ——端到端无人驾驶
雷锋网按:本文作者夏飞,清华大学计算机软件学士,卡内基梅隆大学人工智能硕士。现为谷歌软件工程师。雷锋网 (公众号:雷锋网) 首发文章。
TLDR (or the take away)
视频结果:无人车以 30m/h (~ 50km/h) 在Simulator中行驶。这应该是最有趣的部分:
技术要点:
-
Simulator安装与使用
-
数据收集和处理
-
深度卷积网络 (CNN) 训练端到端 (end-to-end) 模型
代码: Github链接
概述
所谓 end-to-end 无人驾驶模型,指的是由传感器的输入,直接决定车的行为,例如油门,刹车,方向等。简单来讲,可以利用机器学习的算法直接学习人类司机的驾驶行为:首先,人类司机驾驶安装有各种传感器 (例如摄像头) 的汽车来收集数据;然后,用传感器收集的数据作为输入,相应的人类行为数据作为输出label,训练一个机器学习模型,例如,如果摄像头发现前方有行人,司机行为应当是刹车;最后,将训练好的模型应用于无人车上。这种方法又叫做行为复制,其原理直观,避免了无人车系统中各种复杂的问题,是无人车中很有趣的一个topic。
在这篇文章中,我们来一起动手做一个在 Simulator 中的 end-to-end 模型!和在真实世界中类似,我们需要:
-
在 Simulator 中驾驶无人车收集数据,像玩赛车游戏一样!
-
处理数据并训练模型
-
将模型应用于 Simulator 中看效果
Setup
先把Simulator搭好 --- 这里使用Udacity的Self-Driving Simulator Platform,下载链接:
建议直接从上面的链接下载,如果对源代码感兴趣,这里是Github 链接 。
运行Simulator程序,选择Screen Resolution和Graphics Quality,建议开始时先选择最低分辨率和对应最快的图片质量。点击OK进入主界面。
Controls:在Simulator中的按键指南
Training Mode:人为控制车辆模式,用来收集数据
Autonomous Mode:全自动模式,使用训练好的模型进行无人驾驶
数据收集
进入Training Mode开始玩游戏,熟练一下按键和操作!在Simulator中,这辆车的传感器是三个前置摄像头,分别放置在左、中、右三个方向,对周围的环境进行拍摄录制,结果之后会以图片形式保存到电脑上。
开始收集数据:
-
首先按下R键 (Record),选择数据保存目录,确认
-
再次按下R键,进入录制模式
-
驾驶车辆在车道中行驶
-
行驶完毕后第三次按下R键,数据会被保存到硬盘上
这时,在相应目录下会生成两个文件: driving_log.csv和IMG文件夹。顾名思义,driving_log.csv中保存了用户开车时的log,IMG文件夹中保存了摄像头的照片。driving_log.csv基本结构如下图。
-
前三列分别表示在当时左中右摄像头的照片路径
-
D列表示车的方向盘角度
-
E列表示油门力度
-
F列表示刹车力度
-
G列表示当前速度
为了简洁明了,在本文中我们只采用A,B,C,D列数据,即利用摄像头照片预测方向盘角度。另外,收集数据时有几个tips:
-
首先大概收集两圈比较完美的数据,尽量保持车在道路中间行驶;
-
在转弯或模型训练之后比较容易出错的地方多收集几次数据。
数据处理
数据在机器学习中地位至关重要,保证数据质量是模型是否有效的关键因素。以下是我们遇到的几个问题,在 model.py 中均有相应的代码。
观察一:D列Steering Angle大部分都是0,这很正常,因为大部分情况下在拐弯的地方我们才会转动方向盘。然而这对模型却是致命的,因为会造成严重的数据不平衡。
解决方案:随机抽样,尽量使数据平衡。在实际操作中,可以将整个Steering Angle范围划分成n个bucket,保证每个bucket中数据样本不超过m个。
观察二:在同一个位置,不同摄像头的内容差距很大,但是车子的转向角度只有一个。下图给出了同一位置左中右摄像头的照片。
解决方案:以中间摄像头照片为主训练数据,对左右两边照片的转向角度进行修正。最简单的修正方法是对左边图片的转向角度+0.2,对右边图片的转向角度-0.2。
观察三:数据量可能不够大。
解决方案:将图片进行左右反转,同时将转向角度取相反数,这样就生成了新的数据。
观察四:地面是影响车子转向角度的决定性因素,照片的上半部分信息冗余,不利于模型的generalization。
解决方案:将上半部分图片裁掉。
观察五:图片RGB值均在0-255之间,范围太大。
解决方案:进行normalization,使其值在[0, 1]之间或[-0.5, 0.5]之间。
模型
深度卷积神经网络 (Deep Covolutional Neural Networks, DCNN)!
DCNN及其衍生模型是目前对图片处理最先进的方法,主要应用有图片分类,物体检测及定位,自动生成图片标题等。DCNN的一个最大特点是能够抓取local pattern --- 例如:人类识别一张图片上的猫并不取决于这张图片还有什么其他动物,也不取决于这只猫位于图片的什么位置,甚至只露出半只猫的身子我们也可以将其识别,这就是基于local pattern。DCNN的这一特点还被用于AlphaGo中抓取围棋的local pattern,我在 这篇文章 中有简述AlphaGo的算法。
关于DCNN的技术细节就不在这里介绍了,有兴趣的可以参考Stanford的同学们做的一个 tutorial (我第一次接触Deep Learning时的学习网站) 或 这篇文章 。
我们在这里可以采用最常用的DCNN架构:三个Convolutional layer + 两个Fully Connected layer:
-
三个covolutional layer的filter size均为3x3,filter depth分别是8,16,32,使用ReLU activation function,dropout rate设为0.2
-
两个fully connected layer的size分别为512,256,同样使用ReLU activation function,dropout rate 0.2。
-
最后输出层size为1,使用linear activation对steering angle做regression。
具体代码也在 model.py 中,使用Keras实现,我采用的是Tensorflow的后端。现在就可以直接运行model.py文件进行模型训练了!如果对配置Tensorflow和Keras环境有疑问,最后的附录给出了一个简单步骤。
测试
在我的Github中我已经给出了一个用GPU训练好的模型model.h5,本文开始中的视频就是使用这个模型生成的。
(1)运行模型
python drive.py model.h5
(2)进入Autonomous Mode
(3)Enjoy the self-driving
附录
关于环境配置,推荐使用 Anaconda !我的操作系统是Ubuntu,基本步骤是
(希望下面的链接国内的朋友都可以访问)
(1)下载 Anaconda 最新版并安装
(2)创建conda environment
conda create -n my_env python=PYTHON_VERSION
(3)启用conda environment,在这个环境下安装的 python 或conda package会与系统及其他环境相互隔离
source activate my_env
(4)安装 Tensorflow
(5)安装 Keras
(6)使用pip或conda安装其他所需的package
【完】
"人工智能与自动驾驶 | 专题研讨班”开课啦!
作为人工智能技术重点应用场景之一——自动驾驶发展状况如何?
听人工智能知名研究专家带你深入解析自动驾驶领域的技术布局!
课程链接:http://www.mooc.ai/course/91
雷锋网特约稿件,未经授权禁止转载。详情见 转载须知 。
以上所述就是小编给大家介绍的《Google工程师:从零开始学习无人驾驶技术 ——端到端无人驾驶》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- Mathworks资深应用工程师王鸿钧:仿真加速自动驾驶功能的开发 | 2018全球智能驾驶峰会
- C/C++和Python成为自动驾驶汽车工程师们的热门技能
- 13国顶尖工程师聚贵阳比算法 2019数博会无人驾驶全球挑战赛正式启动
- 无人驾驶入门1:无人驾驶概览
- 亚马逊另类布局机器学习和自动驾驶:推出自动驾驶四轮赛车
- 余凯揭开自动驾驶繁荣外衣:激荡硅谷、失落中国 | 自动驾驶这十年
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Intel汇编语言程序设计
Kip Irvine / 电子工业出版社 / 2007-9-1 / 61.00元
《国外计算机科学教材系列•Intel汇编语言程序设计(第5版)》全面细致地讲述了汇编语言程序设计的各个方面。从微处理器体系结构、工作机制到指令集;从最基本的编译器链器的使用到高级过程、结构和宏的使用;从用纯汇编编写程序到用C/C++等最新编译器与汇编的混合接口编程;从16位实模式下BIOS、DOS实模式文本及图形程序设计到32位保护模式的Windows程序设计;从磁盘基础知识到Intel指令编码、......一起来看看 《Intel汇编语言程序设计》 这本书的介绍吧!