美国高中生两年时间搭建自动驾驶汽车

电子说

1.2w人已加入

描述

这个美国高中生用两年时间复现出英伟达端到端无人驾驶的论文,并在此基础上进一步改进,得到了Nvidia的offer,却执意进入大学学习。

Sully Chen

Sully Chen 是南加州大学维特比工程学院的研究员,他喜欢数学、物理、人工智能以及医学,目前他正致力于如何通过大数据和机器学习来改善医疗保健和医学预防。三年前,当他还在加州帕洛斯弗迪斯高中念书的时候,就对自动驾驶汽车产生了浓厚的兴趣,准备着手制造自己的机器。

热爱的数学成为后期研究的重要基础

十岁开始编程,并参与了很多项目的 Sully Chen 虽然称不上是天才,但他对数学近乎痴迷。2015年初,同龄的高中生还在学习排列组合,而他在一个视频中偶然发现了遗传算法和神经网络,这个视频用计算机仿真出遗传算法的特性,虚拟生物似乎在没有人为输入的情况下神奇地演变出复杂的行为,“这像极了我在生物课上学到的交叉和随机变异,但我仍不相信这样的计算机模拟是真的。”

很自然地,他编写了自己的模型去验证了它的可行性。通过亲身实践,更让他无法自拔,他花了两个星期开完了一学期的人工智能MIT公开课。与backprop(反向传播算法)斗争了好几个星期,仍不能真正的理解。查阅大量论文,指南和博客后,最终在 Michael Nielsen 关于《神经网络和深度学习》博客中解决了自己的困惑,并用C++编了一个神经网络库,以加深自己理解。

构造一台无人车面临无数的挑战

凭借着对机器学习“浅薄”的认知,Sully Chen开始了制作自己的机器。

通过视觉算法来实现无人驾驶,第一个要解决的挑战就是数据收集问题,需要协调好摄像头和方向盘角度。摄像头比较简单,他用胶带粘在了挡风玻璃上,而方向盘角度如何控制呢?

他首先尝试了一种加速度计和Arduino(数据仪器)连接到方向盘上,并将时间数据与摄像头同步。这种方法并不理想,由于加速度计比较敏感,加速度数据与视频数据如何分开成了当时Sully需要面对的另一个挑战。

第一种方式行不通,Sully开始了新的尝试,使用现代汽车配备的OBD-II端口访问CAN-BUS。这种方法又要面临新的挑战,但最终实现了超精确方向盘测量,证明这种方法是值得的。

挑战1:如何从 BD-II端口读取CAN-BUS?解码和处理CAN-BUS信号是一个复杂的过程,需要很长时间才能编写和调试。幸运的是,前人(深圳矽递科技)已经做到了。Sully 使用这个代码和相对便宜的Arduino屏蔽,就能够轻松地从汽车中提取和读取CAN-BUS数据。

挑战2: 如何将CAN-BUS数据的乱码转变为方向盘读数?下图是提取的CAN-BUS数据。

英伟达

从数百个CAN-BUS渠道的解析中,找到一个方向盘角度的信息通道,对于一个高中生而言,难度可想而知。Sully 用最笨的办法做到了!他手动监控每个通道,慢慢转动方向盘,需按照接受数据的平滑变化值。经过大量的实验,终于找到了方向盘的通道,用同样的方法也找到了油门、制动器以及速度的通道。

挑战3:如何把CAN-BUS中的数据转换成可读数据?找到通道后,通过测量实际角度与通道数值进行线性变换,就能从CAN中读出车辆的即时数据。

拦路虎顺利摆平之后,开始疯狂收集数据。为此,Sully 旷了很多课。当数据通过机器学习训练算法时,一切变得有趣起来。

复现并优化Nvidia论文,引起Nvidia官方的重视

用机器学习训练模型时,第一次尝试用Caffe 在 AlexNet上训练分类模型。他将数据划分成每个大小为10度的黑盒子,方向盘角度在0-9度,10-19,20-29等之间得到相应的图像。采用了分类输出的线性组合获得最终预测。由于当时并不能真正理解的统计数据,一切变得非常糟糕。这让Sully 几乎失掉了信心,他专门建了一个存放错误代码和实践的垃圾文件箱,用来提醒自己要从失败中总结经验,学到新东西。现在这个垃圾文件箱还存在着,而且越积越大,它的存在也证明了自己一路以来的进步。

2016年8月,Nvidia发布了一篇论文《End to End Learning for Self-Driving Cars》,详细解读了英伟达在端到端无人驾驶的探索,这让 Sully 有了第二次尝试,他准备复现一下Nvidia论文

Nvidia模型使用以下架构:

英伟达

这个架构输出的是前十个神经元的简单线性组合,Sully认为还可以改进。他通过对线性组合应用正切函数来改变这一点,这种方法更直观从视觉数据中“恢复”曲率角度,而不必重新学习将斜率或切线转换为弧度测量的方法。

研读完Nvidia论文的高中生,在TensorFlow中写了大约一个晚上的代码,并用当时便宜的750ti GPU上训练了它,结合Adam优化器等训练。最终,取得了不错的成果!

一个高中生花费两年时间完成了这个庞大的项目,Sully感叹道“这次经历教会了我大量的信息,技术和编码实践。Nvidia甚至带我去他们的自动驾驶实验室参观他们的技术!“Nvidia为这位高中生提供一份不低的工资,但被他拒绝了,Sully进入了大学,开始了自己本科的学习。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分