写点什么

用 PyTorch 单挑全世界,特斯拉是如何实现自动驾驶的?

  • 2019-12-06
  • 本文字数:6257 字

    阅读完需:约 21 分钟

用PyTorch单挑全世界,特斯拉是如何实现自动驾驶的?

概要

  • 特斯拉的工程师们正致力于开发一种发展自动驾驶技术的方法,这种方法能够真正适应数据的扩展,而不用因为数据规模扩展而增加工程师的人力。

  • 工程师们还在试图尽可能有效地利用打标工人。这意味着要将数十亿英里驾驶过程中出现的计算机视觉错误样本都积累起来。

  • 人类输入是一种信号源。人类行为能够告诉机器哪些地方做错了,在一些场景下还能够告诉机器怎样做是对的。

  • 不管特斯拉是否会在全自动驾驶技术领域取得成功,但有一点是肯定的,特斯拉会在城市环境中部署半自动驾驶汽车。


Andrej Karpathy 是特斯拉(TSLA,https://seekingalpha.com/symbol/TSLA)的 AI 高级总监,他最近发表了一次演讲(https://youtu.be/oBklltKXtDE),在演讲中,他半开玩笑地揭开了“运营假期”的神秘面纱。这里面的想法是将特斯拉的机器学习流水线自动化,这样所有的工程师就可以度假去啦,而特斯拉的半自动驾驶功能将会自动地继续完善。特斯拉汽车将继续自动上传数据,手动标注数据的工人将继续在必要的地方对数据打标,神经网络将自动地在新数据上进行训练,然后,改进的网络就会被部署到汽车上了。这个过程一直往复循环。


让工程师们去度假只是开玩笑的说法啦,因为总会有事情要做的,创新的脚步绝不会停止。而且,即使整个过程可以完全自动化,明智的做法也是让人们监视这套机制,看看是否如预期那样运转。但是,重点在于自动驾驶(Autopilot)、召唤(Summon)以及其他概念功能的改进都是以自动化方式为主。软件开发传统上是工程师的工作。“运营假期”的目标是让特斯拉的工程师更像是工厂里的工程师。工厂投入运行之前,这些工程师用很长的时间来做大量准备工作。一旦工厂运转起来,就需要大量的非工程师人员来保持其运行。目前仍然需要工程师们来检查机器,并在出现问题时修复系统或者做出改进。但总的来说,工厂的运转是独立于工程师的工作的。相比之下,传统的软件开发流程更像是工程师们亲自来打造产品。



来自 Andrej Karpathy 的演讲 ppt,它展示了特斯拉的机器学习流程。


特斯拉是想打造一种实现自动化目标的方法,这种方法能够适应不断扩增的数据规模,因为特斯拉拥有全球最大规模的车辆网络来收集数据,这些车辆上配置了传感器和计算机,并且都连入了互联网。这种方法最大的瓶颈就在于支付给标注工人的薪水。在计算机视觉任务中,特斯拉需要不断地把新产生的、手动打标过的照相机数据添加到训练集里,这样才能不断增加算法能力,但这种方式难以适应不断扩增的可收集数据规模,而只能应付这些数据的一个子集,这个子集规模对应于特斯拉能够承受的打标成本。特斯拉也许可以收集 1 万亿张交通灯照片,但是却支付不起同样规模的打标(指将照片中的交通灯标注为红、绿或黄三种颜色)费用。


对于需要手动打标的任务,特斯拉采用的方法不允许纯粹地增加标注数据的数量,而是通过获取更高质量的数据来加速机器学习过程。最有价值的训练数据样本是现有的神经网络模型不能正确预测的样本。也许,这个模型错误预测了物体的类别、误报了一个并不存在的物体,或者漏检了照片上拍到的物体。通过“运营假期”所代表的自动化过程,特斯拉比起其竞争对手来说,能够更多地捕捉到这类有价值的数据样本。


想象一辆特斯拉汽车在自动驾驶导航(属于其自动驾驶技术的一个版本,能够让特斯拉汽车自动切换车道)模式下沿着高速公路行驶。这辆特斯拉自动发起了车道切换程序,但没有注意到相邻车道上来了一辆皮卡。特斯拉汽车里的司机赶紧打了方向盘,退出了自动驾驶模式,取消了车道切换过程。这次人工干预会触发一次快照,快照可能包含一段短视频剪辑,这段视频剪辑将由特斯拉汽车的 8 个照相机、雷达数据、GPS 数据等组合得到。特斯拉的手动标注人员会审查这段视频剪辑,他们会看到特斯拉的神经网络没有检测到这两皮卡,标注人员就会在这两卡车周围画一个 3D 方框,标上“轻型卡车”,然后把标注好的视频剪辑发送到特斯拉总部,包含在训练数据集里。


现在想象一辆特斯拉在完全由人类司机控制的情况下沿着高速公路行驶。突然,特斯拉前面的一辆小型货车司机猛踩了刹车,相应地,特斯拉司机也猛踩了刹车。特斯拉汽车上的计算机自动驾驶软件其实是在默默运行着的,它安静地“观察”着人类司机的行车轨迹,每时每刻都会估算自动驾驶模型会采用同样行车轨迹的可能性。在这种情况下,自动驾驶软件没能够检测到这辆小型货车。在这个自动驾驶软件看来,这位人类司机在空旷的高速公路上猛踩刹车只是很随机的一种行为。于是,它会给这位司机的行车轨迹赋予一个较低的概率;也就是说,自动驾驶软件对这位司机的行为感到“惊讶”。人类司机行车轨迹和机器生成的行车轨迹之间的这种“惊讶”或者说“分歧”,会触发一次快照,然后会上传到特斯拉的数据标注人员那里。(我理解这就是特斯拉“影子模式”的工作方式。)


关于自动驾驶的一件可怕的事情是,当模型错误率变得更低时,你需要更多的错误数据样本加入训练才能让错误率继续减半。随着你的系统产生的错误越来越少,维持系统改良速率所需的错误样本却是越来越多。你需要的错误样本越多,它们就越难收集全。假设 Waymo 已经将严重的计算机视觉错误(例如:导致汽车异常行为的错误,这类异常行为是能被安全驾驶员确认的)降低到了每 1 万英里 1 个错误。(这不是一个真实的数据,只是为了说明问题而虚构的例子。)由于 Waymo 每月大约行驶 100 万英里,所以每月只会产生 100 个严重的计算机视觉错误样本。给这些错误样本打标现在是没问题的,但是要找到它们却是很费劲的。作为对比,我们看下,如果 Waymo 每月行驶 10 亿英里,那每月就会产生 10 万个错误样本。通过这个方式,搜集起来的错误样本数量是随行驶的里程数增加而增加的。


自从 2018 年 11 月发布自动驾驶导航以来的 12 个月内,自动驾驶导航模式下的特斯拉汽车已经行驶了 10 亿英里。平均下来每月行驶 8300 万英里。以后,这个月度数据还会继续增长,因为过去 12 个月里,具有自动驾驶导航功能的特斯拉汽车几乎增长了一倍,所以在接下来的 12 个月里,这个月度数据很可能会增加 50%(假设特斯拉目前的生产速度至少不会下降)。带有自动驾驶 2.0 及以上版本(https://lexfridman.com/tesla-autopilot-miles-and-vehicles/)硬件的特斯拉车辆目前总共有大约 65 万辆。假设平均行驶里程数和美国人的均值(https://www.fhwa.dot.gov/ohim/onh00/bar8.htm)保持一致,总共的行驶里程数(包括完全由人类司机驾驶以及自动驾驶的里程数)大约是每月 7.25 亿英里。两种行驶模式都给“运营假期”提供了数据,就像以上解释的那样。自动驾驶模式下,人类干预标志着机器产生了错误或者人类司机认为这种情况对自动驾驶来说太难了。在手动驾驶模式下,人类和自动驾驶的“分歧”也标志着机器错误。


到目前为止,我只讨论了人类打标人员在“运营假期”循环流程里的情况。如果我们从流程里不仅移除了工程师,还移除了打标人员会怎样呢?把这整个处理流程都交给机器会怎样呢?


机器学习里令人惊讶的一个发现是,如果你使用了标注质量很差的数据训练时,有时候你可以获得和标注质量很好的数据训练同样的结果,只要你使用的质量较差的数据量是标注质量较好数据的 1000 倍。Facebook 发现(https://engineering.fb.com/ml-applications/advancing-state-of-the-art-image-recognition-with-deep-learning-on-hashtags/)Instagram 的标签(通常与其对应图片的实际内容仅有微弱的联系)可以用来训练神经网络,这样训练出来的模型能够精确地给物体分类。这里的诀窍是,Facebook 使用了 10 亿张 Instagram 带有标签的图片,几乎实现了和 100 万手动标注的图片同样的精确度。Facebook 还发现了(https://ai.facebook.com/blog/billion-scale-semi-supervised-learning/),如果你结合两种图片,相比于单独训练其中任意一种,都能实现更高的精确度。


特斯拉有着 65 万人类司机,这是大量低质量标注数据的来源。在所谓的弱监督方式中(和完全监督方式相对,后者意味着标注人员会以手动的方式精心标注图片),我上面描述的标记数据的操作(用于后续做手动打标),可以被看做是低质量的打标。如果自动驾驶软件本来检测到某处有障碍物,可是人类司机却行驶到了那里,那么这个地方就会被自动标记为无障碍物。相反,如果自动驾驶软件检测到某处十分空旷,可是人类司机却在开到它旁边时停了下来,那这个地方就会被自动标记为有障碍物。这是一种混乱的方式,但这个方式可以用丰富的免费的标签来补充稀缺的、昂贵的标签。(想了解关于这个方式的更多内容,可以阅读这里的研究论文,https://arxiv.org/pdf/1610.01238.pdf


特斯拉的自动驾驶岗位(https://web.archive.org/web/20190209090339/https://www.tesla.com/careers/job/autopilot-internship-co-opsummer2019-37950?redirect=no)长期以来一直要求候选人“能够设计出一些方法,这些方法除了能够使用丰富多样的标注数据外,还能使用大量轻标注的数据。"在特斯拉的 Autonomy Day 发布会(https://youtu.be/Ucp0TTmvqOE)上,Karpathy 描述了一种和我之前描述的类似的方法。通过人类驾驶标记的视频剪辑,特斯拉训练了一个神经网络,用来感知和推断前方道路的曲线和坡度(视频可点击:https://youtu.be/v5l-jPsAK7k)。


弱监督学习方法是真正适应数据扩增需求的方法,限制不再是人力成本(包括工程师人力成本和标注人员人力成本),而是道路里程数,通过互联网传输的数据包以及特斯拉总部大量的 GPU。机器学习过程就真的只是一台复杂的机器了,它自行运转,这台机器的零部件能够运转多快,机器学习就能运行多快。而较缓慢的部分则是开发这个流程,和采取办法让它正常运转起来的这段时间。


相比于计算机视觉,“运营假期”能够更加容易地做出预测。当需要预测车辆和行人轨迹时,这里有丰富的免费的高质量标签:即未来。自动驾驶软件会观察一辆车目前的轨迹,在 5 秒之后,这辆车会用这 5 秒内实际走过的轨迹对这段观察进行打标。如果你预测了一位行人要走到哪里去,这位行人马上就会向你展示你的预测精确度如何。于是,系统能够自动发现错误,错误样本也能通过正确的未来轨迹被自动标注。这是绝妙的理想场景。人力不再是束缚,资金不再是束缚;只有车辆和计算机才可能成为束缚。


路径规划也是一个理想的场景。可以运用同样的原理,但是侧重点不一样。规划器试图决定汽车应当采取什么行为。汽车观察到的是完整的驾驶场景,由 8 个环绕的照相机和前置雷达捕捉信息。在手动模式下,神经网络预测特斯拉的人类司机会做什么,如果它预测错了,就会自动标记这个错误(同样的,这是我所理解的“影子模式”)。司机通过他们的行为给观察到的驾驶场景进行了标注。除了是在人类司机干预的情况下标记错误样本,自动驾驶模式和手动模式的原理是相同的。这个方式即所谓的模仿学习,最近被 DeepMind 团队用于训练神经网络(https://twitter.com/OriolVinyalsML/status/1189619408894717953?s=20),这个网络可以玩《星际争霸》,而且比 70%以上(https://www.rankedftw.com/stats/leagues/1v1/#v=2&r=-2&sx=a)的人类玩家都玩得更好。Waymo(https://link.medium.com/4gThWBM4v1)也在挖掘模仿学习的潜力,自动驾驶汽车初创公司 Aurora(https://slideslive.com/38917949/the-promise-and-challenge-of-ml-in-selfdriving?locale=cs)也很喜欢这类方法。(但是,Waymo 和 Aurora 不像特斯拉这样有着 65 万规模的人类司机,这些司机能够提供大量的训练数据)


所以总结起来,我认为“运营假期”有四大支撑优势:


  • 自动标记计算机视觉错误,它们稍后会被上传并且被手动标注(完全监督学习)。当人类司机退出自动驾驶模式,或者在手动模式下,自动驾驶规划器与人类驾驶的行车轨迹出现“分歧”(或者令人“惊讶”的情况)时,都会将其标注为错误。

  • 使用从人类司机行为中获取的低质量标签,实现照相机数据的自动标注(计算机视觉的弱监督学习)。当计算机视觉神经网络和人类司机产生“分歧”时(这个分歧也导致了自动驾驶生成了不同于人类司机使用的行车轨迹),训练样本会被上传。

  • 针对预测的自动标注。未来事件能够标注过去的事件,并能显示预测的错误。

  • 针对规划的自动标注。人类驾驶行为提供了标签。当自动驾驶还在激活状态时,如果人类干预了,或者在人类和自动驾驶规划者之间产生了“分歧”,就会认为出现了错误。


预测和规划是通过计算机视觉方法来追踪物体轨迹并观察行驶场景的。计算机视觉错误可能会引起预测和规划失效。所以,为了使其他部分实现最优运转,必须修复计算机视觉错误。


反过来说,预测或规划错误可能会触发视频剪辑的上传,即便没有产生任何计算机视觉错误。这类没有正确标记的视频剪辑会增加人类手动审查的工作量。因此,减少预测或规划方面的错误能够节省标注人员的时间,好让他们聚焦在计算机视觉方法产生的错误上。通过改进视频自动标记的精确度,可以帮助加快计算机视觉功能的进展速度。


特斯拉开发的方法正在尽可能地实现在数据规模扩增时,对人力扩增的需求减到最少,他们的工程师也因此站在了大规模自动驾驶机器学习的最前沿。自动的错误标记可以提升标注人员的标注效率。模仿学习的使用减少了工程师投入到路径规划算法上的工作量;与其费力地手动编码每一种驾驶行为,还不如让算法从数据中自动学习这些行为。考虑到特斯拉汽车每月 7.25 亿英里的驾驶里程,自动驾驶领域里还没有先例能用来判断特斯拉的方式会有怎样的效率。


一些怀疑论者认为完全解决计算机视觉问题是不可能的(https://tinyurl.com/zooxctotesla)。也许是这样吧。但除非它真的发生了,否则我们无法确定。


开发一个每 100 英里就失效一次然后需要人类干预的 2 级(http://cyberlaw.stanford.edu/files/blogimages/LevelsofDrivingAutomation.png)自动驾驶系统, 要远比开发一个每 100 万英里才失效一次的 4 级或 5 级自动驾驶系统容易得多。即使特斯拉离全自动驾驶的目标还很远,但几乎可以肯定的是,特斯拉将会开发出能够在城市街道上行驶的 2 级自动驾驶系统。在对未来的展望中,挥之不去的主要问题是,随着机器错误发生得越来越少,司机是会仍然保持警惕并在必要时干预自动驾驶机器呢,还是会被引入一种错误的安全感呢。特斯拉可能需要实施司机监控系统,确保司机随时集中注意力。朝向司机安放的照相机和已有的方向盘扭矩传感器,这两者的组合可能会比单独使用扭矩传感器更加有效。


对特斯拉来说,超级乐观的前景是它最终开发出来了全自动驾驶系统,部署了机器人出租车。在这样的局面下,特斯拉的市场份额即使不能十倍(https://raw.githubusercontent.com/ARKInvest/ARK-Invest-Tesla-Valuation-Model/master/Tesla%20Valuation%20for%20Github_5.27.19_v3.5.xlsx)地增加,也可以大致增加两倍或者三倍(https://www.cnbc.com/2019/09/27/waymo-valuation-cut-40percent-by-morgan-stanley-to-105-billion.html)。稍温和的乐观局面会是特斯拉为城市驾驶发布了 2 级系统,特斯拉也非常棒地卖出了更多汽车和更多的“全自动驾驶”附加组件单元。销售增长和汽车毛利率是投资者密切观察的两项关键指标;特斯拉的城市 2 级系统能够给这两项指标都带来超预期的贡献。(Andrej Karpathy 的演讲视频请点击:https://youtu.be/oBklltKXtDE,视频中他描述了“运营假期”)


利益相关:我/我们是 TSLA 长期合作伙伴。我自己创作了这篇文章,本文表达了我的个人观点。我们没有因此接受任何经济酬劳(除了来自 Seeking Alpha 的稿费)。我与文中提及了股票的所有这些公司都没有业务关系。


原文链接


Tesla: ‘Operation Vacation’


2019-12-06 19:094883

评论

发布
暂无评论
发现更多内容

Apache Flink Meetup · 上海站,超强数据湖干货等你!

Apache Flink

flink 数据湖 iceberg

节能降耗——搭建绿色IDC能耗与管控系统

一只数据鲸鱼

物联网 数据中心 数据可视化 IDC 机房管理

无人驾驶平台,让IT没有难做的测试

鲸品堂

方法论 无人驾驶

面试官:什么是死锁?怎么排查死锁?怎么避免死锁?

小林coding

多线程 操作系统 死锁

有了人工智能技术,告警管理会发生什么变化?

睿象云

人工智能 事件管理

阿里云:城市大脑数据智能解决方案

不脱发的程序猿

大数据 阿里云 城市大脑 数据智能解决方案 4月日更

年纪轻轻,为什么要搞中间件开发?“路怎么走,让你们自己挑”

小傅哥

Java 分布式 小傅哥 中间件 架构设计

当 ITOA 遇上 Cloud Alert,企业可以至少每年节省 3600 小时!

睿象云

智能告警

一文掌握GaussDB(DWS) SQL进阶技能:全文检索

华为云开发者联盟

sql 全文检索 华为云 GaussDB(DWS) 字段

微众银行区块链开源基于Rust的Wasm合约语言框架Liquid

Patract

智能合约 rust polkadot Patract Wasm

【LeetCode】笨阶乘Java题解

Albert

算法 LeetCode 4月日更

Java-技术专题-Synchronized锁的分析

洛神灬殇

Java synchronized

FloydHub 2020年最佳机器学习书籍之一《可解释机器学习》中文版来啦!

博文视点Broadview

RTC技术干货 | 音频质量评价体系那些事

拍乐云Pano

音视频 WebRTC RTC 3A算法 音频

零代码实现一对一表关系和无限主子表级联保存

crudapi

API crud crudapi 主子表 多对多

需求分析是什么?

Simon

架构实战营

统一元数据,数据湖Catalog让大数据存算分离不再是问题

华为云开发者联盟

大数据 元数据 存算分离 华为云MRS 数据湖Catalog

INTERSPEECH2020 语音情感分析论文之我见

华为云开发者联盟

数据处理 模型 音频 语言情感分析 INTERSPEECH2020

LiteOS内核源码分析:任务栈信息

华为云开发者联盟

LiteOS 任务栈 栈指针 LOS_StackInfo LOS_Task

有道云笔记新版编辑器架构设计(下)

有道技术团队

架构 大前端

ZooKeeper 会话的秘密

HelloGitHub

Java zookeeper ZooKeeper原理 zk

Rust从0到1-所有权-概念介绍

rust 所有权

一周信创舆情观察(3.22~3.28)

统小信uos

gorm源码阅读之callback

Geek_7nijc5

Go 语言 gorm

AIOps 让「事件管理」变得更加智能

睿象云

AIOPS 告警管理

华为帐号服务学习笔记(二):OAuth2.0协议详解

Coding狙击

android 华为 OAuth 2.0 HMS

华为帐号服务学习笔记(一):什么是HMS,什么是华为帐号服务

Coding狙击

android HMS

Uniswap v3揭开真面目NA公链(Nirvana)NAC公链表示不服

区块链第一资讯

答题拿奖两不误:华为云知乎金牌答题官,就是你!

华为云开发者联盟

程序员 华为云 知乎答题 答案 金牌答题官

2021年企业需要了解的和云计算相关的6大趋势

云计算

RUOYI 框架教程 12| 若依视图解决多表查询,就是这么简单!

Java_若依框架教程

Java 技术 Ruoyi 框架 若依

用PyTorch单挑全世界,特斯拉是如何实现自动驾驶的?_大数据_Trent Eady_InfoQ精选文章