0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Autopilot的识别堆栈内深挖细品

jf_C6sANWk1 来源:阿宝1990 作者:阿宝1990 2022-10-20 10:16 次阅读

在上期文章中,我们从Autopilot的感知堆栈的backbone网络开始分析,从raw data到RegNet,再到BiFPN,最后来到多头的Head结构,这就基本上给HydraNets的框架结构定了性。在Tesla AI Day结束之后,很多关心自动驾驶产业发展的人,观后感普遍是智商不够,看不懂。而实际上,如果读者不进入实际的研发领域,要理解Autopilot的工作机制、框架和基本脉络,实际上并没有那么困难。而对于Autopilot整体框架的理解,一旦有心得,对于自动驾驶行业的从业者、爱好者和政策关注者,其实都是大有裨益的。

而作为一个典型的跨学科产业,传统封闭知识结构的限制让很多初次涉足自动驾驶行业的新手来说,都会感到明显困难。一个突出的问题就是交叉学科概念实在太多太新了,往往名词都看不懂,就不要说深究了。所以,小编写这个系列文章的初衷就是尽可能拉低阅读门槛,让每个感兴趣的读者开卷有益。毕竟,Tesla这种具备开放心态的先锋企业,不是总能遇得到的。

所以关注这个系列的读者,在看系列中任何一篇文章的时候,都可以联系系列中的其它文章串起来看,各种新鲜的名词解释和上下文串讲会协助诸位和小编一起跑完这个理解的过程的。

086ba698-5018-11ed-a3b6-dac502259ad0.png

图一【Tesla transformer-33.png】来自论文《EfficientDet: Scalable and Efficient ObjectDetection》中的插图,获取URLhttps://arxiv.org/pdf/1911.09070.pdf;

这是上一篇文章中我们所讲的关键点BiFPN网络结构,其中BiFPN和其他上下游的网络结构交代得比较清楚,所以小编在这里再强调一次。上图左半部分为Google的EfficientNet,是一种典型的层次化的CNN Backbone结构,上图中显示为7层,每一层的分辨率逐渐降低,但是特征Feature map也是在这个过程中通过卷积计算来实现搜集的。重要的是,我们可以清晰地观察到,从第3层到第7层的Feature map数据被依次输入到BiFPN网络内,从而可以利用BiFPN的融合结构设计,将不同层次的feature按照预定义的规则融合到一起,制造更准确的识别结果。

上图(图一)的最右侧显示了这个整体模型中的Task Head,显示了优化后的backbone所提供的feature map最终被用于何种任务的实现。其中一个是分类任务Class,另一个是定位任务Box共两个任务。它们两个共享了EfficentNet backbone+BiFPN的特征识别结果,实现了算力的共享和高效利用。

在一个典型的CNN网络中(以下图为例是VGG16)另一个直观的案例,原始的Input image在后续的一些列卷积处理之后,最终按照任务的要求实现Output输出。通常讲,CNN被用于网络内容的识别,并在识别后按照识别结果的类别来报告输出。下图模型就是干这个的。

089fc2ca-5018-11ed-a3b6-dac502259ad0.png

图二【Tesla transformer-34.png】来自youtube.com中账号@denisdmitriev的VGG16 Neural Networkvisualization视频的插图,获取URLhttps://www.youtube.com/watch?v=RNnKtNrsrmg;

如果将这个VGG16的卷积模型拉伸开来,就可以清晰地展示出每一个卷积层、池化层的输出直观计算(or感知)结果,如下:

09d09e62-5018-11ed-a3b6-dac502259ad0.png

0a5b61a0-5018-11ed-a3b6-dac502259ad0.png

图三【Tesla transformer-35、36.png】来自youtube.com中账号@denis dmitriev的VGG16 Neural Network visualization视频的插图,获取URLhttps://www.youtube.com/watch?v=RNnKtNrsrmg;

由于不同卷积算子的卷积计算,原始图像中的苹果(或者洋葱),其不同的特征被捕捉出来,比如颜色、形状、表皮类型、根茎形状,甚至不同物种常常呈现的不同的凹凸不平的特点,都被CNN抓出来,并通过BiFPN类似的特征融合机制形成最终的认知,或者提供给后端Task Head有效的、良好的认知素材。从这个流程上看,CNN对于图像信息特征的捕捉方式,几乎和人类对于图像的感知方式一致了。当然,人类的感知能力除了视觉信息分析,我们还具备触觉、味觉和更一般的“世界知识体系”……这是AI暂时所做不到的。比如,两个在外观上完全一致的苹果和洋葱,人类视觉无法判断分类结果,自然会拿在手上掂量一下,甚至闻一下、尝一口,最终总是可以找到正确答案的。

