前段时间,Tesla负责全自动驾驶的大神Andrej Karpathy,发了一条推特,给大家展示了一个新的视觉感知项目——全景分割,这篇文章就借着这条推特和大家聊聊,Tesla全自动驾驶系统的一些工作细节,以及 Auto Labeler 自动标注系统是如何完成海量数据标记的?

Tesla自动驾驶的视觉感知系统主要依赖摄像头,通过训练神经网络来对环境进行各种识别和判定。
使用的方法是机器学习中的监督学习,也就是先把摄像头所拍到视频中的行人和车辆等全都圈出来标记好,然后拿给神经网络学习,神经网络就会记住各种车辆和行人的特征,从而实现在行驶中进行识别的目的。

接下来咱们来看Andrej Karpathy大神的这条推特,这条推特有两个部分,文字部分的大意就是Tesla的视觉团队正在搞一个新的系统,不过还处于起步阶段,未经雕琢,比较粗糙,暂时还不适合用在行车系统中,但是已经可以给自动标注系统使用了,而且使用了Tesla自家团队整理的高质量视频数据,所以产出的效果非常不错,然后就是个视频给大家看看效果。

全景分割

首先,这全景分割并不是一个固定的算法或是架构,而是对视觉感知中一类识别任务的统称。

现阶段的视觉感知,尤其是在自动驾驶这方面,主要关注的问题就是摄像头都看到了什么?分别都在哪?

主流的解决方法呢叫Instance Segmentation,实例分割,效果呢大概是这样的。

这个方法的逻辑十分简单,就是先找出物体轮廓和大概的位置,然后对这个大概的区域中的每一个像素做分类,从而实现对物体的识别,准确描绘识别物体的所在。

不过这个方法主要针对的是外形相对固定,且可数的物体,比如行人、车辆,目标这一类的。对自动驾驶来说,在路面上很多所需要的识别都是外形不确定、不可数的视频信息,比如路面、建筑物、天空之类,对这一类信息分析的方法,大多采用Semantic Segmentation,语义分割

实例分割和语义分割,这两种方法虽然相互关联,但是做法和考察的方式却很不同,所以一般把这两个方法当做是独立的任务分开处理,而将摄像头所看到的所有信息,不管是车辆、行人、马路、桥梁进行统一识别和分析的方法就是全景分割

统一识别最明显的好处就是避开了如何融合多系统所产生不同结果的问题。举个简单的例子,比如在行车时做实例分割的系统说:前面是行人,得刹车,而做语义分割的系统说:前面只有马路,继续开。你说信谁的?

其次,把多个系统整合成单一系统,有利于提高优化效率,同时降低在实际使用中的运算成本,而运算成本对现阶段Tesla硬件3.0的自动驾驶电脑来说是尤为的重要。

算力利用率

一般在讨论自动驾驶的时候,各家厂商都会对自己的硬件在算力方面着重的做宣传,毕竟算力不但直观好理解,而且也好比较。

比如说Tesla硬件3.0电脑上一块儿NPU神经网络芯片的算力在37万亿次每秒上下,而英伟达的Orin芯片,则可以达到每秒200万亿次的运算,200万亿次要比37万亿次高不少,所以从计算能力的角度上讲,Orin芯片的算力比硬件3.0的NPU强不少。

不过单纯的算力并不能评定系统的优劣,这个好比谈论汽车的动力,无论发动机有多么强大的马力,最终看的是有多少性能可以传递到轮胎上加以使用,也就是利用率的问题。

对于自动驾驶系统也是同理,算力的利用率比纯粹的算力更为重要,而在解决这个问题上,各家方案的焦点主要都放在数据存储机制和内存带宽上去。

Tesla的方案只依赖摄像头,需要处理的只是视频信息,目前来看,八个摄像头所采集的数据,在内存带宽方面还不成问题,所以Tesla硬件3.0的重点也是优势就在于其存储机制上,准确的说,是Tesla在硬件3.0上采用大容量缓存,提高运算效率。

Tesla硬件3.0给每一块儿神经网络芯片都配备了32M的静态内存,乍一听这好像没多少啊,不过静态内存和我们一般所说的,动不动就几个G的动态内存不是一回事儿。静态内存一般作为处理器的缓存来使用,直接和处理器对话,速度飞快,不过成本也很高,尤其是集成成本,一般系统的缓存也就几兆而已,所以Tesla 32M静态内存的配置就显得特别大手笔。

内存大的最直接好处就是可以一次加载更多的数据,但是Tesla还是要小心翼翼,春雨贵如油般的使用,之所以这么说,主要还是受限于神经网络的工作模式。

简单的讲,在神经网络工作时需要把参数都加载到内存中才能计算,一般来说神经网络参数文件小的几兆,大的几十个G也常有。那么Tesla全自动驾驶架构中,提供完整视觉功能的HydraNet有多大呢?

在聊这个问题之前,先来简单说说Tesla的神经网络都需要经历哪些步骤,才能从超级电脑所组成的训练营中毕业,正式加载到车辆上来使用。

