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

    文章

    183

    浏览量

    20418
  • 自动驾驶
    +关注

    关注

    791

    文章

    14667

    浏览量

    176382
  • Autopilot
    +关注

    关注

    0

    文章

    44

    浏览量

    7249

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    请问如何利用 Keil 分析 MCU 堆栈空间?

    如何利用 Keil 分析 MCU 堆栈空间?
    发表于 11-26 07:38

    堆栈的定义,堆栈的使用方法

    堆栈的定义 堆栈也是用户使用的存储器的一部分,用于存放临时性的数据和一些其他信息。堆栈段的定义语法如下: 堆栈名SEGMENTSTACK (
    发表于 11-21 06:49

    堆栈指针SP介绍

    SP 堆栈指针:8位寄存器,用来指示堆栈的位置,可由软件修改。 堆栈的介绍堆栈是一种按“先进后出”规律操作的存储结构。不同类型的处理器其堆栈
    发表于 11-17 06:07

    同轴线束如何保障高速信号完整性?深度解析设计要点

    同轴线束的真正价值,体现在其对信号完整性的保护上,从结构设计、材料选择到连接方式,每个细节都决定了高速数据链路的稳定性;在今天这个“高速互联”的时代,线束不再是附属,而是系统性能的关键组成部分。
    的头像 发表于 11-02 15:09 1038次阅读
    极<b class='flag-5'>细</b>同轴线束如何保障高速信号完整性?深度解析设计要点

    如何精准驱动菜识别模型--基于米尔瑞芯微RK3576边缘计算盒

    ❝ 在人工智能与边缘计算深度融合的今天,将AI模型高效部署于终端设备已成为产业智能化的关键。本文将分享基于米尔MYD-LR3576边缘计算盒子部署菜识别安卓Demo的实战经验。该设备凭借其内
    发表于 10-31 21:19

    米尔RK3576边缘计算盒精准驱动菜识别模型性能强悍

    ❝在人工智能与边缘计算深度融合的今天,将AI模型高效部署于终端设备已成为产业智能化的关键。本文将分享基于米尔MYD-LR3576边缘计算盒子部署菜识别安卓Demo的实战经验。该设备凭借其内置的强劲
    的头像 发表于 10-30 08:05 4570次阅读
    米尔RK3576边缘计算盒精准驱动菜<b class='flag-5'>品</b><b class='flag-5'>识别</b>模型性能强悍

    空闲线程堆栈出现内存溢出的问题,怎么解决?

    rtthread版本: 5.1.0 硬件: stm32f407vgt6 具体我也不知道什么原因引起的, 目前将堆栈调到1024后能为稳定运行 更新 设置1024堆栈, 运行久了也不行 我有什么操作会影响到空闲线程?
    发表于 10-11 10:36

    USB3.1传输能用极同轴线吗?要注意哪些选型误区?

    同轴线束确实能够用于 USB3.1 的高速传输,但前提是做好完整的设计与验证工作。若能避开“线越越好”这样的误区,合理平衡电气性能、机械性能与工艺可行性,才能真正发挥极同轴线束在小型化、高速化产品中的优势。
    的头像 发表于 09-26 14:28 1321次阅读
    USB3.1传输能用极<b class='flag-5'>细</b>同轴线吗?要注意哪些选型误区?

    工程师如何为 MIPI 接口选择极同轴线束?

    在工业视觉系统中,MIPI D-PHY 或 C-PHY 接口配合极同轴线束,可实现 4K、8K 高清图像的低误码传输,这对自动化检测、AI 识别尤为重要。为 MIPI 接口选择合适的极同轴线束
    的头像 发表于 09-21 16:56 1357次阅读
    工程师如何为 MIPI 接口选择极<b class='flag-5'>细</b>同轴线束?

    同轴线束能做到多?揭秘高速互连中的极限工艺

    同轴线束不仅可以做到“极”,而且在这种微型化设计中,还能保持高速信号的完整性与传输稳定性。它已经成为现代电子产品小型化和高性能化的幕后功臣。随着材料与工艺的不断提升,未来的极同轴线束必将突破更小的直径极限,并在更多前沿应
    的头像 发表于 09-08 15:02 1167次阅读
    极<b class='flag-5'>细</b>同轴线束能做到多<b class='flag-5'>细</b>?揭秘高速互连中的极限工艺

    同轴线束能否传输电源?设计中的应用边界解析

    同轴线束用于高速信号通道,电源与地则通过其他更合适的线材来实现,从而保证系统的整体性能和可靠性;极同轴线束并非不能传输电源,而是受限于线芯尺寸和散热条件,不适合承载大电流。
    的头像 发表于 08-24 15:26 1091次阅读
    极<b class='flag-5'>细</b>同轴线束能否传输电源?设计中的应用边界解析

    同轴线束(micro coaxial cable)常见的使用场景有哪些?

    无论是消费电子、医疗检测,还是工业机器人、航空航天或测试测量,极同轴线束都以其出色的电气性能和柔性布线能力成为核心互连方案。在未来更高速、更小型化的产品趋势中,极同轴线束的重要性只会愈加突出。
    的头像 发表于 08-23 13:40 1284次阅读
    极<b class='flag-5'>细</b>同轴线束(micro coaxial cable)常见的使用场景有哪些?

    AFE5801调增益不起作用的原因?怎么解决?

    采用STATIC PGA模式配置AFE5801芯片时,99【2:0】为调增益配置单元,写如0代表0dB,写入7代表0.875dB。但是写入0和7时采集到的数据大小没有发生变化,不知道为什么?
    发表于 01-24 08:00

    AFE5801调增益不起作用是什么原因导致的?

    采用STATIC PGA模式配置AFE5801芯片时,99【2:0】为调增益配置单元,99地址单元分别写的是24\'h990009和24\'h99000f,分别对应着0.125dB
    发表于 01-24 07:01

    AUTOSAR中通信堆栈的配置 AUTOSAR通信模块测试方法

    )的开发和生产。通信堆栈是AUTOSAR架构中的关键组成部分,负责处理ECU之间的通信。 AUTOSAR中通信堆栈的配置 通信模型 : AUTOSAR定义了一种分层的通信模型,包括应用层、诊断层、网络
    的头像 发表于 12-17 15:01 1512次阅读