之前在这个系列的第一篇文章里,我们谈到过AI技术演进的下一个方向,也有对于多模态信息的综合感知,那是因为Transformer体现出了一定的多模态数据处理能力。其实CNN技术本身也有同时被应用于图形和语言的信息处理领域,但显然自动驾驶领域内的感知问题,在当前阶段还是应该关注图形数据(视觉传感器)为核心,解决了视觉问题,大概99%的问题都被解决了。在此基础之上的更进一步感知多模态信息,才扎实。

0a87da14-5018-11ed-a3b6-dac502259ad0.png

图四【Tesla transformer-37.png】来自Tesla AI day主题演讲视频截图,URLhttps://www.youtube.com/watch?v=j0z4FweCy4M&t=4115s;

Backbone+Task heads的整体架构如上图,这就是标准的多任务系统HydraNets。在这个多任务Heads框架中从左到右分别是Object Detection Task(应该包含静态和动态所有道路目标的识别)、Traffic Lights Task(交通灯和其它交通标识的识别)和Lane Prediction Task(车道线及可行驶区域识别)。实际上FSD beta现在这个阶段,使用到CNN backbone的任务一定不止以上三个。细分任务的原则是一个Head task无法处理和涵盖一个类别的任务,就需要拥有独立的Head Task。比如小编推测在Lan Prediction Task中,可能不仅仅是各种车道线的识别和预测,还有可能包含同样关键的马路边缘路缘石边界的识别。在这个具象的Task中,系统框图只给出了regression方法(reg),在对于车道线的识别这是一个普遍的方法,因为车道线基本上可以用一个固定的二次函数、三次函数既可以描述出车道线走势,所以机器学习里涉及的车道线识别方法,使用regression回归方法来预测车道线的多项式系数即可,这是个惯用的标准做法。但对于马路边缘路缘石构成的可行驶区域边界的识别,因为路缘石边界的不规则属性,可能无法服用regression方法。感兴趣的读者可以参考PolyLaneNet车道线识别的方法,互联网可查。

0ab76694-5018-11ed-a3b6-dac502259ad0.png

图五【Tesla transformer-38.png】来自Youtube站点博主@Frenchie的测试视频截图,URLhttps://www.youtube.com/watch?v=rfTpt8phxL4;

上图可以观察到FSD beta的中控屏幕显示的红色曲线为路缘石线条,由于基建处理路缘石的考量不仅仅是勾画车辆可行驶区域,相对地也要考虑行人道上的各种设备需求,因此它并不是一直和车道线保持并行,会有非规则曲线的场景出现。上图中这个场景下,显示的识别结果出现错误,且这个非规则的路缘石不可能用低次曲线拟合出来。

对于object和traffic light的预测分类(属性)和位置,则使用了classification、regression和attribution方法。类似的可以借鉴和查询的论文就更多了,YOLO系列就是一个完美的参考,互联网可查。

除了多头的任务本身,图四所显示的多任务架构还需要注意的是Tesla在Backbone和Head之间插入了一个叫做multi-scale features的cache环节。这个环节在模型的测试过程中扮演了关键角色。按照Karpathy的解释,训练过程如下:

1 首先进行的是end to end的联合训练,输入是视觉raw data,输出是所有任务的输出。监督所有子任务的准确度,并根据准确度进行干预(系统自动执行误差的反向传播)。这样的训练结果将会导致所有子任务的“集体最优结果”;

2 end to end的联合训练会导致子任务集体最优,但因为子任务之间不可能做到逻辑上的完全隔离,因此集体最优一定不是单个子任务的“个体最优结果”,因此需要以单个任务为核心进行调优fine tunning;

3 以单个子任务为核心的fine tunning的输入为经过联合调优后确立的backbone所输出的multi-scale features,从位于中部的那个cache里直接获取;输出则为各自子任务的输出,还是经过监督学习机制,最后将每个子任务收敛到各自的最优状态;

4 然后重复1的end to end联合训练……