量化与剪枝

首先是量化,神经网络的参数大多使用32位的浮点数及计算,这种浮点数描述精度虽然很高,但是计算起来费时费电,不适合直接用在车载系统上,于是就有了量化这个方法,把32位的浮点数用8位的整数单位来表示,这是一种映射的方法,来实现对参数体积的整体压缩。

很多硬件的都为这个方法提供支持和低耗能的优化,不过付出的代价就是在精度上的降低,毕竟八位空间比32位缩小了四倍。

对于这一点,各家应对的方法也是八仙过海,各显神通。Tesla目前的做法是使用QAT量化感知训练,把量化直接加入到训练过程中,来减小在精度上的损失。

Tesla下一步的目标,则是要使用自家推崇的新型存储格式,针对实际使用的C float 8,8位可调节浮点数,和为了神经网络训练的c float 16,16位可调节浮点数,这两个格式和Tesla的超级电脑Dojo道场系统有很密切的联系,简单的说,就是由软件自动决定和调节参数的存储格式,从而满足不同神经网络对参数的精准度和表述能力的不同需求。

除了量化还有剪枝,神经网络参数并不是所有的都有用,剪枝呢就是把用不或者是对结果影响不大的部分直接剪掉来实现给参数减肥的目的。

在经历的这些个步骤的折腾之后,我以为Tesla HydraNet的参数,说十几个G有点儿扯,不过几个G还是应该要有的,所以当得知HydraNet整个神经网络的代码加参数,只要一个G左右的时候,我是真心觉得Tesla的工程团队牛啊。

然而尽管Tesla已经把HydraNet压到1 G的尺寸,但还是没有办法一次完整的加载到硬件3.0的缓存中,这可咋整?

模型动态加载

动态加载! 就是把整个网络和参数分割成一个个小模块儿,需要用哪个就加载哪个,缓存里的模块只要计算完成就马上被清理掉,为下一个模块腾地方,这个逻辑听起来很简单,但工程上的实践绝非易事,尤其是以低延迟为限制条件的自动驾驶场景。

讲想到这一步啊,我想大家也应该看出来了,任何可以加入Tesla自动驾驶系统的部件,都必须经过各种优化,并且在使用中严格的遵守各种规则,从而实现对系统资源利用的最大化。

Auto Labeler

也就是说,能在车载系统上使用的神经网络都是经历了千锤百练,并且在工程质量和系统成熟度方面都已经达到一定的高度,这也就回到了开头Karpathy大神所说的:未经雕琢,还不适合在行车系统上使用。

说白了,就是这个做全景分割的系统,目前还做不到行车系统低运算成本、低延迟的要求,不过这并不是说这个系统没用处,恰恰相反,这个全景分割的系统在成正果之前,可以先去给 Auto Labeler —— 自动标注系统帮帮忙。

自动标注系统本身的设计初衷,就是使用高精度的神经网络来辅助 Tesla 的人工标注团队进行视频数据的标注和处理,对这些网络的要求就是在视频标记这个任务上实现接近人类甚至是超过人类的水平,所以是精度第一,体积和耗能都在其次。

按照AI Day上Tesla自己的说法,尽管 Tesla 最多时拥有上千人的标记团队,但是仍然没有办法满足对海量视频数据进行标记的需求。

根据埃隆马斯克机器制造机器的原则,Tesla很自然的做法,就是使用这千人标记团队,整理标记出来的高质量数据,来训练自动标注系统中各类使用了目前最新的研究和理论的神经网络,再由这些网络去处理Tesla从各位车主那儿收集到的海量视频数据。

这自动标注系统就好比是Tesla制造出的数据生产线,Tesla只要维护和升级这生产线,高质量的标记数据要多少有多少,而且在这自动标记系统中,同一项标注工作可以同时使用不同的算法来完成,不同算法得到的结果直接进行对比,相互验证,从而不停的迭代进化。

同时自动标注系统拥有一定在时间线上的优势,可以实现对预测任务的自我验证。咱们来举个不太准确的例子,比如在一段30秒的视频中,行人从左到右横穿马路,做运动预测的系统,就可以用前两秒来学习和预测第三秒,而第三秒的视频信息咱们已经有了,可以直接和系统做的预测做对比,预测错了就打回去重新,预测对了就继续,接着用第二和第三秒预测第四秒,周而复始地实现自己学习自己验证的目的。

最后,总结一下,Tesla在视觉感知系统上所取得的成就可以说是突飞猛进,而感知系统上只依赖视觉系统的选择,也使得Tesla在全自动驾驶的实现策略上和其他厂商形成了本质的区别,不只是不使用激光雷达这一类主动传感器那么简单。