上述这个迭代流程可以确保网络整体效能最优,且各个子任务的准确度最佳。横向看,这并非Tesla的专利(小编:尽管Tesla有训练多任务系统的一些专利,我们之前的文章有涉及过),业内处理自动驾驶系统内的多任务,大抵如此手法。但knowhow在于如何处理车载硬件CPU算力——训练方法的有效性——最终模型输出的准确性,这三者之间的矛盾,达到和谐统一。这个Tesla当然不会细说,就比如这个cache内部的multi-scale feature,到底如何分配给不同的子任务可以协助子任务的预测水平实现最优?这就是Tesla的秘密了。

别的不好说,但是显然的是,谁的数据(有效数据)最多最丰富最极端corner,谁就最有把握接近最佳模型。Tesla虽然扔掉了所有的毫米波雷达回波数据,也不屑于Lidar的点云数据,但在视觉领域的积累应该还是有底气的。

截至目前,HydraNets架构已经可以支撑标准的L2自动驾驶业务了。对于Tesla来说,自从和Mobileye分手之后,HydraNets的框架就已经(也必须)开始部署了,无非是在框架内选择不同的具体技术进行性能更新而已。但实际上如果要往更高层级的自动驾驶自治迈进,对于HydraNets架构的扩展就势在必行了。

0baa00e8-5018-11ed-a3b6-dac502259ad0.png

0c269db0-5018-11ed-a3b6-dac502259ad0.png

图六【Tesla transformer-39、40.png】来自Tesla AI day主题演讲视频截图,URLhttps://www.youtube.com/watch?v=j0z4FweCy4M&t=4115s;

以上两张图代表了两种不同级别的自动驾驶应用,想必各位读者已经耳熟能详了。前者是典型的单目摄像头所获取的信息,以及背后的多任务HydraNets NN架构的识别结果。从Mobileye开始普及典型的Level-2自动驾驶系统以来,Tesla Autopilot就一直是这个思路。唯一的变化就是2016年脱离和Mobileye的合作之后,Autopilot有一个阶段是采用了Camera+mm Radar的传感器组合,2021年上半年则转向Full vision。

上图前者的识别结果确实丰富,我们有过专门的公众号文章对Autopilot在这个阶段对于单目视觉信息的识别做了解读。但这个识别结果,哪怕融合了毫米波雷达的速度信息,支持更高等级的自动驾驶任务也是不够用的。所以才有了上图后者的需求,车辆哪怕是在封闭场地和低速的限制条件下,例如Smart summon(停车场智能召唤功能),也必须要掌握主车四周的全视角道路状态(可行驶区域),才有可能进行路径规划,并发现召唤者。注:上图中的九个视觉输出中有两个黑块,意味着车身一共8个摄像头,supper narrow遥距摄像头并在Smart summon中参与道路3D信息捕获和可行驶道路区域的识别。

对于Tesla Autopilot系统的识别堆栈谈到这里,读者应当注意这个主题的本质:花多少钱办多少事儿。迄今为止对于CNN Backbone和纯视觉的坚持,可以在大部分的Level-2任务上得到技术落地和回报,并在更大范畴的技术框架上一锤定音、不走回头路以适应越来越高的NN技术占比对于庞大有效的数据量的需求。只要这一步走对了,小编的角度看,Tesla就算成功了一半。自动驾驶系统在未来能走多远?走多快?这就不仅仅是一家公司的事情了,很多问题也还是基础科学、科学技术产业化的问题。举个非常简单的例子,纯视觉如何克服目标深度信息预测的准确度和时效性问题?神经网络算子新贵Transformer转战视觉信息处理的突破,是如何提供给Tesla一个良好的视觉场转化工具的?这里面有偶然,但更多是必然,我们相信只要走在正确的路上,困难就总是暂时的。

具体而言,当Tesla意识到前向单目摄像头所捕获的视觉信息,哪怕对其再精耕细作和堆砌大量数据训练出来的模型,这个能力进展也无法处理更高等级的自动驾驶技术需求的时候,并没有将现有识别堆栈推倒重来,而是继续向前选择了显性的C++人工代码试图提供车身四周完整的3D视角视觉信息……如下图:

0c5ca266-5018-11ed-a3b6-dac502259ad0.png

图七【Tesla transformer-41.png】来自Tesla AI day主题演讲视频截图,URLhttps://www.youtube.com/watch?v=j0z4FweCy4M&t=4115s;

这个被叫做“Occupancy Tracker”的人工代码被嵌入到Smart summon这个应用的Task head底部,完成从CNN backbone提取feature map后,需要参照车身摄像头的几何尺寸将其转换到路径规划所需要的Birds-view map。

360度的俯视图Birds-view map在大多数Level-2自动驾驶应用场景中,并非必要。但在更高等级的自动驾驶系统中,多传感器数据处理结果(小编:同构或者异构传感器都可以)终结在Birds-view map俯视图结构上,并提供给后端路径规划,还是最合适的。人类构建的公路系统是严格符合“连续平面”属性的,因此忽略高度信息的俯视图在规划中,比车载相机获取的或略深度信息的投影平面,更能表现出道路上各种物体的相对位置关系。但问题在于如果路面拓扑过于复杂,且视觉传感器会因为各种遮挡场景而只获取部分信息,在这个基础上,人工代码往往力不从心。

对于上图七的观察我们就可以看到,在CNN backbone上增加Birds-view map获取的“Occupancy Tracker”代码Head之后,可以实现从camera视觉信息到俯视图的转换,但问题同样明显:

1 Karpathy标识这段代码功能非常难以落地,具体表现为对于场景适应能力很差,可能在一部分场景下表现尚可,但一旦出现特殊的道路拓扑,就会失效;

2 精度问题。

上图七左上角是Birds-view map的输出结果,车辆左转弯之后,前方两侧都出现大面积的无法识别状态,右后侧出现识别精度大误差状态(红色线条重叠)。读者可以想象,一旦车速增加、出现大面积的路边遮挡物和道路拓扑剧烈改变等等,识别效果会进一步恶化。

0ca974d8-5018-11ed-a3b6-dac502259ad0.png

图八【Tesla transformer-42.png】来自Tesla AI day主题演讲视频截图,URLhttps://www.youtube.com/watch?v=j0z4FweCy4M&t=4115s;

如果我们从smart summon应用再往前走一步,在所有道路条件下提供投影成像到Birds-view map的转换,再从路缘石边界(上图红色线条)扩展到对于车道线(上图蓝色箭头)的识别和转换视角,则之前的Occupancy tracker所面临的问题会被进一步放大。图八中,我们可以看到在camera投影视图中的路缘石边缘识别结果,因为天然在精度上的误差,经由精确的几何变换后,在俯视图上的误差得到进一步放大,甚至到会引发解读歧义的问题:认真看投影视图中的红色线条,是对路缘石的一种近似的拟合结果。CNN Backbone的各种CNN识别结果,在单目镜头的视觉投影信息中,只能依赖CNN的对于人类智能模拟之后的近似。Camera不可能提供和Lidar等同的测量精度,Camera+CNN更多意义上的操作本质是“预测”。因此,建立在预测结果上,对于近似的预测结果进行“硬桥硬马”的集合转换,结果就只能是这个水平。

图中的黄色和绿色箭头所指位置,投影成像的线条近似,被转换为以车辆摄像头为圆心的圆弧段,没错,Occupancy Tracker认为线段上的每一个点,到摄像头的距离都是一样的…….由此,更新Occupancy Tracker代码,使用同质的NN网络来模拟人类的预测行为,来完成这个视场转换任务,就是Autopilot识别堆栈的下一个核心重点了!

审核编辑 :李倩

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

    关注

    0

    文章

    171

    浏览量

    19530
  • 自动驾驶
    +关注

    关注

    773

    文章

    13056

    浏览量

    163233
  • Autopilot
    +关注

    关注

    0

    文章

    43

    浏览量

    6799

原文标题:Tesla Vision背后的变形金刚——系统需要的是测量还是预测?