深度探秘 从 Auto Labeler 挖掘 Tesla 全自动驾驶的工作机制相关推荐

  1. Tesla 以 FSD 全自动驾驶为起点的布局

    Tesla在全自动驾驶方面的策略已经和其他厂商形成了本质上的不同,不只是不使用激光雷达这一类主动传感器那么简单,而是要借此实现能够泛化.通用的人工智能,这篇文章就借着全自动驾驶这个内容深入聊聊,Tes ...

  2. 全自动驾驶“生死时速”,特斯拉收购计算机视觉创企DeepScale

    2019/10/03 13:18 完全解放,对于自动驾驶行业来说,就是"生死线". 10月1日据美国媒体CNBC报道,电动汽车公司特斯拉(Tesla)正在收购硅谷计算机视觉初创企业 ...

  3. PyTorch 在 Tesla 自动驾驶中的应用 —— Andrej Karpathy

    本文翻译自2019年 Andrej Karpathy 在 PyTorch 的演讲,视频链接:PyTorch at Tesla - Andrej Karpathy, Tesla 大家好,我是Andrej ...

  4. 估值被砍700亿美元后,Waymo发重磅公开信:即将推出全自动驾驶打车服务

    (图片源自 Waymo 官网) 编译 | 夕颜 出品 | AI科技大本营(ID:rgznai100) 近日,据 Reddit 盛传的一封电子邮件副本显示,Alphabet 旗下的自动驾驶汽车公司 Wa ...

  5. 英伟达为全自动驾驶汽车打造AI计算机,计算力达上代10倍

    陈桦 夏乙 编译整理 量子位 出品 | 公众号 QbitAI 英伟达的"GTC全球巡演",昨天到了欧洲站.当然,除了和当地开发者沟通感情.和粉丝亲切握手之外,也少不了要搞个大新闻. ...

  6. 造车 8 年,苹果“认输”了:放弃 L 5 级全自动驾驶,售价低于 70 万,将于 2026 年推出...

    回想 2007 年,乔布斯曾公开表示:"我们(苹果)有平台去设计好一辆车,在不久的将来我们要打造一款汽车." 而这个"不久的将来",直至 2022 年底还未见踪 ...

  7. 太难了!谷歌无人车老大承认遥遥无期,全自动驾驶寒冬将至?

    文章经授权转载自新智元(ID:AI_era) 最近的风声似乎对自动驾驶不利.Waymo掌门人和苹果联合创始人都认为,自动驾驶普及还要几十年.之前,不少公司都把2019年作为全自动驾驶汽车投入运营的关键 ...

  8. 马斯克将于8月推出Autopilot新版本,实现全自动驾驶

    内容来源:ATYUN AI平台 可能Autopilot听起来像是它可以自动驾驶特斯拉汽车,但它目前仍然是半自动的. 特斯拉首席执行官马斯克声称,新的特斯拉软件更新将在8月份推出,这将为Autopilo ...

  9. 全自动驾驶汽车的技术与未来

    2015年底上市的 Genesis EQ900的高速公路驾驶辅助系统 (HAD, Highway Driving Assist System),是韩国国内最初展示的自动驾驶汽车技术,从那时候开始捷尼赛 ...

最新文章

  1. mongoose简单使用
  2. 变态跳台阶,很难很难,终于想出来了,附推导过程,为自己鼓掌
  3. 流浪不是我的初衷 ... ...
  4. php文本文件操作,文本文件操作的php类
  5. 分享3个数据分析实战项目(附最新资料包)
  6. 应用迁移方案_Kubernetes如何成为迁移旧版应用程序的解决方案
  7. 【恋上数据结构】排序算法大全
  8. Postgres数据库报错:FATAL: Peer authentication failed for user “zabbix“ Previous connection kept
  9. [Python] 矩阵拼接 np.c_[a,b]和np.r_[a,b]
  10. Mysql之InnoDB之更换表空间
  11. javaMail实现邮件发送
  12. 《电路》邱关源 思维导图 第四章-电路定理
  13. HTTP的基础知识——HTTP协议
  14. 三菱FX3G和台达,施耐德两台变频器的通讯示例
  15. android root工具排行榜,可root任何机?史上最强安卓root工具出炉
  16. 第十一周助教工作总结——NWNU李泓毅
  17. MHL中的packedpixel概念
  18. springboot 使用 Spring Boot WebSocket 创建聊天室 2-11
  19. 教你一招更改视频竖版与横版的技巧
  20. nginx trac mysql svn_TRAC 整合已有的SVN目录

热门文章

  1. 复习上学期的HTML+CSS(1)
  2. 浅谈python的对象的三大特性之封装
  3. WebStorm For Mac下载及破解方法
  4. Linux select TCP并发服务器与客户端编程
  5. [MySql] MySQL的点点滴滴
  6. 【Vegas原创】GridView修改表头,并导出Excel(C#版)
  7. python打开文件夹的权限_python修改linux中文件(文件夹)的权限属性操作
  8. Java黑皮书课后题第3章:3.2(游戏:将三个数相加)程序清单3-1中的程序产生2个整数并提示用户输入这两个整数的和。修改该程序使之能产生三个个位数整数,提示用户输入这三个整数的和
  9. php接收arduino向服务器发来的请求
  10. 程序员面试100题之十三:求二叉查找树的镜像