文章出处:【微信号:阿宝1990,微信公众号:阿宝1990】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    NHTSA启动新调查 聚焦特斯拉Autopilot升级涉及的安全问题

    据该机构对特斯拉Autopilot系统近三年的调查发现,存在“关键安全漏洞”。尽管特斯拉已发布提升安全性的软件更新,但这些更新“未纳入召回程序,亦未明确解决可能导致不合理安全风险的问题”。
    的头像 发表于 04-28 09:31 49次阅读

    微软Windows Autopilot安装耗时15个小时

    关于Windows Autopilot,微软官方解释道:“此乃一组能够设置与预先配置新设备的技术,旨在简化IT团队以及终端用户自初步部署至设备生命周期结束的操作流程。
    的头像 发表于 04-23 10:30 185次阅读

    使用STM32CubeIDE修改堆栈大小后,生成的BIN文件内容没变化是怎么回事?

    帮忙看看。 工程G473RE_T1与工程G473RE_T2的的堆栈配置 两个工程显示的RAM使用情况确定不一样,但是编译生成的bin文件通过对比工具对比发现是一样的。 在我的使用场景里,需要通过
    发表于 04-07 06:11

    TLE9893如何配置堆栈溢出检测?

    目的: 因此,根据我的理解,警戒带的下限为0x18002 320 ,而上限为0x18002 390,总共为112字节。 现在,正如链接器报告的那样,最大堆栈使用量至少为 144 字节: 因此,可以得出结论,堆栈指针必须位于我定义的保护带区域
    发表于 01-19 06:11

    韩国召回7.2万辆特斯拉汽车,Autopilot系统存安全隐患

    问题车辆占据总召回车辆数的88%,且大部分问题主要来源于特斯拉的Autopilot系统。这一先进的驾驶员辅助系统可以自行识别周围环境,并调整车速、维持安全间距及转换车道,但经检测发现其存在潜在安全隐患,即可能不能有效地发出警示声或提供相关信息。
    的头像 发表于 01-08 10:12 189次阅读

    什么是堆栈溢出?如何分配堆栈空间大小?

    前些日子bug交流群里的小哥调试了一个堆栈溢出的bug,动不动数据就被篡改了,应该也是搞得焦头烂额,头皮发麻!当时bug菌看了下,于是抛出了自己的一些调试经验,一般这样的问题80%是越界和堆栈溢出造成的,没想到还真是堆栈溢出。
    的头像 发表于 11-08 09:52 1673次阅读
    什么是<b class='flag-5'>堆栈</b>溢出?如何分配<b class='flag-5'>堆栈</b>空间大小?

    关于FreeRTOS创建任务时的堆栈问题

    usStackDepth指定堆栈大小。 请问,这个堆栈是用来干什么的? 是任务中分配的局部变量放在这个堆栈里吗? 或者是任务切换过程中保存局部变量的?
    发表于 10-31 08:08

    Kria机器人堆栈

    电子发烧友网站提供《Kria机器人堆栈.pdf》资料免费下载
    发表于 09-14 11:36 0次下载
    Kria机器人<b class='flag-5'>堆栈</b>

    C16x中的堆栈

    80C166的基本设计故意偏向于允许像C这样的结构化语言比在较老的CPU上更高效地运行。 最有用的指令集功能之一是提供16个额外的堆栈指针。 这些是MOV[Ri+]的结果,mem指令非常适合创建本地
    发表于 09-04 07:05

    单片机中堆栈的作用是什么?

    我们都知道堆栈位于RAM中,现在MCU的RAM相对较大(几十上百K),所以分配的堆栈也是足够大,很多人都不怎么关注这个堆栈的大小。
    发表于 08-22 09:11 1286次阅读
    单片机中<b class='flag-5'>堆栈</b>的作用是什么?

    堆栈内存和堆内存之间的区别

    编写有效的代码需要了解堆栈和堆内存,这使其成为学习编程的重要组成部分。不仅如此,新程序员或职场老手都应该完全熟悉堆栈内存和堆内存之间的区别,以便编写有效且优化的代码。
    发表于 08-07 12:23 376次阅读
    <b class='flag-5'>堆栈</b>内存和堆内存之间的区别

    Embedded Studio堆栈溢出预防功能

    为了识别运行的嵌入式系统中的堆栈溢出问题,SEGGER编译器通过为每个函数生成检测代码的方式来检查堆栈溢出。该功能可以使用命令行开关-mstack-overflow-check来使能。对于安全系统,必须在溢出的
    发表于 07-14 11:08 395次阅读

    Embedded Studio堆栈溢出预防简析

    为了识别运行的嵌入式系统中的堆栈溢出问题,SEGGER编译器通过为每个函数生成检测代码的方式来检查堆栈溢出。
    的头像 发表于 07-14 11:07 539次阅读

    MCU在执行指令的过程中,是如何选择堆栈指针呢?

    我们知道 Cortex-M3 系列单片机内部有双堆栈机制。即 Cortex‐M3 拥有两个堆栈指针:主堆栈(MSP)和进程堆栈(PSP)。任一时刻只能使用其中的一个。通过控制寄存器 C
    发表于 07-12 11:24 1403次阅读
    MCU在执行指令的过程中,是如何选择<b class='flag-5'>堆栈</b>指针呢?

    Office M5堆栈助手开源

    电子发烧友网站提供《Office M5堆栈助手开源.zip》资料免费下载
    发表于 06-19 10:12 0次下载
    Office M5<b class='flag-5'>堆栈</b>助手开源